diff --git a/.github/update.log b/.github/update.log index f00c0b9b77..1641f9b02f 100644 --- a/.github/update.log +++ b/.github/update.log @@ -688,3 +688,4 @@ Update On Wed Jun 26 20:32:07 CEST 2024 Update On Thu Jun 27 20:29:48 CEST 2024 Update On Fri Jun 28 20:30:26 CEST 2024 Update On Sat Jun 29 20:29:36 CEST 2024 +Update On Sun Jun 30 20:30:33 CEST 2024 diff --git a/clash-nyanpasu/package.json b/clash-nyanpasu/package.json index 9fb7a0fa88..57dc9eb2d8 100644 --- a/clash-nyanpasu/package.json +++ b/clash-nyanpasu/package.json @@ -91,7 +91,7 @@ "eslint-plugin-react": "7.34.3", "lint-staged": "15.2.7", "npm-run-all2": "6.2.0", - "postcss": "8.4.38", + "postcss": "8.4.39", "postcss-html": "1.7.0", "postcss-import": "16.1.0", "postcss-scss": "4.0.9", diff --git a/clash-nyanpasu/pnpm-lock.yaml b/clash-nyanpasu/pnpm-lock.yaml index 39a27cf032..eab1ae2878 100644 --- a/clash-nyanpasu/pnpm-lock.yaml +++ b/clash-nyanpasu/pnpm-lock.yaml @@ -42,7 +42,7 @@ importers: version: 20.14.9 autoprefixer: specifier: 10.4.19 - version: 10.4.19(postcss@8.4.38) + version: 10.4.19(postcss@8.4.39) conventional-changelog-conventionalcommits: specifier: 8.0.0 version: 8.0.0 @@ -89,17 +89,17 @@ importers: specifier: 6.2.0 version: 6.2.0 postcss: - specifier: 8.4.38 - version: 8.4.38 + specifier: 8.4.39 + version: 8.4.39 postcss-html: specifier: 1.7.0 version: 1.7.0 postcss-import: specifier: 16.1.0 - version: 16.1.0(postcss@8.4.38) + version: 16.1.0(postcss@8.4.39) postcss-scss: specifier: 4.0.9 - version: 4.0.9(postcss@8.4.38) + version: 4.0.9(postcss@8.4.39) prettier: specifier: 3.3.2 version: 3.3.2 @@ -326,7 +326,7 @@ importers: version: vite-plugin-monaco-editor-new@1.1.3(monaco-editor@0.50.0) vite-plugin-sass-dts: specifier: 1.3.22 - version: 1.3.22(postcss@8.4.38)(prettier@3.3.2)(sass@1.77.6)(vite@5.3.2(@types/node@20.14.9)(less@4.2.0)(sass@1.77.6)(stylus@0.62.0)) + version: 1.3.22(postcss@8.4.39)(prettier@3.3.2)(sass@1.77.6)(vite@5.3.2(@types/node@20.14.9)(less@4.2.0)(sass@1.77.6)(stylus@0.62.0)) vite-plugin-svgr: specifier: 4.2.0 version: 4.2.0(rollup@4.17.2)(typescript@5.5.2)(vite@5.3.2(@types/node@20.14.9)(less@4.2.0)(sass@1.77.6)(stylus@0.62.0)) @@ -4780,6 +4780,10 @@ packages: resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} engines: {node: ^10 || ^12 || >=14} + postcss@8.4.39: + resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==} + engines: {node: ^10 || ^12 || >=14} + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -7434,11 +7438,11 @@ snapshots: '@types/postcss-modules-local-by-default@4.0.2': dependencies: - postcss: 8.4.38 + postcss: 8.4.39 '@types/postcss-modules-scope@3.0.4': dependencies: - postcss: 8.4.38 + postcss: 8.4.39 '@types/prop-types@15.7.12': {} @@ -7749,14 +7753,14 @@ snapshots: asynckit@0.4.0: {} - autoprefixer@10.4.19(postcss@8.4.38): + autoprefixer@10.4.19(postcss@8.4.39): dependencies: browserslist: 4.23.0 caniuse-lite: 1.0.30001616 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.1 - postcss: 8.4.38 + postcss: 8.4.39 postcss-value-parser: 4.2.0 autoprefixer@9.8.8: @@ -10375,19 +10379,19 @@ snapshots: dependencies: htmlparser2: 8.0.2 js-tokens: 9.0.0 - postcss: 8.4.38 - postcss-safe-parser: 6.0.0(postcss@8.4.38) + postcss: 8.4.39 + postcss-safe-parser: 6.0.0(postcss@8.4.39) - postcss-import@15.1.0(postcss@8.4.38): + postcss-import@15.1.0(postcss@8.4.39): dependencies: - postcss: 8.4.38 + postcss: 8.4.39 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 - postcss-import@16.1.0(postcss@8.4.38): + postcss-import@16.1.0(postcss@8.4.39): dependencies: - postcss: 8.4.38 + postcss: 8.4.39 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 @@ -10397,10 +10401,10 @@ snapshots: camelcase-css: 2.0.1 postcss: 7.0.39 - postcss-js@4.0.1(postcss@8.4.38): + postcss-js@4.0.1(postcss@8.4.39): dependencies: camelcase-css: 2.0.1 - postcss: 8.4.38 + postcss: 8.4.39 postcss-load-config@3.1.4(postcss@8.4.38): dependencies: @@ -10409,12 +10413,12 @@ snapshots: optionalDependencies: postcss: 8.4.38 - postcss-load-config@4.0.2(postcss@8.4.38): + postcss-load-config@4.0.2(postcss@8.4.39): dependencies: lilconfig: 3.1.1 yaml: 2.4.2 optionalDependencies: - postcss: 8.4.38 + postcss: 8.4.39 postcss-media-query-parser@0.2.3: {} @@ -10439,24 +10443,24 @@ snapshots: postcss: 7.0.39 postcss-selector-parser: 6.1.0 - postcss-nested@6.0.1(postcss@8.4.38): + postcss-nested@6.0.1(postcss@8.4.39): dependencies: - postcss: 8.4.38 + postcss: 8.4.39 postcss-selector-parser: 6.1.0 postcss-resolve-nested-selector@0.1.1: {} - postcss-safe-parser@6.0.0(postcss@8.4.38): + postcss-safe-parser@6.0.0(postcss@8.4.39): dependencies: - postcss: 8.4.38 + postcss: 8.4.39 - postcss-safe-parser@7.0.0(postcss@8.4.38): + postcss-safe-parser@7.0.0(postcss@8.4.39): dependencies: - postcss: 8.4.38 + postcss: 8.4.39 - postcss-scss@4.0.9(postcss@8.4.38): + postcss-scss@4.0.9(postcss@8.4.39): dependencies: - postcss: 8.4.38 + postcss: 8.4.39 postcss-selector-parser@6.0.16: dependencies: @@ -10468,9 +10472,9 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-sorting@8.0.2(postcss@8.4.38): + postcss-sorting@8.0.2(postcss@8.4.39): dependencies: - postcss: 8.4.38 + postcss: 8.4.39 postcss-value-parser@3.3.1: {} @@ -10499,6 +10503,12 @@ snapshots: picocolors: 1.0.1 source-map-js: 1.2.0 + postcss@8.4.39: + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.1 + source-map-js: 1.2.0 + prelude-ls@1.2.1: {} prepend-http@1.0.4: {} @@ -11086,8 +11096,8 @@ snapshots: stylelint-order@6.0.4(stylelint@16.6.1(typescript@5.5.2)): dependencies: - postcss: 8.4.38 - postcss-sorting: 8.0.2(postcss@8.4.38) + postcss: 8.4.39 + postcss-sorting: 8.0.2(postcss@8.4.39) stylelint: 16.6.1(typescript@5.5.2) stylelint-scss@6.3.2(stylelint@16.6.1(typescript@5.5.2)): @@ -11128,9 +11138,9 @@ snapshots: micromatch: 4.0.7 normalize-path: 3.0.0 picocolors: 1.0.1 - postcss: 8.4.38 + postcss: 8.4.39 postcss-resolve-nested-selector: 0.1.1 - postcss-safe-parser: 7.0.0(postcss@8.4.38) + postcss-safe-parser: 7.0.0(postcss@8.4.39) postcss-selector-parser: 6.1.0 postcss-value-parser: 4.2.0 resolve-from: 5.0.0 @@ -11259,11 +11269,11 @@ snapshots: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.0.1 - postcss: 8.4.38 - postcss-import: 15.1.0(postcss@8.4.38) - postcss-js: 4.0.1(postcss@8.4.38) - postcss-load-config: 4.0.2(postcss@8.4.38) - postcss-nested: 6.0.1(postcss@8.4.38) + postcss: 8.4.39 + postcss-import: 15.1.0(postcss@8.4.39) + postcss-js: 4.0.1(postcss@8.4.39) + postcss-load-config: 4.0.2(postcss@8.4.39) + postcss-nested: 6.0.1(postcss@8.4.39) postcss-selector-parser: 6.1.0 resolve: 1.22.8 sucrase: 3.35.0 @@ -11573,10 +11583,10 @@ snapshots: esbuild: 0.19.12 monaco-editor: 0.50.0 - vite-plugin-sass-dts@1.3.22(postcss@8.4.38)(prettier@3.3.2)(sass@1.77.6)(vite@5.3.2(@types/node@20.14.9)(less@4.2.0)(sass@1.77.6)(stylus@0.62.0)): + vite-plugin-sass-dts@1.3.22(postcss@8.4.39)(prettier@3.3.2)(sass@1.77.6)(vite@5.3.2(@types/node@20.14.9)(less@4.2.0)(sass@1.77.6)(stylus@0.62.0)): dependencies: - postcss: 8.4.38 - postcss-js: 4.0.1(postcss@8.4.38) + postcss: 8.4.39 + postcss-js: 4.0.1(postcss@8.4.39) prettier: 3.3.2 sass: 1.77.6 vite: 5.3.2(@types/node@20.14.9)(less@4.2.0)(sass@1.77.6)(stylus@0.62.0) diff --git a/clash-verge-rev/.github/workflows/alpha.yml b/clash-verge-rev/.github/workflows/alpha.yml index 6579df0aa4..b799e0e467 100644 --- a/clash-verge-rev/.github/workflows/alpha.yml +++ b/clash-verge-rev/.github/workflows/alpha.yml @@ -46,9 +46,15 @@ jobs: uses: Swatinem/rust-cache@v2 with: workspaces: src-tauri + cache-all-crates: true + cache-on-failure: true - name: Install Tauri CLI - run: cargo install --git https://github.com/tauri-apps/tauri --branch 1.x tauri-cli + uses: baptiste0928/cargo-install@v3 + with: + crate: tauri-cli + git: https://github.com/tauri-apps/tauri + branch: 1.x # `branch` and `commit` are also supported - name: Install Node uses: actions/setup-node@v4 diff --git a/clash-verge-rev/.github/workflows/release.yml b/clash-verge-rev/.github/workflows/release.yml index 6e51a767bd..8f9ac8e0f7 100644 --- a/clash-verge-rev/.github/workflows/release.yml +++ b/clash-verge-rev/.github/workflows/release.yml @@ -39,9 +39,14 @@ jobs: uses: Swatinem/rust-cache@v2 with: workspaces: src-tauri + cache-all-crates: true - name: Install Tauri CLI - run: cargo install --git https://github.com/tauri-apps/tauri --branch 1.x tauri-cli + uses: baptiste0928/cargo-install@v3 + with: + crate: tauri-cli + git: https://github.com/tauri-apps/tauri + branch: 1.x # `branch` and `commit` are also supported - name: Install Node uses: actions/setup-node@v4 diff --git a/clash-verge-rev/package.json b/clash-verge-rev/package.json index ff98754816..05a39539c7 100644 --- a/clash-verge-rev/package.json +++ b/clash-verge-rev/package.json @@ -35,6 +35,7 @@ "dayjs": "1.11.5", "foxact": "^0.2.35", "i18next": "^23.11.5", + "js-yaml": "^4.1.0", "lodash-es": "^4.17.21", "meta-json-schema": "1.18.5-alpha6", "monaco-editor": "^0.49.0", @@ -46,6 +47,7 @@ "react-hook-form": "^7.52.0", "react-i18next": "^13.5.0", "react-markdown": "^9.0.1", + "react-monaco-editor": "^0.55.0", "react-router-dom": "^6.23.1", "react-transition-group": "^4.4.5", "react-virtuoso": "^4.7.11", @@ -59,6 +61,7 @@ "@tauri-apps/cli": "^1.5.14", "@types/fs-extra": "^9.0.13", "@types/js-cookie": "^3.0.6", + "@types/js-yaml": "^4.0.9", "@types/lodash-es": "^4.17.12", "@types/react": "^18.3.3", "@types/react-dom": "^18.3.0", diff --git a/clash-verge-rev/pnpm-lock.yaml b/clash-verge-rev/pnpm-lock.yaml index b6269b337b..1ff6d870e6 100644 --- a/clash-verge-rev/pnpm-lock.yaml +++ b/clash-verge-rev/pnpm-lock.yaml @@ -58,6 +58,9 @@ importers: i18next: specifier: ^23.11.5 version: 23.11.5 + js-yaml: + specifier: ^4.1.0 + version: 4.1.0 lodash-es: specifier: ^4.17.21 version: 4.17.21 @@ -91,6 +94,9 @@ importers: react-markdown: specifier: ^9.0.1 version: 9.0.1(@types/react@18.3.3)(react@18.3.1) + react-monaco-editor: + specifier: ^0.55.0 + version: 0.55.0(@types/react@18.3.3)(monaco-editor@0.49.0)(react@18.3.1) react-router-dom: specifier: ^6.23.1 version: 6.23.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -125,6 +131,9 @@ importers: "@types/js-cookie": specifier: ^3.0.6 version: 3.0.6 + "@types/js-yaml": + specifier: ^4.0.9 + version: 4.0.9 "@types/lodash-es": specifier: ^4.17.12 version: 4.17.12 @@ -2210,6 +2219,12 @@ packages: integrity: sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==, } + "@types/js-yaml@4.0.9": + resolution: + { + integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==, + } + "@types/json-schema@7.0.15": resolution: { @@ -3830,6 +3845,16 @@ packages: "@types/react": ">=18" react: ">=18" + react-monaco-editor@0.55.0: + resolution: + { + integrity: sha512-GdEP0Q3Rn1dczfKEEyY08Nes5plWwIYU4sWRBQO0+jsQWQsKMHKCC6+hPRwR7G/4aA3V/iU9jSmWPzVJYMVFSQ==, + } + peerDependencies: + "@types/react": ">=16 <= 18" + monaco-editor: ^0.44.0 + react: ">=16 <= 18" + react-refresh@0.14.2: resolution: { @@ -5941,6 +5966,8 @@ snapshots: "@types/js-cookie@3.0.6": {} + "@types/js-yaml@4.0.9": {} + "@types/json-schema@7.0.15": {} "@types/lodash-es@4.17.12": @@ -6973,6 +7000,13 @@ snapshots: transitivePeerDependencies: - supports-color + react-monaco-editor@0.55.0(@types/react@18.3.3)(monaco-editor@0.49.0)(react@18.3.1): + dependencies: + "@types/react": 18.3.3 + monaco-editor: 0.49.0 + prop-types: 15.8.1 + react: 18.3.1 + react-refresh@0.14.2: {} react-router-dom@6.23.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): diff --git a/clash-verge-rev/src-tauri/src/enhance/field.rs b/clash-verge-rev/src-tauri/src/enhance/field.rs index adb9228bb9..d45cc142a1 100644 --- a/clash-verge-rev/src-tauri/src/enhance/field.rs +++ b/clash-verge-rev/src-tauri/src/enhance/field.rs @@ -11,8 +11,8 @@ pub const HANDLE_FIELDS: [&str; 11] = [ "allow-lan", "log-level", "ipv6", - "secret", "external-controller", + "secret", ]; pub const DEFAULT_FIELDS: [&str; 5] = [ @@ -23,19 +23,6 @@ pub const DEFAULT_FIELDS: [&str; 5] = [ "rules", ]; -pub fn use_filter(config: Mapping, filter: &Vec) -> Mapping { - let mut ret = Mapping::new(); - - for (key, value) in config.into_iter() { - if let Some(key) = key.as_str() { - if filter.contains(&key.to_string()) { - ret.insert(Value::from(key), value); - } - } - } - ret -} - pub fn use_lowercase(config: Mapping) -> Mapping { let mut ret = Mapping::new(); diff --git a/clash-verge-rev/src-tauri/src/enhance/merge.rs b/clash-verge-rev/src-tauri/src/enhance/merge.rs index 7a283ab34b..dccd65cb1d 100644 --- a/clash-verge-rev/src-tauri/src/enhance/merge.rs +++ b/clash-verge-rev/src-tauri/src/enhance/merge.rs @@ -1,14 +1,5 @@ -use super::{use_filter, use_lowercase}; -use serde_yaml::{self, Mapping, Sequence, Value}; - -const MERGE_FIELDS: [&str; 6] = [ - "prepend-rules", - "append-rules", - "prepend-proxies", - "append-proxies", - "prepend-proxy-groups", - "append-proxy-groups", -]; +use super::use_lowercase; +use serde_yaml::{self, Mapping, Value}; fn deep_merge(a: &mut Value, b: &Value) { match (a, b) { @@ -23,47 +14,12 @@ fn deep_merge(a: &mut Value, b: &Value) { pub fn use_merge(merge: Mapping, config: Mapping) -> Mapping { let mut config = Value::from(config); - let mut merge_without_append = use_lowercase(merge.clone()); - for key in MERGE_FIELDS { - merge_without_append.remove(key).unwrap_or_default(); - } - deep_merge(&mut config, &Value::from(merge_without_append)); + let merge = use_lowercase(merge.clone()); - let mut config = config.as_mapping().unwrap().clone(); - let merge_list = MERGE_FIELDS.iter().map(|s| s.to_string()); - let merge = use_filter(merge, &merge_list.collect()); + deep_merge(&mut config, &Value::from(merge)); - ["rules", "proxies", "proxy-groups"] - .iter() - .for_each(|key_str| { - let key_val = Value::from(key_str.to_string()); + let config = config.as_mapping().unwrap().clone(); - let mut list = Sequence::default(); - list = config.get(&key_val).map_or(list.clone(), |val| { - val.as_sequence().map_or(list, |v| v.clone()) - }); - - let pre_key = Value::from(format!("prepend-{key_str}")); - let post_key = Value::from(format!("append-{key_str}")); - - if let Some(pre_val) = merge.get(&pre_key) { - if pre_val.is_sequence() { - let mut pre_val = pre_val.as_sequence().unwrap().clone(); - pre_val.extend(list); - list = pre_val; - } - } - - if let Some(post_val) = merge.get(&post_key) { - if post_val.is_sequence() { - list.extend(post_val.as_sequence().unwrap().clone()); - } - } - - if !list.is_empty() { - config.insert(key_val, Value::from(list)); - } - }); config } diff --git a/clash-verge-rev/src-tauri/src/enhance/mod.rs b/clash-verge-rev/src-tauri/src/enhance/mod.rs index ee4f99c5ed..9af9ebddc2 100644 --- a/clash-verge-rev/src-tauri/src/enhance/mod.rs +++ b/clash-verge-rev/src-tauri/src/enhance/mod.rs @@ -103,47 +103,37 @@ pub async fn enhance() -> (Mapping, Vec, HashMap) { let mut exists_keys = use_keys(&config); // 保存出现过的keys // 处理用户的profile - match rules_item.data { - ChainType::Rules(rules) => { - config = use_seq(rules, config.to_owned(), "rules"); - } - _ => {} - } - match proxies_item.data { - ChainType::Proxies(proxies) => { - config = use_seq(proxies, config.to_owned(), "proxies"); - } - _ => {} - } - match groups_item.data { - ChainType::Groups(groups) => { - config = use_seq(groups, config.to_owned(), "proxy-groups"); - } - _ => {} - } - match merge_item.data { - ChainType::Merge(merge) => { - exists_keys.extend(use_keys(&merge)); - config = use_merge(merge, config.to_owned()); - } - _ => {} - } - match script_item.data { - ChainType::Script(script) => { - let mut logs = vec![]; - match use_script(script, config.to_owned()) { - Ok((res_config, res_logs)) => { - exists_keys.extend(use_keys(&res_config)); - config = res_config; - logs.extend(res_logs); - } - Err(err) => logs.push(("exception".into(), err.to_string())), + if let ChainType::Rules(rules) = rules_item.data { + config = use_seq(rules, config.to_owned(), "rules"); + } + + if let ChainType::Proxies(proxies) = proxies_item.data { + config = use_seq(proxies, config.to_owned(), "proxies"); + } + + if let ChainType::Groups(groups) = groups_item.data { + config = use_seq(groups, config.to_owned(), "proxy-groups"); + } + + if let ChainType::Merge(merge) = merge_item.data { + exists_keys.extend(use_keys(&merge)); + config = use_merge(merge, config.to_owned()); + } + + if let ChainType::Script(script) = script_item.data { + let mut logs = vec![]; + + match use_script(script, config.to_owned()) { + Ok((res_config, res_logs)) => { + exists_keys.extend(use_keys(&res_config)); + config = res_config; + logs.extend(res_logs); } - - result_map.insert(script_item.uid, logs); + Err(err) => logs.push(("exception".into(), err.to_string())), } - _ => {} + + result_map.insert(script_item.uid, logs); } // 合并默认的config diff --git a/clash-verge-rev/src-tauri/src/enhance/seq.rs b/clash-verge-rev/src-tauri/src/enhance/seq.rs index 51c74f1623..c442eea42f 100644 --- a/clash-verge-rev/src-tauri/src/enhance/seq.rs +++ b/clash-verge-rev/src-tauri/src/enhance/seq.rs @@ -24,10 +24,29 @@ pub fn use_seq(seq_map: SeqMap, config: Mapping, name: &str) -> Mapping { for item in append { seq.push(item); } - + let mut delete_names = Vec::new(); for item in delete { - seq.retain(|x| x != &item); + let item = item.clone(); + if let Some(name) = if item.is_string() { + Some(item) + } else { + item.get("name").map(|y| y.clone()) + } { + delete_names.push(name.clone()); + } } + seq.retain(|x| { + if let Some(x_name) = if x.is_string() { + Some(x) + } else { + x.get("name") + } { + !delete_names.contains(&x_name) + } else { + true + } + }); + let mut config = config.clone(); config.insert(Value::from(name), Value::from(seq)); return config; diff --git a/clash-verge-rev/src-tauri/src/utils/tmpl.rs b/clash-verge-rev/src-tauri/src/utils/tmpl.rs index 45a018bac7..be83ca51f5 100644 --- a/clash-verge-rev/src-tauri/src/utils/tmpl.rs +++ b/clash-verge-rev/src-tauri/src/utils/tmpl.rs @@ -13,17 +13,8 @@ rules: [] /// enhanced profile pub const ITEM_MERGE: &str = "# Profile Enhancement Merge Template for Clash Verge -prepend-rules: [] - -prepend-proxies: [] - -prepend-proxy-groups: [] - -append-rules: [] - -append-proxies: [] - -append-proxy-groups: [] +profile: + store-selected: true "; /// enhanced profile diff --git a/clash-verge-rev/src/components/profile/profile-item.tsx b/clash-verge-rev/src/components/profile/profile-item.tsx index 7d659f851e..38868e5924 100644 --- a/clash-verge-rev/src/components/profile/profile-item.tsx +++ b/clash-verge-rev/src/components/profile/profile-item.tsx @@ -19,10 +19,11 @@ import { RefreshRounded, DragIndicator } from "@mui/icons-material"; import { useLoadingCache, useSetLoadingCache } from "@/services/states"; import { updateProfile, viewProfile } from "@/services/cmds"; import { Notice } from "@/components/base"; +import { RulesEditorViewer } from "@/components/profile/rules-editor-viewer"; import { EditorViewer } from "@/components/profile/editor-viewer"; import { ProfileBox } from "./profile-box"; import parseTraffic from "@/utils/parse-traffic"; -import { ConfirmViewer } from "./confirm-viewer"; +import { ConfirmViewer } from "@/components/profile/confirm-viewer"; import { open } from "@tauri-apps/api/shell"; const round = keyframes` from { transform: rotate(0deg); } @@ -481,12 +482,10 @@ export const ProfileItem = (props: Props) => { onChange={onChange} onClose={() => setFileOpen(false)} /> - setRulesOpen(false)} /> diff --git a/clash-verge-rev/src/components/profile/rule-item.tsx b/clash-verge-rev/src/components/profile/rule-item.tsx new file mode 100644 index 0000000000..2b30f42cad --- /dev/null +++ b/clash-verge-rev/src/components/profile/rule-item.tsx @@ -0,0 +1,71 @@ +import { + Box, + Divider, + IconButton, + ListItem, + ListItemText, + Typography, + alpha, +} from "@mui/material"; +import { DeleteForeverRounded, UndoRounded } from "@mui/icons-material"; +import { useSortable } from "@dnd-kit/sortable"; +import { CSS } from "@dnd-kit/utilities"; +interface Props { + type: "prepend" | "original" | "delete" | "append"; + ruleRaw: string; + onDelete: () => void; +} + +export const RuleItem = (props: Props) => { + let { type, ruleRaw, onDelete } = props; + const rule = ruleRaw.replace(",no-resolve", "").split(","); + const { attributes, listeners, setNodeRef, transform, transition } = + useSortable({ id: ruleRaw }); + return ( + ({ + p: 0, + borderRadius: "10px", + border: "solid 2px", + borderColor: + type === "original" + ? "var(--divider-color)" + : type === "delete" + ? alpha(palette.error.main, 0.5) + : alpha(palette.success.main, 0.5), + mb: 1, + transform: CSS.Transform.toString(transform), + transition, + })} + > + + + {rule.length === 3 ? rule[1] : "-"} + + + } + secondary={ + + {rule[0]} + {rule.length === 3 ? rule[2] : rule[1]} + + } + /> + + + {type === "delete" ? : } + + + ); +}; diff --git a/clash-verge-rev/src/components/profile/rules-editor-viewer.tsx b/clash-verge-rev/src/components/profile/rules-editor-viewer.tsx new file mode 100644 index 0000000000..aab7dc27bf --- /dev/null +++ b/clash-verge-rev/src/components/profile/rules-editor-viewer.tsx @@ -0,0 +1,465 @@ +import { ReactNode, useEffect, useState } from "react"; +import { useLockFn } from "ahooks"; +import yaml from "js-yaml"; +import { useTranslation } from "react-i18next"; +import { + DndContext, + closestCenter, + KeyboardSensor, + PointerSensor, + useSensor, + useSensors, + DragEndEvent, +} from "@dnd-kit/core"; +import { + SortableContext, + sortableKeyboardCoordinates, +} from "@dnd-kit/sortable"; +import { + Autocomplete, + Button, + Dialog, + DialogActions, + DialogContent, + DialogTitle, + List, + ListItem, + ListItemText, + TextField, + styled, +} from "@mui/material"; + +import { readProfileFile, saveProfileFile } from "@/services/cmds"; +import { Notice, Switch } from "@/components/base"; +import getSystem from "@/utils/get-system"; +import { RuleItem } from "@/components/profile/rule-item"; + +interface Props { + profileUid: string; + title?: string | ReactNode; + property: string; + open: boolean; + onClose: () => void; + onChange?: (prev?: string, curr?: string) => void; +} + +const RuleTypeList = [ + "DOMAIN", + "DOMAIN-SUFFIX", + "DOMAIN-KEYWORD", + "DOMAIN-REGEX", + "GEOSITE", + "IP-CIDR", + "IP-SUFFIX", + "IP-ASN", + "GEOIP", + "SRC-GEOIP", + "SRC-IP-ASN", + "SRC-IP-CIDR", + "SRC-IP-SUFFIX", + "DST-PORT", + "SRC-PORT", + "IN-PORT", + "IN-TYPE", + "IN-USER", + "IN-NAME", + "PROCESS-PATH", + "PROCESS-PATH-REGEX", + "PROCESS-NAME", + "PROCESS-NAME-REGEX", + "UID", + "NETWORK", + "DSCP", + "RULE-SET", + "SUB-RULE", + "AND", + "OR", + "NOT", + "MATCH", +] as const; + +const NoResolveList = [ + "GEOIP", + "IP-ASN", + "IP-CIDR", + "IP-CIDR6", + "IP-SUFFIX", + "RULE-SET", +]; +const ExampleMap = { + DOMAIN: "example.com", + "DOMAIN-SUFFIX": "example.com", + "DOMAIN-KEYWORD": "example", + "DOMAIN-REGEX": "example.*", + GEOSITE: "youtube", + "IP-CIDR": "127.0.0.0/8", + "IP-SUFFIX": "8.8.8.8/24", + "IP-ASN": "13335", + GEOIP: "CN", + "SRC-GEOIP": "cn", + "SRC-IP-ASN": "9808", + "SRC-IP-CIDR": "192.168.1.201/32", + "SRC-IP-SUFFIX": "192.168.1.201/8", + "DST-PORT": "80", + "SRC-PORT": "7777", + "IN-PORT": "7890", + "IN-TYPE": "SOCKS/HTTP", + "IN-USER": "mihomo", + "IN-NAME": "ss", + "PROCESS-PATH": + getSystem() === "windows" + ? "C:Program FilesGoogleChromeApplicationchrome.exe" + : "/usr/bin/wget", + "PROCESS-PATH-REGEX": + getSystem() === "windows" ? "(?i).*Application\\chrome.*" : ".*bin/wget", + "PROCESS-NAME": getSystem() === "windows" ? "chrome.exe" : "curl", + "PROCESS-NAME-REGEX": ".*telegram.*", + UID: "1001", + NETWORK: "udp", + DSCP: "4", + "RULE-SET": "providername", + "SUB-RULE": "", + AND: "((DOMAIN,baidu.com),(NETWORK,UDP))", + OR: "((NETWORK,UDP),(DOMAIN,baidu.com))", + NOT: "((DOMAIN,baidu.com))", + MATCH: "", +}; + +const BuiltinProxyPolicyList = ["DIRECT", "REJECT", "REJECT-DROP", "PASS"]; + +export const RulesEditorViewer = (props: Props) => { + const { title, profileUid, property, open, onClose, onChange } = props; + const { t } = useTranslation(); + + const [prevData, setPrevData] = useState(""); + const [ruleType, setRuleType] = + useState<(typeof RuleTypeList)[number]>("DOMAIN"); + const [ruleContent, setRuleContent] = useState(""); + const [noResolve, setNoResolve] = useState(false); + const [proxyPolicy, setProxyPolicy] = useState("DIRECT"); + const [proxyPolicyList, setProxyPolicyList] = useState([]); + const [ruleList, setRuleList] = useState([]); + const [ruleSetList, setRuleSetList] = useState([]); + const [subRuleList, setSubRuleList] = useState([]); + + const [prependSeq, setPrependSeq] = useState([]); + const [appendSeq, setAppendSeq] = useState([]); + const [deleteSeq, setDeleteSeq] = useState([]); + + const sensors = useSensors( + useSensor(PointerSensor), + useSensor(KeyboardSensor, { + coordinateGetter: sortableKeyboardCoordinates, + }) + ); + const reorder = (list: string[], startIndex: number, endIndex: number) => { + const result = Array.from(list); + const [removed] = result.splice(startIndex, 1); + result.splice(endIndex, 0, removed); + return result; + }; + const onPrependDragEnd = async (event: DragEndEvent) => { + const { active, over } = event; + if (over) { + if (active.id !== over.id) { + let activeIndex = prependSeq.indexOf(active.id.toString()); + let overIndex = prependSeq.indexOf(over.id.toString()); + setPrependSeq(reorder(prependSeq, activeIndex, overIndex)); + } + } + }; + const onAppendDragEnd = async (event: DragEndEvent) => { + const { active, over } = event; + if (over) { + if (active.id !== over.id) { + let activeIndex = appendSeq.indexOf(active.id.toString()); + let overIndex = appendSeq.indexOf(over.id.toString()); + setAppendSeq(reorder(appendSeq, activeIndex, overIndex)); + } + } + }; + const fetchContent = async () => { + let data = await readProfileFile(property); + let obj = yaml.load(data) as { prepend: []; append: []; delete: [] }; + + setPrependSeq(obj.prepend || []); + setAppendSeq(obj.append || []); + setDeleteSeq(obj.delete || []); + setPrevData(data); + }; + + const fetchProfile = async () => { + let data = await readProfileFile(profileUid); + let groupsObj = yaml.load(data) as { "proxy-groups": [] }; + let rulesObj = yaml.load(data) as { rules: [] }; + let ruleSetObj = yaml.load(data) as { "rule-providers": [] }; + let subRuleObj = yaml.load(data) as { "sub-rules": [] }; + setProxyPolicyList( + BuiltinProxyPolicyList.concat( + groupsObj["proxy-groups"] + ? groupsObj["proxy-groups"].map((item: any) => item.name) + : [] + ) + ); + setRuleList(rulesObj.rules || []); + setRuleSetList( + ruleSetObj["rule-providers"] + ? Object.keys(ruleSetObj["rule-providers"]) + : [] + ); + setSubRuleList( + subRuleObj["sub-rules"] ? Object.keys(subRuleObj["sub-rules"]) : [] + ); + }; + + useEffect(() => { + fetchContent(); + fetchProfile(); + }, [open]); + + const onSave = useLockFn(async () => { + try { + let currData = yaml.dump({ + prepend: prependSeq, + append: appendSeq, + delete: deleteSeq, + }); + await saveProfileFile(property, currData); + onChange?.(prevData, currData); + onClose(); + } catch (err: any) { + Notice.error(err.message || err.toString()); + } + }); + + return ( + + {title ?? t("Edit Rules")} + + +
+ + + + { + if (v) setRuleType(v); + }} + renderInput={(params) => } + /> + + + + {ruleType === "RULE-SET" && ( + { + if (v) setRuleContent(v); + }} + renderInput={(params) => } + /> + )} + {ruleType === "SUB-RULE" && ( + { + if (v) setRuleContent(v); + }} + renderInput={(params) => } + /> + )} + {ruleType !== "RULE-SET" && ruleType !== "SUB-RULE" && ( + { + setRuleContent(e.target.value); + }} + /> + )} + + + + { + if (v) setProxyPolicy(v); + }} + renderInput={(params) => } + /> + + {NoResolveList.includes(ruleType) && ( + + + { + setNoResolve(!noResolve); + }} + /> + + )} + + + + + + + +
+
+ {prependSeq.length > 0 && ( + + + { + return x; + })} + > + {prependSeq.map((item, index) => { + return ( + { + setPrependSeq(prependSeq.filter((v) => v !== item)); + }} + /> + ); + })} + + + + )} + + + {ruleList.map((item, index) => { + return ( + { + if (deleteSeq.includes(item)) { + setDeleteSeq(deleteSeq.filter((v) => v !== item)); + } else { + setDeleteSeq([...deleteSeq, item]); + } + }} + /> + ); + })} + + + {appendSeq.length > 0 && ( + + { + return x; + })} + > + + {appendSeq.map((item, index) => { + return ( + { + setAppendSeq(appendSeq.filter((v) => v !== item)); + }} + /> + ); + })} + + + + )} +
+
+ + + + + + +
+ ); +}; + +const Item = styled(ListItem)(() => ({ + padding: "5px 2px", +})); diff --git a/clash-verge-rev/src/locales/en.json b/clash-verge-rev/src/locales/en.json index a8e3679cc0..38d8b8386d 100644 --- a/clash-verge-rev/src/locales/en.json +++ b/clash-verge-rev/src/locales/en.json @@ -52,6 +52,13 @@ "Edit Profile": "Edit Profile", "Edit Proxies": "Edit Proxies", "Edit Rules": "Edit Rules", + "Rule Type": "Rule Type", + "Rule Content": "Rule Content", + "Proxy Policy": "roxy Policy", + "No Resolve": "No Resolve", + "Add Prepend Rule": "Add Prepend Rule", + "Add Append Rule": "Add Append Rule", + "Delete Rule": "Delete Rule", "Edit Groups": "Edit Proxy Groups", "Edit Merge": "Edit Merge", "Edit Script": "Edit Script", diff --git a/clash-verge-rev/src/locales/zh.json b/clash-verge-rev/src/locales/zh.json index b9d7777d17..24042d76a9 100644 --- a/clash-verge-rev/src/locales/zh.json +++ b/clash-verge-rev/src/locales/zh.json @@ -50,11 +50,18 @@ "Expire Time": "到期时间", "Create Profile": "新建配置", "Edit Profile": "编辑配置", - "Edit Proxies": "编辑代理", - "Edit Rules": "编辑规则", - "Edit Groups": "编辑代理组", - "Edit Merge": "编辑 Merge", - "Edit Script": "编辑 Script", + "Edit Proxies": "添加/删除 节点", + "Edit Rules": "添加/删除 规则", + "Rule Type": "规则类型", + "Rule Content": "规则内容", + "Proxy Policy": "代理策略", + "No Resolve": "跳过DNS解析", + "Add Prepend Rule": "添加前置规则", + "Add Append Rule": "添加后置规则", + "Delete Rule": "删除规则", + "Edit Groups": "添加/删除 代理组", + "Edit Merge": "微调配置 (yaml)", + "Edit Script": "微调配置 (js)", "Type": "类型", "Name": "名称", "Descriptions": "描述", @@ -177,7 +184,7 @@ "Upgrade": "升级内核", "Restart": "重启内核", "Release Version": "正式版", - "Alpha Version": "测试版", + "Alpha Version": "预览版", "Tun mode requires": "如需启用 Tun 模式需要授权", "Grant": "授权", "Open UWP tool": "UWP 工具", diff --git a/clash-verge-rev/src/services/types.d.ts b/clash-verge-rev/src/services/types.d.ts index 9cdc4cb117..b5fe361519 100644 --- a/clash-verge-rev/src/services/types.d.ts +++ b/clash-verge-rev/src/services/types.d.ts @@ -198,6 +198,12 @@ interface IVergeTestItem { url: string; } +interface ISeqProfileConfig { + prepend: string[]; + append: string[]; + delete: string[]; +} + interface IVergeConfig { app_log_level?: "trace" | "debug" | "info" | "warn" | "error" | string; language?: string; diff --git a/lede/package/boot/arm-trusted-firmware-mediatek/Makefile b/lede/package/boot/arm-trusted-firmware-mediatek/Makefile index d226a655de..5324563042 100644 --- a/lede/package/boot/arm-trusted-firmware-mediatek/Makefile +++ b/lede/package/boot/arm-trusted-firmware-mediatek/Makefile @@ -32,6 +32,7 @@ define Trusted-Firmware-A/Default NAND_TYPE:= BOARD_QFN:= DRAM_USE_COMB:= + USE_UBI:= endef define Trusted-Firmware-A/mt7622-nor-1ddr @@ -56,6 +57,14 @@ define Trusted-Firmware-A/mt7622-snand-1ddr BOOT_DEVICE:=snand endef +define Trusted-Firmware-A/mt7622-snand-ubi-1ddr + NAME:=MediaTek MT7622 (SPI-NAND using UBI, 1x DDR3) + BUILD_SUBTARGET:=mt7622 + PLAT:=mt7622 + BOOT_DEVICE:=snand + USE_UBI:=1 +endef + define Trusted-Firmware-A/mt7622-snand-2ddr NAME:=MediaTek MT7622 (SPI-NAND, 2x DDR3) BUILD_SUBTARGET:=mt7622 @@ -64,6 +73,15 @@ define Trusted-Firmware-A/mt7622-snand-2ddr DDR3_FLYBY:=1 endef +define Trusted-Firmware-A/mt7622-snand-ubi-2ddr + NAME:=MediaTek MT7622 (SPI-NAND using UBI, 2x DDR3) + BUILD_SUBTARGET:=mt7622 + PLAT:=mt7622 + BOOT_DEVICE:=snand + DDR3_FLYBY:=1 + USE_UBI:=1 +endef + define Trusted-Firmware-A/mt7622-emmc-1ddr NAME:=MediaTek MT7622 (eMMC, 1x DDR3) BUILD_SUBTARGET:=mt7622 @@ -158,6 +176,15 @@ define Trusted-Firmware-A/mt7981-spim-nand-ddr3 DDR_TYPE:=ddr3 endef +define Trusted-Firmware-A/mt7981-spim-nand-ubi-ddr4 + NAME:=MediaTek MT7981 (SPI-NAND via SPIM, DDR4) + BOOT_DEVICE:=spim-nand + BUILD_SUBTARGET:=filogic + PLAT:=mt7981 + DDR_TYPE:=ddr4 + USE_UBI:=1 +endef + define Trusted-Firmware-A/mt7986-nor-ddr4 NAME:=MediaTek MT7986 (SPI-NOR, DDR4) BOOT_DEVICE:=nor @@ -199,6 +226,25 @@ define Trusted-Firmware-A/mt7986-spim-nand-ddr4 NAND_TYPE:=spim:2k+64 endef +define Trusted-Firmware-A/mt7986-spim-nand-ubi-ddr4 + NAME:=MediaTek MT7986 (SPI-NAND via SPIM using UBI, DDR4) + BOOT_DEVICE:=spim-nand + BUILD_SUBTARGET:=filogic + PLAT:=mt7986 + DDR_TYPE:=ddr4 + NAND_TYPE:=spim:2k+64 + USE_UBI:=1 +endef + +define Trusted-Firmware-A/mt7986-spim-nand-4k-ddr4 + NAME:=MediaTek MT7986 (SPI-NAND via SPIM, DDR4) + BOOT_DEVICE:=spim-nand + BUILD_SUBTARGET:=filogic + PLAT:=mt7986 + DDR_TYPE:=ddr4 + NAND_TYPE:=spim:4k+256 +endef + define Trusted-Firmware-A/mt7986-nor-ddr3 NAME:=MediaTek MT7986 (SPI-NOR, DDR3) BOOT_DEVICE:=nor @@ -359,11 +405,22 @@ define Trusted-Firmware-A/mt7988-spim-nand-comb DRAM_USE_COMB:=1 endef +define Trusted-Firmware-A/mt7988-spim-nand-ubi-comb + NAME:=MediaTek MT7988 (SPI-NAND via SPIM, UBI) + BOOT_DEVICE:=spim-nand + BUILD_SUBTARGET:=filogic + PLAT:=mt7988 + DRAM_USE_COMB:=1 + USE_UBI:=1 +endef + TFA_TARGETS:= \ mt7622-nor-1ddr \ mt7622-nor-2ddr \ mt7622-snand-1ddr \ + mt7622-snand-ubi-1ddr \ mt7622-snand-2ddr \ + mt7622-snand-ubi-2ddr \ mt7622-emmc-1ddr \ mt7622-emmc-2ddr \ mt7622-sdmmc-1ddr \ @@ -373,6 +430,7 @@ TFA_TARGETS:= \ mt7981-sdmmc-ddr3 \ mt7981-snand-ddr3 \ mt7981-spim-nand-ddr3 \ + mt7981-spim-nand-ubi-ddr4 \ mt7981-emmc-ddr4 \ mt7981-nor-ddr4 \ mt7981-spim-nand-ddr4 \ @@ -386,6 +444,8 @@ TFA_TARGETS:= \ mt7986-sdmmc-ddr4 \ mt7986-snand-ddr4 \ mt7986-spim-nand-ddr4 \ + mt7986-spim-nand-ubi-ddr4 \ + mt7986-spim-nand-4k-ddr4 \ mt7988-emmc-ddr3 \ mt7988-nor-ddr3 \ mt7988-sdmmc-ddr3 \ @@ -400,7 +460,8 @@ TFA_TARGETS:= \ mt7988-nor-comb \ mt7988-sdmmc-comb \ mt7988-snand-comb \ - mt7988-spim-nand-comb + mt7988-spim-nand-comb \ + mt7988-spim-nand-ubi-comb TFA_MAKE_FLAGS += \ BOOT_DEVICE=$(BOOT_DEVICE) \ @@ -411,6 +472,9 @@ TFA_MAKE_FLAGS += \ HAVE_DRAM_OBJ_FILE=yes \ $(if $(DDR3_FLYBY),DDR3_FLYBY=1) \ $(if $(DRAM_USE_COMB),DRAM_USE_COMB=1) \ + $(if $(RAM_BOOT_UART_DL),RAM_BOOT_UART_DL=1) \ + $(if $(USE_UBI),UBI=1 $(if $(findstring mt7622,$(PLAT)),OVERRIDE_UBI_START_ADDR=0x80000)) \ + $(if $(USE_UBI),UBI=1 $(if $(findstring mt7981,$(PLAT)),OVERRIDE_UBI_START_ADDR=0x100000)) \ all define Package/trusted-firmware-a/install diff --git a/lede/package/boot/uboot-envtools/files/mediatek_filogic b/lede/package/boot/uboot-envtools/files/mediatek_filogic index 17c8141810..e8f3c14664 100644 --- a/lede/package/boot/uboot-envtools/files/mediatek_filogic +++ b/lede/package/boot/uboot-envtools/files/mediatek_filogic @@ -11,26 +11,45 @@ touch /etc/config/ubootenv board=$(board_name) +ubootenv_add_mmc_default() { + local envdev="$(find_mmc_part "ubootenv" "${1:-mmcblk0}")" + ubootenv_add_uci_config "$envdev" "0x0" "0x40000" "0x40000" "1" + ubootenv_add_uci_config "$envdev" "0x40000" "0x40000" "0x40000" "1" +} + +ubootenv_add_nor_default() { + local envdev="/dev/mtd$(find_mtd_index "u-boot-env")" + ubootenv_add_uci_config "$envdev" "0x0" "0x20000" "0x20000" "1" + ubootenv_add_uci_config "$envdev" "0x20000" "0x20000" "0x20000" "1" +} + +ubootenv_add_ubi_default() { + . /lib/upgrade/nand.sh + local envubi=$(nand_find_ubi ubi) + local envdev=/dev/$(nand_find_volume $envubi ubootenv) + local envdev2=/dev/$(nand_find_volume $envubi ubootenv2) + ubootenv_add_uci_config "$envdev" "0x0" "0x1f000" "0x1f000" "1" + ubootenv_add_uci_config "$envdev2" "0x0" "0x1f000" "0x1f000" "1" +} + case "$board" in -bananapi,bpi-r3) - case "$(cmdline_get_var root)" in - /dev/mmc*) - local envdev=$(find_mmc_part "ubootenv" $rootdev) - ubootenv_add_uci_config "$envdev" "0x0" "0x40000" "0x40000" "1" - ubootenv_add_uci_config "$envdev" "0x40000" "0x40000" "0x40000" "1" +bananapi,bpi-r3|\ +bananapi,bpi-r3-mini|\ +bananapi,bpi-r4|\ +bananapi,bpi-r4-poe|\ +jdcloud,re-cp-03) + . /lib/upgrade/common.sh + + bootdev="$(fitblk_get_bootdev)" + case "$bootdev" in + ubi*) + ubootenv_add_ubi_default ;; - /dev/mtd*) - local envdev=/dev/mtd$(find_mtd_index "u-boot-env") - ubootenv_add_uci_config "$envdev" "0x0" "0x20000" "0x20000" "1" - ubootenv_add_uci_config "$envdev" "0x20000" "0x20000" "0x20000" "1" + mmc*) + ubootenv_add_mmc_default "${bootdev%%p[0-9]*}" ;; - /dev/ubi*) - . /lib/upgrade/nand.sh - local envubi=$(nand_find_ubi ubi) - local envdev=/dev/$(nand_find_volume $envubi ubootenv) - local envdev2=/dev/$(nand_find_volume $envubi ubootenv2) - ubootenv_add_uci_config "$envdev" "0x0" "0x1f000" "0x1f000" "1" - ubootenv_add_uci_config "$envdev2" "0x0" "0x1f000" "0x1f000" "1" + mtd*) + ubootenv_add_nor_default ;; esac ;; diff --git a/lede/package/boot/uboot-mediatek/Makefile b/lede/package/boot/uboot-mediatek/Makefile index 716643035c..8827bcf8c2 100644 --- a/lede/package/boot/uboot-mediatek/Makefile +++ b/lede/package/boot/uboot-mediatek/Makefile @@ -1,10 +1,12 @@ include $(TOPDIR)/rules.mk include $(INCLUDE_DIR)/kernel.mk -PKG_VERSION:=2023.07.02 -PKG_HASH:=6b6a48581c14abb0f95bd87c1af4d740922406d7b801002a9f94727fdde021d5 +PKG_VERSION:=2024.01 +PKG_HASH:=b99611f1ed237bf3541bdc8434b68c96a6e05967061f992443cb30aabebef5b3 PKG_BUILD_DEPENDS:=!(TARGET_ramips||TARGET_mediatek_mt7623):arm-trusted-firmware-tools/host +UBOOT_USE_INTREE_DTC:=1 + include $(INCLUDE_DIR)/u-boot.mk include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/host-build.mk @@ -34,6 +36,7 @@ endif define U-Boot/Default BUILD_TARGET:=mediatek UBOOT_IMAGE:=u-boot-mtk.bin + HIDDEN:=1 endef define U-Boot/mt7620_rfb @@ -72,6 +75,15 @@ define U-Boot/mt7621_nand_rfb UBOOT_IMAGE:=u-boot-mt7621.bin endef +define U-Boot/mt7621_zbtlink_zbt-wg3526-16m + NAME:=Zbtlink ZBT-WG3526-16m + UBOOT_CONFIG:=mt7621_zbtlink_zbt-wg3526-16m + BUILD_DEVICES:=zbtlink_zbt-wg3526-16m + BUILD_TARGET:=ramips + BUILD_SUBTARGET:=mt7621 + UBOOT_IMAGE:=u-boot-mt7621.bin +endef + define U-Boot/mt7622_rfb1 NAME:=MT7622 Reference Board 1 UBOOT_CONFIG:=mt7622_rfb @@ -85,9 +97,9 @@ define U-Boot/mt7622_linksys_e8450 BUILD_DEVICES:=linksys_e8450-ubi BUILD_SUBTARGET:=mt7622 UBOOT_IMAGE:=u-boot.fip - BL2_BOOTDEV:=snand + BL2_BOOTDEV:=snand-ubi BL2_DDRBLOB:=1 - DEPENDS:=+trusted-firmware-a-mt7622-snand-1ddr + DEPENDS:=+trusted-firmware-a-mt7622-snand-ubi-1ddr endef define U-Boot/mt7622_bananapi_bpi-r64-emmc @@ -118,15 +130,15 @@ define U-Boot/mt7622_bananapi_bpi-r64-snand BUILD_DEVICES:=bananapi_bpi-r64 BUILD_SUBTARGET:=mt7622 UBOOT_IMAGE:=u-boot.fip - BL2_BOOTDEV:=snand + BL2_BOOTDEV:=snand-ubi BL2_DDRBLOB:=2 - DEPENDS:=+trusted-firmware-a-mt7622-snand-2ddr + DEPENDS:=+trusted-firmware-a-mt7622-snand-ubi-2ddr endef -define U-Boot/mt7622_ubnt_unifi-6-lr +define U-Boot/mt7622_ubnt_unifi-6-lr-v1 NAME:=Ubiquiti UniFi 6 LR - UBOOT_CONFIG:=mt7622_ubnt_unifi-6-lr - BUILD_DEVICES:=ubnt_unifi-6-lr-v1-ubootmod ubnt_unifi-6-lr-v2-ubootmod + UBOOT_CONFIG:=mt7622_ubnt_unifi-6-lr-v1 + BUILD_DEVICES:=ubnt_unifi-6-lr-v1-ubootmod BUILD_SUBTARGET:=mt7622 UBOOT_IMAGE:=u-boot.fip BL2_BOOTDEV:=nor @@ -135,6 +147,38 @@ define U-Boot/mt7622_ubnt_unifi-6-lr FIP_COMPRESS:=1 endef +define U-Boot/mt7622_ubnt_unifi-6-lr-v2 + NAME:=Ubiquiti UniFi 6 LR v2 + UBOOT_CONFIG:=mt7622_ubnt_unifi-6-lr-v2 + BUILD_DEVICES:=ubnt_unifi-6-lr-v2-ubootmod + BUILD_SUBTARGET:=mt7622 + UBOOT_IMAGE:=u-boot.fip + BL2_BOOTDEV:=nor + BL2_DDRBLOB:=2 + DEPENDS:=+trusted-firmware-a-mt7622-nor-2ddr + FIP_COMPRESS:=1 +endef + +define U-Boot/mt7622_ubnt_unifi-6-lr-v3 + NAME:=Ubiquiti UniFi 6 LR v3 + UBOOT_CONFIG:=mt7622_ubnt_unifi-6-lr-v3 + BUILD_DEVICES:=ubnt_unifi-6-lr-v3-ubootmod + BUILD_SUBTARGET:=mt7622 + UBOOT_IMAGE:=u-boot.fip + BL2_BOOTDEV:=nor + BL2_DDRBLOB:=2 + DEPENDS:=+trusted-firmware-a-mt7622-nor-2ddr + FIP_COMPRESS:=1 +endef + +define U-Boot/mt7622_xiaomi_redmi-router-ax6s-ubi-loader + NAME:=Xiaomi Redmi Router AX6S (as UBI loader) + UBOOT_CONFIG:=mt7622_xiaomi_redmi-router-ax6s-ubi-loader + BUILD_DEVICES:=xiaomi_redmi-router-ax6s + BUILD_SUBTARGET:=mt7622 + UBOOT_IMAGE:=u-boot.bin +endef + define U-Boot/mt7623a_unielec_u7623 NAME:=UniElec U7623 (mt7623) BUILD_DEVICES:=unielec_u7623-02 @@ -159,7 +203,7 @@ define U-Boot/mt7628_rfb UBOOT_IMAGE:=u-boot-with-spl.bin endef -define U-Boot/ravpower_rp-wd009 +define U-Boot/mt7628_ravpower_rp-wd009 NAME:=RAVPower RP-WD009 BUILD_TARGET:=ramips BUILD_DEVICES:=ravpower_rp-wd009 @@ -175,6 +219,91 @@ define U-Boot/mt7629_rfb UBOOT_CONFIG:=mt7629_rfb endef +define U-Boot/mt7981_cmcc_rax3000m-emmc + NAME:=CMCC RAX3000M + BUILD_SUBTARGET:=filogic + BUILD_DEVICES:=cmcc_rax3000m + UBOOT_CONFIG:=mt7981_cmcc_rax3000m-emmc + UBOOT_IMAGE:=u-boot.fip + BL2_BOOTDEV:=emmc + BL2_SOC:=mt7981 + BL2_DDRTYPE:=ddr4 + DEPENDS:=+trusted-firmware-a-mt7981-emmc-ddr4 +endef + +define U-Boot/mt7981_cmcc_rax3000m-nand + NAME:=CMCC RAX3000M + BUILD_SUBTARGET:=filogic + BUILD_DEVICES:=cmcc_rax3000m + UBOOT_CONFIG:=mt7981_cmcc_rax3000m-nand + UBOOT_IMAGE:=u-boot.fip + BL2_BOOTDEV:=spim-nand + BL2_SOC:=mt7981 + BL2_DDRTYPE:=ddr4 + DEPENDS:=+trusted-firmware-a-mt7981-spim-nand-ddr4 +endef + +define U-Boot/mt7981_h3c_magic-nx30-pro + NAME:=H3C Magic NX30 Pro + BUILD_SUBTARGET:=filogic + BUILD_DEVICES:=h3c_magic-nx30-pro + UBOOT_CONFIG:=mt7981_h3c_magic-nx30-pro + UBOOT_IMAGE:=u-boot.fip + BL2_BOOTDEV:=spim-nand + BL2_SOC:=mt7981 + BL2_DDRTYPE:=ddr3 + DEPENDS:=+trusted-firmware-a-mt7981-spim-nand-ddr3 +endef + +define U-Boot/mt7981_jcg_q30-pro + NAME:=JCG Q30 PRO + BUILD_SUBTARGET:=filogic + BUILD_DEVICES:=jcg_q30-pro + UBOOT_CONFIG:=mt7981_jcg_q30-pro + UBOOT_IMAGE:=u-boot.fip + BL2_BOOTDEV:=spim-nand + BL2_SOC:=mt7981 + BL2_DDRTYPE:=ddr3 + DEPENDS:=+trusted-firmware-a-mt7981-spim-nand-ddr3 +endef + +define U-Boot/mt7981_nokia_ea0326gmp + NAME:=Nokia EA0326GMP + BUILD_SUBTARGET:=filogic + BUILD_DEVICES:=nokia_ea0326gmp + UBOOT_CONFIG:=mt7981_nokia_ea0326gmp + UBOOT_IMAGE:=u-boot.fip + BL2_BOOTDEV:=spim-nand + BL2_SOC:=mt7981 + BL2_DDRTYPE:=ddr3 + DEPENDS:=+trusted-firmware-a-mt7981-spim-nand-ddr3 +endef + +define U-Boot/mt7981_openwrt_one-snand + NAME:=OpenWrt One NAND + BUILD_SUBTARGET:=filogic + BUILD_DEVICES:=openwrt_one + UBOOT_CONFIG:=mt7981_openwrt-one-spi-nand + UBOOT_IMAGE:=u-boot.fip + BL2_BOOTDEV:=spim-nand-ubi + BL2_SOC:=mt7981 + BL2_DDRTYPE:=ddr4 + DEPENDS:=+trusted-firmware-a-mt7981-spim-nand-ubi-ddr4 +endef + +define U-Boot/mt7981_openwrt_one-nor + NAME:=OpenWrt One NOR + BUILD_SUBTARGET:=filogic + BUILD_DEVICES:=openwrt_one + UBOOT_CONFIG:=mt7981_openwrt-one-nor + UBOOT_IMAGE:=u-boot.fip + BL2_BOOTDEV:=nor + BL2_SOC:=mt7981 + BL2_DDRTYPE:=ddr4 + FIP_COMPRESS:=1 + DEPENDS:=+trusted-firmware-a-mt7981-nor-ddr4 +endef + define U-Boot/mt7981_rfb-spim-nand NAME:=MT7981 Reference Board BUILD_SUBTARGET:=filogic @@ -235,6 +364,42 @@ define U-Boot/mt7981_rfb-snfi DEPENDS:=+trusted-firmware-a-mt7981-snand-ddr3 endef +define U-Boot/mt7981_qihoo_360t7 + NAME:=Qihoo 360T7 + BUILD_SUBTARGET:=filogic + BUILD_DEVICES:=qihoo_360t7 + UBOOT_CONFIG:=mt7981_qihoo-360t7 + UBOOT_IMAGE:=u-boot.fip + BL2_BOOTDEV:=spim-nand + BL2_SOC:=mt7981 + BL2_DDRTYPE:=ddr3 + DEPENDS:=+trusted-firmware-a-mt7981-spim-nand-ddr3 +endef + +define U-Boot/mt7981_xiaomi_mi-router-ax3000t + NAME:=Xiaomi Router AX3000T + BUILD_SUBTARGET:=filogic + BUILD_DEVICES:=xiaomi_mi-router-ax3000t-ubootmod + UBOOT_CONFIG:=mt7981_xiaomi_mi-router-ax3000t + UBOOT_IMAGE:=u-boot.fip + BL2_BOOTDEV:=spim-nand + BL2_SOC:=mt7981 + BL2_DDRTYPE:=ddr3 + DEPENDS:=+trusted-firmware-a-mt7981-spim-nand-ddr3 +endef + +define U-Boot/mt7981_xiaomi_mi-router-wr30u + NAME:=Xiaomi Router WR30U + BUILD_SUBTARGET:=filogic + BUILD_DEVICES:=xiaomi_mi-router-wr30u-ubootmod + UBOOT_CONFIG:=mt7981_xiaomi_mi-router-wr30u + UBOOT_IMAGE:=u-boot.fip + BL2_BOOTDEV:=spim-nand + BL2_SOC:=mt7981 + BL2_DDRTYPE:=ddr3 + DEPENDS:=+trusted-firmware-a-mt7981-spim-nand-ddr3 +endef + define U-Boot/mt7986_rfb NAME:=MT7986 Reference Board BUILD_SUBTARGET:=filogic @@ -277,10 +442,10 @@ define U-Boot/mt7986_bananapi_bpi-r3-snand BUILD_DEVICES:=bananapi_bpi-r3 UBOOT_CONFIG:=mt7986a_bpi-r3-snand UBOOT_IMAGE:=u-boot.fip - BL2_BOOTDEV:=spim-nand + BL2_BOOTDEV:=spim-nand-ubi BL2_SOC:=mt7986 BL2_DDRTYPE:=ddr4 - DEPENDS:=+trusted-firmware-a-mt7986-spim-nand-ddr4 + DEPENDS:=+trusted-firmware-a-mt7986-spim-nand-ubi-ddr4 endef define U-Boot/mt7986_bananapi_bpi-r3-nor @@ -296,6 +461,198 @@ define U-Boot/mt7986_bananapi_bpi-r3-nor FIP_COMPRESS:=1 endef +define U-Boot/mt7986_bananapi_bpi-r3-mini-emmc + NAME:=BananaPi BPi-R3 Mini + BUILD_SUBTARGET:=filogic + BUILD_DEVICES:=bananapi_bpi-r3-mini + UBOOT_CONFIG:=mt7986a_bpi-r3-mini-emmc + UBOOT_IMAGE:=u-boot.fip + BL2_BOOTDEV:=emmc + BL2_SOC:=mt7986 + BL2_DDRTYPE:=ddr4 + DEPENDS:=+trusted-firmware-a-mt7986-emmc-ddr4 +endef + +define U-Boot/mt7986_bananapi_bpi-r3-mini-snand + NAME:=BananaPi BPi-R3 Mini + BUILD_SUBTARGET:=filogic + BUILD_DEVICES:=bananapi_bpi-r3-mini + UBOOT_CONFIG:=mt7986a_bpi-r3-mini-snand + UBOOT_IMAGE:=u-boot.fip + BL2_BOOTDEV:=spim-nand-ubi + BL2_SOC:=mt7986 + BL2_DDRTYPE:=ddr4 + DEPENDS:=+trusted-firmware-a-mt7986-spim-nand-ubi-ddr4 +endef + +define U-Boot/mt7986_glinet_gl-mt6000 + NAME:=GL.iNet GL-MT6000 + BUILD_SUBTARGET:=filogic + BUILD_DEVICES:=glinet_gl-mt6000 + UBOOT_CONFIG:=mt7986a_glinet_gl-mt6000 + UBOOT_IMAGE:=u-boot.fip + BL2_BOOTDEV:=emmc + BL2_SOC:=mt7986 + BL2_DDRTYPE:=ddr4 + DEPENDS:=+trusted-firmware-a-mt7986-emmc-ddr4 +endef + +define U-Boot/mt7986_jdcloud_re-cp-03 + NAME:=JDCloud RE-CP-03 + BUILD_SUBTARGET:=filogic + BUILD_DEVICES:=jdcloud_re-cp-03 + UBOOT_CONFIG:=mt7986a_jdcloud_re-cp-03 + UBOOT_IMAGE:=u-boot.fip + BL2_BOOTDEV:=emmc + BL2_SOC:=mt7986 + BL2_DDRTYPE:=ddr4 + DEPENDS:=+trusted-firmware-a-mt7986-emmc-ddr4 +endef + +define U-Boot/mt7986_netcore_n60 + NAME:=Netcore N60 + BUILD_SUBTARGET:=filogic + BUILD_DEVICES:=netcore_n60 + UBOOT_CONFIG:=mt7986_netcore_n60 + UBOOT_IMAGE:=u-boot.fip + BL2_BOOTDEV:=spim-nand + BL2_SOC:=mt7986 + BL2_DDRTYPE:=ddr3 + DEPENDS:=+trusted-firmware-a-mt7986-spim-nand-ddr3 +endef + +define U-Boot/mt7986_tplink_tl-xdr4288 + NAME:=TP-LINK TL-XDR4288 + BUILD_SUBTARGET:=filogic + BUILD_DEVICES:=tplink_tl-xdr4288 + UBOOT_CONFIG:=mt7986_tplink_tl-xdr4288 + UBOOT_IMAGE:=u-boot.fip + BL2_BOOTDEV:=spim-nand + BL2_SOC:=mt7986 + BL2_DDRTYPE:=ddr3 + DEPENDS:=+trusted-firmware-a-mt7986-spim-nand-ddr3 +endef + +define U-Boot/mt7986_tplink_tl-xdr6086 + NAME:=TP-LINK TL-XDR6086 + BUILD_SUBTARGET:=filogic + BUILD_DEVICES:=tplink_tl-xdr6086 + UBOOT_CONFIG:=mt7986_tplink_tl-xdr6086 + UBOOT_IMAGE:=u-boot.fip + BL2_BOOTDEV:=spim-nand + BL2_SOC:=mt7986 + BL2_DDRTYPE:=ddr3 + DEPENDS:=+trusted-firmware-a-mt7986-spim-nand-ddr3 +endef + +define U-Boot/mt7986_tplink_tl-xdr6088 + NAME:=TP-LINK TL-XDR6088 + BUILD_SUBTARGET:=filogic + BUILD_DEVICES:=tplink_tl-xdr6088 + UBOOT_CONFIG:=mt7986_tplink_tl-xdr6088 + UBOOT_IMAGE:=u-boot.fip + BL2_BOOTDEV:=spim-nand + BL2_SOC:=mt7986 + BL2_DDRTYPE:=ddr3 + DEPENDS:=+trusted-firmware-a-mt7986-spim-nand-ddr3 +endef + +define U-Boot/mt7986_xiaomi_redmi-router-ax6000 + NAME:=Xiaomi Redmi AX6000 + BUILD_SUBTARGET:=filogic + BUILD_DEVICES:=xiaomi_redmi-router-ax6000-ubootmod + UBOOT_CONFIG:=mt7986_xiaomi_redmi-ax6000 + UBOOT_IMAGE:=u-boot.fip + BL2_BOOTDEV:=spim-nand + BL2_SOC:=mt7986 + BL2_DDRTYPE:=ddr4 + DEPENDS:=+trusted-firmware-a-mt7986-spim-nand-ddr4 +endef + +define U-Boot/mt7986_zyxel_ex5601-t0 + NAME:=Zyxel EX5601-T0 + BUILD_SUBTARGET:=filogic + BUILD_DEVICES:=zyxel_ex5601-t0-ubootmod + UBOOT_CONFIG:=mt7986_zyxel_ex5601-t0 + UBOOT_IMAGE:=u-boot.fip + BL2_BOOTDEV:=spim-nand-4k + BL2_SOC:=mt7986 + BL2_DDRTYPE:=ddr4 + DEPENDS:=+trusted-firmware-a-mt7986-spim-nand-4k-ddr4 +endef + +define U-Boot/mt7988_bananapi_bpi-r4-emmc + NAME:=BananaPi BPi-R4 + BUILD_SUBTARGET:=filogic + BUILD_DEVICES:=bananapi_bpi-r4 + UBOOT_CONFIG:=mt7988a_bananapi_bpi-r4-emmc + UBOOT_IMAGE:=u-boot.fip + BL2_BOOTDEV:=emmc + BL2_SOC:=mt7988 + BL2_DDRTYPE:=comb + DEPENDS:=+trusted-firmware-a-mt7988-emmc-comb +endef + +define U-Boot/mt7988_bananapi_bpi-r4-sdmmc + NAME:=BananaPi BPi-R4 + BUILD_SUBTARGET:=filogic + BUILD_DEVICES:=bananapi_bpi-r4 + UBOOT_CONFIG:=mt7988a_bananapi_bpi-r4-sdmmc + UBOOT_IMAGE:=u-boot.fip + BL2_BOOTDEV:=sdmmc + BL2_SOC:=mt7988 + BL2_DDRTYPE:=comb + DEPENDS:=+trusted-firmware-a-mt7988-sdmmc-comb +endef + +define U-Boot/mt7988_bananapi_bpi-r4-snand + NAME:=BananaPi BPi-R4 + BUILD_SUBTARGET:=filogic + BUILD_DEVICES:=bananapi_bpi-r4 + UBOOT_CONFIG:=mt7988a_bananapi_bpi-r4-snand + UBOOT_IMAGE:=u-boot.fip + BL2_BOOTDEV:=spim-nand-ubi + BL2_SOC:=mt7988 + BL2_DDRTYPE:=comb + DEPENDS:=+trusted-firmware-a-mt7988-spim-nand-ubi-comb +endef + +define U-Boot/mt7988_bananapi_bpi-r4-poe-emmc + NAME:=BananaPi BPi-R4 2.5GE + BUILD_SUBTARGET:=filogic + BUILD_DEVICES:=bananapi_bpi-r4-poe + UBOOT_CONFIG:=mt7988a_bananapi_bpi-r4-poe-emmc + UBOOT_IMAGE:=u-boot.fip + BL2_BOOTDEV:=emmc + BL2_SOC:=mt7988 + BL2_DDRTYPE:=comb + DEPENDS:=+trusted-firmware-a-mt7988-emmc-comb +endef + +define U-Boot/mt7988_bananapi_bpi-r4-poe-sdmmc + NAME:=BananaPi BPi-R4 2.5GE + BUILD_SUBTARGET:=filogic + BUILD_DEVICES:=bananapi_bpi-r4-poe + UBOOT_CONFIG:=mt7988a_bananapi_bpi-r4-poe-sdmmc + UBOOT_IMAGE:=u-boot.fip + BL2_BOOTDEV:=sdmmc + BL2_SOC:=mt7988 + BL2_DDRTYPE:=comb + DEPENDS:=+trusted-firmware-a-mt7988-sdmmc-comb +endef + +define U-Boot/mt7988_bananapi_bpi-r4-poe-snand + NAME:=BananaPi BPi-R4 2.5GE + BUILD_SUBTARGET:=filogic + BUILD_DEVICES:=bananapi_bpi-r4-poe + UBOOT_CONFIG:=mt7988a_bananapi_bpi-r4-poe-snand + UBOOT_IMAGE:=u-boot.fip + BL2_BOOTDEV:=spim-nand-ubi + BL2_SOC:=mt7988 + BL2_DDRTYPE:=comb + DEPENDS:=+trusted-firmware-a-mt7988-spim-nand-ubi-comb +endef + define U-Boot/mt7988_rfb-spim-nand NAME:=MT7988 Reference Board BUILD_SUBTARGET:=filogic @@ -362,27 +719,57 @@ UBOOT_TARGETS := \ mt7620_rfb \ mt7621_nand_rfb \ mt7621_rfb \ + mt7621_zbtlink_zbt-wg3526-16m \ mt7622_bananapi_bpi-r64-emmc \ mt7622_bananapi_bpi-r64-sdmmc \ mt7622_bananapi_bpi-r64-snand \ mt7622_linksys_e8450 \ mt7622_rfb1 \ - mt7622_ubnt_unifi-6-lr \ + mt7622_ubnt_unifi-6-lr-v1 \ + mt7622_ubnt_unifi-6-lr-v2 \ + mt7622_ubnt_unifi-6-lr-v3 \ + mt7622_xiaomi_redmi-router-ax6s-ubi-loader \ mt7623n_bpir2 \ mt7623a_unielec_u7623 \ mt7628_rfb \ - ravpower_rp-wd009 \ + mt7628_ravpower_rp-wd009 \ mt7629_rfb \ + mt7981_cmcc_rax3000m-emmc \ + mt7981_cmcc_rax3000m-nand \ + mt7981_h3c_magic-nx30-pro \ + mt7981_jcg_q30-pro \ + mt7981_nokia_ea0326gmp \ + mt7981_openwrt_one-snand \ + mt7981_openwrt_one-nor \ mt7981_rfb-spim-nand \ mt7981_rfb-emmc \ mt7981_rfb-nor \ mt7981_rfb-sd \ mt7981_rfb-snfi \ + mt7981_qihoo_360t7 \ + mt7981_xiaomi_mi-router-ax3000t \ + mt7981_xiaomi_mi-router-wr30u \ mt7986_bananapi_bpi-r3-emmc \ mt7986_bananapi_bpi-r3-sdmmc \ mt7986_bananapi_bpi-r3-snand \ mt7986_bananapi_bpi-r3-nor \ + mt7986_bananapi_bpi-r3-mini-emmc \ + mt7986_bananapi_bpi-r3-mini-snand \ + mt7986_glinet_gl-mt6000 \ + mt7986_jdcloud_re-cp-03 \ + mt7986_netcore_n60 \ + mt7986_tplink_tl-xdr4288 \ + mt7986_tplink_tl-xdr6086 \ + mt7986_tplink_tl-xdr6088 \ + mt7986_xiaomi_redmi-router-ax6000 \ + mt7986_zyxel_ex5601-t0 \ mt7986_rfb \ + mt7988_bananapi_bpi-r4-emmc \ + mt7988_bananapi_bpi-r4-sdmmc \ + mt7988_bananapi_bpi-r4-snand \ + mt7988_bananapi_bpi-r4-poe-emmc \ + mt7988_bananapi_bpi-r4-poe-sdmmc \ + mt7988_bananapi_bpi-r4-poe-snand \ mt7988_rfb-spim-nand \ mt7988_rfb-snand \ mt7988_rfb-nor \ diff --git a/lede/package/boot/uboot-mediatek/patches/000-mtk-20-configs-mt7622-enable-environment-for-mt7622_rfb.patch b/lede/package/boot/uboot-mediatek/patches/000-mtk-20-configs-mt7622-enable-environment-for-mt7622_rfb.patch index 60eda91124..dcbf8b953f 100644 --- a/lede/package/boot/uboot-mediatek/patches/000-mtk-20-configs-mt7622-enable-environment-for-mt7622_rfb.patch +++ b/lede/package/boot/uboot-mediatek/patches/000-mtk-20-configs-mt7622-enable-environment-for-mt7622_rfb.patch @@ -18,9 +18,9 @@ Signed-off-by: Weijie Gao CONFIG_DEFAULT_DEVICE_TREE="mt7622-rfb" +CONFIG_ENV_SIZE=0x20000 +CONFIG_ENV_OFFSET=0x280000 - CONFIG_SYS_PROMPT="MT7622> " CONFIG_DEBUG_UART_BASE=0x11002000 CONFIG_DEBUG_UART_CLOCK=25000000 + CONFIG_SYS_LOAD_ADDR=0x4007ff28 @@ -25,6 +27,9 @@ CONFIG_CMD_SF_TEST=y CONFIG_CMD_PING=y CONFIG_CMD_SMC=y diff --git a/lede/package/boot/uboot-mediatek/patches/100-00-clk-remove-log_ret-from-clk_get_rate.patch b/lede/package/boot/uboot-mediatek/patches/100-00-clk-remove-log_ret-from-clk_get_rate.patch deleted file mode 100644 index d5f6f73762..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/100-00-clk-remove-log_ret-from-clk_get_rate.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 19f2aa053d5531a9ca0ece04dca172a522d58b90 Mon Sep 17 00:00:00 2001 -From: Weijie Gao -Date: Fri, 29 Jul 2022 11:32:28 +0800 -Subject: [PATCH 32/71] clk: remove log_ret from clk_get_rate - -The return value of clk_get_rate is ulong, an unsigned type. The size of -ulong depends on the cpu architecture, i.e. 4 bytes on 32-bit CPUs and -8 bytes on 64-bit CPUs. - -However log_ret only accepts and returns value in int type, a fixed 4-byte -type. This may truncate the real clock value and cause unexpected error on -64-bit platforms. - -This patch removes log_ret to solve this issue. - -Signed-off-by: Weijie Gao ---- - drivers/clk/clk-uclass.c | 7 +------ - 1 file changed, 1 insertion(+), 6 deletions(-) - ---- a/drivers/clk/clk-uclass.c -+++ b/drivers/clk/clk-uclass.c -@@ -471,7 +471,6 @@ void clk_free(struct clk *clk) - ulong clk_get_rate(struct clk *clk) - { - const struct clk_ops *ops; -- int ret; - - debug("%s(clk=%p)\n", __func__, clk); - if (!clk_valid(clk)) -@@ -481,11 +480,7 @@ ulong clk_get_rate(struct clk *clk) - if (!ops->get_rate) - return -ENOSYS; - -- ret = ops->get_rate(clk); -- if (ret) -- return log_ret(ret); -- -- return 0; -+ return ops->get_rate(clk); - } - - struct clk *clk_get_parent(struct clk *clk) diff --git a/lede/package/boot/uboot-mediatek/patches/100-02-drivers-mtd-add-support-for-MediaTek-SPI-NAND-flash-.patch b/lede/package/boot/uboot-mediatek/patches/100-02-drivers-mtd-add-support-for-MediaTek-SPI-NAND-flash-.patch index 42908621c1..0e63b1e2d3 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-02-drivers-mtd-add-support-for-MediaTek-SPI-NAND-flash-.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-02-drivers-mtd-add-support-for-MediaTek-SPI-NAND-flash-.patch @@ -783,7 +783,7 @@ Signed-off-by: Weijie Gao +} --- /dev/null +++ b/drivers/mtd/mtk-snand/mtk-snand-ids.c -@@ -0,0 +1,515 @@ +@@ -0,0 +1,519 @@ +// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause +/* + * Copyright (C) 2020 MediaTek Inc. All Rights Reserved. @@ -901,6 +901,10 @@ Signed-off-by: Weijie Gao + SNAND_MEMORG_1G_2K_64, + &snand_cap_read_from_cache_quad_q2d, + &snand_cap_program_load_x4), ++ SNAND_INFO("GD5F1GQ5UExxG", SNAND_ID(SNAND_ID_ADDR, 0xc8, 0x51), ++ SNAND_MEMORG_1G_2K_128, ++ &snand_cap_read_from_cache_quad, ++ &snand_cap_program_load_x4), + SNAND_INFO("GD5F2GQ4UExIG", SNAND_ID(SNAND_ID_ADDR, 0xc8, 0xd2), + SNAND_MEMORG_2G_2K_128, + &snand_cap_read_from_cache_quad_q2d, diff --git a/lede/package/boot/uboot-mediatek/patches/100-04-env-add-support-for-generic-MTD-device.patch b/lede/package/boot/uboot-mediatek/patches/100-04-env-add-support-for-generic-MTD-device.patch index da87978aef..9b02b4dc63 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-04-env-add-support-for-generic-MTD-device.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-04-env-add-support-for-generic-MTD-device.patch @@ -17,37 +17,18 @@ Signed-off-by: Weijie Gao 7 files changed, 299 insertions(+), 3 deletions(-) create mode 100644 env/mtd.c ---- a/cmd/nvedit.c -+++ b/cmd/nvedit.c -@@ -48,6 +48,7 @@ DECLARE_GLOBAL_DATA_PTR; - defined(CONFIG_ENV_IS_IN_MMC) || \ - defined(CONFIG_ENV_IS_IN_FAT) || \ - defined(CONFIG_ENV_IS_IN_EXT4) || \ -+ defined(CONFIG_ENV_IS_IN_MTD) || \ - defined(CONFIG_ENV_IS_IN_NAND) || \ - defined(CONFIG_ENV_IS_IN_NVRAM) || \ - defined(CONFIG_ENV_IS_IN_ONENAND) || \ -@@ -61,7 +62,7 @@ DECLARE_GLOBAL_DATA_PTR; - - #if !defined(ENV_IS_IN_DEVICE) && \ - !defined(CONFIG_ENV_IS_NOWHERE) --# error Define one of CONFIG_ENV_IS_IN_{EEPROM|FLASH|MMC|FAT|EXT4|\ -+# error Define one of CONFIG_ENV_IS_IN_{EEPROM|FLASH|MMC|FAT|EXT4|MTD|\ - NAND|NVRAM|ONENAND|SATA|SPI_FLASH|REMOTE|UBI} or CONFIG_ENV_IS_NOWHERE - #endif - --- a/env/Kconfig +++ b/env/Kconfig -@@ -62,7 +62,7 @@ config ENV_IS_NOWHERE +@@ -61,7 +61,7 @@ config ENV_IS_DEFAULT !ENV_IS_IN_MMC && !ENV_IS_IN_NAND && \ !ENV_IS_IN_NVRAM && !ENV_IS_IN_ONENAND && \ !ENV_IS_IN_REMOTE && !ENV_IS_IN_SPI_FLASH && \ - !ENV_IS_IN_UBI + !ENV_IS_IN_UBI && !ENV_IS_IN_MTD - help - Define this if you don't want to or can't have an environment stored - on a storage medium. In this case the environment will still exist -@@ -251,6 +251,27 @@ config ENV_IS_IN_MMC + select ENV_IS_NOWHERE + + config ENV_IS_NOWHERE +@@ -254,6 +254,27 @@ config ENV_IS_IN_MMC offset: "u-boot,mmc-env-offset", "u-boot,mmc-env-offset-redundant". CONFIG_ENV_OFFSET and CONFIG_ENV_OFFSET_REDUND are not used. @@ -75,7 +56,7 @@ Signed-off-by: Weijie Gao config ENV_IS_IN_NAND bool "Environment in a NAND device" depends on !CHAIN_OF_TRUST -@@ -558,10 +579,16 @@ config ENV_ADDR_REDUND +@@ -561,10 +582,16 @@ config ENV_ADDR_REDUND Offset from the start of the device (or partition) of the redundant environment location. @@ -93,7 +74,7 @@ Signed-off-by: Weijie Gao default 0x3f8000 if ARCH_ROCKCHIP && ENV_IS_IN_MMC default 0x140000 if ARCH_ROCKCHIP && ENV_IS_IN_SPI_FLASH default 0xF0000 if ARCH_SUNXI -@@ -609,6 +636,12 @@ config ENV_SECT_SIZE +@@ -622,6 +649,12 @@ config ENV_SECT_SIZE help Size of the sector containing the environment. @@ -118,7 +99,7 @@ Signed-off-by: Weijie Gao obj-$(CONFIG_$(SPL_TPL_)ENV_IS_IN_FLASH) += flash.o --- a/env/env.c +++ b/env/env.c -@@ -69,6 +69,9 @@ static enum env_location env_locations[] +@@ -46,6 +46,9 @@ static enum env_location env_locations[] #ifdef CONFIG_ENV_IS_IN_MMC ENVL_MMC, #endif diff --git a/lede/package/boot/uboot-mediatek/patches/100-08-common-board_r-add-support-to-initialize-NMBM-after-.patch b/lede/package/boot/uboot-mediatek/patches/100-08-common-board_r-add-support-to-initialize-NMBM-after-.patch index 93fc32cf9e..da4dce917b 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-08-common-board_r-add-support-to-initialize-NMBM-after-.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-08-common-board_r-add-support-to-initialize-NMBM-after-.patch @@ -13,7 +13,7 @@ Signed-off-by: Weijie Gao --- a/common/board_r.c +++ b/common/board_r.c -@@ -388,6 +388,20 @@ static int initr_nand(void) +@@ -373,6 +373,20 @@ static int initr_nand(void) } #endif @@ -34,7 +34,7 @@ Signed-off-by: Weijie Gao #if defined(CONFIG_CMD_ONENAND) /* go init the NAND */ static int initr_onenand(void) -@@ -696,6 +710,9 @@ static init_fnc_t init_sequence_r[] = { +@@ -675,6 +689,9 @@ static init_fnc_t init_sequence_r[] = { #ifdef CONFIG_CMD_ONENAND initr_onenand, #endif diff --git a/lede/package/boot/uboot-mediatek/patches/100-09-cmd-add-nmbm-command.patch b/lede/package/boot/uboot-mediatek/patches/100-09-cmd-add-nmbm-command.patch index 35d8f115f6..4eb2bc9ccf 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-09-cmd-add-nmbm-command.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-09-cmd-add-nmbm-command.patch @@ -15,7 +15,7 @@ Signed-off-by: Weijie Gao --- a/cmd/Kconfig +++ b/cmd/Kconfig -@@ -1353,6 +1353,12 @@ config CMD_NAND_TORTURE +@@ -1392,6 +1392,12 @@ config CMD_NAND_TORTURE endif # CMD_NAND @@ -30,7 +30,7 @@ Signed-off-by: Weijie Gao depends on NVME --- a/cmd/Makefile +++ b/cmd/Makefile -@@ -125,6 +125,7 @@ obj-y += legacy-mtd-utils.o +@@ -127,6 +127,7 @@ obj-y += legacy-mtd-utils.o endif obj-$(CONFIG_CMD_MUX) += mux.o obj-$(CONFIG_CMD_NAND) += nand.o diff --git a/lede/package/boot/uboot-mediatek/patches/100-10-cmd-mtd-add-markbad-subcommand-for-NMBM-testing.patch b/lede/package/boot/uboot-mediatek/patches/100-10-cmd-mtd-add-markbad-subcommand-for-NMBM-testing.patch index 6336fb33f5..c6358f3287 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-10-cmd-mtd-add-markbad-subcommand-for-NMBM-testing.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-10-cmd-mtd-add-markbad-subcommand-for-NMBM-testing.patch @@ -63,7 +63,7 @@ Signed-off-by: SkyLake.Huang #ifdef CONFIG_AUTO_COMPLETE static int mtd_name_complete(int argc, char *const argv[], char last_char, int maxv, char *cmdv[]) -@@ -552,6 +588,7 @@ static char mtd_help_text[] = +@@ -551,6 +587,7 @@ U_BOOT_LONGHELP(mtd, "\n" "Specific functions:\n" "mtd bad \n" @@ -71,7 +71,7 @@ Signed-off-by: SkyLake.Huang "\n" "With:\n" "\t: NAND partition/chip name (or corresponding DM device name or OF path)\n" -@@ -577,4 +614,6 @@ U_BOOT_CMD_WITH_SUBCMDS(mtd, "MTD utils" +@@ -575,4 +612,6 @@ U_BOOT_CMD_WITH_SUBCMDS(mtd, "MTD utils" U_BOOT_SUBCMD_MKENT_COMPLETE(erase, 4, 0, do_mtd_erase, mtd_name_complete), U_BOOT_SUBCMD_MKENT_COMPLETE(bad, 2, 1, do_mtd_bad, diff --git a/lede/package/boot/uboot-mediatek/patches/100-11-env-add-support-for-NMBM-upper-MTD-layer.patch b/lede/package/boot/uboot-mediatek/patches/100-11-env-add-support-for-NMBM-upper-MTD-layer.patch index 0b4ee32b62..dbb1e2e59d 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-11-env-add-support-for-NMBM-upper-MTD-layer.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-11-env-add-support-for-NMBM-upper-MTD-layer.patch @@ -17,37 +17,17 @@ Signed-off-by: Weijie Gao 7 files changed, 180 insertions(+), 3 deletions(-) create mode 100644 env/nmbm.c ---- a/cmd/nvedit.c -+++ b/cmd/nvedit.c -@@ -50,6 +50,7 @@ DECLARE_GLOBAL_DATA_PTR; - defined(CONFIG_ENV_IS_IN_EXT4) || \ - defined(CONFIG_ENV_IS_IN_MTD) || \ - defined(CONFIG_ENV_IS_IN_NAND) || \ -+ defined(CONFIG_ENV_IS_IN_NMBM) || \ - defined(CONFIG_ENV_IS_IN_NVRAM) || \ - defined(CONFIG_ENV_IS_IN_ONENAND) || \ - defined(CONFIG_ENV_IS_IN_SPI_FLASH) || \ -@@ -63,7 +64,7 @@ DECLARE_GLOBAL_DATA_PTR; - #if !defined(ENV_IS_IN_DEVICE) && \ - !defined(CONFIG_ENV_IS_NOWHERE) - # error Define one of CONFIG_ENV_IS_IN_{EEPROM|FLASH|MMC|FAT|EXT4|MTD|\ --NAND|NVRAM|ONENAND|SATA|SPI_FLASH|REMOTE|UBI} or CONFIG_ENV_IS_NOWHERE -+NAND|NMBM|NVRAM|ONENAND|SATA|SPI_FLASH|REMOTE|UBI} or CONFIG_ENV_IS_NOWHERE - #endif - - /* --- a/env/Kconfig +++ b/env/Kconfig -@@ -62,7 +62,7 @@ config ENV_IS_NOWHERE +@@ -59,6 +59,7 @@ config ENV_IS_DEFAULT + def_bool y if !ENV_IS_IN_EEPROM && !ENV_IS_IN_EXT4 && \ + !ENV_IS_IN_FAT && !ENV_IS_IN_FLASH && \ !ENV_IS_IN_MMC && !ENV_IS_IN_NAND && \ ++ !ENV_IS_IN_NMBM && \ !ENV_IS_IN_NVRAM && !ENV_IS_IN_ONENAND && \ !ENV_IS_IN_REMOTE && !ENV_IS_IN_SPI_FLASH && \ -- !ENV_IS_IN_UBI && !ENV_IS_IN_MTD -+ !ENV_IS_IN_UBI && !ENV_IS_IN_NMBM && !ENV_IS_IN_MTD - help - Define this if you don't want to or can't have an environment stored - on a storage medium. In this case the environment will still exist -@@ -312,6 +312,21 @@ config ENV_RANGE + !ENV_IS_IN_UBI && !ENV_IS_IN_MTD +@@ -315,6 +316,21 @@ config ENV_RANGE Specifying a range with more erase blocks than are needed to hold CONFIG_ENV_SIZE allows bad blocks within the range to be avoided. @@ -69,7 +49,7 @@ Signed-off-by: Weijie Gao config ENV_IS_IN_NVRAM bool "Environment in a non-volatile RAM" depends on !CHAIN_OF_TRUST -@@ -588,7 +603,7 @@ config ENV_MTD_NAME +@@ -591,7 +607,7 @@ config ENV_MTD_NAME config ENV_OFFSET hex "Environment offset" depends on ENV_IS_IN_EEPROM || ENV_IS_IN_MMC || ENV_IS_IN_NAND || \ @@ -90,7 +70,7 @@ Signed-off-by: Weijie Gao --- a/env/env.c +++ b/env/env.c -@@ -75,6 +75,9 @@ static enum env_location env_locations[] +@@ -52,6 +52,9 @@ static enum env_location env_locations[] #ifdef CONFIG_ENV_IS_IN_NAND ENVL_NAND, #endif diff --git a/lede/package/boot/uboot-mediatek/patches/100-13-cmd-add-a-new-command-for-NAND-flash-debugging.patch b/lede/package/boot/uboot-mediatek/patches/100-13-cmd-add-a-new-command-for-NAND-flash-debugging.patch index f3831e07f7..e6e12ae24c 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-13-cmd-add-a-new-command-for-NAND-flash-debugging.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-13-cmd-add-a-new-command-for-NAND-flash-debugging.patch @@ -26,7 +26,7 @@ Signed-off-by: Weijie Gao --- a/cmd/Kconfig +++ b/cmd/Kconfig -@@ -1353,6 +1353,14 @@ config CMD_NAND_TORTURE +@@ -1392,6 +1392,14 @@ config CMD_NAND_TORTURE endif # CMD_NAND @@ -43,7 +43,7 @@ Signed-off-by: Weijie Gao bool "nmbm" --- a/cmd/Makefile +++ b/cmd/Makefile -@@ -125,6 +125,7 @@ obj-y += legacy-mtd-utils.o +@@ -127,6 +127,7 @@ obj-y += legacy-mtd-utils.o endif obj-$(CONFIG_CMD_MUX) += mux.o obj-$(CONFIG_CMD_NAND) += nand.o diff --git a/lede/package/boot/uboot-mediatek/patches/100-14-mtd-spi-nor-add-support-to-read-flash-unique-ID.patch b/lede/package/boot/uboot-mediatek/patches/100-14-mtd-spi-nor-add-support-to-read-flash-unique-ID.patch index d9a645d20e..da09cd9c08 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-14-mtd-spi-nor-add-support-to-read-flash-unique-ID.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-14-mtd-spi-nor-add-support-to-read-flash-unique-ID.patch @@ -13,7 +13,7 @@ Signed-off-by: Weijie Gao --- a/drivers/mtd/spi/spi-nor-core.c +++ b/drivers/mtd/spi/spi-nor-core.c -@@ -2848,6 +2848,100 @@ static int spi_nor_init_params(struct sp +@@ -2854,6 +2854,100 @@ static int spi_nor_init_params(struct sp return 0; } @@ -114,7 +114,7 @@ Signed-off-by: Weijie Gao static int spi_nor_hwcaps2cmd(u32 hwcaps, const int table[][2], size_t size) { size_t i; -@@ -4045,6 +4139,7 @@ int spi_nor_scan(struct spi_nor *nor) +@@ -4051,6 +4145,7 @@ int spi_nor_scan(struct spi_nor *nor) nor->write = spi_nor_write_data; nor->read_reg = spi_nor_read_reg; nor->write_reg = spi_nor_write_reg; diff --git a/lede/package/boot/uboot-mediatek/patches/100-15-cmd-sf-add-support-to-read-flash-unique-ID.patch b/lede/package/boot/uboot-mediatek/patches/100-15-cmd-sf-add-support-to-read-flash-unique-ID.patch index ce59cc73ae..f7cbd8d052 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-15-cmd-sf-add-support-to-read-flash-unique-ID.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-15-cmd-sf-add-support-to-read-flash-unique-ID.patch @@ -12,7 +12,7 @@ Signed-off-by: Weijie Gao --- a/cmd/sf.c +++ b/cmd/sf.c -@@ -407,6 +407,14 @@ static int do_spi_protect(int argc, char +@@ -412,6 +412,14 @@ static int do_spi_protect(int argc, char return ret == 0 ? 0 : 1; } @@ -27,22 +27,20 @@ Signed-off-by: Weijie Gao enum { STAGE_ERASE, STAGE_CHECK, -@@ -601,6 +609,8 @@ static int do_spi_flash(struct cmd_tbl * +@@ -606,6 +614,8 @@ static int do_spi_flash(struct cmd_tbl * ret = do_spi_flash_erase(argc, argv); - else if (strcmp(cmd, "protect") == 0) + else if (IS_ENABLED(CONFIG_SPI_FLASH_LOCK) && strcmp(cmd, "protect") == 0) ret = do_spi_protect(argc, argv); + else if (strcmp(cmd, "uuid") == 0) + ret = do_spi_flash_read_uuid(); else if (IS_ENABLED(CONFIG_CMD_SF_TEST) && !strcmp(cmd, "test")) ret = do_spi_flash_test(argc, argv); else -@@ -626,7 +636,8 @@ static const char long_help[] = - " at `addr' to flash at `offset'\n" - " or to start of mtd `partition'\n" - "sf protect lock/unlock sector len - protect/unprotect 'len' bytes starting\n" -- " at address 'sector'" -+ " at address 'sector'\n" -+ "sf uuid - read uuid from flash" +@@ -636,6 +646,7 @@ U_BOOT_LONGHELP(sf, #ifdef CONFIG_CMD_SF_TEST "\nsf test offset len - run a very basic destructive test" #endif ++ "sf uuid - read uuid from flash" + ); + + U_BOOT_CMD( diff --git a/lede/package/boot/uboot-mediatek/patches/100-16-cmd-bootmenu-add-ability-to-select-item-by-shortkey.patch b/lede/package/boot/uboot-mediatek/patches/100-16-cmd-bootmenu-add-ability-to-select-item-by-shortkey.patch index 315f7f92a3..0438895fdb 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-16-cmd-bootmenu-add-ability-to-select-item-by-shortkey.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-16-cmd-bootmenu-add-ability-to-select-item-by-shortkey.patch @@ -255,15 +255,15 @@ Signed-off-by: Weijie Gao }; /** enum bootmenu_key - keys that can be returned by the bootmenu */ -@@ -54,6 +59,7 @@ enum bootmenu_key { - BKEY_MINUS, - BKEY_SPACE, +@@ -51,6 +56,7 @@ enum bootmenu_key { + BKEY_SELECT, + BKEY_QUIT, BKEY_SAVE, + BKEY_CHOICE, - BKEY_COUNT, - }; -@@ -76,7 +82,7 @@ enum bootmenu_key { + /* 'extra' keys, which are used by menus but not cedit */ + BKEY_PLUS, +@@ -81,7 +87,7 @@ enum bootmenu_key { * anything else: KEY_NONE */ enum bootmenu_key bootmenu_autoboot_loop(struct bootmenu_data *menu, @@ -272,7 +272,7 @@ Signed-off-by: Weijie Gao /** * bootmenu_loop() - handle waiting for a keypress when autoboot is disabled -@@ -102,7 +108,7 @@ enum bootmenu_key bootmenu_autoboot_loop +@@ -107,7 +113,7 @@ enum bootmenu_key bootmenu_autoboot_loop * Space: BKEY_SPACE */ enum bootmenu_key bootmenu_loop(struct bootmenu_data *menu, @@ -281,7 +281,7 @@ Signed-off-by: Weijie Gao /** * bootmenu_conv_key() - Convert a U-Boot keypress into a menu key -@@ -110,6 +116,7 @@ enum bootmenu_key bootmenu_loop(struct b +@@ -115,6 +121,7 @@ enum bootmenu_key bootmenu_loop(struct b * @ichar: Keypress to convert (ASCII, including control characters) * Returns: Menu key that corresponds to @ichar, or BKEY_NONE if none */ @@ -301,7 +301,7 @@ Signed-off-by: Weijie Gao switch (key) { case BKEY_UP: -@@ -1937,7 +1937,7 @@ char *eficonfig_choice_change_boot_order +@@ -1838,7 +1838,7 @@ char *eficonfig_choice_change_boot_order cli_ch_init(cch); while (1) { @@ -312,7 +312,7 @@ Signed-off-by: Weijie Gao case BKEY_PLUS: --- a/boot/bootflow_menu.c +++ b/boot/bootflow_menu.c -@@ -231,7 +231,7 @@ int bootflow_menu_run(struct bootstd_pri +@@ -235,7 +235,7 @@ int bootflow_menu_run(struct bootstd_pri key = 0; if (ichar) { diff --git a/lede/package/boot/uboot-mediatek/patches/100-17-common-spl-spl_nand-enable-CONFIG_SYS_NAND_U_BOOT_OF.patch b/lede/package/boot/uboot-mediatek/patches/100-17-common-spl-spl_nand-enable-CONFIG_SYS_NAND_U_BOOT_OF.patch index 149a156ba2..f017ce92ad 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-17-common-spl-spl_nand-enable-CONFIG_SYS_NAND_U_BOOT_OF.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-17-common-spl-spl_nand-enable-CONFIG_SYS_NAND_U_BOOT_OF.patch @@ -14,7 +14,7 @@ Signed-off-by: Weijie Gao --- a/common/spl/spl_nand.c +++ b/common/spl/spl_nand.c -@@ -16,7 +16,11 @@ +@@ -17,7 +17,11 @@ uint32_t __weak spl_nand_get_uboot_raw_page(void) { diff --git a/lede/package/boot/uboot-mediatek/patches/100-18-board-mt7629-add-support-for-booting-from-SPI-NAND.patch b/lede/package/boot/uboot-mediatek/patches/100-18-board-mt7629-add-support-for-booting-from-SPI-NAND.patch index 93a940b943..ef20c2dfb6 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-18-board-mt7629-add-support-for-booting-from-SPI-NAND.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-18-board-mt7629-add-support-for-booting-from-SPI-NAND.patch @@ -89,14 +89,14 @@ Signed-off-by: Weijie Gao reg = <0x11014000 0x1000>; --- a/arch/arm/mach-mediatek/Kconfig +++ b/arch/arm/mach-mediatek/Kconfig -@@ -133,9 +133,11 @@ config SYS_CONFIG_NAME +@@ -144,9 +144,11 @@ config SYS_CONFIG_NAME config MTK_BROM_HEADER_INFO string - default "media=nor" if TARGET_MT8518 || TARGET_MT8512 || TARGET_MT7629 || TARGET_MT7622 + default "media=nor" if TARGET_MT8518 || TARGET_MT8512 || TARGET_MT7622 default "media=emmc" if TARGET_MT8516 || TARGET_MT8365 || TARGET_MT8183 - default "media=snand;nandinfo=2k+64" if TARGET_MT7981 || TARGET_MT7986 + default "media=snand;nandinfo=2k+64" if TARGET_MT7981 || TARGET_MT7986 || TARGET_MT7988 default "lk=1" if TARGET_MT7623 +source "board/mediatek/mt7629/Kconfig" diff --git a/lede/package/boot/uboot-mediatek/patches/100-20-board-mt7981-add-reference-board-using-new-spi-nand-.patch b/lede/package/boot/uboot-mediatek/patches/100-20-board-mt7981-add-reference-board-using-new-spi-nand-.patch index cb3f1ff2af..9dc1a57722 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-20-board-mt7981-add-reference-board-using-new-spi-nand-.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-20-board-mt7981-add-reference-board-using-new-spi-nand-.patch @@ -18,7 +18,7 @@ Signed-off-by: Weijie Gao --- a/arch/arm/dts/Makefile +++ b/arch/arm/dts/Makefile -@@ -1308,6 +1308,7 @@ dtb-$(CONFIG_ARCH_MEDIATEK) += \ +@@ -1425,6 +1425,7 @@ dtb-$(CONFIG_ARCH_MEDIATEK) += \ mt7623n-bananapi-bpi-r2.dtb \ mt7629-rfb.dtb \ mt7981-rfb.dtb \ diff --git a/lede/package/boot/uboot-mediatek/patches/100-21-mtd-spi-nor-add-more-flash-ids.patch b/lede/package/boot/uboot-mediatek/patches/100-21-mtd-spi-nor-add-more-flash-ids.patch index bd68677eb0..15e943b1c0 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-21-mtd-spi-nor-add-more-flash-ids.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-21-mtd-spi-nor-add-more-flash-ids.patch @@ -13,7 +13,7 @@ Signed-off-by: Weijie Gao --- a/drivers/mtd/spi/spi-nor-core.c +++ b/drivers/mtd/spi/spi-nor-core.c -@@ -673,6 +673,7 @@ static int set_4byte(struct spi_nor *nor +@@ -674,6 +674,7 @@ static int set_4byte(struct spi_nor *nor case SNOR_MFR_ISSI: case SNOR_MFR_MACRONIX: case SNOR_MFR_WINBOND: @@ -45,7 +45,7 @@ Signed-off-by: Weijie Gao INFO("gd25lq128", 0xc86018, 0, 64 * 1024, 256, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB) -@@ -468,6 +474,16 @@ const struct flash_info spi_nor_ids[] = +@@ -474,6 +480,16 @@ const struct flash_info spi_nor_ids[] = SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB) }, { @@ -62,7 +62,7 @@ Signed-off-by: Weijie Gao INFO("w25q128jw", 0xef8018, 0, 64 * 1024, 256, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB) -@@ -517,6 +533,11 @@ const struct flash_info spi_nor_ids[] = +@@ -523,6 +539,11 @@ const struct flash_info spi_nor_ids[] = SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB) }, { INFO("w25q256", 0xef4019, 0, 64 * 1024, 512, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, diff --git a/lede/package/boot/uboot-mediatek/patches/100-22-mtd-spi-nand-backport-from-upstream-kernel.patch b/lede/package/boot/uboot-mediatek/patches/100-22-mtd-spi-nand-backport-from-upstream-kernel.patch index 0e233bb1d2..20489d8726 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-22-mtd-spi-nand-backport-from-upstream-kernel.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-22-mtd-spi-nand-backport-from-upstream-kernel.patch @@ -20,66 +20,17 @@ Signed-off-by: Weijie Gao 10 files changed, 923 insertions(+), 225 deletions(-) create mode 100644 drivers/mtd/nand/spi/etron.c ---- a/drivers/mtd/nand/spi/Kconfig -+++ b/drivers/mtd/nand/spi/Kconfig -@@ -5,3 +5,4 @@ menuconfig MTD_SPI_NAND - select SPI_MEM - help - This is the framework for the SPI NAND device drivers. -+ --- a/drivers/mtd/nand/spi/Makefile +++ b/drivers/mtd/nand/spi/Makefile @@ -1,4 +1,4 @@ # SPDX-License-Identifier: GPL-2.0 --spinand-objs := core.o gigadevice.o macronix.o micron.o toshiba.o winbond.o -+spinand-objs := core.o gigadevice.o macronix.o micron.o toshiba.o winbond.o etron.o +-spinand-objs := core.o gigadevice.o macronix.o micron.o paragon.o toshiba.o winbond.o ++spinand-objs := core.o etron.o gigadevice.o macronix.o micron.o paragon.o toshiba.o winbond.o obj-$(CONFIG_MTD_SPI_NAND) += spinand.o --- a/drivers/mtd/nand/spi/core.c +++ b/drivers/mtd/nand/spi/core.c -@@ -17,6 +17,7 @@ - #include - #include - #include -+#include - #include - #include - #else -@@ -451,10 +452,11 @@ out: - return status & STATUS_BUSY ? -ETIMEDOUT : 0; - } - --static int spinand_read_id_op(struct spinand_device *spinand, u8 *buf) -+static int spinand_read_id_op(struct spinand_device *spinand, u8 naddr, -+ u8 ndummy, u8 *buf) - { -- struct spi_mem_op op = SPINAND_READID_OP(0, spinand->scratchbuf, -- SPINAND_MAX_ID_LEN); -+ struct spi_mem_op op = SPINAND_READID_OP( -+ naddr, ndummy, spinand->scratchbuf, SPINAND_MAX_ID_LEN); - int ret; - - ret = spi_mem_exec_op(spinand->slave, &op); -@@ -464,18 +466,6 @@ static int spinand_read_id_op(struct spi - return ret; - } - --static int spinand_reset_op(struct spinand_device *spinand) --{ -- struct spi_mem_op op = SPINAND_RESET_OP; -- int ret; -- -- ret = spi_mem_exec_op(spinand->slave, &op); -- if (ret) -- return ret; -- -- return spinand_wait(spinand, NULL); --} -- - static int spinand_lock_block(struct spinand_device *spinand, u8 lock) - { - return spinand_write_reg_op(spinand, REG_BLOCK_LOCK, lock); -@@ -829,6 +819,7 @@ static const struct nand_ops spinand_ops +@@ -822,6 +822,7 @@ static const struct nand_ops spinand_ops }; static const struct spinand_manufacturer *spinand_manufacturers[] = { @@ -87,140 +38,6 @@ Signed-off-by: Weijie Gao &gigadevice_spinand_manufacturer, ¯onix_spinand_manufacturer, µn_spinand_manufacturer, -@@ -836,24 +827,63 @@ static const struct spinand_manufacturer - &winbond_spinand_manufacturer, - }; - --static int spinand_manufacturer_detect(struct spinand_device *spinand) -+static int spinand_manufacturer_match(struct spinand_device *spinand, -+ enum spinand_readid_method rdid_method) - { -+ u8 *id = spinand->id.data; - unsigned int i; - int ret; - - for (i = 0; i < ARRAY_SIZE(spinand_manufacturers); i++) { -- ret = spinand_manufacturers[i]->ops->detect(spinand); -- if (ret > 0) { -- spinand->manufacturer = spinand_manufacturers[i]; -- return 0; -- } else if (ret < 0) { -- return ret; -- } -+ const struct spinand_manufacturer *manufacturer = -+ spinand_manufacturers[i]; -+ -+ if (id[0] != manufacturer->id) -+ continue; -+ -+ ret = spinand_match_and_init(spinand, -+ manufacturer->chips, -+ manufacturer->nchips, -+ rdid_method); -+ if (ret < 0) -+ continue; -+ -+ spinand->manufacturer = manufacturer; -+ return 0; - } - - return -ENOTSUPP; - } - -+static int spinand_id_detect(struct spinand_device *spinand) -+{ -+ u8 *id = spinand->id.data; -+ int ret; -+ -+ ret = spinand_read_id_op(spinand, 0, 0, id); -+ if (ret) -+ return ret; -+ ret = spinand_manufacturer_match(spinand, SPINAND_READID_METHOD_OPCODE); -+ if (!ret) -+ return 0; -+ -+ ret = spinand_read_id_op(spinand, 1, 0, id); -+ if (ret) -+ return ret; -+ ret = spinand_manufacturer_match(spinand, -+ SPINAND_READID_METHOD_OPCODE_ADDR); -+ if (!ret) -+ return 0; -+ -+ ret = spinand_read_id_op(spinand, 0, 1, id); -+ if (ret) -+ return ret; -+ ret = spinand_manufacturer_match(spinand, -+ SPINAND_READID_METHOD_OPCODE_DUMMY); -+ -+ return ret; -+} -+ - static int spinand_manufacturer_init(struct spinand_device *spinand) - { - if (spinand->manufacturer->ops->init) -@@ -909,9 +939,9 @@ spinand_select_op_variant(struct spinand - * @spinand: SPI NAND object - * @table: SPI NAND device description table - * @table_size: size of the device description table -+ * @rdid_method: read id method to match - * -- * Should be used by SPI NAND manufacturer drivers when they want to find a -- * match between a device ID retrieved through the READ_ID command and an -+ * Match between a device ID retrieved through the READ_ID command and an - * entry in the SPI NAND description table. If a match is found, the spinand - * object will be initialized with information provided by the matching - * spinand_info entry. -@@ -920,8 +950,10 @@ spinand_select_op_variant(struct spinand - */ - int spinand_match_and_init(struct spinand_device *spinand, - const struct spinand_info *table, -- unsigned int table_size, u8 devid) -+ unsigned int table_size, -+ enum spinand_readid_method rdid_method) - { -+ u8 *id = spinand->id.data; - struct nand_device *nand = spinand_to_nand(spinand); - unsigned int i; - -@@ -929,13 +961,17 @@ int spinand_match_and_init(struct spinan - const struct spinand_info *info = &table[i]; - const struct spi_mem_op *op; - -- if (devid != info->devid) -+ if (rdid_method != info->devid.method) -+ continue; -+ -+ if (memcmp(id + 1, info->devid.id, info->devid.len)) - continue; - - nand->memorg = table[i].memorg; - nand->eccreq = table[i].eccreq; - spinand->eccinfo = table[i].eccinfo; - spinand->flags = table[i].flags; -+ spinand->id.len = 1 + table[i].devid.len; - spinand->select_target = table[i].select_target; - - op = spinand_select_op_variant(spinand, -@@ -967,17 +1003,7 @@ static int spinand_detect(struct spinand - struct nand_device *nand = spinand_to_nand(spinand); - int ret; - -- ret = spinand_reset_op(spinand); -- if (ret) -- return ret; -- -- ret = spinand_read_id_op(spinand, spinand->id.data); -- if (ret) -- return ret; -- -- spinand->id.len = SPINAND_MAX_ID_LEN; -- -- ret = spinand_manufacturer_detect(spinand); -+ ret = spinand_id_detect(spinand); - if (ret) { - dev_err(spinand->slave->dev, "unknown raw ID %02x %02x %02x %02x\n", - spinand->id.data[0], spinand->id.data[1], --- /dev/null +++ b/drivers/mtd/nand/spi/etron.c @@ -0,0 +1,181 @@ @@ -320,7 +137,7 @@ Signed-off-by: Weijie Gao + /* EM73C 1Gb 3.3V */ + SPINAND_INFO("EM73C044VCF", + SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x25), -+ NAND_MEMORG(1, 2048, 64, 64, 1024, 1, 1, 1), ++ NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1), + NAND_ECCREQ(4, 512), + SPINAND_INFO_OP_VARIANTS(&read_cache_variants, + &write_cache_variants, @@ -330,7 +147,7 @@ Signed-off-by: Weijie Gao + /* EM7xD 2Gb */ + SPINAND_INFO("EM73D044VCR", + SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x41), -+ NAND_MEMORG(1, 2048, 64, 64, 2048, 1, 1, 1), ++ NAND_MEMORG(1, 2048, 64, 64, 2048, 40, 1, 1, 1), + NAND_ECCREQ(4, 512), + SPINAND_INFO_OP_VARIANTS(&read_cache_variants, + &write_cache_variants, @@ -339,7 +156,7 @@ Signed-off-by: Weijie Gao + SPINAND_ECCINFO(&etron_ooblayout, etron_ecc_get_status)), + SPINAND_INFO("EM73D044VCO", + SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x3A), -+ NAND_MEMORG(1, 2048, 128, 64, 2048, 1, 1, 1), ++ NAND_MEMORG(1, 2048, 128, 64, 2048, 40, 1, 1, 1), + NAND_ECCREQ(8, 512), + SPINAND_INFO_OP_VARIANTS(&read_cache_variants, + &write_cache_variants, @@ -348,7 +165,7 @@ Signed-off-by: Weijie Gao + SPINAND_ECCINFO(&etron_ooblayout, etron_ecc_get_status)), + SPINAND_INFO("EM78D044VCM", + SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x8E), -+ NAND_MEMORG(1, 2048, 128, 64, 2048, 1, 1, 1), ++ NAND_MEMORG(1, 2048, 128, 64, 2048, 40, 1, 1, 1), + NAND_ECCREQ(8, 512), + SPINAND_INFO_OP_VARIANTS(&read_cache_variants, + &write_cache_variants, @@ -358,7 +175,7 @@ Signed-off-by: Weijie Gao + /* EM7xE 4Gb */ + SPINAND_INFO("EM73E044VCE", + SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x3B), -+ NAND_MEMORG(1, 2048, 128, 64, 4096, 1, 1, 1), ++ NAND_MEMORG(1, 2048, 128, 64, 4096, 80, 1, 1, 1), + NAND_ECCREQ(8, 512), + SPINAND_INFO_OP_VARIANTS(&read_cache_variants, + &write_cache_variants, @@ -367,7 +184,7 @@ Signed-off-by: Weijie Gao + SPINAND_ECCINFO(&etron_ooblayout, etron_ecc_get_status)), + SPINAND_INFO("EM78E044VCD", + SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x8F), -+ NAND_MEMORG(1, 2048, 128, 64, 4096, 1, 1, 1), ++ NAND_MEMORG(1, 2048, 128, 64, 4096, 80, 1, 1, 1), + NAND_ECCREQ(8, 512), + SPINAND_INFO_OP_VARIANTS(&read_cache_variants, + &write_cache_variants, @@ -377,7 +194,7 @@ Signed-off-by: Weijie Gao + /* EM7xF044VCA 8Gb */ + SPINAND_INFO("EM73F044VCA", + SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x15), -+ NAND_MEMORG(1, 4096, 256, 64, 4096, 1, 1, 1), ++ NAND_MEMORG(1, 4096, 256, 64, 4096, 80, 1, 1, 1), + NAND_ECCREQ(8, 512), + SPINAND_INFO_OP_VARIANTS(&read_cache_variants, + &write_cache_variants, @@ -386,7 +203,7 @@ Signed-off-by: Weijie Gao + SPINAND_ECCINFO(&etron_ooblayout, etron_ecc_get_status)), + SPINAND_INFO("EM78F044VCA", + SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x8D), -+ NAND_MEMORG(1, 4096, 256, 64, 4096, 1, 1, 1), ++ NAND_MEMORG(1, 4096, 256, 64, 4096, 80, 1, 1, 1), + NAND_ECCREQ(8, 512), + SPINAND_INFO_OP_VARIANTS(&read_cache_variants, + &write_cache_variants, @@ -407,45 +224,19 @@ Signed-off-by: Weijie Gao +}; --- a/drivers/mtd/nand/spi/gigadevice.c +++ b/drivers/mtd/nand/spi/gigadevice.c -@@ -22,8 +22,13 @@ +@@ -43,6 +43,24 @@ static SPINAND_OP_VARIANTS(read_cache_va + SPINAND_PAGE_READ_FROM_CACHE_OP_3A(true, 0, 1, NULL, 0), + SPINAND_PAGE_READ_FROM_CACHE_OP_3A(false, 0, 0, NULL, 0)); - #define GD5FXGQXXEXXG_REG_STATUS2 0xf0 - -+#define GD5FXGQ4UXFXXG_STATUS_ECC_MASK (7 << 4) -+#define GD5FXGQ4UXFXXG_STATUS_ECC_NO_BITFLIPS (0 << 4) -+#define GD5FXGQ4UXFXXG_STATUS_ECC_1_3_BITFLIPS (1 << 4) -+#define GD5FXGQ4UXFXXG_STATUS_ECC_UNCOR_ERROR (7 << 4) -+ - /* Q4 devices, QUADIO: Dummy bytes valid for 1 and 2 GBit variants */ --static SPINAND_OP_VARIANTS(gd5fxgq4_read_cache_variants, -+static SPINAND_OP_VARIANTS(read_cache_variants, - SPINAND_PAGE_READ_FROM_CACHE_QUADIO_OP(0, 1, NULL, 0), - SPINAND_PAGE_READ_FROM_CACHE_X4_OP(0, 1, NULL, 0), - SPINAND_PAGE_READ_FROM_CACHE_DUALIO_OP(0, 1, NULL, 0), -@@ -31,8 +36,17 @@ static SPINAND_OP_VARIANTS(gd5fxgq4_read - SPINAND_PAGE_READ_FROM_CACHE_OP(true, 0, 1, NULL, 0), - SPINAND_PAGE_READ_FROM_CACHE_OP(false, 0, 1, NULL, 0)); - --/* Q5 devices, QUADIO: Dummy bytes only valid for 1 GBit variants */ --static SPINAND_OP_VARIANTS(gd5f1gq5_read_cache_variants, -+static SPINAND_OP_VARIANTS(read_cache_variants_f, -+ SPINAND_PAGE_READ_FROM_CACHE_QUADIO_OP(0, 1, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_X4_OP_3A(0, 1, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_DUALIO_OP(0, 1, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_X2_OP_3A(0, 1, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_OP_3A(true, 0, 1, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_OP_3A(false, 0, 0, NULL, 0)); -+ -+/* For Q5 devices, QUADIO use different dummy byte settings */ +/* Q5 1Gb */ +static SPINAND_OP_VARIANTS(dummy2_read_cache_variants, - SPINAND_PAGE_READ_FROM_CACHE_QUADIO_OP(0, 2, NULL, 0), - SPINAND_PAGE_READ_FROM_CACHE_X4_OP(0, 1, NULL, 0), - SPINAND_PAGE_READ_FROM_CACHE_DUALIO_OP(0, 1, NULL, 0), -@@ -40,6 +54,15 @@ static SPINAND_OP_VARIANTS(gd5f1gq5_read - SPINAND_PAGE_READ_FROM_CACHE_OP(true, 0, 1, NULL, 0), - SPINAND_PAGE_READ_FROM_CACHE_OP(false, 0, 1, NULL, 0)); - ++ SPINAND_PAGE_READ_FROM_CACHE_QUADIO_OP(0, 2, NULL, 0), ++ SPINAND_PAGE_READ_FROM_CACHE_X4_OP(0, 1, NULL, 0), ++ SPINAND_PAGE_READ_FROM_CACHE_DUALIO_OP(0, 1, NULL, 0), ++ SPINAND_PAGE_READ_FROM_CACHE_X2_OP(0, 1, NULL, 0), ++ SPINAND_PAGE_READ_FROM_CACHE_OP(true, 0, 1, NULL, 0), ++ SPINAND_PAGE_READ_FROM_CACHE_OP(false, 0, 1, NULL, 0)); ++ +/* Q5 2Gb & 4Gb */ +static SPINAND_OP_VARIANTS(dummy4_read_cache_variants, + SPINAND_PAGE_READ_FROM_CACHE_QUADIO_OP(0, 4, NULL, 0), @@ -458,124 +249,10 @@ Signed-off-by: Weijie Gao static SPINAND_OP_VARIANTS(write_cache_variants, SPINAND_PROG_LOAD_X4(true, 0, NULL, 0), SPINAND_PROG_LOAD(true, 0, NULL, 0)); -@@ -48,7 +71,65 @@ static SPINAND_OP_VARIANTS(update_cache_ - SPINAND_PROG_LOAD_X4(false, 0, NULL, 0), - SPINAND_PROG_LOAD(false, 0, NULL, 0)); - --static int gd5fxgqxxexxg_ooblayout_ecc(struct mtd_info *mtd, int section, -+static int gd5fxgq4xa_ooblayout_ecc(struct mtd_info *mtd, int section, -+ struct mtd_oob_region *region) -+{ -+ if (section > 3) -+ return -ERANGE; -+ -+ region->offset = (16 * section) + 8; -+ region->length = 8; -+ -+ return 0; -+} -+ -+static int gd5fxgq4xa_ooblayout_free(struct mtd_info *mtd, int section, -+ struct mtd_oob_region *region) -+{ -+ if (section > 3) -+ return -ERANGE; -+ -+ if (section) { -+ region->offset = 16 * section; -+ region->length = 8; -+ } else { -+ /* section 0 has one byte reserved for bad block mark */ -+ region->offset = 1; -+ region->length = 7; -+ } -+ return 0; -+} -+ -+static const struct mtd_ooblayout_ops gd5fxgq4xa_ooblayout = { -+ .ecc = gd5fxgq4xa_ooblayout_ecc, -+ .rfree = gd5fxgq4xa_ooblayout_free, -+}; -+ -+static int gd5fxgq4xa_ecc_get_status(struct spinand_device *spinand, -+ u8 status) -+{ -+ switch (status & STATUS_ECC_MASK) { -+ case STATUS_ECC_NO_BITFLIPS: -+ return 0; -+ -+ case GD5FXGQ4XA_STATUS_ECC_1_7_BITFLIPS: -+ /* 1-7 bits are flipped. return the maximum. */ -+ return 7; -+ -+ case GD5FXGQ4XA_STATUS_ECC_8_BITFLIPS: -+ return 8; -+ -+ case STATUS_ECC_UNCOR_ERROR: -+ return -EBADMSG; -+ -+ default: -+ break; -+ } -+ -+ return -EINVAL; -+} -+ -+static int gd5fxgqx_variant2_ooblayout_ecc(struct mtd_info *mtd, int section, - struct mtd_oob_region *region) - { - if (section) -@@ -60,7 +141,7 @@ static int gd5fxgqxxexxg_ooblayout_ecc(s - return 0; - } - --static int gd5fxgqxxexxg_ooblayout_free(struct mtd_info *mtd, int section, -+static int gd5fxgqx_variant2_ooblayout_free(struct mtd_info *mtd, int section, - struct mtd_oob_region *region) - { - if (section) -@@ -73,7 +154,13 @@ static int gd5fxgqxxexxg_ooblayout_free( - return 0; - } - --static int gd5fxgq4xexxg_ecc_get_status(struct spinand_device *spinand, -+/* Valid for Q4/Q5 and Q6 (untested) devices */ -+static const struct mtd_ooblayout_ops gd5fxgqx_variant2_ooblayout = { -+ .ecc = gd5fxgqx_variant2_ooblayout_ecc, -+ .rfree = gd5fxgqx_variant2_ooblayout_free, -+}; -+ -+static int gd5fxgq4uexxg_ecc_get_status(struct spinand_device *spinand, - u8 status) - { - u8 status2; -@@ -152,59 +239,214 @@ static int gd5fxgq5xexxg_ecc_get_status( +@@ -268,7 +286,45 @@ static int gd5fxgq4ufxxg_ecc_get_status( return -EINVAL; } --static const struct mtd_ooblayout_ops gd5fxgqxxexxg_ooblayout = { -- .ecc = gd5fxgqxxexxg_ooblayout_ecc, -- .rfree = gd5fxgqxxexxg_ooblayout_free, -+static int gd5fxgq4ufxxg_ecc_get_status(struct spinand_device *spinand, -+ u8 status) -+{ -+ switch (status & GD5FXGQ4UXFXXG_STATUS_ECC_MASK) { -+ case GD5FXGQ4UXFXXG_STATUS_ECC_NO_BITFLIPS: -+ return 0; -+ -+ case GD5FXGQ4UXFXXG_STATUS_ECC_1_3_BITFLIPS: -+ return 3; -+ -+ case GD5FXGQ4UXFXXG_STATUS_ECC_UNCOR_ERROR: -+ return -EBADMSG; -+ -+ default: /* (2 << 4) through (6 << 4) are 4-8 corrected errors */ -+ return ((status & GD5FXGQ4UXFXXG_STATUS_ECC_MASK) >> 4) + 2; -+ } -+ -+ return -EINVAL; -+} -+ +static int esmt_1_ooblayout_ecc(struct mtd_info *mtd, int section, + struct mtd_oob_region *region) +{ @@ -603,90 +280,28 @@ Signed-off-by: Weijie Gao +static const struct mtd_ooblayout_ops esmt_1_ooblayout = { + .ecc = esmt_1_ooblayout_ecc, + .rfree = esmt_1_ooblayout_free, - }; - ++ }; ++ static const struct spinand_info gigadevice_spinand_table[] = { -- SPINAND_INFO("GD5F1GQ4UExxG", 0xd1, -- NAND_MEMORG(1, 2048, 128, 64, 1024, 1, 1, 1), + SPINAND_INFO("F50L1G41LB", + SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x01), -+ NAND_MEMORG(1, 2048, 64, 64, 1024, 1, 1, 1), - NAND_ECCREQ(8, 512), -- SPINAND_INFO_OP_VARIANTS(&gd5fxgq4_read_cache_variants, ++ NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1), ++ NAND_ECCREQ(8, 512), + SPINAND_INFO_OP_VARIANTS(&dummy2_read_cache_variants, - &write_cache_variants, - &update_cache_variants), - 0, -- SPINAND_ECCINFO(&gd5fxgqxxexxg_ooblayout, -- gd5fxgq4xexxg_ecc_get_status)), -- SPINAND_INFO("GD5F1GQ5UExxG", 0x51, ++ &write_cache_variants, ++ &update_cache_variants), ++ 0, + SPINAND_ECCINFO(&esmt_1_ooblayout, NULL)), -+ SPINAND_INFO("GD5F1GQ4xA", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0xf1), -+ NAND_MEMORG(1, 2048, 64, 64, 1024, 1, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&gd5fxgq4xa_ooblayout, -+ gd5fxgq4xa_ecc_get_status)), -+ SPINAND_INFO("GD5F2GQ4xA", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0xf2), -+ NAND_MEMORG(1, 2048, 64, 64, 2048, 1, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&gd5fxgq4xa_ooblayout, -+ gd5fxgq4xa_ecc_get_status)), -+ SPINAND_INFO("GD5F4GQ4xA", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0xf4), -+ NAND_MEMORG(1, 2048, 64, 64, 4096, 1, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&gd5fxgq4xa_ooblayout, -+ gd5fxgq4xa_ecc_get_status)), -+ SPINAND_INFO("GD5F1GQ4UExxG", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0xd1), -+ NAND_MEMORG(1, 2048, 128, 64, 1024, 1, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout, -+ gd5fxgq4uexxg_ecc_get_status)), -+ SPINAND_INFO("GD5F1GQ4UFxxG", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE, 0xb1, 0x48), -+ NAND_MEMORG(1, 2048, 128, 64, 1024, 1, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants_f, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout, -+ gd5fxgq4ufxxg_ecc_get_status)), -+ SPINAND_INFO("GD5F1GQ5UExxG", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x51), - NAND_MEMORG(1, 2048, 128, 64, 1024, 1, 1, 1), - NAND_ECCREQ(4, 512), -- SPINAND_INFO_OP_VARIANTS(&gd5f1gq5_read_cache_variants, -+ SPINAND_INFO_OP_VARIANTS(&dummy2_read_cache_variants, - &write_cache_variants, - &update_cache_variants), -- 0, -- SPINAND_ECCINFO(&gd5fxgqxxexxg_ooblayout, -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout, -+ gd5fxgq5xexxg_ecc_get_status)), + SPINAND_INFO("GD5F1GQ4xA", + SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0xf1), + NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1), +@@ -349,6 +405,87 @@ static const struct spinand_info gigadev + SPINAND_HAS_QE_BIT, + SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout, + gd5fxgq5xexxg_ecc_get_status)), + SPINAND_INFO("GD5F2GQ5UExxG", + SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x52), -+ NAND_MEMORG(1, 2048, 128, 64, 2048, 1, 1, 1), ++ NAND_MEMORG(1, 2048, 128, 64, 2048, 40, 1, 1, 1), + NAND_ECCREQ(4, 512), + SPINAND_INFO_OP_VARIANTS(&dummy4_read_cache_variants, + &write_cache_variants, @@ -696,7 +311,7 @@ Signed-off-by: Weijie Gao + gd5fxgq5xexxg_ecc_get_status)), + SPINAND_INFO("GD5F4GQ6UExxG", + SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x55), -+ NAND_MEMORG(1, 2048, 128, 64, 4096, 1, 1, 1), ++ NAND_MEMORG(1, 2048, 128, 64, 4096, 80, 1, 1, 1), + NAND_ECCREQ(4, 512), + SPINAND_INFO_OP_VARIANTS(&dummy4_read_cache_variants, + &write_cache_variants, @@ -706,7 +321,7 @@ Signed-off-by: Weijie Gao + gd5fxgq5xexxg_ecc_get_status)), + SPINAND_INFO("GD5F1GM7UExxG", + SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x91), -+ NAND_MEMORG(1, 2048, 128, 64, 1024, 1, 1, 1), ++ NAND_MEMORG(1, 2048, 128, 64, 1024, 20, 1, 1, 1), + NAND_ECCREQ(8, 512), + SPINAND_INFO_OP_VARIANTS(&read_cache_variants, + &write_cache_variants, @@ -716,7 +331,7 @@ Signed-off-by: Weijie Gao + gd5fxgq4uexxg_ecc_get_status)), + SPINAND_INFO("GD5F2GM7UExxG", + SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x92), -+ NAND_MEMORG(1, 2048, 128, 64, 2048, 1, 1, 1), ++ NAND_MEMORG(1, 2048, 128, 64, 2048, 40, 1, 1, 1), + NAND_ECCREQ(8, 512), + SPINAND_INFO_OP_VARIANTS(&read_cache_variants, + &write_cache_variants, @@ -726,7 +341,7 @@ Signed-off-by: Weijie Gao + gd5fxgq4uexxg_ecc_get_status)), + SPINAND_INFO("GD5F4GM8UExxG", + SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x95), -+ NAND_MEMORG(1, 2048, 128, 64, 4096, 1, 1, 1), ++ NAND_MEMORG(1, 2048, 128, 64, 4096, 80, 1, 1, 1), + NAND_ECCREQ(8, 512), + SPINAND_INFO_OP_VARIANTS(&read_cache_variants, + &write_cache_variants, @@ -736,7 +351,7 @@ Signed-off-by: Weijie Gao + gd5fxgq4uexxg_ecc_get_status)), + SPINAND_INFO("GD5F1GQ5UExxH", + SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x31), -+ NAND_MEMORG(1, 2048, 64, 64, 1024, 1, 1, 1), ++ NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1), + NAND_ECCREQ(4, 512), + SPINAND_INFO_OP_VARIANTS(&dummy2_read_cache_variants, + &write_cache_variants, @@ -746,7 +361,7 @@ Signed-off-by: Weijie Gao + gd5fxgq5xexxg_ecc_get_status)), + SPINAND_INFO("GD5F2GQ5UExxH", + SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x32), -+ NAND_MEMORG(1, 2048, 64, 64, 2048, 1, 1, 1), ++ NAND_MEMORG(1, 2048, 64, 64, 2048, 40, 1, 1, 1), + NAND_ECCREQ(4, 512), + SPINAND_INFO_OP_VARIANTS(&dummy4_read_cache_variants, + &write_cache_variants, @@ -756,600 +371,21 @@ Signed-off-by: Weijie Gao + gd5fxgq5xexxg_ecc_get_status)), + SPINAND_INFO("GD5F4GQ6UExxH", + SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x35), -+ NAND_MEMORG(1, 2048, 64, 64, 4096, 1, 1, 1), ++ NAND_MEMORG(1, 2048, 64, 64, 4096, 40, 1, 1, 1), + NAND_ECCREQ(4, 512), + SPINAND_INFO_OP_VARIANTS(&dummy4_read_cache_variants, + &write_cache_variants, + &update_cache_variants), + SPINAND_HAS_QE_BIT, + SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout, - gd5fxgq5xexxg_ecc_get_status)), - }; - --static int gigadevice_spinand_detect(struct spinand_device *spinand) --{ -- u8 *id = spinand->id.data; -- int ret; -- -- /* -- * For GD NANDs, There is an address byte needed to shift in before IDs -- * are read out, so the first byte in raw_id is dummy. -- */ -- if (id[1] != SPINAND_MFR_GIGADEVICE) -- return 0; -- -- ret = spinand_match_and_init(spinand, gigadevice_spinand_table, -- ARRAY_SIZE(gigadevice_spinand_table), -- id[2]); -- if (ret) -- return ret; -- -- return 1; --} -- - static const struct spinand_manufacturer_ops gigadevice_spinand_manuf_ops = { -- .detect = gigadevice_spinand_detect, - }; - - const struct spinand_manufacturer gigadevice_spinand_manufacturer = { - .id = SPINAND_MFR_GIGADEVICE, - .name = "GigaDevice", -+ .chips = gigadevice_spinand_table, -+ .nchips = ARRAY_SIZE(gigadevice_spinand_table), - .ops = &gigadevice_spinand_manuf_ops, - }; ---- a/drivers/mtd/nand/spi/macronix.c -+++ b/drivers/mtd/nand/spi/macronix.c -@@ -105,7 +105,8 @@ static int mx35lf1ge4ab_ecc_get_status(s - } - - static const struct spinand_info macronix_spinand_table[] = { -- SPINAND_INFO("MX35LF1GE4AB", 0x12, -+ SPINAND_INFO("MX35LF1GE4AB", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x12), - NAND_MEMORG(1, 2048, 64, 64, 1024, 1, 1, 1), - NAND_ECCREQ(4, 512), - SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -@@ -114,7 +115,8 @@ static const struct spinand_info macroni - SPINAND_HAS_QE_BIT, - SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, - mx35lf1ge4ab_ecc_get_status)), -- SPINAND_INFO("MX35LF2GE4AB", 0x22, -+ SPINAND_INFO("MX35LF2GE4AB", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x22), - NAND_MEMORG(1, 2048, 64, 64, 2048, 2, 1, 1), - NAND_ECCREQ(4, 512), - SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -@@ -122,7 +124,96 @@ static const struct spinand_info macroni - &update_cache_variants), - SPINAND_HAS_QE_BIT, - SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, NULL)), -- SPINAND_INFO("MX35UF4GE4AD", 0xb7, -+ SPINAND_INFO("MX35LF2GE4AD", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x26), -+ NAND_MEMORG(1, 2048, 64, 64, 2048, 1, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, -+ mx35lf1ge4ab_ecc_get_status)), -+ SPINAND_INFO("MX35LF4GE4AD", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x37), -+ NAND_MEMORG(1, 4096, 128, 64, 2048, 1, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, -+ mx35lf1ge4ab_ecc_get_status)), -+ SPINAND_INFO("MX35LF1G24AD", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x14), -+ NAND_MEMORG(1, 2048, 128, 64, 1024, 1, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, NULL)), -+ SPINAND_INFO("MX35LF2G24AD", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x24), -+ NAND_MEMORG(1, 2048, 128, 64, 2048, 2, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, NULL)), -+ SPINAND_INFO("MX35LF4G24AD", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x35), -+ NAND_MEMORG(1, 4096, 256, 64, 2048, 2, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, NULL)), -+ SPINAND_INFO("MX31LF1GE4BC", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x1e), -+ NAND_MEMORG(1, 2048, 64, 64, 1024, 1, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, -+ mx35lf1ge4ab_ecc_get_status)), -+ SPINAND_INFO("MX31UF1GE4BC", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x9e), -+ NAND_MEMORG(1, 2048, 64, 64, 1024, 1, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, -+ mx35lf1ge4ab_ecc_get_status)), ++ gd5fxgq5xexxg_ecc_get_status)), + -+ SPINAND_INFO("MX35LF2G14AC", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x20), -+ NAND_MEMORG(1, 2048, 64, 64, 2048, 2, 1, 1), -+ NAND_ECCREQ(4, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, -+ mx35lf1ge4ab_ecc_get_status)), -+ SPINAND_INFO("MX35UF4G24AD", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xb5), -+ NAND_MEMORG(1, 4096, 256, 64, 2048, 2, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, -+ mx35lf1ge4ab_ecc_get_status)), -+ SPINAND_INFO("MX35UF4GE4AD", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xb7), - NAND_MEMORG(1, 4096, 256, 64, 2048, 1, 1, 1), - NAND_ECCREQ(8, 512), - SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -@@ -131,7 +222,28 @@ static const struct spinand_info macroni - SPINAND_HAS_QE_BIT, - SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, - mx35lf1ge4ab_ecc_get_status)), -- SPINAND_INFO("MX35UF2GE4AD", 0xa6, -+ SPINAND_INFO("MX35UF2G14AC", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xa0), -+ NAND_MEMORG(1, 2048, 64, 64, 2048, 2, 1, 1), -+ NAND_ECCREQ(4, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, -+ mx35lf1ge4ab_ecc_get_status)), -+ SPINAND_INFO("MX35UF2G24AD", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xa4), -+ NAND_MEMORG(1, 2048, 128, 64, 2048, 2, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, -+ mx35lf1ge4ab_ecc_get_status)), -+ SPINAND_INFO("MX35UF2GE4AD", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xa6), - NAND_MEMORG(1, 2048, 128, 64, 2048, 1, 1, 1), - NAND_ECCREQ(8, 512), - SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -@@ -140,16 +252,28 @@ static const struct spinand_info macroni - SPINAND_HAS_QE_BIT, - SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, - mx35lf1ge4ab_ecc_get_status)), -- SPINAND_INFO("MX35UF2GE4AC", 0xa2, -+ SPINAND_INFO("MX35UF2GE4AC", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xa2), - NAND_MEMORG(1, 2048, 64, 64, 2048, 1, 1, 1), - NAND_ECCREQ(4, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, -+ mx35lf1ge4ab_ecc_get_status)), -+ SPINAND_INFO("MX35UF1G14AC", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x90), -+ NAND_MEMORG(1, 2048, 64, 64, 1024, 1, 1, 1), -+ NAND_ECCREQ(4, 512), - SPINAND_INFO_OP_VARIANTS(&read_cache_variants, - &write_cache_variants, - &update_cache_variants), - SPINAND_HAS_QE_BIT, - SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, - mx35lf1ge4ab_ecc_get_status)), -- SPINAND_INFO("MX35UF1GE4AD", 0x96, -+ SPINAND_INFO("MX35UF1G24AD", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x94), - NAND_MEMORG(1, 2048, 128, 64, 1024, 1, 1, 1), - NAND_ECCREQ(8, 512), - SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -@@ -158,7 +282,18 @@ static const struct spinand_info macroni - SPINAND_HAS_QE_BIT, - SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, - mx35lf1ge4ab_ecc_get_status)), -- SPINAND_INFO("MX35UF1GE4AC", 0x92, -+ SPINAND_INFO("MX35UF1GE4AD", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x96), -+ NAND_MEMORG(1, 2048, 128, 64, 1024, 1, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, -+ mx35lf1ge4ab_ecc_get_status)), -+ SPINAND_INFO("MX35UF1GE4AC", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x92), - NAND_MEMORG(1, 2048, 64, 64, 1024, 1, 1, 1), - NAND_ECCREQ(4, 512), - SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -@@ -170,33 +305,13 @@ static const struct spinand_info macroni - }; --static int macronix_spinand_detect(struct spinand_device *spinand) --{ -- u8 *id = spinand->id.data; -- int ret; -- -- /* -- * Macronix SPI NAND read ID needs a dummy byte, so the first byte in -- * raw_id is garbage. -- */ -- if (id[1] != SPINAND_MFR_MACRONIX) -- return 0; -- -- ret = spinand_match_and_init(spinand, macronix_spinand_table, -- ARRAY_SIZE(macronix_spinand_table), -- id[2]); -- if (ret) -- return ret; -- -- return 1; --} -- - static const struct spinand_manufacturer_ops macronix_spinand_manuf_ops = { -- .detect = macronix_spinand_detect, - }; - - const struct spinand_manufacturer macronix_spinand_manufacturer = { - .id = SPINAND_MFR_MACRONIX, - .name = "Macronix", -+ .chips = macronix_spinand_table, -+ .nchips = ARRAY_SIZE(macronix_spinand_table), - .ops = ¯onix_spinand_manuf_ops, - }; ---- a/drivers/mtd/nand/spi/micron.c -+++ b/drivers/mtd/nand/spi/micron.c -@@ -120,7 +120,8 @@ static int micron_8_ecc_get_status(struc - - static const struct spinand_info micron_spinand_table[] = { - /* M79A 2Gb 3.3V */ -- SPINAND_INFO("MT29F2G01ABAGD", 0x24, -+ SPINAND_INFO("MT29F2G01ABAGD", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x24), - NAND_MEMORG(1, 2048, 128, 64, 2048, 2, 1, 1), - NAND_ECCREQ(8, 512), - SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -@@ -130,7 +131,8 @@ static const struct spinand_info micron_ - SPINAND_ECCINFO(µn_8_ooblayout, - micron_8_ecc_get_status)), - /* M79A 2Gb 1.8V */ -- SPINAND_INFO("MT29F2G01ABBGD", 0x25, -+ SPINAND_INFO("MT29F2G01ABBGD", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x25), - NAND_MEMORG(1, 2048, 128, 64, 2048, 2, 1, 1), - NAND_ECCREQ(8, 512), - SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -@@ -140,7 +142,8 @@ static const struct spinand_info micron_ - SPINAND_ECCINFO(µn_8_ooblayout, - micron_8_ecc_get_status)), - /* M78A 1Gb 3.3V */ -- SPINAND_INFO("MT29F1G01ABAFD", 0x14, -+ SPINAND_INFO("MT29F1G01ABAFD", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x14), - NAND_MEMORG(1, 2048, 128, 64, 1024, 1, 1, 1), - NAND_ECCREQ(8, 512), - SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -@@ -150,7 +153,8 @@ static const struct spinand_info micron_ - SPINAND_ECCINFO(µn_8_ooblayout, - micron_8_ecc_get_status)), - /* M78A 1Gb 1.8V */ -- SPINAND_INFO("MT29F1G01ABAFD", 0x15, -+ SPINAND_INFO("MT29F1G01ABAFD", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x15), - NAND_MEMORG(1, 2048, 128, 64, 1024, 1, 1, 1), - NAND_ECCREQ(8, 512), - SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -@@ -160,7 +164,8 @@ static const struct spinand_info micron_ - SPINAND_ECCINFO(µn_8_ooblayout, - micron_8_ecc_get_status)), - /* M79A 4Gb 3.3V */ -- SPINAND_INFO("MT29F4G01ADAGD", 0x36, -+ SPINAND_INFO("MT29F4G01ADAGD", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x36), - NAND_MEMORG(1, 2048, 128, 64, 2048, 2, 1, 2), - NAND_ECCREQ(8, 512), - SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -@@ -171,7 +176,8 @@ static const struct spinand_info micron_ - micron_8_ecc_get_status), - SPINAND_SELECT_TARGET(micron_select_target)), - /* M70A 4Gb 3.3V */ -- SPINAND_INFO("MT29F4G01ABAFD", 0x34, -+ SPINAND_INFO("MT29F4G01ABAFD", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x34), - NAND_MEMORG(1, 4096, 256, 64, 2048, 1, 1, 1), - NAND_ECCREQ(8, 512), - SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -@@ -181,7 +187,8 @@ static const struct spinand_info micron_ - SPINAND_ECCINFO(µn_8_ooblayout, - micron_8_ecc_get_status)), - /* M70A 4Gb 1.8V */ -- SPINAND_INFO("MT29F4G01ABBFD", 0x35, -+ SPINAND_INFO("MT29F4G01ABBFD", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x35), - NAND_MEMORG(1, 4096, 256, 64, 2048, 1, 1, 1), - NAND_ECCREQ(8, 512), - SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -@@ -191,7 +198,8 @@ static const struct spinand_info micron_ - SPINAND_ECCINFO(µn_8_ooblayout, - micron_8_ecc_get_status)), - /* M70A 8Gb 3.3V */ -- SPINAND_INFO("MT29F8G01ADAFD", 0x46, -+ SPINAND_INFO("MT29F8G01ADAFD", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x46), - NAND_MEMORG(1, 4096, 256, 64, 2048, 1, 1, 2), - NAND_ECCREQ(8, 512), - SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -@@ -202,7 +210,8 @@ static const struct spinand_info micron_ - micron_8_ecc_get_status), - SPINAND_SELECT_TARGET(micron_select_target)), - /* M70A 8Gb 1.8V */ -- SPINAND_INFO("MT29F8G01ADBFD", 0x47, -+ SPINAND_INFO("MT29F8G01ADBFD", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x47), - NAND_MEMORG(1, 4096, 256, 64, 2048, 1, 1, 2), - NAND_ECCREQ(8, 512), - SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -@@ -214,26 +223,6 @@ static const struct spinand_info micron_ - SPINAND_SELECT_TARGET(micron_select_target)), - }; - --static int micron_spinand_detect(struct spinand_device *spinand) --{ -- u8 *id = spinand->id.data; -- int ret; -- -- /* -- * Micron SPI NAND read ID need a dummy byte, -- * so the first byte in raw_id is dummy. -- */ -- if (id[1] != SPINAND_MFR_MICRON) -- return 0; -- -- ret = spinand_match_and_init(spinand, micron_spinand_table, -- ARRAY_SIZE(micron_spinand_table), id[2]); -- if (ret) -- return ret; -- -- return 1; --} -- - static int micron_spinand_init(struct spinand_device *spinand) - { - /* -@@ -248,12 +237,13 @@ static int micron_spinand_init(struct sp - } - - static const struct spinand_manufacturer_ops micron_spinand_manuf_ops = { -- .detect = micron_spinand_detect, - .init = micron_spinand_init, - }; - - const struct spinand_manufacturer micron_spinand_manufacturer = { - .id = SPINAND_MFR_MICRON, - .name = "Micron", -+ .chips = micron_spinand_table, -+ .nchips = ARRAY_SIZE(micron_spinand_table), - .ops = µn_spinand_manuf_ops, - }; ---- a/drivers/mtd/nand/spi/toshiba.c -+++ b/drivers/mtd/nand/spi/toshiba.c -@@ -111,7 +111,8 @@ static int tx58cxgxsxraix_ecc_get_status - - static const struct spinand_info toshiba_spinand_table[] = { - /* 3.3V 1Gb (1st generation) */ -- SPINAND_INFO("TC58CVG0S3HRAIG", 0xC2, -+ SPINAND_INFO("TC58CVG0S3HRAIG", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xC2), - NAND_MEMORG(1, 2048, 128, 64, 1024, 1, 1, 1), - NAND_ECCREQ(8, 512), - SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -@@ -121,7 +122,8 @@ static const struct spinand_info toshiba - SPINAND_ECCINFO(&tx58cxgxsxraix_ooblayout, - tx58cxgxsxraix_ecc_get_status)), - /* 3.3V 2Gb (1st generation) */ -- SPINAND_INFO("TC58CVG1S3HRAIG", 0xCB, -+ SPINAND_INFO("TC58CVG1S3HRAIG", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xCB), - NAND_MEMORG(1, 2048, 128, 64, 2048, 1, 1, 1), - NAND_ECCREQ(8, 512), - SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -@@ -131,7 +133,8 @@ static const struct spinand_info toshiba - SPINAND_ECCINFO(&tx58cxgxsxraix_ooblayout, - tx58cxgxsxraix_ecc_get_status)), - /* 3.3V 4Gb (1st generation) */ -- SPINAND_INFO("TC58CVG2S0HRAIG", 0xCD, -+ SPINAND_INFO("TC58CVG2S0HRAIG", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xCD), - NAND_MEMORG(1, 4096, 256, 64, 2048, 1, 1, 1), - NAND_ECCREQ(8, 512), - SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -@@ -141,7 +144,8 @@ static const struct spinand_info toshiba - SPINAND_ECCINFO(&tx58cxgxsxraix_ooblayout, - tx58cxgxsxraix_ecc_get_status)), - /* 1.8V 1Gb (1st generation) */ -- SPINAND_INFO("TC58CYG0S3HRAIG", 0xB2, -+ SPINAND_INFO("TC58CYG0S3HRAIG", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xB2), - NAND_MEMORG(1, 2048, 128, 64, 1024, 1, 1, 1), - NAND_ECCREQ(8, 512), - SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -@@ -151,7 +155,8 @@ static const struct spinand_info toshiba - SPINAND_ECCINFO(&tx58cxgxsxraix_ooblayout, - tx58cxgxsxraix_ecc_get_status)), - /* 1.8V 2Gb (1st generation) */ -- SPINAND_INFO("TC58CYG1S3HRAIG", 0xBB, -+ SPINAND_INFO("TC58CYG1S3HRAIG", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xBB), - NAND_MEMORG(1, 2048, 128, 64, 2048, 1, 1, 1), - NAND_ECCREQ(8, 512), - SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -@@ -161,7 +166,8 @@ static const struct spinand_info toshiba - SPINAND_ECCINFO(&tx58cxgxsxraix_ooblayout, - tx58cxgxsxraix_ecc_get_status)), - /* 1.8V 4Gb (1st generation) */ -- SPINAND_INFO("TC58CYG2S0HRAIG", 0xBD, -+ SPINAND_INFO("TC58CYG2S0HRAIG", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xBD), - NAND_MEMORG(1, 4096, 256, 64, 2048, 1, 1, 1), - NAND_ECCREQ(8, 512), - SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -@@ -176,7 +182,8 @@ static const struct spinand_info toshiba - * QE_BIT. - */ - /* 3.3V 1Gb (2nd generation) */ -- SPINAND_INFO("TC58CVG0S3HRAIJ", 0xE2, -+ SPINAND_INFO("TC58CVG0S3HRAIJ", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xE2), - NAND_MEMORG(1, 2048, 128, 64, 1024, 1, 1, 1), - NAND_ECCREQ(8, 512), - SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -@@ -186,7 +193,8 @@ static const struct spinand_info toshiba - SPINAND_ECCINFO(&tx58cxgxsxraix_ooblayout, - tx58cxgxsxraix_ecc_get_status)), - /* 3.3V 2Gb (2nd generation) */ -- SPINAND_INFO("TC58CVG1S3HRAIJ", 0xEB, -+ SPINAND_INFO("TC58CVG1S3HRAIJ", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xEB), - NAND_MEMORG(1, 2048, 128, 64, 2048, 1, 1, 1), - NAND_ECCREQ(8, 512), - SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -@@ -196,7 +204,8 @@ static const struct spinand_info toshiba - SPINAND_ECCINFO(&tx58cxgxsxraix_ooblayout, - tx58cxgxsxraix_ecc_get_status)), - /* 3.3V 4Gb (2nd generation) */ -- SPINAND_INFO("TC58CVG2S0HRAIJ", 0xED, -+ SPINAND_INFO("TC58CVG2S0HRAIJ", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xED), - NAND_MEMORG(1, 4096, 256, 64, 2048, 1, 1, 1), - NAND_ECCREQ(8, 512), - SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -@@ -206,7 +215,8 @@ static const struct spinand_info toshiba - SPINAND_ECCINFO(&tx58cxgxsxraix_ooblayout, - tx58cxgxsxraix_ecc_get_status)), - /* 3.3V 8Gb (2nd generation) */ -- SPINAND_INFO("TH58CVG3S0HRAIJ", 0xE4, -+ SPINAND_INFO("TH58CVG3S0HRAIJ", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xE4), - NAND_MEMORG(1, 4096, 256, 64, 4096, 1, 1, 1), - NAND_ECCREQ(8, 512), - SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -@@ -216,7 +226,8 @@ static const struct spinand_info toshiba - SPINAND_ECCINFO(&tx58cxgxsxraix_ooblayout, - tx58cxgxsxraix_ecc_get_status)), - /* 1.8V 1Gb (2nd generation) */ -- SPINAND_INFO("TC58CYG0S3HRAIJ", 0xD2, -+ SPINAND_INFO("TC58CYG0S3HRAIJ", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xD2), - NAND_MEMORG(1, 2048, 128, 64, 1024, 1, 1, 1), - NAND_ECCREQ(8, 512), - SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -@@ -226,7 +237,8 @@ static const struct spinand_info toshiba - SPINAND_ECCINFO(&tx58cxgxsxraix_ooblayout, - tx58cxgxsxraix_ecc_get_status)), - /* 1.8V 2Gb (2nd generation) */ -- SPINAND_INFO("TC58CYG1S3HRAIJ", 0xDB, -+ SPINAND_INFO("TC58CYG1S3HRAIJ", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xDB), - NAND_MEMORG(1, 2048, 128, 64, 2048, 1, 1, 1), - NAND_ECCREQ(8, 512), - SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -@@ -236,7 +248,8 @@ static const struct spinand_info toshiba - SPINAND_ECCINFO(&tx58cxgxsxraix_ooblayout, - tx58cxgxsxraix_ecc_get_status)), - /* 1.8V 4Gb (2nd generation) */ -- SPINAND_INFO("TC58CYG2S0HRAIJ", 0xDD, -+ SPINAND_INFO("TC58CYG2S0HRAIJ", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xDD), - NAND_MEMORG(1, 4096, 256, 64, 2048, 1, 1, 1), - NAND_ECCREQ(8, 512), - SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -@@ -246,7 +259,8 @@ static const struct spinand_info toshiba - SPINAND_ECCINFO(&tx58cxgxsxraix_ooblayout, - tx58cxgxsxraix_ecc_get_status)), - /* 1.8V 8Gb (2nd generation) */ -- SPINAND_INFO("TH58CYG3S0HRAIJ", 0xD4, -+ SPINAND_INFO("TH58CYG3S0HRAIJ", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xD4), - NAND_MEMORG(1, 4096, 256, 64, 4096, 1, 1, 1), - NAND_ECCREQ(8, 512), - SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -@@ -257,33 +271,13 @@ static const struct spinand_info toshiba - tx58cxgxsxraix_ecc_get_status)), - }; - --static int toshiba_spinand_detect(struct spinand_device *spinand) --{ -- u8 *id = spinand->id.data; -- int ret; -- -- /* -- * Toshiba SPI NAND read ID needs a dummy byte, -- * so the first byte in id is garbage. -- */ -- if (id[1] != SPINAND_MFR_TOSHIBA) -- return 0; -- -- ret = spinand_match_and_init(spinand, toshiba_spinand_table, -- ARRAY_SIZE(toshiba_spinand_table), -- id[2]); -- if (ret) -- return ret; -- -- return 1; --} -- - static const struct spinand_manufacturer_ops toshiba_spinand_manuf_ops = { -- .detect = toshiba_spinand_detect, - }; - - const struct spinand_manufacturer toshiba_spinand_manufacturer = { - .id = SPINAND_MFR_TOSHIBA, - .name = "Toshiba", -+ .chips = toshiba_spinand_table, -+ .nchips = ARRAY_SIZE(toshiba_spinand_table), - .ops = &toshiba_spinand_manuf_ops, - }; + static const struct spinand_manufacturer_ops gigadevice_spinand_manuf_ops = { --- a/drivers/mtd/nand/spi/winbond.c +++ b/drivers/mtd/nand/spi/winbond.c -@@ -19,6 +19,23 @@ +@@ -18,6 +18,23 @@ #define WINBOND_CFG_BUF_READ BIT(3) @@ -1373,7 +409,7 @@ Signed-off-by: Weijie Gao static SPINAND_OP_VARIANTS(read_cache_variants, SPINAND_PAGE_READ_FROM_CACHE_QUADIO_OP(0, 2, NULL, 0), SPINAND_PAGE_READ_FROM_CACHE_X4_OP(0, 1, NULL, 0), -@@ -35,6 +52,35 @@ static SPINAND_OP_VARIANTS(update_cache_ +@@ -34,6 +51,35 @@ static SPINAND_OP_VARIANTS(update_cache_ SPINAND_PROG_LOAD_X4(false, 0, NULL, 0), SPINAND_PROG_LOAD(false, 0, NULL, 0)); @@ -1409,9 +445,9 @@ Signed-off-by: Weijie Gao static int w25m02gv_ooblayout_ecc(struct mtd_info *mtd, int section, struct mtd_oob_region *region) { -@@ -78,8 +124,61 @@ static int w25m02gv_select_target(struct - return spi_mem_exec_op(spinand->slave, &op); - } +@@ -106,6 +152,58 @@ static const struct mtd_ooblayout_ops w2 + .rfree = w25n02kv_ooblayout_free, + }; +static int w25n01kv_ecc_get_status(struct spinand_device *spinand, + u8 status) @@ -1465,77 +501,32 @@ Signed-off-by: Weijie Gao + return -EINVAL; +} + - static const struct spinand_info winbond_spinand_table[] = { -- SPINAND_INFO("W25M02GV", 0xAB, -+ SPINAND_INFO("W25M02GV", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xab, 0x21), - NAND_MEMORG(1, 2048, 64, 64, 1024, 1, 1, 2), - NAND_ECCREQ(1, 512), - SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -@@ -88,7 +187,17 @@ static const struct spinand_info winbond + static int w25n02kv_ecc_get_status(struct spinand_device *spinand, + u8 status) + { +@@ -163,6 +261,15 @@ static const struct spinand_info winbond + &update_cache_variants), 0, - SPINAND_ECCINFO(&w25m02gv_ooblayout, NULL), - SPINAND_SELECT_TARGET(w25m02gv_select_target)), -- SPINAND_INFO("W25N01GV", 0xAA, + SPINAND_ECCINFO(&w25m02gv_ooblayout, NULL)), + SPINAND_INFO("W25N01KV", + SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xae, 0x21), -+ NAND_MEMORG(1, 2048, 64, 64, 1024, 1, 1, 1), ++ NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1), + NAND_ECCREQ(4, 512), + SPINAND_INFO_OP_VARIANTS(&read_cache_variants, + &write_cache_variants, + &update_cache_variants), + 0, + SPINAND_ECCINFO(&w25n02kv_n04kv_ooblayout, w25n01kv_ecc_get_status)), -+ SPINAND_INFO("W25N01GV", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xaa, 0x21), - NAND_MEMORG(1, 2048, 64, 64, 1024, 1, 1, 1), - NAND_ECCREQ(1, 512), - SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -@@ -96,32 +205,30 @@ static const struct spinand_info winbond + SPINAND_INFO("W25N02KV", + SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xaa, 0x22), + NAND_MEMORG(1, 2048, 128, 64, 2048, 40, 1, 1, 1), +@@ -172,6 +279,16 @@ static const struct spinand_info winbond &update_cache_variants), 0, - SPINAND_ECCINFO(&w25m02gv_ooblayout, NULL)), --}; -- --/** -- * winbond_spinand_detect - initialize device related part in spinand_device -- * struct if it is a Winbond device. -- * @spinand: SPI NAND device structure -- */ --static int winbond_spinand_detect(struct spinand_device *spinand) --{ -- u8 *id = spinand->id.data; -- int ret; -- -- /* -- * Winbond SPI NAND read ID need a dummy byte, -- * so the first byte in raw_id is dummy. -+ SPINAND_INFO("W25N02KV", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xaa, 0x22), -+ NAND_MEMORG(1, 2048, 128, 64, 2048, 2, 1, 1), -+ NAND_ECCREQ(4, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ 0, -+ SPINAND_ECCINFO(&w25n02kv_n04kv_ooblayout, -+ w25n02kv_n04kv_ecc_get_status)), -+ /* W25N04KV has 2-die(lun), however, it can select die automatically. -+ * Treat it as single die here and double block size. - */ -- if (id[1] != SPINAND_MFR_WINBOND) -- return 0; -- -- ret = spinand_match_and_init(spinand, winbond_spinand_table, -- ARRAY_SIZE(winbond_spinand_table), id[2]); -- if (ret) -- return ret; -- -- return 1; --} + SPINAND_ECCINFO(&w25n02kv_ooblayout, w25n02kv_ecc_get_status)), + SPINAND_INFO("W25N04KV", + SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xaa, 0x23), -+ NAND_MEMORG(1, 2048, 128, 64, 4096, 2, 1, 1), ++ NAND_MEMORG(1, 2048, 128, 64, 4096, 80, 2, 1, 1), + NAND_ECCREQ(4, 512), + SPINAND_INFO_OP_VARIANTS(&read_cache_variants, + &write_cache_variants, @@ -1543,162 +534,12 @@ Signed-off-by: Weijie Gao + 0, + SPINAND_ECCINFO(&w25n02kv_n04kv_ooblayout, + w25n02kv_n04kv_ecc_get_status)), -+}; + }; static int winbond_spinand_init(struct spinand_device *spinand) - { -@@ -142,12 +249,13 @@ static int winbond_spinand_init(struct s - } - - static const struct spinand_manufacturer_ops winbond_spinand_manuf_ops = { -- .detect = winbond_spinand_detect, - .init = winbond_spinand_init, - }; - - const struct spinand_manufacturer winbond_spinand_manufacturer = { - .id = SPINAND_MFR_WINBOND, - .name = "Winbond", -+ .chips = winbond_spinand_table, -+ .nchips = ARRAY_SIZE(winbond_spinand_table), - .ops = &winbond_spinand_manuf_ops, - }; --- a/include/linux/mtd/spinand.h +++ b/include/linux/mtd/spinand.h -@@ -39,15 +39,15 @@ - SPI_MEM_OP_NO_DUMMY, \ - SPI_MEM_OP_NO_DATA) - --#define SPINAND_READID_OP(ndummy, buf, len) \ -+#define SPINAND_READID_OP(naddr, ndummy, buf, len) \ - SPI_MEM_OP(SPI_MEM_OP_CMD(0x9f, 1), \ -- SPI_MEM_OP_NO_ADDR, \ -+ SPI_MEM_OP_ADDR(naddr, 0, 1), \ - SPI_MEM_OP_DUMMY(ndummy, 1), \ - SPI_MEM_OP_DATA_IN(len, buf, 1)) - - #define SPINAND_SET_FEATURE_OP(reg, valptr) \ - SPI_MEM_OP(SPI_MEM_OP_CMD(0x1f, 1), \ -- SPI_MEM_OP_ADDR(1, reg, 1), \ -+ SPI_MEM_OP_ADDR(1, reg, 1), \ - SPI_MEM_OP_NO_DUMMY, \ - SPI_MEM_OP_DATA_OUT(1, valptr, 1)) - -@@ -75,18 +75,36 @@ - SPI_MEM_OP_DUMMY(ndummy, 1), \ - SPI_MEM_OP_DATA_IN(len, buf, 1)) - -+#define SPINAND_PAGE_READ_FROM_CACHE_OP_3A(fast, addr, ndummy, buf, len)\ -+ SPI_MEM_OP(SPI_MEM_OP_CMD(fast ? 0x0b : 0x03, 1), \ -+ SPI_MEM_OP_ADDR(3, addr, 1), \ -+ SPI_MEM_OP_DUMMY(ndummy, 1), \ -+ SPI_MEM_OP_DATA_IN(len, buf, 1)) -+ - #define SPINAND_PAGE_READ_FROM_CACHE_X2_OP(addr, ndummy, buf, len) \ - SPI_MEM_OP(SPI_MEM_OP_CMD(0x3b, 1), \ - SPI_MEM_OP_ADDR(2, addr, 1), \ - SPI_MEM_OP_DUMMY(ndummy, 1), \ - SPI_MEM_OP_DATA_IN(len, buf, 2)) - -+#define SPINAND_PAGE_READ_FROM_CACHE_X2_OP_3A(addr, ndummy, buf, len) \ -+ SPI_MEM_OP(SPI_MEM_OP_CMD(0x3b, 1), \ -+ SPI_MEM_OP_ADDR(3, addr, 1), \ -+ SPI_MEM_OP_DUMMY(ndummy, 1), \ -+ SPI_MEM_OP_DATA_IN(len, buf, 2)) -+ - #define SPINAND_PAGE_READ_FROM_CACHE_X4_OP(addr, ndummy, buf, len) \ - SPI_MEM_OP(SPI_MEM_OP_CMD(0x6b, 1), \ - SPI_MEM_OP_ADDR(2, addr, 1), \ - SPI_MEM_OP_DUMMY(ndummy, 1), \ - SPI_MEM_OP_DATA_IN(len, buf, 4)) - -+#define SPINAND_PAGE_READ_FROM_CACHE_X4_OP_3A(addr, ndummy, buf, len) \ -+ SPI_MEM_OP(SPI_MEM_OP_CMD(0x6b, 1), \ -+ SPI_MEM_OP_ADDR(3, addr, 1), \ -+ SPI_MEM_OP_DUMMY(ndummy, 1), \ -+ SPI_MEM_OP_DATA_IN(len, buf, 4)) -+ - #define SPINAND_PAGE_READ_FROM_CACHE_DUALIO_OP(addr, ndummy, buf, len) \ - SPI_MEM_OP(SPI_MEM_OP_CMD(0xbb, 1), \ - SPI_MEM_OP_ADDR(2, addr, 2), \ -@@ -153,37 +171,46 @@ struct spinand_device; - * @data: buffer containing the id bytes. Currently 4 bytes large, but can - * be extended if required - * @len: ID length -- * -- * struct_spinand_id->data contains all bytes returned after a READ_ID command, -- * including dummy bytes if the chip does not emit ID bytes right after the -- * READ_ID command. The responsibility to extract real ID bytes is left to -- * struct_manufacurer_ops->detect(). - */ - struct spinand_id { - u8 data[SPINAND_MAX_ID_LEN]; - int len; - }; - -+enum spinand_readid_method { -+ SPINAND_READID_METHOD_OPCODE, -+ SPINAND_READID_METHOD_OPCODE_ADDR, -+ SPINAND_READID_METHOD_OPCODE_DUMMY, -+}; -+ -+/** -+ * struct spinand_devid - SPI NAND device id structure -+ * @id: device id of current chip -+ * @len: number of bytes in device id -+ * @method: method to read chip id -+ * There are 3 possible variants: -+ * SPINAND_READID_METHOD_OPCODE: chip id is returned immediately -+ * after read_id opcode. -+ * SPINAND_READID_METHOD_OPCODE_ADDR: chip id is returned after -+ * read_id opcode + 1-byte address. -+ * SPINAND_READID_METHOD_OPCODE_DUMMY: chip id is returned after -+ * read_id opcode + 1 dummy byte. -+ */ -+struct spinand_devid { -+ const u8 *id; -+ const u8 len; -+ const enum spinand_readid_method method; -+}; -+ - /** - * struct manufacurer_ops - SPI NAND manufacturer specific operations -- * @detect: detect a SPI NAND device. Every time a SPI NAND device is probed -- * the core calls the struct_manufacurer_ops->detect() hook of each -- * registered manufacturer until one of them return 1. Note that -- * the first thing to check in this hook is that the manufacturer ID -- * in struct_spinand_device->id matches the manufacturer whose -- * ->detect() hook has been called. Should return 1 if there's a -- * match, 0 if the manufacturer ID does not match and a negative -- * error code otherwise. When true is returned, the core assumes -- * that properties of the NAND chip (spinand->base.memorg and -- * spinand->base.eccreq) have been filled - * @init: initialize a SPI NAND device - * @cleanup: cleanup a SPI NAND device - * - * Each SPI NAND manufacturer driver should implement this interface so that -- * NAND chips coming from this vendor can be detected and initialized properly. -+ * NAND chips coming from this vendor can be initialized properly. - */ - struct spinand_manufacturer_ops { -- int (*detect)(struct spinand_device *spinand); - int (*init)(struct spinand_device *spinand); - void (*cleanup)(struct spinand_device *spinand); - }; -@@ -192,15 +219,21 @@ struct spinand_manufacturer_ops { - * struct spinand_manufacturer - SPI NAND manufacturer instance - * @id: manufacturer ID - * @name: manufacturer name -+ * @devid_len: number of bytes in device ID -+ * @chips: supported SPI NANDs under current manufacturer -+ * @nchips: number of SPI NANDs available in chips array - * @ops: manufacturer operations - */ - struct spinand_manufacturer { - u8 id; - char *name; -+ const struct spinand_info *chips; -+ const size_t nchips; - const struct spinand_manufacturer_ops *ops; +@@ -245,6 +245,7 @@ struct spinand_manufacturer { }; /* SPI NAND manufacturers */ @@ -1706,39 +547,3 @@ Signed-off-by: Weijie Gao extern const struct spinand_manufacturer gigadevice_spinand_manufacturer; extern const struct spinand_manufacturer macronix_spinand_manufacturer; extern const struct spinand_manufacturer micron_spinand_manufacturer; -@@ -268,7 +301,7 @@ struct spinand_ecc_info { - */ - struct spinand_info { - const char *model; -- u8 devid; -+ struct spinand_devid devid; - u32 flags; - struct nand_memory_organization memorg; - struct nand_ecc_req eccreq; -@@ -282,6 +315,13 @@ struct spinand_info { - unsigned int target); - }; - -+#define SPINAND_ID(__method, ...) \ -+ { \ -+ .id = (const u8[]){ __VA_ARGS__ }, \ -+ .len = sizeof((u8[]){ __VA_ARGS__ }), \ -+ .method = __method, \ -+ } -+ - #define SPINAND_INFO_OP_VARIANTS(__read, __write, __update) \ - { \ - .read_cache = __read, \ -@@ -440,9 +480,10 @@ static inline void spinand_set_ofnode(st - } - #endif /* __UBOOT__ */ - --int spinand_match_and_init(struct spinand_device *dev, -+int spinand_match_and_init(struct spinand_device *spinand, - const struct spinand_info *table, -- unsigned int table_size, u8 devid); -+ unsigned int table_size, -+ enum spinand_readid_method rdid_method); - - int spinand_upd_cfg(struct spinand_device *spinand, u8 mask, u8 val); - int spinand_select_target(struct spinand_device *spinand, unsigned int target); diff --git a/lede/package/boot/uboot-mediatek/patches/100-23-mmc-mtk-sd-add-support-to-display-verbose-error-log.patch b/lede/package/boot/uboot-mediatek/patches/100-23-mmc-mtk-sd-add-support-to-display-verbose-error-log.patch index 0c68f429c6..5c90e24ebf 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-23-mmc-mtk-sd-add-support-to-display-verbose-error-log.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-23-mmc-mtk-sd-add-support-to-display-verbose-error-log.patch @@ -15,7 +15,7 @@ Signed-off-by: Weijie Gao --- a/drivers/mmc/Kconfig +++ b/drivers/mmc/Kconfig -@@ -820,6 +820,14 @@ config MMC_MTK +@@ -815,6 +815,14 @@ config MMC_MTK This is needed if support for any SD/SDIO/MMC devices is required. If unsure, say N. @@ -32,7 +32,7 @@ Signed-off-by: Weijie Gao config FSL_SDHC_V2_3 --- a/drivers/mmc/Makefile +++ b/drivers/mmc/Makefile -@@ -83,3 +83,7 @@ obj-$(CONFIG_RENESAS_SDHI) += tmio-comm +@@ -82,3 +82,7 @@ obj-$(CONFIG_RENESAS_SDHI) += tmio-comm obj-$(CONFIG_MMC_BCM2835) += bcm2835_sdhost.o obj-$(CONFIG_MMC_MTK) += mtk-sd.o obj-$(CONFIG_MMC_SDHCI_F_SDH30) += f_sdh30.o @@ -42,7 +42,7 @@ Signed-off-by: Weijie Gao +endif --- a/drivers/mmc/mtk-sd.c +++ b/drivers/mmc/mtk-sd.c -@@ -778,18 +778,24 @@ static int msdc_ops_send_cmd(struct udev +@@ -779,18 +779,24 @@ static int msdc_ops_send_cmd(struct udev if (cmd_ret && !(cmd_ret == -EIO && (cmd->cmdidx == MMC_CMD_SEND_TUNING_BLOCK || diff --git a/lede/package/boot/uboot-mediatek/patches/100-26-env-ubi-add-support-to-create-environment-volume-if-.patch b/lede/package/boot/uboot-mediatek/patches/100-26-env-ubi-add-support-to-create-environment-volume-if-.patch index 98c81acdcf..fb8d15ddf9 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-26-env-ubi-add-support-to-create-environment-volume-if-.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-26-env-ubi-add-support-to-create-environment-volume-if-.patch @@ -14,7 +14,7 @@ Signed-off-by: Weijie Gao --- a/env/Kconfig +++ b/env/Kconfig -@@ -675,6 +675,12 @@ config ENV_UBI_VOLUME_REDUND +@@ -689,6 +689,12 @@ config ENV_UBI_VOLUME_REDUND help Name of the redundant volume that you want to store the environment in. diff --git a/lede/package/boot/uboot-mediatek/patches/100-27-mtd-ubi-add-support-for-UBI-end-of-filesystem-marker.patch b/lede/package/boot/uboot-mediatek/patches/100-27-mtd-ubi-add-support-for-UBI-end-of-filesystem-marker.patch index cd1794f0d1..9c83e6cc25 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-27-mtd-ubi-add-support-for-UBI-end-of-filesystem-marker.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-27-mtd-ubi-add-support-for-UBI-end-of-filesystem-marker.patch @@ -15,7 +15,7 @@ Signed-off-by: Weijie Gao --- a/drivers/mtd/ubi/attach.c +++ b/drivers/mtd/ubi/attach.c -@@ -802,6 +802,13 @@ out_unlock: +@@ -803,6 +803,13 @@ out_unlock: return err; } @@ -29,7 +29,7 @@ Signed-off-by: Weijie Gao /** * scan_peb - scan and process UBI headers of a PEB. * @ubi: UBI device description object -@@ -832,9 +839,21 @@ static int scan_peb(struct ubi_device *u +@@ -833,9 +840,21 @@ static int scan_peb(struct ubi_device *u return 0; } @@ -56,7 +56,7 @@ Signed-off-by: Weijie Gao break; --- a/drivers/mtd/ubi/ubi.h +++ b/drivers/mtd/ubi/ubi.h -@@ -745,6 +745,7 @@ struct ubi_attach_info { +@@ -746,6 +746,7 @@ struct ubi_attach_info { int mean_ec; uint64_t ec_sum; int ec_count; diff --git a/lede/package/boot/uboot-mediatek/patches/100-29-board-mediatek-wire-up-NMBM-support.patch b/lede/package/boot/uboot-mediatek/patches/100-29-board-mediatek-wire-up-NMBM-support.patch index b561a79944..f22449ae76 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-29-board-mediatek-wire-up-NMBM-support.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-29-board-mediatek-wire-up-NMBM-support.patch @@ -24,7 +24,7 @@ Subject: [PATCH] board: mediatek: wire-up NMBM support DECLARE_GLOBAL_DATA_PTR; int board_init(void) -@@ -24,3 +29,36 @@ int board_late_init(void) +@@ -23,3 +28,36 @@ int board_late_init(void) env_relocate(); return 0; } diff --git a/lede/package/boot/uboot-mediatek/patches/101-01-arm-mediatek-retrieve-ram_base-from-dts-node-for-arm.patch b/lede/package/boot/uboot-mediatek/patches/101-01-arm-mediatek-retrieve-ram_base-from-dts-node-for-arm.patch deleted file mode 100644 index 645b7801c8..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/101-01-arm-mediatek-retrieve-ram_base-from-dts-node-for-arm.patch +++ /dev/null @@ -1,297 +0,0 @@ -From 63336ec7fd7d480ac58a91f3b20d08bf1b3a13ad Mon Sep 17 00:00:00 2001 -From: Weijie Gao -Date: Wed, 19 Jul 2023 17:15:41 +0800 -Subject: [PATCH 01/29] arm: mediatek: retrieve ram_base from dts node for - armv8 platform - -Now we use fdtdec_setup_mem_size_base() to get DRAM base from fdt ram node -and update gd->ram_base. CFG_SYS_SDRAM_BASE is unused and will be removed. - -Also, since mt7622 always passes fdt to linux kernel, there's no need to -assign value to gd->bd->bi_boot_params. - -Signed-off-by: Weijie Gao ---- - arch/arm/dts/mt7981-emmc-rfb.dts | 5 +++++ - arch/arm/dts/mt7981-rfb.dts | 5 +++++ - arch/arm/dts/mt7981-sd-rfb.dts | 5 +++++ - arch/arm/dts/mt7986a-bpi-r3-sd.dts | 5 +++++ - arch/arm/dts/mt7986a-rfb.dts | 5 +++++ - arch/arm/dts/mt7986a-sd-rfb.dts | 5 +++++ - arch/arm/dts/mt7986b-rfb.dts | 5 +++++ - arch/arm/dts/mt7986b-sd-rfb.dts | 5 +++++ - arch/arm/mach-mediatek/mt7622/init.c | 13 +++++++++---- - arch/arm/mach-mediatek/mt7981/init.c | 11 +++++++++-- - arch/arm/mach-mediatek/mt7986/init.c | 11 +++++++++-- - board/mediatek/mt7622/mt7622_rfb.c | 1 - - include/configs/mt7622.h | 10 ---------- - include/configs/mt7981.h | 9 --------- - include/configs/mt7986.h | 9 --------- - 15 files changed, 67 insertions(+), 37 deletions(-) - ---- a/arch/arm/dts/mt7981-emmc-rfb.dts -+++ b/arch/arm/dts/mt7981-emmc-rfb.dts -@@ -18,6 +18,11 @@ - tick-timer = &timer0; - }; - -+ memory@40000000 { -+ device_type = "memory"; -+ reg = <0x40000000 0x10000000>; -+ }; -+ - reg_3p3v: regulator-3p3v { - compatible = "regulator-fixed"; - regulator-name = "fixed-3.3V"; ---- a/arch/arm/dts/mt7981-rfb.dts -+++ b/arch/arm/dts/mt7981-rfb.dts -@@ -17,6 +17,11 @@ - stdout-path = &uart0; - tick-timer = &timer0; - }; -+ -+ memory@40000000 { -+ device_type = "memory"; -+ reg = <0x40000000 0x10000000>; -+ }; - }; - - &uart0 { ---- a/arch/arm/dts/mt7981-sd-rfb.dts -+++ b/arch/arm/dts/mt7981-sd-rfb.dts -@@ -18,6 +18,11 @@ - tick-timer = &timer0; - }; - -+ memory@40000000 { -+ device_type = "memory"; -+ reg = <0x40000000 0x10000000>; -+ }; -+ - reg_3p3v: regulator-3p3v { - compatible = "regulator-fixed"; - regulator-name = "fixed-3.3V"; ---- a/arch/arm/dts/mt7986a-bpi-r3-sd.dts -+++ b/arch/arm/dts/mt7986a-bpi-r3-sd.dts -@@ -19,6 +19,11 @@ - tick-timer = &timer0; - }; - -+ memory@40000000 { -+ device_type = "memory"; -+ reg = <0x40000000 0x80000000>; -+ }; -+ - reg_3p3v: regulator-3p3v { - compatible = "regulator-fixed"; - regulator-name = "fixed-3.3V"; ---- a/arch/arm/dts/mt7986a-rfb.dts -+++ b/arch/arm/dts/mt7986a-rfb.dts -@@ -18,6 +18,11 @@ - tick-timer = &timer0; - }; - -+ memory@40000000 { -+ device_type = "memory"; -+ reg = <0x40000000 0x10000000>; -+ }; -+ - reg_1p8v: regulator-1p8v { - compatible = "regulator-fixed"; - regulator-name = "fixed-1.8V"; ---- a/arch/arm/dts/mt7986a-sd-rfb.dts -+++ b/arch/arm/dts/mt7986a-sd-rfb.dts -@@ -19,6 +19,11 @@ - tick-timer = &timer0; - }; - -+ memory@40000000 { -+ device_type = "memory"; -+ reg = <0x40000000 0x10000000>; -+ }; -+ - reg_3p3v: regulator-3p3v { - compatible = "regulator-fixed"; - regulator-name = "fixed-3.3V"; ---- a/arch/arm/dts/mt7986b-rfb.dts -+++ b/arch/arm/dts/mt7986b-rfb.dts -@@ -18,6 +18,11 @@ - tick-timer = &timer0; - }; - -+ memory@40000000 { -+ device_type = "memory"; -+ reg = <0x40000000 0x10000000>; -+ }; -+ - reg_3p3v: regulator-3p3v { - compatible = "regulator-fixed"; - regulator-name = "fixed-3.3V"; ---- a/arch/arm/dts/mt7986b-sd-rfb.dts -+++ b/arch/arm/dts/mt7986b-sd-rfb.dts -@@ -19,6 +19,11 @@ - tick-timer = &timer0; - }; - -+ memory@40000000 { -+ device_type = "memory"; -+ reg = <0x40000000 0x10000000>; -+ }; -+ - reg_3p3v: regulator-3p3v { - compatible = "regulator-fixed"; - regulator-name = "fixed-3.3V"; ---- a/arch/arm/mach-mediatek/mt7622/init.c -+++ b/arch/arm/mach-mediatek/mt7622/init.c -@@ -4,11 +4,14 @@ - * Author: Sam Shih - */ - --#include - #include - #include - #include --#include -+#include -+#include -+#include -+ -+DECLARE_GLOBAL_DATA_PTR; - - int print_cpuinfo(void) - { -@@ -20,11 +23,13 @@ int dram_init(void) - { - int ret; - -- ret = fdtdec_setup_memory_banksize(); -+ ret = fdtdec_setup_mem_size_base(); - if (ret) - return ret; -- return fdtdec_setup_mem_size_base(); - -+ gd->ram_size = get_ram_size((void *)gd->ram_base, SZ_2G); -+ -+ return 0; - } - - void reset_cpu(void) ---- a/arch/arm/mach-mediatek/mt7981/init.c -+++ b/arch/arm/mach-mediatek/mt7981/init.c -@@ -4,18 +4,25 @@ - * Author: Sam Shih - */ - --#include -+#include - #include - #include - #include - #include -+#include - #include - - DECLARE_GLOBAL_DATA_PTR; - - int dram_init(void) - { -- gd->ram_size = get_ram_size((void *)CFG_SYS_SDRAM_BASE, SZ_2G); -+ int ret; -+ -+ ret = fdtdec_setup_mem_size_base(); -+ if (ret) -+ return ret; -+ -+ gd->ram_size = get_ram_size((void *)gd->ram_base, SZ_1G); - - return 0; - } ---- a/arch/arm/mach-mediatek/mt7986/init.c -+++ b/arch/arm/mach-mediatek/mt7986/init.c -@@ -4,18 +4,25 @@ - * Author: Sam Shih - */ - --#include -+#include - #include - #include - #include - #include -+#include - #include - - DECLARE_GLOBAL_DATA_PTR; - - int dram_init(void) - { -- gd->ram_size = get_ram_size((void *)CFG_SYS_SDRAM_BASE, SZ_2G); -+ int ret; -+ -+ ret = fdtdec_setup_mem_size_base(); -+ if (ret) -+ return ret; -+ -+ gd->ram_size = get_ram_size((void *)gd->ram_base, SZ_2G); - - return 0; - } ---- a/board/mediatek/mt7622/mt7622_rfb.c -+++ b/board/mediatek/mt7622/mt7622_rfb.c -@@ -19,7 +19,6 @@ DECLARE_GLOBAL_DATA_PTR; - - int board_init(void) - { -- gd->bd->bi_boot_params = CFG_SYS_SDRAM_BASE + 0x100; - return 0; - } - ---- a/include/configs/mt7622.h -+++ b/include/configs/mt7622.h -@@ -9,14 +9,4 @@ - #ifndef __MT7622_H - #define __MT7622_H - --/* Uboot definition */ --#define CFG_SYS_UBOOT_BASE CONFIG_TEXT_BASE -- --/* SPL -> Uboot */ --#define CFG_SYS_UBOOT_START CONFIG_TEXT_BASE --/* DRAM */ --#define CFG_SYS_SDRAM_BASE 0x40000000 -- --/* Ethernet */ -- - #endif ---- a/include/configs/mt7981.h -+++ b/include/configs/mt7981.h -@@ -9,13 +9,4 @@ - #ifndef __MT7981_H - #define __MT7981_H - --/* Uboot definition */ --#define CFG_SYS_UBOOT_BASE CONFIG_TEXT_BASE -- --/* SPL -> Uboot */ --#define CFG_SYS_UBOOT_START CONFIG_TEXT_BASE -- --/* DRAM */ --#define CFG_SYS_SDRAM_BASE 0x40000000 -- - #endif ---- a/include/configs/mt7986.h -+++ b/include/configs/mt7986.h -@@ -9,13 +9,4 @@ - #ifndef __MT7986_H - #define __MT7986_H - --/* Uboot definition */ --#define CFG_SYS_UBOOT_BASE CONFIG_TEXT_BASE -- --/* SPL -> Uboot */ --#define CFG_SYS_UBOOT_START CONFIG_TEXT_BASE -- --/* DRAM */ --#define CFG_SYS_SDRAM_BASE 0x40000000 -- - #endif diff --git a/lede/package/boot/uboot-mediatek/patches/101-02-board-mediatek-update-config-headers.patch b/lede/package/boot/uboot-mediatek/patches/101-02-board-mediatek-update-config-headers.patch deleted file mode 100644 index b64ee15171..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/101-02-board-mediatek-update-config-headers.patch +++ /dev/null @@ -1,129 +0,0 @@ -From df3a0091b249ea82198ea019d145d05a7cf49c0d Mon Sep 17 00:00:00 2001 -From: Weijie Gao -Date: Wed, 19 Jul 2023 17:15:47 +0800 -Subject: [PATCH 02/29] board: mediatek: update config headers - -Remove unused information from include/configs/mtxxxx.h - -Signed-off-by: Weijie Gao ---- - include/configs/mt7620.h | 3 +-- - include/configs/mt7621.h | 6 ++---- - include/configs/mt7623.h | 8 -------- - include/configs/mt7628.h | 5 ++--- - include/configs/mt7629.h | 13 +------------ - 5 files changed, 6 insertions(+), 29 deletions(-) - ---- a/include/configs/mt7620.h -+++ b/include/configs/mt7620.h -@@ -10,10 +10,9 @@ - - #define CFG_SYS_SDRAM_BASE 0x80000000 - --#define CFG_SYS_INIT_SP_OFFSET 0x400000 -+#define CFG_SYS_INIT_SP_OFFSET 0x400000 - - /* SPL */ -- - #define CFG_SYS_UBOOT_START CONFIG_TEXT_BASE - - /* Dummy value */ ---- a/include/configs/mt7621.h -+++ b/include/configs/mt7621.h -@@ -12,13 +12,11 @@ - - #define CFG_MAX_MEM_MAPPED 0x1c000000 - --#define CFG_SYS_INIT_SP_OFFSET 0x800000 -+#define CFG_SYS_INIT_SP_OFFSET 0x800000 - - /* MMC */ - #define MMC_SUPPORTS_TUNING - --/* NAND */ -- - /* Serial SPL */ - #if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_SERIAL) - #define CFG_SYS_NS16550_CLK 50000000 -@@ -26,7 +24,7 @@ - #endif - - /* Serial common */ --#define CFG_SYS_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200, \ -+#define CFG_SYS_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200, \ - 230400, 460800, 921600 } - - /* Dummy value */ ---- a/include/configs/mt7623.h -+++ b/include/configs/mt7623.h -@@ -11,12 +11,6 @@ - - #include - --/* Miscellaneous configurable options */ -- --/* Environment */ -- --/* Preloader -> Uboot */ -- - /* MMC */ - #define MMC_SUPPORTS_TUNING - -@@ -32,8 +26,6 @@ - "fdt_addr_r=" FDT_HIGH "\0" \ - "fdtfile=" CONFIG_DEFAULT_FDT_FILE "\0" - --/* Ethernet */ -- - #ifdef CONFIG_DISTRO_DEFAULTS - - #define BOOT_TARGET_DEVICES(func) \ ---- a/include/configs/mt7628.h -+++ b/include/configs/mt7628.h -@@ -10,7 +10,7 @@ - - #define CFG_SYS_SDRAM_BASE 0x80000000 - --#define CFG_SYS_INIT_SP_OFFSET 0x80000 -+#define CFG_SYS_INIT_SP_OFFSET 0x80000 - - /* Serial SPL */ - #if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_SERIAL) -@@ -19,11 +19,10 @@ - #endif - - /* Serial common */ --#define CFG_SYS_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200, \ -+#define CFG_SYS_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200, \ - 230400, 460800, 921600 } - - /* SPL */ -- - #define CFG_SYS_UBOOT_START CONFIG_TEXT_BASE - - /* Dummy value */ ---- a/include/configs/mt7629.h -+++ b/include/configs/mt7629.h -@@ -9,21 +9,10 @@ - #ifndef __MT7629_H - #define __MT7629_H - --#include -- --/* Miscellaneous configurable options */ -- --/* Environment */ -- -+/* SPL */ - #define CFG_SYS_UBOOT_BASE (0x30000000 + CONFIG_SPL_PAD_TO) - --/* SPL -> Uboot */ -- --/* UBoot -> Kernel */ -- - /* DRAM */ - #define CFG_SYS_SDRAM_BASE 0x40000000 - --/* Ethernet */ -- - #endif diff --git a/lede/package/boot/uboot-mediatek/patches/101-03-spi-mtk_spim-get-spi-clk-rate-only-once.patch b/lede/package/boot/uboot-mediatek/patches/101-03-spi-mtk_spim-get-spi-clk-rate-only-once.patch deleted file mode 100644 index 323bb24933..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/101-03-spi-mtk_spim-get-spi-clk-rate-only-once.patch +++ /dev/null @@ -1,84 +0,0 @@ -From 0d6d8a408f80358dd47984320ea9c65e555ac4c9 Mon Sep 17 00:00:00 2001 -From: Weijie Gao -Date: Wed, 19 Jul 2023 17:15:54 +0800 -Subject: [PATCH 03/29] spi: mtk_spim: get spi clk rate only once - -We don't really need to switch clk rate during operating SPIM controller. -Get clk rate only once at driver probing. - -Signed-off-by: SkyLake.Huang -Signed-off-by: Weijie Gao -Reviewed-by: Jagan Teki ---- - drivers/spi/mtk_spim.c | 21 +++++++++++++-------- - 1 file changed, 13 insertions(+), 8 deletions(-) - ---- a/drivers/spi/mtk_spim.c -+++ b/drivers/spi/mtk_spim.c -@@ -137,6 +137,8 @@ struct mtk_spim_capability { - * @state: Controller state - * @sel_clk: Pad clock - * @spi_clk: Core clock -+ * @pll_clk_rate: Controller's PLL source clock rate, which is different -+ * from SPI bus clock rate - * @xfer_len: Current length of data for transfer - * @hw_cap: Controller capabilities - * @tick_dly: Used to postpone SPI sampling time -@@ -149,6 +151,7 @@ struct mtk_spim_priv { - void __iomem *base; - u32 state; - struct clk sel_clk, spi_clk; -+ u32 pll_clk_rate; - u32 xfer_len; - struct mtk_spim_capability hw_cap; - u32 tick_dly; -@@ -253,11 +256,10 @@ static int mtk_spim_hw_init(struct spi_s - static void mtk_spim_prepare_transfer(struct mtk_spim_priv *priv, - u32 speed_hz) - { -- u32 spi_clk_hz, div, sck_time, cs_time, reg_val; -+ u32 div, sck_time, cs_time, reg_val; - -- spi_clk_hz = clk_get_rate(&priv->spi_clk); -- if (speed_hz <= spi_clk_hz / 4) -- div = DIV_ROUND_UP(spi_clk_hz, speed_hz); -+ if (speed_hz <= priv->pll_clk_rate / 4) -+ div = DIV_ROUND_UP(priv->pll_clk_rate, speed_hz); - else - div = 4; - -@@ -404,7 +406,7 @@ static int mtk_spim_transfer_wait(struct - { - struct udevice *bus = dev_get_parent(slave->dev); - struct mtk_spim_priv *priv = dev_get_priv(bus); -- u32 sck_l, sck_h, spi_bus_clk, clk_count, reg; -+ u32 sck_l, sck_h, clk_count, reg; - ulong us = 1; - int ret = 0; - -@@ -413,12 +415,11 @@ static int mtk_spim_transfer_wait(struct - else - clk_count = op->data.nbytes; - -- spi_bus_clk = clk_get_rate(&priv->spi_clk); - sck_l = readl(priv->base + SPI_CFG2_REG) >> SPI_CFG2_SCK_LOW_OFFSET; - sck_h = readl(priv->base + SPI_CFG2_REG) & SPI_CFG2_SCK_HIGH_MASK; -- do_div(spi_bus_clk, sck_l + sck_h + 2); -+ do_div(priv->pll_clk_rate, sck_l + sck_h + 2); - -- us = CLK_TO_US(spi_bus_clk, clk_count * 8); -+ us = CLK_TO_US(priv->pll_clk_rate, clk_count * 8); - us += 1000 * 1000; /* 1s tolerance */ - - if (us > UINT_MAX) -@@ -662,6 +663,10 @@ static int mtk_spim_probe(struct udevice - clk_enable(&priv->sel_clk); - clk_enable(&priv->spi_clk); - -+ priv->pll_clk_rate = clk_get_rate(&priv->spi_clk); -+ if (priv->pll_clk_rate == 0) -+ return -EINVAL; -+ - return 0; - } - diff --git a/lede/package/boot/uboot-mediatek/patches/101-04-spi-mtk_spim-clear-IRQ-enable-bits.patch b/lede/package/boot/uboot-mediatek/patches/101-04-spi-mtk_spim-clear-IRQ-enable-bits.patch deleted file mode 100644 index e8577f63bf..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/101-04-spi-mtk_spim-clear-IRQ-enable-bits.patch +++ /dev/null @@ -1,35 +0,0 @@ -From a7b630f02bb12f71f23866aee6f9a1a07497d475 Mon Sep 17 00:00:00 2001 -From: Weijie Gao -Date: Wed, 19 Jul 2023 17:16:02 +0800 -Subject: [PATCH 04/29] spi: mtk_spim: clear IRQ enable bits - -In u-boot we don't use IRQ. Instead, we poll busy bit in SPI_STATUS. - -However these IRQ enable bits may be set in previous boot stage (BootROM). - -If we leave these bits not cleared, although u-boot has disabled IRQ and -nothing will happen, the linux kernel may encounter panic during -initializing the spim driver due to IRQ event happens before IRQ handler -is properly setup. - -This patch clear IRQ bits to prevent this from happening. - -Signed-off-by: SkyLake.Huang -Signed-off-by: Weijie Gao -Reviewed-by: Jagan Teki ---- - drivers/spi/mtk_spim.c | 3 +++ - 1 file changed, 3 insertions(+) - ---- a/drivers/spi/mtk_spim.c -+++ b/drivers/spi/mtk_spim.c -@@ -242,6 +242,9 @@ static int mtk_spim_hw_init(struct spi_s - reg_val &= ~SPI_CMD_SAMPLE_SEL; - } - -+ /* Disable interrupt enable for pause mode & normal mode */ -+ reg_val &= ~(SPI_CMD_PAUSE_IE | SPI_CMD_FINISH_IE); -+ - /* disable dma mode */ - reg_val &= ~(SPI_CMD_TX_DMA | SPI_CMD_RX_DMA); - diff --git a/lede/package/boot/uboot-mediatek/patches/101-05-serial-mtk-initial-priv-data-before-using.patch b/lede/package/boot/uboot-mediatek/patches/101-05-serial-mtk-initial-priv-data-before-using.patch deleted file mode 100644 index 6f805765c1..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/101-05-serial-mtk-initial-priv-data-before-using.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 73060da8b54e74c51ef6c1fd31c4fac6ad6b8d0e Mon Sep 17 00:00:00 2001 -From: Weijie Gao -Date: Wed, 19 Jul 2023 17:16:07 +0800 -Subject: [PATCH 05/29] serial: mtk: initial priv data before using - -This patch ensures driver private data being fully initialized in -_debug_uart_init which is not covered by .priv_auto ops. - -Signed-off-by: Sam Shih -Signed-off-by: Weijie Gao -Reviewed-by: Stefan Roese ---- - drivers/serial/serial_mtk.c | 1 + - 1 file changed, 1 insertion(+) - ---- a/drivers/serial/serial_mtk.c -+++ b/drivers/serial/serial_mtk.c -@@ -439,6 +439,7 @@ static inline void _debug_uart_init(void - { - struct mtk_serial_priv priv; - -+ memset(&priv, 0, sizeof(struct mtk_serial_priv)); - priv.regs = (void *) CONFIG_VAL(DEBUG_UART_BASE); - priv.fixed_clk_rate = CONFIG_DEBUG_UART_CLOCK; - diff --git a/lede/package/boot/uboot-mediatek/patches/101-06-reset-mediatek-check-malloc-return-valaue-before-use.patch b/lede/package/boot/uboot-mediatek/patches/101-06-reset-mediatek-check-malloc-return-valaue-before-use.patch deleted file mode 100644 index b319f5e27e..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/101-06-reset-mediatek-check-malloc-return-valaue-before-use.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 06e6d224f7d564a34407eba21b51797da7f22628 Mon Sep 17 00:00:00 2001 -From: Weijie Gao -Date: Wed, 19 Jul 2023 17:16:11 +0800 -Subject: [PATCH 06/29] reset: mediatek: check malloc return valaue before use - -This patch add missing return value check for allocating the driver's -private data. -ENOMEM will be returned if malloc() fails. - -Signed-off-by: Sam Shih -Signed-off-by: Weijie Gao ---- - drivers/reset/reset-mediatek.c | 3 +++ - 1 file changed, 3 insertions(+) - ---- a/drivers/reset/reset-mediatek.c -+++ b/drivers/reset/reset-mediatek.c -@@ -79,6 +79,9 @@ int mediatek_reset_bind(struct udevice * - return ret; - - priv = malloc(sizeof(struct mediatek_reset_priv)); -+ if (!priv) -+ return -ENOMEM; -+ - priv->regofs = regofs; - priv->nr_resets = num_regs * 32; - dev_set_priv(rst_dev, priv); diff --git a/lede/package/boot/uboot-mediatek/patches/101-07-i2c-mediatek-fix-I2C-usability-for-MT7981.patch b/lede/package/boot/uboot-mediatek/patches/101-07-i2c-mediatek-fix-I2C-usability-for-MT7981.patch deleted file mode 100644 index dd00104c39..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/101-07-i2c-mediatek-fix-I2C-usability-for-MT7981.patch +++ /dev/null @@ -1,125 +0,0 @@ -From 77898faf6ce56eb08109cdb853f074bad5acee55 Mon Sep 17 00:00:00 2001 -From: Weijie Gao -Date: Wed, 19 Jul 2023 17:16:15 +0800 -Subject: [PATCH 07/29] i2c: mediatek: fix I2C usability for MT7981 - -MT7981 actually uses MediaTek I2C controller v3 instead of v1. -This patch adds support for I2C controller v3 fix fixes the I2C usability -for MT7981. - -Signed-off-by: Sam Shih -Signed-off-by: Weijie Gao ---- - drivers/i2c/mtk_i2c.c | 45 +++++++++++++++++++++++++++++++++++++++++-- - 1 file changed, 43 insertions(+), 2 deletions(-) - ---- a/drivers/i2c/mtk_i2c.c -+++ b/drivers/i2c/mtk_i2c.c -@@ -183,9 +183,36 @@ static const uint mt_i2c_regs_v2[] = { - [REG_DCM_EN] = 0xf88, - }; - -+static const uint mt_i2c_regs_v3[] = { -+ [REG_PORT] = 0x0, -+ [REG_INTR_MASK] = 0x8, -+ [REG_INTR_STAT] = 0xc, -+ [REG_CONTROL] = 0x10, -+ [REG_TRANSFER_LEN] = 0x14, -+ [REG_TRANSAC_LEN] = 0x18, -+ [REG_DELAY_LEN] = 0x1c, -+ [REG_TIMING] = 0x20, -+ [REG_START] = 0x24, -+ [REG_EXT_CONF] = 0x28, -+ [REG_LTIMING] = 0x2c, -+ [REG_HS] = 0x30, -+ [REG_IO_CONFIG] = 0x34, -+ [REG_FIFO_ADDR_CLR] = 0x38, -+ [REG_TRANSFER_LEN_AUX] = 0x44, -+ [REG_CLOCK_DIV] = 0x48, -+ [REG_SOFTRESET] = 0x50, -+ [REG_SLAVE_ADDR] = 0x94, -+ [REG_DEBUGSTAT] = 0xe4, -+ [REG_DEBUGCTRL] = 0xe8, -+ [REG_FIFO_STAT] = 0xf4, -+ [REG_FIFO_THRESH] = 0xf8, -+ [REG_DCM_EN] = 0xf88, -+}; -+ - struct mtk_i2c_soc_data { - const uint *regs; - uint dma_sync: 1; -+ uint ltiming_adjust: 1; - }; - - struct mtk_i2c_priv { -@@ -401,6 +428,10 @@ static int mtk_i2c_set_speed(struct udev - (sample_cnt << HS_SAMPLE_OFFSET) | - (step_cnt << HS_STEP_OFFSET); - i2c_writel(priv, REG_HS, high_speed_reg); -+ if (priv->soc_data->ltiming_adjust) { -+ timing_reg = (sample_cnt << 12) | (step_cnt << 9); -+ i2c_writel(priv, REG_LTIMING, timing_reg); -+ } - } else { - ret = mtk_i2c_calculate_speed(clk_src, priv->speed, - &step_cnt, &sample_cnt); -@@ -412,7 +443,12 @@ static int mtk_i2c_set_speed(struct udev - high_speed_reg = I2C_TIME_CLR_VALUE; - i2c_writel(priv, REG_TIMING, timing_reg); - i2c_writel(priv, REG_HS, high_speed_reg); -+ if (priv->soc_data->ltiming_adjust) { -+ timing_reg = (sample_cnt << 6) | step_cnt; -+ i2c_writel(priv, REG_LTIMING, timing_reg); -+ } - } -+ - exit: - if (mtk_i2c_clk_disable(priv)) - return log_msg_ret("set_speed disable clk", -1); -@@ -725,7 +761,6 @@ static int mtk_i2c_probe(struct udevice - return log_msg_ret("probe enable clk", -1); - - mtk_i2c_init_hw(priv); -- - if (mtk_i2c_clk_disable(priv)) - return log_msg_ret("probe disable clk", -1); - -@@ -750,31 +785,37 @@ static int mtk_i2c_deblock(struct udevic - static const struct mtk_i2c_soc_data mt76xx_soc_data = { - .regs = mt_i2c_regs_v1, - .dma_sync = 0, -+ .ltiming_adjust = 0, - }; - - static const struct mtk_i2c_soc_data mt7981_soc_data = { -- .regs = mt_i2c_regs_v1, -+ .regs = mt_i2c_regs_v3, - .dma_sync = 1, -+ .ltiming_adjust = 1, - }; - - static const struct mtk_i2c_soc_data mt7986_soc_data = { - .regs = mt_i2c_regs_v1, - .dma_sync = 1, -+ .ltiming_adjust = 0, - }; - - static const struct mtk_i2c_soc_data mt8183_soc_data = { - .regs = mt_i2c_regs_v2, - .dma_sync = 1, -+ .ltiming_adjust = 0, - }; - - static const struct mtk_i2c_soc_data mt8518_soc_data = { - .regs = mt_i2c_regs_v1, - .dma_sync = 0, -+ .ltiming_adjust = 0, - }; - - static const struct mtk_i2c_soc_data mt8512_soc_data = { - .regs = mt_i2c_regs_v1, - .dma_sync = 1, -+ .ltiming_adjust = 0, - }; - - static const struct dm_i2c_ops mtk_i2c_ops = { diff --git a/lede/package/boot/uboot-mediatek/patches/101-08-arm-dts-enable-i2c-support-for-MediaTek-MT7981.patch b/lede/package/boot/uboot-mediatek/patches/101-08-arm-dts-enable-i2c-support-for-MediaTek-MT7981.patch deleted file mode 100644 index 77c4023493..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/101-08-arm-dts-enable-i2c-support-for-MediaTek-MT7981.patch +++ /dev/null @@ -1,36 +0,0 @@ -From e9467f40d4327cfcb80944a0f12ae195b0d7cd40 Mon Sep 17 00:00:00 2001 -From: Weijie Gao -Date: Wed, 19 Jul 2023 17:16:19 +0800 -Subject: [PATCH 08/29] arm: dts: enable i2c support for MediaTek MT7981 - -This patch enables i2c support for MediaTek MT7981 - -Signed-off-by: Sam Shih -Signed-off-by: Weijie Gao ---- - arch/arm/dts/mt7981.dtsi | 14 ++++++++++++++ - 1 file changed, 14 insertions(+) - ---- a/arch/arm/dts/mt7981.dtsi -+++ b/arch/arm/dts/mt7981.dtsi -@@ -181,6 +181,20 @@ - status = "disabled"; - }; - -+ i2c0: i2c@11007000 { -+ compatible = "mediatek,mt7981-i2c"; -+ reg = <0x11007000 0x1000>, -+ <0x10217080 0x80>; -+ interrupts = ; -+ clock-div = <1>; -+ clocks = <&infracfg_ao CK_INFRA_I2CO_CK>, -+ <&infracfg_ao CK_INFRA_AP_DMA_CK>; -+ clock-names = "main", "dma"; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ status = "disabled"; -+ }; -+ - uart0: serial@11002000 { - compatible = "mediatek,hsuart"; - reg = <0x11002000 0x400>; diff --git a/lede/package/boot/uboot-mediatek/patches/101-09-pwm-mtk-add-support-for-MediaTek-MT7988-SoC.patch b/lede/package/boot/uboot-mediatek/patches/101-09-pwm-mtk-add-support-for-MediaTek-MT7988-SoC.patch deleted file mode 100644 index 6ef62811cb..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/101-09-pwm-mtk-add-support-for-MediaTek-MT7988-SoC.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 646dab4a8e853b2d0789fa2ff64e7c48f5396cfa Mon Sep 17 00:00:00 2001 -From: Weijie Gao -Date: Wed, 19 Jul 2023 17:16:24 +0800 -Subject: [PATCH 09/29] pwm: mtk: add support for MediaTek MT7988 SoC - -This patch adds PWM support for MediaTek MT7988 SoC. - -Signed-off-by: Weijie Gao ---- - drivers/pwm/pwm-mtk.c | 7 +++++++ - 1 file changed, 7 insertions(+) - ---- a/drivers/pwm/pwm-mtk.c -+++ b/drivers/pwm/pwm-mtk.c -@@ -205,12 +205,19 @@ static const struct mtk_pwm_soc mt7986_d - .reg_ver = PWM_REG_V1, - }; - -+static const struct mtk_pwm_soc mt7988_data = { -+ .num_pwms = 8, -+ .pwm45_fixup = false, -+ .reg_ver = PWM_REG_V2, -+}; -+ - static const struct udevice_id mtk_pwm_ids[] = { - { .compatible = "mediatek,mt7622-pwm", .data = (ulong)&mt7622_data }, - { .compatible = "mediatek,mt7623-pwm", .data = (ulong)&mt7623_data }, - { .compatible = "mediatek,mt7629-pwm", .data = (ulong)&mt7629_data }, - { .compatible = "mediatek,mt7981-pwm", .data = (ulong)&mt7981_data }, - { .compatible = "mediatek,mt7986-pwm", .data = (ulong)&mt7986_data }, -+ { .compatible = "mediatek,mt7988-pwm", .data = (ulong)&mt7988_data }, - { } - }; - diff --git a/lede/package/boot/uboot-mediatek/patches/101-10-clk-mediatek-add-clock-driver-support-for-MediaTek-M.patch b/lede/package/boot/uboot-mediatek/patches/101-10-clk-mediatek-add-clock-driver-support-for-MediaTek-M.patch deleted file mode 100644 index 12eda828fa..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/101-10-clk-mediatek-add-clock-driver-support-for-MediaTek-M.patch +++ /dev/null @@ -1,1505 +0,0 @@ -From 94306126baa215c39e9fd5328550586dedf00230 Mon Sep 17 00:00:00 2001 -From: Weijie Gao -Date: Wed, 19 Jul 2023 17:16:28 +0800 -Subject: [PATCH 10/29] clk: mediatek: add clock driver support for MediaTek - MT7988 SoC - -This patch adds clock driver support for MediaTek MT7988 SoC - -Signed-off-by: Weijie Gao ---- - drivers/clk/mediatek/Makefile | 1 + - drivers/clk/mediatek/clk-mt7988.c | 1123 ++++++++++++++++++++++++ - include/dt-bindings/clock/mt7988-clk.h | 349 ++++++++ - 3 files changed, 1473 insertions(+) - create mode 100644 drivers/clk/mediatek/clk-mt7988.c - create mode 100644 include/dt-bindings/clock/mt7988-clk.h - ---- a/drivers/clk/mediatek/Makefile -+++ b/drivers/clk/mediatek/Makefile -@@ -9,6 +9,7 @@ obj-$(CONFIG_TARGET_MT7622) += clk-mt762 - obj-$(CONFIG_TARGET_MT7629) += clk-mt7629.o - obj-$(CONFIG_TARGET_MT7986) += clk-mt7986.o - obj-$(CONFIG_TARGET_MT7981) += clk-mt7981.o -+obj-$(CONFIG_TARGET_MT7988) += clk-mt7988.o - obj-$(CONFIG_TARGET_MT8183) += clk-mt8183.o - obj-$(CONFIG_TARGET_MT8516) += clk-mt8516.o - obj-$(CONFIG_TARGET_MT8518) += clk-mt8518.o ---- /dev/null -+++ b/drivers/clk/mediatek/clk-mt7988.c -@@ -0,0 +1,1123 @@ -+// SPDX-License-Identifier: GPL-2.0 -+/* -+ * MediaTek clock driver for MT7988 SoC -+ * -+ * Copyright (C) 2022 MediaTek Inc. -+ * Author: Sam Shih -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include "clk-mtk.h" -+ -+#define MT7988_CLK_PDN 0x250 -+#define MT7988_CLK_PDN_EN_WRITE BIT(31) -+ -+#define MT7988_ETHDMA_RST_CTRL_OFS 0x34 -+#define MT7988_ETHWARP_RST_CTRL_OFS 0x8 -+ -+#define XTAL_FACTOR(_id, _name, _parent, _mult, _div) \ -+ FACTOR(_id, _parent, _mult, _div, CLK_PARENT_XTAL) -+ -+#define PLL_FACTOR(_id, _name, _parent, _mult, _div) \ -+ FACTOR(_id, _parent, _mult, _div, CLK_PARENT_APMIXED) -+ -+#define TOP_FACTOR(_id, _name, _parent, _mult, _div) \ -+ FACTOR(_id, _parent, _mult, _div, CLK_PARENT_TOPCKGEN) -+ -+#define INFRA_FACTOR(_id, _name, _parent, _mult, _div) \ -+ FACTOR(_id, _parent, _mult, _div, CLK_PARENT_INFRASYS) -+ -+/* FIXED PLLS */ -+static const struct mtk_fixed_clk apmixedsys_mtk_plls[] = { -+ FIXED_CLK(CK_APMIXED_NETSYSPLL, CLK_XTAL, 850000000), -+ FIXED_CLK(CK_APMIXED_MPLL, CLK_XTAL, 416000000), -+ FIXED_CLK(CK_APMIXED_MMPLL, CLK_XTAL, 720000000), -+ FIXED_CLK(CK_APMIXED_APLL2, CLK_XTAL, 196608000), -+ FIXED_CLK(CK_APMIXED_NET1PLL, CLK_XTAL, 2500000000), -+ FIXED_CLK(CK_APMIXED_NET2PLL, CLK_XTAL, 800000000), -+ FIXED_CLK(CK_APMIXED_WEDMCUPLL, CLK_XTAL, 208000000), -+ FIXED_CLK(CK_APMIXED_SGMPLL, CLK_XTAL, 325000000), -+ FIXED_CLK(CK_APMIXED_ARM_B, CLK_XTAL, 1500000000), -+ FIXED_CLK(CK_APMIXED_CCIPLL2_B, CLK_XTAL, 960000000), -+ FIXED_CLK(CK_APMIXED_USXGMIIPLL, CLK_XTAL, 644533000), -+ FIXED_CLK(CK_APMIXED_MSDCPLL, CLK_XTAL, 400000000), -+}; -+ -+/* TOPCKGEN FIXED DIV */ -+static const struct mtk_fixed_factor topckgen_mtk_fixed_factors[] = { -+ XTAL_FACTOR(CK_TOP_CB_CKSQ_40M, "cb_cksq_40m", CLK_XTAL, 1, 1), -+ PLL_FACTOR(CK_TOP_CB_M_416M, "cb_m_416m", CK_APMIXED_MPLL, 1, 1), -+ PLL_FACTOR(CK_TOP_CB_M_D2, "cb_m_d2", CK_APMIXED_MPLL, 1, 2), -+ PLL_FACTOR(CK_TOP_M_D3_D2, "m_d3_d2", CK_APMIXED_MPLL, 1, 2), -+ PLL_FACTOR(CK_TOP_CB_M_D4, "cb_m_d4", CK_APMIXED_MPLL, 1, 4), -+ PLL_FACTOR(CK_TOP_CB_M_D8, "cb_m_d8", CK_APMIXED_MPLL, 1, 8), -+ PLL_FACTOR(CK_TOP_M_D8_D2, "m_d8_d2", CK_APMIXED_MPLL, 1, 16), -+ PLL_FACTOR(CK_TOP_CB_MM_720M, "cb_mm_720m", CK_APMIXED_MMPLL, 1, 1), -+ PLL_FACTOR(CK_TOP_CB_MM_D2, "cb_mm_d2", CK_APMIXED_MMPLL, 1, 2), -+ PLL_FACTOR(CK_TOP_CB_MM_D3_D5, "cb_mm_d3_d5", CK_APMIXED_MMPLL, 1, 15), -+ PLL_FACTOR(CK_TOP_CB_MM_D4, "cb_mm_d4", CK_APMIXED_MMPLL, 1, 4), -+ PLL_FACTOR(CK_TOP_MM_D6_D2, "mm_d6_d2", CK_APMIXED_MMPLL, 1, 12), -+ PLL_FACTOR(CK_TOP_CB_MM_D8, "cb_mm_d8", CK_APMIXED_MMPLL, 1, 8), -+ PLL_FACTOR(CK_TOP_CB_APLL2_196M, "cb_apll2_196m", CK_APMIXED_APLL2, 1, -+ 1), -+ PLL_FACTOR(CK_TOP_CB_APLL2_D4, "cb_apll2_d4", CK_APMIXED_APLL2, 1, 4), -+ PLL_FACTOR(CK_TOP_CB_NET1_D4, "cb_net1_d4", CK_APMIXED_NET1PLL, 1, 4), -+ PLL_FACTOR(CK_TOP_CB_NET1_D5, "cb_net1_d5", CK_APMIXED_NET1PLL, 1, 5), -+ PLL_FACTOR(CK_TOP_NET1_D5_D2, "net1_d5_d2", CK_APMIXED_NET1PLL, 1, 10), -+ PLL_FACTOR(CK_TOP_NET1_D5_D4, "net1_d5_d4", CK_APMIXED_NET1PLL, 1, 20), -+ PLL_FACTOR(CK_TOP_CB_NET1_D8, "cb_net1_d8", CK_APMIXED_NET1PLL, 1, 8), -+ PLL_FACTOR(CK_TOP_NET1_D8_D2, "net1_d8_d2", CK_APMIXED_NET1PLL, 1, 16), -+ PLL_FACTOR(CK_TOP_NET1_D8_D4, "net1_d8_d4", CK_APMIXED_NET1PLL, 1, 32), -+ PLL_FACTOR(CK_TOP_NET1_D8_D8, "net1_d8_d8", CK_APMIXED_NET1PLL, 1, 64), -+ PLL_FACTOR(CK_TOP_NET1_D8_D16, "net1_d8_d16", CK_APMIXED_NET1PLL, 1, -+ 128), -+ PLL_FACTOR(CK_TOP_CB_NET2_800M, "cb_net2_800m", CK_APMIXED_NET2PLL, 1, -+ 1), -+ PLL_FACTOR(CK_TOP_CB_NET2_D2, "cb_net2_d2", CK_APMIXED_NET2PLL, 1, 2), -+ PLL_FACTOR(CK_TOP_CB_NET2_D4, "cb_net2_d4", CK_APMIXED_NET2PLL, 1, 4), -+ PLL_FACTOR(CK_TOP_NET2_D4_D4, "net2_d4_d4", CK_APMIXED_NET2PLL, 1, 16), -+ PLL_FACTOR(CK_TOP_NET2_D4_D8, "net2_d4_d8", CK_APMIXED_NET2PLL, 1, 32), -+ PLL_FACTOR(CK_TOP_CB_NET2_D6, "cb_net2_d6", CK_APMIXED_NET2PLL, 1, 6), -+ PLL_FACTOR(CK_TOP_CB_NET2_D8, "cb_net2_d8", CK_APMIXED_NET2PLL, 1, 8), -+ PLL_FACTOR(CK_TOP_CB_WEDMCU_208M, "cb_wedmcu_208m", -+ CK_APMIXED_WEDMCUPLL, 1, 1), -+ PLL_FACTOR(CK_TOP_CB_SGM_325M, "cb_sgm_325m", CK_APMIXED_SGMPLL, 1, 1), -+ PLL_FACTOR(CK_TOP_CB_NETSYS_850M, "cb_netsys_850m", -+ CK_APMIXED_NETSYSPLL, 1, 1), -+ PLL_FACTOR(CK_TOP_CB_MSDC_400M, "cb_msdc_400m", CK_APMIXED_MSDCPLL, 1, -+ 1), -+ TOP_FACTOR(CK_TOP_CKSQ_40M_D2, "cksq_40m_d2", CK_TOP_CB_CKSQ_40M, 1, 2), -+ TOP_FACTOR(CK_TOP_CB_RTC_32K, "cb_rtc_32k", CK_TOP_CB_CKSQ_40M, 1, -+ 1250), -+ TOP_FACTOR(CK_TOP_CB_RTC_32P7K, "cb_rtc_32p7k", CK_TOP_CB_CKSQ_40M, 1, -+ 1220), -+ TOP_FACTOR(CK_TOP_INFRA_F32K, "csw_infra_f32k", CK_TOP_CB_RTC_32P7K, 1, -+ 1), -+ XTAL_FACTOR(CK_TOP_CKSQ_SRC, "cksq_src", CLK_XTAL, 1, 1), -+ TOP_FACTOR(CK_TOP_NETSYS_2X, "netsys_2x", CK_TOP_NETSYS_2X_SEL, 1, 1), -+ TOP_FACTOR(CK_TOP_NETSYS_GSW, "netsys_gsw", CK_TOP_NETSYS_GSW_SEL, 1, -+ 1), -+ TOP_FACTOR(CK_TOP_NETSYS_WED_MCU, "netsys_wed_mcu", -+ CK_TOP_NETSYS_MCU_SEL, 1, 1), -+ TOP_FACTOR(CK_TOP_EIP197, "eip197", CK_TOP_EIP197_SEL, 1, 1), -+ TOP_FACTOR(CK_TOP_EMMC_250M, "emmc_250m", CK_TOP_EMMC_250M_SEL, 1, 1), -+ TOP_FACTOR(CK_TOP_EMMC_400M, "emmc_400m", CK_TOP_EMMC_400M_SEL, 1, 1), -+ TOP_FACTOR(CK_TOP_SPI, "spi", CK_TOP_SPI_SEL, 1, 1), -+ TOP_FACTOR(CK_TOP_SPIM_MST, "spim_mst", CK_TOP_SPIM_MST_SEL, 1, 1), -+ TOP_FACTOR(CK_TOP_NFI1X, "nfi1x", CK_TOP_NFI1X_SEL, 1, 1), -+ TOP_FACTOR(CK_TOP_SPINFI_BCK, "spinfi_bck", CK_TOP_SPINFI_SEL, 1, 1), -+ TOP_FACTOR(CK_TOP_I2C_BCK, "i2c_bck", CK_TOP_I2C_SEL, 1, 1), -+ TOP_FACTOR(CK_TOP_USB_SYS, "usb_sys", CK_TOP_USB_SYS_SEL, 1, 1), -+ TOP_FACTOR(CK_TOP_USB_SYS_P1, "usb_sys_p1", CK_TOP_USB_SYS_P1_SEL, 1, -+ 1), -+ TOP_FACTOR(CK_TOP_USB_XHCI, "usb_xhci", CK_TOP_USB_XHCI_SEL, 1, 1), -+ TOP_FACTOR(CK_TOP_USB_XHCI_P1, "usb_xhci_p1", CK_TOP_USB_XHCI_P1_SEL, 1, -+ 1), -+ TOP_FACTOR(CK_TOP_USB_FRMCNT, "usb_frmcnt", CK_TOP_USB_FRMCNT_SEL, 1, -+ 1), -+ TOP_FACTOR(CK_TOP_USB_FRMCNT_P1, "usb_frmcnt_p1", -+ CK_TOP_USB_FRMCNT_P1_SEL, 1, 1), -+ TOP_FACTOR(CK_TOP_AUD, "aud", CK_TOP_AUD_SEL, 1, 1), -+ TOP_FACTOR(CK_TOP_A1SYS, "a1sys", CK_TOP_A1SYS_SEL, 1, 1), -+ TOP_FACTOR(CK_TOP_AUD_L, "aud_l", CK_TOP_AUD_L_SEL, 1, 1), -+ TOP_FACTOR(CK_TOP_A_TUNER, "a_tuner", CK_TOP_A_TUNER_SEL, 1, 1), -+ TOP_FACTOR(CK_TOP_SYSAXI, "sysaxi", CK_TOP_SYSAXI_SEL, 1, 1), -+ TOP_FACTOR(CK_TOP_INFRA_F26M, "csw_infra_f26m", CK_TOP_INFRA_F26M_SEL, -+ 1, 1), -+ TOP_FACTOR(CK_TOP_USB_REF, "usb_ref", CK_TOP_CKSQ_SRC, 1, 1), -+ TOP_FACTOR(CK_TOP_USB_CK_P1, "usb_ck_p1", CK_TOP_CKSQ_SRC, 1, 1), -+}; -+ -+/* TOPCKGEN MUX PARENTS */ -+static const int netsys_parents[] = { CK_TOP_CB_CKSQ_40M, CK_TOP_CB_NET2_D2, -+ CK_TOP_CB_MM_D2 }; -+ -+static const int netsys_500m_parents[] = { CK_TOP_CB_CKSQ_40M, -+ CK_TOP_CB_NET1_D5, -+ CK_TOP_NET1_D5_D2 }; -+ -+static const int netsys_2x_parents[] = { CK_TOP_CB_CKSQ_40M, -+ CK_TOP_CB_NET2_800M, -+ CK_TOP_CB_MM_720M }; -+ -+static const int netsys_gsw_parents[] = { CK_TOP_CB_CKSQ_40M, CK_TOP_CB_NET1_D4, -+ CK_TOP_CB_NET1_D5 }; -+ -+static const int eth_gmii_parents[] = { CK_TOP_CB_CKSQ_40M, CK_TOP_NET1_D5_D4 }; -+ -+static const int netsys_mcu_parents[] = { -+ CK_TOP_CB_CKSQ_40M, CK_TOP_CB_NET2_800M, CK_TOP_CB_MM_720M, -+ CK_TOP_CB_NET1_D4, CK_TOP_CB_NET1_D5, CK_TOP_CB_M_416M -+}; -+ -+static const int eip197_parents[] = { -+ CK_TOP_CB_CKSQ_40M, CK_TOP_CB_NETSYS_850M, CK_TOP_CB_NET2_800M, -+ CK_TOP_CB_MM_720M, CK_TOP_CB_NET1_D4, CK_TOP_CB_NET1_D5 -+}; -+ -+static const int axi_infra_parents[] = { CK_TOP_CB_CKSQ_40M, -+ CK_TOP_NET1_D8_D2 }; -+ -+static const int uart_parents[] = { CK_TOP_CB_CKSQ_40M, CK_TOP_CB_M_D8, -+ CK_TOP_M_D8_D2 }; -+ -+static const int emmc_250m_parents[] = { CK_TOP_CB_CKSQ_40M, CK_TOP_NET1_D5_D2, -+ CK_TOP_CB_MM_D4 }; -+ -+static const int emmc_400m_parents[] = { -+ CK_TOP_CB_CKSQ_40M, CK_TOP_CB_MSDC_400M, CK_TOP_CB_MM_D2, -+ CK_TOP_CB_M_D2, CK_TOP_CB_MM_D4, CK_TOP_NET1_D8_D2 -+}; -+ -+static const int spi_parents[] = { CK_TOP_CB_CKSQ_40M, CK_TOP_CB_M_D2, -+ CK_TOP_CB_MM_D4, CK_TOP_NET1_D8_D2, -+ CK_TOP_CB_NET2_D6, CK_TOP_NET1_D5_D4, -+ CK_TOP_CB_M_D4, CK_TOP_NET1_D8_D4 }; -+ -+static const int nfi1x_parents[] = { CK_TOP_CB_CKSQ_40M, CK_TOP_CB_MM_D4, -+ CK_TOP_NET1_D8_D2, CK_TOP_CB_NET2_D6, -+ CK_TOP_CB_M_D4, CK_TOP_CB_MM_D8, -+ CK_TOP_NET1_D8_D4, CK_TOP_CB_M_D8 }; -+ -+static const int spinfi_parents[] = { CK_TOP_CKSQ_40M_D2, CK_TOP_CB_CKSQ_40M, -+ CK_TOP_NET1_D5_D4, CK_TOP_CB_M_D4, -+ CK_TOP_CB_MM_D8, CK_TOP_NET1_D8_D4, -+ CK_TOP_MM_D6_D2, CK_TOP_CB_M_D8 }; -+ -+static const int pwm_parents[] = { CK_TOP_CB_CKSQ_40M, CK_TOP_NET1_D8_D2, -+ CK_TOP_NET1_D5_D4, CK_TOP_CB_M_D4, -+ CK_TOP_M_D8_D2, CK_TOP_CB_RTC_32K }; -+ -+static const int i2c_parents[] = { CK_TOP_CB_CKSQ_40M, CK_TOP_NET1_D5_D4, -+ CK_TOP_CB_M_D4, CK_TOP_NET1_D8_D4 }; -+ -+static const int pcie_mbist_250m_parents[] = { CK_TOP_CB_CKSQ_40M, -+ CK_TOP_NET1_D5_D2 }; -+ -+static const int pextp_tl_ck_parents[] = { CK_TOP_CB_CKSQ_40M, -+ CK_TOP_CB_NET2_D6, CK_TOP_CB_MM_D8, -+ CK_TOP_M_D8_D2, CK_TOP_CB_RTC_32K }; -+ -+static const int usb_frmcnt_parents[] = { CK_TOP_CB_CKSQ_40M, -+ CK_TOP_CB_MM_D3_D5 }; -+ -+static const int aud_parents[] = { CK_TOP_CB_CKSQ_40M, CK_TOP_CB_APLL2_196M }; -+ -+static const int a1sys_parents[] = { CK_TOP_CB_CKSQ_40M, CK_TOP_CB_APLL2_D4 }; -+ -+static const int aud_l_parents[] = { CK_TOP_CB_CKSQ_40M, CK_TOP_CB_APLL2_196M, -+ CK_TOP_M_D8_D2 }; -+ -+static const int sspxtp_parents[] = { CK_TOP_CKSQ_40M_D2, CK_TOP_M_D8_D2 }; -+ -+static const int usxgmii_sbus_0_parents[] = { CK_TOP_CB_CKSQ_40M, -+ CK_TOP_NET1_D8_D4 }; -+ -+static const int sgm_0_parents[] = { CK_TOP_CB_CKSQ_40M, CK_TOP_CB_SGM_325M }; -+ -+static const int sysapb_parents[] = { CK_TOP_CB_CKSQ_40M, CK_TOP_M_D3_D2 }; -+ -+static const int eth_refck_50m_parents[] = { CK_TOP_CB_CKSQ_40M, -+ CK_TOP_NET2_D4_D4 }; -+ -+static const int eth_sys_200m_parents[] = { CK_TOP_CB_CKSQ_40M, -+ CK_TOP_CB_NET2_D4 }; -+ -+static const int eth_xgmii_parents[] = { CK_TOP_CKSQ_40M_D2, CK_TOP_NET1_D8_D8, -+ CK_TOP_NET1_D8_D16 }; -+ -+static const int bus_tops_parents[] = { CK_TOP_CB_CKSQ_40M, CK_TOP_CB_NET1_D5, -+ CK_TOP_CB_NET2_D2 }; -+ -+static const int npu_tops_parents[] = { CK_TOP_CB_CKSQ_40M, -+ CK_TOP_CB_NET2_800M }; -+ -+static const int dramc_md32_parents[] = { CK_TOP_CB_CKSQ_40M, CK_TOP_CB_M_D2, -+ CK_TOP_CB_WEDMCU_208M }; -+ -+static const int da_xtp_glb_p0_parents[] = { CK_TOP_CB_CKSQ_40M, -+ CK_TOP_CB_NET2_D8 }; -+ -+static const int mcusys_backup_625m_parents[] = { CK_TOP_CB_CKSQ_40M, -+ CK_TOP_CB_NET1_D4 }; -+ -+static const int macsec_parents[] = { CK_TOP_CB_CKSQ_40M, CK_TOP_CB_SGM_325M, -+ CK_TOP_CB_NET1_D8 }; -+ -+static const int netsys_tops_400m_parents[] = { CK_TOP_CB_CKSQ_40M, -+ CK_TOP_CB_NET2_D2 }; -+ -+static const int eth_mii_parents[] = { CK_TOP_CKSQ_40M_D2, CK_TOP_NET2_D4_D8 }; -+ -+#define TOP_MUX(_id, _name, _parents, _mux_ofs, _mux_set_ofs, _mux_clr_ofs, \ -+ _shift, _width, _gate, _upd_ofs, _upd) \ -+ { \ -+ .id = _id, .mux_reg = _mux_ofs, .mux_set_reg = _mux_set_ofs, \ -+ .mux_clr_reg = _mux_clr_ofs, .upd_reg = _upd_ofs, \ -+ .upd_shift = _upd, .mux_shift = _shift, \ -+ .mux_mask = BIT(_width) - 1, .gate_reg = _mux_ofs, \ -+ .gate_shift = _gate, .parent = _parents, \ -+ .num_parents = ARRAY_SIZE(_parents), \ -+ .flags = CLK_MUX_SETCLR_UPD, \ -+ } -+ -+/* TOPCKGEN MUX_GATE */ -+static const struct mtk_composite topckgen_mtk_muxes[] = { -+ TOP_MUX(CK_TOP_NETSYS_SEL, "netsys_sel", netsys_parents, 0x0, 0x4, 0x8, -+ 0, 2, 7, 0x1c0, 0), -+ TOP_MUX(CK_TOP_NETSYS_500M_SEL, "netsys_500m_sel", netsys_500m_parents, -+ 0x0, 0x4, 0x8, 8, 2, 15, 0x1c0, 1), -+ TOP_MUX(CK_TOP_NETSYS_2X_SEL, "netsys_2x_sel", netsys_2x_parents, 0x0, -+ 0x4, 0x8, 16, 2, 23, 0x1c0, 2), -+ TOP_MUX(CK_TOP_NETSYS_GSW_SEL, "netsys_gsw_sel", netsys_gsw_parents, -+ 0x0, 0x4, 0x8, 24, 2, 31, 0x1c0, 3), -+ TOP_MUX(CK_TOP_ETH_GMII_SEL, "eth_gmii_sel", eth_gmii_parents, 0x10, -+ 0x14, 0x18, 0, 1, 7, 0x1c0, 4), -+ TOP_MUX(CK_TOP_NETSYS_MCU_SEL, "netsys_mcu_sel", netsys_mcu_parents, -+ 0x10, 0x14, 0x18, 8, 3, 15, 0x1c0, 5), -+ TOP_MUX(CK_TOP_NETSYS_PAO_2X_SEL, "netsys_pao_2x_sel", -+ netsys_mcu_parents, 0x10, 0x14, 0x18, 16, 3, 23, 0x1c0, 6), -+ TOP_MUX(CK_TOP_EIP197_SEL, "eip197_sel", eip197_parents, 0x10, 0x14, -+ 0x18, 24, 3, 31, 0x1c0, 7), -+ TOP_MUX(CK_TOP_AXI_INFRA_SEL, "axi_infra_sel", axi_infra_parents, 0x20, -+ 0x24, 0x28, 0, 1, 7, 0x1c0, 8), -+ TOP_MUX(CK_TOP_UART_SEL, "uart_sel", uart_parents, 0x20, 0x24, 0x28, 8, -+ 2, 15, 0x1c0, 9), -+ TOP_MUX(CK_TOP_EMMC_250M_SEL, "emmc_250m_sel", emmc_250m_parents, 0x20, -+ 0x24, 0x28, 16, 2, 23, 0x1c0, 10), -+ TOP_MUX(CK_TOP_EMMC_400M_SEL, "emmc_400m_sel", emmc_400m_parents, 0x20, -+ 0x24, 0x28, 24, 3, 31, 0x1c0, 11), -+ TOP_MUX(CK_TOP_SPI_SEL, "spi_sel", spi_parents, 0x30, 0x34, 0x38, 0, 3, -+ 7, 0x1c0, 12), -+ TOP_MUX(CK_TOP_SPIM_MST_SEL, "spim_mst_sel", spi_parents, 0x30, 0x34, -+ 0x38, 8, 3, 15, 0x1c0, 13), -+ TOP_MUX(CK_TOP_NFI1X_SEL, "nfi1x_sel", nfi1x_parents, 0x30, 0x34, 0x38, -+ 16, 3, 23, 0x1c0, 14), -+ TOP_MUX(CK_TOP_SPINFI_SEL, "spinfi_sel", spinfi_parents, 0x30, 0x34, -+ 0x38, 24, 3, 31, 0x1c0, 15), -+ TOP_MUX(CK_TOP_PWM_SEL, "pwm_sel", pwm_parents, 0x40, 0x44, 0x48, 0, 3, -+ 7, 0x1c0, 16), -+ TOP_MUX(CK_TOP_I2C_SEL, "i2c_sel", i2c_parents, 0x40, 0x44, 0x48, 8, 2, -+ 15, 0x1c0, 17), -+ TOP_MUX(CK_TOP_PCIE_MBIST_250M_SEL, "pcie_mbist_250m_sel", -+ pcie_mbist_250m_parents, 0x40, 0x44, 0x48, 16, 1, 23, 0x1c0, -+ 18), -+ TOP_MUX(CK_TOP_PEXTP_TL_SEL, "pextp_tl_ck_sel", pextp_tl_ck_parents, -+ 0x40, 0x44, 0x48, 24, 3, 31, 0x1c0, 19), -+ TOP_MUX(CK_TOP_PEXTP_TL_P1_SEL, "pextp_tl_ck_p1_sel", -+ pextp_tl_ck_parents, 0x50, 0x54, 0x58, 0, 3, 7, 0x1c0, 20), -+ TOP_MUX(CK_TOP_PEXTP_TL_P2_SEL, "pextp_tl_ck_p2_sel", -+ pextp_tl_ck_parents, 0x50, 0x54, 0x58, 8, 3, 15, 0x1c0, 21), -+ TOP_MUX(CK_TOP_PEXTP_TL_P3_SEL, "pextp_tl_ck_p3_sel", -+ pextp_tl_ck_parents, 0x50, 0x54, 0x58, 16, 3, 23, 0x1c0, 22), -+ TOP_MUX(CK_TOP_USB_SYS_SEL, "usb_sys_sel", eth_gmii_parents, 0x50, 0x54, -+ 0x58, 24, 1, 31, 0x1c0, 23), -+ TOP_MUX(CK_TOP_USB_SYS_P1_SEL, "usb_sys_p1_sel", eth_gmii_parents, 0x60, -+ 0x64, 0x68, 0, 1, 7, 0x1c0, 24), -+ TOP_MUX(CK_TOP_USB_XHCI_SEL, "usb_xhci_sel", eth_gmii_parents, 0x60, -+ 0x64, 0x68, 8, 1, 15, 0x1c0, 25), -+ TOP_MUX(CK_TOP_USB_XHCI_P1_SEL, "usb_xhci_p1_sel", eth_gmii_parents, -+ 0x60, 0x64, 0x68, 16, 1, 23, 0x1c0, 26), -+ TOP_MUX(CK_TOP_USB_FRMCNT_SEL, "usb_frmcnt_sel", usb_frmcnt_parents, -+ 0x60, 0x64, 0x68, 24, 1, 31, 0x1c0, 27), -+ TOP_MUX(CK_TOP_USB_FRMCNT_P1_SEL, "usb_frmcnt_p1_sel", -+ usb_frmcnt_parents, 0x70, 0x74, 0x78, 0, 1, 7, 0x1c0, 28), -+ TOP_MUX(CK_TOP_AUD_SEL, "aud_sel", aud_parents, 0x70, 0x74, 0x78, 8, 1, -+ 15, 0x1c0, 29), -+ TOP_MUX(CK_TOP_A1SYS_SEL, "a1sys_sel", a1sys_parents, 0x70, 0x74, 0x78, -+ 16, 1, 23, 0x1c0, 30), -+ TOP_MUX(CK_TOP_AUD_L_SEL, "aud_l_sel", aud_l_parents, 0x70, 0x74, 0x78, -+ 24, 2, 31, 0x1c4, 0), -+ TOP_MUX(CK_TOP_A_TUNER_SEL, "a_tuner_sel", a1sys_parents, 0x80, 0x84, -+ 0x88, 0, 1, 7, 0x1c4, 1), -+ TOP_MUX(CK_TOP_SSPXTP_SEL, "sspxtp_sel", sspxtp_parents, 0x80, 0x84, -+ 0x88, 8, 1, 15, 0x1c4, 2), -+ TOP_MUX(CK_TOP_USB_PHY_SEL, "usb_phy_sel", sspxtp_parents, 0x80, 0x84, -+ 0x88, 16, 1, 23, 0x1c4, 3), -+ TOP_MUX(CK_TOP_USXGMII_SBUS_0_SEL, "usxgmii_sbus_0_sel", -+ usxgmii_sbus_0_parents, 0x80, 0x84, 0x88, 24, 1, 31, 0x1c4, 4), -+ TOP_MUX(CK_TOP_USXGMII_SBUS_1_SEL, "usxgmii_sbus_1_sel", -+ usxgmii_sbus_0_parents, 0x90, 0x94, 0x98, 0, 1, 7, 0x1c4, 5), -+ TOP_MUX(CK_TOP_SGM_0_SEL, "sgm_0_sel", sgm_0_parents, 0x90, 0x94, 0x98, -+ 8, 1, 15, 0x1c4, 6), -+ TOP_MUX(CK_TOP_SGM_SBUS_0_SEL, "sgm_sbus_0_sel", usxgmii_sbus_0_parents, -+ 0x90, 0x94, 0x98, 16, 1, 23, 0x1c4, 7), -+ TOP_MUX(CK_TOP_SGM_1_SEL, "sgm_1_sel", sgm_0_parents, 0x90, 0x94, 0x98, -+ 24, 1, 31, 0x1c4, 8), -+ TOP_MUX(CK_TOP_SGM_SBUS_1_SEL, "sgm_sbus_1_sel", usxgmii_sbus_0_parents, -+ 0xa0, 0xa4, 0xa8, 0, 1, 7, 0x1c4, 9), -+ TOP_MUX(CK_TOP_XFI_PHY_0_XTAL_SEL, "xfi_phy_0_xtal_sel", sspxtp_parents, -+ 0xa0, 0xa4, 0xa8, 8, 1, 15, 0x1c4, 10), -+ TOP_MUX(CK_TOP_XFI_PHY_1_XTAL_SEL, "xfi_phy_1_xtal_sel", sspxtp_parents, -+ 0xa0, 0xa4, 0xa8, 16, 1, 23, 0x1c4, 11), -+ TOP_MUX(CK_TOP_SYSAXI_SEL, "sysaxi_sel", axi_infra_parents, 0xa0, 0xa4, -+ 0xa8, 24, 1, 31, 0x1c4, 12), -+ TOP_MUX(CK_TOP_SYSAPB_SEL, "sysapb_sel", sysapb_parents, 0xb0, 0xb4, -+ 0xb8, 0, 1, 7, 0x1c4, 13), -+ TOP_MUX(CK_TOP_ETH_REFCK_50M_SEL, "eth_refck_50m_sel", -+ eth_refck_50m_parents, 0xb0, 0xb4, 0xb8, 8, 1, 15, 0x1c4, 14), -+ TOP_MUX(CK_TOP_ETH_SYS_200M_SEL, "eth_sys_200m_sel", -+ eth_sys_200m_parents, 0xb0, 0xb4, 0xb8, 16, 1, 23, 0x1c4, 15), -+ TOP_MUX(CK_TOP_ETH_SYS_SEL, "eth_sys_sel", pcie_mbist_250m_parents, -+ 0xb0, 0xb4, 0xb8, 24, 1, 31, 0x1c4, 16), -+ TOP_MUX(CK_TOP_ETH_XGMII_SEL, "eth_xgmii_sel", eth_xgmii_parents, 0xc0, -+ 0xc4, 0xc8, 0, 2, 7, 0x1c4, 17), -+ TOP_MUX(CK_TOP_BUS_TOPS_SEL, "bus_tops_sel", bus_tops_parents, 0xc0, -+ 0xc4, 0xc8, 8, 2, 15, 0x1c4, 18), -+ TOP_MUX(CK_TOP_NPU_TOPS_SEL, "npu_tops_sel", npu_tops_parents, 0xc0, -+ 0xc4, 0xc8, 16, 1, 23, 0x1c4, 19), -+ TOP_MUX(CK_TOP_DRAMC_SEL, "dramc_sel", sspxtp_parents, 0xc0, 0xc4, 0xc8, -+ 24, 1, 31, 0x1c4, 20), -+ TOP_MUX(CK_TOP_DRAMC_MD32_SEL, "dramc_md32_sel", dramc_md32_parents, -+ 0xd0, 0xd4, 0xd8, 0, 2, 7, 0x1c4, 21), -+ TOP_MUX(CK_TOP_INFRA_F26M_SEL, "csw_infra_f26m_sel", sspxtp_parents, -+ 0xd0, 0xd4, 0xd8, 8, 1, 15, 0x1c4, 22), -+ TOP_MUX(CK_TOP_PEXTP_P0_SEL, "pextp_p0_sel", sspxtp_parents, 0xd0, 0xd4, -+ 0xd8, 16, 1, 23, 0x1c4, 23), -+ TOP_MUX(CK_TOP_PEXTP_P1_SEL, "pextp_p1_sel", sspxtp_parents, 0xd0, 0xd4, -+ 0xd8, 24, 1, 31, 0x1c4, 24), -+ TOP_MUX(CK_TOP_PEXTP_P2_SEL, "pextp_p2_sel", sspxtp_parents, 0xe0, 0xe4, -+ 0xe8, 0, 1, 7, 0x1c4, 25), -+ TOP_MUX(CK_TOP_PEXTP_P3_SEL, "pextp_p3_sel", sspxtp_parents, 0xe0, 0xe4, -+ 0xe8, 8, 1, 15, 0x1c4, 26), -+ TOP_MUX(CK_TOP_DA_XTP_GLB_P0_SEL, "da_xtp_glb_p0_sel", -+ da_xtp_glb_p0_parents, 0xe0, 0xe4, 0xe8, 16, 1, 23, 0x1c4, 27), -+ TOP_MUX(CK_TOP_DA_XTP_GLB_P1_SEL, "da_xtp_glb_p1_sel", -+ da_xtp_glb_p0_parents, 0xe0, 0xe4, 0xe8, 24, 1, 31, 0x1c4, 28), -+ TOP_MUX(CK_TOP_DA_XTP_GLB_P2_SEL, "da_xtp_glb_p2_sel", -+ da_xtp_glb_p0_parents, 0xf0, 0xf4, 0xf8, 0, 1, 7, 0x1c4, 29), -+ TOP_MUX(CK_TOP_DA_XTP_GLB_P3_SEL, "da_xtp_glb_p3_sel", -+ da_xtp_glb_p0_parents, 0xf0, 0xf4, 0xf8, 8, 1, 15, 0x1c4, 30), -+ TOP_MUX(CK_TOP_CKM_SEL, "ckm_sel", sspxtp_parents, 0xf0, 0xf4, 0xf8, 16, -+ 1, 23, 0x1c8, 0), -+ TOP_MUX(CK_TOP_DA_SELM_XTAL_SEL, "da_selm_xtal_sel", sspxtp_parents, -+ 0xf0, 0xf4, 0xf8, 24, 1, 31, 0x1c8, 1), -+ TOP_MUX(CK_TOP_PEXTP_SEL, "pextp_sel", sspxtp_parents, 0x100, 0x104, -+ 0x108, 0, 1, 7, 0x1c8, 2), -+ TOP_MUX(CK_TOP_TOPS_P2_26M_SEL, "tops_p2_26m_sel", sspxtp_parents, -+ 0x100, 0x104, 0x108, 8, 1, 15, 0x1c8, 3), -+ TOP_MUX(CK_TOP_MCUSYS_BACKUP_625M_SEL, "mcusys_backup_625m_sel", -+ mcusys_backup_625m_parents, 0x100, 0x104, 0x108, 16, 1, 23, -+ 0x1c8, 4), -+ TOP_MUX(CK_TOP_NETSYS_SYNC_250M_SEL, "netsys_sync_250m_sel", -+ pcie_mbist_250m_parents, 0x100, 0x104, 0x108, 24, 1, 31, 0x1c8, -+ 5), -+ TOP_MUX(CK_TOP_MACSEC_SEL, "macsec_sel", macsec_parents, 0x110, 0x114, -+ 0x118, 0, 2, 7, 0x1c8, 6), -+ TOP_MUX(CK_TOP_NETSYS_TOPS_400M_SEL, "netsys_tops_400m_sel", -+ netsys_tops_400m_parents, 0x110, 0x114, 0x118, 8, 1, 15, 0x1c8, -+ 7), -+ TOP_MUX(CK_TOP_NETSYS_PPEFB_250M_SEL, "netsys_ppefb_250m_sel", -+ pcie_mbist_250m_parents, 0x110, 0x114, 0x118, 16, 1, 23, 0x1c8, -+ 8), -+ TOP_MUX(CK_TOP_NETSYS_WARP_SEL, "netsys_warp_sel", netsys_parents, -+ 0x110, 0x114, 0x118, 24, 2, 31, 0x1c8, 9), -+ TOP_MUX(CK_TOP_ETH_MII_SEL, "eth_mii_sel", eth_mii_parents, 0x120, -+ 0x124, 0x128, 0, 1, 7, 0x1c8, 10), -+ TOP_MUX(CK_TOP_CK_NPU_SEL_CM_TOPS_SEL, "ck_npu_sel_cm_tops_sel", -+ netsys_2x_parents, 0x120, 0x124, 0x128, 8, 2, 15, 0x1c8, 11), -+}; -+ -+/* INFRA FIXED DIV */ -+static const struct mtk_fixed_factor infracfg_mtk_fixed_factor[] = { -+ TOP_FACTOR(CK_INFRA_CK_F26M, "infra_ck_f26m", CK_TOP_INFRA_F26M_SEL, 1, -+ 1), -+ TOP_FACTOR(CK_INFRA_PWM_O, "infra_pwm_o", CK_TOP_PWM_SEL, 1, 1), -+ TOP_FACTOR(CK_INFRA_PCIE_OCC_P0, "infra_pcie_ck_occ_p0", -+ CK_TOP_PEXTP_TL_SEL, 1, 1), -+ TOP_FACTOR(CK_INFRA_PCIE_OCC_P1, "infra_pcie_ck_occ_p1", -+ CK_TOP_PEXTP_TL_P1_SEL, 1, 1), -+ TOP_FACTOR(CK_INFRA_PCIE_OCC_P2, "infra_pcie_ck_occ_p2", -+ CK_TOP_PEXTP_TL_P2_SEL, 1, 1), -+ TOP_FACTOR(CK_INFRA_PCIE_OCC_P3, "infra_pcie_ck_occ_p3", -+ CK_TOP_PEXTP_TL_P3_SEL, 1, 1), -+ TOP_FACTOR(CK_INFRA_133M_HCK, "infra_133m_hck", CK_TOP_SYSAXI, 1, 1), -+ INFRA_FACTOR(CK_INFRA_133M_PHCK, "infra_133m_phck", CK_INFRA_133M_HCK, -+ 1, 1), -+ INFRA_FACTOR(CK_INFRA_66M_PHCK, "infra_66m_phck", CK_INFRA_133M_HCK, 1, -+ 1), -+ TOP_FACTOR(CK_INFRA_FAUD_L_O, "infra_faud_l_o", CK_TOP_AUD_L, 1, 1), -+ TOP_FACTOR(CK_INFRA_FAUD_AUD_O, "infra_faud_aud_o", CK_TOP_A1SYS, 1, 1), -+ TOP_FACTOR(CK_INFRA_FAUD_EG2_O, "infra_faud_eg2_o", CK_TOP_A_TUNER, 1, -+ 1), -+ TOP_FACTOR(CK_INFRA_I2C_O, "infra_i2c_o", CK_TOP_I2C_BCK, 1, 1), -+ TOP_FACTOR(CK_INFRA_UART_O0, "infra_uart_o0", CK_TOP_UART_SEL, 1, 1), -+ TOP_FACTOR(CK_INFRA_UART_O1, "infra_uart_o1", CK_TOP_UART_SEL, 1, 1), -+ TOP_FACTOR(CK_INFRA_UART_O2, "infra_uart_o2", CK_TOP_UART_SEL, 1, 1), -+ TOP_FACTOR(CK_INFRA_NFI_O, "infra_nfi_o", CK_TOP_NFI1X, 1, 1), -+ TOP_FACTOR(CK_INFRA_SPINFI_O, "infra_spinfi_o", CK_TOP_SPINFI_BCK, 1, -+ 1), -+ TOP_FACTOR(CK_INFRA_SPI0_O, "infra_spi0_o", CK_TOP_SPI, 1, 1), -+ TOP_FACTOR(CK_INFRA_SPI1_O, "infra_spi1_o", CK_TOP_SPIM_MST, 1, 1), -+ INFRA_FACTOR(CK_INFRA_LB_MUX_FRTC, "infra_lb_mux_frtc", CK_INFRA_FRTC, -+ 1, 1), -+ TOP_FACTOR(CK_INFRA_FRTC, "infra_frtc", CK_TOP_CB_RTC_32K, 1, 1), -+ TOP_FACTOR(CK_INFRA_FMSDC400_O, "infra_fmsdc400_o", CK_TOP_EMMC_400M, 1, -+ 1), -+ TOP_FACTOR(CK_INFRA_FMSDC2_HCK_OCC, "infra_fmsdc2_hck_occ", -+ CK_TOP_EMMC_250M, 1, 1), -+ TOP_FACTOR(CK_INFRA_PERI_133M, "infra_peri_133m", CK_TOP_SYSAXI, 1, 1), -+ TOP_FACTOR(CK_INFRA_USB_O, "infra_usb_o", CK_TOP_USB_REF, 1, 1), -+ TOP_FACTOR(CK_INFRA_USB_O_P1, "infra_usb_o_p1", CK_TOP_USB_CK_P1, 1, 1), -+ TOP_FACTOR(CK_INFRA_USB_FRMCNT_O, "infra_usb_frmcnt_o", -+ CK_TOP_USB_FRMCNT, 1, 1), -+ TOP_FACTOR(CK_INFRA_USB_FRMCNT_O_P1, "infra_usb_frmcnt_o_p1", -+ CK_TOP_USB_FRMCNT_P1, 1, 1), -+ TOP_FACTOR(CK_INFRA_USB_XHCI_O, "infra_usb_xhci_o", CK_TOP_USB_XHCI, 1, -+ 1), -+ TOP_FACTOR(CK_INFRA_USB_XHCI_O_P1, "infra_usb_xhci_o_p1", -+ CK_TOP_USB_XHCI_P1, 1, 1), -+ XTAL_FACTOR(CK_INFRA_USB_PIPE_O, "infra_usb_pipe_o", CLK_XTAL, 1, 1), -+ XTAL_FACTOR(CK_INFRA_USB_PIPE_O_P1, "infra_usb_pipe_o_p1", CLK_XTAL, 1, -+ 1), -+ XTAL_FACTOR(CK_INFRA_USB_UTMI_O, "infra_usb_utmi_o", CLK_XTAL, 1, 1), -+ XTAL_FACTOR(CK_INFRA_USB_UTMI_O_P1, "infra_usb_utmi_o_p1", CLK_XTAL, 1, -+ 1), -+ XTAL_FACTOR(CK_INFRA_PCIE_PIPE_OCC_P0, "infra_pcie_pipe_ck_occ_p0", -+ CLK_XTAL, 1, 1), -+ XTAL_FACTOR(CK_INFRA_PCIE_PIPE_OCC_P1, "infra_pcie_pipe_ck_occ_p1", -+ CLK_XTAL, 1, 1), -+ XTAL_FACTOR(CK_INFRA_PCIE_PIPE_OCC_P2, "infra_pcie_pipe_ck_occ_p2", -+ CLK_XTAL, 1, 1), -+ XTAL_FACTOR(CK_INFRA_PCIE_PIPE_OCC_P3, "infra_pcie_pipe_ck_occ_p3", -+ CLK_XTAL, 1, 1), -+ TOP_FACTOR(CK_INFRA_F26M_O0, "infra_f26m_o0", CK_TOP_INFRA_F26M, 1, 1), -+ TOP_FACTOR(CK_INFRA_F26M_O1, "infra_f26m_o1", CK_TOP_INFRA_F26M, 1, 1), -+ TOP_FACTOR(CK_INFRA_133M_MCK, "infra_133m_mck", CK_TOP_SYSAXI, 1, 1), -+ TOP_FACTOR(CK_INFRA_66M_MCK, "infra_66m_mck", CK_TOP_SYSAXI, 1, 1), -+ TOP_FACTOR(CK_INFRA_PERI_66M_O, "infra_peri_66m_o", CK_TOP_SYSAXI, 1, -+ 1), -+ TOP_FACTOR(CK_INFRA_USB_SYS_O, "infra_usb_sys_o", CK_TOP_USB_SYS, 1, 1), -+ TOP_FACTOR(CK_INFRA_USB_SYS_O_P1, "infra_usb_sys_o_p1", -+ CK_TOP_USB_SYS_P1, 1, 1), -+}; -+ -+/* INFRASYS MUX PARENTS */ -+static const int infra_mux_uart0_parents[] = { CK_INFRA_CK_F26M, -+ CK_INFRA_UART_O0 }; -+ -+static const int infra_mux_uart1_parents[] = { CK_INFRA_CK_F26M, -+ CK_INFRA_UART_O1 }; -+ -+static const int infra_mux_uart2_parents[] = { CK_INFRA_CK_F26M, -+ CK_INFRA_UART_O2 }; -+ -+static const int infra_mux_spi0_parents[] = { CK_INFRA_I2C_O, CK_INFRA_SPI0_O }; -+ -+static const int infra_mux_spi1_parents[] = { CK_INFRA_I2C_O, CK_INFRA_SPI1_O }; -+ -+static const int infra_pwm_bck_parents[] = { CK_TOP_INFRA_F32K, -+ CK_INFRA_CK_F26M, CK_INFRA_66M_MCK, -+ CK_INFRA_PWM_O }; -+ -+static const int infra_pcie_gfmux_tl_ck_o_p0_parents[] = { -+ CK_TOP_INFRA_F32K, CK_INFRA_CK_F26M, CK_INFRA_CK_F26M, -+ CK_INFRA_PCIE_OCC_P0 -+}; -+ -+static const int infra_pcie_gfmux_tl_ck_o_p1_parents[] = { -+ CK_TOP_INFRA_F32K, CK_INFRA_CK_F26M, CK_INFRA_CK_F26M, -+ CK_INFRA_PCIE_OCC_P1 -+}; -+ -+static const int infra_pcie_gfmux_tl_ck_o_p2_parents[] = { -+ CK_TOP_INFRA_F32K, CK_INFRA_CK_F26M, CK_INFRA_CK_F26M, -+ CK_INFRA_PCIE_OCC_P2 -+}; -+ -+static const int infra_pcie_gfmux_tl_ck_o_p3_parents[] = { -+ CK_TOP_INFRA_F32K, CK_INFRA_CK_F26M, CK_INFRA_CK_F26M, -+ CK_INFRA_PCIE_OCC_P3 -+}; -+ -+#define INFRA_MUX(_id, _name, _parents, _reg, _shift, _width) \ -+ { \ -+ .id = _id, .mux_reg = _reg + 0x8, .mux_set_reg = _reg + 0x0, \ -+ .mux_clr_reg = _reg + 0x4, .mux_shift = _shift, \ -+ .mux_mask = BIT(_width) - 1, .parent = _parents, \ -+ .num_parents = ARRAY_SIZE(_parents), \ -+ .flags = CLK_MUX_SETCLR_UPD | CLK_PARENT_INFRASYS, \ -+ } -+ -+/* INFRA MUX */ -+static const struct mtk_composite infracfg_mtk_mux[] = { -+ INFRA_MUX(CK_INFRA_MUX_UART0_SEL, "infra_mux_uart0_sel", -+ infra_mux_uart0_parents, 0x10, 0, 1), -+ INFRA_MUX(CK_INFRA_MUX_UART1_SEL, "infra_mux_uart1_sel", -+ infra_mux_uart1_parents, 0x10, 1, 1), -+ INFRA_MUX(CK_INFRA_MUX_UART2_SEL, "infra_mux_uart2_sel", -+ infra_mux_uart2_parents, 0x10, 2, 1), -+ INFRA_MUX(CK_INFRA_MUX_SPI0_SEL, "infra_mux_spi0_sel", -+ infra_mux_spi0_parents, 0x10, 4, 1), -+ INFRA_MUX(CK_INFRA_MUX_SPI1_SEL, "infra_mux_spi1_sel", -+ infra_mux_spi1_parents, 0x10, 5, 1), -+ INFRA_MUX(CK_INFRA_MUX_SPI2_SEL, "infra_mux_spi2_sel", -+ infra_mux_spi0_parents, 0x10, 6, 1), -+ INFRA_MUX(CK_INFRA_PWM_SEL, "infra_pwm_sel", infra_pwm_bck_parents, -+ 0x10, 14, 2), -+ INFRA_MUX(CK_INFRA_PWM_CK1_SEL, "infra_pwm_ck1_sel", -+ infra_pwm_bck_parents, 0x10, 16, 2), -+ INFRA_MUX(CK_INFRA_PWM_CK2_SEL, "infra_pwm_ck2_sel", -+ infra_pwm_bck_parents, 0x10, 18, 2), -+ INFRA_MUX(CK_INFRA_PWM_CK3_SEL, "infra_pwm_ck3_sel", -+ infra_pwm_bck_parents, 0x10, 20, 2), -+ INFRA_MUX(CK_INFRA_PWM_CK4_SEL, "infra_pwm_ck4_sel", -+ infra_pwm_bck_parents, 0x10, 22, 2), -+ INFRA_MUX(CK_INFRA_PWM_CK5_SEL, "infra_pwm_ck5_sel", -+ infra_pwm_bck_parents, 0x10, 24, 2), -+ INFRA_MUX(CK_INFRA_PWM_CK6_SEL, "infra_pwm_ck6_sel", -+ infra_pwm_bck_parents, 0x10, 26, 2), -+ INFRA_MUX(CK_INFRA_PWM_CK7_SEL, "infra_pwm_ck7_sel", -+ infra_pwm_bck_parents, 0x10, 28, 2), -+ INFRA_MUX(CK_INFRA_PWM_CK8_SEL, "infra_pwm_ck8_sel", -+ infra_pwm_bck_parents, 0x10, 30, 2), -+ INFRA_MUX(CK_INFRA_PCIE_GFMUX_TL_O_P0_SEL, -+ "infra_pcie_gfmux_tl_o_p0_sel", -+ infra_pcie_gfmux_tl_ck_o_p0_parents, 0x20, 0, 2), -+ INFRA_MUX(CK_INFRA_PCIE_GFMUX_TL_O_P1_SEL, -+ "infra_pcie_gfmux_tl_o_p1_sel", -+ infra_pcie_gfmux_tl_ck_o_p1_parents, 0x20, 2, 2), -+ INFRA_MUX(CK_INFRA_PCIE_GFMUX_TL_O_P2_SEL, -+ "infra_pcie_gfmux_tl_o_p2_sel", -+ infra_pcie_gfmux_tl_ck_o_p2_parents, 0x20, 4, 2), -+ INFRA_MUX(CK_INFRA_PCIE_GFMUX_TL_O_P3_SEL, -+ "infra_pcie_gfmux_tl_o_p3_sel", -+ infra_pcie_gfmux_tl_ck_o_p3_parents, 0x20, 6, 2), -+}; -+ -+static const struct mtk_gate_regs infra_0_cg_regs = { -+ .set_ofs = 0x10, -+ .clr_ofs = 0x14, -+ .sta_ofs = 0x18, -+}; -+ -+static const struct mtk_gate_regs infra_1_cg_regs = { -+ .set_ofs = 0x40, -+ .clr_ofs = 0x44, -+ .sta_ofs = 0x48, -+}; -+ -+static const struct mtk_gate_regs infra_2_cg_regs = { -+ .set_ofs = 0x50, -+ .clr_ofs = 0x54, -+ .sta_ofs = 0x58, -+}; -+ -+static const struct mtk_gate_regs infra_3_cg_regs = { -+ .set_ofs = 0x60, -+ .clr_ofs = 0x64, -+ .sta_ofs = 0x68, -+}; -+ -+#define GATE_INFRA0(_id, _name, _parent, _shift) \ -+ { \ -+ .id = _id, .parent = _parent, .regs = &infra_0_cg_regs, \ -+ .shift = _shift, \ -+ .flags = CLK_GATE_SETCLR | CLK_PARENT_INFRASYS, \ -+ } -+ -+#define GATE_INFRA1(_id, _name, _parent, _shift) \ -+ { \ -+ .id = _id, .parent = _parent, .regs = &infra_1_cg_regs, \ -+ .shift = _shift, \ -+ .flags = CLK_GATE_SETCLR | CLK_PARENT_INFRASYS, \ -+ } -+ -+#define GATE_INFRA2(_id, _name, _parent, _shift) \ -+ { \ -+ .id = _id, .parent = _parent, .regs = &infra_2_cg_regs, \ -+ .shift = _shift, \ -+ .flags = CLK_GATE_SETCLR | CLK_PARENT_INFRASYS, \ -+ } -+ -+#define GATE_INFRA3(_id, _name, _parent, _shift) \ -+ { \ -+ .id = _id, .parent = _parent, .regs = &infra_3_cg_regs, \ -+ .shift = _shift, \ -+ .flags = CLK_GATE_SETCLR | CLK_PARENT_INFRASYS, \ -+ } -+ -+/* INFRA GATE */ -+static const struct mtk_gate infracfg_mtk_gates[] = { -+ GATE_INFRA1(CK_INFRA_66M_GPT_BCK, "infra_hf_66m_gpt_bck", -+ CK_INFRA_66M_MCK, 0), -+ GATE_INFRA1(CK_INFRA_66M_PWM_HCK, "infra_hf_66m_pwm_hck", -+ CK_INFRA_66M_MCK, 1), -+ GATE_INFRA1(CK_INFRA_66M_PWM_BCK, "infra_hf_66m_pwm_bck", -+ CK_INFRA_PWM_SEL, 2), -+ GATE_INFRA1(CK_INFRA_66M_PWM_CK1, "infra_hf_66m_pwm_ck1", -+ CK_INFRA_PWM_CK1_SEL, 3), -+ GATE_INFRA1(CK_INFRA_66M_PWM_CK2, "infra_hf_66m_pwm_ck2", -+ CK_INFRA_PWM_CK2_SEL, 4), -+ GATE_INFRA1(CK_INFRA_66M_PWM_CK3, "infra_hf_66m_pwm_ck3", -+ CK_INFRA_PWM_CK3_SEL, 5), -+ GATE_INFRA1(CK_INFRA_66M_PWM_CK4, "infra_hf_66m_pwm_ck4", -+ CK_INFRA_PWM_CK4_SEL, 6), -+ GATE_INFRA1(CK_INFRA_66M_PWM_CK5, "infra_hf_66m_pwm_ck5", -+ CK_INFRA_PWM_CK5_SEL, 7), -+ GATE_INFRA1(CK_INFRA_66M_PWM_CK6, "infra_hf_66m_pwm_ck6", -+ CK_INFRA_PWM_CK6_SEL, 8), -+ GATE_INFRA1(CK_INFRA_66M_PWM_CK7, "infra_hf_66m_pwm_ck7", -+ CK_INFRA_PWM_CK7_SEL, 9), -+ GATE_INFRA1(CK_INFRA_66M_PWM_CK8, "infra_hf_66m_pwm_ck8", -+ CK_INFRA_PWM_CK8_SEL, 10), -+ GATE_INFRA1(CK_INFRA_133M_CQDMA_BCK, "infra_hf_133m_cqdma_bck", -+ CK_INFRA_133M_MCK, 12), -+ GATE_INFRA1(CK_INFRA_66M_AUD_SLV_BCK, "infra_66m_aud_slv_bck", -+ CK_INFRA_66M_PHCK, 13), -+ GATE_INFRA1(CK_INFRA_AUD_26M, "infra_f_faud_26m", CK_INFRA_CK_F26M, 14), -+ GATE_INFRA1(CK_INFRA_AUD_L, "infra_f_faud_l", CK_INFRA_FAUD_L_O, 15), -+ GATE_INFRA1(CK_INFRA_AUD_AUD, "infra_f_aud_aud", CK_INFRA_FAUD_AUD_O, -+ 16), -+ GATE_INFRA1(CK_INFRA_AUD_EG2, "infra_f_faud_eg2", CK_INFRA_FAUD_EG2_O, -+ 18), -+ GATE_INFRA1(CK_INFRA_DRAMC_F26M, "infra_dramc_f26m", CK_INFRA_CK_F26M, -+ 19), -+ GATE_INFRA1(CK_INFRA_133M_DBG_ACKM, "infra_hf_133m_dbg_ackm", -+ CK_INFRA_133M_MCK, 20), -+ GATE_INFRA1(CK_INFRA_66M_AP_DMA_BCK, "infra_66m_ap_dma_bck", -+ CK_INFRA_66M_MCK, 21), -+ GATE_INFRA1(CK_INFRA_66M_SEJ_BCK, "infra_hf_66m_sej_bck", -+ CK_INFRA_66M_MCK, 29), -+ GATE_INFRA1(CK_INFRA_PRE_CK_SEJ_F13M, "infra_pre_ck_sej_f13m", -+ CK_INFRA_CK_F26M, 30), -+ GATE_INFRA1(CK_INFRA_66M_TRNG, "infra_hf_66m_trng", CK_INFRA_PERI_66M_O, -+ 31), -+ GATE_INFRA2(CK_INFRA_26M_THERM_SYSTEM, "infra_hf_26m_therm_system", -+ CK_INFRA_CK_F26M, 0), -+ GATE_INFRA2(CK_INFRA_I2C_BCK, "infra_i2c_bck", CK_INFRA_I2C_O, 1), -+ GATE_INFRA2(CK_INFRA_66M_UART0_PCK, "infra_hf_66m_uart0_pck", -+ CK_INFRA_66M_MCK, 3), -+ GATE_INFRA2(CK_INFRA_66M_UART1_PCK, "infra_hf_66m_uart1_pck", -+ CK_INFRA_66M_MCK, 4), -+ GATE_INFRA2(CK_INFRA_66M_UART2_PCK, "infra_hf_66m_uart2_pck", -+ CK_INFRA_66M_MCK, 5), -+ GATE_INFRA2(CK_INFRA_52M_UART0_CK, "infra_f_52m_uart0", -+ CK_INFRA_MUX_UART0_SEL, 3), -+ GATE_INFRA2(CK_INFRA_52M_UART1_CK, "infra_f_52m_uart1", -+ CK_INFRA_MUX_UART1_SEL, 4), -+ GATE_INFRA2(CK_INFRA_52M_UART2_CK, "infra_f_52m_uart2", -+ CK_INFRA_MUX_UART2_SEL, 5), -+ GATE_INFRA2(CK_INFRA_NFI, "infra_f_fnfi", CK_INFRA_NFI_O, 9), -+ GATE_INFRA2(CK_INFRA_SPINFI, "infra_f_fspinfi", CK_INFRA_SPINFI_O, 10), -+ GATE_INFRA2(CK_INFRA_66M_NFI_HCK, "infra_hf_66m_nfi_hck", -+ CK_INFRA_66M_MCK, 11), -+ GATE_INFRA2(CK_INFRA_104M_SPI0, "infra_hf_104m_spi0", -+ CK_INFRA_MUX_SPI0_SEL, 12), -+ GATE_INFRA2(CK_INFRA_104M_SPI1, "infra_hf_104m_spi1", -+ CK_INFRA_MUX_SPI1_SEL, 13), -+ GATE_INFRA2(CK_INFRA_104M_SPI2_BCK, "infra_hf_104m_spi2_bck", -+ CK_INFRA_MUX_SPI2_SEL, 14), -+ GATE_INFRA2(CK_INFRA_66M_SPI0_HCK, "infra_hf_66m_spi0_hck", -+ CK_INFRA_66M_MCK, 15), -+ GATE_INFRA2(CK_INFRA_66M_SPI1_HCK, "infra_hf_66m_spi1_hck", -+ CK_INFRA_66M_MCK, 16), -+ GATE_INFRA2(CK_INFRA_66M_SPI2_HCK, "infra_hf_66m_spi2_hck", -+ CK_INFRA_66M_MCK, 17), -+ GATE_INFRA2(CK_INFRA_66M_FLASHIF_AXI, "infra_hf_66m_flashif_axi", -+ CK_INFRA_66M_MCK, 18), -+ GATE_INFRA2(CK_INFRA_RTC, "infra_f_frtc", CK_INFRA_LB_MUX_FRTC, 19), -+ GATE_INFRA2(CK_INFRA_26M_ADC_BCK, "infra_f_26m_adc_bck", -+ CK_INFRA_F26M_O1, 20), -+ GATE_INFRA2(CK_INFRA_RC_ADC, "infra_f_frc_adc", CK_INFRA_26M_ADC_BCK, -+ 21), -+ GATE_INFRA2(CK_INFRA_MSDC400, "infra_f_fmsdc400", CK_INFRA_FMSDC400_O, -+ 22), -+ GATE_INFRA2(CK_INFRA_MSDC2_HCK, "infra_f_fmsdc2_hck", -+ CK_INFRA_FMSDC2_HCK_OCC, 23), -+ GATE_INFRA2(CK_INFRA_133M_MSDC_0_HCK, "infra_hf_133m_msdc_0_hck", -+ CK_INFRA_PERI_133M, 24), -+ GATE_INFRA2(CK_INFRA_66M_MSDC_0_HCK, "infra_66m_msdc_0_hck", -+ CK_INFRA_66M_PHCK, 25), -+ GATE_INFRA2(CK_INFRA_133M_CPUM_BCK, "infra_hf_133m_cpum_bck", -+ CK_INFRA_133M_MCK, 26), -+ GATE_INFRA2(CK_INFRA_BIST2FPC, "infra_hf_fbist2fpc", CK_INFRA_NFI_O, -+ 27), -+ GATE_INFRA2(CK_INFRA_I2C_X16W_MCK_CK_P1, "infra_hf_i2c_x16w_mck_ck_p1", -+ CK_INFRA_133M_MCK, 29), -+ GATE_INFRA2(CK_INFRA_I2C_X16W_PCK_CK_P1, "infra_hf_i2c_x16w_pck_ck_p1", -+ CK_INFRA_66M_PHCK, 31), -+ GATE_INFRA3(CK_INFRA_133M_USB_HCK, "infra_133m_usb_hck", -+ CK_INFRA_133M_PHCK, 0), -+ GATE_INFRA3(CK_INFRA_133M_USB_HCK_CK_P1, "infra_133m_usb_hck_ck_p1", -+ CK_INFRA_133M_PHCK, 1), -+ GATE_INFRA3(CK_INFRA_66M_USB_HCK, "infra_66m_usb_hck", -+ CK_INFRA_66M_PHCK, 2), -+ GATE_INFRA3(CK_INFRA_66M_USB_HCK_CK_P1, "infra_66m_usb_hck_ck_p1", -+ CK_INFRA_66M_PHCK, 3), -+ GATE_INFRA3(CK_INFRA_USB_SYS, "infra_usb_sys", CK_INFRA_USB_SYS_O, 4), -+ GATE_INFRA3(CK_INFRA_USB_SYS_CK_P1, "infra_usb_sys_ck_p1", -+ CK_INFRA_USB_SYS_O_P1, 5), -+ GATE_INFRA3(CK_INFRA_USB_REF, "infra_usb_ref", CK_INFRA_USB_O, 6), -+ GATE_INFRA3(CK_INFRA_USB_CK_P1, "infra_usb_ck_p1", CK_INFRA_USB_O_P1, -+ 7), -+ GATE_INFRA3(CK_INFRA_USB_FRMCNT, "infra_usb_frmcnt", -+ CK_INFRA_USB_FRMCNT_O, 8), -+ GATE_INFRA3(CK_INFRA_USB_FRMCNT_CK_P1, "infra_usb_frmcnt_ck_p1", -+ CK_INFRA_USB_FRMCNT_O_P1, 9), -+ GATE_INFRA3(CK_INFRA_USB_PIPE, "infra_usb_pipe", CK_INFRA_USB_PIPE_O, -+ 10), -+ GATE_INFRA3(CK_INFRA_USB_PIPE_CK_P1, "infra_usb_pipe_ck_p1", -+ CK_INFRA_USB_PIPE_O_P1, 11), -+ GATE_INFRA3(CK_INFRA_USB_UTMI, "infra_usb_utmi", CK_INFRA_USB_UTMI_O, -+ 12), -+ GATE_INFRA3(CK_INFRA_USB_UTMI_CK_P1, "infra_usb_utmi_ck_p1", -+ CK_INFRA_USB_UTMI_O_P1, 13), -+ GATE_INFRA3(CK_INFRA_USB_XHCI, "infra_usb_xhci", CK_INFRA_USB_XHCI_O, -+ 14), -+ GATE_INFRA3(CK_INFRA_USB_XHCI_CK_P1, "infra_usb_xhci_ck_p1", -+ CK_INFRA_USB_XHCI_O_P1, 15), -+ GATE_INFRA3(CK_INFRA_PCIE_GFMUX_TL_P0, "infra_pcie_gfmux_tl_ck_p0", -+ CK_INFRA_PCIE_GFMUX_TL_O_P0_SEL, 20), -+ GATE_INFRA3(CK_INFRA_PCIE_GFMUX_TL_P1, "infra_pcie_gfmux_tl_ck_p1", -+ CK_INFRA_PCIE_GFMUX_TL_O_P1_SEL, 21), -+ GATE_INFRA3(CK_INFRA_PCIE_GFMUX_TL_P2, "infra_pcie_gfmux_tl_ck_p2", -+ CK_INFRA_PCIE_GFMUX_TL_O_P2_SEL, 22), -+ GATE_INFRA3(CK_INFRA_PCIE_GFMUX_TL_P3, "infra_pcie_gfmux_tl_ck_p3", -+ CK_INFRA_PCIE_GFMUX_TL_O_P3_SEL, 23), -+ GATE_INFRA3(CK_INFRA_PCIE_PIPE_P0, "infra_pcie_pipe_ck_p0", -+ CK_INFRA_PCIE_PIPE_OCC_P0, 24), -+ GATE_INFRA3(CK_INFRA_PCIE_PIPE_P1, "infra_pcie_pipe_ck_p1", -+ CK_INFRA_PCIE_PIPE_OCC_P1, 25), -+ GATE_INFRA3(CK_INFRA_PCIE_PIPE_P2, "infra_pcie_pipe_ck_p2", -+ CK_INFRA_PCIE_PIPE_OCC_P2, 26), -+ GATE_INFRA3(CK_INFRA_PCIE_PIPE_P3, "infra_pcie_pipe_ck_p3", -+ CK_INFRA_PCIE_PIPE_OCC_P3, 27), -+ GATE_INFRA3(CK_INFRA_133M_PCIE_CK_P0, "infra_133m_pcie_ck_p0", -+ CK_INFRA_133M_PHCK, 28), -+ GATE_INFRA3(CK_INFRA_133M_PCIE_CK_P1, "infra_133m_pcie_ck_p1", -+ CK_INFRA_133M_PHCK, 29), -+ GATE_INFRA3(CK_INFRA_133M_PCIE_CK_P2, "infra_133m_pcie_ck_p2", -+ CK_INFRA_133M_PHCK, 30), -+ GATE_INFRA3(CK_INFRA_133M_PCIE_CK_P3, "infra_133m_pcie_ck_p3", -+ CK_INFRA_133M_PHCK, 31), -+ GATE_INFRA0(CK_INFRA_PCIE_PERI_26M_CK_P0, -+ "infra_pcie_peri_ck_26m_ck_p0", CK_INFRA_F26M_O0, 7), -+ GATE_INFRA0(CK_INFRA_PCIE_PERI_26M_CK_P1, -+ "infra_pcie_peri_ck_26m_ck_p1", CK_INFRA_F26M_O0, 8), -+ GATE_INFRA0(CK_INFRA_PCIE_PERI_26M_CK_P2, -+ "infra_pcie_peri_ck_26m_ck_p2", CK_INFRA_F26M_O0, 9), -+ GATE_INFRA0(CK_INFRA_PCIE_PERI_26M_CK_P3, -+ "infra_pcie_peri_ck_26m_ck_p3", CK_INFRA_F26M_O0, 10), -+}; -+ -+static const struct mtk_clk_tree mt7988_fixed_pll_clk_tree = { -+ .fdivs_offs = ARRAY_SIZE(apmixedsys_mtk_plls), -+ .fclks = apmixedsys_mtk_plls, -+ .xtal_rate = 40 * MHZ, -+}; -+ -+static const struct mtk_clk_tree mt7988_topckgen_clk_tree = { -+ .fdivs_offs = CK_TOP_CB_CKSQ_40M, -+ .muxes_offs = CK_TOP_NETSYS_SEL, -+ .fdivs = topckgen_mtk_fixed_factors, -+ .muxes = topckgen_mtk_muxes, -+ .flags = CLK_BYPASS_XTAL, -+ .xtal_rate = 40 * MHZ, -+}; -+ -+static const struct mtk_clk_tree mt7988_infracfg_clk_tree = { -+ .fdivs_offs = CK_INFRA_CK_F26M, -+ .muxes_offs = CK_INFRA_MUX_UART0_SEL, -+ .fdivs = infracfg_mtk_fixed_factor, -+ .muxes = infracfg_mtk_mux, -+ .flags = CLK_BYPASS_XTAL, -+ .xtal_rate = 40 * MHZ, -+}; -+ -+static const struct udevice_id mt7988_fixed_pll_compat[] = { -+ { .compatible = "mediatek,mt7988-fixed-plls" }, -+ {} -+}; -+ -+static const struct udevice_id mt7988_topckgen_compat[] = { -+ { .compatible = "mediatek,mt7988-topckgen" }, -+ {} -+}; -+ -+static int mt7988_fixed_pll_probe(struct udevice *dev) -+{ -+ return mtk_common_clk_init(dev, &mt7988_fixed_pll_clk_tree); -+} -+ -+static int mt7988_topckgen_probe(struct udevice *dev) -+{ -+ struct mtk_clk_priv *priv = dev_get_priv(dev); -+ -+ priv->base = dev_read_addr_ptr(dev); -+ if (!priv->base) -+ return -ENOENT; -+ -+ writel(MT7988_CLK_PDN_EN_WRITE, priv->base + MT7988_CLK_PDN); -+ return mtk_common_clk_init(dev, &mt7988_topckgen_clk_tree); -+} -+ -+U_BOOT_DRIVER(mtk_clk_apmixedsys) = { -+ .name = "mt7988-clock-fixed-pll", -+ .id = UCLASS_CLK, -+ .of_match = mt7988_fixed_pll_compat, -+ .probe = mt7988_fixed_pll_probe, -+ .priv_auto = sizeof(struct mtk_clk_priv), -+ .ops = &mtk_clk_topckgen_ops, -+ .flags = DM_FLAG_PRE_RELOC, -+}; -+ -+U_BOOT_DRIVER(mtk_clk_topckgen) = { -+ .name = "mt7988-clock-topckgen", -+ .id = UCLASS_CLK, -+ .of_match = mt7988_topckgen_compat, -+ .probe = mt7988_topckgen_probe, -+ .priv_auto = sizeof(struct mtk_clk_priv), -+ .ops = &mtk_clk_topckgen_ops, -+ .flags = DM_FLAG_PRE_RELOC, -+}; -+ -+static const struct udevice_id mt7988_infracfg_compat[] = { -+ { .compatible = "mediatek,mt7988-infracfg" }, -+ {} -+}; -+ -+static const struct udevice_id mt7988_infracfg_ao_cgs_compat[] = { -+ { .compatible = "mediatek,mt7988-infracfg_ao_cgs" }, -+ {} -+}; -+ -+static int mt7988_infracfg_probe(struct udevice *dev) -+{ -+ return mtk_common_clk_init(dev, &mt7988_infracfg_clk_tree); -+} -+ -+static int mt7988_infracfg_ao_cgs_probe(struct udevice *dev) -+{ -+ return mtk_common_clk_gate_init(dev, &mt7988_infracfg_clk_tree, -+ infracfg_mtk_gates); -+} -+ -+U_BOOT_DRIVER(mtk_clk_infracfg) = { -+ .name = "mt7988-clock-infracfg", -+ .id = UCLASS_CLK, -+ .of_match = mt7988_infracfg_compat, -+ .probe = mt7988_infracfg_probe, -+ .priv_auto = sizeof(struct mtk_clk_priv), -+ .ops = &mtk_clk_infrasys_ops, -+ .flags = DM_FLAG_PRE_RELOC, -+}; -+ -+U_BOOT_DRIVER(mtk_clk_infracfg_ao_cgs) = { -+ .name = "mt7988-clock-infracfg_ao_cgs", -+ .id = UCLASS_CLK, -+ .of_match = mt7988_infracfg_ao_cgs_compat, -+ .probe = mt7988_infracfg_ao_cgs_probe, -+ .priv_auto = sizeof(struct mtk_cg_priv), -+ .ops = &mtk_clk_gate_ops, -+ .flags = DM_FLAG_PRE_RELOC, -+}; -+ -+/* ETHDMA */ -+ -+static const struct mtk_gate_regs ethdma_cg_regs = { -+ .set_ofs = 0x30, -+ .clr_ofs = 0x30, -+ .sta_ofs = 0x30, -+}; -+ -+#define GATE_ETHDMA(_id, _name, _parent, _shift) \ -+ { \ -+ .id = _id, .parent = _parent, .regs = ðdma_cg_regs, \ -+ .shift = _shift, \ -+ .flags = CLK_GATE_NO_SETCLR_INV | CLK_PARENT_TOPCKGEN, \ -+ } -+ -+static const struct mtk_gate ethdma_mtk_gate[] = { -+ GATE_ETHDMA(CK_ETHDMA_FE_EN, "ethdma_fe_en", CK_TOP_NETSYS_2X, 6), -+}; -+ -+static int mt7988_ethdma_probe(struct udevice *dev) -+{ -+ return mtk_common_clk_gate_init(dev, &mt7988_topckgen_clk_tree, -+ ethdma_mtk_gate); -+} -+ -+static int mt7988_ethdma_bind(struct udevice *dev) -+{ -+ int ret = 0; -+ -+ if (CONFIG_IS_ENABLED(RESET_MEDIATEK)) { -+ ret = mediatek_reset_bind(dev, MT7988_ETHDMA_RST_CTRL_OFS, 1); -+ if (ret) -+ debug("Warning: failed to bind reset controller\n"); -+ } -+ -+ return ret; -+} -+ -+static const struct udevice_id mt7988_ethdma_compat[] = { -+ { -+ .compatible = "mediatek,mt7988-ethdma", -+ }, -+ {} -+}; -+ -+U_BOOT_DRIVER(mtk_clk_ethdma) = { -+ .name = "mt7988-clock-ethdma", -+ .id = UCLASS_CLK, -+ .of_match = mt7988_ethdma_compat, -+ .probe = mt7988_ethdma_probe, -+ .bind = mt7988_ethdma_bind, -+ .priv_auto = sizeof(struct mtk_cg_priv), -+ .ops = &mtk_clk_gate_ops, -+}; -+ -+/* SGMIISYS_0 */ -+ -+static const struct mtk_gate_regs sgmii0_cg_regs = { -+ .set_ofs = 0xE4, -+ .clr_ofs = 0xE4, -+ .sta_ofs = 0xE4, -+}; -+ -+#define GATE_SGMII0(_id, _name, _parent, _shift) \ -+ { \ -+ .id = _id, .parent = _parent, .regs = &sgmii0_cg_regs, \ -+ .shift = _shift, \ -+ .flags = CLK_GATE_NO_SETCLR_INV | CLK_PARENT_TOPCKGEN, \ -+ } -+ -+static const struct mtk_gate sgmiisys_0_mtk_gate[] = { -+ /* connect to fake clock, so use CK_TOP_CB_CKSQ_40M as the clock parent */ -+ GATE_SGMII0(CK_SGM0_TX_EN, "sgm0_tx_en", CK_TOP_CB_CKSQ_40M, 2), -+ /* connect to fake clock, so use CK_TOP_CB_CKSQ_40M as the clock parent */ -+ GATE_SGMII0(CK_SGM0_RX_EN, "sgm0_rx_en", CK_TOP_CB_CKSQ_40M, 3), -+}; -+ -+static int mt7988_sgmiisys_0_probe(struct udevice *dev) -+{ -+ return mtk_common_clk_gate_init(dev, &mt7988_topckgen_clk_tree, -+ sgmiisys_0_mtk_gate); -+} -+ -+static const struct udevice_id mt7988_sgmiisys_0_compat[] = { -+ { -+ .compatible = "mediatek,mt7988-sgmiisys_0", -+ }, -+ {} -+}; -+ -+U_BOOT_DRIVER(mtk_clk_sgmiisys_0) = { -+ .name = "mt7988-clock-sgmiisys_0", -+ .id = UCLASS_CLK, -+ .of_match = mt7988_sgmiisys_0_compat, -+ .probe = mt7988_sgmiisys_0_probe, -+ .priv_auto = sizeof(struct mtk_cg_priv), -+ .ops = &mtk_clk_gate_ops, -+}; -+ -+/* SGMIISYS_1 */ -+ -+static const struct mtk_gate_regs sgmii1_cg_regs = { -+ .set_ofs = 0xE4, -+ .clr_ofs = 0xE4, -+ .sta_ofs = 0xE4, -+}; -+ -+#define GATE_SGMII1(_id, _name, _parent, _shift) \ -+ { \ -+ .id = _id, .parent = _parent, .regs = &sgmii1_cg_regs, \ -+ .shift = _shift, \ -+ .flags = CLK_GATE_NO_SETCLR_INV | CLK_PARENT_TOPCKGEN, \ -+ } -+ -+static const struct mtk_gate sgmiisys_1_mtk_gate[] = { -+ /* connect to fake clock, so use CK_TOP_CB_CKSQ_40M as the clock parent */ -+ GATE_SGMII1(CK_SGM1_TX_EN, "sgm1_tx_en", CK_TOP_CB_CKSQ_40M, 2), -+ /* connect to fake clock, so use CK_TOP_CB_CKSQ_40M as the clock parent */ -+ GATE_SGMII1(CK_SGM1_RX_EN, "sgm1_rx_en", CK_TOP_CB_CKSQ_40M, 3), -+}; -+ -+static int mt7988_sgmiisys_1_probe(struct udevice *dev) -+{ -+ return mtk_common_clk_gate_init(dev, &mt7988_topckgen_clk_tree, -+ sgmiisys_1_mtk_gate); -+} -+ -+static const struct udevice_id mt7988_sgmiisys_1_compat[] = { -+ { -+ .compatible = "mediatek,mt7988-sgmiisys_1", -+ }, -+ {} -+}; -+ -+U_BOOT_DRIVER(mtk_clk_sgmiisys_1) = { -+ .name = "mt7988-clock-sgmiisys_1", -+ .id = UCLASS_CLK, -+ .of_match = mt7988_sgmiisys_1_compat, -+ .probe = mt7988_sgmiisys_1_probe, -+ .priv_auto = sizeof(struct mtk_cg_priv), -+ .ops = &mtk_clk_gate_ops, -+}; -+ -+/* ETHWARP */ -+ -+static const struct mtk_gate_regs ethwarp_cg_regs = { -+ .set_ofs = 0x14, -+ .clr_ofs = 0x14, -+ .sta_ofs = 0x14, -+}; -+ -+#define GATE_ETHWARP(_id, _name, _parent, _shift) \ -+ { \ -+ .id = _id, .parent = _parent, .regs = ðwarp_cg_regs, \ -+ .shift = _shift, \ -+ .flags = CLK_GATE_NO_SETCLR_INV | CLK_PARENT_TOPCKGEN, \ -+ } -+ -+static const struct mtk_gate ethwarp_mtk_gate[] = { -+ GATE_ETHWARP(CK_ETHWARP_WOCPU2_EN, "ethwarp_wocpu2_en", -+ CK_TOP_NETSYS_WED_MCU, 13), -+ GATE_ETHWARP(CK_ETHWARP_WOCPU1_EN, "ethwarp_wocpu1_en", -+ CK_TOP_NETSYS_WED_MCU, 14), -+ GATE_ETHWARP(CK_ETHWARP_WOCPU0_EN, "ethwarp_wocpu0_en", -+ CK_TOP_NETSYS_WED_MCU, 15), -+}; -+ -+static int mt7988_ethwarp_probe(struct udevice *dev) -+{ -+ return mtk_common_clk_gate_init(dev, &mt7988_topckgen_clk_tree, -+ ethwarp_mtk_gate); -+} -+ -+static int mt7988_ethwarp_bind(struct udevice *dev) -+{ -+ int ret = 0; -+ -+ if (CONFIG_IS_ENABLED(RESET_MEDIATEK)) { -+ ret = mediatek_reset_bind(dev, MT7988_ETHWARP_RST_CTRL_OFS, 2); -+ if (ret) -+ debug("Warning: failed to bind reset controller\n"); -+ } -+ -+ return ret; -+} -+ -+static const struct udevice_id mt7988_ethwarp_compat[] = { -+ { -+ .compatible = "mediatek,mt7988-ethwarp", -+ }, -+ {} -+}; -+ -+U_BOOT_DRIVER(mtk_clk_ethwarp) = { -+ .name = "mt7988-clock-ethwarp", -+ .id = UCLASS_CLK, -+ .of_match = mt7988_ethwarp_compat, -+ .probe = mt7988_ethwarp_probe, -+ .bind = mt7988_ethwarp_bind, -+ .priv_auto = sizeof(struct mtk_cg_priv), -+ .ops = &mtk_clk_gate_ops, -+}; ---- /dev/null -+++ b/include/dt-bindings/clock/mt7988-clk.h -@@ -0,0 +1,349 @@ -+/* SPDX-License-Identifier: GPL-2.0 */ -+/* -+ * Copyright (C) 2022 MediaTek Inc. All rights reserved. -+ * -+ * Author: Sam Shih -+ */ -+ -+#ifndef _DT_BINDINGS_CLK_MT7988_H -+#define _DT_BINDINGS_CLK_MT7988_H -+ -+/* INFRACFG */ -+/* mtk_fixed_factor */ -+#define CK_INFRA_CK_F26M 0 -+#define CK_INFRA_PWM_O 1 -+#define CK_INFRA_PCIE_OCC_P0 2 -+#define CK_INFRA_PCIE_OCC_P1 3 -+#define CK_INFRA_PCIE_OCC_P2 4 -+#define CK_INFRA_PCIE_OCC_P3 5 -+#define CK_INFRA_133M_HCK 6 -+#define CK_INFRA_133M_PHCK 7 -+#define CK_INFRA_66M_PHCK 8 -+#define CK_INFRA_FAUD_L_O 9 -+#define CK_INFRA_FAUD_AUD_O 10 -+#define CK_INFRA_FAUD_EG2_O 11 -+#define CK_INFRA_I2C_O 12 -+#define CK_INFRA_UART_O0 13 -+#define CK_INFRA_UART_O1 14 -+#define CK_INFRA_UART_O2 15 -+#define CK_INFRA_NFI_O 16 -+#define CK_INFRA_SPINFI_O 17 -+#define CK_INFRA_SPI0_O 18 -+#define CK_INFRA_SPI1_O 19 -+#define CK_INFRA_LB_MUX_FRTC 20 -+#define CK_INFRA_FRTC 21 -+#define CK_INFRA_FMSDC400_O 22 -+#define CK_INFRA_FMSDC2_HCK_OCC 23 -+#define CK_INFRA_PERI_133M 24 -+#define CK_INFRA_USB_O 25 -+#define CK_INFRA_USB_O_P1 26 -+#define CK_INFRA_USB_FRMCNT_O 27 -+#define CK_INFRA_USB_FRMCNT_O_P1 28 -+#define CK_INFRA_USB_XHCI_O 29 -+#define CK_INFRA_USB_XHCI_O_P1 30 -+#define CK_INFRA_USB_PIPE_O 31 -+#define CK_INFRA_USB_PIPE_O_P1 32 -+#define CK_INFRA_USB_UTMI_O 33 -+#define CK_INFRA_USB_UTMI_O_P1 34 -+#define CK_INFRA_PCIE_PIPE_OCC_P0 35 -+#define CK_INFRA_PCIE_PIPE_OCC_P1 36 -+#define CK_INFRA_PCIE_PIPE_OCC_P2 37 -+#define CK_INFRA_PCIE_PIPE_OCC_P3 38 -+#define CK_INFRA_F26M_O0 39 -+#define CK_INFRA_F26M_O1 40 -+#define CK_INFRA_133M_MCK 41 -+#define CK_INFRA_66M_MCK 42 -+#define CK_INFRA_PERI_66M_O 43 -+#define CK_INFRA_USB_SYS_O 44 -+#define CK_INFRA_USB_SYS_O_P1 45 -+ -+/* INFRACFG_AO */ -+#define GATE_OFFSET 65 -+/* mtk_mux */ -+#define CK_INFRA_MUX_UART0_SEL 46 /* Linux CLK ID (0) */ -+#define CK_INFRA_MUX_UART1_SEL 47 /* Linux CLK ID (1) */ -+#define CK_INFRA_MUX_UART2_SEL 48 /* Linux CLK ID (2) */ -+#define CK_INFRA_MUX_SPI0_SEL 49 /* Linux CLK ID (3) */ -+#define CK_INFRA_MUX_SPI1_SEL 50 /* Linux CLK ID (4) */ -+#define CK_INFRA_MUX_SPI2_SEL 51 /* Linux CLK ID (5) */ -+#define CK_INFRA_PWM_SEL 52 /* Linux CLK ID (6) */ -+#define CK_INFRA_PWM_CK1_SEL 53 /* Linux CLK ID (7) */ -+#define CK_INFRA_PWM_CK2_SEL 54 /* Linux CLK ID (8) */ -+#define CK_INFRA_PWM_CK3_SEL 55 /* Linux CLK ID (9) */ -+#define CK_INFRA_PWM_CK4_SEL 56 /* Linux CLK ID (10) */ -+#define CK_INFRA_PWM_CK5_SEL 57 /* Linux CLK ID (11) */ -+#define CK_INFRA_PWM_CK6_SEL 58 /* Linux CLK ID (12) */ -+#define CK_INFRA_PWM_CK7_SEL 59 /* Linux CLK ID (13) */ -+#define CK_INFRA_PWM_CK8_SEL 60 /* Linux CLK ID (14) */ -+#define CK_INFRA_PCIE_GFMUX_TL_O_P0_SEL 61 /* Linux CLK ID (15) */ -+#define CK_INFRA_PCIE_GFMUX_TL_O_P1_SEL 62 /* Linux CLK ID (16) */ -+#define CK_INFRA_PCIE_GFMUX_TL_O_P2_SEL 63 /* Linux CLK ID (17) */ -+#define CK_INFRA_PCIE_GFMUX_TL_O_P3_SEL 64 /* Linux CLK ID (18) */ -+/* mtk_gate */ -+#define CK_INFRA_66M_GPT_BCK (65 - GATE_OFFSET) /* Linux CLK ID (19) */ -+#define CK_INFRA_66M_PWM_HCK (66 - GATE_OFFSET) /* Linux CLK ID (20) */ -+#define CK_INFRA_66M_PWM_BCK (67 - GATE_OFFSET) /* Linux CLK ID (21) */ -+#define CK_INFRA_66M_PWM_CK1 (68 - GATE_OFFSET) /* Linux CLK ID (22) */ -+#define CK_INFRA_66M_PWM_CK2 (69 - GATE_OFFSET) /* Linux CLK ID (23) */ -+#define CK_INFRA_66M_PWM_CK3 (70 - GATE_OFFSET) /* Linux CLK ID (24) */ -+#define CK_INFRA_66M_PWM_CK4 (71 - GATE_OFFSET) /* Linux CLK ID (25) */ -+#define CK_INFRA_66M_PWM_CK5 (72 - GATE_OFFSET) /* Linux CLK ID (26) */ -+#define CK_INFRA_66M_PWM_CK6 (73 - GATE_OFFSET) /* Linux CLK ID (27) */ -+#define CK_INFRA_66M_PWM_CK7 (74 - GATE_OFFSET) /* Linux CLK ID (28) */ -+#define CK_INFRA_66M_PWM_CK8 (75 - GATE_OFFSET) /* Linux CLK ID (29) */ -+#define CK_INFRA_133M_CQDMA_BCK (76 - GATE_OFFSET) /* Linux CLK ID (30) */ -+#define CK_INFRA_66M_AUD_SLV_BCK (77 - GATE_OFFSET) /* Linux CLK ID (31) */ -+#define CK_INFRA_AUD_26M (78 - GATE_OFFSET) /* Linux CLK ID (32) */ -+#define CK_INFRA_AUD_L (79 - GATE_OFFSET) /* Linux CLK ID (33) */ -+#define CK_INFRA_AUD_AUD (80 - GATE_OFFSET) /* Linux CLK ID (34) */ -+#define CK_INFRA_AUD_EG2 (81 - GATE_OFFSET) /* Linux CLK ID (35) */ -+#define CK_INFRA_DRAMC_F26M (82 - GATE_OFFSET) /* Linux CLK ID (36) */ -+#define CK_INFRA_133M_DBG_ACKM (83 - GATE_OFFSET) /* Linux CLK ID (37) */ -+#define CK_INFRA_66M_AP_DMA_BCK (84 - GATE_OFFSET) /* Linux CLK ID (38) */ -+#define CK_INFRA_66M_SEJ_BCK (85 - GATE_OFFSET) /* Linux CLK ID (39) */ -+#define CK_INFRA_PRE_CK_SEJ_F13M (86 - GATE_OFFSET) /* Linux CLK ID (40) */ -+#define CK_INFRA_66M_TRNG (87 - GATE_OFFSET) /* Linux CLK ID (41) */ -+#define CK_INFRA_26M_THERM_SYSTEM (88 - GATE_OFFSET) /* Linux CLK ID (42) */ -+#define CK_INFRA_I2C_BCK (89 - GATE_OFFSET) /* Linux CLK ID (43) */ -+#define CK_INFRA_66M_UART0_PCK (90 - GATE_OFFSET) /* Linux CLK ID (44) */ -+#define CK_INFRA_66M_UART1_PCK (91 - GATE_OFFSET) /* Linux CLK ID (45) */ -+#define CK_INFRA_66M_UART2_PCK (92 - GATE_OFFSET) /* Linux CLK ID (46) */ -+#define CK_INFRA_52M_UART0_CK (93 - GATE_OFFSET) /* Linux CLK ID (47) */ -+#define CK_INFRA_52M_UART1_CK (94 - GATE_OFFSET) /* Linux CLK ID (48) */ -+#define CK_INFRA_52M_UART2_CK (95 - GATE_OFFSET) /* Linux CLK ID (49) */ -+#define CK_INFRA_NFI (96 - GATE_OFFSET) /* Linux CLK ID (50) */ -+#define CK_INFRA_SPINFI (97 - GATE_OFFSET) /* Linux CLK ID (51) */ -+#define CK_INFRA_66M_NFI_HCK (98 - GATE_OFFSET) /* Linux CLK ID (52) */ -+#define CK_INFRA_104M_SPI0 (99 - GATE_OFFSET) /* Linux CLK ID (53) */ -+#define CK_INFRA_104M_SPI1 (100 - GATE_OFFSET) /* Linux CLK ID (54) */ -+#define CK_INFRA_104M_SPI2_BCK (101 - GATE_OFFSET) /* Linux CLK ID (55) */ -+#define CK_INFRA_66M_SPI0_HCK (102 - GATE_OFFSET) /* Linux CLK ID (56) */ -+#define CK_INFRA_66M_SPI1_HCK (103 - GATE_OFFSET) /* Linux CLK ID (57) */ -+#define CK_INFRA_66M_SPI2_HCK (104 - GATE_OFFSET) /* Linux CLK ID (58) */ -+#define CK_INFRA_66M_FLASHIF_AXI (105 - GATE_OFFSET) /* Linux CLK ID (59) */ -+#define CK_INFRA_RTC (106 - GATE_OFFSET) /* Linux CLK ID (60) */ -+#define CK_INFRA_26M_ADC_BCK (107 - GATE_OFFSET) /* Linux CLK ID (61) */ -+#define CK_INFRA_RC_ADC (108 - GATE_OFFSET) /* Linux CLK ID (62) */ -+#define CK_INFRA_MSDC400 (109 - GATE_OFFSET) /* Linux CLK ID (63) */ -+#define CK_INFRA_MSDC2_HCK (110 - GATE_OFFSET) /* Linux CLK ID (64) */ -+#define CK_INFRA_133M_MSDC_0_HCK (111 - GATE_OFFSET) /* Linux CLK ID (65) */ -+#define CK_INFRA_66M_MSDC_0_HCK (112 - GATE_OFFSET) /* Linux CLK ID (66) */ -+#define CK_INFRA_133M_CPUM_BCK (113 - GATE_OFFSET) /* Linux CLK ID (67) */ -+#define CK_INFRA_BIST2FPC (114 - GATE_OFFSET) /* Linux CLK ID (68) */ -+#define CK_INFRA_I2C_X16W_MCK_CK_P1 (115 - GATE_OFFSET) /* Linux CLK ID (69) */ -+#define CK_INFRA_I2C_X16W_PCK_CK_P1 (116 - GATE_OFFSET) /* Linux CLK ID (70) */ -+#define CK_INFRA_133M_USB_HCK (117 - GATE_OFFSET) /* Linux CLK ID (71) */ -+#define CK_INFRA_133M_USB_HCK_CK_P1 (118 - GATE_OFFSET) /* Linux CLK ID (72) */ -+#define CK_INFRA_66M_USB_HCK (119 - GATE_OFFSET) /* Linux CLK ID (73) */ -+#define CK_INFRA_66M_USB_HCK_CK_P1 (120 - GATE_OFFSET) /* Linux CLK ID (74) */ -+#define CK_INFRA_USB_SYS (121 - GATE_OFFSET) /* Linux CLK ID (75) */ -+#define CK_INFRA_USB_SYS_CK_P1 (122 - GATE_OFFSET) /* Linux CLK ID (76) */ -+#define CK_INFRA_USB_REF (123 - GATE_OFFSET) /* Linux CLK ID (77) */ -+#define CK_INFRA_USB_CK_P1 (124 - GATE_OFFSET) /* Linux CLK ID (78) */ -+#define CK_INFRA_USB_FRMCNT (125 - GATE_OFFSET) /* Linux CLK ID (79) */ -+#define CK_INFRA_USB_FRMCNT_CK_P1 (126 - GATE_OFFSET) /* Linux CLK ID (80) */ -+#define CK_INFRA_USB_PIPE (127 - GATE_OFFSET) /* Linux CLK ID (81) */ -+#define CK_INFRA_USB_PIPE_CK_P1 (128 - GATE_OFFSET) /* Linux CLK ID (82) */ -+#define CK_INFRA_USB_UTMI (129 - GATE_OFFSET) /* Linux CLK ID (83) */ -+#define CK_INFRA_USB_UTMI_CK_P1 (130 - GATE_OFFSET) /* Linux CLK ID (84) */ -+#define CK_INFRA_USB_XHCI (131 - GATE_OFFSET) /* Linux CLK ID (85) */ -+#define CK_INFRA_USB_XHCI_CK_P1 (132 - GATE_OFFSET) /* Linux CLK ID (86) */ -+#define CK_INFRA_PCIE_GFMUX_TL_P0 (133 - GATE_OFFSET) /* Linux CLK ID (87) */ -+#define CK_INFRA_PCIE_GFMUX_TL_P1 (134 - GATE_OFFSET) /* Linux CLK ID (88) */ -+#define CK_INFRA_PCIE_GFMUX_TL_P2 (135 - GATE_OFFSET) /* Linux CLK ID (89) */ -+#define CK_INFRA_PCIE_GFMUX_TL_P3 (136 - GATE_OFFSET) /* Linux CLK ID (90) */ -+#define CK_INFRA_PCIE_PIPE_P0 (137 - GATE_OFFSET) /* Linux CLK ID (91) */ -+#define CK_INFRA_PCIE_PIPE_P1 (138 - GATE_OFFSET) /* Linux CLK ID (92) */ -+#define CK_INFRA_PCIE_PIPE_P2 (139 - GATE_OFFSET) /* Linux CLK ID (93) */ -+#define CK_INFRA_PCIE_PIPE_P3 (140 - GATE_OFFSET) /* Linux CLK ID (94) */ -+#define CK_INFRA_133M_PCIE_CK_P0 (141 - GATE_OFFSET) /* Linux CLK ID (95) */ -+#define CK_INFRA_133M_PCIE_CK_P1 (142 - GATE_OFFSET) /* Linux CLK ID (96) */ -+#define CK_INFRA_133M_PCIE_CK_P2 (143 - GATE_OFFSET) /* Linux CLK ID (97) */ -+#define CK_INFRA_133M_PCIE_CK_P3 (144 - GATE_OFFSET) /* Linux CLK ID (98) */ -+#define CK_INFRA_PCIE_PERI_26M_CK_P0 (145 - GATE_OFFSET) /* Linux CLK ID (99) */ -+#define CK_INFRA_PCIE_PERI_26M_CK_P1 \ -+ (146 - GATE_OFFSET) /* Linux CLK ID (100) */ -+#define CK_INFRA_PCIE_PERI_26M_CK_P2 \ -+ (147 - GATE_OFFSET) /* Linux CLK ID (101) */ -+#define CK_INFRA_PCIE_PERI_26M_CK_P3 \ -+ (148 - GATE_OFFSET) /* Linux CLK ID (102) */ -+ -+/* TOPCKGEN */ -+/* mtk_fixed_factor */ -+#define CK_TOP_CB_CKSQ_40M 0 /* Linux CLK ID (74) */ -+#define CK_TOP_CB_M_416M 1 /* Linux CLK ID (75) */ -+#define CK_TOP_CB_M_D2 2 /* Linux CLK ID (76) */ -+#define CK_TOP_M_D3_D2 3 /* Linux CLK ID (77) */ -+#define CK_TOP_CB_M_D4 4 /* Linux CLK ID (78) */ -+#define CK_TOP_CB_M_D8 5 /* Linux CLK ID (79) */ -+#define CK_TOP_M_D8_D2 6 /* Linux CLK ID (80) */ -+#define CK_TOP_CB_MM_720M 7 /* Linux CLK ID (81) */ -+#define CK_TOP_CB_MM_D2 8 /* Linux CLK ID (82) */ -+#define CK_TOP_CB_MM_D3_D5 9 /* Linux CLK ID (83) */ -+#define CK_TOP_CB_MM_D4 10 /* Linux CLK ID (84) */ -+#define CK_TOP_MM_D6_D2 11 /* Linux CLK ID (85) */ -+#define CK_TOP_CB_MM_D8 12 /* Linux CLK ID (86) */ -+#define CK_TOP_CB_APLL2_196M 13 /* Linux CLK ID (87) */ -+#define CK_TOP_CB_APLL2_D4 14 /* Linux CLK ID (88) */ -+#define CK_TOP_CB_NET1_D4 15 /* Linux CLK ID (89) */ -+#define CK_TOP_CB_NET1_D5 16 /* Linux CLK ID (90) */ -+#define CK_TOP_NET1_D5_D2 17 /* Linux CLK ID (91) */ -+#define CK_TOP_NET1_D5_D4 18 /* Linux CLK ID (92) */ -+#define CK_TOP_CB_NET1_D8 19 /* Linux CLK ID (93) */ -+#define CK_TOP_NET1_D8_D2 20 /* Linux CLK ID (94) */ -+#define CK_TOP_NET1_D8_D4 21 /* Linux CLK ID (95) */ -+#define CK_TOP_NET1_D8_D8 22 /* Linux CLK ID (96) */ -+#define CK_TOP_NET1_D8_D16 23 /* Linux CLK ID (97) */ -+#define CK_TOP_CB_NET2_800M 24 /* Linux CLK ID (98) */ -+#define CK_TOP_CB_NET2_D2 25 /* Linux CLK ID (99) */ -+#define CK_TOP_CB_NET2_D4 26 /* Linux CLK ID (100) */ -+#define CK_TOP_NET2_D4_D4 27 /* Linux CLK ID (101) */ -+#define CK_TOP_NET2_D4_D8 28 /* Linux CLK ID (102) */ -+#define CK_TOP_CB_NET2_D6 29 /* Linux CLK ID (103) */ -+#define CK_TOP_CB_NET2_D8 30 /* Linux CLK ID (104) */ -+#define CK_TOP_CB_WEDMCU_208M 31 /* Linux CLK ID (105) */ -+#define CK_TOP_CB_SGM_325M 32 /* Linux CLK ID (106) */ -+#define CK_TOP_CB_NETSYS_850M 33 /* Linux CLK ID (107) */ -+#define CK_TOP_CB_MSDC_400M 34 /* Linux CLK ID (108) */ -+#define CK_TOP_CKSQ_40M_D2 35 /* Linux CLK ID (109) */ -+#define CK_TOP_CB_RTC_32K 36 /* Linux CLK ID (110) */ -+#define CK_TOP_CB_RTC_32P7K 37 /* Linux CLK ID (111) */ -+#define CK_TOP_INFRA_F32K 38 /* Linux CLK ID (112) */ -+#define CK_TOP_CKSQ_SRC 39 /* Linux CLK ID (113) */ -+#define CK_TOP_NETSYS_2X 40 /* Linux CLK ID (114) */ -+#define CK_TOP_NETSYS_GSW 41 /* Linux CLK ID (115) */ -+#define CK_TOP_NETSYS_WED_MCU 42 /* Linux CLK ID (116) */ -+#define CK_TOP_EIP197 43 /* Linux CLK ID (117) */ -+#define CK_TOP_EMMC_250M 44 /* Linux CLK ID (118) */ -+#define CK_TOP_EMMC_400M 45 /* Linux CLK ID (119) */ -+#define CK_TOP_SPI 46 /* Linux CLK ID (120) */ -+#define CK_TOP_SPIM_MST 47 /* Linux CLK ID (121) */ -+#define CK_TOP_NFI1X 48 /* Linux CLK ID (122) */ -+#define CK_TOP_SPINFI_BCK 49 /* Linux CLK ID (123) */ -+#define CK_TOP_I2C_BCK 50 /* Linux CLK ID (124) */ -+#define CK_TOP_USB_SYS 51 /* Linux CLK ID (125) */ -+#define CK_TOP_USB_SYS_P1 52 /* Linux CLK ID (126) */ -+#define CK_TOP_USB_XHCI 53 /* Linux CLK ID (127) */ -+#define CK_TOP_USB_XHCI_P1 54 /* Linux CLK ID (128) */ -+#define CK_TOP_USB_FRMCNT 55 /* Linux CLK ID (129) */ -+#define CK_TOP_USB_FRMCNT_P1 56 /* Linux CLK ID (130) */ -+#define CK_TOP_AUD 57 /* Linux CLK ID (131) */ -+#define CK_TOP_A1SYS 58 /* Linux CLK ID (132) */ -+#define CK_TOP_AUD_L 59 /* Linux CLK ID (133) */ -+#define CK_TOP_A_TUNER 60 /* Linux CLK ID (134) */ -+#define CK_TOP_SYSAXI 61 /* Linux CLK ID (135) */ -+#define CK_TOP_INFRA_F26M 62 /* Linux CLK ID (136) */ -+#define CK_TOP_USB_REF 63 /* Linux CLK ID (137) */ -+#define CK_TOP_USB_CK_P1 64 /* Linux CLK ID (138) */ -+/* mtk_mux */ -+#define CK_TOP_NETSYS_SEL 65 /* Linux CLK ID (0) */ -+#define CK_TOP_NETSYS_500M_SEL 66 /* Linux CLK ID (1) */ -+#define CK_TOP_NETSYS_2X_SEL 67 /* Linux CLK ID (2) */ -+#define CK_TOP_NETSYS_GSW_SEL 68 /* Linux CLK ID (3) */ -+#define CK_TOP_ETH_GMII_SEL 69 /* Linux CLK ID (4) */ -+#define CK_TOP_NETSYS_MCU_SEL 70 /* Linux CLK ID (5) */ -+#define CK_TOP_NETSYS_PAO_2X_SEL 71 /* Linux CLK ID (6) */ -+#define CK_TOP_EIP197_SEL 72 /* Linux CLK ID (7) */ -+#define CK_TOP_AXI_INFRA_SEL 73 /* Linux CLK ID (8) */ -+#define CK_TOP_UART_SEL 74 /* Linux CLK ID (9) */ -+#define CK_TOP_EMMC_250M_SEL 75 /* Linux CLK ID (10) */ -+#define CK_TOP_EMMC_400M_SEL 76 /* Linux CLK ID (11) */ -+#define CK_TOP_SPI_SEL 77 /* Linux CLK ID (12) */ -+#define CK_TOP_SPIM_MST_SEL 78 /* Linux CLK ID (13) */ -+#define CK_TOP_NFI1X_SEL 79 /* Linux CLK ID (14) */ -+#define CK_TOP_SPINFI_SEL 80 /* Linux CLK ID (15) */ -+#define CK_TOP_PWM_SEL 81 /* Linux CLK ID (16) */ -+#define CK_TOP_I2C_SEL 82 /* Linux CLK ID (17) */ -+#define CK_TOP_PCIE_MBIST_250M_SEL 83 /* Linux CLK ID (18) */ -+#define CK_TOP_PEXTP_TL_SEL 84 /* Linux CLK ID (19) */ -+#define CK_TOP_PEXTP_TL_P1_SEL 85 /* Linux CLK ID (20) */ -+#define CK_TOP_PEXTP_TL_P2_SEL 86 /* Linux CLK ID (21) */ -+#define CK_TOP_PEXTP_TL_P3_SEL 87 /* Linux CLK ID (22) */ -+#define CK_TOP_USB_SYS_SEL 88 /* Linux CLK ID (23) */ -+#define CK_TOP_USB_SYS_P1_SEL 89 /* Linux CLK ID (24) */ -+#define CK_TOP_USB_XHCI_SEL 90 /* Linux CLK ID (25) */ -+#define CK_TOP_USB_XHCI_P1_SEL 91 /* Linux CLK ID (26) */ -+#define CK_TOP_USB_FRMCNT_SEL 92 /* Linux CLK ID (27) */ -+#define CK_TOP_USB_FRMCNT_P1_SEL 93 /* Linux CLK ID (28) */ -+#define CK_TOP_AUD_SEL 94 /* Linux CLK ID (29) */ -+#define CK_TOP_A1SYS_SEL 95 /* Linux CLK ID (30) */ -+#define CK_TOP_AUD_L_SEL 96 /* Linux CLK ID (31) */ -+#define CK_TOP_A_TUNER_SEL 97 /* Linux CLK ID (32) */ -+#define CK_TOP_SSPXTP_SEL 98 /* Linux CLK ID (33) */ -+#define CK_TOP_USB_PHY_SEL 99 /* Linux CLK ID (34) */ -+#define CK_TOP_USXGMII_SBUS_0_SEL 100 /* Linux CLK ID (35) */ -+#define CK_TOP_USXGMII_SBUS_1_SEL 101 /* Linux CLK ID (36) */ -+#define CK_TOP_SGM_0_SEL 102 /* Linux CLK ID (37) */ -+#define CK_TOP_SGM_SBUS_0_SEL 103 /* Linux CLK ID (38) */ -+#define CK_TOP_SGM_1_SEL 104 /* Linux CLK ID (39) */ -+#define CK_TOP_SGM_SBUS_1_SEL 105 /* Linux CLK ID (40) */ -+#define CK_TOP_XFI_PHY_0_XTAL_SEL 106 /* Linux CLK ID (41) */ -+#define CK_TOP_XFI_PHY_1_XTAL_SEL 107 /* Linux CLK ID (42) */ -+#define CK_TOP_SYSAXI_SEL 108 /* Linux CLK ID (43) */ -+#define CK_TOP_SYSAPB_SEL 109 /* Linux CLK ID (44) */ -+#define CK_TOP_ETH_REFCK_50M_SEL 110 /* Linux CLK ID (45) */ -+#define CK_TOP_ETH_SYS_200M_SEL 111 /* Linux CLK ID (46) */ -+#define CK_TOP_ETH_SYS_SEL 112 /* Linux CLK ID (47) */ -+#define CK_TOP_ETH_XGMII_SEL 113 /* Linux CLK ID (48) */ -+#define CK_TOP_BUS_TOPS_SEL 114 /* Linux CLK ID (49) */ -+#define CK_TOP_NPU_TOPS_SEL 115 /* Linux CLK ID (50) */ -+#define CK_TOP_DRAMC_SEL 116 /* Linux CLK ID (51) */ -+#define CK_TOP_DRAMC_MD32_SEL 117 /* Linux CLK ID (52) */ -+#define CK_TOP_INFRA_F26M_SEL 118 /* Linux CLK ID (53) */ -+#define CK_TOP_PEXTP_P0_SEL 119 /* Linux CLK ID (54) */ -+#define CK_TOP_PEXTP_P1_SEL 120 /* Linux CLK ID (55) */ -+#define CK_TOP_PEXTP_P2_SEL 121 /* Linux CLK ID (56) */ -+#define CK_TOP_PEXTP_P3_SEL 122 /* Linux CLK ID (57) */ -+#define CK_TOP_DA_XTP_GLB_P0_SEL 123 /* Linux CLK ID (58) */ -+#define CK_TOP_DA_XTP_GLB_P1_SEL 124 /* Linux CLK ID (59) */ -+#define CK_TOP_DA_XTP_GLB_P2_SEL 125 /* Linux CLK ID (60) */ -+#define CK_TOP_DA_XTP_GLB_P3_SEL 126 /* Linux CLK ID (61) */ -+#define CK_TOP_CKM_SEL 127 /* Linux CLK ID (62) */ -+#define CK_TOP_DA_SELM_XTAL_SEL 128 /* Linux CLK ID (63) */ -+#define CK_TOP_PEXTP_SEL 129 /* Linux CLK ID (64) */ -+#define CK_TOP_TOPS_P2_26M_SEL 130 /* Linux CLK ID (65) */ -+#define CK_TOP_MCUSYS_BACKUP_625M_SEL 131 /* Linux CLK ID (66) */ -+#define CK_TOP_NETSYS_SYNC_250M_SEL 132 /* Linux CLK ID (67) */ -+#define CK_TOP_MACSEC_SEL 133 /* Linux CLK ID (68) */ -+#define CK_TOP_NETSYS_TOPS_400M_SEL 134 /* Linux CLK ID (69) */ -+#define CK_TOP_NETSYS_PPEFB_250M_SEL 135 /* Linux CLK ID (70) */ -+#define CK_TOP_NETSYS_WARP_SEL 136 /* Linux CLK ID (71) */ -+#define CK_TOP_ETH_MII_SEL 137 /* Linux CLK ID (72) */ -+#define CK_TOP_CK_NPU_SEL_CM_TOPS_SEL 138 /* Linux CLK ID (73) */ -+ -+/* APMIXEDSYS */ -+/* mtk_pll_data */ -+#define CK_APMIXED_NETSYSPLL 0 -+#define CK_APMIXED_MPLL 1 -+#define CK_APMIXED_MMPLL 2 -+#define CK_APMIXED_APLL2 3 -+#define CK_APMIXED_NET1PLL 4 -+#define CK_APMIXED_NET2PLL 5 -+#define CK_APMIXED_WEDMCUPLL 6 -+#define CK_APMIXED_SGMPLL 7 -+#define CK_APMIXED_ARM_B 8 -+#define CK_APMIXED_CCIPLL2_B 9 -+#define CK_APMIXED_USXGMIIPLL 10 -+#define CK_APMIXED_MSDCPLL 11 -+ -+/* ETHSYS ETH DMA */ -+/* mtk_gate */ -+#define CK_ETHDMA_FE_EN 0 -+ -+/* SGMIISYS_0 */ -+/* mtk_gate */ -+#define CK_SGM0_TX_EN 0 -+#define CK_SGM0_RX_EN 1 -+ -+/* SGMIISYS_1 */ -+/* mtk_gate */ -+#define CK_SGM1_TX_EN 0 -+#define CK_SGM1_RX_EN 1 -+ -+/* ETHWARP */ -+/* mtk_gate */ -+#define CK_ETHWARP_WOCPU2_EN 0 -+#define CK_ETHWARP_WOCPU1_EN 1 -+#define CK_ETHWARP_WOCPU0_EN 2 -+ -+#endif /* _DT_BINDINGS_CLK_MT7988_H */ diff --git a/lede/package/boot/uboot-mediatek/patches/101-11-reset-mediatek-add-reset-definition-for-MediaTek-MT7.patch b/lede/package/boot/uboot-mediatek/patches/101-11-reset-mediatek-add-reset-definition-for-MediaTek-MT7.patch deleted file mode 100644 index f14c383638..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/101-11-reset-mediatek-add-reset-definition-for-MediaTek-MT7.patch +++ /dev/null @@ -1,49 +0,0 @@ -From b4a308dd31a7c6754be230849a5e430052268b9c Mon Sep 17 00:00:00 2001 -From: Weijie Gao -Date: Wed, 19 Jul 2023 17:16:33 +0800 -Subject: [PATCH 11/29] reset: mediatek: add reset definition for MediaTek - MT7988 SoC - -This patch adds reset bits for MediaTek MT7988 - -Signed-off-by: Sam Shih -Signed-off-by: Weijie Gao ---- - include/dt-bindings/reset/mt7988-reset.h | 31 ++++++++++++++++++++++++ - 1 file changed, 31 insertions(+) - create mode 100644 include/dt-bindings/reset/mt7988-reset.h - ---- /dev/null -+++ b/include/dt-bindings/reset/mt7988-reset.h -@@ -0,0 +1,31 @@ -+/* SPDX-License-Identifier: GPL-2.0 */ -+/* -+ * Copyright (C) 2023 MediaTek Inc. -+ */ -+ -+#ifndef _DT_BINDINGS_MTK_RESET_H_ -+#define _DT_BINDINGS_MTK_RESET_H_ -+ -+/* ETHDMA Subsystem resets */ -+#define ETHDMA_FE_RST 6 -+#define ETHDMA_PMTR_RST 8 -+#define ETHDMA_GMAC_RST 23 -+#define ETHDMA_WDMA0_RST 24 -+#define ETHDMA_WDMA1_RST 25 -+#define ETHDMA_WDMA2_RST 26 -+#define ETHDMA_PPE0_RST 29 -+#define ETHDMA_PPE1_RST 30 -+#define ETHDMA_PPE2_RST 31 -+ -+/* ETHWARP Subsystem resets */ -+#define ETHWARP_GSW_RST 9 -+#define ETHWARP_EIP197_RST 10 -+#define ETHWARP_WOCPU0_RST 32 -+#define ETHWARP_WOCPU1_RST 33 -+#define ETHWARP_WOCPU2_RST 34 -+#define ETHWARP_WOX_NET_MUX_RST 35 -+#define ETHWARP_WED0_RST 36 -+#define ETHWARP_WED1_RST 37 -+#define ETHWARP_WED2_RST 38 -+ -+#endif /* _DT_BINDINGS_MTK_RESET_H_ */ diff --git a/lede/package/boot/uboot-mediatek/patches/101-12-pinctrl-mediatek-convert-most-definitions-to-const.patch b/lede/package/boot/uboot-mediatek/patches/101-12-pinctrl-mediatek-convert-most-definitions-to-const.patch deleted file mode 100644 index 4085f11541..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/101-12-pinctrl-mediatek-convert-most-definitions-to-const.patch +++ /dev/null @@ -1,2267 +0,0 @@ -From 30227fcf55ac95ad6778de2fc3e6d1e00cf82566 Mon Sep 17 00:00:00 2001 -From: Weijie Gao -Date: Wed, 19 Jul 2023 17:16:37 +0800 -Subject: [PATCH 12/29] pinctrl: mediatek: convert most definitions to const - -There exists a situation of the mediatek pinctrl driver that may return -wrong pin function value for the pinmux driver: -- All pin function arrays are defined without const -- Some pin function arrays contain all-zero value, e.g.: - static int mt7622_spi_funcs[] = { 0, 0, 0, 0, 0, 0, }; -- These arrays will be put into .bss section during compilation -- .bss section has no "a" attribute and does not exist in the final binary - file after objcopy. -- FDT binary blob is appended to the u-boot binary, which occupies the - .bss section. -- During board_f stage, .bss has not been initialized, and contains the - data of FDT, which is not full-zero data. -- pinctrl driver is initialized in board_f stage, and it will get wrong - data if another driver is going to set default pinctrl. - -Since pinmux information and soc data are only meant to be read-only, thus -should be declared as const. This will force all pinctrl data being put -into .rodata section. Since .rodata has "a" attribute, even the all-zero -data will be allocated and filled with correct value in to u-boot binary. - -Signed-off-by: Weijie Gao ---- - drivers/pinctrl/mediatek/pinctrl-mt7622.c | 474 ++++++------- - drivers/pinctrl/mediatek/pinctrl-mt7623.c | 650 +++++++++--------- - drivers/pinctrl/mediatek/pinctrl-mt7629.c | 174 ++--- - drivers/pinctrl/mediatek/pinctrl-mt7981.c | 270 ++++---- - drivers/pinctrl/mediatek/pinctrl-mt7986.c | 145 ++-- - drivers/pinctrl/mediatek/pinctrl-mt8512.c | 24 +- - drivers/pinctrl/mediatek/pinctrl-mt8516.c | 18 +- - drivers/pinctrl/mediatek/pinctrl-mt8518.c | 20 +- - drivers/pinctrl/mediatek/pinctrl-mtk-common.c | 4 +- - drivers/pinctrl/mediatek/pinctrl-mtk-common.h | 8 +- - 10 files changed, 898 insertions(+), 889 deletions(-) - ---- a/drivers/pinctrl/mediatek/pinctrl-mt7622.c -+++ b/drivers/pinctrl/mediatek/pinctrl-mt7622.c -@@ -233,283 +233,285 @@ static const struct mtk_pin_desc mt7622_ - */ - - /* EMMC */ --static int mt7622_emmc_pins[] = { 40, 41, 42, 43, 44, 45, 47, 48, 49, 50, }; --static int mt7622_emmc_funcs[] = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, }; -+static const int mt7622_emmc_pins[] = { -+ 40, 41, 42, 43, 44, 45, 47, 48, 49, 50, }; -+static const int mt7622_emmc_funcs[] = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, }; - --static int mt7622_emmc_rst_pins[] = { 37, }; --static int mt7622_emmc_rst_funcs[] = { 1, }; -+static const int mt7622_emmc_rst_pins[] = { 37, }; -+static const int mt7622_emmc_rst_funcs[] = { 1, }; - - /* LED for EPHY */ --static int mt7622_ephy_leds_pins[] = { 86, 91, 92, 93, 94, }; --static int mt7622_ephy_leds_funcs[] = { 0, 0, 0, 0, 0, }; --static int mt7622_ephy0_led_pins[] = { 86, }; --static int mt7622_ephy0_led_funcs[] = { 0, }; --static int mt7622_ephy1_led_pins[] = { 91, }; --static int mt7622_ephy1_led_funcs[] = { 2, }; --static int mt7622_ephy2_led_pins[] = { 92, }; --static int mt7622_ephy2_led_funcs[] = { 2, }; --static int mt7622_ephy3_led_pins[] = { 93, }; --static int mt7622_ephy3_led_funcs[] = { 2, }; --static int mt7622_ephy4_led_pins[] = { 94, }; --static int mt7622_ephy4_led_funcs[] = { 2, }; -+static const int mt7622_ephy_leds_pins[] = { 86, 91, 92, 93, 94, }; -+static const int mt7622_ephy_leds_funcs[] = { 0, 0, 0, 0, 0, }; -+static const int mt7622_ephy0_led_pins[] = { 86, }; -+static const int mt7622_ephy0_led_funcs[] = { 0, }; -+static const int mt7622_ephy1_led_pins[] = { 91, }; -+static const int mt7622_ephy1_led_funcs[] = { 2, }; -+static const int mt7622_ephy2_led_pins[] = { 92, }; -+static const int mt7622_ephy2_led_funcs[] = { 2, }; -+static const int mt7622_ephy3_led_pins[] = { 93, }; -+static const int mt7622_ephy3_led_funcs[] = { 2, }; -+static const int mt7622_ephy4_led_pins[] = { 94, }; -+static const int mt7622_ephy4_led_funcs[] = { 2, }; - - /* Embedded Switch */ --static int mt7622_esw_pins[] = { 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -- 62, 63, 64, 65, 66, 67, 68, 69, 70, }; --static int mt7622_esw_funcs[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -- 0, 0, 0, 0, 0, 0, 0, 0, 0, }; --static int mt7622_esw_p0_p1_pins[] = { 51, 52, 53, 54, 55, 56, 57, 58, }; --static int mt7622_esw_p0_p1_funcs[] = { 0, 0, 0, 0, 0, 0, 0, 0, }; --static int mt7622_esw_p2_p3_p4_pins[] = { 59, 60, 61, 62, 63, 64, 65, 66, 67, -- 68, 69, 70, }; --static int mt7622_esw_p2_p3_p4_funcs[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, -- 0, 0, 0, }; -+static const int mt7622_esw_pins[] = { -+ 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, -+ 69, 70, }; -+static const int mt7622_esw_funcs[] = { -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; -+static const int mt7622_esw_p0_p1_pins[] = { 51, 52, 53, 54, 55, 56, 57, 58, }; -+static const int mt7622_esw_p0_p1_funcs[] = { 0, 0, 0, 0, 0, 0, 0, 0, }; -+static const int mt7622_esw_p2_p3_p4_pins[] = { -+ 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, }; -+static const int mt7622_esw_p2_p3_p4_funcs[] = { -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; - /* RGMII via ESW */ --static int mt7622_rgmii_via_esw_pins[] = { 59, 60, 61, 62, 63, 64, 65, 66, -- 67, 68, 69, 70, }; --static int mt7622_rgmii_via_esw_funcs[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -- 0, }; -+static const int mt7622_rgmii_via_esw_pins[] = { -+ 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, }; -+static const int mt7622_rgmii_via_esw_funcs[] = { -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; - - /* RGMII via GMAC1 */ --static int mt7622_rgmii_via_gmac1_pins[] = { 59, 60, 61, 62, 63, 64, 65, 66, -- 67, 68, 69, 70, }; --static int mt7622_rgmii_via_gmac1_funcs[] = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, -- 2, }; -+static const int mt7622_rgmii_via_gmac1_pins[] = { -+ 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, }; -+static const int mt7622_rgmii_via_gmac1_funcs[] = { -+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, }; - - /* RGMII via GMAC2 */ --static int mt7622_rgmii_via_gmac2_pins[] = { 25, 26, 27, 28, 29, 30, 31, 32, -- 33, 34, 35, 36, }; --static int mt7622_rgmii_via_gmac2_funcs[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -- 0, }; -+static const int mt7622_rgmii_via_gmac2_pins[] = { -+ 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, }; -+static const int mt7622_rgmii_via_gmac2_funcs[] = { -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; - - /* I2C */ --static int mt7622_i2c0_pins[] = { 14, 15, }; --static int mt7622_i2c0_funcs[] = { 0, 0, }; --static int mt7622_i2c1_0_pins[] = { 55, 56, }; --static int mt7622_i2c1_0_funcs[] = { 0, 0, }; --static int mt7622_i2c1_1_pins[] = { 73, 74, }; --static int mt7622_i2c1_1_funcs[] = { 3, 3, }; --static int mt7622_i2c1_2_pins[] = { 87, 88, }; --static int mt7622_i2c1_2_funcs[] = { 0, 0, }; --static int mt7622_i2c2_0_pins[] = { 57, 58, }; --static int mt7622_i2c2_0_funcs[] = { 0, 0, }; --static int mt7622_i2c2_1_pins[] = { 75, 76, }; --static int mt7622_i2c2_1_funcs[] = { 3, 3, }; --static int mt7622_i2c2_2_pins[] = { 89, 90, }; --static int mt7622_i2c2_2_funcs[] = { 0, 0, }; -+static const int mt7622_i2c0_pins[] = { 14, 15, }; -+static const int mt7622_i2c0_funcs[] = { 0, 0, }; -+static const int mt7622_i2c1_0_pins[] = { 55, 56, }; -+static const int mt7622_i2c1_0_funcs[] = { 0, 0, }; -+static const int mt7622_i2c1_1_pins[] = { 73, 74, }; -+static const int mt7622_i2c1_1_funcs[] = { 3, 3, }; -+static const int mt7622_i2c1_2_pins[] = { 87, 88, }; -+static const int mt7622_i2c1_2_funcs[] = { 0, 0, }; -+static const int mt7622_i2c2_0_pins[] = { 57, 58, }; -+static const int mt7622_i2c2_0_funcs[] = { 0, 0, }; -+static const int mt7622_i2c2_1_pins[] = { 75, 76, }; -+static const int mt7622_i2c2_1_funcs[] = { 3, 3, }; -+static const int mt7622_i2c2_2_pins[] = { 89, 90, }; -+static const int mt7622_i2c2_2_funcs[] = { 0, 0, }; - - /* I2S */ --static int mt7622_i2s_in_mclk_bclk_ws_pins[] = { 3, 4, 5, }; --static int mt7622_i2s_in_mclk_bclk_ws_funcs[] = { 3, 3, 0, }; --static int mt7622_i2s1_in_data_pins[] = { 1, }; --static int mt7622_i2s1_in_data_funcs[] = { 0, }; --static int mt7622_i2s2_in_data_pins[] = { 16, }; --static int mt7622_i2s2_in_data_funcs[] = { 0, }; --static int mt7622_i2s3_in_data_pins[] = { 17, }; --static int mt7622_i2s3_in_data_funcs[] = { 0, }; --static int mt7622_i2s4_in_data_pins[] = { 18, }; --static int mt7622_i2s4_in_data_funcs[] = { 0, }; --static int mt7622_i2s_out_mclk_bclk_ws_pins[] = { 3, 4, 5, }; --static int mt7622_i2s_out_mclk_bclk_ws_funcs[] = { 0, 0, 0, }; --static int mt7622_i2s1_out_data_pins[] = { 2, }; --static int mt7622_i2s1_out_data_funcs[] = { 0, }; --static int mt7622_i2s2_out_data_pins[] = { 19, }; --static int mt7622_i2s2_out_data_funcs[] = { 0, }; --static int mt7622_i2s3_out_data_pins[] = { 20, }; --static int mt7622_i2s3_out_data_funcs[] = { 0, }; --static int mt7622_i2s4_out_data_pins[] = { 21, }; --static int mt7622_i2s4_out_data_funcs[] = { 0, }; -+static const int mt7622_i2s_in_mclk_bclk_ws_pins[] = { 3, 4, 5, }; -+static const int mt7622_i2s_in_mclk_bclk_ws_funcs[] = { 3, 3, 0, }; -+static const int mt7622_i2s1_in_data_pins[] = { 1, }; -+static const int mt7622_i2s1_in_data_funcs[] = { 0, }; -+static const int mt7622_i2s2_in_data_pins[] = { 16, }; -+static const int mt7622_i2s2_in_data_funcs[] = { 0, }; -+static const int mt7622_i2s3_in_data_pins[] = { 17, }; -+static const int mt7622_i2s3_in_data_funcs[] = { 0, }; -+static const int mt7622_i2s4_in_data_pins[] = { 18, }; -+static const int mt7622_i2s4_in_data_funcs[] = { 0, }; -+static const int mt7622_i2s_out_mclk_bclk_ws_pins[] = { 3, 4, 5, }; -+static const int mt7622_i2s_out_mclk_bclk_ws_funcs[] = { 0, 0, 0, }; -+static const int mt7622_i2s1_out_data_pins[] = { 2, }; -+static const int mt7622_i2s1_out_data_funcs[] = { 0, }; -+static const int mt7622_i2s2_out_data_pins[] = { 19, }; -+static const int mt7622_i2s2_out_data_funcs[] = { 0, }; -+static const int mt7622_i2s3_out_data_pins[] = { 20, }; -+static const int mt7622_i2s3_out_data_funcs[] = { 0, }; -+static const int mt7622_i2s4_out_data_pins[] = { 21, }; -+static const int mt7622_i2s4_out_data_funcs[] = { 0, }; - - /* IR */ --static int mt7622_ir_0_tx_pins[] = { 16, }; --static int mt7622_ir_0_tx_funcs[] = { 4, }; --static int mt7622_ir_1_tx_pins[] = { 59, }; --static int mt7622_ir_1_tx_funcs[] = { 5, }; --static int mt7622_ir_2_tx_pins[] = { 99, }; --static int mt7622_ir_2_tx_funcs[] = { 3, }; --static int mt7622_ir_0_rx_pins[] = { 17, }; --static int mt7622_ir_0_rx_funcs[] = { 4, }; --static int mt7622_ir_1_rx_pins[] = { 60, }; --static int mt7622_ir_1_rx_funcs[] = { 5, }; --static int mt7622_ir_2_rx_pins[] = { 100, }; --static int mt7622_ir_2_rx_funcs[] = { 3, }; -+static const int mt7622_ir_0_tx_pins[] = { 16, }; -+static const int mt7622_ir_0_tx_funcs[] = { 4, }; -+static const int mt7622_ir_1_tx_pins[] = { 59, }; -+static const int mt7622_ir_1_tx_funcs[] = { 5, }; -+static const int mt7622_ir_2_tx_pins[] = { 99, }; -+static const int mt7622_ir_2_tx_funcs[] = { 3, }; -+static const int mt7622_ir_0_rx_pins[] = { 17, }; -+static const int mt7622_ir_0_rx_funcs[] = { 4, }; -+static const int mt7622_ir_1_rx_pins[] = { 60, }; -+static const int mt7622_ir_1_rx_funcs[] = { 5, }; -+static const int mt7622_ir_2_rx_pins[] = { 100, }; -+static const int mt7622_ir_2_rx_funcs[] = { 3, }; - - /* MDIO */ --static int mt7622_mdc_mdio_pins[] = { 23, 24, }; --static int mt7622_mdc_mdio_funcs[] = { 0, 0, }; -+static const int mt7622_mdc_mdio_pins[] = { 23, 24, }; -+static const int mt7622_mdc_mdio_funcs[] = { 0, 0, }; - - /* PCIE */ --static int mt7622_pcie0_0_waken_pins[] = { 14, }; --static int mt7622_pcie0_0_waken_funcs[] = { 2, }; --static int mt7622_pcie0_0_clkreq_pins[] = { 15, }; --static int mt7622_pcie0_0_clkreq_funcs[] = { 2, }; --static int mt7622_pcie0_1_waken_pins[] = { 79, }; --static int mt7622_pcie0_1_waken_funcs[] = { 4, }; --static int mt7622_pcie0_1_clkreq_pins[] = { 80, }; --static int mt7622_pcie0_1_clkreq_funcs[] = { 4, }; --static int mt7622_pcie1_0_waken_pins[] = { 14, }; --static int mt7622_pcie1_0_waken_funcs[] = { 3, }; --static int mt7622_pcie1_0_clkreq_pins[] = { 15, }; --static int mt7622_pcie1_0_clkreq_funcs[] = { 3, }; -- --static int mt7622_pcie0_pad_perst_pins[] = { 83, }; --static int mt7622_pcie0_pad_perst_funcs[] = { 0, }; --static int mt7622_pcie1_pad_perst_pins[] = { 84, }; --static int mt7622_pcie1_pad_perst_funcs[] = { 0, }; -+static const int mt7622_pcie0_0_waken_pins[] = { 14, }; -+static const int mt7622_pcie0_0_waken_funcs[] = { 2, }; -+static const int mt7622_pcie0_0_clkreq_pins[] = { 15, }; -+static const int mt7622_pcie0_0_clkreq_funcs[] = { 2, }; -+static const int mt7622_pcie0_1_waken_pins[] = { 79, }; -+static const int mt7622_pcie0_1_waken_funcs[] = { 4, }; -+static const int mt7622_pcie0_1_clkreq_pins[] = { 80, }; -+static const int mt7622_pcie0_1_clkreq_funcs[] = { 4, }; -+static const int mt7622_pcie1_0_waken_pins[] = { 14, }; -+static const int mt7622_pcie1_0_waken_funcs[] = { 3, }; -+static const int mt7622_pcie1_0_clkreq_pins[] = { 15, }; -+static const int mt7622_pcie1_0_clkreq_funcs[] = { 3, }; -+ -+static const int mt7622_pcie0_pad_perst_pins[] = { 83, }; -+static const int mt7622_pcie0_pad_perst_funcs[] = { 0, }; -+static const int mt7622_pcie1_pad_perst_pins[] = { 84, }; -+static const int mt7622_pcie1_pad_perst_funcs[] = { 0, }; - - /* PMIC bus */ --static int mt7622_pmic_bus_pins[] = { 71, 72, }; --static int mt7622_pmic_bus_funcs[] = { 0, 0, }; -+static const int mt7622_pmic_bus_pins[] = { 71, 72, }; -+static const int mt7622_pmic_bus_funcs[] = { 0, 0, }; - - /* Parallel NAND */ --static int mt7622_pnand_pins[] = { 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, -- 48, 49, 50, }; --static int mt7622_pnand_funcs[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -- 0, }; -+static const int mt7622_pnand_pins[] = { -+ 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, }; -+static const int mt7622_pnand_funcs[] = { -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; - - /* PWM */ --static int mt7622_pwm_ch1_0_pins[] = { 51, }; --static int mt7622_pwm_ch1_0_funcs[] = { 3, }; --static int mt7622_pwm_ch1_1_pins[] = { 73, }; --static int mt7622_pwm_ch1_1_funcs[] = { 4, }; --static int mt7622_pwm_ch1_2_pins[] = { 95, }; --static int mt7622_pwm_ch1_2_funcs[] = { 0, }; --static int mt7622_pwm_ch2_0_pins[] = { 52, }; --static int mt7622_pwm_ch2_0_funcs[] = { 3, }; --static int mt7622_pwm_ch2_1_pins[] = { 74, }; --static int mt7622_pwm_ch2_1_funcs[] = { 4, }; --static int mt7622_pwm_ch2_2_pins[] = { 96, }; --static int mt7622_pwm_ch2_2_funcs[] = { 0, }; --static int mt7622_pwm_ch3_0_pins[] = { 53, }; --static int mt7622_pwm_ch3_0_funcs[] = { 3, }; --static int mt7622_pwm_ch3_1_pins[] = { 75, }; --static int mt7622_pwm_ch3_1_funcs[] = { 4, }; --static int mt7622_pwm_ch3_2_pins[] = { 97, }; --static int mt7622_pwm_ch3_2_funcs[] = { 0, }; --static int mt7622_pwm_ch4_0_pins[] = { 54, }; --static int mt7622_pwm_ch4_0_funcs[] = { 3, }; --static int mt7622_pwm_ch4_1_pins[] = { 67, }; --static int mt7622_pwm_ch4_1_funcs[] = { 3, }; --static int mt7622_pwm_ch4_2_pins[] = { 76, }; --static int mt7622_pwm_ch4_2_funcs[] = { 4, }; --static int mt7622_pwm_ch4_3_pins[] = { 98, }; --static int mt7622_pwm_ch4_3_funcs[] = { 0, }; --static int mt7622_pwm_ch5_0_pins[] = { 68, }; --static int mt7622_pwm_ch5_0_funcs[] = { 3, }; --static int mt7622_pwm_ch5_1_pins[] = { 77, }; --static int mt7622_pwm_ch5_1_funcs[] = { 4, }; --static int mt7622_pwm_ch5_2_pins[] = { 99, }; --static int mt7622_pwm_ch5_2_funcs[] = { 0, }; --static int mt7622_pwm_ch6_0_pins[] = { 69, }; --static int mt7622_pwm_ch6_0_funcs[] = { 3, }; --static int mt7622_pwm_ch6_1_pins[] = { 78, }; --static int mt7622_pwm_ch6_1_funcs[] = { 4, }; --static int mt7622_pwm_ch6_2_pins[] = { 81, }; --static int mt7622_pwm_ch6_2_funcs[] = { 4, }; --static int mt7622_pwm_ch6_3_pins[] = { 100, }; --static int mt7622_pwm_ch6_3_funcs[] = { 0, }; --static int mt7622_pwm_ch7_0_pins[] = { 70, }; --static int mt7622_pwm_ch7_0_funcs[] = { 3, }; --static int mt7622_pwm_ch7_1_pins[] = { 82, }; --static int mt7622_pwm_ch7_1_funcs[] = { 4, }; --static int mt7622_pwm_ch7_2_pins[] = { 101, }; --static int mt7622_pwm_ch7_2_funcs[] = { 0, }; -+static const int mt7622_pwm_ch1_0_pins[] = { 51, }; -+static const int mt7622_pwm_ch1_0_funcs[] = { 3, }; -+static const int mt7622_pwm_ch1_1_pins[] = { 73, }; -+static const int mt7622_pwm_ch1_1_funcs[] = { 4, }; -+static const int mt7622_pwm_ch1_2_pins[] = { 95, }; -+static const int mt7622_pwm_ch1_2_funcs[] = { 0, }; -+static const int mt7622_pwm_ch2_0_pins[] = { 52, }; -+static const int mt7622_pwm_ch2_0_funcs[] = { 3, }; -+static const int mt7622_pwm_ch2_1_pins[] = { 74, }; -+static const int mt7622_pwm_ch2_1_funcs[] = { 4, }; -+static const int mt7622_pwm_ch2_2_pins[] = { 96, }; -+static const int mt7622_pwm_ch2_2_funcs[] = { 0, }; -+static const int mt7622_pwm_ch3_0_pins[] = { 53, }; -+static const int mt7622_pwm_ch3_0_funcs[] = { 3, }; -+static const int mt7622_pwm_ch3_1_pins[] = { 75, }; -+static const int mt7622_pwm_ch3_1_funcs[] = { 4, }; -+static const int mt7622_pwm_ch3_2_pins[] = { 97, }; -+static const int mt7622_pwm_ch3_2_funcs[] = { 0, }; -+static const int mt7622_pwm_ch4_0_pins[] = { 54, }; -+static const int mt7622_pwm_ch4_0_funcs[] = { 3, }; -+static const int mt7622_pwm_ch4_1_pins[] = { 67, }; -+static const int mt7622_pwm_ch4_1_funcs[] = { 3, }; -+static const int mt7622_pwm_ch4_2_pins[] = { 76, }; -+static const int mt7622_pwm_ch4_2_funcs[] = { 4, }; -+static const int mt7622_pwm_ch4_3_pins[] = { 98, }; -+static const int mt7622_pwm_ch4_3_funcs[] = { 0, }; -+static const int mt7622_pwm_ch5_0_pins[] = { 68, }; -+static const int mt7622_pwm_ch5_0_funcs[] = { 3, }; -+static const int mt7622_pwm_ch5_1_pins[] = { 77, }; -+static const int mt7622_pwm_ch5_1_funcs[] = { 4, }; -+static const int mt7622_pwm_ch5_2_pins[] = { 99, }; -+static const int mt7622_pwm_ch5_2_funcs[] = { 0, }; -+static const int mt7622_pwm_ch6_0_pins[] = { 69, }; -+static const int mt7622_pwm_ch6_0_funcs[] = { 3, }; -+static const int mt7622_pwm_ch6_1_pins[] = { 78, }; -+static const int mt7622_pwm_ch6_1_funcs[] = { 4, }; -+static const int mt7622_pwm_ch6_2_pins[] = { 81, }; -+static const int mt7622_pwm_ch6_2_funcs[] = { 4, }; -+static const int mt7622_pwm_ch6_3_pins[] = { 100, }; -+static const int mt7622_pwm_ch6_3_funcs[] = { 0, }; -+static const int mt7622_pwm_ch7_0_pins[] = { 70, }; -+static const int mt7622_pwm_ch7_0_funcs[] = { 3, }; -+static const int mt7622_pwm_ch7_1_pins[] = { 82, }; -+static const int mt7622_pwm_ch7_1_funcs[] = { 4, }; -+static const int mt7622_pwm_ch7_2_pins[] = { 101, }; -+static const int mt7622_pwm_ch7_2_funcs[] = { 0, }; - - /* SD */ --static int mt7622_sd_0_pins[] = { 16, 17, 18, 19, 20, 21, }; --static int mt7622_sd_0_funcs[] = { 2, 2, 2, 2, 2, 2, }; --static int mt7622_sd_1_pins[] = { 25, 26, 27, 28, 29, 30, }; --static int mt7622_sd_1_funcs[] = { 2, 2, 2, 2, 2, 2, }; -+static const int mt7622_sd_0_pins[] = { 16, 17, 18, 19, 20, 21, }; -+static const int mt7622_sd_0_funcs[] = { 2, 2, 2, 2, 2, 2, }; -+static const int mt7622_sd_1_pins[] = { 25, 26, 27, 28, 29, 30, }; -+static const int mt7622_sd_1_funcs[] = { 2, 2, 2, 2, 2, 2, }; - - /* Serial NAND */ --static int mt7622_snfi_pins[] = { 8, 9, 10, 11, 12, 13, }; --static int mt7622_snfi_funcs[] = { 2, 2, 2, 2, 2, 2, }; -+static const int mt7622_snfi_pins[] = { 8, 9, 10, 11, 12, 13, }; -+static const int mt7622_snfi_funcs[] = { 2, 2, 2, 2, 2, 2, }; - - /* SPI NOR */ --static int mt7622_spi_pins[] = { 8, 9, 10, 11, 12, 13 }; --static int mt7622_spi_funcs[] = { 0, 0, 0, 0, 0, 0, }; -+static const int mt7622_spi_pins[] = { 8, 9, 10, 11, 12, 13 }; -+static const int mt7622_spi_funcs[] = { 0, 0, 0, 0, 0, 0, }; - - /* SPIC */ --static int mt7622_spic0_0_pins[] = { 63, 64, 65, 66, }; --static int mt7622_spic0_0_funcs[] = { 4, 4, 4, 4, }; --static int mt7622_spic0_1_pins[] = { 79, 80, 81, 82, }; --static int mt7622_spic0_1_funcs[] = { 3, 3, 3, 3, }; --static int mt7622_spic1_0_pins[] = { 67, 68, 69, 70, }; --static int mt7622_spic1_0_funcs[] = { 4, 4, 4, 4, }; --static int mt7622_spic1_1_pins[] = { 73, 74, 75, 76, }; --static int mt7622_spic1_1_funcs[] = { 0, 0, 0, 0, }; --static int mt7622_spic2_0_pins[] = { 10, 11, 12, 13, }; --static int mt7622_spic2_0_funcs[] = { 0, 0, 0, 0, }; --static int mt7622_spic2_0_wp_hold_pins[] = { 8, 9, }; --static int mt7622_spic2_0_wp_hold_funcs[] = { 0, 0, }; -+static const int mt7622_spic0_0_pins[] = { 63, 64, 65, 66, }; -+static const int mt7622_spic0_0_funcs[] = { 4, 4, 4, 4, }; -+static const int mt7622_spic0_1_pins[] = { 79, 80, 81, 82, }; -+static const int mt7622_spic0_1_funcs[] = { 3, 3, 3, 3, }; -+static const int mt7622_spic1_0_pins[] = { 67, 68, 69, 70, }; -+static const int mt7622_spic1_0_funcs[] = { 4, 4, 4, 4, }; -+static const int mt7622_spic1_1_pins[] = { 73, 74, 75, 76, }; -+static const int mt7622_spic1_1_funcs[] = { 0, 0, 0, 0, }; -+static const int mt7622_spic2_0_pins[] = { 10, 11, 12, 13, }; -+static const int mt7622_spic2_0_funcs[] = { 0, 0, 0, 0, }; -+static const int mt7622_spic2_0_wp_hold_pins[] = { 8, 9, }; -+static const int mt7622_spic2_0_wp_hold_funcs[] = { 0, 0, }; - - /* TDM */ --static int mt7622_tdm_0_out_mclk_bclk_ws_pins[] = { 8, 9, 10, }; --static int mt7622_tdm_0_out_mclk_bclk_ws_funcs[] = { 3, 3, 3, }; --static int mt7622_tdm_0_in_mclk_bclk_ws_pins[] = { 11, 12, 13, }; --static int mt7622_tdm_0_in_mclk_bclk_ws_funcs[] = { 3, 3, 3, }; --static int mt7622_tdm_0_out_data_pins[] = { 20, }; --static int mt7622_tdm_0_out_data_funcs[] = { 3, }; --static int mt7622_tdm_0_in_data_pins[] = { 21, }; --static int mt7622_tdm_0_in_data_funcs[] = { 3, }; --static int mt7622_tdm_1_out_mclk_bclk_ws_pins[] = { 57, 58, 59, }; --static int mt7622_tdm_1_out_mclk_bclk_ws_funcs[] = { 3, 3, 3, }; --static int mt7622_tdm_1_in_mclk_bclk_ws_pins[] = { 60, 61, 62, }; --static int mt7622_tdm_1_in_mclk_bclk_ws_funcs[] = { 3, 3, 3, }; --static int mt7622_tdm_1_out_data_pins[] = { 55, }; --static int mt7622_tdm_1_out_data_funcs[] = { 3, }; --static int mt7622_tdm_1_in_data_pins[] = { 56, }; --static int mt7622_tdm_1_in_data_funcs[] = { 3, }; -+static const int mt7622_tdm_0_out_mclk_bclk_ws_pins[] = { 8, 9, 10, }; -+static const int mt7622_tdm_0_out_mclk_bclk_ws_funcs[] = { 3, 3, 3, }; -+static const int mt7622_tdm_0_in_mclk_bclk_ws_pins[] = { 11, 12, 13, }; -+static const int mt7622_tdm_0_in_mclk_bclk_ws_funcs[] = { 3, 3, 3, }; -+static const int mt7622_tdm_0_out_data_pins[] = { 20, }; -+static const int mt7622_tdm_0_out_data_funcs[] = { 3, }; -+static const int mt7622_tdm_0_in_data_pins[] = { 21, }; -+static const int mt7622_tdm_0_in_data_funcs[] = { 3, }; -+static const int mt7622_tdm_1_out_mclk_bclk_ws_pins[] = { 57, 58, 59, }; -+static const int mt7622_tdm_1_out_mclk_bclk_ws_funcs[] = { 3, 3, 3, }; -+static const int mt7622_tdm_1_in_mclk_bclk_ws_pins[] = { 60, 61, 62, }; -+static const int mt7622_tdm_1_in_mclk_bclk_ws_funcs[] = { 3, 3, 3, }; -+static const int mt7622_tdm_1_out_data_pins[] = { 55, }; -+static const int mt7622_tdm_1_out_data_funcs[] = { 3, }; -+static const int mt7622_tdm_1_in_data_pins[] = { 56, }; -+static const int mt7622_tdm_1_in_data_funcs[] = { 3, }; - - /* UART */ --static int mt7622_uart0_0_tx_rx_pins[] = { 6, 7, }; --static int mt7622_uart0_0_tx_rx_funcs[] = { 0, 0, }; --static int mt7622_uart1_0_tx_rx_pins[] = { 55, 56, }; --static int mt7622_uart1_0_tx_rx_funcs[] = { 2, 2, }; --static int mt7622_uart1_0_rts_cts_pins[] = { 57, 58, }; --static int mt7622_uart1_0_rts_cts_funcs[] = { 2, 2, }; --static int mt7622_uart1_1_tx_rx_pins[] = { 73, 74, }; --static int mt7622_uart1_1_tx_rx_funcs[] = { 2, 2, }; --static int mt7622_uart1_1_rts_cts_pins[] = { 75, 76, }; --static int mt7622_uart1_1_rts_cts_funcs[] = { 2, 2, }; --static int mt7622_uart2_0_tx_rx_pins[] = { 3, 4, }; --static int mt7622_uart2_0_tx_rx_funcs[] = { 2, 2, }; --static int mt7622_uart2_0_rts_cts_pins[] = { 1, 2, }; --static int mt7622_uart2_0_rts_cts_funcs[] = { 2, 2, }; --static int mt7622_uart2_1_tx_rx_pins[] = { 51, 52, }; --static int mt7622_uart2_1_tx_rx_funcs[] = { 0, 0, }; --static int mt7622_uart2_1_rts_cts_pins[] = { 53, 54, }; --static int mt7622_uart2_1_rts_cts_funcs[] = { 0, 0, }; --static int mt7622_uart2_2_tx_rx_pins[] = { 59, 60, }; --static int mt7622_uart2_2_tx_rx_funcs[] = { 4, 4, }; --static int mt7622_uart2_2_rts_cts_pins[] = { 61, 62, }; --static int mt7622_uart2_2_rts_cts_funcs[] = { 4, 4, }; --static int mt7622_uart2_3_tx_rx_pins[] = { 95, 96, }; --static int mt7622_uart2_3_tx_rx_funcs[] = { 3, 3, }; --static int mt7622_uart3_0_tx_rx_pins[] = { 57, 58, }; --static int mt7622_uart3_0_tx_rx_funcs[] = { 5, 5, }; --static int mt7622_uart3_1_tx_rx_pins[] = { 81, 82, }; --static int mt7622_uart3_1_tx_rx_funcs[] = { 0, 0, }; --static int mt7622_uart3_1_rts_cts_pins[] = { 79, 80, }; --static int mt7622_uart3_1_rts_cts_funcs[] = { 0, 0, }; --static int mt7622_uart4_0_tx_rx_pins[] = { 61, 62, }; --static int mt7622_uart4_0_tx_rx_funcs[] = { 5, 5, }; --static int mt7622_uart4_1_tx_rx_pins[] = { 91, 92, }; --static int mt7622_uart4_1_tx_rx_funcs[] = { 0, 0, }; --static int mt7622_uart4_1_rts_cts_pins[] = { 93, 94 }; --static int mt7622_uart4_1_rts_cts_funcs[] = { 0, 0, }; --static int mt7622_uart4_2_tx_rx_pins[] = { 97, 98, }; --static int mt7622_uart4_2_tx_rx_funcs[] = { 2, 2, }; --static int mt7622_uart4_2_rts_cts_pins[] = { 95, 96 }; --static int mt7622_uart4_2_rts_cts_funcs[] = { 2, 2, }; -+static const int mt7622_uart0_0_tx_rx_pins[] = { 6, 7, }; -+static const int mt7622_uart0_0_tx_rx_funcs[] = { 0, 0, }; -+static const int mt7622_uart1_0_tx_rx_pins[] = { 55, 56, }; -+static const int mt7622_uart1_0_tx_rx_funcs[] = { 2, 2, }; -+static const int mt7622_uart1_0_rts_cts_pins[] = { 57, 58, }; -+static const int mt7622_uart1_0_rts_cts_funcs[] = { 2, 2, }; -+static const int mt7622_uart1_1_tx_rx_pins[] = { 73, 74, }; -+static const int mt7622_uart1_1_tx_rx_funcs[] = { 2, 2, }; -+static const int mt7622_uart1_1_rts_cts_pins[] = { 75, 76, }; -+static const int mt7622_uart1_1_rts_cts_funcs[] = { 2, 2, }; -+static const int mt7622_uart2_0_tx_rx_pins[] = { 3, 4, }; -+static const int mt7622_uart2_0_tx_rx_funcs[] = { 2, 2, }; -+static const int mt7622_uart2_0_rts_cts_pins[] = { 1, 2, }; -+static const int mt7622_uart2_0_rts_cts_funcs[] = { 2, 2, }; -+static const int mt7622_uart2_1_tx_rx_pins[] = { 51, 52, }; -+static const int mt7622_uart2_1_tx_rx_funcs[] = { 0, 0, }; -+static const int mt7622_uart2_1_rts_cts_pins[] = { 53, 54, }; -+static const int mt7622_uart2_1_rts_cts_funcs[] = { 0, 0, }; -+static const int mt7622_uart2_2_tx_rx_pins[] = { 59, 60, }; -+static const int mt7622_uart2_2_tx_rx_funcs[] = { 4, 4, }; -+static const int mt7622_uart2_2_rts_cts_pins[] = { 61, 62, }; -+static const int mt7622_uart2_2_rts_cts_funcs[] = { 4, 4, }; -+static const int mt7622_uart2_3_tx_rx_pins[] = { 95, 96, }; -+static const int mt7622_uart2_3_tx_rx_funcs[] = { 3, 3, }; -+static const int mt7622_uart3_0_tx_rx_pins[] = { 57, 58, }; -+static const int mt7622_uart3_0_tx_rx_funcs[] = { 5, 5, }; -+static const int mt7622_uart3_1_tx_rx_pins[] = { 81, 82, }; -+static const int mt7622_uart3_1_tx_rx_funcs[] = { 0, 0, }; -+static const int mt7622_uart3_1_rts_cts_pins[] = { 79, 80, }; -+static const int mt7622_uart3_1_rts_cts_funcs[] = { 0, 0, }; -+static const int mt7622_uart4_0_tx_rx_pins[] = { 61, 62, }; -+static const int mt7622_uart4_0_tx_rx_funcs[] = { 5, 5, }; -+static const int mt7622_uart4_1_tx_rx_pins[] = { 91, 92, }; -+static const int mt7622_uart4_1_tx_rx_funcs[] = { 0, 0, }; -+static const int mt7622_uart4_1_rts_cts_pins[] = { 93, 94 }; -+static const int mt7622_uart4_1_rts_cts_funcs[] = { 0, 0, }; -+static const int mt7622_uart4_2_tx_rx_pins[] = { 97, 98, }; -+static const int mt7622_uart4_2_tx_rx_funcs[] = { 2, 2, }; -+static const int mt7622_uart4_2_rts_cts_pins[] = { 95, 96 }; -+static const int mt7622_uart4_2_rts_cts_funcs[] = { 2, 2, }; - - /* Watchdog */ --static int mt7622_watchdog_pins[] = { 78, }; --static int mt7622_watchdog_funcs[] = { 0, }; -+static const int mt7622_watchdog_pins[] = { 78, }; -+static const int mt7622_watchdog_funcs[] = { 0, }; - - /* WLAN LED */ --static int mt7622_wled_pins[] = { 85, }; --static int mt7622_wled_funcs[] = { 0, }; -+static const int mt7622_wled_pins[] = { 85, }; -+static const int mt7622_wled_funcs[] = { 0, }; - - static const struct mtk_group_desc mt7622_groups[] = { - PINCTRL_PIN_GROUP("emmc", mt7622_emmc), -@@ -719,7 +721,7 @@ static const struct mtk_function_desc mt - {"watchdog", mt7622_wdt_groups, ARRAY_SIZE(mt7622_wdt_groups)}, - }; - --static struct mtk_pinctrl_soc mt7622_data = { -+static const struct mtk_pinctrl_soc mt7622_data = { - .name = "mt7622_pinctrl", - .reg_cal = mt7622_reg_cals, - .pins = mt7622_pins, ---- a/drivers/pinctrl/mediatek/pinctrl-mt7623.c -+++ b/drivers/pinctrl/mediatek/pinctrl-mt7623.c -@@ -692,377 +692,377 @@ static const struct mtk_pin_desc mt7623_ - */ - - /* AUDIO EXT CLK */ --static int mt7623_aud_ext_clk0_pins[] = { 208, }; --static int mt7623_aud_ext_clk0_funcs[] = { 1, }; --static int mt7623_aud_ext_clk1_pins[] = { 209, }; --static int mt7623_aud_ext_clk1_funcs[] = { 1, }; -+static const int mt7623_aud_ext_clk0_pins[] = { 208, }; -+static const int mt7623_aud_ext_clk0_funcs[] = { 1, }; -+static const int mt7623_aud_ext_clk1_pins[] = { 209, }; -+static const int mt7623_aud_ext_clk1_funcs[] = { 1, }; - - /* DISP PWM */ --static int mt7623_disp_pwm_0_pins[] = { 72, }; --static int mt7623_disp_pwm_0_funcs[] = { 5, }; --static int mt7623_disp_pwm_1_pins[] = { 203, }; --static int mt7623_disp_pwm_1_funcs[] = { 2, }; --static int mt7623_disp_pwm_2_pins[] = { 208, }; --static int mt7623_disp_pwm_2_funcs[] = { 5, }; -+static const int mt7623_disp_pwm_0_pins[] = { 72, }; -+static const int mt7623_disp_pwm_0_funcs[] = { 5, }; -+static const int mt7623_disp_pwm_1_pins[] = { 203, }; -+static const int mt7623_disp_pwm_1_funcs[] = { 2, }; -+static const int mt7623_disp_pwm_2_pins[] = { 208, }; -+static const int mt7623_disp_pwm_2_funcs[] = { 5, }; - - /* ESW */ --static int mt7623_esw_int_pins[] = { 273, }; --static int mt7623_esw_int_funcs[] = { 1, }; --static int mt7623_esw_rst_pins[] = { 277, }; --static int mt7623_esw_rst_funcs[] = { 1, }; -+static const int mt7623_esw_int_pins[] = { 273, }; -+static const int mt7623_esw_int_funcs[] = { 1, }; -+static const int mt7623_esw_rst_pins[] = { 277, }; -+static const int mt7623_esw_rst_funcs[] = { 1, }; - - /* EPHY */ --static int mt7623_ephy_pins[] = { 262, 263, 264, 265, 266, 267, 268, -- 269, 270, 271, 272, 274, }; --static int mt7623_ephy_funcs[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; -+static const int mt7623_ephy_pins[] = { 262, 263, 264, 265, 266, 267, 268, -+ 269, 270, 271, 272, 274, }; -+static const int mt7623_ephy_funcs[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; - - /* EXT_SDIO */ --static int mt7623_ext_sdio_pins[] = { 236, 237, 238, 239, 240, 241, }; --static int mt7623_ext_sdio_funcs[] = { 1, 1, 1, 1, 1, 1, }; -+static const int mt7623_ext_sdio_pins[] = { 236, 237, 238, 239, 240, 241, }; -+static const int mt7623_ext_sdio_funcs[] = { 1, 1, 1, 1, 1, 1, }; - - /* HDMI RX */ --static int mt7623_hdmi_rx_pins[] = { 247, 248, }; --static int mt7623_hdmi_rx_funcs[] = { 1, 1 }; --static int mt7623_hdmi_rx_i2c_pins[] = { 244, 245, }; --static int mt7623_hdmi_rx_i2c_funcs[] = { 1, 1 }; -+static const int mt7623_hdmi_rx_pins[] = { 247, 248, }; -+static const int mt7623_hdmi_rx_funcs[] = { 1, 1 }; -+static const int mt7623_hdmi_rx_i2c_pins[] = { 244, 245, }; -+static const int mt7623_hdmi_rx_i2c_funcs[] = { 1, 1 }; - - /* HDMI TX */ --static int mt7623_hdmi_cec_pins[] = { 122, }; --static int mt7623_hdmi_cec_funcs[] = { 1, }; --static int mt7623_hdmi_htplg_pins[] = { 123, }; --static int mt7623_hdmi_htplg_funcs[] = { 1, }; --static int mt7623_hdmi_i2c_pins[] = { 124, 125, }; --static int mt7623_hdmi_i2c_funcs[] = { 1, 1 }; -+static const int mt7623_hdmi_cec_pins[] = { 122, }; -+static const int mt7623_hdmi_cec_funcs[] = { 1, }; -+static const int mt7623_hdmi_htplg_pins[] = { 123, }; -+static const int mt7623_hdmi_htplg_funcs[] = { 1, }; -+static const int mt7623_hdmi_i2c_pins[] = { 124, 125, }; -+static const int mt7623_hdmi_i2c_funcs[] = { 1, 1 }; - - /* I2C */ --static int mt7623_i2c0_pins[] = { 75, 76, }; --static int mt7623_i2c0_funcs[] = { 1, 1, }; --static int mt7623_i2c1_0_pins[] = { 57, 58, }; --static int mt7623_i2c1_0_funcs[] = { 1, 1, }; --static int mt7623_i2c1_1_pins[] = { 242, 243, }; --static int mt7623_i2c1_1_funcs[] = { 4, 4, }; --static int mt7623_i2c1_2_pins[] = { 85, 86, }; --static int mt7623_i2c1_2_funcs[] = { 3, 3, }; --static int mt7623_i2c1_3_pins[] = { 105, 106, }; --static int mt7623_i2c1_3_funcs[] = { 3, 3, }; --static int mt7623_i2c1_4_pins[] = { 124, 125, }; --static int mt7623_i2c1_4_funcs[] = { 4, 4, }; --static int mt7623_i2c2_0_pins[] = { 77, 78, }; --static int mt7623_i2c2_0_funcs[] = { 1, 1, }; --static int mt7623_i2c2_1_pins[] = { 89, 90, }; --static int mt7623_i2c2_1_funcs[] = { 3, 3, }; --static int mt7623_i2c2_2_pins[] = { 109, 110, }; --static int mt7623_i2c2_2_funcs[] = { 3, 3, }; --static int mt7623_i2c2_3_pins[] = { 122, 123, }; --static int mt7623_i2c2_3_funcs[] = { 4, 4, }; -+static const int mt7623_i2c0_pins[] = { 75, 76, }; -+static const int mt7623_i2c0_funcs[] = { 1, 1, }; -+static const int mt7623_i2c1_0_pins[] = { 57, 58, }; -+static const int mt7623_i2c1_0_funcs[] = { 1, 1, }; -+static const int mt7623_i2c1_1_pins[] = { 242, 243, }; -+static const int mt7623_i2c1_1_funcs[] = { 4, 4, }; -+static const int mt7623_i2c1_2_pins[] = { 85, 86, }; -+static const int mt7623_i2c1_2_funcs[] = { 3, 3, }; -+static const int mt7623_i2c1_3_pins[] = { 105, 106, }; -+static const int mt7623_i2c1_3_funcs[] = { 3, 3, }; -+static const int mt7623_i2c1_4_pins[] = { 124, 125, }; -+static const int mt7623_i2c1_4_funcs[] = { 4, 4, }; -+static const int mt7623_i2c2_0_pins[] = { 77, 78, }; -+static const int mt7623_i2c2_0_funcs[] = { 1, 1, }; -+static const int mt7623_i2c2_1_pins[] = { 89, 90, }; -+static const int mt7623_i2c2_1_funcs[] = { 3, 3, }; -+static const int mt7623_i2c2_2_pins[] = { 109, 110, }; -+static const int mt7623_i2c2_2_funcs[] = { 3, 3, }; -+static const int mt7623_i2c2_3_pins[] = { 122, 123, }; -+static const int mt7623_i2c2_3_funcs[] = { 4, 4, }; - - /* I2S */ --static int mt7623_i2s0_pins[] = { 49, 72, 73, 74, 126, }; --static int mt7623_i2s0_funcs[] = { 1, 1, 1, 1, 1, }; --static int mt7623_i2s1_pins[] = { 33, 34, 35, 36, 37, }; --static int mt7623_i2s1_funcs[] = { 1, 1, 1, 1, 1, }; --static int mt7623_i2s2_bclk_lrclk_mclk_pins[] = { 50, 52, 188, }; --static int mt7623_i2s2_bclk_lrclk_mclk_funcs[] = { 1, 1, 1, }; --static int mt7623_i2s2_data_in_pins[] = { 51, }; --static int mt7623_i2s2_data_in_funcs[] = { 1, }; --static int mt7623_i2s2_data_0_pins[] = { 203, }; --static int mt7623_i2s2_data_0_funcs[] = { 9, }; --static int mt7623_i2s2_data_1_pins[] = { 38, }; --static int mt7623_i2s2_data_1_funcs[] = { 4, }; --static int mt7623_i2s3_bclk_lrclk_mclk_pins[] = { 191, 192, 193, }; --static int mt7623_i2s3_bclk_lrclk_mclk_funcs[] = { 1, 1, 1, }; --static int mt7623_i2s3_data_in_pins[] = { 190, }; --static int mt7623_i2s3_data_in_funcs[] = { 1, }; --static int mt7623_i2s3_data_0_pins[] = { 204, }; --static int mt7623_i2s3_data_0_funcs[] = { 9, }; --static int mt7623_i2s3_data_1_pins[] = { 2, }; --static int mt7623_i2s3_data_1_funcs[] = { 0, }; --static int mt7623_i2s4_pins[] = { 194, 195, 196, 197, 198, }; --static int mt7623_i2s4_funcs[] = { 1, 1, 1, 1, 1, }; --static int mt7623_i2s5_pins[] = { 16, 17, 30, 31, 32, }; --static int mt7623_i2s5_funcs[] = { 1, 1, 1, 1, 1, }; -+static const int mt7623_i2s0_pins[] = { 49, 72, 73, 74, 126, }; -+static const int mt7623_i2s0_funcs[] = { 1, 1, 1, 1, 1, }; -+static const int mt7623_i2s1_pins[] = { 33, 34, 35, 36, 37, }; -+static const int mt7623_i2s1_funcs[] = { 1, 1, 1, 1, 1, }; -+static const int mt7623_i2s2_bclk_lrclk_mclk_pins[] = { 50, 52, 188, }; -+static const int mt7623_i2s2_bclk_lrclk_mclk_funcs[] = { 1, 1, 1, }; -+static const int mt7623_i2s2_data_in_pins[] = { 51, }; -+static const int mt7623_i2s2_data_in_funcs[] = { 1, }; -+static const int mt7623_i2s2_data_0_pins[] = { 203, }; -+static const int mt7623_i2s2_data_0_funcs[] = { 9, }; -+static const int mt7623_i2s2_data_1_pins[] = { 38, }; -+static const int mt7623_i2s2_data_1_funcs[] = { 4, }; -+static const int mt7623_i2s3_bclk_lrclk_mclk_pins[] = { 191, 192, 193, }; -+static const int mt7623_i2s3_bclk_lrclk_mclk_funcs[] = { 1, 1, 1, }; -+static const int mt7623_i2s3_data_in_pins[] = { 190, }; -+static const int mt7623_i2s3_data_in_funcs[] = { 1, }; -+static const int mt7623_i2s3_data_0_pins[] = { 204, }; -+static const int mt7623_i2s3_data_0_funcs[] = { 9, }; -+static const int mt7623_i2s3_data_1_pins[] = { 2, }; -+static const int mt7623_i2s3_data_1_funcs[] = { 0, }; -+static const int mt7623_i2s4_pins[] = { 194, 195, 196, 197, 198, }; -+static const int mt7623_i2s4_funcs[] = { 1, 1, 1, 1, 1, }; -+static const int mt7623_i2s5_pins[] = { 16, 17, 30, 31, 32, }; -+static const int mt7623_i2s5_funcs[] = { 1, 1, 1, 1, 1, }; - - /* IR */ --static int mt7623_ir_pins[] = { 46, }; --static int mt7623_ir_funcs[] = { 1, }; -+static const int mt7623_ir_pins[] = { 46, }; -+static const int mt7623_ir_funcs[] = { 1, }; - - /* LCD */ --static int mt7623_mipi_tx_pins[] = { 91, 92, 93, 94, 95, 96, 97, 98, -- 99, 100, }; --static int mt7623_mipi_tx_funcs[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; --static int mt7623_dsi_te_pins[] = { 84, }; --static int mt7623_dsi_te_funcs[] = { 1, }; --static int mt7623_lcm_rst_pins[] = { 83, }; --static int mt7623_lcm_rst_funcs[] = { 1, }; -+static const int mt7623_mipi_tx_pins[] = { 91, 92, 93, 94, 95, 96, 97, 98, -+ 99, 100, }; -+static const int mt7623_mipi_tx_funcs[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; -+static const int mt7623_dsi_te_pins[] = { 84, }; -+static const int mt7623_dsi_te_funcs[] = { 1, }; -+static const int mt7623_lcm_rst_pins[] = { 83, }; -+static const int mt7623_lcm_rst_funcs[] = { 1, }; - - /* MDC/MDIO */ --static int mt7623_mdc_mdio_pins[] = { 275, 276, }; --static int mt7623_mdc_mdio_funcs[] = { 1, 1, }; -+static const int mt7623_mdc_mdio_pins[] = { 275, 276, }; -+static const int mt7623_mdc_mdio_funcs[] = { 1, 1, }; - - /* MSDC */ --static int mt7623_msdc0_pins[] = { 111, 112, 113, 114, 115, 116, 117, 118, -- 119, 120, 121, }; --static int mt7623_msdc0_funcs[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; --static int mt7623_msdc1_pins[] = { 105, 106, 107, 108, 109, 110, }; --static int mt7623_msdc1_funcs[] = { 1, 1, 1, 1, 1, 1, }; --static int mt7623_msdc1_ins_pins[] = { 261, }; --static int mt7623_msdc1_ins_funcs[] = { 1, }; --static int mt7623_msdc1_wp_0_pins[] = { 29, }; --static int mt7623_msdc1_wp_0_funcs[] = { 1, }; --static int mt7623_msdc1_wp_1_pins[] = { 55, }; --static int mt7623_msdc1_wp_1_funcs[] = { 3, }; --static int mt7623_msdc1_wp_2_pins[] = { 209, }; --static int mt7623_msdc1_wp_2_funcs[] = { 2, }; --static int mt7623_msdc2_pins[] = { 85, 86, 87, 88, 89, 90, }; --static int mt7623_msdc2_funcs[] = { 1, 1, 1, 1, 1, 1, }; --static int mt7623_msdc3_pins[] = { 249, 250, 251, 252, 253, 254, 255, 256, -- 257, 258, 259, 260, }; --static int mt7623_msdc3_funcs[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; -+static const int mt7623_msdc0_pins[] = { 111, 112, 113, 114, 115, 116, 117, 118, -+ 119, 120, 121, }; -+static const int mt7623_msdc0_funcs[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; -+static const int mt7623_msdc1_pins[] = { 105, 106, 107, 108, 109, 110, }; -+static const int mt7623_msdc1_funcs[] = { 1, 1, 1, 1, 1, 1, }; -+static const int mt7623_msdc1_ins_pins[] = { 261, }; -+static const int mt7623_msdc1_ins_funcs[] = { 1, }; -+static const int mt7623_msdc1_wp_0_pins[] = { 29, }; -+static const int mt7623_msdc1_wp_0_funcs[] = { 1, }; -+static const int mt7623_msdc1_wp_1_pins[] = { 55, }; -+static const int mt7623_msdc1_wp_1_funcs[] = { 3, }; -+static const int mt7623_msdc1_wp_2_pins[] = { 209, }; -+static const int mt7623_msdc1_wp_2_funcs[] = { 2, }; -+static const int mt7623_msdc2_pins[] = { 85, 86, 87, 88, 89, 90, }; -+static const int mt7623_msdc2_funcs[] = { 1, 1, 1, 1, 1, 1, }; -+static const int mt7623_msdc3_pins[] = { 249, 250, 251, 252, 253, 254, 255, 256, -+ 257, 258, 259, 260, }; -+static const int mt7623_msdc3_funcs[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; - - /* NAND */ --static int mt7623_nandc_pins[] = { 43, 47, 48, 111, 112, 113, 114, 115, -- 116, 117, 118, 119, 120, 121, }; --static int mt7623_nandc_funcs[] = { 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, -- 4, 4, }; --static int mt7623_nandc_ceb0_pins[] = { 45, }; --static int mt7623_nandc_ceb0_funcs[] = { 1, }; --static int mt7623_nandc_ceb1_pins[] = { 44, }; --static int mt7623_nandc_ceb1_funcs[] = { 1, }; -+static const int mt7623_nandc_pins[] = { 43, 47, 48, 111, 112, 113, 114, 115, -+ 116, 117, 118, 119, 120, 121, }; -+static const int mt7623_nandc_funcs[] = { 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, -+ 4, 4, }; -+static const int mt7623_nandc_ceb0_pins[] = { 45, }; -+static const int mt7623_nandc_ceb0_funcs[] = { 1, }; -+static const int mt7623_nandc_ceb1_pins[] = { 44, }; -+static const int mt7623_nandc_ceb1_funcs[] = { 1, }; - - /* RTC */ --static int mt7623_rtc_pins[] = { 10, }; --static int mt7623_rtc_funcs[] = { 1, }; -+static const int mt7623_rtc_pins[] = { 10, }; -+static const int mt7623_rtc_funcs[] = { 1, }; - - /* OTG */ --static int mt7623_otg_iddig0_0_pins[] = { 29, }; --static int mt7623_otg_iddig0_0_funcs[] = { 1, }; --static int mt7623_otg_iddig0_1_pins[] = { 44, }; --static int mt7623_otg_iddig0_1_funcs[] = { 2, }; --static int mt7623_otg_iddig0_2_pins[] = { 236, }; --static int mt7623_otg_iddig0_2_funcs[] = { 2, }; --static int mt7623_otg_iddig1_0_pins[] = { 27, }; --static int mt7623_otg_iddig1_0_funcs[] = { 2, }; --static int mt7623_otg_iddig1_1_pins[] = { 47, }; --static int mt7623_otg_iddig1_1_funcs[] = { 2, }; --static int mt7623_otg_iddig1_2_pins[] = { 238, }; --static int mt7623_otg_iddig1_2_funcs[] = { 2, }; --static int mt7623_otg_drv_vbus0_0_pins[] = { 28, }; --static int mt7623_otg_drv_vbus0_0_funcs[] = { 1, }; --static int mt7623_otg_drv_vbus0_1_pins[] = { 45, }; --static int mt7623_otg_drv_vbus0_1_funcs[] = { 2, }; --static int mt7623_otg_drv_vbus0_2_pins[] = { 237, }; --static int mt7623_otg_drv_vbus0_2_funcs[] = { 2, }; --static int mt7623_otg_drv_vbus1_0_pins[] = { 26, }; --static int mt7623_otg_drv_vbus1_0_funcs[] = { 2, }; --static int mt7623_otg_drv_vbus1_1_pins[] = { 48, }; --static int mt7623_otg_drv_vbus1_1_funcs[] = { 2, }; --static int mt7623_otg_drv_vbus1_2_pins[] = { 239, }; --static int mt7623_otg_drv_vbus1_2_funcs[] = { 2, }; -+static const int mt7623_otg_iddig0_0_pins[] = { 29, }; -+static const int mt7623_otg_iddig0_0_funcs[] = { 1, }; -+static const int mt7623_otg_iddig0_1_pins[] = { 44, }; -+static const int mt7623_otg_iddig0_1_funcs[] = { 2, }; -+static const int mt7623_otg_iddig0_2_pins[] = { 236, }; -+static const int mt7623_otg_iddig0_2_funcs[] = { 2, }; -+static const int mt7623_otg_iddig1_0_pins[] = { 27, }; -+static const int mt7623_otg_iddig1_0_funcs[] = { 2, }; -+static const int mt7623_otg_iddig1_1_pins[] = { 47, }; -+static const int mt7623_otg_iddig1_1_funcs[] = { 2, }; -+static const int mt7623_otg_iddig1_2_pins[] = { 238, }; -+static const int mt7623_otg_iddig1_2_funcs[] = { 2, }; -+static const int mt7623_otg_drv_vbus0_0_pins[] = { 28, }; -+static const int mt7623_otg_drv_vbus0_0_funcs[] = { 1, }; -+static const int mt7623_otg_drv_vbus0_1_pins[] = { 45, }; -+static const int mt7623_otg_drv_vbus0_1_funcs[] = { 2, }; -+static const int mt7623_otg_drv_vbus0_2_pins[] = { 237, }; -+static const int mt7623_otg_drv_vbus0_2_funcs[] = { 2, }; -+static const int mt7623_otg_drv_vbus1_0_pins[] = { 26, }; -+static const int mt7623_otg_drv_vbus1_0_funcs[] = { 2, }; -+static const int mt7623_otg_drv_vbus1_1_pins[] = { 48, }; -+static const int mt7623_otg_drv_vbus1_1_funcs[] = { 2, }; -+static const int mt7623_otg_drv_vbus1_2_pins[] = { 239, }; -+static const int mt7623_otg_drv_vbus1_2_funcs[] = { 2, }; - - /* PCIE */ --static int mt7623_pcie0_0_perst_pins[] = { 208, }; --static int mt7623_pcie0_0_perst_funcs[] = { 3, }; --static int mt7623_pcie0_1_perst_pins[] = { 22, }; --static int mt7623_pcie0_1_perst_funcs[] = { 2, }; --static int mt7623_pcie1_0_perst_pins[] = { 209, }; --static int mt7623_pcie1_0_perst_funcs[] = { 3, }; --static int mt7623_pcie1_1_perst_pins[] = { 23, }; --static int mt7623_pcie1_1_perst_funcs[] = { 2, }; --static int mt7623_pcie2_0_perst_pins[] = { 24, }; --static int mt7623_pcie2_0_perst_funcs[] = { 2, }; --static int mt7623_pcie2_1_perst_pins[] = { 29, }; --static int mt7623_pcie2_1_perst_funcs[] = { 6, }; --static int mt7623_pcie0_0_wake_pins[] = { 28, }; --static int mt7623_pcie0_0_wake_funcs[] = { 6, }; --static int mt7623_pcie0_1_wake_pins[] = { 251, }; --static int mt7623_pcie0_1_wake_funcs[] = { 6, }; --static int mt7623_pcie1_0_wake_pins[] = { 27, }; --static int mt7623_pcie1_0_wake_funcs[] = { 6, }; --static int mt7623_pcie1_1_wake_pins[] = { 253, }; --static int mt7623_pcie1_1_wake_funcs[] = { 6, }; --static int mt7623_pcie2_0_wake_pins[] = { 26, }; --static int mt7623_pcie2_0_wake_funcs[] = { 6, }; --static int mt7623_pcie2_1_wake_pins[] = { 255, }; --static int mt7623_pcie2_1_wake_funcs[] = { 6, }; --static int mt7623_pcie0_clkreq_pins[] = { 250, }; --static int mt7623_pcie0_clkreq_funcs[] = { 6, }; --static int mt7623_pcie1_clkreq_pins[] = { 252, }; --static int mt7623_pcie1_clkreq_funcs[] = { 6, }; --static int mt7623_pcie2_clkreq_pins[] = { 254, }; --static int mt7623_pcie2_clkreq_funcs[] = { 6, }; -+static const int mt7623_pcie0_0_perst_pins[] = { 208, }; -+static const int mt7623_pcie0_0_perst_funcs[] = { 3, }; -+static const int mt7623_pcie0_1_perst_pins[] = { 22, }; -+static const int mt7623_pcie0_1_perst_funcs[] = { 2, }; -+static const int mt7623_pcie1_0_perst_pins[] = { 209, }; -+static const int mt7623_pcie1_0_perst_funcs[] = { 3, }; -+static const int mt7623_pcie1_1_perst_pins[] = { 23, }; -+static const int mt7623_pcie1_1_perst_funcs[] = { 2, }; -+static const int mt7623_pcie2_0_perst_pins[] = { 24, }; -+static const int mt7623_pcie2_0_perst_funcs[] = { 2, }; -+static const int mt7623_pcie2_1_perst_pins[] = { 29, }; -+static const int mt7623_pcie2_1_perst_funcs[] = { 6, }; -+static const int mt7623_pcie0_0_wake_pins[] = { 28, }; -+static const int mt7623_pcie0_0_wake_funcs[] = { 6, }; -+static const int mt7623_pcie0_1_wake_pins[] = { 251, }; -+static const int mt7623_pcie0_1_wake_funcs[] = { 6, }; -+static const int mt7623_pcie1_0_wake_pins[] = { 27, }; -+static const int mt7623_pcie1_0_wake_funcs[] = { 6, }; -+static const int mt7623_pcie1_1_wake_pins[] = { 253, }; -+static const int mt7623_pcie1_1_wake_funcs[] = { 6, }; -+static const int mt7623_pcie2_0_wake_pins[] = { 26, }; -+static const int mt7623_pcie2_0_wake_funcs[] = { 6, }; -+static const int mt7623_pcie2_1_wake_pins[] = { 255, }; -+static const int mt7623_pcie2_1_wake_funcs[] = { 6, }; -+static const int mt7623_pcie0_clkreq_pins[] = { 250, }; -+static const int mt7623_pcie0_clkreq_funcs[] = { 6, }; -+static const int mt7623_pcie1_clkreq_pins[] = { 252, }; -+static const int mt7623_pcie1_clkreq_funcs[] = { 6, }; -+static const int mt7623_pcie2_clkreq_pins[] = { 254, }; -+static const int mt7623_pcie2_clkreq_funcs[] = { 6, }; - /* the pcie_*_rev are only used for MT7623 */ --static int mt7623_pcie0_0_rev_perst_pins[] = { 208, }; --static int mt7623_pcie0_0_rev_perst_funcs[] = { 11, }; --static int mt7623_pcie0_1_rev_perst_pins[] = { 22, }; --static int mt7623_pcie0_1_rev_perst_funcs[] = { 10, }; --static int mt7623_pcie1_0_rev_perst_pins[] = { 209, }; --static int mt7623_pcie1_0_rev_perst_funcs[] = { 11, }; --static int mt7623_pcie1_1_rev_perst_pins[] = { 23, }; --static int mt7623_pcie1_1_rev_perst_funcs[] = { 10, }; --static int mt7623_pcie2_0_rev_perst_pins[] = { 24, }; --static int mt7623_pcie2_0_rev_perst_funcs[] = { 11, }; --static int mt7623_pcie2_1_rev_perst_pins[] = { 29, }; --static int mt7623_pcie2_1_rev_perst_funcs[] = { 14, }; -+static const int mt7623_pcie0_0_rev_perst_pins[] = { 208, }; -+static const int mt7623_pcie0_0_rev_perst_funcs[] = { 11, }; -+static const int mt7623_pcie0_1_rev_perst_pins[] = { 22, }; -+static const int mt7623_pcie0_1_rev_perst_funcs[] = { 10, }; -+static const int mt7623_pcie1_0_rev_perst_pins[] = { 209, }; -+static const int mt7623_pcie1_0_rev_perst_funcs[] = { 11, }; -+static const int mt7623_pcie1_1_rev_perst_pins[] = { 23, }; -+static const int mt7623_pcie1_1_rev_perst_funcs[] = { 10, }; -+static const int mt7623_pcie2_0_rev_perst_pins[] = { 24, }; -+static const int mt7623_pcie2_0_rev_perst_funcs[] = { 11, }; -+static const int mt7623_pcie2_1_rev_perst_pins[] = { 29, }; -+static const int mt7623_pcie2_1_rev_perst_funcs[] = { 14, }; - - /* PCM */ --static int mt7623_pcm_clk_0_pins[] = { 18, }; --static int mt7623_pcm_clk_0_funcs[] = { 1, }; --static int mt7623_pcm_clk_1_pins[] = { 17, }; --static int mt7623_pcm_clk_1_funcs[] = { 3, }; --static int mt7623_pcm_clk_2_pins[] = { 35, }; --static int mt7623_pcm_clk_2_funcs[] = { 3, }; --static int mt7623_pcm_clk_3_pins[] = { 50, }; --static int mt7623_pcm_clk_3_funcs[] = { 3, }; --static int mt7623_pcm_clk_4_pins[] = { 74, }; --static int mt7623_pcm_clk_4_funcs[] = { 3, }; --static int mt7623_pcm_clk_5_pins[] = { 191, }; --static int mt7623_pcm_clk_5_funcs[] = { 3, }; --static int mt7623_pcm_clk_6_pins[] = { 196, }; --static int mt7623_pcm_clk_6_funcs[] = { 3, }; --static int mt7623_pcm_sync_0_pins[] = { 19, }; --static int mt7623_pcm_sync_0_funcs[] = { 1, }; --static int mt7623_pcm_sync_1_pins[] = { 30, }; --static int mt7623_pcm_sync_1_funcs[] = { 3, }; --static int mt7623_pcm_sync_2_pins[] = { 36, }; --static int mt7623_pcm_sync_2_funcs[] = { 3, }; --static int mt7623_pcm_sync_3_pins[] = { 52, }; --static int mt7623_pcm_sync_3_funcs[] = { 31, }; --static int mt7623_pcm_sync_4_pins[] = { 73, }; --static int mt7623_pcm_sync_4_funcs[] = { 3, }; --static int mt7623_pcm_sync_5_pins[] = { 192, }; --static int mt7623_pcm_sync_5_funcs[] = { 3, }; --static int mt7623_pcm_sync_6_pins[] = { 197, }; --static int mt7623_pcm_sync_6_funcs[] = { 3, }; --static int mt7623_pcm_rx_0_pins[] = { 20, }; --static int mt7623_pcm_rx_0_funcs[] = { 1, }; --static int mt7623_pcm_rx_1_pins[] = { 16, }; --static int mt7623_pcm_rx_1_funcs[] = { 3, }; --static int mt7623_pcm_rx_2_pins[] = { 34, }; --static int mt7623_pcm_rx_2_funcs[] = { 3, }; --static int mt7623_pcm_rx_3_pins[] = { 51, }; --static int mt7623_pcm_rx_3_funcs[] = { 3, }; --static int mt7623_pcm_rx_4_pins[] = { 72, }; --static int mt7623_pcm_rx_4_funcs[] = { 3, }; --static int mt7623_pcm_rx_5_pins[] = { 190, }; --static int mt7623_pcm_rx_5_funcs[] = { 3, }; --static int mt7623_pcm_rx_6_pins[] = { 195, }; --static int mt7623_pcm_rx_6_funcs[] = { 3, }; --static int mt7623_pcm_tx_0_pins[] = { 21, }; --static int mt7623_pcm_tx_0_funcs[] = { 1, }; --static int mt7623_pcm_tx_1_pins[] = { 32, }; --static int mt7623_pcm_tx_1_funcs[] = { 3, }; --static int mt7623_pcm_tx_2_pins[] = { 33, }; --static int mt7623_pcm_tx_2_funcs[] = { 3, }; --static int mt7623_pcm_tx_3_pins[] = { 38, }; --static int mt7623_pcm_tx_3_funcs[] = { 3, }; --static int mt7623_pcm_tx_4_pins[] = { 49, }; --static int mt7623_pcm_tx_4_funcs[] = { 3, }; --static int mt7623_pcm_tx_5_pins[] = { 189, }; --static int mt7623_pcm_tx_5_funcs[] = { 3, }; --static int mt7623_pcm_tx_6_pins[] = { 194, }; --static int mt7623_pcm_tx_6_funcs[] = { 3, }; -+static const int mt7623_pcm_clk_0_pins[] = { 18, }; -+static const int mt7623_pcm_clk_0_funcs[] = { 1, }; -+static const int mt7623_pcm_clk_1_pins[] = { 17, }; -+static const int mt7623_pcm_clk_1_funcs[] = { 3, }; -+static const int mt7623_pcm_clk_2_pins[] = { 35, }; -+static const int mt7623_pcm_clk_2_funcs[] = { 3, }; -+static const int mt7623_pcm_clk_3_pins[] = { 50, }; -+static const int mt7623_pcm_clk_3_funcs[] = { 3, }; -+static const int mt7623_pcm_clk_4_pins[] = { 74, }; -+static const int mt7623_pcm_clk_4_funcs[] = { 3, }; -+static const int mt7623_pcm_clk_5_pins[] = { 191, }; -+static const int mt7623_pcm_clk_5_funcs[] = { 3, }; -+static const int mt7623_pcm_clk_6_pins[] = { 196, }; -+static const int mt7623_pcm_clk_6_funcs[] = { 3, }; -+static const int mt7623_pcm_sync_0_pins[] = { 19, }; -+static const int mt7623_pcm_sync_0_funcs[] = { 1, }; -+static const int mt7623_pcm_sync_1_pins[] = { 30, }; -+static const int mt7623_pcm_sync_1_funcs[] = { 3, }; -+static const int mt7623_pcm_sync_2_pins[] = { 36, }; -+static const int mt7623_pcm_sync_2_funcs[] = { 3, }; -+static const int mt7623_pcm_sync_3_pins[] = { 52, }; -+static const int mt7623_pcm_sync_3_funcs[] = { 31, }; -+static const int mt7623_pcm_sync_4_pins[] = { 73, }; -+static const int mt7623_pcm_sync_4_funcs[] = { 3, }; -+static const int mt7623_pcm_sync_5_pins[] = { 192, }; -+static const int mt7623_pcm_sync_5_funcs[] = { 3, }; -+static const int mt7623_pcm_sync_6_pins[] = { 197, }; -+static const int mt7623_pcm_sync_6_funcs[] = { 3, }; -+static const int mt7623_pcm_rx_0_pins[] = { 20, }; -+static const int mt7623_pcm_rx_0_funcs[] = { 1, }; -+static const int mt7623_pcm_rx_1_pins[] = { 16, }; -+static const int mt7623_pcm_rx_1_funcs[] = { 3, }; -+static const int mt7623_pcm_rx_2_pins[] = { 34, }; -+static const int mt7623_pcm_rx_2_funcs[] = { 3, }; -+static const int mt7623_pcm_rx_3_pins[] = { 51, }; -+static const int mt7623_pcm_rx_3_funcs[] = { 3, }; -+static const int mt7623_pcm_rx_4_pins[] = { 72, }; -+static const int mt7623_pcm_rx_4_funcs[] = { 3, }; -+static const int mt7623_pcm_rx_5_pins[] = { 190, }; -+static const int mt7623_pcm_rx_5_funcs[] = { 3, }; -+static const int mt7623_pcm_rx_6_pins[] = { 195, }; -+static const int mt7623_pcm_rx_6_funcs[] = { 3, }; -+static const int mt7623_pcm_tx_0_pins[] = { 21, }; -+static const int mt7623_pcm_tx_0_funcs[] = { 1, }; -+static const int mt7623_pcm_tx_1_pins[] = { 32, }; -+static const int mt7623_pcm_tx_1_funcs[] = { 3, }; -+static const int mt7623_pcm_tx_2_pins[] = { 33, }; -+static const int mt7623_pcm_tx_2_funcs[] = { 3, }; -+static const int mt7623_pcm_tx_3_pins[] = { 38, }; -+static const int mt7623_pcm_tx_3_funcs[] = { 3, }; -+static const int mt7623_pcm_tx_4_pins[] = { 49, }; -+static const int mt7623_pcm_tx_4_funcs[] = { 3, }; -+static const int mt7623_pcm_tx_5_pins[] = { 189, }; -+static const int mt7623_pcm_tx_5_funcs[] = { 3, }; -+static const int mt7623_pcm_tx_6_pins[] = { 194, }; -+static const int mt7623_pcm_tx_6_funcs[] = { 3, }; - - /* PWM */ --static int mt7623_pwm_ch1_0_pins[] = { 203, }; --static int mt7623_pwm_ch1_0_funcs[] = { 1, }; --static int mt7623_pwm_ch1_1_pins[] = { 208, }; --static int mt7623_pwm_ch1_1_funcs[] = { 2, }; --static int mt7623_pwm_ch1_2_pins[] = { 72, }; --static int mt7623_pwm_ch1_2_funcs[] = { 4, }; --static int mt7623_pwm_ch1_3_pins[] = { 88, }; --static int mt7623_pwm_ch1_3_funcs[] = { 3, }; --static int mt7623_pwm_ch1_4_pins[] = { 108, }; --static int mt7623_pwm_ch1_4_funcs[] = { 3, }; --static int mt7623_pwm_ch2_0_pins[] = { 204, }; --static int mt7623_pwm_ch2_0_funcs[] = { 1, }; --static int mt7623_pwm_ch2_1_pins[] = { 53, }; --static int mt7623_pwm_ch2_1_funcs[] = { 5, }; --static int mt7623_pwm_ch2_2_pins[] = { 88, }; --static int mt7623_pwm_ch2_2_funcs[] = { 6, }; --static int mt7623_pwm_ch2_3_pins[] = { 108, }; --static int mt7623_pwm_ch2_3_funcs[] = { 6, }; --static int mt7623_pwm_ch2_4_pins[] = { 209, }; --static int mt7623_pwm_ch2_4_funcs[] = { 5, }; --static int mt7623_pwm_ch3_0_pins[] = { 205, }; --static int mt7623_pwm_ch3_0_funcs[] = { 1, }; --static int mt7623_pwm_ch3_1_pins[] = { 55, }; --static int mt7623_pwm_ch3_1_funcs[] = { 5, }; --static int mt7623_pwm_ch3_2_pins[] = { 89, }; --static int mt7623_pwm_ch3_2_funcs[] = { 6, }; --static int mt7623_pwm_ch3_3_pins[] = { 109, }; --static int mt7623_pwm_ch3_3_funcs[] = { 6, }; --static int mt7623_pwm_ch4_0_pins[] = { 206, }; --static int mt7623_pwm_ch4_0_funcs[] = { 1, }; --static int mt7623_pwm_ch4_1_pins[] = { 90, }; --static int mt7623_pwm_ch4_1_funcs[] = { 6, }; --static int mt7623_pwm_ch4_2_pins[] = { 110, }; --static int mt7623_pwm_ch4_2_funcs[] = { 6, }; --static int mt7623_pwm_ch4_3_pins[] = { 124, }; --static int mt7623_pwm_ch4_3_funcs[] = { 5, }; --static int mt7623_pwm_ch5_0_pins[] = { 207, }; --static int mt7623_pwm_ch5_0_funcs[] = { 1, }; --static int mt7623_pwm_ch5_1_pins[] = { 125, }; --static int mt7623_pwm_ch5_1_funcs[] = { 5, }; -+static const int mt7623_pwm_ch1_0_pins[] = { 203, }; -+static const int mt7623_pwm_ch1_0_funcs[] = { 1, }; -+static const int mt7623_pwm_ch1_1_pins[] = { 208, }; -+static const int mt7623_pwm_ch1_1_funcs[] = { 2, }; -+static const int mt7623_pwm_ch1_2_pins[] = { 72, }; -+static const int mt7623_pwm_ch1_2_funcs[] = { 4, }; -+static const int mt7623_pwm_ch1_3_pins[] = { 88, }; -+static const int mt7623_pwm_ch1_3_funcs[] = { 3, }; -+static const int mt7623_pwm_ch1_4_pins[] = { 108, }; -+static const int mt7623_pwm_ch1_4_funcs[] = { 3, }; -+static const int mt7623_pwm_ch2_0_pins[] = { 204, }; -+static const int mt7623_pwm_ch2_0_funcs[] = { 1, }; -+static const int mt7623_pwm_ch2_1_pins[] = { 53, }; -+static const int mt7623_pwm_ch2_1_funcs[] = { 5, }; -+static const int mt7623_pwm_ch2_2_pins[] = { 88, }; -+static const int mt7623_pwm_ch2_2_funcs[] = { 6, }; -+static const int mt7623_pwm_ch2_3_pins[] = { 108, }; -+static const int mt7623_pwm_ch2_3_funcs[] = { 6, }; -+static const int mt7623_pwm_ch2_4_pins[] = { 209, }; -+static const int mt7623_pwm_ch2_4_funcs[] = { 5, }; -+static const int mt7623_pwm_ch3_0_pins[] = { 205, }; -+static const int mt7623_pwm_ch3_0_funcs[] = { 1, }; -+static const int mt7623_pwm_ch3_1_pins[] = { 55, }; -+static const int mt7623_pwm_ch3_1_funcs[] = { 5, }; -+static const int mt7623_pwm_ch3_2_pins[] = { 89, }; -+static const int mt7623_pwm_ch3_2_funcs[] = { 6, }; -+static const int mt7623_pwm_ch3_3_pins[] = { 109, }; -+static const int mt7623_pwm_ch3_3_funcs[] = { 6, }; -+static const int mt7623_pwm_ch4_0_pins[] = { 206, }; -+static const int mt7623_pwm_ch4_0_funcs[] = { 1, }; -+static const int mt7623_pwm_ch4_1_pins[] = { 90, }; -+static const int mt7623_pwm_ch4_1_funcs[] = { 6, }; -+static const int mt7623_pwm_ch4_2_pins[] = { 110, }; -+static const int mt7623_pwm_ch4_2_funcs[] = { 6, }; -+static const int mt7623_pwm_ch4_3_pins[] = { 124, }; -+static const int mt7623_pwm_ch4_3_funcs[] = { 5, }; -+static const int mt7623_pwm_ch5_0_pins[] = { 207, }; -+static const int mt7623_pwm_ch5_0_funcs[] = { 1, }; -+static const int mt7623_pwm_ch5_1_pins[] = { 125, }; -+static const int mt7623_pwm_ch5_1_funcs[] = { 5, }; - - /* PWRAP */ --static int mt7623_pwrap_pins[] = { 0, 1, 2, 3, 4, 5, 6, }; --static int mt7623_pwrap_funcs[] = { 1, 1, 1, 1, 1, 1, 1, }; -+static const int mt7623_pwrap_pins[] = { 0, 1, 2, 3, 4, 5, 6, }; -+static const int mt7623_pwrap_funcs[] = { 1, 1, 1, 1, 1, 1, 1, }; - - /* SPDIF */ --static int mt7623_spdif_in0_0_pins[] = { 56, }; --static int mt7623_spdif_in0_0_funcs[] = { 3, }; --static int mt7623_spdif_in0_1_pins[] = { 201, }; --static int mt7623_spdif_in0_1_funcs[] = { 1, }; --static int mt7623_spdif_in1_0_pins[] = { 54, }; --static int mt7623_spdif_in1_0_funcs[] = { 3, }; --static int mt7623_spdif_in1_1_pins[] = { 202, }; --static int mt7623_spdif_in1_1_funcs[] = { 1, }; --static int mt7623_spdif_out_pins[] = { 202, }; --static int mt7623_spdif_out_funcs[] = { 1, }; -+static const int mt7623_spdif_in0_0_pins[] = { 56, }; -+static const int mt7623_spdif_in0_0_funcs[] = { 3, }; -+static const int mt7623_spdif_in0_1_pins[] = { 201, }; -+static const int mt7623_spdif_in0_1_funcs[] = { 1, }; -+static const int mt7623_spdif_in1_0_pins[] = { 54, }; -+static const int mt7623_spdif_in1_0_funcs[] = { 3, }; -+static const int mt7623_spdif_in1_1_pins[] = { 202, }; -+static const int mt7623_spdif_in1_1_funcs[] = { 1, }; -+static const int mt7623_spdif_out_pins[] = { 202, }; -+static const int mt7623_spdif_out_funcs[] = { 1, }; - - /* SPI */ --static int mt7623_spi0_pins[] = { 53, 54, 55, 56, }; --static int mt7623_spi0_funcs[] = { 1, 1, 1, 1, }; --static int mt7623_spi1_pins[] = { 7, 199, 8, 9, }; --static int mt7623_spi1_funcs[] = { 1, 1, 1, 1, }; --static int mt7623_spi2_pins[] = { 101, 104, 102, 103, }; --static int mt7623_spi2_funcs[] = { 1, 1, 1, 1, }; -+static const int mt7623_spi0_pins[] = { 53, 54, 55, 56, }; -+static const int mt7623_spi0_funcs[] = { 1, 1, 1, 1, }; -+static const int mt7623_spi1_pins[] = { 7, 199, 8, 9, }; -+static const int mt7623_spi1_funcs[] = { 1, 1, 1, 1, }; -+static const int mt7623_spi2_pins[] = { 101, 104, 102, 103, }; -+static const int mt7623_spi2_funcs[] = { 1, 1, 1, 1, }; - - /* UART */ --static int mt7623_uart0_0_txd_rxd_pins[] = { 79, 80, }; --static int mt7623_uart0_0_txd_rxd_funcs[] = { 1, 1, }; --static int mt7623_uart0_1_txd_rxd_pins[] = { 87, 88, }; --static int mt7623_uart0_1_txd_rxd_funcs[] = { 5, 5, }; --static int mt7623_uart0_2_txd_rxd_pins[] = { 107, 108, }; --static int mt7623_uart0_2_txd_rxd_funcs[] = { 5, 5, }; --static int mt7623_uart0_3_txd_rxd_pins[] = { 123, 122, }; --static int mt7623_uart0_3_txd_rxd_funcs[] = { 5, 5, }; --static int mt7623_uart0_rts_cts_pins[] = { 22, 23, }; --static int mt7623_uart0_rts_cts_funcs[] = { 1, 1, }; --static int mt7623_uart1_0_txd_rxd_pins[] = { 81, 82, }; --static int mt7623_uart1_0_txd_rxd_funcs[] = { 1, 1, }; --static int mt7623_uart1_1_txd_rxd_pins[] = { 89, 90, }; --static int mt7623_uart1_1_txd_rxd_funcs[] = { 5, 5, }; --static int mt7623_uart1_2_txd_rxd_pins[] = { 109, 110, }; --static int mt7623_uart1_2_txd_rxd_funcs[] = { 5, 5, }; --static int mt7623_uart1_rts_cts_pins[] = { 24, 25, }; --static int mt7623_uart1_rts_cts_funcs[] = { 1, 1, }; --static int mt7623_uart2_0_txd_rxd_pins[] = { 14, 15, }; --static int mt7623_uart2_0_txd_rxd_funcs[] = { 1, 1, }; --static int mt7623_uart2_1_txd_rxd_pins[] = { 200, 201, }; --static int mt7623_uart2_1_txd_rxd_funcs[] = { 6, 6, }; --static int mt7623_uart2_rts_cts_pins[] = { 242, 243, }; --static int mt7623_uart2_rts_cts_funcs[] = { 1, 1, }; --static int mt7623_uart3_txd_rxd_pins[] = { 242, 243, }; --static int mt7623_uart3_txd_rxd_funcs[] = { 2, 2, }; --static int mt7623_uart3_rts_cts_pins[] = { 26, 27, }; --static int mt7623_uart3_rts_cts_funcs[] = { 1, 1, }; -+static const int mt7623_uart0_0_txd_rxd_pins[] = { 79, 80, }; -+static const int mt7623_uart0_0_txd_rxd_funcs[] = { 1, 1, }; -+static const int mt7623_uart0_1_txd_rxd_pins[] = { 87, 88, }; -+static const int mt7623_uart0_1_txd_rxd_funcs[] = { 5, 5, }; -+static const int mt7623_uart0_2_txd_rxd_pins[] = { 107, 108, }; -+static const int mt7623_uart0_2_txd_rxd_funcs[] = { 5, 5, }; -+static const int mt7623_uart0_3_txd_rxd_pins[] = { 123, 122, }; -+static const int mt7623_uart0_3_txd_rxd_funcs[] = { 5, 5, }; -+static const int mt7623_uart0_rts_cts_pins[] = { 22, 23, }; -+static const int mt7623_uart0_rts_cts_funcs[] = { 1, 1, }; -+static const int mt7623_uart1_0_txd_rxd_pins[] = { 81, 82, }; -+static const int mt7623_uart1_0_txd_rxd_funcs[] = { 1, 1, }; -+static const int mt7623_uart1_1_txd_rxd_pins[] = { 89, 90, }; -+static const int mt7623_uart1_1_txd_rxd_funcs[] = { 5, 5, }; -+static const int mt7623_uart1_2_txd_rxd_pins[] = { 109, 110, }; -+static const int mt7623_uart1_2_txd_rxd_funcs[] = { 5, 5, }; -+static const int mt7623_uart1_rts_cts_pins[] = { 24, 25, }; -+static const int mt7623_uart1_rts_cts_funcs[] = { 1, 1, }; -+static const int mt7623_uart2_0_txd_rxd_pins[] = { 14, 15, }; -+static const int mt7623_uart2_0_txd_rxd_funcs[] = { 1, 1, }; -+static const int mt7623_uart2_1_txd_rxd_pins[] = { 200, 201, }; -+static const int mt7623_uart2_1_txd_rxd_funcs[] = { 6, 6, }; -+static const int mt7623_uart2_rts_cts_pins[] = { 242, 243, }; -+static const int mt7623_uart2_rts_cts_funcs[] = { 1, 1, }; -+static const int mt7623_uart3_txd_rxd_pins[] = { 242, 243, }; -+static const int mt7623_uart3_txd_rxd_funcs[] = { 2, 2, }; -+static const int mt7623_uart3_rts_cts_pins[] = { 26, 27, }; -+static const int mt7623_uart3_rts_cts_funcs[] = { 1, 1, }; - - /* Watchdog */ --static int mt7623_watchdog_0_pins[] = { 11, }; --static int mt7623_watchdog_0_funcs[] = { 1, }; --static int mt7623_watchdog_1_pins[] = { 121, }; --static int mt7623_watchdog_1_funcs[] = { 5, }; -+static const int mt7623_watchdog_0_pins[] = { 11, }; -+static const int mt7623_watchdog_0_funcs[] = { 1, }; -+static const int mt7623_watchdog_1_pins[] = { 121, }; -+static const int mt7623_watchdog_1_funcs[] = { 5, }; - - static const struct mtk_group_desc mt7623_groups[] = { - PINCTRL_PIN_GROUP("aud_ext_clk0", mt7623_aud_ext_clk0), -@@ -1362,7 +1362,7 @@ static const struct mtk_function_desc mt - {"watchdog", mt7623_wdt_groups, ARRAY_SIZE(mt7623_wdt_groups)}, - }; - --static struct mtk_pinctrl_soc mt7623_data = { -+static const struct mtk_pinctrl_soc mt7623_data = { - .name = "mt7623_pinctrl", - .reg_cal = mt7623_reg_cals, - .pins = mt7623_pins, ---- a/drivers/pinctrl/mediatek/pinctrl-mt7629.c -+++ b/drivers/pinctrl/mediatek/pinctrl-mt7629.c -@@ -180,118 +180,118 @@ static const struct mtk_pin_desc mt7629_ - */ - - /* WF 5G */ --static int mt7629_wf0_5g_pins[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, }; --static int mt7629_wf0_5g_funcs[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; -+static const int mt7629_wf0_5g_pins[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, }; -+static const int mt7629_wf0_5g_funcs[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; - - /* LED for EPHY */ --static int mt7629_ephy_leds_pins[] = { 12, 13, 14, 15, 16, 17, 18, }; --static int mt7629_ephy_leds_funcs[] = { 1, 1, 1, 1, 1, 1, 1, }; --static int mt7629_ephy_led0_pins[] = { 12, }; --static int mt7629_ephy_led0_funcs[] = { 1, }; --static int mt7629_ephy_led1_pins[] = { 13, }; --static int mt7629_ephy_led1_funcs[] = { 1, }; --static int mt7629_ephy_led2_pins[] = { 14, }; --static int mt7629_ephy_led2_funcs[] = { 1, }; --static int mt7629_ephy_led3_pins[] = { 15, }; --static int mt7629_ephy_led3_funcs[] = { 1, }; --static int mt7629_ephy_led4_pins[] = { 16, }; --static int mt7629_ephy_led4_funcs[] = { 1, }; --static int mt7629_wf2g_led_pins[] = { 17, }; --static int mt7629_wf2g_led_funcs[] = { 1, }; --static int mt7629_wf5g_led_pins[] = { 18, }; --static int mt7629_wf5g_led_funcs[] = { 1, }; -+static const int mt7629_ephy_leds_pins[] = { 12, 13, 14, 15, 16, 17, 18, }; -+static const int mt7629_ephy_leds_funcs[] = { 1, 1, 1, 1, 1, 1, 1, }; -+static const int mt7629_ephy_led0_pins[] = { 12, }; -+static const int mt7629_ephy_led0_funcs[] = { 1, }; -+static const int mt7629_ephy_led1_pins[] = { 13, }; -+static const int mt7629_ephy_led1_funcs[] = { 1, }; -+static const int mt7629_ephy_led2_pins[] = { 14, }; -+static const int mt7629_ephy_led2_funcs[] = { 1, }; -+static const int mt7629_ephy_led3_pins[] = { 15, }; -+static const int mt7629_ephy_led3_funcs[] = { 1, }; -+static const int mt7629_ephy_led4_pins[] = { 16, }; -+static const int mt7629_ephy_led4_funcs[] = { 1, }; -+static const int mt7629_wf2g_led_pins[] = { 17, }; -+static const int mt7629_wf2g_led_funcs[] = { 1, }; -+static const int mt7629_wf5g_led_pins[] = { 18, }; -+static const int mt7629_wf5g_led_funcs[] = { 1, }; - - /* LED for EPHY used as JTAG */ --static int mt7629_ephy_leds_jtag_pins[] = { 12, 13, 14, 15, 16, }; --static int mt7629_ephy_leds_jtag_funcs[] = { 7, 7, 7, 7, 7, }; -+static const int mt7629_ephy_leds_jtag_pins[] = { 12, 13, 14, 15, 16, }; -+static const int mt7629_ephy_leds_jtag_funcs[] = { 7, 7, 7, 7, 7, }; - - /* Watchdog */ --static int mt7629_watchdog_pins[] = { 11, }; --static int mt7629_watchdog_funcs[] = { 1, }; -+static const int mt7629_watchdog_pins[] = { 11, }; -+static const int mt7629_watchdog_funcs[] = { 1, }; - - /* LED for GPHY */ --static int mt7629_gphy_leds_0_pins[] = { 21, 22, 23, }; --static int mt7629_gphy_leds_0_funcs[] = { 2, 2, 2, }; --static int mt7629_gphy_led1_0_pins[] = { 21, }; --static int mt7629_gphy_led1_0_funcs[] = { 2, }; --static int mt7629_gphy_led2_0_pins[] = { 22, }; --static int mt7629_gphy_led2_0_funcs[] = { 2, }; --static int mt7629_gphy_led3_0_pins[] = { 23, }; --static int mt7629_gphy_led3_0_funcs[] = { 2, }; --static int mt7629_gphy_leds_1_pins[] = { 57, 58, 59, }; --static int mt7629_gphy_leds_1_funcs[] = { 1, 1, 1, }; --static int mt7629_gphy_led1_1_pins[] = { 57, }; --static int mt7629_gphy_led1_1_funcs[] = { 1, }; --static int mt7629_gphy_led2_1_pins[] = { 58, }; --static int mt7629_gphy_led2_1_funcs[] = { 1, }; --static int mt7629_gphy_led3_1_pins[] = { 59, }; --static int mt7629_gphy_led3_1_funcs[] = { 1, }; -+static const int mt7629_gphy_leds_0_pins[] = { 21, 22, 23, }; -+static const int mt7629_gphy_leds_0_funcs[] = { 2, 2, 2, }; -+static const int mt7629_gphy_led1_0_pins[] = { 21, }; -+static const int mt7629_gphy_led1_0_funcs[] = { 2, }; -+static const int mt7629_gphy_led2_0_pins[] = { 22, }; -+static const int mt7629_gphy_led2_0_funcs[] = { 2, }; -+static const int mt7629_gphy_led3_0_pins[] = { 23, }; -+static const int mt7629_gphy_led3_0_funcs[] = { 2, }; -+static const int mt7629_gphy_leds_1_pins[] = { 57, 58, 59, }; -+static const int mt7629_gphy_leds_1_funcs[] = { 1, 1, 1, }; -+static const int mt7629_gphy_led1_1_pins[] = { 57, }; -+static const int mt7629_gphy_led1_1_funcs[] = { 1, }; -+static const int mt7629_gphy_led2_1_pins[] = { 58, }; -+static const int mt7629_gphy_led2_1_funcs[] = { 1, }; -+static const int mt7629_gphy_led3_1_pins[] = { 59, }; -+static const int mt7629_gphy_led3_1_funcs[] = { 1, }; - - /* I2C */ --static int mt7629_i2c_0_pins[] = { 19, 20, }; --static int mt7629_i2c_0_funcs[] = { 1, 1, }; --static int mt7629_i2c_1_pins[] = { 53, 54, }; --static int mt7629_i2c_1_funcs[] = { 1, 1, }; -+static const int mt7629_i2c_0_pins[] = { 19, 20, }; -+static const int mt7629_i2c_0_funcs[] = { 1, 1, }; -+static const int mt7629_i2c_1_pins[] = { 53, 54, }; -+static const int mt7629_i2c_1_funcs[] = { 1, 1, }; - - /* SPI */ --static int mt7629_spi_0_pins[] = { 21, 22, 23, 24, }; --static int mt7629_spi_0_funcs[] = { 1, 1, 1, 1, }; --static int mt7629_spi_1_pins[] = { 62, 63, 64, 65, }; --static int mt7629_spi_1_funcs[] = { 1, 1, 1, 1, }; --static int mt7629_spi_wp_pins[] = { 66, }; --static int mt7629_spi_wp_funcs[] = { 1, }; --static int mt7629_spi_hold_pins[] = { 67, }; --static int mt7629_spi_hold_funcs[] = { 1, }; -+static const int mt7629_spi_0_pins[] = { 21, 22, 23, 24, }; -+static const int mt7629_spi_0_funcs[] = { 1, 1, 1, 1, }; -+static const int mt7629_spi_1_pins[] = { 62, 63, 64, 65, }; -+static const int mt7629_spi_1_funcs[] = { 1, 1, 1, 1, }; -+static const int mt7629_spi_wp_pins[] = { 66, }; -+static const int mt7629_spi_wp_funcs[] = { 1, }; -+static const int mt7629_spi_hold_pins[] = { 67, }; -+static const int mt7629_spi_hold_funcs[] = { 1, }; - - /* UART */ --static int mt7629_uart1_0_txd_rxd_pins[] = { 25, 26, }; --static int mt7629_uart1_0_txd_rxd_funcs[] = { 1, 1, }; --static int mt7629_uart1_1_txd_rxd_pins[] = { 53, 54, }; --static int mt7629_uart1_1_txd_rxd_funcs[] = { 2, 2, }; --static int mt7629_uart2_0_txd_rxd_pins[] = { 29, 30, }; --static int mt7629_uart2_0_txd_rxd_funcs[] = { 1, 1, }; --static int mt7629_uart2_1_txd_rxd_pins[] = { 57, 58, }; --static int mt7629_uart2_1_txd_rxd_funcs[] = { 2, 2, }; --static int mt7629_uart1_0_cts_rts_pins[] = { 27, 28, }; --static int mt7629_uart1_0_cts_rts_funcs[] = { 1, 1, }; --static int mt7629_uart1_1_cts_rts_pins[] = { 55, 56, }; --static int mt7629_uart1_1_cts_rts_funcs[] = { 2, 2, }; --static int mt7629_uart2_0_cts_rts_pins[] = { 31, 32, }; --static int mt7629_uart2_0_cts_rts_funcs[] = { 1, 1, }; --static int mt7629_uart2_1_cts_rts_pins[] = { 59, 60, }; --static int mt7629_uart2_1_cts_rts_funcs[] = { 2, 2, }; --static int mt7629_uart0_txd_rxd_pins[] = { 68, 69, }; --static int mt7629_uart0_txd_rxd_funcs[] = { 1, 1, }; -+static const int mt7629_uart1_0_txd_rxd_pins[] = { 25, 26, }; -+static const int mt7629_uart1_0_txd_rxd_funcs[] = { 1, 1, }; -+static const int mt7629_uart1_1_txd_rxd_pins[] = { 53, 54, }; -+static const int mt7629_uart1_1_txd_rxd_funcs[] = { 2, 2, }; -+static const int mt7629_uart2_0_txd_rxd_pins[] = { 29, 30, }; -+static const int mt7629_uart2_0_txd_rxd_funcs[] = { 1, 1, }; -+static const int mt7629_uart2_1_txd_rxd_pins[] = { 57, 58, }; -+static const int mt7629_uart2_1_txd_rxd_funcs[] = { 2, 2, }; -+static const int mt7629_uart1_0_cts_rts_pins[] = { 27, 28, }; -+static const int mt7629_uart1_0_cts_rts_funcs[] = { 1, 1, }; -+static const int mt7629_uart1_1_cts_rts_pins[] = { 55, 56, }; -+static const int mt7629_uart1_1_cts_rts_funcs[] = { 2, 2, }; -+static const int mt7629_uart2_0_cts_rts_pins[] = { 31, 32, }; -+static const int mt7629_uart2_0_cts_rts_funcs[] = { 1, 1, }; -+static const int mt7629_uart2_1_cts_rts_pins[] = { 59, 60, }; -+static const int mt7629_uart2_1_cts_rts_funcs[] = { 2, 2, }; -+static const int mt7629_uart0_txd_rxd_pins[] = { 68, 69, }; -+static const int mt7629_uart0_txd_rxd_funcs[] = { 1, 1, }; - - /* MDC/MDIO */ --static int mt7629_mdc_mdio_pins[] = { 49, 50, }; --static int mt7629_mdc_mdio_funcs[] = { 1, 1, }; -+static const int mt7629_mdc_mdio_pins[] = { 49, 50, }; -+static const int mt7629_mdc_mdio_funcs[] = { 1, 1, }; - - /* PCIE */ --static int mt7629_pcie_pereset_pins[] = { 51, }; --static int mt7629_pcie_pereset_funcs[] = { 1, }; --static int mt7629_pcie_wake_pins[] = { 55, }; --static int mt7629_pcie_wake_funcs[] = { 1, }; --static int mt7629_pcie_clkreq_pins[] = { 56, }; --static int mt7629_pcie_clkreq_funcs[] = { 1, }; -+static const int mt7629_pcie_pereset_pins[] = { 51, }; -+static const int mt7629_pcie_pereset_funcs[] = { 1, }; -+static const int mt7629_pcie_wake_pins[] = { 55, }; -+static const int mt7629_pcie_wake_funcs[] = { 1, }; -+static const int mt7629_pcie_clkreq_pins[] = { 56, }; -+static const int mt7629_pcie_clkreq_funcs[] = { 1, }; - - /* PWM */ --static int mt7629_pwm_0_pins[] = { 52, }; --static int mt7629_pwm_0_funcs[] = { 1, }; --static int mt7629_pwm_1_pins[] = { 61, }; --static int mt7629_pwm_1_funcs[] = { 2, }; -+static const int mt7629_pwm_0_pins[] = { 52, }; -+static const int mt7629_pwm_0_funcs[] = { 1, }; -+static const int mt7629_pwm_1_pins[] = { 61, }; -+static const int mt7629_pwm_1_funcs[] = { 2, }; - - /* WF 2G */ --static int mt7629_wf0_2g_pins[] = { 70, 71, 72, 73, 74, 75, 76, 77, 78, }; --static int mt7629_wf0_2g_funcs[] = { 1, 1, 1, 1, 1, 1, 1, 1, }; -+static const int mt7629_wf0_2g_pins[] = { 70, 71, 72, 73, 74, 75, 76, 77, 78, }; -+static const int mt7629_wf0_2g_funcs[] = { 1, 1, 1, 1, 1, 1, 1, 1, }; - - /* SNFI */ --static int mt7629_snfi_pins[] = { 62, 63, 64, 65, 66, 67 }; --static int mt7629_snfi_funcs[] = { 2, 2, 2, 2, 2, 2 }; -+static const int mt7629_snfi_pins[] = { 62, 63, 64, 65, 66, 67 }; -+static const int mt7629_snfi_funcs[] = { 2, 2, 2, 2, 2, 2 }; - - /* SPI NOR */ --static int mt7629_snor_pins[] = { 62, 63, 64, 65, 66, 67 }; --static int mt7629_snor_funcs[] = { 1, 1, 1, 1, 1, 1 }; -+static const int mt7629_snor_pins[] = { 62, 63, 64, 65, 66, 67 }; -+static const int mt7629_snor_funcs[] = { 1, 1, 1, 1, 1, 1 }; - - static const struct mtk_group_desc mt7629_groups[] = { - PINCTRL_PIN_GROUP("wf0_5g", mt7629_wf0_5g), -@@ -385,7 +385,7 @@ static const struct mtk_function_desc mt - {"jtag", mt7629_jtag_groups, ARRAY_SIZE(mt7629_jtag_groups)}, - }; - --static struct mtk_pinctrl_soc mt7629_data = { -+static const struct mtk_pinctrl_soc mt7629_data = { - .name = "mt7629_pinctrl", - .reg_cal = mt7629_reg_cals, - .pins = mt7629_pins, ---- a/drivers/pinctrl/mediatek/pinctrl-mt7981.c -+++ b/drivers/pinctrl/mediatek/pinctrl-mt7981.c -@@ -570,242 +570,246 @@ static const struct mtk_pin_desc mt7981_ - }; - - /* WA_AICE */ --static int mt7981_wa_aice1_pins[] = { 0, 1, }; --static int mt7981_wa_aice1_funcs[] = { 2, 2, }; -+static const int mt7981_wa_aice1_pins[] = { 0, 1, }; -+static const int mt7981_wa_aice1_funcs[] = { 2, 2, }; - --static int mt7981_wa_aice2_pins[] = { 0, 1, }; --static int mt7981_wa_aice2_funcs[] = { 3, 3, }; -+static const int mt7981_wa_aice2_pins[] = { 0, 1, }; -+static const int mt7981_wa_aice2_funcs[] = { 3, 3, }; - --static int mt7981_wa_aice3_pins[] = { 28, 29, }; --static int mt7981_wa_aice3_funcs[] = { 3, 3, }; -+static const int mt7981_wa_aice3_pins[] = { 28, 29, }; -+static const int mt7981_wa_aice3_funcs[] = { 3, 3, }; - --static int mt7981_wm_aice1_pins[] = { 9, 10, }; --static int mt7981_wm_aice1_funcs[] = { 2, 2, }; -+static const int mt7981_wm_aice1_pins[] = { 9, 10, }; -+static const int mt7981_wm_aice1_funcs[] = { 2, 2, }; - --static int mt7981_wm_aice2_pins[] = { 30, 31, }; --static int mt7981_wm_aice2_funcs[] = { 5, 5, }; -+static const int mt7981_wm_aice2_pins[] = { 30, 31, }; -+static const int mt7981_wm_aice2_funcs[] = { 5, 5, }; - - /* WM_UART */ --static int mt7981_wm_uart_0_pins[] = { 0, 1, }; --static int mt7981_wm_uart_0_funcs[] = { 5, 5, }; -+static const int mt7981_wm_uart_0_pins[] = { 0, 1, }; -+static const int mt7981_wm_uart_0_funcs[] = { 5, 5, }; - --static int mt7981_wm_uart_1_pins[] = { 20, 21, }; --static int mt7981_wm_uart_1_funcs[] = { 4, 4, }; -+static const int mt7981_wm_uart_1_pins[] = { 20, 21, }; -+static const int mt7981_wm_uart_1_funcs[] = { 4, 4, }; - --static int mt7981_wm_uart_2_pins[] = { 30, 31, }; --static int mt7981_wm_uart_2_funcs[] = { 3, 3, }; -+static const int mt7981_wm_uart_2_pins[] = { 30, 31, }; -+static const int mt7981_wm_uart_2_funcs[] = { 3, 3, }; - - /* DFD */ --static int mt7981_dfd_pins[] = { 0, 1, 4, 5, }; --static int mt7981_dfd_funcs[] = { 5, 5, 6, 6, }; -+static const int mt7981_dfd_pins[] = { 0, 1, 4, 5, }; -+static const int mt7981_dfd_funcs[] = { 5, 5, 6, 6, }; - - /* SYS_WATCHDOG */ --static int mt7981_watchdog_pins[] = { 2, }; --static int mt7981_watchdog_funcs[] = { 1, }; -+static const int mt7981_watchdog_pins[] = { 2, }; -+static const int mt7981_watchdog_funcs[] = { 1, }; - --static int mt7981_watchdog1_pins[] = { 13, }; --static int mt7981_watchdog1_funcs[] = { 5, }; -+static const int mt7981_watchdog1_pins[] = { 13, }; -+static const int mt7981_watchdog1_funcs[] = { 5, }; - - /* PCIE_PERESET_N */ --static int mt7981_pcie_pereset_pins[] = { 3, }; --static int mt7981_pcie_pereset_funcs[] = { 1, }; -+static const int mt7981_pcie_pereset_pins[] = { 3, }; -+static const int mt7981_pcie_pereset_funcs[] = { 1, }; - - /* JTAG */ --static int mt7981_jtag_pins[] = { 4, 5, 6, 7, 8, }; --static int mt7981_jtag_funcs[] = { 1, 1, 1, 1, 1, }; -+static const int mt7981_jtag_pins[] = { 4, 5, 6, 7, 8, }; -+static const int mt7981_jtag_funcs[] = { 1, 1, 1, 1, 1, }; - - /* WM_JTAG */ --static int mt7981_wm_jtag_0_pins[] = { 4, 5, 6, 7, 8, }; --static int mt7981_wm_jtag_0_funcs[] = { 2, 2, 2, 2, 2, }; -+static const int mt7981_wm_jtag_0_pins[] = { 4, 5, 6, 7, 8, }; -+static const int mt7981_wm_jtag_0_funcs[] = { 2, 2, 2, 2, 2, }; - --static int mt7981_wm_jtag_1_pins[] = { 20, 21, 22, 23, 24, }; --static int mt7981_wm_jtag_1_funcs[] = { 5, 5, 5, 5, 5, }; -+static const int mt7981_wm_jtag_1_pins[] = { 20, 21, 22, 23, 24, }; -+static const int mt7981_wm_jtag_1_funcs[] = { 5, 5, 5, 5, 5, }; - - /* WO0_JTAG */ --static int mt7981_wo0_jtag_0_pins[] = { 9, 10, 11, 12, 13, }; --static int mt7981_wo0_jtag_0_funcs[] = { 1, 1, 1, 1, 1, }; -+static const int mt7981_wo0_jtag_0_pins[] = { 9, 10, 11, 12, 13, }; -+static const int mt7981_wo0_jtag_0_funcs[] = { 1, 1, 1, 1, 1, }; - --static int mt7981_wo0_jtag_1_pins[] = { 25, 26, 27, 28, 29, }; --static int mt7981_wo0_jtag_1_funcs[] = { 5, 5, 5, 5, 5, }; -+static const int mt7981_wo0_jtag_1_pins[] = { 25, 26, 27, 28, 29, }; -+static const int mt7981_wo0_jtag_1_funcs[] = { 5, 5, 5, 5, 5, }; - - /* UART2 */ --static int mt7981_uart2_0_pins[] = { 4, 5, 6, 7, }; --static int mt7981_uart2_0_funcs[] = { 3, 3, 3, 3, }; -+static const int mt7981_uart2_0_pins[] = { 4, 5, 6, 7, }; -+static const int mt7981_uart2_0_funcs[] = { 3, 3, 3, 3, }; - - /* GBE_LED0 */ --static int mt7981_gbe_led0_pins[] = { 8, }; --static int mt7981_gbe_led0_funcs[] = { 3, }; -+static const int mt7981_gbe_led0_pins[] = { 8, }; -+static const int mt7981_gbe_led0_funcs[] = { 3, }; - - /* PTA_EXT */ --static int mt7981_pta_ext_0_pins[] = { 4, 5, 6, }; --static int mt7981_pta_ext_0_funcs[] = { 4, 4, 4, }; -+static const int mt7981_pta_ext_0_pins[] = { 4, 5, 6, }; -+static const int mt7981_pta_ext_0_funcs[] = { 4, 4, 4, }; - --static int mt7981_pta_ext_1_pins[] = { 22, 23, 24, }; --static int mt7981_pta_ext_1_funcs[] = { 4, 4, 4, }; -+static const int mt7981_pta_ext_1_pins[] = { 22, 23, 24, }; -+static const int mt7981_pta_ext_1_funcs[] = { 4, 4, 4, }; - - /* PWM2 */ --static int mt7981_pwm2_pins[] = { 7, }; --static int mt7981_pwm2_funcs[] = { 4, }; -+static const int mt7981_pwm2_pins[] = { 7, }; -+static const int mt7981_pwm2_funcs[] = { 4, }; - - /* NET_WO0_UART_TXD */ --static int mt7981_net_wo0_uart_txd_0_pins[] = { 8, }; --static int mt7981_net_wo0_uart_txd_0_funcs[] = { 4, }; -+static const int mt7981_net_wo0_uart_txd_0_pins[] = { 8, }; -+static const int mt7981_net_wo0_uart_txd_0_funcs[] = { 4, }; - --static int mt7981_net_wo0_uart_txd_1_pins[] = { 14, }; --static int mt7981_net_wo0_uart_txd_1_funcs[] = { 3, }; -+static const int mt7981_net_wo0_uart_txd_1_pins[] = { 14, }; -+static const int mt7981_net_wo0_uart_txd_1_funcs[] = { 3, }; - --static int mt7981_net_wo0_uart_txd_2_pins[] = { 15, }; --static int mt7981_net_wo0_uart_txd_2_funcs[] = { 4, }; -+static const int mt7981_net_wo0_uart_txd_2_pins[] = { 15, }; -+static const int mt7981_net_wo0_uart_txd_2_funcs[] = { 4, }; - - /* SPI1 */ --static int mt7981_spi1_0_pins[] = { 4, 5, 6, 7, }; --static int mt7981_spi1_0_funcs[] = { 5, 5, 5, 5, }; -+static const int mt7981_spi1_0_pins[] = { 4, 5, 6, 7, }; -+static const int mt7981_spi1_0_funcs[] = { 5, 5, 5, 5, }; - - /* I2C */ --static int mt7981_i2c0_0_pins[] = { 6, 7, }; --static int mt7981_i2c0_0_funcs[] = { 6, 6, }; -+static const int mt7981_i2c0_0_pins[] = { 6, 7, }; -+static const int mt7981_i2c0_0_funcs[] = { 6, 6, }; - --static int mt7981_i2c0_1_pins[] = { 30, 31, }; --static int mt7981_i2c0_1_funcs[] = { 4, 4, }; -+static const int mt7981_i2c0_1_pins[] = { 30, 31, }; -+static const int mt7981_i2c0_1_funcs[] = { 4, 4, }; - --static int mt7981_i2c0_2_pins[] = { 36, 37, }; --static int mt7981_i2c0_2_funcs[] = { 2, 2, }; -+static const int mt7981_i2c0_2_pins[] = { 36, 37, }; -+static const int mt7981_i2c0_2_funcs[] = { 2, 2, }; - --static int mt7981_u2_phy_i2c_pins[] = { 30, 31, }; --static int mt7981_u2_phy_i2c_funcs[] = { 6, 6, }; -+static const int mt7981_u2_phy_i2c_pins[] = { 30, 31, }; -+static const int mt7981_u2_phy_i2c_funcs[] = { 6, 6, }; - --static int mt7981_u3_phy_i2c_pins[] = { 32, 33, }; --static int mt7981_u3_phy_i2c_funcs[] = { 3, 3, }; -+static const int mt7981_u3_phy_i2c_pins[] = { 32, 33, }; -+static const int mt7981_u3_phy_i2c_funcs[] = { 3, 3, }; - --static int mt7981_sgmii1_phy_i2c_pins[] = { 32, 33, }; --static int mt7981_sgmii1_phy_i2c_funcs[] = { 2, 2, }; -+static const int mt7981_sgmii1_phy_i2c_pins[] = { 32, 33, }; -+static const int mt7981_sgmii1_phy_i2c_funcs[] = { 2, 2, }; - --static int mt7981_sgmii0_phy_i2c_pins[] = { 32, 33, }; --static int mt7981_sgmii0_phy_i2c_funcs[] = { 5, 5, }; -+static const int mt7981_sgmii0_phy_i2c_pins[] = { 32, 33, }; -+static const int mt7981_sgmii0_phy_i2c_funcs[] = { 5, 5, }; - - /* DFD_NTRST */ --static int mt7981_dfd_ntrst_pins[] = { 8, }; --static int mt7981_dfd_ntrst_funcs[] = { 6, }; -+static const int mt7981_dfd_ntrst_pins[] = { 8, }; -+static const int mt7981_dfd_ntrst_funcs[] = { 6, }; - - /* PWM0 */ --static int mt7981_pwm0_0_pins[] = { 13, }; --static int mt7981_pwm0_0_funcs[] = { 2, }; -+static const int mt7981_pwm0_0_pins[] = { 13, }; -+static const int mt7981_pwm0_0_funcs[] = { 2, }; - --static int mt7981_pwm0_1_pins[] = { 15, }; --static int mt7981_pwm0_1_funcs[] = { 1, }; -+static const int mt7981_pwm0_1_pins[] = { 15, }; -+static const int mt7981_pwm0_1_funcs[] = { 1, }; - - /* PWM1 */ --static int mt7981_pwm1_0_pins[] = { 14, }; --static int mt7981_pwm1_0_funcs[] = { 2, }; -+static const int mt7981_pwm1_0_pins[] = { 14, }; -+static const int mt7981_pwm1_0_funcs[] = { 2, }; - --static int mt7981_pwm1_1_pins[] = { 15, }; --static int mt7981_pwm1_1_funcs[] = { 3, }; -+static const int mt7981_pwm1_1_pins[] = { 15, }; -+static const int mt7981_pwm1_1_funcs[] = { 3, }; - - /* GBE_LED1 */ --static int mt7981_gbe_led1_pins[] = { 13, }; --static int mt7981_gbe_led1_funcs[] = { 3, }; -+static const int mt7981_gbe_led1_pins[] = { 13, }; -+static const int mt7981_gbe_led1_funcs[] = { 3, }; - - /* PCM */ --static int mt7981_pcm_pins[] = { 9, 10, 11, 12, 13, 25 }; --static int mt7981_pcm_funcs[] = { 4, 4, 4, 4, 4, 4, }; -+static const int mt7981_pcm_pins[] = { 9, 10, 11, 12, 13, 25 }; -+static const int mt7981_pcm_funcs[] = { 4, 4, 4, 4, 4, 4, }; - - /* UDI */ --static int mt7981_udi_pins[] = { 9, 10, 11, 12, 13, }; --static int mt7981_udi_funcs[] = { 6, 6, 6, 6, 6, }; -+static const int mt7981_udi_pins[] = { 9, 10, 11, 12, 13, }; -+static const int mt7981_udi_funcs[] = { 6, 6, 6, 6, 6, }; - - /* DRV_VBUS */ --static int mt7981_drv_vbus_pins[] = { 14, }; --static int mt7981_drv_vbus_funcs[] = { 1, }; -+static const int mt7981_drv_vbus_pins[] = { 14, }; -+static const int mt7981_drv_vbus_funcs[] = { 1, }; - - /* EMMC */ --static int mt7981_emmc_45_pins[] = { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, }; --static int mt7981_emmc_45_funcs[] = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, }; -+static const int mt7981_emmc_45_pins[] = { -+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, }; -+static const int mt7981_emmc_45_funcs[] = { -+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, }; - - /* SNFI */ --static int mt7981_snfi_pins[] = { 16, 17, 18, 19, 20, 21, }; --static int mt7981_snfi_funcs[] = { 3, 3, 3, 3, 3, 3, }; -+static const int mt7981_snfi_pins[] = { 16, 17, 18, 19, 20, 21, }; -+static const int mt7981_snfi_funcs[] = { 3, 3, 3, 3, 3, 3, }; - - /* SPI0 */ --static int mt7981_spi0_pins[] = { 16, 17, 18, 19, }; --static int mt7981_spi0_funcs[] = { 1, 1, 1, 1, }; -+static const int mt7981_spi0_pins[] = { 16, 17, 18, 19, }; -+static const int mt7981_spi0_funcs[] = { 1, 1, 1, 1, }; - - /* SPI0 */ --static int mt7981_spi0_wp_hold_pins[] = { 20, 21, }; --static int mt7981_spi0_wp_hold_funcs[] = { 1, 1, }; -+static const int mt7981_spi0_wp_hold_pins[] = { 20, 21, }; -+static const int mt7981_spi0_wp_hold_funcs[] = { 1, 1, }; - - /* SPI1 */ --static int mt7981_spi1_1_pins[] = { 22, 23, 24, 25, }; --static int mt7981_spi1_1_funcs[] = { 1, 1, 1, 1, }; -+static const int mt7981_spi1_1_pins[] = { 22, 23, 24, 25, }; -+static const int mt7981_spi1_1_funcs[] = { 1, 1, 1, 1, }; - - /* SPI2 */ --static int mt7981_spi2_pins[] = { 26, 27, 28, 29, }; --static int mt7981_spi2_funcs[] = { 1, 1, 1, 1, }; -+static const int mt7981_spi2_pins[] = { 26, 27, 28, 29, }; -+static const int mt7981_spi2_funcs[] = { 1, 1, 1, 1, }; - - /* SPI2 */ --static int mt7981_spi2_wp_hold_pins[] = { 30, 31, }; --static int mt7981_spi2_wp_hold_funcs[] = { 1, 1, }; -+static const int mt7981_spi2_wp_hold_pins[] = { 30, 31, }; -+static const int mt7981_spi2_wp_hold_funcs[] = { 1, 1, }; - - /* UART1 */ --static int mt7981_uart1_0_pins[] = { 16, 17, 18, 19, }; --static int mt7981_uart1_0_funcs[] = { 4, 4, 4, 4, }; -+static const int mt7981_uart1_0_pins[] = { 16, 17, 18, 19, }; -+static const int mt7981_uart1_0_funcs[] = { 4, 4, 4, 4, }; - --static int mt7981_uart1_1_pins[] = { 26, 27, 28, 29, }; --static int mt7981_uart1_1_funcs[] = { 2, 2, 2, 2, }; -+static const int mt7981_uart1_1_pins[] = { 26, 27, 28, 29, }; -+static const int mt7981_uart1_1_funcs[] = { 2, 2, 2, 2, }; - - /* UART2 */ --static int mt7981_uart2_1_pins[] = { 22, 23, 24, 25, }; --static int mt7981_uart2_1_funcs[] = { 3, 3, 3, 3, }; -+static const int mt7981_uart2_1_pins[] = { 22, 23, 24, 25, }; -+static const int mt7981_uart2_1_funcs[] = { 3, 3, 3, 3, }; - - /* UART0 */ --static int mt7981_uart0_pins[] = { 32, 33, }; --static int mt7981_uart0_funcs[] = { 1, 1, }; -+static const int mt7981_uart0_pins[] = { 32, 33, }; -+static const int mt7981_uart0_funcs[] = { 1, 1, }; - - /* PCIE_CLK_REQ */ --static int mt7981_pcie_clk_pins[] = { 34, }; --static int mt7981_pcie_clk_funcs[] = { 2, }; -+static const int mt7981_pcie_clk_pins[] = { 34, }; -+static const int mt7981_pcie_clk_funcs[] = { 2, }; - - /* PCIE_WAKE_N */ --static int mt7981_pcie_wake_pins[] = { 35, }; --static int mt7981_pcie_wake_funcs[] = { 2, }; -+static const int mt7981_pcie_wake_pins[] = { 35, }; -+static const int mt7981_pcie_wake_funcs[] = { 2, }; - - /* MDC_MDIO */ --static int mt7981_smi_mdc_mdio_pins[] = { 36, 37, }; --static int mt7981_smi_mdc_mdio_funcs[] = { 1, 1, }; -+static const int mt7981_smi_mdc_mdio_pins[] = { 36, 37, }; -+static const int mt7981_smi_mdc_mdio_funcs[] = { 1, 1, }; - --static int mt7981_gbe_ext_mdc_mdio_pins[] = { 36, 37, }; --static int mt7981_gbe_ext_mdc_mdio_funcs[] = { 3, 3, }; -+static const int mt7981_gbe_ext_mdc_mdio_pins[] = { 36, 37, }; -+static const int mt7981_gbe_ext_mdc_mdio_funcs[] = { 3, 3, }; - - /* WF0_MODE1 */ --static int mt7981_wf0_mode1_pins[] = { 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, -- 50, 51, 52, 53, 54, 55, 56 }; --static int mt7981_wf0_mode1_funcs[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -- 1, 1, 1, 1 }; -+static const int mt7981_wf0_mode1_pins[] = { -+ 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56 }; -+static const int mt7981_wf0_mode1_funcs[] = { -+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - - /* WF0_MODE3 */ --static int mt7981_wf0_mode3_pins[] = { 45, 46, 47, 48, 49, 51 }; --static int mt7981_wf0_mode3_funcs[] = { 2, 2, 2, 2, 2, 2 }; -+static const int mt7981_wf0_mode3_pins[] = { 45, 46, 47, 48, 49, 51 }; -+static const int mt7981_wf0_mode3_funcs[] = { 2, 2, 2, 2, 2, 2 }; - - /* WF2G_LED */ --static int mt7981_wf2g_led0_pins[] = { 30, }; --static int mt7981_wf2g_led0_funcs[] = { 2, }; -+static const int mt7981_wf2g_led0_pins[] = { 30, }; -+static const int mt7981_wf2g_led0_funcs[] = { 2, }; - --static int mt7981_wf2g_led1_pins[] = { 34, }; --static int mt7981_wf2g_led1_funcs[] = { 1, }; -+static const int mt7981_wf2g_led1_pins[] = { 34, }; -+static const int mt7981_wf2g_led1_funcs[] = { 1, }; - - /* WF5G_LED */ --static int mt7981_wf5g_led0_pins[] = { 31, }; --static int mt7981_wf5g_led0_funcs[] = { 2, }; -+static const int mt7981_wf5g_led0_pins[] = { 31, }; -+static const int mt7981_wf5g_led0_funcs[] = { 2, }; - --static int mt7981_wf5g_led1_pins[] = { 35, }; --static int mt7981_wf5g_led1_funcs[] = { 1, }; -+static const int mt7981_wf5g_led1_pins[] = { 35, }; -+static const int mt7981_wf5g_led1_funcs[] = { 1, }; - - /* MT7531_INT */ --static int mt7981_mt7531_int_pins[] = { 38, }; --static int mt7981_mt7531_int_funcs[] = { 1, }; -+static const int mt7981_mt7531_int_pins[] = { 38, }; -+static const int mt7981_mt7531_int_funcs[] = { 1, }; - - /* ANT_SEL */ --static int mt7981_ant_sel_pins[] = { 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 34, 35 }; --static int mt7981_ant_sel_funcs[] = { 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6 }; -+static const int mt7981_ant_sel_pins[] = { -+ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 34, 35 }; -+static const int mt7981_ant_sel_funcs[] = { -+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6 }; - - static const struct mtk_group_desc mt7981_groups[] = { - /* @GPIO(0,1): WA_AICE(2) */ -@@ -1012,7 +1016,7 @@ static const char *const mt7981_pinctrl_ - "iocfg_lb_base", "iocfg_bl_base", "iocfg_tm_base", "iocfg_tl_base", - }; - --static struct mtk_pinctrl_soc mt7981_data = { -+static const struct mtk_pinctrl_soc mt7981_data = { - .name = "mt7981_pinctrl", - .reg_cal = mt7981_reg_cals, - .pins = mt7981_pins, ---- a/drivers/pinctrl/mediatek/pinctrl-mt7986.c -+++ b/drivers/pinctrl/mediatek/pinctrl-mt7986.c -@@ -554,114 +554,117 @@ static const struct mtk_io_type_desc mt7 - * The hardware probably has multiple combinations of these pinouts. - */ - --static int mt7986_watchdog_pins[] = { 0, }; --static int mt7986_watchdog_funcs[] = { 1, }; -+static const int mt7986_watchdog_pins[] = { 0, }; -+static const int mt7986_watchdog_funcs[] = { 1, }; - --static int mt7986_wifi_led_pins[] = { 1, 2, }; --static int mt7986_wifi_led_funcs[] = { 1, 1, }; -+static const int mt7986_wifi_led_pins[] = { 1, 2, }; -+static const int mt7986_wifi_led_funcs[] = { 1, 1, }; - --static int mt7986_i2c_pins[] = { 3, 4, }; --static int mt7986_i2c_funcs[] = { 1, 1, }; -+static const int mt7986_i2c_pins[] = { 3, 4, }; -+static const int mt7986_i2c_funcs[] = { 1, 1, }; - --static int mt7986_uart1_0_pins[] = { 7, 8, 9, 10, }; --static int mt7986_uart1_0_funcs[] = { 3, 3, 3, 3, }; -+static const int mt7986_uart1_0_pins[] = { 7, 8, 9, 10, }; -+static const int mt7986_uart1_0_funcs[] = { 3, 3, 3, 3, }; - --static int mt7986_spi1_0_pins[] = { 11, 12, 13, 14, }; --static int mt7986_spi1_0_funcs[] = { 3, 3, 3, 3, }; -+static const int mt7986_spi1_0_pins[] = { 11, 12, 13, 14, }; -+static const int mt7986_spi1_0_funcs[] = { 3, 3, 3, 3, }; - --static int mt7986_pwm1_1_pins[] = { 20, }; --static int mt7986_pwm1_1_funcs[] = { 2, }; -+static const int mt7986_pwm1_1_pins[] = { 20, }; -+static const int mt7986_pwm1_1_funcs[] = { 2, }; - --static int mt7986_pwm0_pins[] = { 21, }; --static int mt7986_pwm0_funcs[] = { 1, }; -+static const int mt7986_pwm0_pins[] = { 21, }; -+static const int mt7986_pwm0_funcs[] = { 1, }; - --static int mt7986_pwm1_0_pins[] = { 22, }; --static int mt7986_pwm1_0_funcs[] = { 1, }; -+static const int mt7986_pwm1_0_pins[] = { 22, }; -+static const int mt7986_pwm1_0_funcs[] = { 1, }; - --static int mt7986_emmc_45_pins[] = { -+static const int mt7986_emmc_45_pins[] = { - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, }; --static int mt7986_emmc_45_funcs[] = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, }; -+static const int mt7986_emmc_45_funcs[] = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, }; - --static int mt7986_snfi_pins[] = { 23, 24, 25, 26, 27, 28, }; --static int mt7986_snfi_funcs[] = { 1, 1, 1, 1, 1, 1, }; -+static const int mt7986_snfi_pins[] = { 23, 24, 25, 26, 27, 28, }; -+static const int mt7986_snfi_funcs[] = { 1, 1, 1, 1, 1, 1, }; - --static int mt7986_spi1_1_pins[] = { 23, 24, 25, 26, }; --static int mt7986_spi1_1_funcs[] = { 3, 3, 3, 3, }; -+static const int mt7986_spi1_1_pins[] = { 23, 24, 25, 26, }; -+static const int mt7986_spi1_1_funcs[] = { 3, 3, 3, 3, }; - --static int mt7986_uart1_1_pins[] = { 23, 24, 25, 26, }; --static int mt7986_uart1_1_funcs[] = { 4, 4, 4, 4, }; -+static const int mt7986_uart1_1_pins[] = { 23, 24, 25, 26, }; -+static const int mt7986_uart1_1_funcs[] = { 4, 4, 4, 4, }; - --static int mt7986_spi1_2_pins[] = { 29, 30, 31, 32, }; --static int mt7986_spi1_2_funcs[] = { 1, 1, 1, 1, }; -+static const int mt7986_spi1_2_pins[] = { 29, 30, 31, 32, }; -+static const int mt7986_spi1_2_funcs[] = { 1, 1, 1, 1, }; - --static int mt7986_uart1_2_pins[] = { 29, 30, 31, 32, }; --static int mt7986_uart1_2_funcs[] = { 3, 3, 3, 3, }; -+static const int mt7986_uart1_2_pins[] = { 29, 30, 31, 32, }; -+static const int mt7986_uart1_2_funcs[] = { 3, 3, 3, 3, }; - --static int mt7986_uart2_0_pins[] = { 29, 30, 31, 32, }; --static int mt7986_uart2_0_funcs[] = { 4, 4, 4, 4, }; -+static const int mt7986_uart2_0_pins[] = { 29, 30, 31, 32, }; -+static const int mt7986_uart2_0_funcs[] = { 4, 4, 4, 4, }; - --static int mt7986_spi0_pins[] = { 33, 34, 35, 36, }; --static int mt7986_spi0_funcs[] = { 1, 1, 1, 1, }; -+static const int mt7986_spi0_pins[] = { 33, 34, 35, 36, }; -+static const int mt7986_spi0_funcs[] = { 1, 1, 1, 1, }; - --static int mt7986_spi0_wp_hold_pins[] = { 37, 38, }; --static int mt7986_spi0_wp_hold_funcs[] = { 1, 1, }; -+static const int mt7986_spi0_wp_hold_pins[] = { 37, 38, }; -+static const int mt7986_spi0_wp_hold_funcs[] = { 1, 1, }; - --static int mt7986_uart2_1_pins[] = { 33, 34, 35, 36, }; --static int mt7986_uart2_1_funcs[] = { 3, 3, 3, 3, }; -+static const int mt7986_uart2_1_pins[] = { 33, 34, 35, 36, }; -+static const int mt7986_uart2_1_funcs[] = { 3, 3, 3, 3, }; - --static int mt7986_uart1_3_rx_tx_pins[] = { 35, 36, }; --static int mt7986_uart1_3_rx_tx_funcs[] = { 2, 2, }; -+static const int mt7986_uart1_3_rx_tx_pins[] = { 35, 36, }; -+static const int mt7986_uart1_3_rx_tx_funcs[] = { 2, 2, }; - --static int mt7986_uart1_3_cts_rts_pins[] = { 37, 38, }; --static int mt7986_uart1_3_cts_rts_funcs[] = { 2, 2, }; -+static const int mt7986_uart1_3_cts_rts_pins[] = { 37, 38, }; -+static const int mt7986_uart1_3_cts_rts_funcs[] = { 2, 2, }; - --static int mt7986_spi1_3_pins[] = { 33, 34, 35, 36, }; --static int mt7986_spi1_3_funcs[] = { 4, 4, 4, 4, }; -+static const int mt7986_spi1_3_pins[] = { 33, 34, 35, 36, }; -+static const int mt7986_spi1_3_funcs[] = { 4, 4, 4, 4, }; - --static int mt7986_uart0_pins[] = { 39, 40, }; --static int mt7986_uart0_funcs[] = { 1, 1, }; -+static const int mt7986_uart0_pins[] = { 39, 40, }; -+static const int mt7986_uart0_funcs[] = { 1, 1, }; - --static int mt7986_pcie_reset_pins[] = { 41, }; --static int mt7986_pcie_reset_funcs[] = { 1, }; -+static const int mt7986_pcie_reset_pins[] = { 41, }; -+static const int mt7986_pcie_reset_funcs[] = { 1, }; - --static int mt7986_uart1_pins[] = { 42, 43, 44, 45, }; --static int mt7986_uart1_funcs[] = { 1, 1, 1, 1, }; -+static const int mt7986_uart1_pins[] = { 42, 43, 44, 45, }; -+static const int mt7986_uart1_funcs[] = { 1, 1, 1, 1, }; - --static int mt7986_uart2_pins[] = { 46, 47, 48, 49, }; --static int mt7986_uart2_funcs[] = { 1, 1, 1, 1, }; -+static const int mt7986_uart2_pins[] = { 46, 47, 48, 49, }; -+static const int mt7986_uart2_funcs[] = { 1, 1, 1, 1, }; - --static int mt7986_emmc_51_pins[] = { -+static const int mt7986_emmc_51_pins[] = { - 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, }; --static int mt7986_emmc_51_funcs[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; -+static const int mt7986_emmc_51_funcs[] = { -+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; - --static int mt7986_pcm_pins[] = { 62, 63, 64, 65, }; --static int mt7986_pcm_funcs[] = { 1, 1, 1, 1, }; -+static const int mt7986_pcm_pins[] = { 62, 63, 64, 65, }; -+static const int mt7986_pcm_funcs[] = { 1, 1, 1, 1, }; - --static int mt7986_i2s_pins[] = { 62, 63, 64, 65, }; --static int mt7986_i2s_funcs[] = { 1, 1, 1, 1, }; -+static const int mt7986_i2s_pins[] = { 62, 63, 64, 65, }; -+static const int mt7986_i2s_funcs[] = { 1, 1, 1, 1, }; - --static int mt7986_switch_int_pins[] = { 66, }; --static int mt7986_switch_int_funcs[] = { 1, }; -+static const int mt7986_switch_int_pins[] = { 66, }; -+static const int mt7986_switch_int_funcs[] = { 1, }; - --static int mt7986_mdc_mdio_pins[] = { 67, 68, }; --static int mt7986_mdc_mdio_funcs[] = { 1, 1, }; -+static const int mt7986_mdc_mdio_pins[] = { 67, 68, }; -+static const int mt7986_mdc_mdio_funcs[] = { 1, 1, }; - --static int mt7986_wf_2g_pins[] = {74, 75, 76, 77, 78, 79, 80, 81, 82, 83, }; --static int mt7986_wf_2g_funcs[] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; -+static const int mt7986_wf_2g_pins[] = { -+ 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, }; -+static const int mt7986_wf_2g_funcs[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; - --static int mt7986_wf_5g_pins[] = {91, 92, 93, 94, 95, 96, 97, 98, 99, 100, }; --static int mt7986_wf_5g_funcs[] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; -+static const int mt7986_wf_5g_pins[] = { -+ 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, }; -+static const int mt7986_wf_5g_funcs[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; - --static int mt7986_wf_dbdc_pins[] = { -+static const int mt7986_wf_dbdc_pins[] = { - 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, }; --static int mt7986_wf_dbdc_funcs[] = { -+static const int mt7986_wf_dbdc_funcs[] = { - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, }; - --static int mt7986_pcie_clk_pins[] = { 9, }; --static int mt7986_pcie_clk_funcs[] = { 1, }; -+static const int mt7986_pcie_clk_pins[] = { 9, }; -+static const int mt7986_pcie_clk_funcs[] = { 1, }; - --static int mt7986_pcie_wake_pins[] = { 10, }; --static int mt7986_pcie_wake_funcs[] = { 1, }; -+static const int mt7986_pcie_wake_pins[] = { 10, }; -+static const int mt7986_pcie_wake_funcs[] = { 1, }; - - static const struct mtk_group_desc mt7986_groups[] = { - PINCTRL_PIN_GROUP("watchdog", mt7986_watchdog), -@@ -738,7 +741,7 @@ static const struct mtk_function_desc mt - {"wifi", mt7986_wf_groups, ARRAY_SIZE(mt7986_wf_groups)}, - }; - --static struct mtk_pinctrl_soc mt7986_data = { -+static const struct mtk_pinctrl_soc mt7986_data = { - .name = "mt7986_pinctrl", - .reg_cal = mt7986_reg_cals, - .pins = mt7986_pins, ---- a/drivers/pinctrl/mediatek/pinctrl-mt8512.c -+++ b/drivers/pinctrl/mediatek/pinctrl-mt8512.c -@@ -315,12 +315,12 @@ static const struct mtk_pin_desc mt8512_ - */ - - /* UART */ --static int mt8512_uart0_0_rxd_txd_pins[] = { 52, 53, }; --static int mt8512_uart0_0_rxd_txd_funcs[] = { 1, 1, }; --static int mt8512_uart1_0_rxd_txd_pins[] = { 54, 55, }; --static int mt8512_uart1_0_rxd_txd_funcs[] = { 1, 1, }; --static int mt8512_uart2_0_rxd_txd_pins[] = { 28, 29, }; --static int mt8512_uart2_0_rxd_txd_funcs[] = { 1, 1, }; -+static const int mt8512_uart0_0_rxd_txd_pins[] = { 52, 53, }; -+static const int mt8512_uart0_0_rxd_txd_funcs[] = { 1, 1, }; -+static const int mt8512_uart1_0_rxd_txd_pins[] = { 54, 55, }; -+static const int mt8512_uart1_0_rxd_txd_funcs[] = { 1, 1, }; -+static const int mt8512_uart2_0_rxd_txd_pins[] = { 28, 29, }; -+static const int mt8512_uart2_0_rxd_txd_funcs[] = { 1, 1, }; - - /* Joint those groups owning the same capability in user point of view which - * allows that people tend to use through the device tree. -@@ -330,13 +330,13 @@ static const char *const mt8512_uart_gro - "uart2_0_rxd_txd", }; - - /* SNAND */ --static int mt8512_snfi_pins[] = { 71, 76, 77, 78, 79, 80, }; --static int mt8512_snfi_funcs[] = { 3, 3, 3, 3, 3, 3, }; -+static const int mt8512_snfi_pins[] = { 71, 76, 77, 78, 79, 80, }; -+static const int mt8512_snfi_funcs[] = { 3, 3, 3, 3, 3, 3, }; - - /* MMC0 */ --static int mt8512_msdc0_pins[] = { 76, 77, 78, 79, 80, 81, 82, 83, 84, -- 85, 86, }; --static int mt8512_msdc0_funcs[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; -+static const int mt8512_msdc0_pins[] = { 76, 77, 78, 79, 80, 81, 82, 83, 84, -+ 85, 86, }; -+static const int mt8512_msdc0_funcs[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; - - static const struct mtk_group_desc mt8512_groups[] = { - PINCTRL_PIN_GROUP("uart0_0_rxd_txd", mt8512_uart0_0_rxd_txd), -@@ -356,7 +356,7 @@ static const struct mtk_function_desc mt - {"snand", mt8512_msdc_groups, ARRAY_SIZE(mt8512_msdc_groups)}, - }; - --static struct mtk_pinctrl_soc mt8512_data = { -+static const struct mtk_pinctrl_soc mt8512_data = { - .name = "mt8512_pinctrl", - .reg_cal = mt8512_reg_cals, - .pins = mt8512_pins, ---- a/drivers/pinctrl/mediatek/pinctrl-mt8516.c -+++ b/drivers/pinctrl/mediatek/pinctrl-mt8516.c -@@ -326,12 +326,12 @@ static const struct mtk_pin_desc mt8516_ - */ - - /* UART */ --static int mt8516_uart0_0_rxd_txd_pins[] = { 62, 63, }; --static int mt8516_uart0_0_rxd_txd_funcs[] = { 1, 1, }; --static int mt8516_uart1_0_rxd_txd_pins[] = { 64, 65, }; --static int mt8516_uart1_0_rxd_txd_funcs[] = { 1, 1, }; --static int mt8516_uart2_0_rxd_txd_pins[] = { 34, 35, }; --static int mt8516_uart2_0_rxd_txd_funcs[] = { 1, 1, }; -+static const int mt8516_uart0_0_rxd_txd_pins[] = { 62, 63, }; -+static const int mt8516_uart0_0_rxd_txd_funcs[] = { 1, 1, }; -+static const int mt8516_uart1_0_rxd_txd_pins[] = { 64, 65, }; -+static const int mt8516_uart1_0_rxd_txd_funcs[] = { 1, 1, }; -+static const int mt8516_uart2_0_rxd_txd_pins[] = { 34, 35, }; -+static const int mt8516_uart2_0_rxd_txd_funcs[] = { 1, 1, }; - - /* Joint those groups owning the same capability in user point of view which - * allows that people tend to use through the device tree. -@@ -341,9 +341,9 @@ static const char *const mt8516_uart_gro - "uart2_0_rxd_txd", }; - - /* MMC0 */ --static int mt8516_msdc0_pins[] = { 110, 111, 112, 113, 114, 115, 116, 117, 118, -- 119, 120, }; --static int mt8516_msdc0_funcs[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; -+static const int mt8516_msdc0_pins[] = { 110, 111, 112, 113, 114, 115, 116, 117, -+ 118, 119, 120, }; -+static const int mt8516_msdc0_funcs[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; - - static const struct mtk_group_desc mt8516_groups[] = { - PINCTRL_PIN_GROUP("uart0_0_rxd_txd", mt8516_uart0_0_rxd_txd), ---- a/drivers/pinctrl/mediatek/pinctrl-mt8518.c -+++ b/drivers/pinctrl/mediatek/pinctrl-mt8518.c -@@ -346,12 +346,12 @@ static const struct mtk_pin_desc mt8518_ - */ - - /* UART */ --static int mt8518_uart0_0_rxd_txd_pins[] = { 104, 105, }; --static int mt8518_uart0_0_rxd_txd_funcs[] = { 1, 1, }; --static int mt8518_uart1_0_rxd_txd_pins[] = { 52, 53, }; --static int mt8518_uart1_0_rxd_txd_funcs[] = { 1, 1, }; --static int mt8518_uart2_0_rxd_txd_pins[] = { 106, 107, }; --static int mt8518_uart2_0_rxd_txd_funcs[] = { 1, 1, }; -+static const int mt8518_uart0_0_rxd_txd_pins[] = { 104, 105, }; -+static const int mt8518_uart0_0_rxd_txd_funcs[] = { 1, 1, }; -+static const int mt8518_uart1_0_rxd_txd_pins[] = { 52, 53, }; -+static const int mt8518_uart1_0_rxd_txd_funcs[] = { 1, 1, }; -+static const int mt8518_uart2_0_rxd_txd_pins[] = { 106, 107, }; -+static const int mt8518_uart2_0_rxd_txd_funcs[] = { 1, 1, }; - - /* Joint those groups owning the same capability in user point of view which - * allows that people tend to use through the device tree. -@@ -361,9 +361,9 @@ static const char *const mt8518_uart_gro - "uart2_0_rxd_txd", }; - - /* MMC0 */ --static int mt8518_msdc0_pins[] = { 3, 4, 5, 6, 7, 8, 9, 10, 11, -- 12, 13, }; --static int mt8518_msdc0_funcs[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; -+static const int mt8518_msdc0_pins[] = { 3, 4, 5, 6, 7, 8, 9, 10, 11, -+ 12, 13, }; -+static const int mt8518_msdc0_funcs[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; - - static const struct mtk_group_desc mt8518_groups[] = { - PINCTRL_PIN_GROUP("uart0_0_rxd_txd", mt8518_uart0_0_rxd_txd), -@@ -380,7 +380,7 @@ static const struct mtk_function_desc mt - {"msdc", mt8518_msdc_groups, ARRAY_SIZE(mt8518_msdc_groups)}, - }; - --static struct mtk_pinctrl_soc mt8518_data = { -+static const struct mtk_pinctrl_soc mt8518_data = { - .name = "mt8518_pinctrl", - .reg_cal = mt8518_reg_cals, - .pins = mt8518_pins, ---- a/drivers/pinctrl/mediatek/pinctrl-mtk-common.c -+++ b/drivers/pinctrl/mediatek/pinctrl-mtk-common.c -@@ -314,7 +314,7 @@ static int mtk_pinmux_group_set(struct u - int i; - - for (i = 0; i < grp->num_pins; i++) { -- int *pin_modes = grp->data; -+ const int *pin_modes = grp->data; - - mtk_hw_set_value(dev, grp->pins[i], PINCTRL_PIN_REG_MODE, - pin_modes[i]); -@@ -769,7 +769,7 @@ static int mtk_gpiochip_register(struct - #endif - - int mtk_pinctrl_common_probe(struct udevice *dev, -- struct mtk_pinctrl_soc *soc) -+ const struct mtk_pinctrl_soc *soc) - { - struct mtk_pinctrl_priv *priv = dev_get_priv(dev); - int ret = 0; ---- a/drivers/pinctrl/mediatek/pinctrl-mtk-common.h -+++ b/drivers/pinctrl/mediatek/pinctrl-mtk-common.h -@@ -174,9 +174,9 @@ struct mtk_pin_desc { - */ - struct mtk_group_desc { - const char *name; -- int *pins; -+ const int *pins; - int num_pins; -- void *data; -+ const void *data; - }; - - /** -@@ -233,7 +233,7 @@ struct mtk_pinctrl_soc { - */ - struct mtk_pinctrl_priv { - void __iomem *base[MAX_BASE_CALC]; -- struct mtk_pinctrl_soc *soc; -+ const struct mtk_pinctrl_soc *soc; - }; - - extern const struct pinctrl_ops mtk_pinctrl_ops; -@@ -242,7 +242,7 @@ extern const struct pinctrl_ops mtk_pinc - void mtk_rmw(struct udevice *dev, u32 reg, u32 mask, u32 set); - void mtk_i_rmw(struct udevice *dev, u8 i, u32 reg, u32 mask, u32 set); - int mtk_pinctrl_common_probe(struct udevice *dev, -- struct mtk_pinctrl_soc *soc); -+ const struct mtk_pinctrl_soc *soc); - - #if CONFIG_IS_ENABLED(PINCONF) - diff --git a/lede/package/boot/uboot-mediatek/patches/101-13-pinctrl-mediatek-fix-the-return-value-in-driving-con.patch b/lede/package/boot/uboot-mediatek/patches/101-13-pinctrl-mediatek-fix-the-return-value-in-driving-con.patch deleted file mode 100644 index d83a89ab37..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/101-13-pinctrl-mediatek-fix-the-return-value-in-driving-con.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 783c46d29f8b186bd65f3e83f38ad883e8bcec69 Mon Sep 17 00:00:00 2001 -From: Weijie Gao -Date: Wed, 19 Jul 2023 17:16:42 +0800 -Subject: [PATCH 13/29] pinctrl: mediatek: fix the return value in driving - configuration functions - -The original mediatek pinctrl functions for driving configuration -'mtk_pinconf_drive_set_*' do not return -ENOSUPP even if input -parameters are not supported. -This patch fixes the return value in those functions. - -Signed-off-by: Sam Shih -Signed-off-by: Weijie Gao ---- - drivers/pinctrl/mediatek/pinctrl-mtk-common.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - ---- a/drivers/pinctrl/mediatek/pinctrl-mtk-common.c -+++ b/drivers/pinctrl/mediatek/pinctrl-mtk-common.c -@@ -513,7 +513,7 @@ int mtk_pinconf_drive_set_v0(struct udev - return err; - } - -- return 0; -+ return err; - } - - int mtk_pinconf_drive_set_v1(struct udevice *dev, u32 pin, u32 arg) -@@ -531,7 +531,7 @@ int mtk_pinconf_drive_set_v1(struct udev - return err; - } - -- return 0; -+ return err; - } - - int mtk_pinconf_drive_set(struct udevice *dev, u32 pin, u32 arg) diff --git a/lede/package/boot/uboot-mediatek/patches/101-14-pinctrl-mediatek-add-pinmux_set-ops-support.patch b/lede/package/boot/uboot-mediatek/patches/101-14-pinctrl-mediatek-add-pinmux_set-ops-support.patch deleted file mode 100644 index 7cb185ff42..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/101-14-pinctrl-mediatek-add-pinmux_set-ops-support.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 090351b416e57e0f7b5d1a4c87d4ed9ab4f5c89b Mon Sep 17 00:00:00 2001 -From: Weijie Gao -Date: Wed, 19 Jul 2023 17:16:46 +0800 -Subject: [PATCH 14/29] pinctrl: mediatek: add pinmux_set ops support - -This patch adds pinmux_set ops for mediatek pinctrl framework - -Signed-off-by: Sam Shih -Signed-off-by: Weijie Gao ---- - drivers/pinctrl/mediatek/pinctrl-mtk-common.c | 14 ++++++++++++++ - 1 file changed, 14 insertions(+) - ---- a/drivers/pinctrl/mediatek/pinctrl-mtk-common.c -+++ b/drivers/pinctrl/mediatek/pinctrl-mtk-common.c -@@ -304,6 +304,19 @@ static const char *mtk_get_function_name - return priv->soc->funcs[selector].name; - } - -+static int mtk_pinmux_set(struct udevice *dev, unsigned int pin_selector, -+ unsigned int func_selector) -+{ -+ int err; -+ -+ err = mtk_hw_set_value(dev, pin_selector, PINCTRL_PIN_REG_MODE, -+ func_selector); -+ if (err) -+ return err; -+ -+ return 0; -+} -+ - static int mtk_pinmux_group_set(struct udevice *dev, - unsigned int group_selector, - unsigned int func_selector) -@@ -647,6 +660,7 @@ const struct pinctrl_ops mtk_pinctrl_ops - .get_group_name = mtk_get_group_name, - .get_functions_count = mtk_get_functions_count, - .get_function_name = mtk_get_function_name, -+ .pinmux_set = mtk_pinmux_set, - .pinmux_group_set = mtk_pinmux_group_set, - #if CONFIG_IS_ENABLED(PINCONF) - .pinconf_num_params = ARRAY_SIZE(mtk_conf_params), diff --git a/lede/package/boot/uboot-mediatek/patches/101-15-pinctrl-mediatek-add-pinctrl-driver-for-MT7988-SoC.patch b/lede/package/boot/uboot-mediatek/patches/101-15-pinctrl-mediatek-add-pinctrl-driver-for-MT7988-SoC.patch deleted file mode 100644 index cfc7c32ba3..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/101-15-pinctrl-mediatek-add-pinctrl-driver-for-MT7988-SoC.patch +++ /dev/null @@ -1,1315 +0,0 @@ -From 5e821f4ebd9da4ccf3c8871e402996f6a6eb8d1c Mon Sep 17 00:00:00 2001 -From: Weijie Gao -Date: Wed, 19 Jul 2023 17:16:50 +0800 -Subject: [PATCH 15/29] pinctrl: mediatek: add pinctrl driver for MT7988 SoC - -This patch adds pinctrl and gpio support for MT7988 SoC - -Signed-off-by: Weijie Gao ---- - drivers/pinctrl/mediatek/Kconfig | 4 + - drivers/pinctrl/mediatek/Makefile | 1 + - drivers/pinctrl/mediatek/pinctrl-mt7988.c | 1274 +++++++++++++++++++++ - 3 files changed, 1279 insertions(+) - create mode 100644 drivers/pinctrl/mediatek/pinctrl-mt7988.c - ---- a/drivers/pinctrl/mediatek/Kconfig -+++ b/drivers/pinctrl/mediatek/Kconfig -@@ -24,6 +24,10 @@ config PINCTRL_MT7986 - bool "MT7986 SoC pinctrl driver" - select PINCTRL_MTK - -+config PINCTRL_MT7988 -+ bool "MT7988 SoC pinctrl driver" -+ select PINCTRL_MTK -+ - config PINCTRL_MT8512 - bool "MT8512 SoC pinctrl driver" - select PINCTRL_MTK ---- a/drivers/pinctrl/mediatek/Makefile -+++ b/drivers/pinctrl/mediatek/Makefile -@@ -8,6 +8,7 @@ obj-$(CONFIG_PINCTRL_MT7623) += pinctrl- - obj-$(CONFIG_PINCTRL_MT7629) += pinctrl-mt7629.o - obj-$(CONFIG_PINCTRL_MT7981) += pinctrl-mt7981.o - obj-$(CONFIG_PINCTRL_MT7986) += pinctrl-mt7986.o -+obj-$(CONFIG_PINCTRL_MT7988) += pinctrl-mt7988.o - obj-$(CONFIG_PINCTRL_MT8512) += pinctrl-mt8512.o - obj-$(CONFIG_PINCTRL_MT8516) += pinctrl-mt8516.o - obj-$(CONFIG_PINCTRL_MT8518) += pinctrl-mt8518.o ---- /dev/null -+++ b/drivers/pinctrl/mediatek/pinctrl-mt7988.c -@@ -0,0 +1,1274 @@ -+// SPDX-License-Identifier: GPL-2.0 -+/* -+ * Copyright (C) 2022 MediaTek Inc. -+ * Author: Sam Shih -+ */ -+ -+#include -+#include "pinctrl-mtk-common.h" -+ -+enum MT7988_PINCTRL_REG_PAGE { -+ GPIO_BASE, -+ IOCFG_TR_BASE, -+ IOCFG_BR_BASE, -+ IOCFG_RB_BASE, -+ IOCFG_LB_BASE, -+ IOCFG_TL_BASE, -+}; -+ -+#define MT7988_TYPE0_PIN(_number, _name) \ -+ MTK_TYPED_PIN(_number, _name, DRV_GRP4, IO_TYPE_GRP0) -+ -+#define MT7988_TYPE1_PIN(_number, _name) \ -+ MTK_TYPED_PIN(_number, _name, DRV_GRP4, IO_TYPE_GRP1) -+ -+#define MT7988_TYPE2_PIN(_number, _name) \ -+ MTK_TYPED_PIN(_number, _name, DRV_FIXED, IO_TYPE_GRP2) -+ -+#define PIN_FIELD_GPIO(_s_pin, _e_pin, _s_addr, _x_addrs, _s_bit, _x_bits) \ -+ PIN_FIELD_BASE_CALC(_s_pin, _e_pin, GPIO_BASE, _s_addr, _x_addrs, \ -+ _s_bit, _x_bits, 32, 0) -+ -+#define PIN_FIELD_BASE(_s_pin, _e_pin, _i_base, _s_addr, _x_addrs, _s_bit, \ -+ _x_bits) \ -+ PIN_FIELD_BASE_CALC(_s_pin, _e_pin, _i_base, _s_addr, _x_addrs, \ -+ _s_bit, _x_bits, 32, 0) -+ -+#define PINS_FIELD_BASE(_s_pin, _e_pin, _i_base, _s_addr, _x_addrs, _s_bit, \ -+ _x_bits) \ -+ PIN_FIELD_BASE_CALC(_s_pin, _e_pin, _i_base, _s_addr, _x_addrs, \ -+ _s_bit, _x_bits, 32, 1) -+ -+static const struct mtk_pin_field_calc mt7988_pin_mode_range[] = { -+ PIN_FIELD_GPIO(0, 83, 0x300, 0x10, 0, 4), -+}; -+ -+static const struct mtk_pin_field_calc mt7988_pin_dir_range[] = { -+ PIN_FIELD_GPIO(0, 83, 0x0, 0x10, 0, 1), -+}; -+ -+static const struct mtk_pin_field_calc mt7988_pin_di_range[] = { -+ PIN_FIELD_GPIO(0, 83, 0x200, 0x10, 0, 1), -+}; -+ -+static const struct mtk_pin_field_calc mt7988_pin_do_range[] = { -+ PIN_FIELD_GPIO(0, 83, 0x100, 0x10, 0, 1), -+}; -+ -+static const struct mtk_pin_field_calc mt7988_pin_ies_range[] = { -+ PIN_FIELD_BASE(0, 0, IOCFG_TL_BASE, 0x30, 0x10, 13, 1), -+ PIN_FIELD_BASE(1, 1, IOCFG_TL_BASE, 0x30, 0x10, 14, 1), -+ PIN_FIELD_BASE(2, 2, IOCFG_TL_BASE, 0x30, 0x10, 11, 1), -+ PIN_FIELD_BASE(3, 3, IOCFG_TL_BASE, 0x30, 0x10, 12, 1), -+ PIN_FIELD_BASE(4, 4, IOCFG_TL_BASE, 0x30, 0x10, 0, 1), -+ PIN_FIELD_BASE(5, 5, IOCFG_TL_BASE, 0x30, 0x10, 9, 1), -+ PIN_FIELD_BASE(6, 6, IOCFG_TL_BASE, 0x30, 0x10, 10, 1), -+ -+ PIN_FIELD_BASE(7, 7, IOCFG_LB_BASE, 0x30, 0x10, 8, 1), -+ PIN_FIELD_BASE(8, 8, IOCFG_LB_BASE, 0x30, 0x10, 6, 1), -+ PIN_FIELD_BASE(9, 9, IOCFG_LB_BASE, 0x30, 0x10, 5, 1), -+ PIN_FIELD_BASE(10, 10, IOCFG_LB_BASE, 0x30, 0x10, 3, 1), -+ -+ PIN_FIELD_BASE(11, 11, IOCFG_TR_BASE, 0x40, 0x10, 0, 1), -+ PIN_FIELD_BASE(12, 12, IOCFG_TR_BASE, 0x40, 0x10, 21, 1), -+ PIN_FIELD_BASE(13, 13, IOCFG_TR_BASE, 0x40, 0x10, 1, 1), -+ PIN_FIELD_BASE(14, 14, IOCFG_TR_BASE, 0x40, 0x10, 2, 1), -+ -+ PIN_FIELD_BASE(15, 15, IOCFG_TL_BASE, 0x30, 0x10, 7, 1), -+ PIN_FIELD_BASE(16, 16, IOCFG_TL_BASE, 0x30, 0x10, 8, 1), -+ PIN_FIELD_BASE(17, 17, IOCFG_TL_BASE, 0x30, 0x10, 3, 1), -+ PIN_FIELD_BASE(18, 18, IOCFG_TL_BASE, 0x30, 0x10, 4, 1), -+ -+ PIN_FIELD_BASE(19, 19, IOCFG_LB_BASE, 0x30, 0x10, 7, 1), -+ PIN_FIELD_BASE(20, 20, IOCFG_LB_BASE, 0x30, 0x10, 4, 1), -+ -+ PIN_FIELD_BASE(21, 21, IOCFG_RB_BASE, 0x50, 0x10, 17, 1), -+ PIN_FIELD_BASE(22, 22, IOCFG_RB_BASE, 0x50, 0x10, 23, 1), -+ PIN_FIELD_BASE(23, 23, IOCFG_RB_BASE, 0x50, 0x10, 20, 1), -+ PIN_FIELD_BASE(24, 24, IOCFG_RB_BASE, 0x50, 0x10, 19, 1), -+ PIN_FIELD_BASE(25, 25, IOCFG_RB_BASE, 0x50, 0x10, 21, 1), -+ PIN_FIELD_BASE(26, 26, IOCFG_RB_BASE, 0x50, 0x10, 22, 1), -+ PIN_FIELD_BASE(27, 27, IOCFG_RB_BASE, 0x50, 0x10, 18, 1), -+ PIN_FIELD_BASE(28, 28, IOCFG_RB_BASE, 0x50, 0x10, 25, 1), -+ PIN_FIELD_BASE(29, 29, IOCFG_RB_BASE, 0x50, 0x10, 26, 1), -+ PIN_FIELD_BASE(30, 30, IOCFG_RB_BASE, 0x50, 0x10, 27, 1), -+ PIN_FIELD_BASE(31, 31, IOCFG_RB_BASE, 0x50, 0x10, 24, 1), -+ PIN_FIELD_BASE(32, 32, IOCFG_RB_BASE, 0x50, 0x10, 28, 1), -+ PIN_FIELD_BASE(33, 33, IOCFG_RB_BASE, 0x60, 0x10, 0, 1), -+ PIN_FIELD_BASE(34, 34, IOCFG_RB_BASE, 0x50, 0x10, 31, 1), -+ PIN_FIELD_BASE(35, 35, IOCFG_RB_BASE, 0x50, 0x10, 29, 1), -+ PIN_FIELD_BASE(36, 36, IOCFG_RB_BASE, 0x50, 0x10, 30, 1), -+ PIN_FIELD_BASE(37, 37, IOCFG_RB_BASE, 0x60, 0x10, 1, 1), -+ PIN_FIELD_BASE(38, 38, IOCFG_RB_BASE, 0x50, 0x10, 11, 1), -+ PIN_FIELD_BASE(39, 39, IOCFG_RB_BASE, 0x50, 0x10, 10, 1), -+ PIN_FIELD_BASE(40, 40, IOCFG_RB_BASE, 0x50, 0x10, 0, 1), -+ PIN_FIELD_BASE(41, 41, IOCFG_RB_BASE, 0x50, 0x10, 1, 1), -+ PIN_FIELD_BASE(42, 42, IOCFG_RB_BASE, 0x50, 0x10, 9, 1), -+ PIN_FIELD_BASE(43, 43, IOCFG_RB_BASE, 0x50, 0x10, 8, 1), -+ PIN_FIELD_BASE(44, 44, IOCFG_RB_BASE, 0x50, 0x10, 7, 1), -+ PIN_FIELD_BASE(45, 45, IOCFG_RB_BASE, 0x50, 0x10, 6, 1), -+ PIN_FIELD_BASE(46, 46, IOCFG_RB_BASE, 0x50, 0x10, 5, 1), -+ PIN_FIELD_BASE(47, 47, IOCFG_RB_BASE, 0x50, 0x10, 4, 1), -+ PIN_FIELD_BASE(48, 48, IOCFG_RB_BASE, 0x50, 0x10, 3, 1), -+ PIN_FIELD_BASE(49, 49, IOCFG_RB_BASE, 0x50, 0x10, 2, 1), -+ PIN_FIELD_BASE(50, 50, IOCFG_RB_BASE, 0x50, 0x10, 15, 1), -+ PIN_FIELD_BASE(51, 51, IOCFG_RB_BASE, 0x50, 0x10, 12, 1), -+ PIN_FIELD_BASE(52, 52, IOCFG_RB_BASE, 0x50, 0x10, 13, 1), -+ PIN_FIELD_BASE(53, 53, IOCFG_RB_BASE, 0x50, 0x10, 14, 1), -+ PIN_FIELD_BASE(54, 54, IOCFG_RB_BASE, 0x50, 0x10, 16, 1), -+ -+ PIN_FIELD_BASE(55, 55, IOCFG_TR_BASE, 0x40, 0x10, 14, 1), -+ PIN_FIELD_BASE(56, 56, IOCFG_TR_BASE, 0x40, 0x10, 15, 1), -+ PIN_FIELD_BASE(57, 57, IOCFG_TR_BASE, 0x40, 0x10, 13, 1), -+ PIN_FIELD_BASE(58, 58, IOCFG_TR_BASE, 0x40, 0x10, 4, 1), -+ PIN_FIELD_BASE(59, 59, IOCFG_TR_BASE, 0x40, 0x10, 5, 1), -+ PIN_FIELD_BASE(60, 60, IOCFG_TR_BASE, 0x40, 0x10, 6, 1), -+ PIN_FIELD_BASE(61, 61, IOCFG_TR_BASE, 0x40, 0x10, 3, 1), -+ PIN_FIELD_BASE(62, 62, IOCFG_TR_BASE, 0x40, 0x10, 7, 1), -+ PIN_FIELD_BASE(63, 63, IOCFG_TR_BASE, 0x40, 0x10, 20, 1), -+ PIN_FIELD_BASE(64, 64, IOCFG_TR_BASE, 0x40, 0x10, 8, 1), -+ PIN_FIELD_BASE(65, 65, IOCFG_TR_BASE, 0x40, 0x10, 9, 1), -+ PIN_FIELD_BASE(66, 66, IOCFG_TR_BASE, 0x40, 0x10, 10, 1), -+ PIN_FIELD_BASE(67, 67, IOCFG_TR_BASE, 0x40, 0x10, 11, 1), -+ PIN_FIELD_BASE(68, 68, IOCFG_TR_BASE, 0x40, 0x10, 12, 1), -+ -+ PIN_FIELD_BASE(69, 69, IOCFG_TL_BASE, 0x30, 0x10, 1, 1), -+ PIN_FIELD_BASE(70, 70, IOCFG_TL_BASE, 0x30, 0x10, 2, 1), -+ PIN_FIELD_BASE(71, 71, IOCFG_TL_BASE, 0x30, 0x10, 5, 1), -+ PIN_FIELD_BASE(72, 72, IOCFG_TL_BASE, 0x30, 0x10, 6, 1), -+ -+ PIN_FIELD_BASE(73, 73, IOCFG_LB_BASE, 0x30, 0x10, 10, 1), -+ PIN_FIELD_BASE(74, 74, IOCFG_LB_BASE, 0x30, 0x10, 1, 1), -+ PIN_FIELD_BASE(75, 75, IOCFG_LB_BASE, 0x30, 0x10, 11, 1), -+ PIN_FIELD_BASE(76, 76, IOCFG_LB_BASE, 0x30, 0x10, 9, 1), -+ PIN_FIELD_BASE(77, 77, IOCFG_LB_BASE, 0x30, 0x10, 2, 1), -+ PIN_FIELD_BASE(78, 78, IOCFG_LB_BASE, 0x30, 0x10, 0, 1), -+ PIN_FIELD_BASE(79, 79, IOCFG_LB_BASE, 0x30, 0x10, 12, 1), -+ -+ PIN_FIELD_BASE(80, 80, IOCFG_TR_BASE, 0x40, 0x10, 18, 1), -+ PIN_FIELD_BASE(81, 81, IOCFG_TR_BASE, 0x40, 0x10, 19, 1), -+ PIN_FIELD_BASE(82, 82, IOCFG_TR_BASE, 0x40, 0x10, 16, 1), -+ PIN_FIELD_BASE(83, 83, IOCFG_TR_BASE, 0x40, 0x10, 17, 1), -+}; -+ -+static const struct mtk_pin_field_calc mt7988_pin_smt_range[] = { -+ PIN_FIELD_BASE(0, 0, IOCFG_TL_BASE, 0xc0, 0x10, 13, 1), -+ PIN_FIELD_BASE(1, 1, IOCFG_TL_BASE, 0xc0, 0x10, 14, 1), -+ PIN_FIELD_BASE(2, 2, IOCFG_TL_BASE, 0xc0, 0x10, 11, 1), -+ PIN_FIELD_BASE(3, 3, IOCFG_TL_BASE, 0xc0, 0x10, 12, 1), -+ PIN_FIELD_BASE(4, 4, IOCFG_TL_BASE, 0xc0, 0x10, 0, 1), -+ PIN_FIELD_BASE(5, 5, IOCFG_TL_BASE, 0xc0, 0x10, 9, 1), -+ PIN_FIELD_BASE(6, 6, IOCFG_TL_BASE, 0xc0, 0x10, 10, 1), -+ -+ PIN_FIELD_BASE(7, 7, IOCFG_LB_BASE, 0xb0, 0x10, 8, 1), -+ PIN_FIELD_BASE(8, 8, IOCFG_LB_BASE, 0xb0, 0x10, 6, 1), -+ PIN_FIELD_BASE(9, 9, IOCFG_LB_BASE, 0xb0, 0x10, 5, 1), -+ PIN_FIELD_BASE(10, 10, IOCFG_LB_BASE, 0xb0, 0x10, 3, 1), -+ -+ PIN_FIELD_BASE(11, 11, IOCFG_TR_BASE, 0xe0, 0x10, 0, 1), -+ PIN_FIELD_BASE(12, 12, IOCFG_TR_BASE, 0xe0, 0x10, 21, 1), -+ PIN_FIELD_BASE(13, 13, IOCFG_TR_BASE, 0xe0, 0x10, 1, 1), -+ PIN_FIELD_BASE(14, 14, IOCFG_TR_BASE, 0xe0, 0x10, 2, 1), -+ -+ PIN_FIELD_BASE(15, 15, IOCFG_TL_BASE, 0xc0, 0x10, 7, 1), -+ PIN_FIELD_BASE(16, 16, IOCFG_TL_BASE, 0xc0, 0x10, 8, 1), -+ PIN_FIELD_BASE(17, 17, IOCFG_TL_BASE, 0xc0, 0x10, 3, 1), -+ PIN_FIELD_BASE(18, 18, IOCFG_TL_BASE, 0xc0, 0x10, 4, 1), -+ -+ PIN_FIELD_BASE(19, 19, IOCFG_LB_BASE, 0xb0, 0x10, 7, 1), -+ PIN_FIELD_BASE(20, 20, IOCFG_LB_BASE, 0xb0, 0x10, 4, 1), -+ -+ PIN_FIELD_BASE(21, 21, IOCFG_RB_BASE, 0x140, 0x10, 17, 1), -+ PIN_FIELD_BASE(22, 22, IOCFG_RB_BASE, 0x140, 0x10, 23, 1), -+ PIN_FIELD_BASE(23, 23, IOCFG_RB_BASE, 0x140, 0x10, 20, 1), -+ PIN_FIELD_BASE(24, 24, IOCFG_RB_BASE, 0x140, 0x10, 19, 1), -+ PIN_FIELD_BASE(25, 25, IOCFG_RB_BASE, 0x140, 0x10, 21, 1), -+ PIN_FIELD_BASE(26, 26, IOCFG_RB_BASE, 0x140, 0x10, 22, 1), -+ PIN_FIELD_BASE(27, 27, IOCFG_RB_BASE, 0x140, 0x10, 18, 1), -+ PIN_FIELD_BASE(28, 28, IOCFG_RB_BASE, 0x140, 0x10, 25, 1), -+ PIN_FIELD_BASE(29, 29, IOCFG_RB_BASE, 0x140, 0x10, 26, 1), -+ PIN_FIELD_BASE(30, 30, IOCFG_RB_BASE, 0x140, 0x10, 27, 1), -+ PIN_FIELD_BASE(31, 31, IOCFG_RB_BASE, 0x140, 0x10, 24, 1), -+ PIN_FIELD_BASE(32, 32, IOCFG_RB_BASE, 0x140, 0x10, 28, 1), -+ PIN_FIELD_BASE(33, 33, IOCFG_RB_BASE, 0x150, 0x10, 0, 1), -+ PIN_FIELD_BASE(34, 34, IOCFG_RB_BASE, 0x140, 0x10, 31, 1), -+ PIN_FIELD_BASE(35, 35, IOCFG_RB_BASE, 0x140, 0x10, 29, 1), -+ PIN_FIELD_BASE(36, 36, IOCFG_RB_BASE, 0x140, 0x10, 30, 1), -+ PIN_FIELD_BASE(37, 37, IOCFG_RB_BASE, 0x150, 0x10, 1, 1), -+ PIN_FIELD_BASE(38, 38, IOCFG_RB_BASE, 0x140, 0x10, 11, 1), -+ PIN_FIELD_BASE(39, 39, IOCFG_RB_BASE, 0x140, 0x10, 10, 1), -+ PIN_FIELD_BASE(40, 40, IOCFG_RB_BASE, 0x140, 0x10, 0, 1), -+ PIN_FIELD_BASE(41, 41, IOCFG_RB_BASE, 0x140, 0x10, 1, 1), -+ PIN_FIELD_BASE(42, 42, IOCFG_RB_BASE, 0x140, 0x10, 9, 1), -+ PIN_FIELD_BASE(43, 43, IOCFG_RB_BASE, 0x140, 0x10, 8, 1), -+ PIN_FIELD_BASE(44, 44, IOCFG_RB_BASE, 0x140, 0x10, 7, 1), -+ PIN_FIELD_BASE(45, 45, IOCFG_RB_BASE, 0x140, 0x10, 6, 1), -+ PIN_FIELD_BASE(46, 46, IOCFG_RB_BASE, 0x140, 0x10, 5, 1), -+ PIN_FIELD_BASE(47, 47, IOCFG_RB_BASE, 0x140, 0x10, 4, 1), -+ PIN_FIELD_BASE(48, 48, IOCFG_RB_BASE, 0x140, 0x10, 3, 1), -+ PIN_FIELD_BASE(49, 49, IOCFG_RB_BASE, 0x140, 0x10, 2, 1), -+ PIN_FIELD_BASE(50, 50, IOCFG_RB_BASE, 0x140, 0x10, 15, 1), -+ PIN_FIELD_BASE(51, 51, IOCFG_RB_BASE, 0x140, 0x10, 12, 1), -+ PIN_FIELD_BASE(52, 52, IOCFG_RB_BASE, 0x140, 0x10, 13, 1), -+ PIN_FIELD_BASE(53, 53, IOCFG_RB_BASE, 0x140, 0x10, 14, 1), -+ PIN_FIELD_BASE(54, 54, IOCFG_RB_BASE, 0x140, 0x10, 16, 1), -+ -+ PIN_FIELD_BASE(55, 55, IOCFG_TR_BASE, 0xe0, 0x10, 14, 1), -+ PIN_FIELD_BASE(56, 56, IOCFG_TR_BASE, 0xe0, 0x10, 15, 1), -+ PIN_FIELD_BASE(57, 57, IOCFG_TR_BASE, 0xe0, 0x10, 13, 1), -+ PIN_FIELD_BASE(58, 58, IOCFG_TR_BASE, 0xe0, 0x10, 4, 1), -+ PIN_FIELD_BASE(59, 59, IOCFG_TR_BASE, 0xe0, 0x10, 5, 1), -+ PIN_FIELD_BASE(60, 60, IOCFG_TR_BASE, 0xe0, 0x10, 6, 1), -+ PIN_FIELD_BASE(61, 61, IOCFG_TR_BASE, 0xe0, 0x10, 3, 1), -+ PIN_FIELD_BASE(62, 62, IOCFG_TR_BASE, 0xe0, 0x10, 7, 1), -+ PIN_FIELD_BASE(63, 63, IOCFG_TR_BASE, 0xe0, 0x10, 20, 1), -+ PIN_FIELD_BASE(64, 64, IOCFG_TR_BASE, 0xe0, 0x10, 8, 1), -+ PIN_FIELD_BASE(65, 65, IOCFG_TR_BASE, 0xe0, 0x10, 9, 1), -+ PIN_FIELD_BASE(66, 66, IOCFG_TR_BASE, 0xe0, 0x10, 10, 1), -+ PIN_FIELD_BASE(67, 67, IOCFG_TR_BASE, 0xe0, 0x10, 11, 1), -+ PIN_FIELD_BASE(68, 68, IOCFG_TR_BASE, 0xe0, 0x10, 12, 1), -+ -+ PIN_FIELD_BASE(69, 69, IOCFG_TL_BASE, 0xc0, 0x10, 1, 1), -+ PIN_FIELD_BASE(70, 70, IOCFG_TL_BASE, 0xc0, 0x10, 2, 1), -+ PIN_FIELD_BASE(71, 71, IOCFG_TL_BASE, 0xc0, 0x10, 5, 1), -+ PIN_FIELD_BASE(72, 72, IOCFG_TL_BASE, 0xc0, 0x10, 6, 1), -+ -+ PIN_FIELD_BASE(73, 73, IOCFG_LB_BASE, 0xb0, 0x10, 10, 1), -+ PIN_FIELD_BASE(74, 74, IOCFG_LB_BASE, 0xb0, 0x10, 1, 1), -+ PIN_FIELD_BASE(75, 75, IOCFG_LB_BASE, 0xb0, 0x10, 11, 1), -+ PIN_FIELD_BASE(76, 76, IOCFG_LB_BASE, 0xb0, 0x10, 9, 1), -+ PIN_FIELD_BASE(77, 77, IOCFG_LB_BASE, 0xb0, 0x10, 2, 1), -+ PIN_FIELD_BASE(78, 78, IOCFG_LB_BASE, 0xb0, 0x10, 0, 1), -+ PIN_FIELD_BASE(79, 79, IOCFG_LB_BASE, 0xb0, 0x10, 12, 1), -+ -+ PIN_FIELD_BASE(80, 80, IOCFG_TR_BASE, 0xe0, 0x10, 18, 1), -+ PIN_FIELD_BASE(81, 81, IOCFG_TR_BASE, 0xe0, 0x10, 19, 1), -+ PIN_FIELD_BASE(82, 82, IOCFG_TR_BASE, 0xe0, 0x10, 16, 1), -+ PIN_FIELD_BASE(83, 83, IOCFG_TR_BASE, 0xe0, 0x10, 17, 1), -+}; -+ -+static const struct mtk_pin_field_calc mt7988_pin_pu_range[] = { -+ PIN_FIELD_BASE(7, 7, IOCFG_LB_BASE, 0x60, 0x10, 5, 1), -+ PIN_FIELD_BASE(8, 8, IOCFG_LB_BASE, 0x60, 0x10, 4, 1), -+ PIN_FIELD_BASE(9, 9, IOCFG_LB_BASE, 0x60, 0x10, 3, 1), -+ PIN_FIELD_BASE(10, 10, IOCFG_LB_BASE, 0x60, 0x10, 2, 1), -+ -+ PIN_FIELD_BASE(13, 13, IOCFG_TR_BASE, 0x70, 0x10, 0, 1), -+ PIN_FIELD_BASE(14, 14, IOCFG_TR_BASE, 0x70, 0x10, 1, 1), -+ PIN_FIELD_BASE(63, 63, IOCFG_TR_BASE, 0x70, 0x10, 2, 1), -+ -+ PIN_FIELD_BASE(75, 75, IOCFG_LB_BASE, 0x60, 0x10, 7, 1), -+ PIN_FIELD_BASE(76, 76, IOCFG_LB_BASE, 0x60, 0x10, 6, 1), -+ PIN_FIELD_BASE(77, 77, IOCFG_LB_BASE, 0x60, 0x10, 1, 1), -+ PIN_FIELD_BASE(78, 78, IOCFG_LB_BASE, 0x60, 0x10, 0, 1), -+ PIN_FIELD_BASE(79, 79, IOCFG_LB_BASE, 0x60, 0x10, 8, 1), -+}; -+ -+static const struct mtk_pin_field_calc mt7988_pin_pd_range[] = { -+ PIN_FIELD_BASE(7, 7, IOCFG_LB_BASE, 0x40, 0x10, 5, 1), -+ PIN_FIELD_BASE(8, 8, IOCFG_LB_BASE, 0x40, 0x10, 4, 1), -+ PIN_FIELD_BASE(9, 9, IOCFG_LB_BASE, 0x40, 0x10, 3, 1), -+ PIN_FIELD_BASE(10, 10, IOCFG_LB_BASE, 0x40, 0x10, 2, 1), -+ -+ PIN_FIELD_BASE(13, 13, IOCFG_TR_BASE, 0x50, 0x10, 0, 1), -+ PIN_FIELD_BASE(14, 14, IOCFG_TR_BASE, 0x50, 0x10, 1, 1), -+ -+ PIN_FIELD_BASE(15, 15, IOCFG_TL_BASE, 0x40, 0x10, 4, 1), -+ PIN_FIELD_BASE(16, 16, IOCFG_TL_BASE, 0x40, 0x10, 5, 1), -+ PIN_FIELD_BASE(17, 17, IOCFG_TL_BASE, 0x40, 0x10, 0, 1), -+ PIN_FIELD_BASE(18, 18, IOCFG_TL_BASE, 0x40, 0x10, 1, 1), -+ -+ PIN_FIELD_BASE(63, 63, IOCFG_TR_BASE, 0x50, 0x10, 2, 1), -+ PIN_FIELD_BASE(71, 71, IOCFG_TL_BASE, 0x40, 0x10, 2, 1), -+ PIN_FIELD_BASE(72, 72, IOCFG_TL_BASE, 0x40, 0x10, 3, 1), -+ -+ PIN_FIELD_BASE(75, 75, IOCFG_LB_BASE, 0x40, 0x10, 7, 1), -+ PIN_FIELD_BASE(76, 76, IOCFG_LB_BASE, 0x40, 0x10, 6, 1), -+ PIN_FIELD_BASE(77, 77, IOCFG_LB_BASE, 0x40, 0x10, 1, 1), -+ PIN_FIELD_BASE(78, 78, IOCFG_LB_BASE, 0x40, 0x10, 0, 1), -+ PIN_FIELD_BASE(79, 79, IOCFG_LB_BASE, 0x40, 0x10, 8, 1), -+}; -+ -+static const struct mtk_pin_field_calc mt7988_pin_drv_range[] = { -+ PIN_FIELD_BASE(0, 0, IOCFG_TL_BASE, 0x00, 0x10, 21, 3), -+ PIN_FIELD_BASE(1, 1, IOCFG_TL_BASE, 0x00, 0x10, 24, 3), -+ PIN_FIELD_BASE(2, 2, IOCFG_TL_BASE, 0x00, 0x10, 15, 3), -+ PIN_FIELD_BASE(3, 3, IOCFG_TL_BASE, 0x00, 0x10, 18, 3), -+ PIN_FIELD_BASE(4, 4, IOCFG_TL_BASE, 0x00, 0x10, 0, 3), -+ PIN_FIELD_BASE(5, 5, IOCFG_TL_BASE, 0x00, 0x10, 9, 3), -+ PIN_FIELD_BASE(6, 6, IOCFG_TL_BASE, 0x00, 0x10, 12, 3), -+ -+ PIN_FIELD_BASE(7, 7, IOCFG_LB_BASE, 0x00, 0x10, 24, 3), -+ PIN_FIELD_BASE(8, 8, IOCFG_LB_BASE, 0x00, 0x10, 28, 3), -+ PIN_FIELD_BASE(9, 9, IOCFG_LB_BASE, 0x00, 0x10, 15, 3), -+ PIN_FIELD_BASE(10, 10, IOCFG_LB_BASE, 0x00, 0x10, 9, 3), -+ -+ PIN_FIELD_BASE(11, 11, IOCFG_TR_BASE, 0x00, 0x10, 0, 3), -+ PIN_FIELD_BASE(12, 12, IOCFG_TR_BASE, 0x20, 0x10, 3, 3), -+ PIN_FIELD_BASE(13, 13, IOCFG_TR_BASE, 0x00, 0x10, 3, 3), -+ PIN_FIELD_BASE(14, 14, IOCFG_TR_BASE, 0x00, 0x10, 6, 3), -+ -+ PIN_FIELD_BASE(19, 19, IOCFG_LB_BASE, 0x00, 0x10, 21, 3), -+ PIN_FIELD_BASE(20, 20, IOCFG_LB_BASE, 0x00, 0x10, 12, 3), -+ -+ PIN_FIELD_BASE(21, 21, IOCFG_RB_BASE, 0x10, 0x10, 21, 3), -+ PIN_FIELD_BASE(22, 22, IOCFG_RB_BASE, 0x20, 0x10, 9, 3), -+ PIN_FIELD_BASE(23, 23, IOCFG_RB_BASE, 0x20, 0x10, 0, 3), -+ PIN_FIELD_BASE(24, 24, IOCFG_RB_BASE, 0x10, 0x10, 27, 3), -+ PIN_FIELD_BASE(25, 25, IOCFG_RB_BASE, 0x20, 0x10, 3, 3), -+ PIN_FIELD_BASE(26, 26, IOCFG_RB_BASE, 0x20, 0x10, 6, 3), -+ PIN_FIELD_BASE(27, 27, IOCFG_RB_BASE, 0x10, 0x10, 24, 3), -+ PIN_FIELD_BASE(28, 28, IOCFG_RB_BASE, 0x20, 0x10, 15, 3), -+ PIN_FIELD_BASE(29, 29, IOCFG_RB_BASE, 0x20, 0x10, 18, 3), -+ PIN_FIELD_BASE(30, 30, IOCFG_RB_BASE, 0x20, 0x10, 21, 3), -+ PIN_FIELD_BASE(31, 31, IOCFG_RB_BASE, 0x20, 0x10, 12, 3), -+ PIN_FIELD_BASE(32, 32, IOCFG_RB_BASE, 0x20, 0x10, 24, 3), -+ PIN_FIELD_BASE(33, 33, IOCFG_RB_BASE, 0x30, 0x10, 6, 3), -+ PIN_FIELD_BASE(34, 34, IOCFG_RB_BASE, 0x30, 0x10, 3, 3), -+ PIN_FIELD_BASE(35, 35, IOCFG_RB_BASE, 0x20, 0x10, 27, 3), -+ PIN_FIELD_BASE(36, 36, IOCFG_RB_BASE, 0x30, 0x10, 0, 3), -+ PIN_FIELD_BASE(37, 37, IOCFG_RB_BASE, 0x30, 0x10, 9, 3), -+ PIN_FIELD_BASE(38, 38, IOCFG_RB_BASE, 0x10, 0x10, 3, 3), -+ PIN_FIELD_BASE(39, 39, IOCFG_RB_BASE, 0x10, 0x10, 0, 3), -+ PIN_FIELD_BASE(40, 40, IOCFG_RB_BASE, 0x00, 0x10, 0, 3), -+ PIN_FIELD_BASE(41, 41, IOCFG_RB_BASE, 0x00, 0x10, 3, 3), -+ PIN_FIELD_BASE(42, 42, IOCFG_RB_BASE, 0x00, 0x10, 27, 3), -+ PIN_FIELD_BASE(43, 43, IOCFG_RB_BASE, 0x00, 0x10, 24, 3), -+ PIN_FIELD_BASE(44, 44, IOCFG_RB_BASE, 0x00, 0x10, 21, 3), -+ PIN_FIELD_BASE(45, 45, IOCFG_RB_BASE, 0x00, 0x10, 18, 3), -+ PIN_FIELD_BASE(46, 46, IOCFG_RB_BASE, 0x00, 0x10, 15, 3), -+ PIN_FIELD_BASE(47, 47, IOCFG_RB_BASE, 0x00, 0x10, 12, 3), -+ PIN_FIELD_BASE(48, 48, IOCFG_RB_BASE, 0x00, 0x10, 9, 3), -+ PIN_FIELD_BASE(49, 49, IOCFG_RB_BASE, 0x00, 0x10, 6, 3), -+ PIN_FIELD_BASE(50, 50, IOCFG_RB_BASE, 0x10, 0x10, 15, 3), -+ PIN_FIELD_BASE(51, 51, IOCFG_RB_BASE, 0x10, 0x10, 6, 3), -+ PIN_FIELD_BASE(52, 52, IOCFG_RB_BASE, 0x10, 0x10, 9, 3), -+ PIN_FIELD_BASE(53, 53, IOCFG_RB_BASE, 0x10, 0x10, 12, 3), -+ PIN_FIELD_BASE(54, 54, IOCFG_RB_BASE, 0x10, 0x10, 18, 3), -+ -+ PIN_FIELD_BASE(55, 55, IOCFG_TR_BASE, 0x10, 0x10, 12, 3), -+ PIN_FIELD_BASE(56, 56, IOCFG_TR_BASE, 0x10, 0x10, 15, 3), -+ PIN_FIELD_BASE(57, 57, IOCFG_TR_BASE, 0x10, 0x10, 9, 3), -+ PIN_FIELD_BASE(58, 58, IOCFG_TR_BASE, 0x00, 0x10, 12, 3), -+ PIN_FIELD_BASE(59, 59, IOCFG_TR_BASE, 0x00, 0x10, 15, 3), -+ PIN_FIELD_BASE(60, 60, IOCFG_TR_BASE, 0x00, 0x10, 18, 3), -+ PIN_FIELD_BASE(61, 61, IOCFG_TR_BASE, 0x00, 0x10, 9, 3), -+ PIN_FIELD_BASE(62, 62, IOCFG_TR_BASE, 0x00, 0x10, 21, 3), -+ PIN_FIELD_BASE(63, 63, IOCFG_TR_BASE, 0x20, 0x10, 0, 3), -+ PIN_FIELD_BASE(64, 64, IOCFG_TR_BASE, 0x00, 0x10, 24, 3), -+ PIN_FIELD_BASE(65, 65, IOCFG_TR_BASE, 0x00, 0x10, 27, 3), -+ PIN_FIELD_BASE(66, 66, IOCFG_TR_BASE, 0x10, 0x10, 0, 3), -+ PIN_FIELD_BASE(67, 67, IOCFG_TR_BASE, 0x10, 0x10, 3, 3), -+ PIN_FIELD_BASE(68, 68, IOCFG_TR_BASE, 0x10, 0x10, 6, 3), -+ -+ PIN_FIELD_BASE(69, 69, IOCFG_TL_BASE, 0x00, 0x10, 3, 3), -+ PIN_FIELD_BASE(70, 70, IOCFG_TL_BASE, 0x00, 0x10, 6, 3), -+ -+ PIN_FIELD_BASE(73, 73, IOCFG_LB_BASE, 0x10, 0x10, 0, 3), -+ PIN_FIELD_BASE(74, 74, IOCFG_LB_BASE, 0x00, 0x10, 3, 3), -+ PIN_FIELD_BASE(75, 75, IOCFG_LB_BASE, 0x10, 0x10, 3, 3), -+ PIN_FIELD_BASE(76, 76, IOCFG_LB_BASE, 0x00, 0x10, 27, 3), -+ PIN_FIELD_BASE(77, 77, IOCFG_LB_BASE, 0x00, 0x10, 6, 3), -+ PIN_FIELD_BASE(78, 78, IOCFG_LB_BASE, 0x00, 0x10, 0, 3), -+ PIN_FIELD_BASE(79, 79, IOCFG_LB_BASE, 0x10, 0x10, 6, 3), -+ -+ PIN_FIELD_BASE(80, 80, IOCFG_TR_BASE, 0x10, 0x10, 24, 3), -+ PIN_FIELD_BASE(81, 81, IOCFG_TR_BASE, 0x10, 0x10, 27, 3), -+ PIN_FIELD_BASE(82, 82, IOCFG_TR_BASE, 0x10, 0x10, 18, 3), -+ PIN_FIELD_BASE(83, 83, IOCFG_TR_BASE, 0x10, 0x10, 21, 3), -+}; -+ -+static const struct mtk_pin_field_calc mt7988_pin_pupd_range[] = { -+ PIN_FIELD_BASE(0, 0, IOCFG_TL_BASE, 0x50, 0x10, 7, 1), -+ PIN_FIELD_BASE(1, 1, IOCFG_TL_BASE, 0x50, 0x10, 8, 1), -+ PIN_FIELD_BASE(2, 2, IOCFG_TL_BASE, 0x50, 0x10, 5, 1), -+ PIN_FIELD_BASE(3, 3, IOCFG_TL_BASE, 0x50, 0x10, 6, 1), -+ PIN_FIELD_BASE(4, 4, IOCFG_TL_BASE, 0x50, 0x10, 0, 1), -+ PIN_FIELD_BASE(5, 5, IOCFG_TL_BASE, 0x50, 0x10, 3, 1), -+ PIN_FIELD_BASE(6, 6, IOCFG_TL_BASE, 0x50, 0x10, 4, 1), -+ -+ PIN_FIELD_BASE(11, 11, IOCFG_TR_BASE, 0x60, 0x10, 0, 1), -+ PIN_FIELD_BASE(12, 12, IOCFG_TR_BASE, 0x60, 0x10, 18, 1), -+ -+ PIN_FIELD_BASE(19, 19, IOCFG_LB_BASE, 0x50, 0x10, 2, 1), -+ PIN_FIELD_BASE(20, 20, IOCFG_LB_BASE, 0x50, 0x10, 1, 1), -+ -+ PIN_FIELD_BASE(21, 21, IOCFG_RB_BASE, 0x70, 0x10, 17, 1), -+ PIN_FIELD_BASE(22, 22, IOCFG_RB_BASE, 0x70, 0x10, 23, 1), -+ PIN_FIELD_BASE(23, 23, IOCFG_RB_BASE, 0x70, 0x10, 20, 1), -+ PIN_FIELD_BASE(24, 24, IOCFG_RB_BASE, 0x70, 0x10, 19, 1), -+ PIN_FIELD_BASE(25, 25, IOCFG_RB_BASE, 0x70, 0x10, 21, 1), -+ PIN_FIELD_BASE(26, 26, IOCFG_RB_BASE, 0x70, 0x10, 22, 1), -+ PIN_FIELD_BASE(27, 27, IOCFG_RB_BASE, 0x70, 0x10, 18, 1), -+ PIN_FIELD_BASE(28, 28, IOCFG_RB_BASE, 0x70, 0x10, 25, 1), -+ PIN_FIELD_BASE(29, 29, IOCFG_RB_BASE, 0x70, 0x10, 26, 1), -+ PIN_FIELD_BASE(30, 30, IOCFG_RB_BASE, 0x70, 0x10, 27, 1), -+ PIN_FIELD_BASE(31, 31, IOCFG_RB_BASE, 0x70, 0x10, 24, 1), -+ PIN_FIELD_BASE(32, 32, IOCFG_RB_BASE, 0x70, 0x10, 28, 1), -+ PIN_FIELD_BASE(33, 33, IOCFG_RB_BASE, 0x80, 0x10, 0, 1), -+ PIN_FIELD_BASE(34, 34, IOCFG_RB_BASE, 0x70, 0x10, 31, 1), -+ PIN_FIELD_BASE(35, 35, IOCFG_RB_BASE, 0x70, 0x10, 29, 1), -+ PIN_FIELD_BASE(36, 36, IOCFG_RB_BASE, 0x70, 0x10, 30, 1), -+ PIN_FIELD_BASE(37, 37, IOCFG_RB_BASE, 0x80, 0x10, 1, 1), -+ PIN_FIELD_BASE(38, 38, IOCFG_RB_BASE, 0x70, 0x10, 11, 1), -+ PIN_FIELD_BASE(39, 39, IOCFG_RB_BASE, 0x70, 0x10, 10, 1), -+ PIN_FIELD_BASE(40, 40, IOCFG_RB_BASE, 0x70, 0x10, 0, 1), -+ PIN_FIELD_BASE(41, 41, IOCFG_RB_BASE, 0x70, 0x10, 1, 1), -+ PIN_FIELD_BASE(42, 42, IOCFG_RB_BASE, 0x70, 0x10, 9, 1), -+ PIN_FIELD_BASE(43, 43, IOCFG_RB_BASE, 0x70, 0x10, 8, 1), -+ PIN_FIELD_BASE(44, 44, IOCFG_RB_BASE, 0x70, 0x10, 7, 1), -+ PIN_FIELD_BASE(45, 45, IOCFG_RB_BASE, 0x70, 0x10, 6, 1), -+ PIN_FIELD_BASE(46, 46, IOCFG_RB_BASE, 0x70, 0x10, 5, 1), -+ PIN_FIELD_BASE(47, 47, IOCFG_RB_BASE, 0x70, 0x10, 4, 1), -+ PIN_FIELD_BASE(48, 48, IOCFG_RB_BASE, 0x70, 0x10, 3, 1), -+ PIN_FIELD_BASE(49, 49, IOCFG_RB_BASE, 0x70, 0x10, 2, 1), -+ PIN_FIELD_BASE(50, 50, IOCFG_RB_BASE, 0x70, 0x10, 15, 1), -+ PIN_FIELD_BASE(51, 51, IOCFG_RB_BASE, 0x70, 0x10, 12, 1), -+ PIN_FIELD_BASE(52, 52, IOCFG_RB_BASE, 0x70, 0x10, 13, 1), -+ PIN_FIELD_BASE(53, 53, IOCFG_RB_BASE, 0x70, 0x10, 14, 1), -+ PIN_FIELD_BASE(54, 54, IOCFG_RB_BASE, 0x70, 0x10, 16, 1), -+ -+ PIN_FIELD_BASE(55, 55, IOCFG_TR_BASE, 0x60, 0x10, 12, 1), -+ PIN_FIELD_BASE(56, 56, IOCFG_TR_BASE, 0x60, 0x10, 13, 1), -+ PIN_FIELD_BASE(57, 57, IOCFG_TR_BASE, 0x60, 0x10, 11, 1), -+ PIN_FIELD_BASE(58, 58, IOCFG_TR_BASE, 0x60, 0x10, 2, 1), -+ PIN_FIELD_BASE(59, 59, IOCFG_TR_BASE, 0x60, 0x10, 3, 1), -+ PIN_FIELD_BASE(60, 60, IOCFG_TR_BASE, 0x60, 0x10, 4, 1), -+ PIN_FIELD_BASE(61, 61, IOCFG_TR_BASE, 0x60, 0x10, 1, 1), -+ PIN_FIELD_BASE(62, 62, IOCFG_TR_BASE, 0x60, 0x10, 5, 1), -+ PIN_FIELD_BASE(64, 64, IOCFG_TR_BASE, 0x60, 0x10, 6, 1), -+ PIN_FIELD_BASE(65, 65, IOCFG_TR_BASE, 0x60, 0x10, 7, 1), -+ PIN_FIELD_BASE(66, 66, IOCFG_TR_BASE, 0x60, 0x10, 8, 1), -+ PIN_FIELD_BASE(67, 67, IOCFG_TR_BASE, 0x60, 0x10, 9, 1), -+ PIN_FIELD_BASE(68, 68, IOCFG_TR_BASE, 0x60, 0x10, 10, 1), -+ -+ PIN_FIELD_BASE(69, 69, IOCFG_TL_BASE, 0x50, 0x10, 1, 1), -+ PIN_FIELD_BASE(70, 70, IOCFG_TL_BASE, 0x50, 0x10, 2, 1), -+ -+ PIN_FIELD_BASE(73, 73, IOCFG_LB_BASE, 0x50, 0x10, 3, 1), -+ PIN_FIELD_BASE(74, 74, IOCFG_LB_BASE, 0x50, 0x10, 0, 1), -+ -+ PIN_FIELD_BASE(80, 80, IOCFG_TR_BASE, 0x60, 0x10, 16, 1), -+ PIN_FIELD_BASE(81, 81, IOCFG_TR_BASE, 0x60, 0x10, 17, 1), -+ PIN_FIELD_BASE(82, 82, IOCFG_TR_BASE, 0x60, 0x10, 14, 1), -+ PIN_FIELD_BASE(83, 83, IOCFG_TR_BASE, 0x60, 0x10, 15, 1), -+}; -+ -+static const struct mtk_pin_field_calc mt7988_pin_r0_range[] = { -+ PIN_FIELD_BASE(0, 0, IOCFG_TL_BASE, 0x60, 0x10, 7, 1), -+ PIN_FIELD_BASE(1, 1, IOCFG_TL_BASE, 0x60, 0x10, 8, 1), -+ PIN_FIELD_BASE(2, 2, IOCFG_TL_BASE, 0x60, 0x10, 5, 1), -+ PIN_FIELD_BASE(3, 3, IOCFG_TL_BASE, 0x60, 0x10, 6, 1), -+ PIN_FIELD_BASE(4, 4, IOCFG_TL_BASE, 0x60, 0x10, 0, 1), -+ PIN_FIELD_BASE(5, 5, IOCFG_TL_BASE, 0x60, 0x10, 3, 1), -+ PIN_FIELD_BASE(6, 6, IOCFG_TL_BASE, 0x60, 0x10, 4, 1), -+ -+ PIN_FIELD_BASE(11, 11, IOCFG_TR_BASE, 0x80, 0x10, 0, 1), -+ PIN_FIELD_BASE(12, 12, IOCFG_TR_BASE, 0x80, 0x10, 18, 1), -+ -+ PIN_FIELD_BASE(19, 19, IOCFG_LB_BASE, 0x70, 0x10, 2, 1), -+ PIN_FIELD_BASE(20, 20, IOCFG_LB_BASE, 0x70, 0x10, 1, 1), -+ -+ PIN_FIELD_BASE(21, 21, IOCFG_RB_BASE, 0x90, 0x10, 17, 1), -+ PIN_FIELD_BASE(22, 22, IOCFG_RB_BASE, 0x90, 0x10, 23, 1), -+ PIN_FIELD_BASE(23, 23, IOCFG_RB_BASE, 0x90, 0x10, 20, 1), -+ PIN_FIELD_BASE(24, 24, IOCFG_RB_BASE, 0x90, 0x10, 19, 1), -+ PIN_FIELD_BASE(25, 25, IOCFG_RB_BASE, 0x90, 0x10, 21, 1), -+ PIN_FIELD_BASE(26, 26, IOCFG_RB_BASE, 0x90, 0x10, 22, 1), -+ PIN_FIELD_BASE(27, 27, IOCFG_RB_BASE, 0x90, 0x10, 18, 1), -+ PIN_FIELD_BASE(28, 28, IOCFG_RB_BASE, 0x90, 0x10, 25, 1), -+ PIN_FIELD_BASE(29, 29, IOCFG_RB_BASE, 0x90, 0x10, 26, 1), -+ PIN_FIELD_BASE(30, 30, IOCFG_RB_BASE, 0x90, 0x10, 27, 1), -+ PIN_FIELD_BASE(31, 31, IOCFG_RB_BASE, 0x90, 0x10, 24, 1), -+ PIN_FIELD_BASE(32, 32, IOCFG_RB_BASE, 0x90, 0x10, 28, 1), -+ PIN_FIELD_BASE(33, 33, IOCFG_RB_BASE, 0xa0, 0x10, 0, 1), -+ PIN_FIELD_BASE(34, 34, IOCFG_RB_BASE, 0x90, 0x10, 31, 1), -+ PIN_FIELD_BASE(35, 35, IOCFG_RB_BASE, 0x90, 0x10, 29, 1), -+ PIN_FIELD_BASE(36, 36, IOCFG_RB_BASE, 0x90, 0x10, 30, 1), -+ PIN_FIELD_BASE(37, 37, IOCFG_RB_BASE, 0xa0, 0x10, 1, 1), -+ PIN_FIELD_BASE(38, 38, IOCFG_RB_BASE, 0x90, 0x10, 11, 1), -+ PIN_FIELD_BASE(39, 39, IOCFG_RB_BASE, 0x90, 0x10, 10, 1), -+ PIN_FIELD_BASE(40, 40, IOCFG_RB_BASE, 0x90, 0x10, 0, 1), -+ PIN_FIELD_BASE(41, 41, IOCFG_RB_BASE, 0x90, 0x10, 1, 1), -+ PIN_FIELD_BASE(42, 42, IOCFG_RB_BASE, 0x90, 0x10, 9, 1), -+ PIN_FIELD_BASE(43, 43, IOCFG_RB_BASE, 0x90, 0x10, 8, 1), -+ PIN_FIELD_BASE(44, 44, IOCFG_RB_BASE, 0x90, 0x10, 7, 1), -+ PIN_FIELD_BASE(45, 45, IOCFG_RB_BASE, 0x90, 0x10, 6, 1), -+ PIN_FIELD_BASE(46, 46, IOCFG_RB_BASE, 0x90, 0x10, 5, 1), -+ PIN_FIELD_BASE(47, 47, IOCFG_RB_BASE, 0x90, 0x10, 4, 1), -+ PIN_FIELD_BASE(48, 48, IOCFG_RB_BASE, 0x90, 0x10, 3, 1), -+ PIN_FIELD_BASE(49, 49, IOCFG_RB_BASE, 0x90, 0x10, 2, 1), -+ PIN_FIELD_BASE(50, 50, IOCFG_RB_BASE, 0x90, 0x10, 15, 1), -+ PIN_FIELD_BASE(51, 51, IOCFG_RB_BASE, 0x90, 0x10, 12, 1), -+ PIN_FIELD_BASE(52, 52, IOCFG_RB_BASE, 0x90, 0x10, 13, 1), -+ PIN_FIELD_BASE(53, 53, IOCFG_RB_BASE, 0x90, 0x10, 14, 1), -+ PIN_FIELD_BASE(54, 54, IOCFG_RB_BASE, 0x90, 0x10, 16, 1), -+ -+ PIN_FIELD_BASE(55, 55, IOCFG_TR_BASE, 0x80, 0x10, 12, 1), -+ PIN_FIELD_BASE(56, 56, IOCFG_TR_BASE, 0x80, 0x10, 13, 1), -+ PIN_FIELD_BASE(57, 57, IOCFG_TR_BASE, 0x80, 0x10, 11, 1), -+ PIN_FIELD_BASE(58, 58, IOCFG_TR_BASE, 0x80, 0x10, 2, 1), -+ PIN_FIELD_BASE(59, 59, IOCFG_TR_BASE, 0x80, 0x10, 3, 1), -+ PIN_FIELD_BASE(60, 60, IOCFG_TR_BASE, 0x80, 0x10, 4, 1), -+ PIN_FIELD_BASE(61, 61, IOCFG_TR_BASE, 0x80, 0x10, 1, 1), -+ PIN_FIELD_BASE(62, 62, IOCFG_TR_BASE, 0x80, 0x10, 5, 1), -+ PIN_FIELD_BASE(64, 64, IOCFG_TR_BASE, 0x80, 0x10, 6, 1), -+ PIN_FIELD_BASE(65, 65, IOCFG_TR_BASE, 0x80, 0x10, 7, 1), -+ PIN_FIELD_BASE(66, 66, IOCFG_TR_BASE, 0x80, 0x10, 8, 1), -+ PIN_FIELD_BASE(67, 67, IOCFG_TR_BASE, 0x80, 0x10, 9, 1), -+ PIN_FIELD_BASE(68, 68, IOCFG_TR_BASE, 0x80, 0x10, 10, 1), -+ -+ PIN_FIELD_BASE(69, 69, IOCFG_TL_BASE, 0x60, 0x10, 1, 1), -+ PIN_FIELD_BASE(70, 70, IOCFG_TL_BASE, 0x60, 0x10, 2, 1), -+ -+ PIN_FIELD_BASE(73, 73, IOCFG_LB_BASE, 0x70, 0x10, 3, 1), -+ PIN_FIELD_BASE(74, 74, IOCFG_LB_BASE, 0x70, 0x10, 0, 1), -+ -+ PIN_FIELD_BASE(80, 80, IOCFG_TR_BASE, 0x80, 0x10, 16, 1), -+ PIN_FIELD_BASE(81, 81, IOCFG_TR_BASE, 0x80, 0x10, 17, 1), -+ PIN_FIELD_BASE(82, 82, IOCFG_TR_BASE, 0x80, 0x10, 14, 1), -+ PIN_FIELD_BASE(83, 83, IOCFG_TR_BASE, 0x80, 0x10, 15, 1), -+}; -+ -+static const struct mtk_pin_field_calc mt7988_pin_r1_range[] = { -+ PIN_FIELD_BASE(0, 0, IOCFG_TL_BASE, 0x70, 0x10, 7, 1), -+ PIN_FIELD_BASE(1, 1, IOCFG_TL_BASE, 0x70, 0x10, 8, 1), -+ PIN_FIELD_BASE(2, 2, IOCFG_TL_BASE, 0x70, 0x10, 5, 1), -+ PIN_FIELD_BASE(3, 3, IOCFG_TL_BASE, 0x70, 0x10, 6, 1), -+ PIN_FIELD_BASE(4, 4, IOCFG_TL_BASE, 0x70, 0x10, 0, 1), -+ PIN_FIELD_BASE(5, 5, IOCFG_TL_BASE, 0x70, 0x10, 3, 1), -+ PIN_FIELD_BASE(6, 6, IOCFG_TL_BASE, 0x70, 0x10, 4, 1), -+ -+ PIN_FIELD_BASE(11, 11, IOCFG_TR_BASE, 0x90, 0x10, 0, 1), -+ PIN_FIELD_BASE(12, 12, IOCFG_TR_BASE, 0x90, 0x10, 18, 1), -+ -+ PIN_FIELD_BASE(19, 19, IOCFG_LB_BASE, 0x80, 0x10, 2, 1), -+ PIN_FIELD_BASE(20, 20, IOCFG_LB_BASE, 0x80, 0x10, 1, 1), -+ -+ PIN_FIELD_BASE(21, 21, IOCFG_RB_BASE, 0xb0, 0x10, 17, 1), -+ PIN_FIELD_BASE(22, 22, IOCFG_RB_BASE, 0xb0, 0x10, 23, 1), -+ PIN_FIELD_BASE(23, 23, IOCFG_RB_BASE, 0xb0, 0x10, 20, 1), -+ PIN_FIELD_BASE(24, 24, IOCFG_RB_BASE, 0xb0, 0x10, 19, 1), -+ PIN_FIELD_BASE(25, 25, IOCFG_RB_BASE, 0xb0, 0x10, 21, 1), -+ PIN_FIELD_BASE(26, 26, IOCFG_RB_BASE, 0xb0, 0x10, 22, 1), -+ PIN_FIELD_BASE(27, 27, IOCFG_RB_BASE, 0xb0, 0x10, 18, 1), -+ PIN_FIELD_BASE(28, 28, IOCFG_RB_BASE, 0xb0, 0x10, 25, 1), -+ PIN_FIELD_BASE(29, 29, IOCFG_RB_BASE, 0xb0, 0x10, 26, 1), -+ PIN_FIELD_BASE(30, 30, IOCFG_RB_BASE, 0xb0, 0x10, 27, 1), -+ PIN_FIELD_BASE(31, 31, IOCFG_RB_BASE, 0xb0, 0x10, 24, 1), -+ PIN_FIELD_BASE(32, 32, IOCFG_RB_BASE, 0xb0, 0x10, 28, 1), -+ PIN_FIELD_BASE(33, 33, IOCFG_RB_BASE, 0xc0, 0x10, 0, 1), -+ PIN_FIELD_BASE(34, 34, IOCFG_RB_BASE, 0xb0, 0x10, 31, 1), -+ PIN_FIELD_BASE(35, 35, IOCFG_RB_BASE, 0xb0, 0x10, 29, 1), -+ PIN_FIELD_BASE(36, 36, IOCFG_RB_BASE, 0xb0, 0x10, 30, 1), -+ PIN_FIELD_BASE(37, 37, IOCFG_RB_BASE, 0xc0, 0x10, 1, 1), -+ PIN_FIELD_BASE(38, 38, IOCFG_RB_BASE, 0xb0, 0x10, 11, 1), -+ PIN_FIELD_BASE(39, 39, IOCFG_RB_BASE, 0xb0, 0x10, 10, 1), -+ PIN_FIELD_BASE(40, 40, IOCFG_RB_BASE, 0xb0, 0x10, 0, 1), -+ PIN_FIELD_BASE(41, 41, IOCFG_RB_BASE, 0xb0, 0x10, 1, 1), -+ PIN_FIELD_BASE(42, 42, IOCFG_RB_BASE, 0xb0, 0x10, 9, 1), -+ PIN_FIELD_BASE(43, 43, IOCFG_RB_BASE, 0xb0, 0x10, 8, 1), -+ PIN_FIELD_BASE(44, 44, IOCFG_RB_BASE, 0xb0, 0x10, 7, 1), -+ PIN_FIELD_BASE(45, 45, IOCFG_RB_BASE, 0xb0, 0x10, 6, 1), -+ PIN_FIELD_BASE(46, 46, IOCFG_RB_BASE, 0xb0, 0x10, 5, 1), -+ PIN_FIELD_BASE(47, 47, IOCFG_RB_BASE, 0xb0, 0x10, 4, 1), -+ PIN_FIELD_BASE(48, 48, IOCFG_RB_BASE, 0xb0, 0x10, 3, 1), -+ PIN_FIELD_BASE(49, 49, IOCFG_RB_BASE, 0xb0, 0x10, 2, 1), -+ PIN_FIELD_BASE(50, 50, IOCFG_RB_BASE, 0xb0, 0x10, 15, 1), -+ PIN_FIELD_BASE(51, 51, IOCFG_RB_BASE, 0xb0, 0x10, 12, 1), -+ PIN_FIELD_BASE(52, 52, IOCFG_RB_BASE, 0xb0, 0x10, 13, 1), -+ PIN_FIELD_BASE(53, 53, IOCFG_RB_BASE, 0xb0, 0x10, 14, 1), -+ PIN_FIELD_BASE(54, 54, IOCFG_RB_BASE, 0xb0, 0x10, 16, 1), -+ -+ PIN_FIELD_BASE(55, 55, IOCFG_TR_BASE, 0x90, 0x10, 12, 1), -+ PIN_FIELD_BASE(56, 56, IOCFG_TR_BASE, 0x90, 0x10, 13, 1), -+ PIN_FIELD_BASE(57, 57, IOCFG_TR_BASE, 0x90, 0x10, 11, 1), -+ PIN_FIELD_BASE(58, 58, IOCFG_TR_BASE, 0x90, 0x10, 2, 1), -+ PIN_FIELD_BASE(59, 59, IOCFG_TR_BASE, 0x90, 0x10, 3, 1), -+ PIN_FIELD_BASE(60, 60, IOCFG_TR_BASE, 0x90, 0x10, 4, 1), -+ PIN_FIELD_BASE(61, 61, IOCFG_TR_BASE, 0x90, 0x10, 1, 1), -+ PIN_FIELD_BASE(62, 62, IOCFG_TR_BASE, 0x90, 0x10, 5, 1), -+ PIN_FIELD_BASE(64, 64, IOCFG_TR_BASE, 0x90, 0x10, 6, 1), -+ PIN_FIELD_BASE(65, 65, IOCFG_TR_BASE, 0x90, 0x10, 7, 1), -+ PIN_FIELD_BASE(66, 66, IOCFG_TR_BASE, 0x90, 0x10, 8, 1), -+ PIN_FIELD_BASE(67, 67, IOCFG_TR_BASE, 0x90, 0x10, 9, 1), -+ PIN_FIELD_BASE(68, 68, IOCFG_TR_BASE, 0x90, 0x10, 10, 1), -+ -+ PIN_FIELD_BASE(69, 69, IOCFG_TL_BASE, 0x70, 0x10, 1, 1), -+ PIN_FIELD_BASE(70, 70, IOCFG_TL_BASE, 0x70, 0x10, 2, 1), -+ -+ PIN_FIELD_BASE(73, 73, IOCFG_LB_BASE, 0x80, 0x10, 3, 1), -+ PIN_FIELD_BASE(74, 74, IOCFG_LB_BASE, 0x80, 0x10, 0, 1), -+ -+ PIN_FIELD_BASE(80, 80, IOCFG_TR_BASE, 0x90, 0x10, 16, 1), -+ PIN_FIELD_BASE(81, 81, IOCFG_TR_BASE, 0x90, 0x10, 17, 1), -+ PIN_FIELD_BASE(82, 82, IOCFG_TR_BASE, 0x90, 0x10, 14, 1), -+ PIN_FIELD_BASE(83, 83, IOCFG_TR_BASE, 0x90, 0x10, 15, 1), -+}; -+ -+static const struct mtk_pin_reg_calc mt7988_reg_cals[] = { -+ [PINCTRL_PIN_REG_MODE] = MTK_RANGE(mt7988_pin_mode_range), -+ [PINCTRL_PIN_REG_DIR] = MTK_RANGE(mt7988_pin_dir_range), -+ [PINCTRL_PIN_REG_DI] = MTK_RANGE(mt7988_pin_di_range), -+ [PINCTRL_PIN_REG_DO] = MTK_RANGE(mt7988_pin_do_range), -+ [PINCTRL_PIN_REG_SMT] = MTK_RANGE(mt7988_pin_smt_range), -+ [PINCTRL_PIN_REG_IES] = MTK_RANGE(mt7988_pin_ies_range), -+ [PINCTRL_PIN_REG_PU] = MTK_RANGE(mt7988_pin_pu_range), -+ [PINCTRL_PIN_REG_PD] = MTK_RANGE(mt7988_pin_pd_range), -+ [PINCTRL_PIN_REG_DRV] = MTK_RANGE(mt7988_pin_drv_range), -+ [PINCTRL_PIN_REG_PUPD] = MTK_RANGE(mt7988_pin_pupd_range), -+ [PINCTRL_PIN_REG_R0] = MTK_RANGE(mt7988_pin_r0_range), -+ [PINCTRL_PIN_REG_R1] = MTK_RANGE(mt7988_pin_r1_range), -+}; -+ -+static const struct mtk_pin_desc mt7988_pins[] = { -+ MT7988_TYPE0_PIN(0, "UART2_RXD"), -+ MT7988_TYPE0_PIN(1, "UART2_TXD"), -+ MT7988_TYPE0_PIN(2, "UART2_CTS"), -+ MT7988_TYPE0_PIN(3, "UART2_RTS"), -+ MT7988_TYPE0_PIN(4, "GPIO_A"), -+ MT7988_TYPE0_PIN(5, "SMI_0_MDC"), -+ MT7988_TYPE0_PIN(6, "SMI_0_MDIO"), -+ MT7988_TYPE1_PIN(7, "PCIE30_2L_0_WAKE_N"), -+ MT7988_TYPE1_PIN(8, "PCIE30_2L_0_CLKREQ_N"), -+ MT7988_TYPE1_PIN(9, "PCIE30_1L_1_WAKE_N"), -+ MT7988_TYPE1_PIN(10, "PCIE30_1L_1_CLKREQ_N"), -+ MT7988_TYPE0_PIN(11, "GPIO_P"), -+ MT7988_TYPE0_PIN(12, "WATCHDOG"), -+ MT7988_TYPE1_PIN(13, "GPIO_RESET"), -+ MT7988_TYPE1_PIN(14, "GPIO_WPS"), -+ MT7988_TYPE2_PIN(15, "PMIC_I2C_SCL"), -+ MT7988_TYPE2_PIN(16, "PMIC_I2C_SDA"), -+ MT7988_TYPE2_PIN(17, "I2C_1_SCL"), -+ MT7988_TYPE2_PIN(18, "I2C_1_SDA"), -+ MT7988_TYPE0_PIN(19, "PCIE30_2L_0_PRESET_N"), -+ MT7988_TYPE0_PIN(20, "PCIE30_1L_1_PRESET_N"), -+ MT7988_TYPE0_PIN(21, "PWMD1"), -+ MT7988_TYPE0_PIN(22, "SPI0_WP"), -+ MT7988_TYPE0_PIN(23, "SPI0_HOLD"), -+ MT7988_TYPE0_PIN(24, "SPI0_CSB"), -+ MT7988_TYPE0_PIN(25, "SPI0_MISO"), -+ MT7988_TYPE0_PIN(26, "SPI0_MOSI"), -+ MT7988_TYPE0_PIN(27, "SPI0_CLK"), -+ MT7988_TYPE0_PIN(28, "SPI1_CSB"), -+ MT7988_TYPE0_PIN(29, "SPI1_MISO"), -+ MT7988_TYPE0_PIN(30, "SPI1_MOSI"), -+ MT7988_TYPE0_PIN(31, "SPI1_CLK"), -+ MT7988_TYPE0_PIN(32, "SPI2_CLK"), -+ MT7988_TYPE0_PIN(33, "SPI2_MOSI"), -+ MT7988_TYPE0_PIN(34, "SPI2_MISO"), -+ MT7988_TYPE0_PIN(35, "SPI2_CSB"), -+ MT7988_TYPE0_PIN(36, "SPI2_HOLD"), -+ MT7988_TYPE0_PIN(37, "SPI2_WP"), -+ MT7988_TYPE0_PIN(38, "EMMC_RSTB"), -+ MT7988_TYPE0_PIN(39, "EMMC_DSL"), -+ MT7988_TYPE0_PIN(40, "EMMC_CK"), -+ MT7988_TYPE0_PIN(41, "EMMC_CMD"), -+ MT7988_TYPE0_PIN(42, "EMMC_DATA_7"), -+ MT7988_TYPE0_PIN(43, "EMMC_DATA_6"), -+ MT7988_TYPE0_PIN(44, "EMMC_DATA_5"), -+ MT7988_TYPE0_PIN(45, "EMMC_DATA_4"), -+ MT7988_TYPE0_PIN(46, "EMMC_DATA_3"), -+ MT7988_TYPE0_PIN(47, "EMMC_DATA_2"), -+ MT7988_TYPE0_PIN(48, "EMMC_DATA_1"), -+ MT7988_TYPE0_PIN(49, "EMMC_DATA_0"), -+ MT7988_TYPE0_PIN(50, "PCM_FS_I2S_LRCK"), -+ MT7988_TYPE0_PIN(51, "PCM_CLK_I2S_BCLK"), -+ MT7988_TYPE0_PIN(52, "PCM_DRX_I2S_DIN"), -+ MT7988_TYPE0_PIN(53, "PCM_DTX_I2S_DOUT"), -+ MT7988_TYPE0_PIN(54, "PCM_MCK_I2S_MCLK"), -+ MT7988_TYPE0_PIN(55, "UART0_RXD"), -+ MT7988_TYPE0_PIN(56, "UART0_TXD"), -+ MT7988_TYPE0_PIN(57, "PWMD0"), -+ MT7988_TYPE0_PIN(58, "JTAG_JTDI"), -+ MT7988_TYPE0_PIN(59, "JTAG_JTDO"), -+ MT7988_TYPE0_PIN(60, "JTAG_JTMS"), -+ MT7988_TYPE0_PIN(61, "JTAG_JTCLK"), -+ MT7988_TYPE0_PIN(62, "JTAG_JTRST_N"), -+ MT7988_TYPE1_PIN(63, "USB_DRV_VBUS_P1"), -+ MT7988_TYPE0_PIN(64, "LED_A"), -+ MT7988_TYPE0_PIN(65, "LED_B"), -+ MT7988_TYPE0_PIN(66, "LED_C"), -+ MT7988_TYPE0_PIN(67, "LED_D"), -+ MT7988_TYPE0_PIN(68, "LED_E"), -+ MT7988_TYPE0_PIN(69, "GPIO_B"), -+ MT7988_TYPE0_PIN(70, "GPIO_C"), -+ MT7988_TYPE2_PIN(71, "I2C_2_SCL"), -+ MT7988_TYPE2_PIN(72, "I2C_2_SDA"), -+ MT7988_TYPE0_PIN(73, "PCIE30_2L_1_PRESET_N"), -+ MT7988_TYPE0_PIN(74, "PCIE30_1L_0_PRESET_N"), -+ MT7988_TYPE1_PIN(75, "PCIE30_2L_1_WAKE_N"), -+ MT7988_TYPE1_PIN(76, "PCIE30_2L_1_CLKREQ_N"), -+ MT7988_TYPE1_PIN(77, "PCIE30_1L_0_WAKE_N"), -+ MT7988_TYPE1_PIN(78, "PCIE30_1L_0_CLKREQ_N"), -+ MT7988_TYPE1_PIN(79, "USB_DRV_VBUS_P0"), -+ MT7988_TYPE0_PIN(80, "UART1_RXD"), -+ MT7988_TYPE0_PIN(81, "UART1_TXD"), -+ MT7988_TYPE0_PIN(82, "UART1_CTS"), -+ MT7988_TYPE0_PIN(83, "UART1_RTS"), -+}; -+ -+/* jtag */ -+static const int mt7988_tops_jtag0_0_pins[] = { 0, 1, 2, 3, 4 }; -+static const int mt7988_tops_jtag0_0_funcs[] = { 2, 2, 2, 2, 2 }; -+ -+static const int mt7988_wo0_jtag_pins[] = { 50, 51, 52, 53, 54 }; -+static const int mt7988_wo0_jtag_funcs[] = { 3, 3, 3, 3, 3 }; -+ -+static const int mt7988_wo1_jtag_pins[] = { 50, 51, 52, 53, 54 }; -+static const int mt7988_wo1_jtag_funcs[] = { 4, 4, 4, 4, 4 }; -+ -+static const int mt7988_wo2_jtag_pins[] = { 50, 51, 52, 53, 54 }; -+static const int mt7988_wo2_jtag_funcs[] = { 5, 5, 5, 5, 5 }; -+ -+static const int mt7988_jtag_pins[] = { 58, 59, 60, 61, 62 }; -+static const int mt7988_jtag_funcs[] = { 1, 1, 1, 1, 1 }; -+ -+static const int mt7988_tops_jtag0_1_pins[] = { 58, 59, 60, 61, 62 }; -+static const int mt7988_tops_jtag0_1_funcs[] = { 4, 4, 4, 4, 4 }; -+ -+/* int_usxgmii */ -+static const int mt7988_int_usxgmii_pins[] = { 2, 3 }; -+static const int mt7988_int_usxgmii_funcs[] = { 3, 3 }; -+ -+/* pwm */ -+static const int mt7988_pwm0_pins[] = { 57 }; -+static const int mt7988_pwm0_funcs[] = { 1 }; -+ -+static const int mt7988_pwm1_pins[] = { 21 }; -+static const int mt7988_pwm1_funcs[] = { 1 }; -+ -+static const int mt7988_pwm2_pins[] = { 80 }; -+static const int mt7988_pwm2_funcs[] = { 2 }; -+ -+static const int mt7988_pwm3_pins[] = { 81 }; -+static const int mt7988_pwm3_funcs[] = { 2 }; -+ -+static const int mt7988_pwm4_pins[] = { 82 }; -+static const int mt7988_pwm4_funcs[] = { 2 }; -+ -+static const int mt7988_pwm5_pins[] = { 83 }; -+static const int mt7988_pwm5_funcs[] = { 2 }; -+ -+static const int mt7988_pwm6_pins[] = { 69 }; -+static const int mt7988_pwm6_funcs[] = { 3 }; -+ -+static const int mt7988_pwm7_pins[] = { 70 }; -+static const int mt7988_pwm7_funcs[] = { 3 }; -+ -+/* dfd */ -+static const int mt7988_dfd_pins[] = { 0, 1, 2, 3, 4 }; -+static const int mt7988_dfd_funcs[] = { 4, 4, 4, 4, 4 }; -+ -+/* i2c */ -+static const int mt7988_xfi_phy0_i2c0_pins[] = { 0, 1 }; -+static const int mt7988_xfi_phy0_i2c0_funcs[] = { 5, 5 }; -+ -+static const int mt7988_xfi_phy1_i2c0_pins[] = { 0, 1 }; -+static const int mt7988_xfi_phy1_i2c0_funcs[] = { 6, 6 }; -+ -+static const int mt7988_xfi_phy_pll_i2c0_pins[] = { 3, 4 }; -+static const int mt7988_xfi_phy_pll_i2c0_funcs[] = { 5, 5 }; -+ -+static const int mt7988_xfi_phy_pll_i2c1_pins[] = { 3, 4 }; -+static const int mt7988_xfi_phy_pll_i2c1_funcs[] = { 6, 6 }; -+ -+static const int mt7988_i2c0_0_pins[] = { 5, 6 }; -+static const int mt7988_i2c0_0_funcs[] = { 2, 2 }; -+ -+static const int mt7988_i2c1_sfp_pins[] = { 5, 6 }; -+static const int mt7988_i2c1_sfp_funcs[] = { 4, 4 }; -+ -+static const int mt7988_xfi_pextp_phy0_i2c_pins[] = { 5, 6 }; -+static const int mt7988_xfi_pextp_phy0_i2c_funcs[] = { 5, 5 }; -+ -+static const int mt7988_xfi_pextp_phy1_i2c_pins[] = { 5, 6 }; -+static const int mt7988_xfi_pextp_phy1_i2c_funcs[] = { 6, 6 }; -+ -+static const int mt7988_i2c0_1_pins[] = { 15, 16 }; -+static const int mt7988_i2c0_1_funcs[] = { 1, 1 }; -+ -+static const int mt7988_u30_phy_i2c0_pins[] = { 15, 16 }; -+static const int mt7988_u30_phy_i2c0_funcs[] = { 2, 2 }; -+ -+static const int mt7988_u32_phy_i2c0_pins[] = { 15, 16 }; -+static const int mt7988_u32_phy_i2c0_funcs[] = { 3, 3 }; -+ -+static const int mt7988_xfi_phy0_i2c1_pins[] = { 15, 16 }; -+static const int mt7988_xfi_phy0_i2c1_funcs[] = { 5, 5 }; -+ -+static const int mt7988_xfi_phy1_i2c1_pins[] = { 15, 16 }; -+static const int mt7988_xfi_phy1_i2c1_funcs[] = { 6, 6 }; -+ -+static const int mt7988_xfi_phy_pll_i2c2_pins[] = { 15, 16 }; -+static const int mt7988_xfi_phy_pll_i2c2_funcs[] = { 7, 7 }; -+ -+static const int mt7988_i2c1_0_pins[] = { 17, 18 }; -+static const int mt7988_i2c1_0_funcs[] = { 1, 1 }; -+ -+static const int mt7988_u30_phy_i2c1_pins[] = { 17, 18 }; -+static const int mt7988_u30_phy_i2c1_funcs[] = { 2, 2 }; -+ -+static const int mt7988_u32_phy_i2c1_pins[] = { 17, 18 }; -+static const int mt7988_u32_phy_i2c1_funcs[] = { 3, 3 }; -+ -+static const int mt7988_xfi_phy_pll_i2c3_pins[] = { 17, 18 }; -+static const int mt7988_xfi_phy_pll_i2c3_funcs[] = { 4, 4 }; -+ -+static const int mt7988_sgmii0_i2c_pins[] = { 17, 18 }; -+static const int mt7988_sgmii0_i2c_funcs[] = { 5, 5 }; -+ -+static const int mt7988_sgmii1_i2c_pins[] = { 17, 18 }; -+static const int mt7988_sgmii1_i2c_funcs[] = { 6, 6 }; -+ -+static const int mt7988_i2c1_2_pins[] = { 69, 70 }; -+static const int mt7988_i2c1_2_funcs[] = { 2, 2 }; -+ -+static const int mt7988_i2c2_0_pins[] = { 69, 70 }; -+static const int mt7988_i2c2_0_funcs[] = { 4, 4 }; -+ -+static const int mt7988_i2c2_1_pins[] = { 71, 72 }; -+static const int mt7988_i2c2_1_funcs[] = { 1, 1 }; -+ -+/* eth */ -+static const int mt7988_mdc_mdio0_pins[] = { 5, 6 }; -+static const int mt7988_mdc_mdio0_funcs[] = { 1, 1 }; -+ -+static const int mt7988_2p5g_ext_mdio_pins[] = { 28, 29 }; -+static const int mt7988_2p5g_ext_mdio_funcs[] = { 6, 6 }; -+ -+static const int mt7988_gbe_ext_mdio_pins[] = { 30, 31 }; -+static const int mt7988_gbe_ext_mdio_funcs[] = { 6, 6 }; -+ -+static const int mt7988_mdc_mdio1_pins[] = { 69, 70 }; -+static const int mt7988_mdc_mdio1_funcs[] = { 1, 1 }; -+ -+/* pcie */ -+static const int mt7988_pcie_wake_n0_0_pins[] = { 7 }; -+static const int mt7988_pcie_wake_n0_0_funcs[] = { 1 }; -+ -+static const int mt7988_pcie_clk_req_n0_0_pins[] = { 8 }; -+static const int mt7988_pcie_clk_req_n0_0_funcs[] = { 1 }; -+ -+static const int mt7988_pcie_wake_n3_0_pins[] = { 9 }; -+static const int mt7988_pcie_wake_n3_0_funcs[] = { 1 }; -+ -+static const int mt7988_pcie_clk_req_n3_pins[] = { 10 }; -+static const int mt7988_pcie_clk_req_n3_funcs[] = { 1 }; -+ -+static const int mt7988_pcie_clk_req_n0_1_pins[] = { 10 }; -+static const int mt7988_pcie_clk_req_n0_1_funcs[] = { 2 }; -+ -+static const int mt7988_pcie_p0_phy_i2c_pins[] = { 7, 8 }; -+static const int mt7988_pcie_p0_phy_i2c_funcs[] = { 3, 3 }; -+ -+static const int mt7988_pcie_p1_phy_i2c_pins[] = { 7, 8 }; -+static const int mt7988_pcie_p1_phy_i2c_funcs[] = { 4, 4 }; -+ -+static const int mt7988_pcie_p3_phy_i2c_pins[] = { 9, 10 }; -+static const int mt7988_pcie_p3_phy_i2c_funcs[] = { 4, 4 }; -+ -+static const int mt7988_pcie_p2_phy_i2c_pins[] = { 7, 8 }; -+static const int mt7988_pcie_p2_phy_i2c_funcs[] = { 5, 5 }; -+ -+static const int mt7988_ckm_phy_i2c_pins[] = { 9, 10 }; -+static const int mt7988_ckm_phy_i2c_funcs[] = { 5, 5 }; -+ -+static const int mt7988_pcie_wake_n0_1_pins[] = { 13 }; -+static const int mt7988_pcie_wake_n0_1_funcs[] = { 2 }; -+ -+static const int mt7988_pcie_wake_n3_1_pins[] = { 14 }; -+static const int mt7988_pcie_wake_n3_1_funcs[] = { 2 }; -+ -+static const int mt7988_pcie_2l_0_pereset_pins[] = { 19 }; -+static const int mt7988_pcie_2l_0_pereset_funcs[] = { 1 }; -+ -+static const int mt7988_pcie_1l_1_pereset_pins[] = { 20 }; -+static const int mt7988_pcie_1l_1_pereset_funcs[] = { 1 }; -+ -+static const int mt7988_pcie_clk_req_n2_1_pins[] = { 63 }; -+static const int mt7988_pcie_clk_req_n2_1_funcs[] = { 2 }; -+ -+static const int mt7988_pcie_2l_1_pereset_pins[] = { 73 }; -+static const int mt7988_pcie_2l_1_pereset_funcs[] = { 1 }; -+ -+static const int mt7988_pcie_1l_0_pereset_pins[] = { 74 }; -+static const int mt7988_pcie_1l_0_pereset_funcs[] = { 1 }; -+ -+static const int mt7988_pcie_wake_n1_0_pins[] = { 75 }; -+static const int mt7988_pcie_wake_n1_0_funcs[] = { 1 }; -+ -+static const int mt7988_pcie_clk_req_n1_pins[] = { 76 }; -+static const int mt7988_pcie_clk_req_n1_funcs[] = { 1 }; -+ -+static const int mt7988_pcie_wake_n2_0_pins[] = { 77 }; -+static const int mt7988_pcie_wake_n2_0_funcs[] = { 1 }; -+ -+static const int mt7988_pcie_clk_req_n2_0_pins[] = { 78 }; -+static const int mt7988_pcie_clk_req_n2_0_funcs[] = { 1 }; -+ -+static const int mt7988_pcie_wake_n2_1_pins[] = { 79 }; -+static const int mt7988_pcie_wake_n2_1_funcs[] = { 2 }; -+ -+/* pmic */ -+static const int mt7988_pmic_pins[] = { 11 }; -+static const int mt7988_pmic_funcs[] = { 1 }; -+ -+/* watchdog */ -+static const int mt7988_watchdog_pins[] = { 12 }; -+static const int mt7988_watchdog_funcs[] = { 1 }; -+ -+/* spi */ -+static const int mt7988_spi0_wp_hold_pins[] = { 22, 23 }; -+static const int mt7988_spi0_wp_hold_funcs[] = { 1, 1 }; -+ -+static const int mt7988_spi0_pins[] = { 24, 25, 26, 27 }; -+static const int mt7988_spi0_funcs[] = { 1, 1, 1, 1 }; -+ -+static const int mt7988_spi1_pins[] = { 28, 29, 30, 31 }; -+static const int mt7988_spi1_funcs[] = { 1, 1, 1, 1 }; -+ -+static const int mt7988_spi2_pins[] = { 32, 33, 34, 35 }; -+static const int mt7988_spi2_funcs[] = { 1, 1, 1, 1 }; -+ -+static const int mt7988_spi2_wp_hold_pins[] = { 36, 37 }; -+static const int mt7988_spi2_wp_hold_funcs[] = { 1, 1 }; -+ -+/* flash */ -+static const int mt7988_snfi_pins[] = { 22, 23, 24, 25, 26, 27 }; -+static const int mt7988_snfi_funcs[] = { 2, 2, 2, 2, 2, 2 }; -+ -+static const int mt7988_emmc_45_pins[] = { -+ 21, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37 }; -+static const int mt7988_emmc_45_funcs[] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; -+ -+static const int mt7988_emmc_51_pins[] = { -+ 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49 }; -+static const int mt7988_emmc_51_funcs[] = { -+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; -+ -+/* uart */ -+static const int mt7988_uart2_pins[] = { 0, 1, 2, 3 }; -+static const int mt7988_uart2_funcs[] = { 1, 1, 1, 1 }; -+ -+static const int mt7988_tops_uart0_0_pins[] = { 22, 23 }; -+static const int mt7988_tops_uart0_0_funcs[] = { 3, 3 }; -+ -+static const int mt7988_uart2_0_pins[] = { 28, 29, 30, 31 }; -+static const int mt7988_uart2_0_funcs[] = { 2, 2, 2, 2 }; -+ -+static const int mt7988_uart1_0_pins[] = { 32, 33, 34, 35 }; -+static const int mt7988_uart1_0_funcs[] = { 2, 2, 2, 2 }; -+ -+static const int mt7988_uart2_1_pins[] = { 32, 33, 34, 35 }; -+static const int mt7988_uart2_1_funcs[] = { 3, 3, 3, 3 }; -+ -+static const int mt7988_net_wo0_uart_txd_0_pins[] = { 28 }; -+static const int mt7988_net_wo0_uart_txd_0_funcs[] = { 3 }; -+ -+static const int mt7988_net_wo1_uart_txd_0_pins[] = { 29 }; -+static const int mt7988_net_wo1_uart_txd_0_funcs[] = { 3 }; -+ -+static const int mt7988_net_wo2_uart_txd_0_pins[] = { 30 }; -+static const int mt7988_net_wo2_uart_txd_0_funcs[] = { 3 }; -+ -+static const int mt7988_tops_uart1_0_pins[] = { 28, 29 }; -+static const int mt7988_tops_uart1_0_funcs[] = { 4, 4 }; -+ -+static const int mt7988_tops_uart0_1_pins[] = { 30, 31 }; -+static const int mt7988_tops_uart0_1_funcs[] = { 4, 4 }; -+ -+static const int mt7988_tops_uart1_1_pins[] = { 36, 37 }; -+static const int mt7988_tops_uart1_1_funcs[] = { 3, 3 }; -+ -+static const int mt7988_uart0_pins[] = { 55, 56 }; -+static const int mt7988_uart0_funcs[] = { 1, 1 }; -+ -+static const int mt7988_tops_uart0_2_pins[] = { 55, 56 }; -+static const int mt7988_tops_uart0_2_funcs[] = { 2, 2 }; -+ -+static const int mt7988_uart2_2_pins[] = { 50, 51, 52, 53 }; -+static const int mt7988_uart2_2_funcs[] = { 2, 2, 2, 2 }; -+ -+static const int mt7988_uart1_1_pins[] = { 58, 59, 60, 61 }; -+static const int mt7988_uart1_1_funcs[] = { 2, 2, 2, 2 }; -+ -+static const int mt7988_uart2_3_pins[] = { 58, 59, 60, 61 }; -+static const int mt7988_uart2_3_funcs[] = { 3, 3, 3, 3 }; -+ -+static const int mt7988_uart1_2_pins[] = { 80, 81, 82, 83 }; -+static const int mt7988_uart1_2_funcs[] = { 1, 1, 1, 1 }; -+ -+static const int mt7988_tops_uart1_2_pins[] = { 80, 81 }; -+static const int mt7988_tops_uart1_2_funcs[] = { 4, 4, }; -+ -+static const int mt7988_net_wo0_uart_txd_1_pins[] = { 80 }; -+static const int mt7988_net_wo0_uart_txd_1_funcs[] = { 3 }; -+ -+static const int mt7988_net_wo1_uart_txd_1_pins[] = { 81 }; -+static const int mt7988_net_wo1_uart_txd_1_funcs[] = { 3 }; -+ -+static const int mt7988_net_wo2_uart_txd_1_pins[] = { 82 }; -+static const int mt7988_net_wo2_uart_txd_1_funcs[] = { 3 }; -+ -+/* udi */ -+static const int mt7988_udi_pins[] = { 32, 33, 34, 35, 36 }; -+static const int mt7988_udi_funcs[] = { 4, 4, 4, 4, 4 }; -+ -+/* pcm */ -+static const int mt7988_pcm_pins[] = { 50, 51, 52, 53, 54 }; -+static const int mt7988_pcm_funcs[] = { 1, 1, 1, 1, 1 }; -+ -+/* led */ -+static const int mt7988_gbe_led1_pins[] = { 58, 59, 60, 61 }; -+static const int mt7988_gbe_led1_funcs[] = { 6, 6, 6, 6 }; -+ -+static const int mt7988_2p5gbe_led1_pins[] = { 62 }; -+static const int mt7988_2p5gbe_led1_funcs[] = { 6 }; -+ -+static const int mt7988_gbe_led0_pins[] = { 64, 65, 66, 67 }; -+static const int mt7988_gbe_led0_funcs[] = { 1, 1, 1, 1 }; -+ -+static const int mt7988_2p5gbe_led0_pins[] = { 68 }; -+static const int mt7988_2p5gbe_led0_funcs[] = { 1 }; -+ -+/* usb */ -+static const int mt7988_drv_vbus_p1_pins[] = { 63 }; -+static const int mt7988_drv_vbus_p1_funcs[] = { 1 }; -+ -+static const int mt7988_drv_vbus_pins[] = { 79 }; -+static const int mt7988_drv_vbus_funcs[] = { 1 }; -+ -+static const struct mtk_group_desc mt7988_groups[] = { -+ PINCTRL_PIN_GROUP("uart2", mt7988_uart2), -+ PINCTRL_PIN_GROUP("tops_jtag0_0", mt7988_tops_jtag0_0), -+ PINCTRL_PIN_GROUP("int_usxgmii", mt7988_int_usxgmii), -+ PINCTRL_PIN_GROUP("dfd", mt7988_dfd), -+ PINCTRL_PIN_GROUP("xfi_phy0_i2c0", mt7988_xfi_phy0_i2c0), -+ PINCTRL_PIN_GROUP("xfi_phy1_i2c0", mt7988_xfi_phy1_i2c0), -+ PINCTRL_PIN_GROUP("xfi_phy_pll_i2c0", mt7988_xfi_phy_pll_i2c0), -+ PINCTRL_PIN_GROUP("xfi_phy_pll_i2c1", mt7988_xfi_phy_pll_i2c1), -+ PINCTRL_PIN_GROUP("i2c0_0", mt7988_i2c0_0), -+ PINCTRL_PIN_GROUP("i2c1_sfp", mt7988_i2c1_sfp), -+ PINCTRL_PIN_GROUP("xfi_pextp_phy0_i2c", mt7988_xfi_pextp_phy0_i2c), -+ PINCTRL_PIN_GROUP("xfi_pextp_phy1_i2c", mt7988_xfi_pextp_phy1_i2c), -+ PINCTRL_PIN_GROUP("mdc_mdio0", mt7988_mdc_mdio0), -+ PINCTRL_PIN_GROUP("pcie_wake_n0_0", mt7988_pcie_wake_n0_0), -+ PINCTRL_PIN_GROUP("pcie_clk_req_n0_0", mt7988_pcie_clk_req_n0_0), -+ PINCTRL_PIN_GROUP("pcie_wake_n3_0", mt7988_pcie_wake_n3_0), -+ PINCTRL_PIN_GROUP("pcie_clk_req_n3", mt7988_pcie_clk_req_n3), -+ PINCTRL_PIN_GROUP("pcie_clk_req_n0_1", mt7988_pcie_clk_req_n0_1), -+ PINCTRL_PIN_GROUP("pcie_p0_phy_i2c", mt7988_pcie_p0_phy_i2c), -+ PINCTRL_PIN_GROUP("pcie_p1_phy_i2c", mt7988_pcie_p1_phy_i2c), -+ PINCTRL_PIN_GROUP("pcie_p2_phy_i2c", mt7988_pcie_p2_phy_i2c), -+ PINCTRL_PIN_GROUP("pcie_p3_phy_i2c", mt7988_pcie_p3_phy_i2c), -+ PINCTRL_PIN_GROUP("ckm_phy_i2c", mt7988_ckm_phy_i2c), -+ PINCTRL_PIN_GROUP("pcie_pmic", mt7988_pmic), -+ PINCTRL_PIN_GROUP("watchdog", mt7988_watchdog), -+ PINCTRL_PIN_GROUP("pcie_wake_n0_1", mt7988_pcie_wake_n0_1), -+ PINCTRL_PIN_GROUP("pcie_wake_n3_1", mt7988_pcie_wake_n3_1), -+ PINCTRL_PIN_GROUP("i2c0_1", mt7988_i2c0_1), -+ PINCTRL_PIN_GROUP("u30_phy_i2c0", mt7988_u30_phy_i2c0), -+ PINCTRL_PIN_GROUP("u32_phy_i2c0", mt7988_u32_phy_i2c0), -+ PINCTRL_PIN_GROUP("xfi_phy0_i2c1", mt7988_xfi_phy0_i2c1), -+ PINCTRL_PIN_GROUP("xfi_phy1_i2c1", mt7988_xfi_phy1_i2c1), -+ PINCTRL_PIN_GROUP("xfi_phy_pll_i2c2", mt7988_xfi_phy_pll_i2c2), -+ PINCTRL_PIN_GROUP("i2c1_0", mt7988_i2c1_0), -+ PINCTRL_PIN_GROUP("u30_phy_i2c1", mt7988_u30_phy_i2c1), -+ PINCTRL_PIN_GROUP("u32_phy_i2c1", mt7988_u32_phy_i2c1), -+ PINCTRL_PIN_GROUP("xfi_phy_pll_i2c3", mt7988_xfi_phy_pll_i2c3), -+ PINCTRL_PIN_GROUP("sgmii0_i2c", mt7988_sgmii0_i2c), -+ PINCTRL_PIN_GROUP("sgmii1_i2c", mt7988_sgmii1_i2c), -+ PINCTRL_PIN_GROUP("pcie_2l_0_pereset", mt7988_pcie_2l_0_pereset), -+ PINCTRL_PIN_GROUP("pcie_1l_1_pereset", mt7988_pcie_1l_1_pereset), -+ PINCTRL_PIN_GROUP("pwm1", mt7988_pwm1), -+ PINCTRL_PIN_GROUP("spi0_wp_hold", mt7988_spi0_wp_hold), -+ PINCTRL_PIN_GROUP("spi0", mt7988_spi0), -+ PINCTRL_PIN_GROUP("spi1", mt7988_spi1), -+ PINCTRL_PIN_GROUP("spi2", mt7988_spi2), -+ PINCTRL_PIN_GROUP("spi2_wp_hold", mt7988_spi2_wp_hold), -+ PINCTRL_PIN_GROUP("snfi", mt7988_snfi), -+ PINCTRL_PIN_GROUP("tops_uart0_0", mt7988_tops_uart0_0), -+ PINCTRL_PIN_GROUP("uart2_0", mt7988_uart2_0), -+ PINCTRL_PIN_GROUP("uart1_0", mt7988_uart1_0), -+ PINCTRL_PIN_GROUP("uart2_1", mt7988_uart2_1), -+ PINCTRL_PIN_GROUP("net_wo0_uart_txd_0", mt7988_net_wo0_uart_txd_0), -+ PINCTRL_PIN_GROUP("net_wo1_uart_txd_0", mt7988_net_wo1_uart_txd_0), -+ PINCTRL_PIN_GROUP("net_wo2_uart_txd_0", mt7988_net_wo2_uart_txd_0), -+ PINCTRL_PIN_GROUP("tops_uart0_0", mt7988_tops_uart1_0), -+ PINCTRL_PIN_GROUP("tops_uart0_1", mt7988_tops_uart0_1), -+ PINCTRL_PIN_GROUP("tops_uart1_1", mt7988_tops_uart1_1), -+ PINCTRL_PIN_GROUP("udi", mt7988_udi), -+ PINCTRL_PIN_GROUP("emmc_45", mt7988_emmc_45), -+ PINCTRL_PIN_GROUP("emmc_51", mt7988_emmc_51), -+ PINCTRL_PIN_GROUP("2p5g_ext_mdio", mt7988_2p5g_ext_mdio), -+ PINCTRL_PIN_GROUP("gbe_ext_mdio", mt7988_gbe_ext_mdio), -+ PINCTRL_PIN_GROUP("pcm", mt7988_pcm), -+ PINCTRL_PIN_GROUP("uart0", mt7988_uart0), -+ PINCTRL_PIN_GROUP("tops_uart0_2", mt7988_tops_uart0_2), -+ PINCTRL_PIN_GROUP("uart2_2", mt7988_uart2_2), -+ PINCTRL_PIN_GROUP("wo0_jtag", mt7988_wo0_jtag), -+ PINCTRL_PIN_GROUP("wo1_jtag", mt7988_wo1_jtag), -+ PINCTRL_PIN_GROUP("wo2_jtag", mt7988_wo2_jtag), -+ PINCTRL_PIN_GROUP("pwm0", mt7988_pwm0), -+ PINCTRL_PIN_GROUP("jtag", mt7988_jtag), -+ PINCTRL_PIN_GROUP("tops_jtag0_1", mt7988_tops_jtag0_1), -+ PINCTRL_PIN_GROUP("uart2_3", mt7988_uart2_3), -+ PINCTRL_PIN_GROUP("uart1_1", mt7988_uart1_1), -+ PINCTRL_PIN_GROUP("gbe_led1", mt7988_gbe_led1), -+ PINCTRL_PIN_GROUP("2p5gbe_led1", mt7988_2p5gbe_led1), -+ PINCTRL_PIN_GROUP("gbe_led0", mt7988_gbe_led0), -+ PINCTRL_PIN_GROUP("2p5gbe_led0", mt7988_2p5gbe_led0), -+ PINCTRL_PIN_GROUP("drv_vbus_p1", mt7988_drv_vbus_p1), -+ PINCTRL_PIN_GROUP("pcie_clk_req_n2_1", mt7988_pcie_clk_req_n2_1), -+ PINCTRL_PIN_GROUP("mdc_mdio1", mt7988_mdc_mdio1), -+ PINCTRL_PIN_GROUP("i2c1_2", mt7988_i2c1_2), -+ PINCTRL_PIN_GROUP("pwm6", mt7988_pwm6), -+ PINCTRL_PIN_GROUP("pwm7", mt7988_pwm7), -+ PINCTRL_PIN_GROUP("i2c2_0", mt7988_i2c2_0), -+ PINCTRL_PIN_GROUP("i2c2_1", mt7988_i2c2_1), -+ PINCTRL_PIN_GROUP("pcie_2l_1_pereset", mt7988_pcie_2l_1_pereset), -+ PINCTRL_PIN_GROUP("pcie_1l_0_pereset", mt7988_pcie_1l_0_pereset), -+ PINCTRL_PIN_GROUP("pcie_wake_n1_0", mt7988_pcie_wake_n1_0), -+ PINCTRL_PIN_GROUP("pcie_clk_req_n1", mt7988_pcie_clk_req_n1), -+ PINCTRL_PIN_GROUP("pcie_wake_n2_0", mt7988_pcie_wake_n2_0), -+ PINCTRL_PIN_GROUP("pcie_clk_req_n2_0", mt7988_pcie_clk_req_n2_0), -+ PINCTRL_PIN_GROUP("drv_vbus", mt7988_drv_vbus), -+ PINCTRL_PIN_GROUP("pcie_wake_n2_1", mt7988_pcie_wake_n2_1), -+ PINCTRL_PIN_GROUP("uart1_2", mt7988_uart1_2), -+ PINCTRL_PIN_GROUP("pwm2", mt7988_pwm2), -+ PINCTRL_PIN_GROUP("pwm3", mt7988_pwm3), -+ PINCTRL_PIN_GROUP("pwm4", mt7988_pwm4), -+ PINCTRL_PIN_GROUP("pwm5", mt7988_pwm5), -+ PINCTRL_PIN_GROUP("net_wo0_uart_txd_0", mt7988_net_wo0_uart_txd_0), -+ PINCTRL_PIN_GROUP("net_wo1_uart_txd_0", mt7988_net_wo1_uart_txd_0), -+ PINCTRL_PIN_GROUP("net_wo2_uart_txd_0", mt7988_net_wo2_uart_txd_0), -+ PINCTRL_PIN_GROUP("tops_uart1_2", mt7988_tops_uart1_2), -+ PINCTRL_PIN_GROUP("net_wo0_uart_txd_1", mt7988_net_wo0_uart_txd_1), -+ PINCTRL_PIN_GROUP("net_wo1_uart_txd_1", mt7988_net_wo1_uart_txd_1), -+ PINCTRL_PIN_GROUP("net_wo2_uart_txd_1", mt7988_net_wo2_uart_txd_1), -+}; -+ -+static const struct mtk_io_type_desc mt7988_io_type_desc[] = { -+ [IO_TYPE_GRP0] = { -+ .name = "18OD33", -+ .bias_set = mtk_pinconf_bias_set_pupd_r1_r0, -+ .drive_set = mtk_pinconf_drive_set_v1, -+ .input_enable = mtk_pinconf_input_enable_v1, -+ }, -+ [IO_TYPE_GRP1] = { -+ .name = "18A01", -+ .bias_set = mtk_pinconf_bias_set_pu_pd, -+ .drive_set = mtk_pinconf_drive_set_v1, -+ .input_enable = mtk_pinconf_input_enable_v1, -+ }, -+ [IO_TYPE_GRP2] = { -+ .name = "I2C", -+ .input_enable = mtk_pinconf_input_enable_v1, -+ }, -+}; -+ -+/* Joint those groups owning the same capability in user point of view which -+ * allows that people tend to use through the device tree. -+ */ -+static const char *const mt7988_jtag_groups[] = { "tops_jtag0_0", "wo0_jtag", -+ "wo1_jtag", "wo2_jtag", "jtag", "tops_jtag0_1", }; -+static const char *const mt7988_int_usxgmii_groups[] = { "int_usxgmii", }; -+static const char *const mt7988_pwm_groups[] = { "pwm0", "pwm1", "pwm2", "pwm3", -+ "pwm4", "pwm5", "pwm6", "pwm7" }; -+static const char *const mt7988_dfd_groups[] = { "dfd", }; -+static const char *const mt7988_i2c_groups[] = { "xfi_phy0_i2c0", -+ "xfi_phy1_i2c0", "xfi_phy_pll_i2c0", "xfi_phy_pll_i2c1", "i2c0_0", -+ "i2c1_sfp", "xfi_pextp_phy0_i2c", "xfi_pextp_phy1_i2c", "i2c0_1", -+ "u30_phy_i2c0", "u32_phy_i2c0", "xfi_phy0_i2c1", "xfi_phy1_i2c1", -+ "xfi_phy_pll_i2c2", "i2c1_0", "u30_phy_i2c1", "u32_phy_i2c1", -+ "xfi_phy_pll_i2c3", "sgmii0_i2c", "sgmii1_i2c", "i2c1_2", "i2c2_0", -+ "i2c2_1", }; -+static const char *const mt7988_ethernet_groups[] = { "mdc_mdio0", -+ "2p5g_ext_mdio", "gbe_ext_mdio", "mdc_mdio1", }; -+static const char *const mt7988_pcie_groups[] = { "pcie_wake_n0_0", -+ "pcie_clk_req_n0_0", "pcie_wake_n3_0", "pcie_clk_req_n3", -+ "pcie_p0_phy_i2c", "pcie_p1_phy_i2c", "pcie_p3_phy_i2", -+ "pcie_p2_phy_i2c", "ckm_phy_i2c", "pcie_wake_n0_1", "pcie_wake_n3_1", -+ "pcie_2l_0_pereset", "pcie_1l_1_pereset", "pcie_clk_req_n2_1", -+ "pcie_2l_1_perese", "pcie_1l_0_pereset", "pcie_wake_n1_0", -+ "cie_clk_req_n1", "pcie_wake_n2_0", "pcie_wake_n2_1", }; -+static const char *const mt7988_pmic_groups[] = { "pmic", }; -+static const char *const mt7988_wdt_groups[] = { "watchdog", }; -+static const char *const mt7988_spi_groups[] = { "spi0", "spi0_wp_hold", -+ "spi1", "spi2", "spi2_wp_hold", }; -+static const char *const mt7988_flash_groups[] = { "emmc_45", "snfi", -+ "emmc_51" }; -+static const char *const mt7988_uart_groups[] = { "uart2", "tops_uart0_0", -+ "uart2_0", "uart1_0", "uart2_1", -+ "net_wo0_uart_txd_0", "net_wo1_uart_txd_0", "net_wo2_uart_txd_0", -+ "tops_uart1_0", "ops_uart0_1", "ops_uart1_1", -+ "uart0", "tops_uart0_2", "uart1_1", -+ "uart2_3", "uart1_2", "tops_uart1_2", -+ "net_wo0_uart_txd_1", "net_wo1_uart_txd_1", "net_wo2_uart_txd_1", }; -+static const char *const mt7988_udi_groups[] = { "udi", }; -+static const char *const mt7988_pcm_groups[] = { "pcm", }; -+static const char *const mt7988_led_groups[] = { "gbe_led1", "2p5gbe_led1", -+ "gbe_led0", "2p5gbe_led0", "wf5g_led0", "wf5g_led1", }; -+static const char *const mt7988_usb_groups[] = { "drv_vbus", "drv_vbus_p1", }; -+ -+static const struct mtk_function_desc mt7988_functions[] = { -+ {"jtag", mt7988_jtag_groups, ARRAY_SIZE(mt7988_jtag_groups)}, -+ {"int_usxgmii", mt7988_int_usxgmii_groups, -+ ARRAY_SIZE(mt7988_int_usxgmii_groups)}, -+ {"pwm", mt7988_pwm_groups, ARRAY_SIZE(mt7988_pwm_groups)}, -+ {"dfd", mt7988_dfd_groups, ARRAY_SIZE(mt7988_dfd_groups)}, -+ {"i2c", mt7988_i2c_groups, ARRAY_SIZE(mt7988_i2c_groups)}, -+ {"eth", mt7988_ethernet_groups, ARRAY_SIZE(mt7988_ethernet_groups)}, -+ {"pcie", mt7988_pcie_groups, ARRAY_SIZE(mt7988_pcie_groups)}, -+ {"pmic", mt7988_pmic_groups, ARRAY_SIZE(mt7988_pmic_groups)}, -+ {"watchdog", mt7988_wdt_groups, ARRAY_SIZE(mt7988_wdt_groups)}, -+ {"spi", mt7988_spi_groups, ARRAY_SIZE(mt7988_spi_groups)}, -+ {"flash", mt7988_flash_groups, ARRAY_SIZE(mt7988_flash_groups)}, -+ {"uart", mt7988_uart_groups, ARRAY_SIZE(mt7988_uart_groups)}, -+ {"udi", mt7988_udi_groups, ARRAY_SIZE(mt7988_udi_groups)}, -+ {"pcm", mt7988_pcm_groups, ARRAY_SIZE(mt7988_pcm_groups)}, -+ {"usb", mt7988_usb_groups, ARRAY_SIZE(mt7988_usb_groups)}, -+ {"led", mt7988_led_groups, ARRAY_SIZE(mt7988_led_groups)}, -+}; -+ -+static const char *const mt7988_pinctrl_register_base_names[] = { -+ "gpio_base", "iocfg_tr_base", "iocfg_br_base", "iocfg_rb_base", -+ "iocfg_lb_base", "iocfg_tl_base", -+}; -+ -+static const struct mtk_pinctrl_soc mt7988_data = { -+ .name = "mt7988_pinctrl", -+ .reg_cal = mt7988_reg_cals, -+ .pins = mt7988_pins, -+ .npins = ARRAY_SIZE(mt7988_pins), -+ .grps = mt7988_groups, -+ .ngrps = ARRAY_SIZE(mt7988_groups), -+ .funcs = mt7988_functions, -+ .nfuncs = ARRAY_SIZE(mt7988_functions), -+ .io_type = mt7988_io_type_desc, -+ .ntype = ARRAY_SIZE(mt7988_io_type_desc), -+ .gpio_mode = 0, -+ .base_names = mt7988_pinctrl_register_base_names, -+ .nbase_names = ARRAY_SIZE(mt7988_pinctrl_register_base_names), -+ .base_calc = 1, -+}; -+ -+static int mtk_pinctrl_mt7988_probe(struct udevice *dev) -+{ -+ return mtk_pinctrl_common_probe(dev, &mt7988_data); -+} -+ -+static const struct udevice_id mt7988_pctrl_match[] = { -+ {.compatible = "mediatek,mt7988-pinctrl"}, -+ { /* sentinel */ } -+}; -+ -+U_BOOT_DRIVER(mt7988_pinctrl) = { -+ .name = "mt7988_pinctrl", -+ .id = UCLASS_PINCTRL, -+ .of_match = mt7988_pctrl_match, -+ .ops = &mtk_pinctrl_ops, -+ .probe = mtk_pinctrl_mt7988_probe, -+ .priv_auto = sizeof(struct mtk_pinctrl_priv), -+}; diff --git a/lede/package/boot/uboot-mediatek/patches/101-16-net-mediatek-connect-switch-to-PSE-only-when-startin.patch b/lede/package/boot/uboot-mediatek/patches/101-16-net-mediatek-connect-switch-to-PSE-only-when-startin.patch deleted file mode 100644 index e3e6212742..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/101-16-net-mediatek-connect-switch-to-PSE-only-when-startin.patch +++ /dev/null @@ -1,138 +0,0 @@ -From a0405999ebecf21ed9f76f1dc9420682cd3feba0 Mon Sep 17 00:00:00 2001 -From: Weijie Gao -Date: Wed, 19 Jul 2023 17:16:54 +0800 -Subject: [PATCH 16/29] net: mediatek: connect switch to PSE only when starting - eth is requested - -So far the switch is initialized in probe stage and is connected to PSE -unconditionally. This will cause all packets being flooded to PSE and may -cause PSE hang before entering linux. - -This patch changes the connection between switch and PSE: -- Still initialize switch in probe stage, but disconnect it with PSE -- Connect switch with PSE on eth start -- Disconnect on eth stop - -Signed-off-by: Weijie Gao ---- - drivers/net/mtk_eth.c | 44 ++++++++++++++++++++++++++++++++++++++++--- - 1 file changed, 41 insertions(+), 3 deletions(-) - ---- a/drivers/net/mtk_eth.c -+++ b/drivers/net/mtk_eth.c -@@ -123,8 +123,10 @@ struct mtk_eth_priv { - - enum mtk_switch sw; - int (*switch_init)(struct mtk_eth_priv *priv); -+ void (*switch_mac_control)(struct mtk_eth_priv *priv, bool enable); - u32 mt753x_smi_addr; - u32 mt753x_phy_base; -+ u32 mt753x_pmcr; - - struct gpio_desc rst_gpio; - int mcm; -@@ -613,6 +615,16 @@ static int mt7530_pad_clk_setup(struct m - return 0; - } - -+static void mt7530_mac_control(struct mtk_eth_priv *priv, bool enable) -+{ -+ u32 pmcr = FORCE_MODE; -+ -+ if (enable) -+ pmcr = priv->mt753x_pmcr; -+ -+ mt753x_reg_write(priv, PMCR_REG(6), pmcr); -+} -+ - static int mt7530_setup(struct mtk_eth_priv *priv) - { - u16 phy_addr, phy_val; -@@ -663,11 +675,14 @@ static int mt7530_setup(struct mtk_eth_p - FORCE_DPX | FORCE_LINK; - - /* MT7530 Port6: Forced 1000M/FD, FC disabled */ -- mt753x_reg_write(priv, PMCR_REG(6), val); -+ priv->mt753x_pmcr = val; - - /* MT7530 Port5: Forced link down */ - mt753x_reg_write(priv, PMCR_REG(5), FORCE_MODE); - -+ /* Keep MAC link down before starting eth */ -+ mt753x_reg_write(priv, PMCR_REG(6), FORCE_MODE); -+ - /* MT7530 Port6: Set to RGMII */ - mt753x_reg_rmw(priv, MT7530_P6ECR, P6_INTF_MODE_M, P6_INTF_MODE_RGMII); - -@@ -823,6 +838,17 @@ static void mt7531_phy_setting(struct mt - } - } - -+static void mt7531_mac_control(struct mtk_eth_priv *priv, bool enable) -+{ -+ u32 pmcr = FORCE_MODE_LNK; -+ -+ if (enable) -+ pmcr = priv->mt753x_pmcr; -+ -+ mt753x_reg_write(priv, PMCR_REG(5), pmcr); -+ mt753x_reg_write(priv, PMCR_REG(6), pmcr); -+} -+ - static int mt7531_setup(struct mtk_eth_priv *priv) - { - u16 phy_addr, phy_val; -@@ -882,8 +908,11 @@ static int mt7531_setup(struct mtk_eth_p - (SPEED_1000M << FORCE_SPD_S) | FORCE_DPX | - FORCE_LINK; - -- mt753x_reg_write(priv, PMCR_REG(5), pmcr); -- mt753x_reg_write(priv, PMCR_REG(6), pmcr); -+ priv->mt753x_pmcr = pmcr; -+ -+ /* Keep MAC link down before starting eth */ -+ mt753x_reg_write(priv, PMCR_REG(5), FORCE_MODE_LNK); -+ mt753x_reg_write(priv, PMCR_REG(6), FORCE_MODE_LNK); - - /* Turn on PHYs */ - for (i = 0; i < MT753X_NUM_PHYS; i++) { -@@ -1227,6 +1256,9 @@ static int mtk_eth_start(struct udevice - - mtk_eth_fifo_init(priv); - -+ if (priv->switch_mac_control) -+ priv->switch_mac_control(priv, true); -+ - /* Start PHY */ - if (priv->sw == SW_NONE) { - ret = mtk_phy_start(priv); -@@ -1245,6 +1277,9 @@ static void mtk_eth_stop(struct udevice - { - struct mtk_eth_priv *priv = dev_get_priv(dev); - -+ if (priv->switch_mac_control) -+ priv->switch_mac_control(priv, false); -+ - mtk_pdma_rmw(priv, PDMA_GLO_CFG_REG, - TX_WB_DDONE | RX_DMA_EN | TX_DMA_EN, 0); - udelay(500); -@@ -1484,16 +1519,19 @@ static int mtk_eth_of_to_plat(struct ude - /* check for switch first, otherwise phy will be used */ - priv->sw = SW_NONE; - priv->switch_init = NULL; -+ priv->switch_mac_control = NULL; - str = dev_read_string(dev, "mediatek,switch"); - - if (str) { - if (!strcmp(str, "mt7530")) { - priv->sw = SW_MT7530; - priv->switch_init = mt7530_setup; -+ priv->switch_mac_control = mt7530_mac_control; - priv->mt753x_smi_addr = MT753X_DFL_SMI_ADDR; - } else if (!strcmp(str, "mt7531")) { - priv->sw = SW_MT7531; - priv->switch_init = mt7531_setup; -+ priv->switch_mac_control = mt7531_mac_control; - priv->mt753x_smi_addr = MT753X_DFL_SMI_ADDR; - } else { - printf("error: unsupported switch\n"); diff --git a/lede/package/boot/uboot-mediatek/patches/101-17-net-mediatek-optimize-the-switch-reset-delay-wait-ti.patch b/lede/package/boot/uboot-mediatek/patches/101-17-net-mediatek-optimize-the-switch-reset-delay-wait-ti.patch deleted file mode 100644 index c8823ac545..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/101-17-net-mediatek-optimize-the-switch-reset-delay-wait-ti.patch +++ /dev/null @@ -1,56 +0,0 @@ -From d9a52701f6677889cc3332ab7a888f35cd69cc76 Mon Sep 17 00:00:00 2001 -From: Weijie Gao -Date: Wed, 19 Jul 2023 17:16:59 +0800 -Subject: [PATCH 17/29] net: mediatek: optimize the switch reset delay wait - time - -Not all switches requires 1 second delay after deasserting reset. -MT7531 requires only maximum 200ms. - -This patch defines dedicated reset wait time for each switch chip, and will -significantly improve the boot time for boards using MT7531. - -Signed-off-by: Weijie Gao ---- - drivers/net/mtk_eth.c | 7 +++++-- - 1 file changed, 5 insertions(+), 2 deletions(-) - ---- a/drivers/net/mtk_eth.c -+++ b/drivers/net/mtk_eth.c -@@ -127,6 +127,7 @@ struct mtk_eth_priv { - u32 mt753x_smi_addr; - u32 mt753x_phy_base; - u32 mt753x_pmcr; -+ u32 mt753x_reset_wait_time; - - struct gpio_desc rst_gpio; - int mcm; -@@ -943,12 +944,12 @@ int mt753x_switch_init(struct mtk_eth_pr - reset_assert(&priv->rst_mcm); - udelay(1000); - reset_deassert(&priv->rst_mcm); -- mdelay(1000); -+ mdelay(priv->mt753x_reset_wait_time); - } else if (dm_gpio_is_valid(&priv->rst_gpio)) { - dm_gpio_set_value(&priv->rst_gpio, 0); - udelay(1000); - dm_gpio_set_value(&priv->rst_gpio, 1); -- mdelay(1000); -+ mdelay(priv->mt753x_reset_wait_time); - } - - ret = priv->switch_init(priv); -@@ -1528,11 +1529,13 @@ static int mtk_eth_of_to_plat(struct ude - priv->switch_init = mt7530_setup; - priv->switch_mac_control = mt7530_mac_control; - priv->mt753x_smi_addr = MT753X_DFL_SMI_ADDR; -+ priv->mt753x_reset_wait_time = 1000; - } else if (!strcmp(str, "mt7531")) { - priv->sw = SW_MT7531; - priv->switch_init = mt7531_setup; - priv->switch_mac_control = mt7531_mac_control; - priv->mt753x_smi_addr = MT753X_DFL_SMI_ADDR; -+ priv->mt753x_reset_wait_time = 200; - } else { - printf("error: unsupported switch\n"); - return -EINVAL; diff --git a/lede/package/boot/uboot-mediatek/patches/101-18-net-mediatek-fix-direct-MDIO-clause-45-access-via-So.patch b/lede/package/boot/uboot-mediatek/patches/101-18-net-mediatek-fix-direct-MDIO-clause-45-access-via-So.patch deleted file mode 100644 index 5214e842c8..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/101-18-net-mediatek-fix-direct-MDIO-clause-45-access-via-So.patch +++ /dev/null @@ -1,34 +0,0 @@ -From c44f6ac1a31961b0d4faf982ee42167de5ac1672 Mon Sep 17 00:00:00 2001 -From: Weijie Gao -Date: Wed, 19 Jul 2023 17:17:03 +0800 -Subject: [PATCH 18/29] net: mediatek: fix direct MDIO clause 45 access via SoC - -The original direct MDIO clause 45 access via SoC is missing the -data output. This patch adds it back to ensure MDIO clause 45 can -work properly for external PHYs. - -Signed-off-by: Weijie Gao ---- - drivers/net/mtk_eth.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - ---- a/drivers/net/mtk_eth.c -+++ b/drivers/net/mtk_eth.c -@@ -198,7 +198,7 @@ static int mtk_mii_rw(struct mtk_eth_pri - (((u32)phy << MDIO_PHY_ADDR_S) & MDIO_PHY_ADDR_M) | - (((u32)reg << MDIO_REG_ADDR_S) & MDIO_REG_ADDR_M); - -- if (cmd == MDIO_CMD_WRITE) -+ if (cmd == MDIO_CMD_WRITE || cmd == MDIO_CMD_ADDR) - val |= data & MDIO_RW_DATA_M; - - mtk_gmac_write(priv, GMAC_PIAC_REG, val | PHY_ACS_ST); -@@ -210,7 +210,7 @@ static int mtk_mii_rw(struct mtk_eth_pri - return ret; - } - -- if (cmd == MDIO_CMD_READ) { -+ if (cmd == MDIO_CMD_READ || cmd == MDIO_CMD_READ_C45) { - val = mtk_gmac_read(priv, GMAC_PIAC_REG); - return val & MDIO_RW_DATA_M; - } diff --git a/lede/package/boot/uboot-mediatek/patches/101-19-net-mediatek-add-missing-static-qualifier.patch b/lede/package/boot/uboot-mediatek/patches/101-19-net-mediatek-add-missing-static-qualifier.patch deleted file mode 100644 index 9350ca04dc..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/101-19-net-mediatek-add-missing-static-qualifier.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 9d35558bedfb82860c63cc11d3426afcbd82cb5c Mon Sep 17 00:00:00 2001 -From: Weijie Gao -Date: Wed, 19 Jul 2023 17:17:07 +0800 -Subject: [PATCH 19/29] net: mediatek: add missing static qualifier - -mt7531_mmd_ind_read and mt753x_switch_init are defined without static. -Since they're not used outside this file, we should add them back. - -Signed-off-by: Weijie Gao - -fixup to add static qualifier ---- - drivers/net/mtk_eth.c | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - ---- a/drivers/net/mtk_eth.c -+++ b/drivers/net/mtk_eth.c -@@ -436,7 +436,8 @@ static int mt7531_mii_ind_write(struct m - MDIO_ST_C22); - } - --int mt7531_mmd_ind_read(struct mtk_eth_priv *priv, u8 addr, u8 devad, u16 reg) -+static int mt7531_mmd_ind_read(struct mtk_eth_priv *priv, u8 addr, u8 devad, -+ u16 reg) - { - u8 phy_addr; - int ret; -@@ -934,7 +935,7 @@ static int mt7531_setup(struct mtk_eth_p - return 0; - } - --int mt753x_switch_init(struct mtk_eth_priv *priv) -+static int mt753x_switch_init(struct mtk_eth_priv *priv) - { - int ret; - int i; diff --git a/lede/package/boot/uboot-mediatek/patches/101-20-net-mediatek-add-support-for-SGMII-1Gbps-auto-negoti.patch b/lede/package/boot/uboot-mediatek/patches/101-20-net-mediatek-add-support-for-SGMII-1Gbps-auto-negoti.patch deleted file mode 100644 index 45acbc36ac..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/101-20-net-mediatek-add-support-for-SGMII-1Gbps-auto-negoti.patch +++ /dev/null @@ -1,149 +0,0 @@ -From 8e59c3cc700a6efb8db574f3c8e18b6181b4a07d Mon Sep 17 00:00:00 2001 -From: Weijie Gao -Date: Wed, 19 Jul 2023 17:17:13 +0800 -Subject: [PATCH 20/29] net: mediatek: add support for SGMII 1Gbps - auto-negotiation mode - -Existing SGMII support of mtk-eth is actually a MediaTek-specific -2.5Gbps high-speed SGMII (HSGMII) which does not support -auto-negotiation mode. - -This patch adds SGMII 1Gbps auto-negotiation mode and rename the -existing HSGMII to 2500basex. - -Signed-off-by: Weijie Gao ---- - drivers/net/mtk_eth.c | 46 +++++++++++++++++++++++++++++++++++++------ - drivers/net/mtk_eth.h | 2 ++ - 2 files changed, 42 insertions(+), 6 deletions(-) - ---- a/drivers/net/mtk_eth.c -+++ b/drivers/net/mtk_eth.c -@@ -893,7 +893,7 @@ static int mt7531_setup(struct mtk_eth_p - if (!port5_sgmii) - mt7531_port_rgmii_init(priv, 5); - break; -- case PHY_INTERFACE_MODE_SGMII: -+ case PHY_INTERFACE_MODE_2500BASEX: - mt7531_port_sgmii_init(priv, 6); - if (port5_sgmii) - mt7531_port_sgmii_init(priv, 5); -@@ -986,6 +986,7 @@ static void mtk_phy_link_adjust(struct m - (MAC_RX_PKT_LEN_1536 << MAC_RX_PKT_LEN_S) | - MAC_MODE | FORCE_MODE | - MAC_TX_EN | MAC_RX_EN | -+ DEL_RXFIFO_CLR | - BKOFF_EN | BACKPR_EN; - - switch (priv->phydev->speed) { -@@ -996,6 +997,7 @@ static void mtk_phy_link_adjust(struct m - mcr |= (SPEED_100M << FORCE_SPD_S); - break; - case SPEED_1000: -+ case SPEED_2500: - mcr |= (SPEED_1000M << FORCE_SPD_S); - break; - }; -@@ -1048,7 +1050,8 @@ static int mtk_phy_start(struct mtk_eth_ - return 0; - } - -- mtk_phy_link_adjust(priv); -+ if (!priv->force_mode) -+ mtk_phy_link_adjust(priv); - - debug("Speed: %d, %s duplex%s\n", phydev->speed, - (phydev->duplex) ? "full" : "half", -@@ -1076,7 +1079,31 @@ static int mtk_phy_probe(struct udevice - return 0; - } - --static void mtk_sgmii_init(struct mtk_eth_priv *priv) -+static void mtk_sgmii_an_init(struct mtk_eth_priv *priv) -+{ -+ /* Set SGMII GEN1 speed(1G) */ -+ clrsetbits_le32(priv->sgmii_base + priv->soc->ana_rgc3, -+ SGMSYS_SPEED_2500, 0); -+ -+ /* Enable SGMII AN */ -+ setbits_le32(priv->sgmii_base + SGMSYS_PCS_CONTROL_1, -+ SGMII_AN_ENABLE); -+ -+ /* SGMII AN mode setting */ -+ writel(SGMII_AN_MODE, priv->sgmii_base + SGMSYS_SGMII_MODE); -+ -+ /* SGMII PN SWAP setting */ -+ if (priv->pn_swap) { -+ setbits_le32(priv->sgmii_base + SGMSYS_QPHY_WRAP_CTRL, -+ SGMII_PN_SWAP_TX_RX); -+ } -+ -+ /* Release PHYA power down state */ -+ clrsetbits_le32(priv->sgmii_base + SGMSYS_QPHY_PWR_STATE_CTRL, -+ SGMII_PHYA_PWD, 0); -+} -+ -+static void mtk_sgmii_force_init(struct mtk_eth_priv *priv) - { - /* Set SGMII GEN2 speed(2.5G) */ - setbits_le32(priv->sgmii_base + priv->soc->ana_rgc3, -@@ -1111,10 +1138,14 @@ static void mtk_mac_init(struct mtk_eth_ - ge_mode = GE_MODE_RGMII; - break; - case PHY_INTERFACE_MODE_SGMII: -+ case PHY_INTERFACE_MODE_2500BASEX: - ge_mode = GE_MODE_RGMII; - mtk_ethsys_rmw(priv, ETHSYS_SYSCFG0_REG, SYSCFG0_SGMII_SEL_M, - SYSCFG0_SGMII_SEL(priv->gmac_id)); -- mtk_sgmii_init(priv); -+ if (priv->phy_interface == PHY_INTERFACE_MODE_SGMII) -+ mtk_sgmii_an_init(priv); -+ else -+ mtk_sgmii_force_init(priv); - break; - case PHY_INTERFACE_MODE_MII: - case PHY_INTERFACE_MODE_GMII: -@@ -1148,6 +1179,7 @@ static void mtk_mac_init(struct mtk_eth_ - mcr |= SPEED_100M << FORCE_SPD_S; - break; - case SPEED_1000: -+ case SPEED_2500: - mcr |= SPEED_1000M << FORCE_SPD_S; - break; - } -@@ -1490,13 +1522,15 @@ static int mtk_eth_of_to_plat(struct ude - priv->duplex = ofnode_read_bool(subnode, "full-duplex"); - - if (priv->speed != SPEED_10 && priv->speed != SPEED_100 && -- priv->speed != SPEED_1000) { -+ priv->speed != SPEED_1000 && priv->speed != SPEED_2500 && -+ priv->speed != SPEED_10000) { - printf("error: no valid speed set in fixed-link\n"); - return -EINVAL; - } - } - -- if (priv->phy_interface == PHY_INTERFACE_MODE_SGMII) { -+ if (priv->phy_interface == PHY_INTERFACE_MODE_SGMII || -+ priv->phy_interface == PHY_INTERFACE_MODE_2500BASEX) { - /* get corresponding sgmii phandle */ - ret = dev_read_phandle_with_args(dev, "mediatek,sgmiisys", - NULL, 0, 0, &args); ---- a/drivers/net/mtk_eth.h -+++ b/drivers/net/mtk_eth.h -@@ -69,6 +69,7 @@ enum mkt_eth_capabilities { - #define SGMII_AN_RESTART BIT(9) - - #define SGMSYS_SGMII_MODE 0x20 -+#define SGMII_AN_MODE 0x31120103 - #define SGMII_FORCE_MODE 0x31120019 - - #define SGMSYS_QPHY_PWR_STATE_CTRL 0xe8 -@@ -168,6 +169,7 @@ enum mkt_eth_capabilities { - #define FORCE_MODE BIT(15) - #define MAC_TX_EN BIT(14) - #define MAC_RX_EN BIT(13) -+#define DEL_RXFIFO_CLR BIT(12) - #define BKOFF_EN BIT(9) - #define BACKPR_EN BIT(8) - #define FORCE_RX_FC BIT(5) diff --git a/lede/package/boot/uboot-mediatek/patches/101-21-arm-dts-medaitek-convert-gmac-link-mode-to-2500base-.patch b/lede/package/boot/uboot-mediatek/patches/101-21-arm-dts-medaitek-convert-gmac-link-mode-to-2500base-.patch deleted file mode 100644 index 27612fd9e4..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/101-21-arm-dts-medaitek-convert-gmac-link-mode-to-2500base-.patch +++ /dev/null @@ -1,214 +0,0 @@ -From 64ef7e977767e3b1305fb94a5169d8b7d3b19b6c Mon Sep 17 00:00:00 2001 -From: Weijie Gao -Date: Wed, 19 Jul 2023 17:17:18 +0800 -Subject: [PATCH 21/29] arm: dts: mediatek: convert gmac link mode to - 2500base-x - -Now that individual 2.5Gbps SGMII support has been added to -mtk-eth, all boards that use 2.5Gbps link with mt7531 must be -converted to use "2500base-x" instead of "sgmii". - -Signed-off-by: Weijie Gao -[also convert BPi-R3] -Signed-off-by: Daniel Golle ---- - arch/arm/dts/mt7622-bananapi-bpi-r64.dts | 4 ++-- - arch/arm/dts/mt7622-rfb.dts | 4 ++-- - arch/arm/dts/mt7629-rfb.dts | 4 ++-- - arch/arm/dts/mt7981-emmc-rfb.dts | 4 ++-- - arch/arm/dts/mt7981-rfb.dts | 4 ++-- - arch/arm/dts/mt7981-sd-rfb.dts | 4 ++-- - arch/arm/dts/mt7986a-bpi-r3-sd.dts | 4 ++-- - arch/arm/dts/mt7986a-rfb.dts | 4 ++-- - arch/arm/dts/mt7986a-sd-rfb.dts | 4 ++-- - arch/arm/dts/mt7986b-rfb.dts | 4 ++-- - arch/arm/dts/mt7986b-sd-rfb.dts | 4 ++-- - 11 files changed, 22 insertions(+), 22 deletions(-) - ---- a/arch/arm/dts/mt7622-bananapi-bpi-r64.dts -+++ b/arch/arm/dts/mt7622-bananapi-bpi-r64.dts -@@ -224,12 +224,12 @@ - ð { - status = "okay"; - mediatek,gmac-id = <0>; -- phy-mode = "sgmii"; -+ phy-mode = "2500base-x"; - mediatek,switch = "mt7531"; - reset-gpios = <&gpio 54 GPIO_ACTIVE_HIGH>; - - fixed-link { -- speed = <1000>; -+ speed = <2500>; - full-duplex; - }; - }; ---- a/arch/arm/dts/mt7622-rfb.dts -+++ b/arch/arm/dts/mt7622-rfb.dts -@@ -240,12 +240,12 @@ - ð { - status = "okay"; - mediatek,gmac-id = <0>; -- phy-mode = "sgmii"; -+ phy-mode = "2500base-x"; - mediatek,switch = "mt7531"; - reset-gpios = <&gpio 54 GPIO_ACTIVE_HIGH>; - - fixed-link { -- speed = <1000>; -+ speed = <2500>; - full-duplex; - }; - }; ---- a/arch/arm/dts/mt7629-rfb.dts -+++ b/arch/arm/dts/mt7629-rfb.dts -@@ -25,12 +25,12 @@ - ð { - status = "okay"; - mediatek,gmac-id = <0>; -- phy-mode = "sgmii"; -+ phy-mode = "2500base-x"; - mediatek,switch = "mt7531"; - reset-gpios = <&gpio 28 GPIO_ACTIVE_HIGH>; - - fixed-link { -- speed = <1000>; -+ speed = <2500>; - full-duplex; - }; - }; ---- a/arch/arm/dts/mt7981-emmc-rfb.dts -+++ b/arch/arm/dts/mt7981-emmc-rfb.dts -@@ -46,12 +46,12 @@ - ð { - status = "okay"; - mediatek,gmac-id = <0>; -- phy-mode = "sgmii"; -+ phy-mode = "2500base-x"; - mediatek,switch = "mt7531"; - reset-gpios = <&gpio 39 GPIO_ACTIVE_HIGH>; - - fixed-link { -- speed = <1000>; -+ speed = <2500>; - full-duplex; - }; - }; ---- a/arch/arm/dts/mt7981-rfb.dts -+++ b/arch/arm/dts/mt7981-rfb.dts -@@ -37,12 +37,12 @@ - ð { - status = "okay"; - mediatek,gmac-id = <0>; -- phy-mode = "sgmii"; -+ phy-mode = "2500base-x"; - mediatek,switch = "mt7531"; - reset-gpios = <&gpio 39 GPIO_ACTIVE_HIGH>; - - fixed-link { -- speed = <1000>; -+ speed = <2500>; - full-duplex; - }; - }; ---- a/arch/arm/dts/mt7981-sd-rfb.dts -+++ b/arch/arm/dts/mt7981-sd-rfb.dts -@@ -46,12 +46,12 @@ - ð { - status = "okay"; - mediatek,gmac-id = <0>; -- phy-mode = "sgmii"; -+ phy-mode = "2500base-x"; - mediatek,switch = "mt7531"; - reset-gpios = <&gpio 39 GPIO_ACTIVE_HIGH>; - - fixed-link { -- speed = <1000>; -+ speed = <2500>; - full-duplex; - }; - }; ---- a/arch/arm/dts/mt7986a-bpi-r3-sd.dts -+++ b/arch/arm/dts/mt7986a-bpi-r3-sd.dts -@@ -76,12 +76,12 @@ - ð { - status = "okay"; - mediatek,gmac-id = <0>; -- phy-mode = "sgmii"; -+ phy-mode = "2500base-x"; - mediatek,switch = "mt7531"; - reset-gpios = <&gpio 5 GPIO_ACTIVE_HIGH>; - - fixed-link { -- speed = <1000>; -+ speed = <2500>; - full-duplex; - }; - }; ---- a/arch/arm/dts/mt7986a-rfb.dts -+++ b/arch/arm/dts/mt7986a-rfb.dts -@@ -55,12 +55,12 @@ - ð { - status = "okay"; - mediatek,gmac-id = <0>; -- phy-mode = "sgmii"; -+ phy-mode = "2500base-x"; - mediatek,switch = "mt7531"; - reset-gpios = <&gpio 5 GPIO_ACTIVE_HIGH>; - - fixed-link { -- speed = <1000>; -+ speed = <2500>; - full-duplex; - }; - }; ---- a/arch/arm/dts/mt7986a-sd-rfb.dts -+++ b/arch/arm/dts/mt7986a-sd-rfb.dts -@@ -47,12 +47,12 @@ - ð { - status = "okay"; - mediatek,gmac-id = <0>; -- phy-mode = "sgmii"; -+ phy-mode = "2500base-x"; - mediatek,switch = "mt7531"; - reset-gpios = <&gpio 5 GPIO_ACTIVE_HIGH>; - - fixed-link { -- speed = <1000>; -+ speed = <2500>; - full-duplex; - }; - }; ---- a/arch/arm/dts/mt7986b-rfb.dts -+++ b/arch/arm/dts/mt7986b-rfb.dts -@@ -46,12 +46,12 @@ - ð { - status = "okay"; - mediatek,gmac-id = <0>; -- phy-mode = "sgmii"; -+ phy-mode = "2500base-x"; - mediatek,switch = "mt7531"; - reset-gpios = <&gpio 5 GPIO_ACTIVE_HIGH>; - - fixed-link { -- speed = <1000>; -+ speed = <2500>; - full-duplex; - }; - }; ---- a/arch/arm/dts/mt7986b-sd-rfb.dts -+++ b/arch/arm/dts/mt7986b-sd-rfb.dts -@@ -47,12 +47,12 @@ - ð { - status = "okay"; - mediatek,gmac-id = <0>; -- phy-mode = "sgmii"; -+ phy-mode = "2500base-x"; - mediatek,switch = "mt7531"; - reset-gpios = <&gpio 5 GPIO_ACTIVE_HIGH>; - - fixed-link { -- speed = <1000>; -+ speed = <2500>; - full-duplex; - }; - }; diff --git a/lede/package/boot/uboot-mediatek/patches/101-22-net-mediatek-add-support-for-GMAC-USB3-PHY-mux-mode-.patch b/lede/package/boot/uboot-mediatek/patches/101-22-net-mediatek-add-support-for-GMAC-USB3-PHY-mux-mode-.patch deleted file mode 100644 index c7e49ff304..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/101-22-net-mediatek-add-support-for-GMAC-USB3-PHY-mux-mode-.patch +++ /dev/null @@ -1,138 +0,0 @@ -From 542d455466bdf32e1bb70230ebcdefd8ed09643b Mon Sep 17 00:00:00 2001 -From: Weijie Gao -Date: Wed, 19 Jul 2023 17:17:22 +0800 -Subject: [PATCH 22/29] net: mediatek: add support for GMAC/USB3 PHY mux mode - for MT7981 - -MT7981 has its GMAC2 PHY shared with USB3. To enable GMAC2, mux -register must be set to connect the SGMII phy to GMAC2. - -Signed-off-by: Weijie Gao ---- - drivers/net/mtk_eth.c | 33 ++++++++++++++++++++++++++++++++- - drivers/net/mtk_eth.h | 16 ++++++++++++++++ - 2 files changed, 48 insertions(+), 1 deletion(-) - ---- a/drivers/net/mtk_eth.c -+++ b/drivers/net/mtk_eth.c -@@ -103,6 +103,8 @@ struct mtk_eth_priv { - - struct regmap *ethsys_regmap; - -+ struct regmap *infra_regmap; -+ - struct mii_dev *mdio_bus; - int (*mii_read)(struct mtk_eth_priv *priv, u8 phy, u8 reg); - int (*mii_write)(struct mtk_eth_priv *priv, u8 phy, u8 reg, u16 val); -@@ -186,6 +188,17 @@ static void mtk_ethsys_rmw(struct mtk_et - regmap_write(priv->ethsys_regmap, reg, val); - } - -+static void mtk_infra_rmw(struct mtk_eth_priv *priv, u32 reg, u32 clr, -+ u32 set) -+{ -+ uint val; -+ -+ regmap_read(priv->infra_regmap, reg, &val); -+ val &= ~clr; -+ val |= set; -+ regmap_write(priv->infra_regmap, reg, val); -+} -+ - /* Direct MDIO clause 22/45 access via SoC */ - static int mtk_mii_rw(struct mtk_eth_priv *priv, u8 phy, u8 reg, u16 data, - u32 cmd, u32 st) -@@ -1139,6 +1152,11 @@ static void mtk_mac_init(struct mtk_eth_ - break; - case PHY_INTERFACE_MODE_SGMII: - case PHY_INTERFACE_MODE_2500BASEX: -+ if (MTK_HAS_CAPS(priv->soc->caps, MTK_GMAC2_U3_QPHY)) { -+ mtk_infra_rmw(priv, USB_PHY_SWITCH_REG, QPHY_SEL_MASK, -+ SGMII_QPHY_SEL); -+ } -+ - ge_mode = GE_MODE_RGMII; - mtk_ethsys_rmw(priv, ETHSYS_SYSCFG0_REG, SYSCFG0_SGMII_SEL_M, - SYSCFG0_SGMII_SEL(priv->gmac_id)); -@@ -1497,6 +1515,19 @@ static int mtk_eth_of_to_plat(struct ude - if (IS_ERR(priv->ethsys_regmap)) - return PTR_ERR(priv->ethsys_regmap); - -+ if (MTK_HAS_CAPS(priv->soc->caps, MTK_INFRA)) { -+ /* get corresponding infracfg phandle */ -+ ret = dev_read_phandle_with_args(dev, "mediatek,infracfg", -+ NULL, 0, 0, &args); -+ -+ if (ret) -+ return ret; -+ -+ priv->infra_regmap = syscon_node_to_regmap(args.node); -+ if (IS_ERR(priv->infra_regmap)) -+ return PTR_ERR(priv->infra_regmap); -+ } -+ - /* Reset controllers */ - ret = reset_get_by_name(dev, "fe", &priv->rst_fe); - if (ret) { -@@ -1614,7 +1645,7 @@ static const struct mtk_soc_data mt7986_ - }; - - static const struct mtk_soc_data mt7981_data = { -- .caps = MT7986_CAPS, -+ .caps = MT7981_CAPS, - .ana_rgc3 = 0x128, - .pdma_base = PDMA_V2_BASE, - .txd_size = sizeof(struct mtk_tx_dma_v2), ---- a/drivers/net/mtk_eth.h -+++ b/drivers/net/mtk_eth.h -@@ -15,27 +15,38 @@ - enum mkt_eth_capabilities { - MTK_TRGMII_BIT, - MTK_TRGMII_MT7621_CLK_BIT, -+ MTK_U3_COPHY_V2_BIT, -+ MTK_INFRA_BIT, - MTK_NETSYS_V2_BIT, - - /* PATH BITS */ - MTK_ETH_PATH_GMAC1_TRGMII_BIT, -+ MTK_ETH_PATH_GMAC2_SGMII_BIT, - }; - - #define MTK_TRGMII BIT(MTK_TRGMII_BIT) - #define MTK_TRGMII_MT7621_CLK BIT(MTK_TRGMII_MT7621_CLK_BIT) -+#define MTK_U3_COPHY_V2 BIT(MTK_U3_COPHY_V2_BIT) -+#define MTK_INFRA BIT(MTK_INFRA_BIT) - #define MTK_NETSYS_V2 BIT(MTK_NETSYS_V2_BIT) - - /* Supported path present on SoCs */ - #define MTK_ETH_PATH_GMAC1_TRGMII BIT(MTK_ETH_PATH_GMAC1_TRGMII_BIT) - -+#define MTK_ETH_PATH_GMAC2_SGMII BIT(MTK_ETH_PATH_GMAC2_SGMII_BIT) -+ - #define MTK_GMAC1_TRGMII (MTK_ETH_PATH_GMAC1_TRGMII | MTK_TRGMII) - -+#define MTK_GMAC2_U3_QPHY (MTK_ETH_PATH_GMAC2_SGMII | MTK_U3_COPHY_V2 | MTK_INFRA) -+ - #define MTK_HAS_CAPS(caps, _x) (((caps) & (_x)) == (_x)) - - #define MT7621_CAPS (MTK_GMAC1_TRGMII | MTK_TRGMII_MT7621_CLK) - - #define MT7623_CAPS (MTK_GMAC1_TRGMII) - -+#define MT7981_CAPS (MTK_GMAC2_U3_QPHY | MTK_NETSYS_V2) -+ - #define MT7986_CAPS (MTK_NETSYS_V2) - - /* Frame Engine Register Bases */ -@@ -56,6 +67,11 @@ enum mkt_eth_capabilities { - #define ETHSYS_CLKCFG0_REG 0x2c - #define ETHSYS_TRGMII_CLK_SEL362_5 BIT(11) - -+/* Top misc registers */ -+#define USB_PHY_SWITCH_REG 0x218 -+#define QPHY_SEL_MASK 0x3 -+#define SGMII_QPHY_SEL 0x2 -+ - /* SYSCFG0_GE_MODE: GE Modes */ - #define GE_MODE_RGMII 0 - #define GE_MODE_MII 1 diff --git a/lede/package/boot/uboot-mediatek/patches/101-23-arm-dts-mediatek-add-infracfg-registers-to-support-G.patch b/lede/package/boot/uboot-mediatek/patches/101-23-arm-dts-mediatek-add-infracfg-registers-to-support-G.patch deleted file mode 100644 index 63c25304a0..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/101-23-arm-dts-mediatek-add-infracfg-registers-to-support-G.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 64dab5fc8405005a78bdf1e0035d8b754cdf0c7e Mon Sep 17 00:00:00 2001 -From: Weijie Gao -Date: Wed, 19 Jul 2023 17:17:27 +0800 -Subject: [PATCH 23/29] arm: dts: mediatek: add infracfg registers to support - GMAC/USB3 Co-PHY - -This patch adds infracfg to eth node to support enabling GMAC2. - -Signed-off-by: Weijie Gao ---- - arch/arm/dts/mt7981.dtsi | 7 +++++++ - 1 file changed, 7 insertions(+) - ---- a/arch/arm/dts/mt7981.dtsi -+++ b/arch/arm/dts/mt7981.dtsi -@@ -266,6 +266,7 @@ - reset-names = "fe"; - mediatek,ethsys = <ðsys>; - mediatek,sgmiisys = <&sgmiisys0>; -+ mediatek,infracfg = <&topmisc>; - #address-cells = <1>; - #size-cells = <0>; - status = "disabled"; -@@ -284,6 +285,12 @@ - #clock-cells = <1>; - }; - -+ topmisc: topmisc@11d10000 { -+ compatible = "mediatek,mt7981-topmisc", "syscon"; -+ reg = <0x11d10000 0x10000>; -+ #clock-cells = <1>; -+ }; -+ - spi0: spi@1100a000 { - compatible = "mediatek,ipm-spi"; - reg = <0x1100a000 0x100>; diff --git a/lede/package/boot/uboot-mediatek/patches/101-24-net-mediatek-add-USXGMII-support.patch b/lede/package/boot/uboot-mediatek/patches/101-24-net-mediatek-add-USXGMII-support.patch deleted file mode 100644 index 67288c749e..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/101-24-net-mediatek-add-USXGMII-support.patch +++ /dev/null @@ -1,341 +0,0 @@ -From d62b483092035bc86d1db83ea4ac29bfa7bba77d Mon Sep 17 00:00:00 2001 -From: Weijie Gao -Date: Wed, 19 Jul 2023 17:17:31 +0800 -Subject: [PATCH 24/29] net: mediatek: add USXGMII support - -This patch adds support for USXGMII of SoC. - -Signed-off-by: Weijie Gao ---- - drivers/net/mtk_eth.c | 230 +++++++++++++++++++++++++++++++++++++++++- - drivers/net/mtk_eth.h | 24 +++++ - 2 files changed, 251 insertions(+), 3 deletions(-) - ---- a/drivers/net/mtk_eth.c -+++ b/drivers/net/mtk_eth.c -@@ -105,6 +105,11 @@ struct mtk_eth_priv { - - struct regmap *infra_regmap; - -+ struct regmap *usxgmii_regmap; -+ struct regmap *xfi_pextp_regmap; -+ struct regmap *xfi_pll_regmap; -+ struct regmap *toprgu_regmap; -+ - struct mii_dev *mdio_bus; - int (*mii_read)(struct mtk_eth_priv *priv, u8 phy, u8 reg); - int (*mii_write)(struct mtk_eth_priv *priv, u8 phy, u8 reg, u16 val); -@@ -989,6 +994,42 @@ static int mt753x_switch_init(struct mtk - return 0; - } - -+static void mtk_xphy_link_adjust(struct mtk_eth_priv *priv) -+{ -+ u16 lcl_adv = 0, rmt_adv = 0; -+ u8 flowctrl; -+ u32 mcr; -+ -+ mcr = mtk_gmac_read(priv, XGMAC_PORT_MCR(priv->gmac_id)); -+ mcr &= ~(XGMAC_FORCE_TX_FC | XGMAC_FORCE_RX_FC); -+ -+ if (priv->phydev->duplex) { -+ if (priv->phydev->pause) -+ rmt_adv = LPA_PAUSE_CAP; -+ if (priv->phydev->asym_pause) -+ rmt_adv |= LPA_PAUSE_ASYM; -+ -+ if (priv->phydev->advertising & ADVERTISED_Pause) -+ lcl_adv |= ADVERTISE_PAUSE_CAP; -+ if (priv->phydev->advertising & ADVERTISED_Asym_Pause) -+ lcl_adv |= ADVERTISE_PAUSE_ASYM; -+ -+ flowctrl = mii_resolve_flowctrl_fdx(lcl_adv, rmt_adv); -+ -+ if (flowctrl & FLOW_CTRL_TX) -+ mcr |= XGMAC_FORCE_TX_FC; -+ if (flowctrl & FLOW_CTRL_RX) -+ mcr |= XGMAC_FORCE_RX_FC; -+ -+ debug("rx pause %s, tx pause %s\n", -+ flowctrl & FLOW_CTRL_RX ? "enabled" : "disabled", -+ flowctrl & FLOW_CTRL_TX ? "enabled" : "disabled"); -+ } -+ -+ mcr &= ~(XGMAC_TRX_DISABLE); -+ mtk_gmac_write(priv, XGMAC_PORT_MCR(priv->gmac_id), mcr); -+} -+ - static void mtk_phy_link_adjust(struct mtk_eth_priv *priv) - { - u16 lcl_adv = 0, rmt_adv = 0; -@@ -1063,8 +1104,12 @@ static int mtk_phy_start(struct mtk_eth_ - return 0; - } - -- if (!priv->force_mode) -- mtk_phy_link_adjust(priv); -+ if (!priv->force_mode) { -+ if (priv->phy_interface == PHY_INTERFACE_MODE_USXGMII) -+ mtk_xphy_link_adjust(priv); -+ else -+ mtk_phy_link_adjust(priv); -+ } - - debug("Speed: %d, %s duplex%s\n", phydev->speed, - (phydev->duplex) ? "full" : "half", -@@ -1140,6 +1185,112 @@ static void mtk_sgmii_force_init(struct - SGMII_PHYA_PWD, 0); - } - -+static void mtk_xfi_pll_enable(struct mtk_eth_priv *priv) -+{ -+ u32 val = 0; -+ -+ /* Add software workaround for USXGMII PLL TCL issue */ -+ regmap_write(priv->xfi_pll_regmap, XFI_PLL_ANA_GLB8, -+ RG_XFI_PLL_ANA_SWWA); -+ -+ regmap_read(priv->xfi_pll_regmap, XFI_PLL_DIG_GLB8, &val); -+ val |= RG_XFI_PLL_EN; -+ regmap_write(priv->xfi_pll_regmap, XFI_PLL_DIG_GLB8, val); -+} -+ -+static void mtk_usxgmii_reset(struct mtk_eth_priv *priv) -+{ -+ switch (priv->gmac_id) { -+ case 1: -+ regmap_write(priv->toprgu_regmap, 0xFC, 0x0000A004); -+ regmap_write(priv->toprgu_regmap, 0x18, 0x88F0A004); -+ regmap_write(priv->toprgu_regmap, 0xFC, 0x00000000); -+ regmap_write(priv->toprgu_regmap, 0x18, 0x88F00000); -+ regmap_write(priv->toprgu_regmap, 0x18, 0x00F00000); -+ break; -+ case 2: -+ regmap_write(priv->toprgu_regmap, 0xFC, 0x00005002); -+ regmap_write(priv->toprgu_regmap, 0x18, 0x88F05002); -+ regmap_write(priv->toprgu_regmap, 0xFC, 0x00000000); -+ regmap_write(priv->toprgu_regmap, 0x18, 0x88F00000); -+ regmap_write(priv->toprgu_regmap, 0x18, 0x00F00000); -+ break; -+ } -+ -+ mdelay(10); -+} -+ -+static void mtk_usxgmii_setup_phya_an_10000(struct mtk_eth_priv *priv) -+{ -+ regmap_write(priv->usxgmii_regmap, 0x810, 0x000FFE6D); -+ regmap_write(priv->usxgmii_regmap, 0x818, 0x07B1EC7B); -+ regmap_write(priv->usxgmii_regmap, 0x80C, 0x30000000); -+ ndelay(1020); -+ regmap_write(priv->usxgmii_regmap, 0x80C, 0x10000000); -+ ndelay(1020); -+ regmap_write(priv->usxgmii_regmap, 0x80C, 0x00000000); -+ -+ regmap_write(priv->xfi_pextp_regmap, 0x9024, 0x00C9071C); -+ regmap_write(priv->xfi_pextp_regmap, 0x2020, 0xAA8585AA); -+ regmap_write(priv->xfi_pextp_regmap, 0x2030, 0x0C020707); -+ regmap_write(priv->xfi_pextp_regmap, 0x2034, 0x0E050F0F); -+ regmap_write(priv->xfi_pextp_regmap, 0x2040, 0x00140032); -+ regmap_write(priv->xfi_pextp_regmap, 0x50F0, 0x00C014AA); -+ regmap_write(priv->xfi_pextp_regmap, 0x50E0, 0x3777C12B); -+ regmap_write(priv->xfi_pextp_regmap, 0x506C, 0x005F9CFF); -+ regmap_write(priv->xfi_pextp_regmap, 0x5070, 0x9D9DFAFA); -+ regmap_write(priv->xfi_pextp_regmap, 0x5074, 0x27273F3F); -+ regmap_write(priv->xfi_pextp_regmap, 0x5078, 0xA7883C68); -+ regmap_write(priv->xfi_pextp_regmap, 0x507C, 0x11661166); -+ regmap_write(priv->xfi_pextp_regmap, 0x5080, 0x0E000AAF); -+ regmap_write(priv->xfi_pextp_regmap, 0x5084, 0x08080D0D); -+ regmap_write(priv->xfi_pextp_regmap, 0x5088, 0x02030909); -+ regmap_write(priv->xfi_pextp_regmap, 0x50E4, 0x0C0C0000); -+ regmap_write(priv->xfi_pextp_regmap, 0x50E8, 0x04040000); -+ regmap_write(priv->xfi_pextp_regmap, 0x50EC, 0x0F0F0C06); -+ regmap_write(priv->xfi_pextp_regmap, 0x50A8, 0x506E8C8C); -+ regmap_write(priv->xfi_pextp_regmap, 0x6004, 0x18190000); -+ regmap_write(priv->xfi_pextp_regmap, 0x00F8, 0x01423342); -+ regmap_write(priv->xfi_pextp_regmap, 0x00F4, 0x80201F20); -+ regmap_write(priv->xfi_pextp_regmap, 0x0030, 0x00050C00); -+ regmap_write(priv->xfi_pextp_regmap, 0x0070, 0x02002800); -+ ndelay(1020); -+ regmap_write(priv->xfi_pextp_regmap, 0x30B0, 0x00000020); -+ regmap_write(priv->xfi_pextp_regmap, 0x3028, 0x00008A01); -+ regmap_write(priv->xfi_pextp_regmap, 0x302C, 0x0000A884); -+ regmap_write(priv->xfi_pextp_regmap, 0x3024, 0x00083002); -+ regmap_write(priv->xfi_pextp_regmap, 0x3010, 0x00022220); -+ regmap_write(priv->xfi_pextp_regmap, 0x5064, 0x0F020A01); -+ regmap_write(priv->xfi_pextp_regmap, 0x50B4, 0x06100600); -+ regmap_write(priv->xfi_pextp_regmap, 0x3048, 0x40704000); -+ regmap_write(priv->xfi_pextp_regmap, 0x3050, 0xA8000000); -+ regmap_write(priv->xfi_pextp_regmap, 0x3054, 0x000000AA); -+ regmap_write(priv->xfi_pextp_regmap, 0x306C, 0x00000F00); -+ regmap_write(priv->xfi_pextp_regmap, 0xA060, 0x00040000); -+ regmap_write(priv->xfi_pextp_regmap, 0x90D0, 0x00000001); -+ regmap_write(priv->xfi_pextp_regmap, 0x0070, 0x0200E800); -+ udelay(150); -+ regmap_write(priv->xfi_pextp_regmap, 0x0070, 0x0200C111); -+ ndelay(1020); -+ regmap_write(priv->xfi_pextp_regmap, 0x0070, 0x0200C101); -+ udelay(15); -+ regmap_write(priv->xfi_pextp_regmap, 0x0070, 0x0202C111); -+ ndelay(1020); -+ regmap_write(priv->xfi_pextp_regmap, 0x0070, 0x0202C101); -+ udelay(100); -+ regmap_write(priv->xfi_pextp_regmap, 0x30B0, 0x00000030); -+ regmap_write(priv->xfi_pextp_regmap, 0x00F4, 0x80201F00); -+ regmap_write(priv->xfi_pextp_regmap, 0x3040, 0x30000000); -+ udelay(400); -+} -+ -+static void mtk_usxgmii_an_init(struct mtk_eth_priv *priv) -+{ -+ mtk_xfi_pll_enable(priv); -+ mtk_usxgmii_reset(priv); -+ mtk_usxgmii_setup_phya_an_10000(priv); -+} -+ - static void mtk_mac_init(struct mtk_eth_priv *priv) - { - int i, ge_mode = 0; -@@ -1222,6 +1373,36 @@ static void mtk_mac_init(struct mtk_eth_ - } - } - -+static void mtk_xmac_init(struct mtk_eth_priv *priv) -+{ -+ u32 sts; -+ -+ switch (priv->phy_interface) { -+ case PHY_INTERFACE_MODE_USXGMII: -+ mtk_usxgmii_an_init(priv); -+ break; -+ default: -+ break; -+ } -+ -+ /* Set GMAC to the correct mode */ -+ mtk_ethsys_rmw(priv, ETHSYS_SYSCFG0_REG, -+ SYSCFG0_GE_MODE_M << SYSCFG0_GE_MODE_S(priv->gmac_id), -+ 0); -+ -+ if (priv->gmac_id == 1) { -+ mtk_infra_rmw(priv, TOPMISC_NETSYS_PCS_MUX, -+ NETSYS_PCS_MUX_MASK, MUX_G2_USXGMII_SEL); -+ } else if (priv->gmac_id == 2) { -+ sts = mtk_gmac_read(priv, XGMAC_STS(priv->gmac_id)); -+ sts |= XGMAC_FORCE_LINK; -+ mtk_gmac_write(priv, XGMAC_STS(priv->gmac_id), sts); -+ } -+ -+ /* Force GMAC link down */ -+ mtk_gmac_write(priv, GMAC_PORT_MCR(priv->gmac_id), FORCE_MODE); -+} -+ - static void mtk_eth_fifo_init(struct mtk_eth_priv *priv) - { - char *pkt_base = priv->pkt_pool; -@@ -1463,7 +1644,10 @@ static int mtk_eth_probe(struct udevice - ARCH_DMA_MINALIGN); - - /* Set MAC mode */ -- mtk_mac_init(priv); -+ if (priv->phy_interface == PHY_INTERFACE_MODE_USXGMII) -+ mtk_xmac_init(priv); -+ else -+ mtk_mac_init(priv); - - /* Probe phy if switch is not specified */ - if (priv->sw == SW_NONE) -@@ -1581,6 +1765,46 @@ static int mtk_eth_of_to_plat(struct ude - } - - priv->pn_swap = ofnode_read_bool(args.node, "pn_swap"); -+ } else if (priv->phy_interface == PHY_INTERFACE_MODE_USXGMII) { -+ /* get corresponding usxgmii phandle */ -+ ret = dev_read_phandle_with_args(dev, "mediatek,usxgmiisys", -+ NULL, 0, 0, &args); -+ if (ret) -+ return ret; -+ -+ priv->usxgmii_regmap = syscon_node_to_regmap(args.node); -+ if (IS_ERR(priv->usxgmii_regmap)) -+ return PTR_ERR(priv->usxgmii_regmap); -+ -+ /* get corresponding xfi_pextp phandle */ -+ ret = dev_read_phandle_with_args(dev, "mediatek,xfi_pextp", -+ NULL, 0, 0, &args); -+ if (ret) -+ return ret; -+ -+ priv->xfi_pextp_regmap = syscon_node_to_regmap(args.node); -+ if (IS_ERR(priv->xfi_pextp_regmap)) -+ return PTR_ERR(priv->xfi_pextp_regmap); -+ -+ /* get corresponding xfi_pll phandle */ -+ ret = dev_read_phandle_with_args(dev, "mediatek,xfi_pll", -+ NULL, 0, 0, &args); -+ if (ret) -+ return ret; -+ -+ priv->xfi_pll_regmap = syscon_node_to_regmap(args.node); -+ if (IS_ERR(priv->xfi_pll_regmap)) -+ return PTR_ERR(priv->xfi_pll_regmap); -+ -+ /* get corresponding toprgu phandle */ -+ ret = dev_read_phandle_with_args(dev, "mediatek,toprgu", -+ NULL, 0, 0, &args); -+ if (ret) -+ return ret; -+ -+ priv->toprgu_regmap = syscon_node_to_regmap(args.node); -+ if (IS_ERR(priv->toprgu_regmap)) -+ return PTR_ERR(priv->toprgu_regmap); - } - - /* check for switch first, otherwise phy will be used */ ---- a/drivers/net/mtk_eth.h -+++ b/drivers/net/mtk_eth.h -@@ -68,6 +68,11 @@ enum mkt_eth_capabilities { - #define ETHSYS_TRGMII_CLK_SEL362_5 BIT(11) - - /* Top misc registers */ -+#define TOPMISC_NETSYS_PCS_MUX 0x84 -+#define NETSYS_PCS_MUX_MASK GENMASK(1, 0) -+#define MUX_G2_USXGMII_SEL BIT(1) -+#define MUX_HSGMII1_G1_SEL BIT(0) -+ - #define USB_PHY_SWITCH_REG 0x218 - #define QPHY_SEL_MASK 0x3 - #define SGMII_QPHY_SEL 0x2 -@@ -98,6 +103,15 @@ enum mkt_eth_capabilities { - #define SGMSYS_GEN2_SPEED_V2 0x128 - #define SGMSYS_SPEED_2500 BIT(2) - -+/* USXGMII subsystem config registers */ -+/* Register to control USXGMII XFI PLL digital */ -+#define XFI_PLL_DIG_GLB8 0x08 -+#define RG_XFI_PLL_EN BIT(31) -+ -+/* Register to control USXGMII XFI PLL analog */ -+#define XFI_PLL_ANA_GLB8 0x108 -+#define RG_XFI_PLL_ANA_SWWA 0x02283248 -+ - /* Frame Engine Registers */ - #define FE_GLO_MISC_REG 0x124 - #define PDMA_VER_V2 BIT(4) -@@ -221,6 +235,16 @@ enum mkt_eth_capabilities { - #define TD_DM_DRVP_S 0 - #define TD_DM_DRVP_M 0x0f - -+/* XGMAC Status Registers */ -+#define XGMAC_STS(x) (((x) == 2) ? 0x001C : 0x000C) -+#define XGMAC_FORCE_LINK BIT(15) -+ -+/* XGMAC Registers */ -+#define XGMAC_PORT_MCR(x) (0x2000 + (((x) - 1) * 0x1000)) -+#define XGMAC_TRX_DISABLE 0xf -+#define XGMAC_FORCE_TX_FC BIT(5) -+#define XGMAC_FORCE_RX_FC BIT(4) -+ - /* MT7530 Registers */ - - #define PCR_REG(p) (0x2004 + (p) * 0x100) diff --git a/lede/package/boot/uboot-mediatek/patches/101-25-net-mediatek-add-support-for-NETSYS-v3.patch b/lede/package/boot/uboot-mediatek/patches/101-25-net-mediatek-add-support-for-NETSYS-v3.patch deleted file mode 100644 index 691b59faed..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/101-25-net-mediatek-add-support-for-NETSYS-v3.patch +++ /dev/null @@ -1,221 +0,0 @@ -From 7d201749cc49a58fb5e791d1e099ec3e3489e16d Mon Sep 17 00:00:00 2001 -From: Weijie Gao -Date: Wed, 19 Jul 2023 17:17:37 +0800 -Subject: [PATCH 25/29] net: mediatek: add support for NETSYS v3 - -This patch adds support for NETSYS v3 hardware. -Comparing to NETSYS v2, NETSYS v3 has three GMACs. - -Signed-off-by: Weijie Gao ---- - drivers/net/mtk_eth.c | 49 ++++++++++++++++++++++++++++++++----------- - drivers/net/mtk_eth.h | 7 +++++++ - 2 files changed, 44 insertions(+), 12 deletions(-) - ---- a/drivers/net/mtk_eth.c -+++ b/drivers/net/mtk_eth.c -@@ -76,6 +76,7 @@ enum mtk_switch { - * @caps Flags shown the extra capability for the SoC - * @ana_rgc3: The offset for register ANA_RGC3 related to - * sgmiisys syscon -+ * @gdma_count: Number of GDMAs - * @pdma_base: Register base of PDMA block - * @txd_size: Tx DMA descriptor size. - * @rxd_size: Rx DMA descriptor size. -@@ -83,6 +84,7 @@ enum mtk_switch { - struct mtk_soc_data { - u32 caps; - u32 ana_rgc3; -+ u32 gdma_count; - u32 pdma_base; - u32 txd_size; - u32 rxd_size; -@@ -159,7 +161,9 @@ static void mtk_gdma_write(struct mtk_et - { - u32 gdma_base; - -- if (no == 1) -+ if (no == 2) -+ gdma_base = GDMA3_BASE; -+ else if (no == 1) - gdma_base = GDMA2_BASE; - else - gdma_base = GDMA1_BASE; -@@ -1429,7 +1433,10 @@ static void mtk_eth_fifo_init(struct mtk - txd->txd1 = virt_to_phys(pkt_base); - txd->txd2 = PDMA_TXD2_DDONE | PDMA_TXD2_LS0; - -- if (MTK_HAS_CAPS(priv->soc->caps, MTK_NETSYS_V2)) -+ if (MTK_HAS_CAPS(priv->soc->caps, MTK_NETSYS_V3)) -+ txd->txd5 = PDMA_V2_TXD5_FPORT_SET(priv->gmac_id == 2 ? -+ 15 : priv->gmac_id + 1); -+ else if (MTK_HAS_CAPS(priv->soc->caps, MTK_NETSYS_V2)) - txd->txd5 = PDMA_V2_TXD5_FPORT_SET(priv->gmac_id + 1); - else - txd->txd4 = PDMA_V1_TXD4_FPORT_SET(priv->gmac_id + 1); -@@ -1442,7 +1449,8 @@ static void mtk_eth_fifo_init(struct mtk - - rxd->rxd1 = virt_to_phys(pkt_base); - -- if (MTK_HAS_CAPS(priv->soc->caps, MTK_NETSYS_V2)) -+ if (MTK_HAS_CAPS(priv->soc->caps, MTK_NETSYS_V2) || -+ MTK_HAS_CAPS(priv->soc->caps, MTK_NETSYS_V3)) - rxd->rxd2 = PDMA_V2_RXD2_PLEN0_SET(PKTSIZE_ALIGN); - else - rxd->rxd2 = PDMA_V1_RXD2_PLEN0_SET(PKTSIZE_ALIGN); -@@ -1466,7 +1474,7 @@ static void mtk_eth_fifo_init(struct mtk - static int mtk_eth_start(struct udevice *dev) - { - struct mtk_eth_priv *priv = dev_get_priv(dev); -- int ret; -+ int i, ret; - - /* Reset FE */ - reset_assert(&priv->rst_fe); -@@ -1474,16 +1482,24 @@ static int mtk_eth_start(struct udevice - reset_deassert(&priv->rst_fe); - mdelay(10); - -- if (MTK_HAS_CAPS(priv->soc->caps, MTK_NETSYS_V2)) -+ if (MTK_HAS_CAPS(priv->soc->caps, MTK_NETSYS_V2) || -+ MTK_HAS_CAPS(priv->soc->caps, MTK_NETSYS_V3)) - setbits_le32(priv->fe_base + FE_GLO_MISC_REG, PDMA_VER_V2); - - /* Packets forward to PDMA */ - mtk_gdma_write(priv, priv->gmac_id, GDMA_IG_CTRL_REG, GDMA_FWD_TO_CPU); - -- if (priv->gmac_id == 0) -- mtk_gdma_write(priv, 1, GDMA_IG_CTRL_REG, GDMA_FWD_DISCARD); -- else -- mtk_gdma_write(priv, 0, GDMA_IG_CTRL_REG, GDMA_FWD_DISCARD); -+ for (i = 0; i < priv->soc->gdma_count; i++) { -+ if (i == priv->gmac_id) -+ continue; -+ -+ mtk_gdma_write(priv, i, GDMA_IG_CTRL_REG, GDMA_FWD_DISCARD); -+ } -+ -+ if (MTK_HAS_CAPS(priv->soc->caps, MTK_NETSYS_V3)) { -+ mtk_gdma_write(priv, priv->gmac_id, GDMA_EG_CTRL_REG, -+ GDMA_CPU_BRIDGE_EN); -+ } - - udelay(500); - -@@ -1557,7 +1573,8 @@ static int mtk_eth_send(struct udevice * - flush_dcache_range((ulong)pkt_base, (ulong)pkt_base + - roundup(length, ARCH_DMA_MINALIGN)); - -- if (MTK_HAS_CAPS(priv->soc->caps, MTK_NETSYS_V2)) -+ if (MTK_HAS_CAPS(priv->soc->caps, MTK_NETSYS_V2) || -+ MTK_HAS_CAPS(priv->soc->caps, MTK_NETSYS_V3)) - txd->txd2 = PDMA_TXD2_LS0 | PDMA_V2_TXD2_SDL0_SET(length); - else - txd->txd2 = PDMA_TXD2_LS0 | PDMA_V1_TXD2_SDL0_SET(length); -@@ -1583,7 +1600,8 @@ static int mtk_eth_recv(struct udevice * - return -EAGAIN; - } - -- if (MTK_HAS_CAPS(priv->soc->caps, MTK_NETSYS_V2)) -+ if (MTK_HAS_CAPS(priv->soc->caps, MTK_NETSYS_V2) || -+ MTK_HAS_CAPS(priv->soc->caps, MTK_NETSYS_V3)) - length = PDMA_V2_RXD2_PLEN0_GET(rxd->rxd2); - else - length = PDMA_V1_RXD2_PLEN0_GET(rxd->rxd2); -@@ -1606,7 +1624,8 @@ static int mtk_eth_free_pkt(struct udevi - - rxd = priv->rx_ring_noc + idx * priv->soc->rxd_size; - -- if (MTK_HAS_CAPS(priv->soc->caps, MTK_NETSYS_V2)) -+ if (MTK_HAS_CAPS(priv->soc->caps, MTK_NETSYS_V2) || -+ MTK_HAS_CAPS(priv->soc->caps, MTK_NETSYS_V3)) - rxd->rxd2 = PDMA_V2_RXD2_PLEN0_SET(PKTSIZE_ALIGN); - else - rxd->rxd2 = PDMA_V1_RXD2_PLEN0_SET(PKTSIZE_ALIGN); -@@ -1863,6 +1882,7 @@ static int mtk_eth_of_to_plat(struct ude - static const struct mtk_soc_data mt7986_data = { - .caps = MT7986_CAPS, - .ana_rgc3 = 0x128, -+ .gdma_count = 2, - .pdma_base = PDMA_V2_BASE, - .txd_size = sizeof(struct mtk_tx_dma_v2), - .rxd_size = sizeof(struct mtk_rx_dma_v2), -@@ -1871,6 +1891,7 @@ static const struct mtk_soc_data mt7986_ - static const struct mtk_soc_data mt7981_data = { - .caps = MT7981_CAPS, - .ana_rgc3 = 0x128, -+ .gdma_count = 2, - .pdma_base = PDMA_V2_BASE, - .txd_size = sizeof(struct mtk_tx_dma_v2), - .rxd_size = sizeof(struct mtk_rx_dma_v2), -@@ -1878,6 +1899,7 @@ static const struct mtk_soc_data mt7981_ - - static const struct mtk_soc_data mt7629_data = { - .ana_rgc3 = 0x128, -+ .gdma_count = 2, - .pdma_base = PDMA_V1_BASE, - .txd_size = sizeof(struct mtk_tx_dma), - .rxd_size = sizeof(struct mtk_rx_dma), -@@ -1885,6 +1907,7 @@ static const struct mtk_soc_data mt7629_ - - static const struct mtk_soc_data mt7623_data = { - .caps = MT7623_CAPS, -+ .gdma_count = 2, - .pdma_base = PDMA_V1_BASE, - .txd_size = sizeof(struct mtk_tx_dma), - .rxd_size = sizeof(struct mtk_rx_dma), -@@ -1892,6 +1915,7 @@ static const struct mtk_soc_data mt7623_ - - static const struct mtk_soc_data mt7622_data = { - .ana_rgc3 = 0x2028, -+ .gdma_count = 2, - .pdma_base = PDMA_V1_BASE, - .txd_size = sizeof(struct mtk_tx_dma), - .rxd_size = sizeof(struct mtk_rx_dma), -@@ -1899,6 +1923,7 @@ static const struct mtk_soc_data mt7622_ - - static const struct mtk_soc_data mt7621_data = { - .caps = MT7621_CAPS, -+ .gdma_count = 2, - .pdma_base = PDMA_V1_BASE, - .txd_size = sizeof(struct mtk_tx_dma), - .rxd_size = sizeof(struct mtk_rx_dma), ---- a/drivers/net/mtk_eth.h -+++ b/drivers/net/mtk_eth.h -@@ -18,6 +18,7 @@ enum mkt_eth_capabilities { - MTK_U3_COPHY_V2_BIT, - MTK_INFRA_BIT, - MTK_NETSYS_V2_BIT, -+ MTK_NETSYS_V3_BIT, - - /* PATH BITS */ - MTK_ETH_PATH_GMAC1_TRGMII_BIT, -@@ -29,6 +30,7 @@ enum mkt_eth_capabilities { - #define MTK_U3_COPHY_V2 BIT(MTK_U3_COPHY_V2_BIT) - #define MTK_INFRA BIT(MTK_INFRA_BIT) - #define MTK_NETSYS_V2 BIT(MTK_NETSYS_V2_BIT) -+#define MTK_NETSYS_V3 BIT(MTK_NETSYS_V3_BIT) - - /* Supported path present on SoCs */ - #define MTK_ETH_PATH_GMAC1_TRGMII BIT(MTK_ETH_PATH_GMAC1_TRGMII_BIT) -@@ -52,8 +54,10 @@ enum mkt_eth_capabilities { - /* Frame Engine Register Bases */ - #define PDMA_V1_BASE 0x0800 - #define PDMA_V2_BASE 0x6000 -+#define PDMA_V3_BASE 0x6800 - #define GDMA1_BASE 0x0500 - #define GDMA2_BASE 0x1500 -+#define GDMA3_BASE 0x0540 - #define GMAC_BASE 0x10000 - - /* Ethernet subsystem registers */ -@@ -153,6 +157,9 @@ enum mkt_eth_capabilities { - #define UN_DP_S 0 - #define UN_DP_M 0x0f - -+#define GDMA_EG_CTRL_REG 0x004 -+#define GDMA_CPU_BRIDGE_EN BIT(31) -+ - #define GDMA_MAC_LSB_REG 0x008 - - #define GDMA_MAC_MSB_REG 0x00c diff --git a/lede/package/boot/uboot-mediatek/patches/101-26-net-mediatek-add-support-for-MediaTek-MT7988-SoC.patch b/lede/package/boot/uboot-mediatek/patches/101-26-net-mediatek-add-support-for-MediaTek-MT7988-SoC.patch deleted file mode 100644 index 29e8649052..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/101-26-net-mediatek-add-support-for-MediaTek-MT7988-SoC.patch +++ /dev/null @@ -1,327 +0,0 @@ -From 59dba9d87c9caf04a5d797af46699055a53870f4 Mon Sep 17 00:00:00 2001 -From: Weijie Gao -Date: Wed, 19 Jul 2023 17:17:41 +0800 -Subject: [PATCH 26/29] net: mediatek: add support for MediaTek MT7988 SoC - -This patch adds support for MediaTek MT7988. - -MT7988 features MediaTek NETSYS v3, including three GMACs, and two -of them supports 10Gbps USXGMII. - -MT7988 embeds a MT7531 switch (not MCM) which supports accessing -internal registers through MMIO instead of MDIO. - -Signed-off-by: Weijie Gao ---- - drivers/net/mtk_eth.c | 158 +++++++++++++++++++++++++++++++++++++++++- - drivers/net/mtk_eth.h | 20 ++++++ - 2 files changed, 177 insertions(+), 1 deletion(-) - ---- a/drivers/net/mtk_eth.c -+++ b/drivers/net/mtk_eth.c -@@ -54,6 +54,16 @@ - (DP_PDMA << MC_DP_S) | \ - (DP_PDMA << UN_DP_S)) - -+#define GDMA_BRIDGE_TO_CPU \ -+ (0xC0000000 | \ -+ GDM_ICS_EN | \ -+ GDM_TCS_EN | \ -+ GDM_UCS_EN | \ -+ (DP_PDMA << MYMAC_DP_S) | \ -+ (DP_PDMA << BC_DP_S) | \ -+ (DP_PDMA << MC_DP_S) | \ -+ (DP_PDMA << UN_DP_S)) -+ - #define GDMA_FWD_DISCARD \ - (0x20000000 | \ - GDM_ICS_EN | \ -@@ -68,7 +78,8 @@ - enum mtk_switch { - SW_NONE, - SW_MT7530, -- SW_MT7531 -+ SW_MT7531, -+ SW_MT7988, - }; - - /* struct mtk_soc_data - This is the structure holding all differences -@@ -102,6 +113,7 @@ struct mtk_eth_priv { - void __iomem *fe_base; - void __iomem *gmac_base; - void __iomem *sgmii_base; -+ void __iomem *gsw_base; - - struct regmap *ethsys_regmap; - -@@ -171,6 +183,11 @@ static void mtk_gdma_write(struct mtk_et - writel(val, priv->fe_base + gdma_base + reg); - } - -+static void mtk_fe_rmw(struct mtk_eth_priv *priv, u32 reg, u32 clr, u32 set) -+{ -+ clrsetbits_le32(priv->fe_base + reg, clr, set); -+} -+ - static u32 mtk_gmac_read(struct mtk_eth_priv *priv, u32 reg) - { - return readl(priv->gmac_base + reg); -@@ -208,6 +225,16 @@ static void mtk_infra_rmw(struct mtk_eth - regmap_write(priv->infra_regmap, reg, val); - } - -+static u32 mtk_gsw_read(struct mtk_eth_priv *priv, u32 reg) -+{ -+ return readl(priv->gsw_base + reg); -+} -+ -+static void mtk_gsw_write(struct mtk_eth_priv *priv, u32 reg, u32 val) -+{ -+ writel(val, priv->gsw_base + reg); -+} -+ - /* Direct MDIO clause 22/45 access via SoC */ - static int mtk_mii_rw(struct mtk_eth_priv *priv, u8 phy, u8 reg, u16 data, - u32 cmd, u32 st) -@@ -342,6 +369,11 @@ static int mt753x_reg_read(struct mtk_et - { - int ret, low_word, high_word; - -+ if (priv->sw == SW_MT7988) { -+ *data = mtk_gsw_read(priv, reg); -+ return 0; -+ } -+ - /* Write page address */ - ret = mtk_mii_write(priv, priv->mt753x_smi_addr, 0x1f, reg >> 6); - if (ret) -@@ -367,6 +399,11 @@ static int mt753x_reg_write(struct mtk_e - { - int ret; - -+ if (priv->sw == SW_MT7988) { -+ mtk_gsw_write(priv, reg, data); -+ return 0; -+ } -+ - /* Write page address */ - ret = mtk_mii_write(priv, priv->mt753x_smi_addr, 0x1f, reg >> 6); - if (ret) -@@ -537,6 +574,7 @@ static int mtk_mdio_register(struct udev - priv->mmd_write = mtk_mmd_ind_write; - break; - case SW_MT7531: -+ case SW_MT7988: - priv->mii_read = mt7531_mii_ind_read; - priv->mii_write = mt7531_mii_ind_write; - priv->mmd_read = mt7531_mmd_ind_read; -@@ -957,6 +995,103 @@ static int mt7531_setup(struct mtk_eth_p - return 0; - } - -+static void mt7988_phy_setting(struct mtk_eth_priv *priv) -+{ -+ u16 val; -+ u32 i; -+ -+ for (i = 0; i < MT753X_NUM_PHYS; i++) { -+ /* Enable HW auto downshift */ -+ priv->mii_write(priv, i, 0x1f, 0x1); -+ val = priv->mii_read(priv, i, PHY_EXT_REG_14); -+ val |= PHY_EN_DOWN_SHFIT; -+ priv->mii_write(priv, i, PHY_EXT_REG_14, val); -+ -+ /* PHY link down power saving enable */ -+ val = priv->mii_read(priv, i, PHY_EXT_REG_17); -+ val |= PHY_LINKDOWN_POWER_SAVING_EN; -+ priv->mii_write(priv, i, PHY_EXT_REG_17, val); -+ } -+} -+ -+static void mt7988_mac_control(struct mtk_eth_priv *priv, bool enable) -+{ -+ u32 pmcr = FORCE_MODE_LNK; -+ -+ if (enable) -+ pmcr = priv->mt753x_pmcr; -+ -+ mt753x_reg_write(priv, PMCR_REG(6), pmcr); -+} -+ -+static int mt7988_setup(struct mtk_eth_priv *priv) -+{ -+ u16 phy_addr, phy_val; -+ u32 pmcr; -+ int i; -+ -+ priv->gsw_base = regmap_get_range(priv->ethsys_regmap, 0) + GSW_BASE; -+ -+ priv->mt753x_phy_base = (priv->mt753x_smi_addr + 1) & -+ MT753X_SMI_ADDR_MASK; -+ -+ /* Turn off PHYs */ -+ for (i = 0; i < MT753X_NUM_PHYS; i++) { -+ phy_addr = MT753X_PHY_ADDR(priv->mt753x_phy_base, i); -+ phy_val = priv->mii_read(priv, phy_addr, MII_BMCR); -+ phy_val |= BMCR_PDOWN; -+ priv->mii_write(priv, phy_addr, MII_BMCR, phy_val); -+ } -+ -+ switch (priv->phy_interface) { -+ case PHY_INTERFACE_MODE_USXGMII: -+ /* Use CPU bridge instead of actual USXGMII path */ -+ -+ /* Set GDM1 no drop */ -+ mtk_fe_rmw(priv, PSE_NO_DROP_CFG_REG, 0, PSE_NO_DROP_GDM1); -+ -+ /* Enable GDM1 to GSW CPU bridge */ -+ mtk_gmac_rmw(priv, GMAC_MAC_MISC_REG, 0, BIT(0)); -+ -+ /* XGMAC force link up */ -+ mtk_gmac_rmw(priv, GMAC_XGMAC_STS_REG, 0, P1_XGMAC_FORCE_LINK); -+ -+ /* Setup GSW CPU bridge IPG */ -+ mtk_gmac_rmw(priv, GMAC_GSW_CFG_REG, GSWTX_IPG_M | GSWRX_IPG_M, -+ (0xB << GSWTX_IPG_S) | (0xB << GSWRX_IPG_S)); -+ break; -+ default: -+ printf("Error: MT7988 GSW does not support %s interface\n", -+ phy_string_for_interface(priv->phy_interface)); -+ break; -+ } -+ -+ pmcr = MT7988_FORCE_MODE | -+ (IPG_96BIT_WITH_SHORT_IPG << IPG_CFG_S) | -+ MAC_MODE | MAC_TX_EN | MAC_RX_EN | -+ BKOFF_EN | BACKPR_EN | -+ FORCE_RX_FC | FORCE_TX_FC | -+ (SPEED_1000M << FORCE_SPD_S) | FORCE_DPX | -+ FORCE_LINK; -+ -+ priv->mt753x_pmcr = pmcr; -+ -+ /* Keep MAC link down before starting eth */ -+ mt753x_reg_write(priv, PMCR_REG(6), FORCE_MODE_LNK); -+ -+ /* Turn on PHYs */ -+ for (i = 0; i < MT753X_NUM_PHYS; i++) { -+ phy_addr = MT753X_PHY_ADDR(priv->mt753x_phy_base, i); -+ phy_val = priv->mii_read(priv, phy_addr, MII_BMCR); -+ phy_val &= ~BMCR_PDOWN; -+ priv->mii_write(priv, phy_addr, MII_BMCR, phy_val); -+ } -+ -+ mt7988_phy_setting(priv); -+ -+ return 0; -+} -+ - static int mt753x_switch_init(struct mtk_eth_priv *priv) - { - int ret; -@@ -1497,6 +1632,11 @@ static int mtk_eth_start(struct udevice - } - - if (MTK_HAS_CAPS(priv->soc->caps, MTK_NETSYS_V3)) { -+ if (priv->sw == SW_MT7988 && priv->gmac_id == 0) { -+ mtk_gdma_write(priv, priv->gmac_id, GDMA_IG_CTRL_REG, -+ GDMA_BRIDGE_TO_CPU); -+ } -+ - mtk_gdma_write(priv, priv->gmac_id, GDMA_EG_CTRL_REG, - GDMA_CPU_BRIDGE_EN); - } -@@ -1845,6 +1985,12 @@ static int mtk_eth_of_to_plat(struct ude - priv->switch_mac_control = mt7531_mac_control; - priv->mt753x_smi_addr = MT753X_DFL_SMI_ADDR; - priv->mt753x_reset_wait_time = 200; -+ } else if (!strcmp(str, "mt7988")) { -+ priv->sw = SW_MT7988; -+ priv->switch_init = mt7988_setup; -+ priv->switch_mac_control = mt7988_mac_control; -+ priv->mt753x_smi_addr = MT753X_DFL_SMI_ADDR; -+ priv->mt753x_reset_wait_time = 50; - } else { - printf("error: unsupported switch\n"); - return -EINVAL; -@@ -1879,6 +2025,15 @@ static int mtk_eth_of_to_plat(struct ude - return 0; - } - -+static const struct mtk_soc_data mt7988_data = { -+ .caps = MT7988_CAPS, -+ .ana_rgc3 = 0x128, -+ .gdma_count = 3, -+ .pdma_base = PDMA_V3_BASE, -+ .txd_size = sizeof(struct mtk_tx_dma_v2), -+ .rxd_size = sizeof(struct mtk_rx_dma_v2), -+}; -+ - static const struct mtk_soc_data mt7986_data = { - .caps = MT7986_CAPS, - .ana_rgc3 = 0x128, -@@ -1930,6 +2085,7 @@ static const struct mtk_soc_data mt7621_ - }; - - static const struct udevice_id mtk_eth_ids[] = { -+ { .compatible = "mediatek,mt7988-eth", .data = (ulong)&mt7988_data }, - { .compatible = "mediatek,mt7986-eth", .data = (ulong)&mt7986_data }, - { .compatible = "mediatek,mt7981-eth", .data = (ulong)&mt7981_data }, - { .compatible = "mediatek,mt7629-eth", .data = (ulong)&mt7629_data }, ---- a/drivers/net/mtk_eth.h -+++ b/drivers/net/mtk_eth.h -@@ -51,6 +51,8 @@ enum mkt_eth_capabilities { - - #define MT7986_CAPS (MTK_NETSYS_V2) - -+#define MT7988_CAPS (MTK_NETSYS_V3 | MTK_INFRA) -+ - /* Frame Engine Register Bases */ - #define PDMA_V1_BASE 0x0800 - #define PDMA_V2_BASE 0x6000 -@@ -59,6 +61,7 @@ enum mkt_eth_capabilities { - #define GDMA2_BASE 0x1500 - #define GDMA3_BASE 0x0540 - #define GMAC_BASE 0x10000 -+#define GSW_BASE 0x20000 - - /* Ethernet subsystem registers */ - -@@ -117,6 +120,9 @@ enum mkt_eth_capabilities { - #define RG_XFI_PLL_ANA_SWWA 0x02283248 - - /* Frame Engine Registers */ -+#define PSE_NO_DROP_CFG_REG 0x108 -+#define PSE_NO_DROP_GDM1 BIT(1) -+ - #define FE_GLO_MISC_REG 0x124 - #define PDMA_VER_V2 BIT(4) - -@@ -187,6 +193,17 @@ enum mkt_eth_capabilities { - #define MDIO_RW_DATA_S 0 - #define MDIO_RW_DATA_M 0xffff - -+#define GMAC_XGMAC_STS_REG 0x000c -+#define P1_XGMAC_FORCE_LINK BIT(15) -+ -+#define GMAC_MAC_MISC_REG 0x0010 -+ -+#define GMAC_GSW_CFG_REG 0x0080 -+#define GSWTX_IPG_M 0xF0000 -+#define GSWTX_IPG_S 16 -+#define GSWRX_IPG_M 0xF -+#define GSWRX_IPG_S 0 -+ - /* MDIO_CMD: MDIO commands */ - #define MDIO_CMD_ADDR 0 - #define MDIO_CMD_WRITE 1 -@@ -285,6 +302,9 @@ enum mkt_eth_capabilities { - FORCE_MODE_TX_FC | FORCE_MODE_RX_FC | \ - FORCE_MODE_DPX | FORCE_MODE_SPD | \ - FORCE_MODE_LNK -+#define MT7988_FORCE_MODE FORCE_MODE_TX_FC | FORCE_MODE_RX_FC | \ -+ FORCE_MODE_DPX | FORCE_MODE_SPD | \ -+ FORCE_MODE_LNK - - /* MT7531 SGMII Registers */ - #define MT7531_SGMII_REG_BASE 0x5000 diff --git a/lede/package/boot/uboot-mediatek/patches/101-27-tools-mtk_image-use-uint32_t-for-ghf-header-magic-an.patch b/lede/package/boot/uboot-mediatek/patches/101-27-tools-mtk_image-use-uint32_t-for-ghf-header-magic-an.patch deleted file mode 100644 index 07620f77b3..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/101-27-tools-mtk_image-use-uint32_t-for-ghf-header-magic-an.patch +++ /dev/null @@ -1,55 +0,0 @@ -From 757b997f1f5a958e6fec3d5aee1ff5cdf5766711 Mon Sep 17 00:00:00 2001 -From: Weijie Gao -Date: Wed, 19 Jul 2023 17:17:45 +0800 -Subject: [PATCH 27/29] tools: mtk_image: use uint32_t for ghf header magic and - version - -This patch converts magic and version fields of ghf common header -to one field with the type of uint32_t to make this header flexible -for futher updates. - -Signed-off-by: Weijie Gao ---- - tools/mtk_image.c | 10 ++++++---- - tools/mtk_image.h | 6 +++--- - 2 files changed, 9 insertions(+), 7 deletions(-) - ---- a/tools/mtk_image.c -+++ b/tools/mtk_image.c -@@ -542,11 +542,13 @@ static void put_brom_layout_header(struc - hdr->type = cpu_to_le32(type); - } - --static void put_ghf_common_header(struct gfh_common_header *gfh, int size, -- int type, int ver) -+static void put_ghf_common_header(struct gfh_common_header *gfh, uint16_t size, -+ uint16_t type, uint8_t ver) - { -- memcpy(gfh->magic, GFH_HEADER_MAGIC, sizeof(gfh->magic)); -- gfh->version = ver; -+ uint32_t magic_version = GFH_HEADER_MAGIC | -+ (uint32_t)ver << GFH_HEADER_VERSION_SHIFT; -+ -+ gfh->magic_version = cpu_to_le32(magic_version); - gfh->size = cpu_to_le16(size); - gfh->type = cpu_to_le16(type); - } ---- a/tools/mtk_image.h -+++ b/tools/mtk_image.h -@@ -63,13 +63,13 @@ struct gen_device_header { - - /* BootROM header definitions */ - struct gfh_common_header { -- uint8_t magic[3]; -- uint8_t version; -+ uint32_t magic_version; - uint16_t size; - uint16_t type; - }; - --#define GFH_HEADER_MAGIC "MMM" -+#define GFH_HEADER_MAGIC 0x4D4D4D -+#define GFH_HEADER_VERSION_SHIFT 24 - - #define GFH_TYPE_FILE_INFO 0 - #define GFH_TYPE_BL_INFO 1 diff --git a/lede/package/boot/uboot-mediatek/patches/101-28-arm-mediatek-add-support-for-MediaTek-MT7988-SoC.patch b/lede/package/boot/uboot-mediatek/patches/101-28-arm-mediatek-add-support-for-MediaTek-MT7988-SoC.patch deleted file mode 100644 index f54a028b42..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/101-28-arm-mediatek-add-support-for-MediaTek-MT7988-SoC.patch +++ /dev/null @@ -1,606 +0,0 @@ -From 884430dadcc2c5d0a2b248795001955a9fa5a1a9 Mon Sep 17 00:00:00 2001 -From: Weijie Gao -Date: Wed, 19 Jul 2023 17:17:49 +0800 -Subject: [PATCH 28/29] arm: mediatek: add support for MediaTek MT7988 SoC - -This patch adds basic support for MediaTek MT7988 SoC. -This includes files that will initialize the SoC after boot and -its device tree. - -Signed-off-by: Weijie Gao ---- - arch/arm/dts/mt7988-u-boot.dtsi | 25 ++ - arch/arm/dts/mt7988.dtsi | 391 ++++++++++++++++++ - arch/arm/mach-mediatek/Kconfig | 13 +- - arch/arm/mach-mediatek/Makefile | 1 + - arch/arm/mach-mediatek/mt7988/Makefile | 4 + - arch/arm/mach-mediatek/mt7988/init.c | 63 +++ - arch/arm/mach-mediatek/mt7988/lowlevel_init.S | 30 ++ - 7 files changed, 526 insertions(+), 1 deletion(-) - create mode 100644 arch/arm/dts/mt7988-u-boot.dtsi - create mode 100644 arch/arm/dts/mt7988.dtsi - create mode 100644 arch/arm/mach-mediatek/mt7988/Makefile - create mode 100644 arch/arm/mach-mediatek/mt7988/init.c - create mode 100644 arch/arm/mach-mediatek/mt7988/lowlevel_init.S - ---- /dev/null -+++ b/arch/arm/dts/mt7988-u-boot.dtsi -@@ -0,0 +1,25 @@ -+// SPDX-License-Identifier: GPL-2.0 -+/* -+ * Copyright (c) 2022 MediaTek Inc. -+ * Author: Sam Shih -+ */ -+ -+&system_clk { -+ bootph-all; -+}; -+ -+&spi_clk { -+ bootph-all; -+}; -+ -+&uart0 { -+ bootph-all; -+}; -+ -+&uart1 { -+ bootph-all; -+}; -+ -+&uart2 { -+ bootph-all; -+}; ---- /dev/null -+++ b/arch/arm/dts/mt7988.dtsi -@@ -0,0 +1,391 @@ -+// SPDX-License-Identifier: GPL-2.0 -+/* -+ * Copyright (c) 2022 MediaTek Inc. -+ * Author: Sam Shih -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+ -+/ { -+ compatible = "mediatek,mt7988-rfb"; -+ interrupt-parent = <&gic>; -+ #address-cells = <2>; -+ #size-cells = <2>; -+ -+ cpus { -+ #address-cells = <1>; -+ #size-cells = <0>; -+ -+ cpu0: cpu@0 { -+ device_type = "cpu"; -+ compatible = "arm,cortex-a73"; -+ reg = <0x0>; -+ mediatek,hwver = <&hwver>; -+ }; -+ -+ cpu1: cpu@1 { -+ device_type = "cpu"; -+ compatible = "arm,cortex-a73"; -+ reg = <0x1>; -+ mediatek,hwver = <&hwver>; -+ }; -+ -+ cpu2: cpu@2 { -+ device_type = "cpu"; -+ compatible = "arm,cortex-a73"; -+ reg = <0x2>; -+ mediatek,hwver = <&hwver>; -+ }; -+ -+ cpu3: cpu@3 { -+ device_type = "cpu"; -+ compatible = "arm,cortex-a73"; -+ reg = <0x3>; -+ mediatek,hwver = <&hwver>; -+ }; -+ }; -+ -+ system_clk: dummy40m { -+ compatible = "fixed-clock"; -+ clock-frequency = <40000000>; -+ #clock-cells = <0>; -+ }; -+ -+ spi_clk: dummy208m { -+ compatible = "fixed-clock"; -+ clock-frequency = <208000000>; -+ #clock-cells = <0>; -+ }; -+ -+ hwver: hwver { -+ compatible = "mediatek,hwver", "syscon"; -+ reg = <0 0x8000000 0 0x1000>; -+ }; -+ -+ timer { -+ compatible = "arm,armv8-timer"; -+ interrupt-parent = <&gic>; -+ clock-frequency = <13000000>; -+ interrupts = , -+ , -+ , -+ ; -+ }; -+ -+ watchdog: watchdog@1001c000 { -+ compatible = "mediatek,mt7622-wdt", -+ "mediatek,mt6589-wdt", -+ "syscon"; -+ reg = <0 0x1001c000 0 0x1000>; -+ interrupts = ; -+ #reset-cells = <1>; -+ }; -+ -+ gic: interrupt-controller@c000000 { -+ compatible = "arm,gic-v3"; -+ #interrupt-cells = <3>; -+ interrupt-parent = <&gic>; -+ interrupt-controller; -+ reg = <0 0x0c000000 0 0x40000>, /* GICD */ -+ <0 0x0c080000 0 0x200000>; /* GICR */ -+ interrupts = ; -+ }; -+ -+ infracfg_ao_cgs: infracfg_ao_cgs@10001000 { -+ compatible = "mediatek,mt7988-infracfg_ao_cgs", "syscon"; -+ reg = <0 0x10001000 0 0x1000>; -+ clock-parent = <&infracfg_ao>; -+ #clock-cells = <1>; -+ }; -+ -+ apmixedsys: apmixedsys@1001e000 { -+ compatible = "mediatek,mt7988-fixed-plls", "syscon"; -+ reg = <0 0x1001e000 0 0x1000>; -+ #clock-cells = <1>; -+ }; -+ -+ topckgen: topckgen@1001b000 { -+ compatible = "mediatek,mt7988-topckgen", "syscon"; -+ reg = <0 0x1001b000 0 0x1000>; -+ clock-parent = <&apmixedsys>; -+ #clock-cells = <1>; -+ }; -+ -+ pinctrl: pinctrl@1001f000 { -+ compatible = "mediatek,mt7988-pinctrl"; -+ reg = <0 0x1001f000 0 0x1000>, -+ <0 0x11c10000 0 0x1000>, -+ <0 0x11d00000 0 0x1000>, -+ <0 0x11d20000 0 0x1000>, -+ <0 0x11e00000 0 0x1000>, -+ <0 0x11f00000 0 0x1000>, -+ <0 0x1000b000 0 0x1000>; -+ reg-names = "gpio_base", "iocfg_tr_base", "iocfg_br_base", -+ "iocfg_rb_base", "iocfg_lb_base", "iocfg_tl_base", -+ "eint"; -+ gpio: gpio-controller { -+ gpio-controller; -+ #gpio-cells = <2>; -+ }; -+ }; -+ -+ sgmiisys0: syscon@10060000 { -+ compatible = "mediatek,mt7988-sgmiisys_0", "syscon"; -+ reg = <0 0x10060000 0 0x1000>; -+ clock-parent = <&topckgen>; -+ #clock-cells = <1>; -+ }; -+ -+ sgmiisys1: syscon@10070000 { -+ compatible = "mediatek,mt7988-sgmiisys_1", "syscon"; -+ reg = <0 0x10070000 0 0x1000>; -+ clock-parent = <&topckgen>; -+ #clock-cells = <1>; -+ }; -+ -+ usxgmiisys0: syscon@10080000 { -+ compatible = "mediatek,mt7988-usxgmiisys_0", "syscon"; -+ reg = <0 0x10080000 0 0x1000>; -+ clock-parent = <&topckgen>; -+ #clock-cells = <1>; -+ }; -+ -+ usxgmiisys1: syscon@10081000 { -+ compatible = "mediatek,mt7988-usxgmiisys_1", "syscon"; -+ reg = <0 0x10081000 0 0x1000>; -+ clock-parent = <&topckgen>; -+ #clock-cells = <1>; -+ }; -+ -+ xfi_pextp0: syscon@11f20000 { -+ compatible = "mediatek,mt7988-xfi_pextp_0", "syscon"; -+ reg = <0 0x11f20000 0 0x10000>; -+ clock-parent = <&topckgen>; -+ #clock-cells = <1>; -+ }; -+ -+ xfi_pextp1: syscon@11f30000 { -+ compatible = "mediatek,mt7988-xfi_pextp_1", "syscon"; -+ reg = <0 0x11f30000 0 0x10000>; -+ clock-parent = <&topckgen>; -+ #clock-cells = <1>; -+ }; -+ -+ xfi_pll: syscon@11f40000 { -+ compatible = "mediatek,mt7988-xfi_pll", "syscon"; -+ reg = <0 0x11f40000 0 0x1000>; -+ clock-parent = <&topckgen>; -+ #clock-cells = <1>; -+ }; -+ -+ topmisc: topmisc@11d10000 { -+ compatible = "mediatek,mt7988-topmisc", "syscon", -+ "mediatek,mt7988-power-controller"; -+ reg = <0 0x11d10000 0 0x10000>; -+ clock-parent = <&topckgen>; -+ #clock-cells = <1>; -+ }; -+ -+ infracfg_ao: infracfg@10001000 { -+ compatible = "mediatek,mt7988-infracfg", "syscon"; -+ reg = <0 0x10001000 0 0x1000>; -+ clock-parent = <&topckgen>; -+ #clock-cells = <1>; -+ }; -+ -+ uart0: serial@11000000 { -+ compatible = "mediatek,hsuart"; -+ reg = <0 0x11000000 0 0x100>; -+ interrupts = ; -+ clocks = <&infracfg_ao_cgs CK_INFRA_52M_UART0_CK>; -+ assigned-clocks = <&topckgen CK_TOP_UART_SEL>, -+ <&infracfg_ao CK_INFRA_MUX_UART0_SEL>; -+ assigned-clock-parents = <&topckgen CK_TOP_CB_CKSQ_40M>, -+ <&infracfg_ao CK_INFRA_UART_O0>; -+ status = "disabled"; -+ }; -+ -+ uart1: serial@11000100 { -+ compatible = "mediatek,hsuart"; -+ reg = <0 0x11000100 0 0x100>; -+ interrupts = ; -+ clocks = <&infracfg_ao_cgs CK_INFRA_52M_UART1_CK>; -+ assigned-clocks = <&topckgen CK_TOP_UART_SEL>, -+ <&infracfg_ao CK_INFRA_MUX_UART1_SEL>; -+ assigned-clock-parents = <&topckgen CK_TOP_CB_CKSQ_40M>, -+ <&infracfg_ao CK_INFRA_UART_O1>; -+ status = "disabled"; -+ }; -+ -+ uart2: serial@11000200 { -+ compatible = "mediatek,hsuart"; -+ reg = <0 0x11000200 0 0x100>; -+ interrupts = ; -+ clocks = <&infracfg_ao_cgs CK_INFRA_52M_UART2_CK>; -+ assigned-clocks = <&topckgen CK_TOP_UART_SEL>, -+ <&infracfg_ao CK_INFRA_MUX_UART2_SEL>; -+ assigned-clock-parents = <&topckgen CK_TOP_CB_CKSQ_40M>, -+ <&infracfg_ao CK_INFRA_UART_O2>; -+ status = "disabled"; -+ }; -+ -+ i2c0: i2c@11003000 { -+ compatible = "mediatek,mt7988-i2c", -+ "mediatek,mt7981-i2c"; -+ reg = <0 0x11003000 0 0x1000>, -+ <0 0x10217080 0 0x80>; -+ interrupts = ; -+ clock-div = <1>; -+ clocks = <&infracfg_ao CK_INFRA_I2C_BCK>, -+ <&infracfg_ao CK_INFRA_66M_AP_DMA_BCK>; -+ clock-names = "main", "dma"; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ status = "disabled"; -+ }; -+ -+ i2c1: i2c@11004000 { -+ compatible = "mediatek,mt7988-i2c", -+ "mediatek,mt7981-i2c"; -+ reg = <0 0x11004000 0 0x1000>, -+ <0 0x10217100 0 0x80>; -+ interrupts = ; -+ clock-div = <1>; -+ clocks = <&infracfg_ao CK_INFRA_I2C_BCK>, -+ <&infracfg_ao CK_INFRA_66M_AP_DMA_BCK>; -+ clock-names = "main", "dma"; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ status = "disabled"; -+ }; -+ -+ i2c2: i2c@11005000 { -+ compatible = "mediatek,mt7988-i2c", -+ "mediatek,mt7981-i2c"; -+ reg = <0 0x11005000 0 0x1000>, -+ <0 0x10217180 0 0x80>; -+ interrupts = ; -+ clock-div = <1>; -+ clocks = <&infracfg_ao CK_INFRA_I2C_BCK>, -+ <&infracfg_ao CK_INFRA_66M_AP_DMA_BCK>; -+ clock-names = "main", "dma"; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ status = "disabled"; -+ }; -+ -+ pwm: pwm@10048000 { -+ compatible = "mediatek,mt7988-pwm"; -+ reg = <0 0x10048000 0 0x1000>; -+ #pwm-cells = <2>; -+ clocks = <&infracfg_ao CK_INFRA_66M_PWM_BCK>, -+ <&infracfg_ao CK_INFRA_66M_PWM_HCK>, -+ <&infracfg_ao CK_INFRA_66M_PWM_CK1>, -+ <&infracfg_ao CK_INFRA_66M_PWM_CK2>, -+ <&infracfg_ao CK_INFRA_66M_PWM_CK3>, -+ <&infracfg_ao CK_INFRA_66M_PWM_CK4>, -+ <&infracfg_ao CK_INFRA_66M_PWM_CK5>, -+ <&infracfg_ao CK_INFRA_66M_PWM_CK6>, -+ <&infracfg_ao CK_INFRA_66M_PWM_CK7>, -+ <&infracfg_ao CK_INFRA_66M_PWM_CK8>; -+ clock-names = "top", "main", "pwm1", "pwm2", "pwm3", -+ "pwm4","pwm5","pwm6","pwm7","pwm8"; -+ status = "disabled"; -+ }; -+ -+ snand: snand@11001000 { -+ compatible = "mediatek,mt7988-snand", -+ "mediatek,mt7986-snand"; -+ reg = <0 0x11001000 0 0x1000>, -+ <0 0x11002000 0 0x1000>; -+ reg-names = "nfi", "ecc"; -+ interrupts = ; -+ clocks = <&infracfg_ao CK_INFRA_SPINFI>, -+ <&infracfg_ao CK_INFRA_NFI>, -+ <&infracfg_ao CK_INFRA_66M_NFI_HCK>; -+ clock-names = "pad_clk", "nfi_clk", "nfi_hclk"; -+ assigned-clocks = <&topckgen CK_TOP_SPINFI_SEL>, -+ <&topckgen CK_TOP_NFI1X_SEL>; -+ assigned-clock-parents = <&topckgen CK_TOP_CB_M_D8>, -+ <&topckgen CK_TOP_CB_M_D8>; -+ status = "disabled"; -+ }; -+ -+ spi0: spi@1100a000 { -+ compatible = "mediatek,ipm-spi"; -+ reg = <0 0x11007000 0 0x100>; -+ clocks = <&spi_clk>, -+ <&spi_clk>; -+ clock-names = "sel-clk", "spi-clk"; -+ interrupts = ; -+ status = "disabled"; -+ }; -+ -+ spi1: spi@1100b000 { -+ compatible = "mediatek,ipm-spi"; -+ reg = <0 0x11008000 0 0x100>; -+ interrupts = ; -+ status = "disabled"; -+ }; -+ -+ spi2: spi@11009000 { -+ compatible = "mediatek,ipm-spi"; -+ reg = <0 0x11009000 0 0x100>; -+ clocks = <&spi_clk>, -+ <&spi_clk>; -+ clock-names = "sel-clk", "spi-clk"; -+ interrupts = ; -+ status = "disabled"; -+ }; -+ -+ mmc0: mmc@11230000 { -+ compatible = "mediatek,mt7988-mmc", -+ "mediatek,mt7986-mmc"; -+ reg = <0 0x11230000 0 0x1000>; -+ interrupts = ; -+ clocks = <&infracfg_ao_cgs CK_INFRA_MSDC400>, -+ <&infracfg_ao_cgs CK_INFRA_MSDC2_HCK>, -+ <&infracfg_ao_cgs CK_INFRA_133M_MSDC_0_HCK>, -+ <&infracfg_ao_cgs CK_INFRA_66M_MSDC_0_HCK>; -+ clock-names = "source", "hclk", "source_cg", "axi_cg"; -+ status = "disabled"; -+ }; -+ -+ ethdma: syscon@15000000 { -+ compatible = "mediatek,mt7988-ethdma", "syscon"; -+ reg = <0 0x15000000 0 0x20000>; -+ clock-parent = <&topckgen>; -+ #clock-cells = <1>; -+ #reset-cells = <1>; -+ }; -+ -+ ethwarp: syscon@15031000 { -+ compatible = "mediatek,mt7988-ethwarp", "syscon"; -+ reg = <0 0x15031000 0 0x1000>; -+ clock-parent = <&topckgen>; -+ #clock-cells = <1>; -+ #reset-cells = <1>; -+ }; -+ -+ eth: ethernet@15100000 { -+ compatible = "mediatek,mt7988-eth", "syscon"; -+ reg = <0 0x15100000 0 0x20000>; -+ mediatek,ethsys = <ðdma>; -+ mediatek,sgmiisys = <&sgmiisys0>; -+ mediatek,usxgmiisys = <&usxgmiisys0>; -+ mediatek,xfi_pextp = <&xfi_pextp0>; -+ mediatek,xfi_pll = <&xfi_pll>; -+ mediatek,infracfg = <&topmisc>; -+ mediatek,toprgu = <&watchdog>; -+ resets = <ðdma ETHDMA_FE_RST>, <ðwarp ETHWARP_GSW_RST>; -+ reset-names = "fe", "mcm"; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ mediatek,mcm; -+ status = "disabled"; -+ }; -+}; ---- a/arch/arm/mach-mediatek/Kconfig -+++ b/arch/arm/mach-mediatek/Kconfig -@@ -58,6 +58,15 @@ config TARGET_MT7986 - including UART, SPI, SPI flash, USB3.0, MMC, NAND, SNFI, PWM, PCIe, - Gigabit Ethernet, I2C, built-in 4x4 Wi-Fi, and PCIe. - -+config TARGET_MT7988 -+ bool "MediaTek MT7988 SoC" -+ select ARM64 -+ select CPU -+ help -+ The MediaTek MT7988 is a ARM64-based SoC with a quad-core Cortex-A73. -+ including UART, SPI, SPI flash, USB3.0, MMC, NAND, SNFI, PWM, PCIe, -+ 10 Gigabit Ethernet , I2C, and PCIe. -+ - config TARGET_MT8183 - bool "MediaTek MT8183 SoC" - select ARM64 -@@ -104,6 +113,7 @@ config SYS_BOARD - default "mt7629" if TARGET_MT7629 - default "mt7981" if TARGET_MT7981 - default "mt7986" if TARGET_MT7986 -+ default "mt7988" if TARGET_MT7988 - default "mt8183" if TARGET_MT8183 - default "mt8512" if TARGET_MT8512 - default "mt8516" if TARGET_MT8516 -@@ -121,6 +131,7 @@ config SYS_CONFIG_NAME - default "mt7629" if TARGET_MT7629 - default "mt7981" if TARGET_MT7981 - default "mt7986" if TARGET_MT7986 -+ default "mt7988" if TARGET_MT7988 - default "mt8183" if TARGET_MT8183 - default "mt8512" if TARGET_MT8512 - default "mt8516" if TARGET_MT8516 -@@ -135,7 +146,7 @@ config MTK_BROM_HEADER_INFO - string - default "media=nor" if TARGET_MT8518 || TARGET_MT8512 || TARGET_MT7622 - default "media=emmc" if TARGET_MT8516 || TARGET_MT8365 || TARGET_MT8183 -- default "media=snand;nandinfo=2k+64" if TARGET_MT7981 || TARGET_MT7986 -+ default "media=snand;nandinfo=2k+64" if TARGET_MT7981 || TARGET_MT7986 || TARGET_MT7988 - default "lk=1" if TARGET_MT7623 - - source "board/mediatek/mt7629/Kconfig" ---- a/arch/arm/mach-mediatek/Makefile -+++ b/arch/arm/mach-mediatek/Makefile -@@ -9,6 +9,7 @@ obj-$(CONFIG_TARGET_MT7623) += mt7623/ - obj-$(CONFIG_TARGET_MT7629) += mt7629/ - obj-$(CONFIG_TARGET_MT7981) += mt7981/ - obj-$(CONFIG_TARGET_MT7986) += mt7986/ -+obj-$(CONFIG_TARGET_MT7988) += mt7988/ - obj-$(CONFIG_TARGET_MT8183) += mt8183/ - obj-$(CONFIG_TARGET_MT8516) += mt8516/ - obj-$(CONFIG_TARGET_MT8518) += mt8518/ ---- /dev/null -+++ b/arch/arm/mach-mediatek/mt7988/Makefile -@@ -0,0 +1,4 @@ -+# SPDX-License-Identifier: GPL-2.0 -+ -+obj-y += init.o -+obj-y += lowlevel_init.o ---- /dev/null -+++ b/arch/arm/mach-mediatek/mt7988/init.c -@@ -0,0 +1,63 @@ -+// SPDX-License-Identifier: GPL-2.0 -+/* -+ * Copyright (C) 2022 MediaTek Inc. -+ * Author: Sam Shih -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+ -+DECLARE_GLOBAL_DATA_PTR; -+ -+#define SZ_8G _AC(0x200000000, ULL) -+ -+int dram_init(void) -+{ -+ int ret; -+ -+ ret = fdtdec_setup_mem_size_base(); -+ if (ret) -+ return ret; -+ -+ gd->ram_size = get_ram_size((void *)gd->ram_base, SZ_8G); -+ -+ return 0; -+} -+ -+int dram_init_banksize(void) -+{ -+ gd->bd->bi_dram[0].start = gd->ram_base; -+ gd->bd->bi_dram[0].size = gd->ram_size; -+ -+ return 0; -+} -+ -+void reset_cpu(ulong addr) -+{ -+ psci_system_reset(); -+} -+ -+static struct mm_region mt7988_mem_map[] = { -+ { -+ /* DDR */ -+ .virt = 0x40000000UL, -+ .phys = 0x40000000UL, -+ .size = 0x200000000ULL, -+ .attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) | PTE_BLOCK_OUTER_SHARE, -+ }, { -+ .virt = 0x00000000UL, -+ .phys = 0x00000000UL, -+ .size = 0x40000000UL, -+ .attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) | -+ PTE_BLOCK_NON_SHARE | -+ PTE_BLOCK_PXN | PTE_BLOCK_UXN -+ }, { -+ 0, -+ } -+}; -+ -+struct mm_region *mem_map = mt7988_mem_map; ---- /dev/null -+++ b/arch/arm/mach-mediatek/mt7988/lowlevel_init.S -@@ -0,0 +1,30 @@ -+/* SPDX-License-Identifier: GPL-2.0 */ -+/* -+ * Copyright (C) 2020 MediaTek Inc. -+ * Author: Sam Shih -+ */ -+ -+/* -+ * Switch from AArch64 EL2 to AArch32 EL2 -+ * @param inputs: -+ * x0: argument, zero -+ * x1: machine nr -+ * x2: fdt address -+ * x3: input argument -+ * x4: kernel entry point -+ * @param outputs for secure firmware: -+ * x0: function id -+ * x1: kernel entry point -+ * x2: machine nr -+ * x3: fdt address -+*/ -+ -+.global armv8_el2_to_aarch32 -+armv8_el2_to_aarch32: -+ mov x3, x2 -+ mov x2, x1 -+ mov x1, x4 -+ mov x4, #0 -+ ldr x0, =0x82000200 -+ SMC #0 -+ ret diff --git a/lede/package/boot/uboot-mediatek/patches/101-29-board-mediatek-add-MT7988-reference-boards.patch b/lede/package/boot/uboot-mediatek/patches/101-29-board-mediatek-add-MT7988-reference-boards.patch deleted file mode 100644 index ef41f4d56a..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/101-29-board-mediatek-add-MT7988-reference-boards.patch +++ /dev/null @@ -1,575 +0,0 @@ -From fd7d9124ffa6761f27747daeea599e0ab874c1fa Mon Sep 17 00:00:00 2001 -From: Weijie Gao -Date: Wed, 19 Jul 2023 17:17:54 +0800 -Subject: [PATCH 29/29] board: mediatek: add MT7988 reference boards - -This patch adds general board files based on MT7988 SoCs. - -MT7988 uses one mmc controller for booting from both SD and eMMC, -and the pins of mmc controller booting from SD are also shared with -one of spi controllers. -So two configs are need for these boot types: - -1. mt7988_rfb_defconfig - SPI-NOR, SPI-NAND and eMMC -2. mt7988_sd_rfb_defconfig - SPI-NAND and SD - -Signed-off-by: Weijie Gao ---- - arch/arm/dts/Makefile | 2 + - arch/arm/dts/mt7988-rfb.dts | 182 +++++++++++++++++++++++++++++ - arch/arm/dts/mt7988-sd-rfb.dts | 134 +++++++++++++++++++++ - board/mediatek/mt7988/MAINTAINERS | 7 ++ - board/mediatek/mt7988/Makefile | 3 + - board/mediatek/mt7988/mt7988_rfb.c | 10 ++ - configs/mt7988_rfb_defconfig | 83 +++++++++++++ - configs/mt7988_sd_rfb_defconfig | 71 +++++++++++ - include/configs/mt7988.h | 14 +++ - 9 files changed, 506 insertions(+) - create mode 100644 arch/arm/dts/mt7988-rfb.dts - create mode 100644 arch/arm/dts/mt7988-sd-rfb.dts - create mode 100644 board/mediatek/mt7988/MAINTAINERS - create mode 100644 board/mediatek/mt7988/Makefile - create mode 100644 board/mediatek/mt7988/mt7988_rfb.c - create mode 100644 configs/mt7988_rfb_defconfig - create mode 100644 configs/mt7988_sd_rfb_defconfig - create mode 100644 include/configs/mt7988.h - ---- a/arch/arm/dts/Makefile -+++ b/arch/arm/dts/Makefile -@@ -1319,6 +1319,8 @@ dtb-$(CONFIG_ARCH_MEDIATEK) += \ - mt7986b-sd-rfb.dtb \ - mt7986a-emmc-rfb.dtb \ - mt7986b-emmc-rfb.dtb \ -+ mt7988-rfb.dtb \ -+ mt7988-sd-rfb.dtb \ - mt8183-pumpkin.dtb \ - mt8512-bm1-emmc.dtb \ - mt8516-pumpkin.dtb \ ---- /dev/null -+++ b/arch/arm/dts/mt7988-rfb.dts -@@ -0,0 +1,182 @@ -+// SPDX-License-Identifier: GPL-2.0 -+/* -+ * Copyright (c) 2022 MediaTek Inc. -+ * Author: Sam Shih -+ */ -+ -+/dts-v1/; -+#include "mt7988.dtsi" -+#include -+ -+/ { -+ model = "mt7988-rfb"; -+ compatible = "mediatek,mt7988-rfb"; -+ -+ chosen { -+ stdout-path = &uart0; -+ }; -+ -+ memory@40000000 { -+ device_type = "memory"; -+ reg = <0 0x40000000 0 0x10000000>; -+ }; -+ -+ reg_3p3v: regulator-3p3v { -+ compatible = "regulator-fixed"; -+ regulator-name = "fixed-3.3V"; -+ regulator-min-microvolt = <3300000>; -+ regulator-max-microvolt = <3300000>; -+ regulator-boot-on; -+ regulator-always-on; -+ }; -+ -+ reg_1p8v: regulator-1p8v { -+ compatible = "regulator-fixed"; -+ regulator-name = "fixed-1.8V"; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <1800000>; -+ regulator-boot-on; -+ regulator-always-on; -+ }; -+}; -+ -+&uart0 { -+ status = "okay"; -+}; -+ -+&i2c1 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&i2c1_pins>; -+ status = "okay"; -+}; -+ -+ð { -+ status = "okay"; -+ mediatek,gmac-id = <0>; -+ phy-mode = "usxgmii"; -+ mediatek,switch = "mt7988"; -+ -+ fixed-link { -+ speed = <1000>; -+ full-duplex; -+ pause; -+ }; -+}; -+ -+&pinctrl { -+ i2c1_pins: i2c1-pins { -+ mux { -+ function = "i2c"; -+ groups = "i2c1_0"; -+ }; -+ }; -+ -+ pwm_pins: pwm-pins { -+ mux { -+ function = "pwm"; -+ groups = "pwm0", "pwm1", "pwm2", "pwm3", "pwm4", -+ "pwm5", "pwm6", "pwm7"; -+ }; -+ }; -+ -+ spi0_pins: spi0-pins { -+ mux { -+ function = "spi"; -+ groups = "spi0", "spi0_wp_hold"; -+ }; -+ }; -+ -+ spi2_pins: spi2-pins { -+ mux { -+ function = "spi"; -+ groups = "spi2", "spi2_wp_hold"; -+ }; -+ }; -+ -+ mmc0_pins_default: mmc0default { -+ mux { -+ function = "flash"; -+ groups = "emmc_51"; -+ }; -+ -+ conf-cmd-dat { -+ pins = "EMMC_DATA_0", "EMMC_DATA_1", "EMMC_DATA_2", -+ "EMMC_DATA_3", "EMMC_DATA_4", "EMMC_DATA_5", -+ "EMMC_DATA_6", "EMMC_DATA_7", "EMMC_CMD"; -+ input-enable; -+ }; -+ -+ conf-clk { -+ pins = "EMMC_CK"; -+ }; -+ -+ conf-dsl { -+ pins = "EMMC_DSL"; -+ }; -+ -+ conf-rst { -+ pins = "EMMC_RSTB"; -+ }; -+ }; -+}; -+ -+&pwm { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&pwm_pins>; -+ status = "okay"; -+}; -+ -+&spi0 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&spi0_pins>; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ status = "okay"; -+ must_tx; -+ enhance_timing; -+ dma_ext; -+ ipm_design; -+ support_quad; -+ tick_dly = <2>; -+ sample_sel = <0>; -+ -+ spi_nand@0 { -+ compatible = "spi-nand"; -+ reg = <0>; -+ spi-max-frequency = <52000000>; -+ }; -+}; -+ -+&spi2 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&spi2_pins>; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ status = "okay"; -+ must_tx; -+ enhance_timing; -+ dma_ext; -+ ipm_design; -+ support_quad; -+ tick_dly = <2>; -+ sample_sel = <0>; -+ -+ spi_nor@0 { -+ compatible = "jedec,spi-nor"; -+ reg = <0>; -+ spi-max-frequency = <52000000>; -+ }; -+}; -+ -+&mmc0 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&mmc0_pins_default>; -+ max-frequency = <52000000>; -+ bus-width = <8>; -+ cap-mmc-highspeed; -+ cap-mmc-hw-reset; -+ vmmc-supply = <®_3p3v>; -+ vqmmc-supply = <®_1p8v>; -+ non-removable; -+ status = "okay"; -+}; ---- /dev/null -+++ b/arch/arm/dts/mt7988-sd-rfb.dts -@@ -0,0 +1,134 @@ -+// SPDX-License-Identifier: GPL-2.0 -+/* -+ * Copyright (c) 2022 MediaTek Inc. -+ * Author: Sam Shih -+ */ -+ -+/dts-v1/; -+#include "mt7988.dtsi" -+#include -+ -+/ { -+ model = "mt7988-rfb"; -+ compatible = "mediatek,mt7988-rfb", "mediatek,mt7988-sd-rfb"; -+ -+ chosen { -+ stdout-path = &uart0; -+ }; -+ -+ memory@40000000 { -+ device_type = "memory"; -+ reg = <0 0x40000000 0 0x10000000>; -+ }; -+ -+ reg_3p3v: regulator-3p3v { -+ compatible = "regulator-fixed"; -+ regulator-name = "fixed-3.3V"; -+ regulator-min-microvolt = <3300000>; -+ regulator-max-microvolt = <3300000>; -+ regulator-boot-on; -+ regulator-always-on; -+ }; -+}; -+ -+&uart0 { -+ status = "okay"; -+}; -+ -+&i2c1 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&i2c1_pins>; -+ status = "okay"; -+}; -+ -+ð { -+ status = "okay"; -+ mediatek,gmac-id = <0>; -+ phy-mode = "usxgmii"; -+ mediatek,switch = "mt7988"; -+ -+ fixed-link { -+ speed = <1000>; -+ full-duplex; -+ pause; -+ }; -+}; -+ -+&pinctrl { -+ i2c1_pins: i2c1-pins { -+ mux { -+ function = "i2c"; -+ groups = "i2c1_0"; -+ }; -+ }; -+ -+ pwm_pins: pwm-pins { -+ mux { -+ function = "pwm"; -+ groups = "pwm0", "pwm1", "pwm2", "pwm3", "pwm4", -+ "pwm5", "pwm6", "pwm7"; -+ }; -+ }; -+ -+ spi0_pins: spi0-pins { -+ mux { -+ function = "spi"; -+ groups = "spi0", "spi0_wp_hold"; -+ }; -+ }; -+ -+ mmc1_pins_default: mmc1default { -+ mux { -+ function = "flash"; -+ groups = "emmc_45"; -+ }; -+ -+ conf-cmd-dat { -+ pins = "SPI2_CSB", "SPI2_MISO", "SPI2_MOSI", -+ "SPI2_CLK", "SPI2_HOLD"; -+ input-enable; -+ }; -+ -+ conf-clk { -+ pins = "SPI2_WP"; -+ }; -+ }; -+}; -+ -+&pwm { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&pwm_pins>; -+ status = "okay"; -+}; -+ -+&spi0 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&spi0_pins>; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ status = "okay"; -+ must_tx; -+ enhance_timing; -+ dma_ext; -+ ipm_design; -+ support_quad; -+ tick_dly = <2>; -+ sample_sel = <0>; -+ -+ spi_nand@0 { -+ compatible = "spi-nand"; -+ reg = <0>; -+ spi-max-frequency = <52000000>; -+ }; -+}; -+ -+&mmc0 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&mmc1_pins_default>; -+ max-frequency = <52000000>; -+ bus-width = <4>; -+ cap-sd-highspeed; -+ vmmc-supply = <®_3p3v>; -+ vqmmc-supply = <®_3p3v>; -+ status = "okay"; -+}; ---- /dev/null -+++ b/board/mediatek/mt7988/MAINTAINERS -@@ -0,0 +1,7 @@ -+MT7988 -+M: Sam Shih -+S: Maintained -+F: board/mediatek/mt7988 -+F: include/configs/mt7988.h -+F: configs/mt7988_rfb_defconfig -+F: configs/mt7988_sd_rfb_defconfig ---- /dev/null -+++ b/board/mediatek/mt7988/Makefile -@@ -0,0 +1,3 @@ -+# SPDX-License-Identifier: GPL-2.0 -+ -+obj-y += mt7988_rfb.o ---- /dev/null -+++ b/board/mediatek/mt7988/mt7988_rfb.c -@@ -0,0 +1,10 @@ -+// SPDX-License-Identifier: GPL-2.0 -+/* -+ * Copyright (C) 2022 MediaTek Inc. -+ * Author: Sam Shih -+ */ -+ -+int board_init(void) -+{ -+ return 0; -+} ---- /dev/null -+++ b/configs/mt7988_rfb_defconfig -@@ -0,0 +1,83 @@ -+CONFIG_ARM=y -+CONFIG_SYS_HAS_NONCACHED_MEMORY=y -+CONFIG_POSITION_INDEPENDENT=y -+CONFIG_ARCH_MEDIATEK=y -+CONFIG_TEXT_BASE=0x41e00000 -+CONFIG_SYS_MALLOC_F_LEN=0x4000 -+CONFIG_NR_DRAM_BANKS=1 -+CONFIG_DEFAULT_DEVICE_TREE="mt7988-rfb" -+CONFIG_SYS_PROMPT="MT7988> " -+CONFIG_TARGET_MT7988=y -+CONFIG_DEBUG_UART_BASE=0x11000000 -+CONFIG_DEBUG_UART_CLOCK=40000000 -+CONFIG_SYS_LOAD_ADDR=0x50000000 -+CONFIG_DEBUG_UART=y -+# CONFIG_AUTOBOOT is not set -+CONFIG_DEFAULT_FDT_FILE="mt7988-rfb" -+CONFIG_LOGLEVEL=7 -+CONFIG_LOG=y -+CONFIG_SYS_CBSIZE=512 -+CONFIG_SYS_PBSIZE=1049 -+# CONFIG_BOOTM_NETBSD is not set -+# CONFIG_BOOTM_PLAN9 is not set -+# CONFIG_BOOTM_RTEMS is not set -+# CONFIG_BOOTM_VXWORKS is not set -+# CONFIG_CMD_ELF is not set -+CONFIG_CMD_CLK=y -+CONFIG_CMD_DM=y -+CONFIG_CMD_GPIO=y -+CONFIG_CMD_PWM=y -+CONFIG_CMD_MMC=y -+CONFIG_CMD_MTD=y -+CONFIG_CMD_PING=y -+CONFIG_CMD_SMC=y -+CONFIG_DOS_PARTITION=y -+CONFIG_EFI_PARTITION=y -+CONFIG_PARTITION_TYPE_GUID=y -+CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y -+CONFIG_NET_RANDOM_ETHADDR=y -+CONFIG_USE_IPADDR=y -+CONFIG_IPADDR="192.168.1.1" -+CONFIG_USE_NETMASK=y -+CONFIG_NETMASK="255.255.255.0" -+CONFIG_USE_SERVERIP=y -+CONFIG_SERVERIP="192.168.1.2" -+CONFIG_PROT_TCP=y -+CONFIG_REGMAP=y -+CONFIG_SYSCON=y -+CONFIG_CLK=y -+CONFIG_MMC_HS200_SUPPORT=y -+CONFIG_MMC_MTK=y -+CONFIG_MTD=y -+CONFIG_DM_MTD=y -+CONFIG_MTD_SPI_NAND=y -+CONFIG_DM_SPI_FLASH=y -+CONFIG_SPI_FLASH_SFDP_SUPPORT=y -+CONFIG_SPI_FLASH_EON=y -+CONFIG_SPI_FLASH_GIGADEVICE=y -+CONFIG_SPI_FLASH_ISSI=y -+CONFIG_SPI_FLASH_MACRONIX=y -+CONFIG_SPI_FLASH_SPANSION=y -+CONFIG_SPI_FLASH_STMICRO=y -+CONFIG_SPI_FLASH_WINBOND=y -+CONFIG_SPI_FLASH_XMC=y -+CONFIG_SPI_FLASH_XTX=y -+CONFIG_SPI_FLASH_MTD=y -+CONFIG_PHY_FIXED=y -+CONFIG_MEDIATEK_ETH=y -+CONFIG_PINCTRL=y -+CONFIG_PINCONF=y -+CONFIG_PINCTRL_MT7988=y -+CONFIG_POWER_DOMAIN=y -+CONFIG_MTK_POWER_DOMAIN=y -+CONFIG_DM_PWM=y -+CONFIG_PWM_MTK=y -+CONFIG_RAM=y -+CONFIG_DM_SERIAL=y -+CONFIG_MTK_SERIAL=y -+CONFIG_SPI=y -+CONFIG_DM_SPI=y -+CONFIG_MTK_SPIM=y -+CONFIG_LZO=y -+CONFIG_HEXDUMP=y -+# CONFIG_EFI_LOADER is not set ---- /dev/null -+++ b/configs/mt7988_sd_rfb_defconfig -@@ -0,0 +1,71 @@ -+CONFIG_ARM=y -+CONFIG_SYS_HAS_NONCACHED_MEMORY=y -+CONFIG_POSITION_INDEPENDENT=y -+CONFIG_ARCH_MEDIATEK=y -+CONFIG_TEXT_BASE=0x41e00000 -+CONFIG_SYS_MALLOC_F_LEN=0x4000 -+CONFIG_NR_DRAM_BANKS=1 -+CONFIG_DEFAULT_DEVICE_TREE="mt7988-sd-rfb" -+CONFIG_SYS_PROMPT="MT7988> " -+CONFIG_TARGET_MT7988=y -+CONFIG_DEBUG_UART_BASE=0x11000000 -+CONFIG_DEBUG_UART_CLOCK=40000000 -+CONFIG_SYS_LOAD_ADDR=0x50000000 -+CONFIG_DEBUG_UART=y -+# CONFIG_AUTOBOOT is not set -+CONFIG_DEFAULT_FDT_FILE="mt7988-sd-rfb" -+CONFIG_LOGLEVEL=7 -+CONFIG_LOG=y -+CONFIG_SYS_CBSIZE=512 -+CONFIG_SYS_PBSIZE=1049 -+# CONFIG_BOOTM_NETBSD is not set -+# CONFIG_BOOTM_PLAN9 is not set -+# CONFIG_BOOTM_RTEMS is not set -+# CONFIG_BOOTM_VXWORKS is not set -+# CONFIG_CMD_ELF is not set -+CONFIG_CMD_CLK=y -+CONFIG_CMD_DM=y -+CONFIG_CMD_GPIO=y -+CONFIG_CMD_PWM=y -+CONFIG_CMD_MMC=y -+CONFIG_CMD_MTD=y -+CONFIG_CMD_PING=y -+CONFIG_CMD_SMC=y -+CONFIG_DOS_PARTITION=y -+CONFIG_EFI_PARTITION=y -+CONFIG_PARTITION_TYPE_GUID=y -+CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y -+CONFIG_NET_RANDOM_ETHADDR=y -+CONFIG_USE_IPADDR=y -+CONFIG_IPADDR="192.168.1.1" -+CONFIG_USE_NETMASK=y -+CONFIG_NETMASK="255.255.255.0" -+CONFIG_USE_SERVERIP=y -+CONFIG_SERVERIP="192.168.1.2" -+CONFIG_PROT_TCP=y -+CONFIG_REGMAP=y -+CONFIG_SYSCON=y -+CONFIG_CLK=y -+CONFIG_MMC_HS200_SUPPORT=y -+CONFIG_MMC_MTK=y -+CONFIG_MTD=y -+CONFIG_DM_MTD=y -+CONFIG_MTD_SPI_NAND=y -+CONFIG_PHY_FIXED=y -+CONFIG_MEDIATEK_ETH=y -+CONFIG_PINCTRL=y -+CONFIG_PINCONF=y -+CONFIG_PINCTRL_MT7988=y -+CONFIG_POWER_DOMAIN=y -+CONFIG_MTK_POWER_DOMAIN=y -+CONFIG_DM_PWM=y -+CONFIG_PWM_MTK=y -+CONFIG_RAM=y -+CONFIG_DM_SERIAL=y -+CONFIG_MTK_SERIAL=y -+CONFIG_SPI=y -+CONFIG_DM_SPI=y -+CONFIG_MTK_SPIM=y -+CONFIG_LZO=y -+CONFIG_HEXDUMP=y -+# CONFIG_EFI_LOADER is not set ---- /dev/null -+++ b/include/configs/mt7988.h -@@ -0,0 +1,14 @@ -+/* SPDX-License-Identifier: GPL-2.0 */ -+/* -+ * Configuration for MediaTek MT7988 SoC -+ * -+ * Copyright (C) 2022 MediaTek Inc. -+ * Author: Sam Shih -+ */ -+ -+#ifndef __MT7988_H -+#define __MT7988_H -+ -+#define CFG_MAX_MEM_MAPPED 0xC0000000 -+ -+#endif diff --git a/lede/package/boot/uboot-mediatek/patches/102-ram-mediatek-include-linux-sizes.h-for-SZ_-macros.patch b/lede/package/boot/uboot-mediatek/patches/102-ram-mediatek-include-linux-sizes.h-for-SZ_-macros.patch deleted file mode 100644 index 3cfc684956..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/102-ram-mediatek-include-linux-sizes.h-for-SZ_-macros.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 4bd66fd5b69eda41b4320fd6f8db50a7b7fa7bf7 Mon Sep 17 00:00:00 2001 -Message-ID: <4bd66fd5b69eda41b4320fd6f8db50a7b7fa7bf7.1690828424.git.daniel@makrotopia.org> -From: Daniel Golle -Date: Mon, 31 Jul 2023 19:25:04 +0100 -Subject: [PATCH] ram: mediatek: include for SZ_* macros -To: Ryder Lee , - Weijie Gao , - Chunfeng Yun , - GSS_MTK_Uboot_upstream , - u-boot@lists.denx.de - -Something between U-Boot 2023.04 and 2023.07.02 resulted in no longer -implicitely including in the DDR3 RAM driver for the -MT7929 SoC. The result is a build failure: -drivers/ram/mediatek/ddr3-mt7629.c: In function 'mtk_ddr3_get_info': -drivers/ram/mediatek/ddr3-mt7629.c:734:30: error: 'SZ_128M' undeclared (first use in this function) - 734 | info->size = SZ_128M; - | ^~~~~~~ -drivers/ram/mediatek/ddr3-mt7629.c:734:30: note: each undeclared identifier is reported only once for each function it appears in -drivers/ram/mediatek/ddr3-mt7629.c:737:30: error: 'SZ_256M' undeclared (first use in this function) - 737 | info->size = SZ_256M; - | ^~~~~~~ -drivers/ram/mediatek/ddr3-mt7629.c:740:30: error: 'SZ_512M' undeclared (first use in this function) - 740 | info->size = SZ_512M; - | ^~~~~~~ -drivers/ram/mediatek/ddr3-mt7629.c:743:30: error: 'SZ_1G' undeclared (first use in this function) - 743 | info->size = SZ_1G; - | ^~~~~ - -Include so SZ_* is defined. - -Reported-by: Tianling Shen -Signed-off-by: Daniel Golle ---- - drivers/ram/mediatek/ddr3-mt7629.c | 1 + - 1 file changed, 1 insertion(+) - ---- a/drivers/ram/mediatek/ddr3-mt7629.c -+++ b/drivers/ram/mediatek/ddr3-mt7629.c -@@ -14,6 +14,7 @@ - #include - #include - #include -+#include - - /* EMI */ - #define EMI_CONA 0x000 diff --git a/lede/package/boot/uboot-mediatek/patches/103-mt7988-enable-pstore.patch b/lede/package/boot/uboot-mediatek/patches/103-mt7988-enable-pstore.patch index a34dcddd71..747aa2e5da 100644 --- a/lede/package/boot/uboot-mediatek/patches/103-mt7988-enable-pstore.patch +++ b/lede/package/boot/uboot-mediatek/patches/103-mt7988-enable-pstore.patch @@ -1,6 +1,6 @@ --- a/arch/arm/dts/mt7988.dtsi +++ b/arch/arm/dts/mt7988.dtsi -@@ -61,6 +61,30 @@ +@@ -62,6 +62,30 @@ #clock-cells = <0>; }; diff --git a/lede/package/boot/uboot-mediatek/patches/104-configs-set-CONFIG_LMB_MAX_REGIONS-64-for-MT7988-boards.patch b/lede/package/boot/uboot-mediatek/patches/104-configs-set-CONFIG_LMB_MAX_REGIONS-64-for-MT7988-boards.patch deleted file mode 100644 index f047518852..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/104-configs-set-CONFIG_LMB_MAX_REGIONS-64-for-MT7988-boards.patch +++ /dev/null @@ -1,69 +0,0 @@ -From patchwork Mon Aug 21 19:38:23 2023 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Patchwork-Submitter: Daniel Golle -X-Patchwork-Id: 1823742 -X-Patchwork-Delegate: trini@ti.com -Return-Path: -X-Original-To: incoming@patchwork.ozlabs.org -Delivered-To: patchwork-incoming@legolas.ozlabs.org -Date: Mon, 21 Aug 2023 20:38:23 +0100 -From: Daniel Golle -To: Sam Shih , Weijie Gao , - Lorenzo Bianconi , u-boot@lists.denx.de -Subject: [PATCH] configs: set CONFIG_LMB_MAX_REGIONS=64 for MT7988 boards -Message-ID: - <568a8030acf9056266b5c96055cea54f810496c9.1692646620.git.daniel@makrotopia.org> -MIME-Version: 1.0 -Content-Disposition: inline -X-BeenThere: u-boot@lists.denx.de -X-Mailman-Version: 2.1.39 -Precedence: list -List-Id: U-Boot discussion -List-Unsubscribe: , - -List-Archive: -List-Post: -List-Help: -List-Subscribe: , - -Errors-To: u-boot-bounces@lists.denx.de -Sender: "U-Boot" - -Similar to MT7981 and MT7986 also MT7988 can have a high number of -reserved-memory regions used by the various hardware offloading -subsystems. - -Raise CONFIG_LMB_MAX_REGIONS to 64 to avoid errors when trying to boot -Linux with more then 6 reserved regions: - -ERROR: reserving fdt memory region failed (addr=4f700000 size=240000 flags=4) -ERROR: reserving fdt memory region failed (addr=15194000 size=1000 flags=4) -ERROR: reserving fdt memory region failed (addr=15294000 size=1000 flags=4) -ERROR: reserving fdt memory region failed (addr=15394000 size=1000 flags=4) -ERROR: Failed to allocate 0xb161 bytes below 0x80000000. -device tree - allocation error - -Fixes: bc4adc97cfb ("board: mediatek: add MT7988 reference boards") -Reported-by: Lorenzo Bianconi -Signed-off-by: Daniel Golle ---- - configs/mt7988_rfb_defconfig | 1 + - configs/mt7988_sd_rfb_defconfig | 1 + - 2 files changed, 2 insertions(+) - ---- a/configs/mt7988_rfb_defconfig -+++ b/configs/mt7988_rfb_defconfig -@@ -81,3 +81,4 @@ CONFIG_MTK_SPIM=y - CONFIG_LZO=y - CONFIG_HEXDUMP=y - # CONFIG_EFI_LOADER is not set -+CONFIG_LMB_MAX_REGIONS=64 ---- a/configs/mt7988_sd_rfb_defconfig -+++ b/configs/mt7988_sd_rfb_defconfig -@@ -69,3 +69,4 @@ CONFIG_MTK_SPIM=y - CONFIG_LZO=y - CONFIG_HEXDUMP=y - # CONFIG_EFI_LOADER is not set -+CONFIG_LMB_MAX_REGIONS=64 diff --git a/lede/package/boot/uboot-mediatek/patches/105-configs-add-usefull-stuff-to-mt7988-rfb.patch b/lede/package/boot/uboot-mediatek/patches/105-configs-add-usefull-stuff-to-mt7988-rfb.patch index c7dcf9a1ba..535af4fa09 100644 --- a/lede/package/boot/uboot-mediatek/patches/105-configs-add-usefull-stuff-to-mt7988-rfb.patch +++ b/lede/package/boot/uboot-mediatek/patches/105-configs-add-usefull-stuff-to-mt7988-rfb.patch @@ -1,8 +1,8 @@ --- a/configs/mt7988_sd_rfb_defconfig +++ b/configs/mt7988_sd_rfb_defconfig -@@ -12,6 +12,24 @@ CONFIG_DEBUG_UART_BASE=0x11000000 +@@ -11,6 +11,24 @@ CONFIG_DEBUG_UART_BASE=0x11000000 CONFIG_DEBUG_UART_CLOCK=40000000 - CONFIG_SYS_LOAD_ADDR=0x50000000 + CONFIG_SYS_LOAD_ADDR=0x46000000 CONFIG_DEBUG_UART=y +CONFIG_OF_LIBFDT_OVERLAY=y +CONFIG_SMBIOS_PRODUCT_NAME="" @@ -157,10 +157,11 @@ CONFIG_MTD=y --- a/configs/mt7988_rfb_defconfig +++ b/configs/mt7988_rfb_defconfig -@@ -12,6 +12,24 @@ CONFIG_DEBUG_UART_BASE=0x11000000 +@@ -11,7 +11,24 @@ CONFIG_DEBUG_UART_BASE=0x11000000 CONFIG_DEBUG_UART_CLOCK=40000000 - CONFIG_SYS_LOAD_ADDR=0x50000000 + CONFIG_SYS_LOAD_ADDR=0x46000000 CONFIG_DEBUG_UART=y +-# CONFIG_AUTOBOOT is not set +CONFIG_OF_LIBFDT_OVERLAY=y +CONFIG_SMBIOS_PRODUCT_NAME="" +CONFIG_CFB_CONSOLE_ANSI=y @@ -179,10 +180,10 @@ +CONFIG_NAND_BOOT=y +CONFIG_BOOTSTD_DEFAULTS=y +CONFIG_BOOTSTD_FULL=y - # CONFIG_AUTOBOOT is not set CONFIG_DEFAULT_FDT_FILE="mt7988-rfb" CONFIG_LOGLEVEL=7 -@@ -22,15 +40,118 @@ CONFIG_SYS_PBSIZE=1049 + CONFIG_LOG=y +@@ -22,15 +39,120 @@ CONFIG_SYS_PBSIZE=1049 # CONFIG_BOOTM_PLAN9 is not set # CONFIG_BOOTM_RTEMS is not set # CONFIG_BOOTM_VXWORKS is not set @@ -293,16 +294,18 @@ +CONFIG_USB_XHCI_MTK=y +CONFIG_USB_STORAGE=y +CONFIG_OF_EMBED=y ++CONFIG_OF_SYSTEM_SETUP=y +CONFIG_ENV_OVERWRITE=y -+CONFIG_ENV_IS_IN_MMC=y -+CONFIG_ENV_OFFSET=0x400000 -+CONFIG_ENV_OFFSET_REDUND=0x440000 -+CONFIG_ENV_SIZE=0x40000 -+CONFIG_ENV_SIZE_REDUND=0x40000 ++CONFIG_ENV_IS_IN_UBI=y ++CONFIG_ENV_UBI_PART="ubi" ++CONFIG_ENV_SIZE=0x1f000 ++CONFIG_ENV_SIZE_REDUND=0x1f000 ++CONFIG_ENV_UBI_VOLUME="ubootenv" ++CONFIG_ENV_UBI_VOLUME_REDUND="ubootenv2" CONFIG_DOS_PARTITION=y CONFIG_EFI_PARTITION=y CONFIG_PARTITION_TYPE_GUID=y -@@ -46,6 +167,9 @@ CONFIG_PROT_TCP=y +@@ -46,6 +168,9 @@ CONFIG_PROT_TCP=y CONFIG_REGMAP=y CONFIG_SYSCON=y CONFIG_CLK=y @@ -312,3 +315,29 @@ CONFIG_MMC_HS200_SUPPORT=y CONFIG_MMC_MTK=y CONFIG_MTD=y +--- a/arch/arm/dts/mt7988-rfb.dts ++++ b/arch/arm/dts/mt7988-rfb.dts +@@ -144,6 +144,23 @@ + compatible = "spi-nand"; + reg = <0>; + spi-max-frequency = <52000000>; ++ ++ partitions { ++ compatible = "fixed-partitions"; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ partition@0 { ++ label = "bl2"; ++ reg = <0x0 0x200000>; ++ }; ++ ++ partition@200000 { ++ label = "ubi"; ++ reg = <0x200000 0x7e00000>; ++ compatible = "linux,ubi"; ++ }; ++ }; + }; + }; + diff --git a/lede/package/boot/uboot-mediatek/patches/107-configs-add-useful-options-to-mt7981-rfb.patch b/lede/package/boot/uboot-mediatek/patches/107-configs-add-useful-options-to-mt7981-rfb.patch index f5234ea085..bd4c6b55f0 100644 --- a/lede/package/boot/uboot-mediatek/patches/107-configs-add-useful-options-to-mt7981-rfb.patch +++ b/lede/package/boot/uboot-mediatek/patches/107-configs-add-useful-options-to-mt7981-rfb.patch @@ -1,6 +1,6 @@ --- a/configs/mt7981_emmc_rfb_defconfig +++ b/configs/mt7981_emmc_rfb_defconfig -@@ -14,7 +14,22 @@ CONFIG_DEBUG_UART_BASE=0x11002000 +@@ -13,7 +13,22 @@ CONFIG_DEBUG_UART_BASE=0x11002000 CONFIG_DEBUG_UART_CLOCK=40000000 CONFIG_SYS_LOAD_ADDR=0x46000000 CONFIG_DEBUG_UART=y @@ -87,7 +87,7 @@ CONFIG_CLK=y --- a/configs/mt7981_rfb_defconfig +++ b/configs/mt7981_rfb_defconfig -@@ -12,7 +12,23 @@ CONFIG_DEBUG_UART_BASE=0x11002000 +@@ -11,7 +11,23 @@ CONFIG_DEBUG_UART_BASE=0x11002000 CONFIG_DEBUG_UART_CLOCK=40000000 CONFIG_SYS_LOAD_ADDR=0x46000000 CONFIG_DEBUG_UART=y @@ -191,7 +191,7 @@ CONFIG_MTD_SPI_NAND=y --- a/configs/mt7981_sd_rfb_defconfig +++ b/configs/mt7981_sd_rfb_defconfig -@@ -14,7 +14,22 @@ CONFIG_DEBUG_UART_BASE=0x11002000 +@@ -13,7 +13,22 @@ CONFIG_DEBUG_UART_BASE=0x11002000 CONFIG_DEBUG_UART_CLOCK=40000000 CONFIG_SYS_LOAD_ADDR=0x46000000 CONFIG_DEBUG_UART=y diff --git a/lede/package/boot/uboot-mediatek/patches/110-no-kwbimage.patch b/lede/package/boot/uboot-mediatek/patches/110-no-kwbimage.patch index 2d61d6f4a7..3bf033f814 100644 --- a/lede/package/boot/uboot-mediatek/patches/110-no-kwbimage.patch +++ b/lede/package/boot/uboot-mediatek/patches/110-no-kwbimage.patch @@ -5,6 +5,6 @@ imx8image.o \ imx8mimage.o \ - kwbimage.o \ - lib/md5.o \ + generated/lib/md5.o \ lpc32xximage.o \ mxsimage.o \ diff --git a/lede/package/boot/uboot-mediatek/patches/120-use-xz-instead-of-lzma.patch b/lede/package/boot/uboot-mediatek/patches/120-use-xz-instead-of-lzma.patch index 411f99467b..9a9224963d 100644 --- a/lede/package/boot/uboot-mediatek/patches/120-use-xz-instead-of-lzma.patch +++ b/lede/package/boot/uboot-mediatek/patches/120-use-xz-instead-of-lzma.patch @@ -1,6 +1,6 @@ --- a/Makefile +++ b/Makefile -@@ -1070,7 +1070,7 @@ quiet_cmd_pad_cat = CAT $@ +@@ -1083,7 +1083,7 @@ quiet_cmd_pad_cat = CAT $@ cmd_pad_cat = $(cmd_objcopy) && $(append) || { rm -f $@; false; } quiet_cmd_lzma = LZMA $@ diff --git a/lede/package/boot/uboot-mediatek/patches/130-fix-mkimage-host-build.patch b/lede/package/boot/uboot-mediatek/patches/130-fix-mkimage-host-build.patch index cd65c1321f..86a424e8b7 100644 --- a/lede/package/boot/uboot-mediatek/patches/130-fix-mkimage-host-build.patch +++ b/lede/package/boot/uboot-mediatek/patches/130-fix-mkimage-host-build.patch @@ -1,6 +1,6 @@ --- a/tools/image-host.c +++ b/tools/image-host.c -@@ -1125,6 +1125,7 @@ static int fit_config_add_verification_d +@@ -1137,6 +1137,7 @@ static int fit_config_add_verification_d * 2) get public key (X509_get_pubkey) * 3) provide der format (d2i_RSAPublicKey) */ @@ -8,7 +8,7 @@ static int read_pub_key(const char *keydir, const void *name, unsigned char **pubkey, int *pubkey_len) { -@@ -1178,6 +1179,13 @@ err_cert: +@@ -1190,6 +1191,13 @@ err_cert: fclose(f); return ret; } diff --git a/lede/package/boot/uboot-mediatek/patches/131-spi-mtk_spim-prevent-global-pll-clock-override.patch b/lede/package/boot/uboot-mediatek/patches/131-spi-mtk_spim-prevent-global-pll-clock-override.patch deleted file mode 100644 index c4e0fff921..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/131-spi-mtk_spim-prevent-global-pll-clock-override.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 41f225dae30ea6ddcff10f120a9e732f994d3a07 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Nicol=C3=B2=20Veronese?= -Date: Tue, 3 Oct 2023 23:46:52 +0200 -Subject: [PATCH] spi: mtk_spim: prevent global pll clock override -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -With commit 793e6230118032a099ec42a1ea67f434721edcc0 - a new system to calculate the SPI clocks has been added. - -Unfortunately, the do_div macro overrides the global - priv->pll_clk_rate field. This will cause to have a reduced - clock rate on each subsequent SPI call. - -Signed-off-by: Valerio 'ftp21' Mancini -Signed-off-by: Nicolò Veronese ---- - drivers/spi/mtk_spim.c | 7 ++++--- - 1 file changed, 4 insertions(+), 3 deletions(-) - ---- a/drivers/spi/mtk_spim.c -+++ b/drivers/spi/mtk_spim.c -@@ -409,7 +409,7 @@ static int mtk_spim_transfer_wait(struct - { - struct udevice *bus = dev_get_parent(slave->dev); - struct mtk_spim_priv *priv = dev_get_priv(bus); -- u32 sck_l, sck_h, clk_count, reg; -+ u32 pll_clk, sck_l, sck_h, clk_count, reg; - ulong us = 1; - int ret = 0; - -@@ -418,11 +418,12 @@ static int mtk_spim_transfer_wait(struct - else - clk_count = op->data.nbytes; - -+ pll_clk = priv->pll_clk_rate; - sck_l = readl(priv->base + SPI_CFG2_REG) >> SPI_CFG2_SCK_LOW_OFFSET; - sck_h = readl(priv->base + SPI_CFG2_REG) & SPI_CFG2_SCK_HIGH_MASK; -- do_div(priv->pll_clk_rate, sck_l + sck_h + 2); -+ do_div(pll_clk, sck_l + sck_h + 2); - -- us = CLK_TO_US(priv->pll_clk_rate, clk_count * 8); -+ us = CLK_TO_US(pll_clk, clk_count * 8); - us += 1000 * 1000; /* 1s tolerance */ - - if (us > UINT_MAX) diff --git a/lede/package/boot/uboot-mediatek/patches/160-net-phy-add-support-for-Airoha-ethernet-PHY-driver.patch b/lede/package/boot/uboot-mediatek/patches/160-net-phy-add-support-for-Airoha-ethernet-PHY-driver.patch new file mode 100644 index 0000000000..f8e8659952 --- /dev/null +++ b/lede/package/boot/uboot-mediatek/patches/160-net-phy-add-support-for-Airoha-ethernet-PHY-driver.patch @@ -0,0 +1,1929 @@ +From 70157a6148ad47734f1dc646b4157ca83cc5df9f Mon Sep 17 00:00:00 2001 +From: Weijie Gao +Date: Thu, 13 Jul 2023 16:34:48 +0800 +Subject: [PATCH] net: phy: add support for Airoha ethernet PHY driver + +This patch adds support for Airoha ethernet PHY driver. + +If GMAC2 of your board connects to Airoha EN8801S, please change the eth +node as follow: + +ð { + status = "okay"; + mediatek,gmac-id = <1>; + mediatek,sgmiisys = <&sgmiisys1>; + phy-mode = "sgmii"; + phy-handle = <&phy5>; + + phy5: eth-phy@5 { + reg = <24>; + }; +}; + +If GMAC2 of your board connects to Airoha EN8811H, please change the eth +node as follow: + +ð { + status = "okay"; + mediatek,gmac-id = <1>; + mediatek,sgmiisys = <&sgmiisys1>; + phy-mode = "2500base-x"; + phy-handle = <&phy5>; + + fixed-link { + speed = <2500>; + full-duplex; + }; + + phy5: eth-phy@5 { + reg = <15>; + }; +}; + +Signed-off-by: Weijie Gao +--- + .../drivers/net/phy/Kconfig | 15 + + .../drivers/net/phy/Makefile | 2 + + .../drivers/net/phy/air_en8801s.c | 633 ++ + .../drivers/net/phy/air_en8801s.h | 267 + + .../drivers/net/phy/air_en8811h.c | 649 ++ + .../drivers/net/phy/air_en8811h.h | 160 + + .../drivers/net/phy/air_en8811h_fw.h | 9227 +++++++++++++++++ + 7 files changed, 10953 insertions(+) + create mode 100644 drivers/net/phy/air_en8801s.c + create mode 100644 drivers/net/phy/air_en8801s.h + create mode 100644 drivers/net/phy/air_en8811h.c + create mode 100644 drivers/net/phy/air_en8811h.h + create mode 100644 drivers/net/phy/air_en8811h_fw.h + +--- a/drivers/net/phy/Kconfig ++++ b/drivers/net/phy/Kconfig +@@ -77,6 +77,37 @@ config PHY_ADIN + help + Add support for configuring RGMII on Analog Devices ADIN PHYs. + ++menuconfig PHY_AIROHA ++ bool "Airoha Ethernet PHYs support" ++ ++config PHY_AIROHA_EN8801S ++ bool "Airoha Ethernet EN8801S support" ++ depends on PHY_AIROHA ++ help ++ AIROHA EN8801S supported. ++ ++config PHY_AIROHA_EN8811H ++ bool "Airoha Ethernet EN8811H support" ++ depends on PHY_AIROHA ++ help ++ AIROHA EN8811H supported. ++ ++choice ++ prompt "Location of the Airoha PHY firmware" ++ default PHY_AIROHA_FW_IN_UBI ++ depends on PHY_AIROHA_EN8811H ++ ++config PHY_AIROHA_FW_IN_MMC ++ bool "Airoha firmware in MMC boot1 partition" ++ ++config PHY_AIROHA_FW_IN_UBI ++ bool "Airoha firmware in UBI volume en8811h-fw on NAND flash" ++ ++config PHY_AIROHA_FW_IN_MTD ++ bool "Airoha firmware in MTD partition on raw flash" ++ ++endchoice ++ + menuconfig PHY_AQUANTIA + bool "Aquantia Ethernet PHYs support" + select PHY_GIGE +--- a/drivers/net/phy/Makefile ++++ b/drivers/net/phy/Makefile +@@ -11,6 +11,8 @@ obj-$(CONFIG_MV88E6352_SWITCH) += mv88e6 + obj-$(CONFIG_PHYLIB) += phy.o + obj-$(CONFIG_PHYLIB_10G) += generic_10g.o + obj-$(CONFIG_PHY_ADIN) += adin.o ++obj-$(CONFIG_PHY_AIROHA_EN8801S) += air_en8801s.o ++obj-$(CONFIG_PHY_AIROHA_EN8811H) += air_en8811h.o + obj-$(CONFIG_PHY_AQUANTIA) += aquantia.o + obj-$(CONFIG_PHY_ATHEROS) += atheros.o + obj-$(CONFIG_PHY_BROADCOM) += broadcom.o +--- /dev/null ++++ b/drivers/net/phy/air_en8801s.c +@@ -0,0 +1,633 @@ ++// SPDX-License-Identifier: GPL-2.0 ++/************************************************* ++ * FILE NAME: air_en8801s.c ++ * PURPOSE: ++ * EN8801S PHY Driver for Uboot ++ * NOTES: ++ * ++ * Copyright (C) 2023 Airoha Technology Corp. ++ *************************************************/ ++ ++/* INCLUDE FILE DECLARATIONS ++ */ ++#include ++#include ++#include ++#include ++#include "air_en8801s.h" ++ ++#if AIR_UBOOT_REVISION > 0x202004 ++#include ++#endif ++ ++static struct phy_device *s_phydev = 0; ++/****************************************************** ++ * The following led_cfg example is for reference only. ++ * LED5 1000M/LINK/ACT (GPIO5) <-> BASE_T_LED0, ++ * LED6 10/100M/LINK/ACT (GPIO9) <-> BASE_T_LED1, ++ * LED4 100M/LINK/ACT (GPIO8) <-> BASE_T_LED2, ++ ******************************************************/ ++/* User-defined.B */ ++#define AIR_LED_SUPPORT ++#ifdef AIR_LED_SUPPORT ++static const AIR_BASE_T_LED_CFG_T led_cfg[4] = ++{ ++ /* ++ * LED Enable, GPIO, LED Polarity, LED ON, LED Blink ++ */ ++ {LED_ENABLE, 5, AIR_ACTIVE_LOW, BASE_T_LED0_ON_CFG, BASE_T_LED0_BLK_CFG}, /* BASE-T LED0 */ ++ {LED_ENABLE, 9, AIR_ACTIVE_LOW, BASE_T_LED1_ON_CFG, BASE_T_LED1_BLK_CFG}, /* BASE-T LED1 */ ++ {LED_ENABLE, 8, AIR_ACTIVE_LOW, BASE_T_LED2_ON_CFG, BASE_T_LED2_BLK_CFG}, /* BASE-T LED2 */ ++ {LED_DISABLE, 1, AIR_ACTIVE_LOW, BASE_T_LED3_ON_CFG, BASE_T_LED3_BLK_CFG} /* BASE-T LED3 */ ++}; ++static const u16 led_dur = UNIT_LED_BLINK_DURATION << AIR_LED_BLK_DUR_64M; ++#endif ++/* User-defined.E */ ++/************************************************************************ ++ * F U N C T I O N S ++ ************************************************************************/ ++/* Airoha MII read function */ ++static int airoha_cl22_read(struct mii_dev *bus, int phy_addr, int phy_register) ++{ ++ int read_data = bus->read(bus, phy_addr, MDIO_DEVAD_NONE, phy_register); ++ ++ if (read_data < 0) ++ return -EIO; ++ return read_data; ++} ++ ++/* Airoha MII write function */ ++static int airoha_cl22_write(struct mii_dev *bus, int phy_addr, int phy_register, int write_data) ++{ ++ int ret = bus->write(bus, phy_addr, MDIO_DEVAD_NONE, phy_register, write_data); ++ ++ return ret; ++} ++ ++static int airoha_cl45_write(struct phy_device *phydev, int devad, int reg, int val) ++{ ++ int ret = 0; ++ ++ ret = phy_write(phydev, MDIO_DEVAD_NONE, MII_MMD_ACC_CTL_REG, devad); ++ AIR_RTN_ERR(ret); ++ ret = phy_write(phydev, MDIO_DEVAD_NONE, MII_MMD_ADDR_DATA_REG, reg); ++ AIR_RTN_ERR(ret); ++ ret = phy_write(phydev, MDIO_DEVAD_NONE, MII_MMD_ACC_CTL_REG, MMD_OP_MODE_DATA | devad); ++ AIR_RTN_ERR(ret); ++ ret = phy_write(phydev, MDIO_DEVAD_NONE, MII_MMD_ADDR_DATA_REG, val); ++ AIR_RTN_ERR(ret); ++ return ret; ++} ++ ++static int airoha_cl45_read(struct phy_device *phydev, int devad, int reg) ++{ ++ int read_data, ret; ++ ++ ret = phy_write(phydev, MDIO_DEVAD_NONE, MII_MMD_ACC_CTL_REG, devad); ++ AIR_RTN_ERR(ret); ++ ret = phy_write(phydev, MDIO_DEVAD_NONE, MII_MMD_ADDR_DATA_REG, reg); ++ AIR_RTN_ERR(ret); ++ ret = phy_write(phydev, MDIO_DEVAD_NONE, MII_MMD_ACC_CTL_REG, MMD_OP_MODE_DATA | devad); ++ AIR_RTN_ERR(ret); ++ read_data = phy_read(phydev, MDIO_DEVAD_NONE, MII_MMD_ADDR_DATA_REG); ++ if (read_data < 0) ++ return -EIO; ++ return read_data; ++} ++ ++/* EN8801 PBUS write function */ ++int airoha_pbus_write(struct mii_dev *bus, int pbus_addr, int pbus_reg, unsigned long pbus_data) ++{ ++ int ret = 0; ++ ++ ret = airoha_cl22_write(bus, pbus_addr, 0x1F, (pbus_reg >> 6)); ++ AIR_RTN_ERR(ret); ++ ret = airoha_cl22_write(bus, pbus_addr, ((pbus_reg >> 2) & 0xf), (pbus_data & 0xFFFF)); ++ AIR_RTN_ERR(ret); ++ ret = airoha_cl22_write(bus, pbus_addr, 0x10, (pbus_data >> 16)); ++ AIR_RTN_ERR(ret); ++ return ret; ++} ++ ++/* EN8801 PBUS read function */ ++unsigned long airoha_pbus_read(struct mii_dev *bus, int pbus_addr, int pbus_reg) ++{ ++ unsigned long pbus_data; ++ unsigned int pbus_data_low, pbus_data_high; ++ ++ airoha_cl22_write(bus, pbus_addr, 0x1F, (pbus_reg >> 6)); ++ pbus_data_low = airoha_cl22_read(bus, pbus_addr, ((pbus_reg >> 2) & 0xf)); ++ pbus_data_high = airoha_cl22_read(bus, pbus_addr, 0x10); ++ pbus_data = (pbus_data_high << 16) + pbus_data_low; ++ return pbus_data; ++} ++ ++/* Airoha Token Ring Write function */ ++static int airoha_tr_reg_write(struct phy_device *phydev, unsigned long tr_address, unsigned long tr_data) ++{ ++ int ret; ++ ++ ret = phy_write(phydev, MDIO_DEVAD_NONE, 0x1F, 0x52b5); /* page select */ ++ AIR_RTN_ERR(ret); ++ ret = phy_write(phydev, MDIO_DEVAD_NONE, 0x11, (int)(tr_data & 0xffff)); ++ AIR_RTN_ERR(ret); ++ ret = phy_write(phydev, MDIO_DEVAD_NONE, 0x12, (int)(tr_data >> 16)); ++ AIR_RTN_ERR(ret); ++ ret = phy_write(phydev, MDIO_DEVAD_NONE, 0x10, (int)(tr_address | TrReg_WR)); ++ AIR_RTN_ERR(ret); ++ ret = phy_write(phydev, MDIO_DEVAD_NONE, 0x1F, 0x0); /* page resetore */ ++ AIR_RTN_ERR(ret); ++ return ret; ++} ++ ++int airoha_phy_process(void) ++{ ++ int ret = 0, pbus_addr = EN8801S_PBUS_PHY_ID; ++ unsigned long pbus_data; ++ struct mii_dev *mbus; ++ ++ mbus = s_phydev->bus; ++ pbus_data = airoha_pbus_read(mbus, pbus_addr, 0x19e0); ++ pbus_data |= BIT(0); ++ ret = airoha_pbus_write(mbus, pbus_addr, 0x19e0, pbus_data); ++ if(ret) ++ printf("error: airoha_pbus_write fail ret: %d\n", ret); ++ pbus_data = airoha_pbus_read(mbus, pbus_addr, 0x19e0); ++ pbus_data &= ~BIT(0); ++ ret = airoha_pbus_write(mbus, pbus_addr, 0x19e0, pbus_data); ++ if(ret) ++ printf("error: airoha_pbus_write fail ret: %d\n", ret); ++ ++ if(ret) ++ printf("error: FCM regs reset fail, ret: %d\n", ret); ++ else ++ debug("FCM regs reset successful\n"); ++ return ret; ++} ++ ++#ifdef AIR_LED_SUPPORT ++static int airoha_led_set_usr_def(struct phy_device *phydev, u8 entity, int polar, ++ u16 on_evt, u16 blk_evt) ++{ ++ int ret = 0; ++ ++ if (AIR_ACTIVE_HIGH == polar) { ++ on_evt |= LED_ON_POL; ++ } else { ++ on_evt &= ~LED_ON_POL; ++ } ++ ret = airoha_cl45_write(phydev, 0x1f, LED_ON_CTRL(entity), on_evt | LED_ON_EN); ++ AIR_RTN_ERR(ret); ++ ret = airoha_cl45_write(phydev, 0x1f, LED_BLK_CTRL(entity), blk_evt); ++ AIR_RTN_ERR(ret); ++ return 0; ++} ++ ++static int airoha_led_set_mode(struct phy_device *phydev, u8 mode) ++{ ++ u16 cl45_data; ++ int err = 0; ++ ++ cl45_data = airoha_cl45_read(phydev, 0x1f, LED_BCR); ++ switch (mode) { ++ case AIR_LED_MODE_DISABLE: ++ cl45_data &= ~LED_BCR_EXT_CTRL; ++ cl45_data &= ~LED_BCR_MODE_MASK; ++ cl45_data |= LED_BCR_MODE_DISABLE; ++ break; ++ case AIR_LED_MODE_USER_DEFINE: ++ cl45_data |= LED_BCR_EXT_CTRL; ++ cl45_data |= LED_BCR_CLK_EN; ++ break; ++ default: ++ printf("LED mode%d is not supported!\n", mode); ++ return -EINVAL; ++ } ++ err = airoha_cl45_write(phydev, 0x1f, LED_BCR, cl45_data); ++ AIR_RTN_ERR(err); ++ return 0; ++} ++ ++static int airoha_led_set_state(struct phy_device *phydev, u8 entity, u8 state) ++{ ++ u16 cl45_data; ++ int err; ++ ++ cl45_data = airoha_cl45_read(phydev, 0x1f, LED_ON_CTRL(entity)); ++ if (LED_ENABLE == state) { ++ cl45_data |= LED_ON_EN; ++ } else { ++ cl45_data &= ~LED_ON_EN; ++ } ++ ++ err = airoha_cl45_write(phydev, 0x1f, LED_ON_CTRL(entity), cl45_data); ++ AIR_RTN_ERR(err); ++ return 0; ++} ++ ++static int en8801s_led_init(struct phy_device *phydev) ++{ ++ ++ unsigned long led_gpio = 0, reg_value = 0; ++ int ret = 0, led_id; ++ struct mii_dev *mbus = phydev->bus; ++ int gpio_led_rg[3] = {0x1870, 0x1874, 0x1878}; ++ u16 cl45_data = led_dur; ++ ++ ret = airoha_cl45_write(phydev, 0x1f, LED_BLK_DUR, cl45_data); ++ AIR_RTN_ERR(ret); ++ cl45_data >>= 1; ++ ret = airoha_cl45_write(phydev, 0x1f, LED_ON_DUR, cl45_data); ++ AIR_RTN_ERR(ret); ++ ret = airoha_led_set_mode(phydev, AIR_LED_MODE_USER_DEFINE); ++ if (ret != 0) { ++ printf("LED fail to set mode, ret %d !\n", ret); ++ return ret; ++ } ++ for(led_id = 0; led_id < EN8801S_LED_COUNT; led_id++) { ++ reg_value = 0; ++ ret = airoha_led_set_state(phydev, led_id, led_cfg[led_id].en); ++ if (ret != 0) { ++ printf("LED fail to set state, ret %d !\n", ret); ++ return ret; ++ } ++ if (LED_ENABLE == led_cfg[led_id].en) { ++ if ( (led_cfg[led_id].gpio < 0) || led_cfg[led_id].gpio > 9) { ++ printf("GPIO%d is out of range!! GPIO number is 0~9.\n", led_cfg[led_id].gpio); ++ return -EIO; ++ } ++ led_gpio |= BIT(led_cfg[led_id].gpio); ++ reg_value = airoha_pbus_read(mbus, EN8801S_PBUS_PHY_ID, gpio_led_rg[led_cfg[led_id].gpio / 4]); ++ LED_SET_GPIO_SEL(led_cfg[led_id].gpio, led_id, reg_value); ++ debug("[Airoha] gpio%d, reg_value 0x%lx\n", led_cfg[led_id].gpio, reg_value); ++ ret = airoha_pbus_write(mbus, EN8801S_PBUS_PHY_ID, gpio_led_rg[led_cfg[led_id].gpio / 4], reg_value); ++ AIR_RTN_ERR(ret); ++ ret = airoha_led_set_usr_def(phydev, led_id, led_cfg[led_id].pol, led_cfg[led_id].on_cfg, led_cfg[led_id].blk_cfg); ++ if (ret != 0) { ++ printf("LED fail to set usr def, ret %d !\n", ret); ++ return ret; ++ } ++ } ++ } ++ reg_value = (airoha_pbus_read(mbus, EN8801S_PBUS_PHY_ID, 0x1880) & ~led_gpio); ++ ret = airoha_pbus_write(mbus, EN8801S_PBUS_PHY_ID, 0x1880, reg_value); ++ AIR_RTN_ERR(ret); ++ ret = airoha_pbus_write(mbus, EN8801S_PBUS_PHY_ID, 0x186c, led_gpio); ++ AIR_RTN_ERR(ret); ++ ++ printf("LED initialize OK !\n"); ++ return 0; ++} ++#endif /* AIR_LED_SUPPORT */ ++ ++static int en8801s_config(struct phy_device *phydev) ++{ ++ int reg_value = 0, ret = 0; ++ struct mii_dev *mbus = phydev->bus; ++ int retry, pbus_addr = EN8801S_PBUS_DEFAULT_ID; ++ int phy_addr = EN8801S_MDIO_PHY_ID; ++ unsigned long pbus_data = 0; ++ gephy_all_REG_LpiReg1Ch GPHY_RG_LPI_1C; ++ gephy_all_REG_dev1Eh_reg324h GPHY_RG_1E_324; ++ gephy_all_REG_dev1Eh_reg012h GPHY_RG_1E_012; ++ gephy_all_REG_dev1Eh_reg017h GPHY_RG_1E_017; ++ ++ s_phydev = phydev; ++ retry = MAX_OUI_CHECK; ++ while (1) { ++ /* PHY OUI */ ++ pbus_data = airoha_pbus_read(mbus, pbus_addr, EN8801S_RG_ETHER_PHY_OUI); ++ if (EN8801S_PBUS_OUI == pbus_data) { ++ printf("PBUS addr 0x%x: Start initialized.\n", pbus_addr); ++ ret = airoha_pbus_write(mbus, pbus_addr, EN8801S_RG_BUCK_CTL, 0x03); ++ AIR_RTN_ERR(ret); ++ break; ++ } else ++ pbus_addr = EN8801S_PBUS_PHY_ID; ++ ++ if (0 == --retry) { ++ printf("EN8801S Probe fail !\n"); ++ return 0; ++ } ++ } ++ ++ /* SMI ADDR */ ++ pbus_data = airoha_pbus_read(mbus, pbus_addr, EN8801S_RG_SMI_ADDR); ++ pbus_data = (pbus_data & 0xffff0000) | (unsigned long)(pbus_addr << 8) | (unsigned long)(EN8801S_MDIO_DEFAULT_ID); ++ ret = airoha_pbus_write(mbus, pbus_addr, EN8801S_RG_SMI_ADDR, pbus_data); ++ AIR_RTN_ERR(ret); ++ mdelay(10); ++ ++ pbus_data = (airoha_pbus_read(mbus, pbus_addr, EN8801S_RG_LTR_CTL) & (~0x3)) | BIT(2) ; ++ ret = airoha_pbus_write(mbus, pbus_addr, EN8801S_RG_LTR_CTL, pbus_data); ++ AIR_RTN_ERR(ret); ++ mdelay(500); ++ pbus_data = (pbus_data & ~BIT(2)) | EN8801S_RX_POLARITY_NORMAL | EN8801S_TX_POLARITY_NORMAL; ++ ret = airoha_pbus_write(mbus, pbus_addr, EN8801S_RG_LTR_CTL, pbus_data); ++ AIR_RTN_ERR(ret); ++ mdelay(500); ++ /* SMI ADDR */ ++ pbus_data = airoha_pbus_read(mbus, pbus_addr, EN8801S_RG_SMI_ADDR); ++ pbus_data = (pbus_data & 0xffff0000) | (unsigned long)(EN8801S_PBUS_PHY_ID << 8) | (unsigned long)(EN8801S_MDIO_PHY_ID); ++ ret = airoha_pbus_write(mbus, pbus_addr, EN8801S_RG_SMI_ADDR, pbus_data); ++ pbus_addr = EN8801S_PBUS_PHY_ID; ++ AIR_RTN_ERR(ret); ++ mdelay(10); ++ ++ /* Optimze 10M IoT */ ++ pbus_data = airoha_pbus_read(mbus, pbus_addr, 0x1690); ++ pbus_data |= (1 << 31); ++ ret = airoha_pbus_write(mbus, pbus_addr, 0x1690, pbus_data); ++ AIR_RTN_ERR(ret); ++ /* set SGMII Base Page */ ++ ret = airoha_pbus_write(mbus, pbus_addr, 0x0600, 0x0c000c00); ++ AIR_RTN_ERR(ret); ++ ret = airoha_pbus_write(mbus, pbus_addr, 0x10, 0xD801); ++ AIR_RTN_ERR(ret); ++ ret = airoha_pbus_write(mbus, pbus_addr, 0x0, 0x9140); ++ AIR_RTN_ERR(ret); ++ ret = airoha_pbus_write(mbus, pbus_addr, 0x0A14, 0x0003); ++ AIR_RTN_ERR(ret); ++ ret = airoha_pbus_write(mbus, pbus_addr, 0x0600, 0x0c000c00); ++ AIR_RTN_ERR(ret); ++ /* Set FCM control */ ++ ret = airoha_pbus_write(mbus, pbus_addr, 0x1404, 0x004b); ++ AIR_RTN_ERR(ret); ++ ret = airoha_pbus_write(mbus, pbus_addr, 0x140c, 0x0007); ++ AIR_RTN_ERR(ret); ++ ++ ret = airoha_pbus_write(mbus, pbus_addr, 0x142c, 0x05050505); ++ AIR_RTN_ERR(ret); ++ pbus_data = airoha_pbus_read(mbus, pbus_addr, 0x1440); ++ ret = airoha_pbus_write(mbus, pbus_addr, 0x1440, pbus_data & ~BIT(11)); ++ AIR_RTN_ERR(ret); ++ ++ pbus_data = airoha_pbus_read(mbus, pbus_addr, 0x1408); ++ ret = airoha_pbus_write(mbus, pbus_addr, 0x1408, pbus_data | BIT(5)); ++ AIR_RTN_ERR(ret); ++ ++ /* Set GPHY Perfomance*/ ++ /* Token Ring */ ++ ret = airoha_tr_reg_write(phydev, RgAddr_R1000DEC_15h, 0x0055A0); ++ AIR_RTN_ERR(ret); ++ ret = airoha_tr_reg_write(phydev, RgAddr_R1000DEC_17h, 0x07FF3F); ++ AIR_RTN_ERR(ret); ++ ret = airoha_tr_reg_write(phydev, RgAddr_PMA_00h, 0x00001E); ++ AIR_RTN_ERR(ret); ++ ret = airoha_tr_reg_write(phydev, RgAddr_PMA_01h, 0x6FB90A); ++ AIR_RTN_ERR(ret); ++ ret = airoha_tr_reg_write(phydev, RgAddr_PMA_17h, 0x060671); ++ AIR_RTN_ERR(ret); ++ ret = airoha_tr_reg_write(phydev, RgAddr_PMA_18h, 0x0E2F00); ++ AIR_RTN_ERR(ret); ++ ret = airoha_tr_reg_write(phydev, RgAddr_TR_26h, 0x444444); ++ AIR_RTN_ERR(ret); ++ ret = airoha_tr_reg_write(phydev, RgAddr_DSPF_03h, 0x000000); ++ AIR_RTN_ERR(ret); ++ ret = airoha_tr_reg_write(phydev, RgAddr_DSPF_06h, 0x2EBAEF); ++ AIR_RTN_ERR(ret); ++ ret = airoha_tr_reg_write(phydev, RgAddr_DSPF_08h, 0x00000B); ++ AIR_RTN_ERR(ret); ++ ret = airoha_tr_reg_write(phydev, RgAddr_DSPF_0Ch, 0x00504D); ++ AIR_RTN_ERR(ret); ++ ret = airoha_tr_reg_write(phydev, RgAddr_DSPF_0Dh, 0x02314F); ++ AIR_RTN_ERR(ret); ++ ret = airoha_tr_reg_write(phydev, RgAddr_DSPF_0Fh, 0x003028); ++ AIR_RTN_ERR(ret); ++ ret = airoha_tr_reg_write(phydev, RgAddr_DSPF_10h, 0x005010); ++ AIR_RTN_ERR(ret); ++ ret = airoha_tr_reg_write(phydev, RgAddr_DSPF_11h, 0x040001); ++ AIR_RTN_ERR(ret); ++ ret = airoha_tr_reg_write(phydev, RgAddr_DSPF_13h, 0x018670); ++ AIR_RTN_ERR(ret); ++ ret = airoha_tr_reg_write(phydev, RgAddr_DSPF_14h, 0x00024A); ++ AIR_RTN_ERR(ret); ++ ret = airoha_tr_reg_write(phydev, RgAddr_DSPF_1Bh, 0x000072); ++ AIR_RTN_ERR(ret); ++ ret = airoha_tr_reg_write(phydev, RgAddr_DSPF_1Ch, 0x003210); ++ AIR_RTN_ERR(ret); ++ /* CL22 & CL45 */ ++ ret = airoha_cl22_write(mbus, phy_addr, 0x1f, 0x03); ++ AIR_RTN_ERR(ret); ++ GPHY_RG_LPI_1C.DATA = airoha_cl22_read(mbus, phy_addr, RgAddr_LPI_1Ch); ++ if (GPHY_RG_LPI_1C.DATA < 0) ++ return -EIO; ++ GPHY_RG_LPI_1C.DataBitField.smi_deton_th = 0x0C; ++ ret = airoha_cl22_write(mbus, phy_addr, RgAddr_LPI_1Ch, GPHY_RG_LPI_1C.DATA); ++ AIR_RTN_ERR(ret); ++ ret = airoha_cl22_write(mbus, phy_addr, RgAddr_LPI_1Ch, 0xC92); ++ AIR_RTN_ERR(ret); ++ ret = airoha_cl22_write(mbus, phy_addr, RgAddr_AUXILIARY_1Dh, 0x1); ++ AIR_RTN_ERR(ret); ++ ret = airoha_cl22_write(mbus, phy_addr, 0x1f, 0x0); ++ AIR_RTN_ERR(ret); ++ ret = airoha_cl45_write(phydev, 0x1E, 0x120, 0x8014); ++ AIR_RTN_ERR(ret); ++ ret = airoha_cl45_write(phydev, 0x1E, 0x122, 0xffff); ++ AIR_RTN_ERR(ret); ++ ret = airoha_cl45_write(phydev, 0x1E, 0x123, 0xffff); ++ AIR_RTN_ERR(ret); ++ ret = airoha_cl45_write(phydev, 0x1E, 0x144, 0x0200); ++ AIR_RTN_ERR(ret); ++ ret = airoha_cl45_write(phydev, 0x1E, 0x14A, 0xEE20); ++ AIR_RTN_ERR(ret); ++ ret = airoha_cl45_write(phydev, 0x1E, 0x189, 0x0110); ++ AIR_RTN_ERR(ret); ++ ret = airoha_cl45_write(phydev, 0x1E, 0x19B, 0x0111); ++ AIR_RTN_ERR(ret); ++ ret = airoha_cl45_write(phydev, 0x1E, 0x234, 0x0181); ++ AIR_RTN_ERR(ret); ++ ret = airoha_cl45_write(phydev, 0x1E, 0x238, 0x0120); ++ AIR_RTN_ERR(ret); ++ ret = airoha_cl45_write(phydev, 0x1E, 0x239, 0x0117); ++ AIR_RTN_ERR(ret); ++ ret = airoha_cl45_write(phydev, 0x1E, 0x268, 0x07F4); ++ AIR_RTN_ERR(ret); ++ ret = airoha_cl45_write(phydev, 0x1E, 0x2D1, 0x0733); ++ AIR_RTN_ERR(ret); ++ ret = airoha_cl45_write(phydev, 0x1E, 0x323, 0x0011); ++ AIR_RTN_ERR(ret); ++ ret = airoha_cl45_write(phydev, 0x1E, 0x324, 0x013F); ++ AIR_RTN_ERR(ret); ++ ret = airoha_cl45_write(phydev, 0x1E, 0x326, 0x0037); ++ AIR_RTN_ERR(ret); ++ ++ reg_value = airoha_cl45_read(phydev, 0x1E, 0x324); ++ if (reg_value < 0) ++ return -EIO; ++ GPHY_RG_1E_324.DATA = (int)reg_value; ++ GPHY_RG_1E_324.DataBitField.smi_det_deglitch_off = 0; ++ ret = airoha_cl45_write(phydev, 0x1E, 0x324, GPHY_RG_1E_324.DATA); ++ AIR_RTN_ERR(ret); ++ ret = airoha_cl45_write(phydev, 0x1E, 0x19E, 0xC2); ++ AIR_RTN_ERR(ret); ++ ret = airoha_cl45_write(phydev, 0x1E, 0x013, 0x0); ++ AIR_RTN_ERR(ret); ++ ++ /* EFUSE */ ++ airoha_pbus_write(mbus, pbus_addr, 0x1C08, 0x40000040); ++ retry = MAX_RETRY; ++ while (0 != retry) { ++ mdelay(1); ++ pbus_data = airoha_pbus_read(mbus, pbus_addr, 0x1C08); ++ if ((pbus_data & (1 << 30)) == 0) { ++ break; ++ } ++ retry--; ++ } ++ pbus_data = airoha_pbus_read(mbus, pbus_addr, 0x1C38); /* RAW#2 */ ++ reg_value = airoha_cl45_read(phydev, 0x1E, 0x12); ++ if (reg_value < 0) ++ return -EIO; ++ GPHY_RG_1E_012.DATA = reg_value; ++ GPHY_RG_1E_012.DataBitField.da_tx_i2mpb_a_tbt = pbus_data & 0x03f; ++ ret = airoha_cl45_write(phydev, 0x1E, 0x12, GPHY_RG_1E_012.DATA); ++ AIR_RTN_ERR(ret); ++ reg_value = airoha_cl45_read(phydev, 0x1E, 0x17); ++ if (reg_value < 0) ++ return -EIO; ++ GPHY_RG_1E_017.DataBitField.da_tx_i2mpb_b_tbt = (reg_value >> 8) & 0x03f; ++ ret = airoha_cl45_write(phydev, 0x1E, 0x17, GPHY_RG_1E_017.DATA); ++ AIR_RTN_ERR(ret); ++ ++ ret = airoha_pbus_write(mbus, pbus_addr, 0x1C08, 0x40400040); ++ AIR_RTN_ERR(ret); ++ retry = MAX_RETRY; ++ while (0 != retry) { ++ mdelay(1); ++ reg_value = airoha_pbus_read(mbus, pbus_addr, 0x1C08); ++ if ((reg_value & (1 << 30)) == 0) { ++ break; ++ } ++ retry--; ++ } ++ pbus_data = airoha_pbus_read(mbus, pbus_addr, 0x1C30); /* RAW#16 */ ++ GPHY_RG_1E_324.DataBitField.smi_det_deglitch_off = (pbus_data >> 12) & 0x01; ++ ret = airoha_cl45_write(phydev, 0x1E, 0x324, GPHY_RG_1E_324.DATA); ++ AIR_RTN_ERR(ret); ++#ifdef AIR_LED_SUPPORT ++ ret = en8801s_led_init(phydev); ++ if (ret != 0){ ++ printf("en8801s_led_init fail (ret:%d) !\n", ret); ++ } ++#endif ++ printf("EN8801S initialize OK ! (%s)\n", EN8801S_DRIVER_VERSION); ++ return 0; ++} ++ ++int en8801s_read_status(struct phy_device *phydev) ++{ ++ int ret, pbus_addr = EN8801S_PBUS_PHY_ID; ++ struct mii_dev *mbus; ++ unsigned long pbus_data; ++ ++ mbus = phydev->bus; ++ if (SPEED_10 == phydev->speed) { ++ /* set the bit for Optimze 10M IoT */ ++ debug("[Airoha] SPEED_10 0x1694\n"); ++ pbus_data = airoha_pbus_read(mbus, pbus_addr, 0x1694); ++ pbus_data |= (1 << 31); ++ ret = airoha_pbus_write(mbus, pbus_addr, 0x1694, pbus_data); ++ AIR_RTN_ERR(ret); ++ } else { ++ debug("[Airoha] SPEED_1000/100 0x1694\n"); ++ /* clear the bit for other speeds */ ++ pbus_data = airoha_pbus_read(mbus, pbus_addr, 0x1694); ++ pbus_data &= ~(1 << 31); ++ ret = airoha_pbus_write(mbus, pbus_addr, 0x1694, pbus_data); ++ AIR_RTN_ERR(ret); ++ } ++ ++ airoha_pbus_write(mbus, pbus_addr, 0x0600, 0x0c000c00); ++ if(SPEED_1000 == phydev->speed) { ++ debug("[Airoha] SPEED_1000\n"); ++ ret = airoha_pbus_write(mbus, pbus_addr, 0x10, 0xD801); ++ AIR_RTN_ERR(ret); ++ ret = airoha_pbus_write(mbus, pbus_addr, 0x0, 0x9140); ++ AIR_RTN_ERR(ret); ++ ++ ret = airoha_pbus_write(mbus, pbus_addr, 0x0A14, 0x0003); ++ AIR_RTN_ERR(ret); ++ ret = airoha_pbus_write(mbus, pbus_addr, 0x0600, 0x0c000c00); ++ AIR_RTN_ERR(ret); ++ mdelay(2); /* delay 2 ms */ ++ ret = airoha_pbus_write(mbus, pbus_addr, 0x1404, 0x004b); ++ AIR_RTN_ERR(ret); ++ ret = airoha_pbus_write(mbus, pbus_addr, 0x140c, 0x0007); ++ AIR_RTN_ERR(ret); ++ } ++ else if (SPEED_100 == phydev->speed) { ++ debug("[Airoha] SPEED_100\n"); ++ ret = airoha_pbus_write(mbus, pbus_addr, 0x10, 0xD401); ++ AIR_RTN_ERR(ret); ++ ret = airoha_pbus_write(mbus, pbus_addr, 0x0, 0x9140); ++ AIR_RTN_ERR(ret); ++ ret = airoha_pbus_write(mbus, pbus_addr, 0x0A14, 0x0007); ++ AIR_RTN_ERR(ret); ++ ret = airoha_pbus_write(mbus, pbus_addr, 0x0600, 0x0c11); ++ AIR_RTN_ERR(ret); ++ mdelay(2); /* delay 2 ms */ ++ ret = airoha_pbus_write(mbus, pbus_addr, 0x1404, 0x0027); ++ AIR_RTN_ERR(ret); ++ ret = airoha_pbus_write(mbus, pbus_addr, 0x140c, 0x0007); ++ AIR_RTN_ERR(ret); ++ } ++ else { ++ debug("[Airoha] SPEED_10\n"); ++ ret = airoha_pbus_write(mbus, pbus_addr, 0x10, 0xD001); ++ AIR_RTN_ERR(ret); ++ ret = airoha_pbus_write(mbus, pbus_addr, 0x0, 0x9140); ++ AIR_RTN_ERR(ret); ++ ++ ret = airoha_pbus_write(mbus, pbus_addr, 0x0A14, 0x000b); ++ AIR_RTN_ERR(ret); ++ ret = airoha_pbus_write(mbus, pbus_addr, 0x0600, 0x0c11); ++ AIR_RTN_ERR(ret); ++ mdelay(2); /* delay 2 ms */ ++ ret = airoha_pbus_write(mbus, pbus_addr, 0x1404, 0x0047); ++ AIR_RTN_ERR(ret); ++ ret = airoha_pbus_write(mbus, pbus_addr, 0x140c, 0x0007); ++ AIR_RTN_ERR(ret); ++ } ++ return 0; ++} ++ ++static int en8801s_startup(struct phy_device *phydev) ++{ ++ int ret; ++ ++ ret = genphy_update_link(phydev); ++ if (ret) ++ return ret; ++ ret = genphy_parse_link(phydev); ++ if (ret) ++ return ret; ++ return en8801s_read_status(phydev); ++} ++#if AIR_UBOOT_REVISION > 0x202303 ++U_BOOT_PHY_DRIVER(en8801s) = { ++ .name = "Airoha EN8801S", ++ .uid = EN8801S_PHY_ID, ++ .mask = 0x0ffffff0, ++ .features = PHY_GBIT_FEATURES, ++ .config = &en8801s_config, ++ .startup = &en8801s_startup, ++ .shutdown = &genphy_shutdown, ++}; ++#else ++static struct phy_driver AIR_EN8801S_driver = { ++ .name = "Airoha EN8801S", ++ .uid = EN8801S_PHY_ID, ++ .mask = 0x0ffffff0, ++ .features = PHY_GBIT_FEATURES, ++ .config = &en8801s_config, ++ .startup = &en8801s_startup, ++ .shutdown = &genphy_shutdown, ++}; ++ ++int phy_air_en8801s_init(void) ++{ ++ phy_register(&AIR_EN8801S_driver); ++ return 0; ++} ++#endif +--- /dev/null ++++ b/drivers/net/phy/air_en8801s.h +@@ -0,0 +1,267 @@ ++/* SPDX-License-Identifier: GPL-2.0 */ ++/************************************************* ++ * FILE NAME: air_en8801s.h ++ * PURPOSE: ++ * EN8801S PHY Driver for Uboot ++ * NOTES: ++ * ++ * Copyright (C) 2023 Airoha Technology Corp. ++ *************************************************/ ++ ++#ifndef __EN8801S_H ++#define __EN8801S_H ++ ++/************************************************************************ ++* D E F I N E S ++************************************************************************/ ++#define AIR_UBOOT_REVISION ((((U_BOOT_VERSION_NUM / 1000) % 10) << 20) | \ ++ (((U_BOOT_VERSION_NUM / 100) % 10) << 16) | \ ++ (((U_BOOT_VERSION_NUM / 10) % 10) << 12) | \ ++ ((U_BOOT_VERSION_NUM % 10) << 8) | \ ++ (((U_BOOT_VERSION_NUM_PATCH / 10) % 10) << 4) | \ ++ ((U_BOOT_VERSION_NUM_PATCH % 10) << 0)) ++ ++#define EN8801S_MDIO_DEFAULT_ID 0x1d ++#define EN8801S_PBUS_DEFAULT_ID (EN8801S_MDIO_DEFAULT_ID + 1) ++#define EN8801S_MDIO_PHY_ID 0x18 /* Range PHY_ADDRESS_RANGE .. 0x1e */ ++#define EN8801S_PBUS_PHY_ID (EN8801S_MDIO_PHY_ID + 1) ++#define EN8801S_DRIVER_VERSION "v1.1.3" ++ ++#define EN8801S_RG_ETHER_PHY_OUI 0x19a4 ++#define EN8801S_RG_SMI_ADDR 0x19a8 ++#define EN8801S_PBUS_OUI 0x17a5 ++#define EN8801S_RG_BUCK_CTL 0x1a20 ++#define EN8801S_RG_LTR_CTL 0x0cf8 ++ ++#define EN8801S_PHY_ID1 0x03a2 ++#define EN8801S_PHY_ID2 0x9461 ++#define EN8801S_PHY_ID (unsigned long)((EN8801S_PHY_ID1 << 16) | EN8801S_PHY_ID2) ++ ++/* ++SFP Sample for verification ++Tx Reverse, Rx Reverse ++*/ ++#define EN8801S_TX_POLARITY_NORMAL 0x0 ++#define EN8801S_TX_POLARITY_REVERSE 0x1 ++ ++#define EN8801S_RX_POLARITY_NORMAL (0x1 << 1) ++#define EN8801S_RX_POLARITY_REVERSE (0x0 << 1) ++ ++#ifndef BIT ++#define BIT(nr) (1UL << (nr)) ++#endif ++ ++#define MAX_RETRY 5 ++#define MAX_OUI_CHECK 2 ++ ++/* CL45 MDIO control */ ++#define MII_MMD_ACC_CTL_REG 0x0d ++#define MII_MMD_ADDR_DATA_REG 0x0e ++#define MMD_OP_MODE_DATA BIT(14) ++ ++#define MAX_TRG_COUNTER 5 ++ ++/* TokenRing Reg Access */ ++#define TrReg_PKT_XMT_STA 0x8000 ++#define TrReg_WR 0x8000 ++#define TrReg_RD 0xA000 ++ ++#define RgAddr_LPI_1Ch 0x1c ++#define RgAddr_AUXILIARY_1Dh 0x1d ++#define RgAddr_PMA_00h 0x0f80 ++#define RgAddr_PMA_01h 0x0f82 ++#define RgAddr_PMA_17h 0x0fae ++#define RgAddr_PMA_18h 0x0fb0 ++#define RgAddr_DSPF_03h 0x1686 ++#define RgAddr_DSPF_06h 0x168c ++#define RgAddr_DSPF_08h 0x1690 ++#define RgAddr_DSPF_0Ch 0x1698 ++#define RgAddr_DSPF_0Dh 0x169a ++#define RgAddr_DSPF_0Fh 0x169e ++#define RgAddr_DSPF_10h 0x16a0 ++#define RgAddr_DSPF_11h 0x16a2 ++#define RgAddr_DSPF_13h 0x16a6 ++#define RgAddr_DSPF_14h 0x16a8 ++#define RgAddr_DSPF_1Bh 0x16b6 ++#define RgAddr_DSPF_1Ch 0x16b8 ++#define RgAddr_TR_26h 0x0ecc ++#define RgAddr_R1000DEC_15h 0x03aa ++#define RgAddr_R1000DEC_17h 0x03ae ++ ++/* ++The following led_cfg example is for reference only. ++LED5 1000M/LINK/ACT (GPIO5) <-> BASE_T_LED0, ++LED6 10/100M/LINK/ACT(GPIO9) <-> BASE_T_LED1, ++LED4 100M/LINK/ACT (GPIO8) <-> BASE_T_LED2, ++*/ ++/* User-defined.B */ ++#define BASE_T_LED0_ON_CFG (LED_ON_EVT_LINK_1000M) ++#define BASE_T_LED0_BLK_CFG (LED_BLK_EVT_1000M_TX_ACT | LED_BLK_EVT_1000M_RX_ACT) ++#define BASE_T_LED1_ON_CFG (LED_ON_EVT_LINK_100M | LED_ON_EVT_LINK_10M) ++#define BASE_T_LED1_BLK_CFG (LED_BLK_EVT_100M_TX_ACT | LED_BLK_EVT_100M_RX_ACT | \ ++ LED_BLK_EVT_10M_TX_ACT | LED_BLK_EVT_10M_RX_ACT ) ++#define BASE_T_LED2_ON_CFG (LED_ON_EVT_LINK_100M) ++#define BASE_T_LED2_BLK_CFG (LED_BLK_EVT_100M_TX_ACT | LED_BLK_EVT_100M_RX_ACT) ++#define BASE_T_LED3_ON_CFG (0x0) ++#define BASE_T_LED3_BLK_CFG (0x0) ++/* User-defined.E */ ++ ++#define EN8801S_LED_COUNT 4 ++ ++#define LED_BCR (0x021) ++#define LED_BCR_EXT_CTRL (1 << 15) ++#define LED_BCR_CLK_EN (1 << 3) ++#define LED_BCR_TIME_TEST (1 << 2) ++#define LED_BCR_MODE_MASK (3) ++#define LED_BCR_MODE_DISABLE (0) ++#define LED_ON_CTRL(i) (0x024 + ((i)*2)) ++#define LED_ON_EN (1 << 15) ++#define LED_ON_POL (1 << 14) ++#define LED_ON_EVT_MASK (0x7f) ++/* LED ON Event Option.B */ ++#define LED_ON_EVT_FORCE (1 << 6) ++#define LED_ON_EVT_LINK_DOWN (1 << 3) ++#define LED_ON_EVT_LINK_10M (1 << 2) ++#define LED_ON_EVT_LINK_100M (1 << 1) ++#define LED_ON_EVT_LINK_1000M (1 << 0) ++/* LED ON Event Option.E */ ++#define LED_BLK_CTRL(i) (0x025 + ((i)*2)) ++#define LED_BLK_EVT_MASK (0x3ff) ++/* LED Blinking Event Option.B*/ ++#define LED_BLK_EVT_FORCE (1 << 9) ++#define LED_BLK_EVT_10M_RX_ACT (1 << 5) ++#define LED_BLK_EVT_10M_TX_ACT (1 << 4) ++#define LED_BLK_EVT_100M_RX_ACT (1 << 3) ++#define LED_BLK_EVT_100M_TX_ACT (1 << 2) ++#define LED_BLK_EVT_1000M_RX_ACT (1 << 1) ++#define LED_BLK_EVT_1000M_TX_ACT (1 << 0) ++/* LED Blinking Event Option.E*/ ++#define LED_ON_DUR (0x022) ++#define LED_ON_DUR_MASK (0xffff) ++#define LED_BLK_DUR (0x023) ++#define LED_BLK_DUR_MASK (0xffff) ++ ++#define LED_ENABLE 1 ++#define LED_DISABLE 0 ++ ++#define UNIT_LED_BLINK_DURATION 1024 ++ ++#define AIR_RTN_ON_ERR(cond, err) \ ++ do { if ((cond)) return (err); } while(0) ++ ++#define AIR_RTN_ERR(err) AIR_RTN_ON_ERR(err < 0, err) ++ ++#define LED_SET_EVT(reg, cod, result, bit) do \ ++ { \ ++ if(reg & cod) { \ ++ result |= bit; \ ++ } \ ++ } while(0) ++ ++#define LED_SET_GPIO_SEL(gpio, led, val) do \ ++ { \ ++ val |= (led << (8 * (gpio % 4))); \ ++ } while(0) ++ ++/* DATA TYPE DECLARATIONS ++ */ ++typedef struct ++{ ++ int DATA_Lo; ++ int DATA_Hi; ++}TR_DATA_T; ++ ++typedef union ++{ ++ struct ++ { ++ /* b[15:00] */ ++ int smi_deton_wt : 3; ++ int smi_det_mdi_inv : 1; ++ int smi_detoff_wt : 3; ++ int smi_sigdet_debouncing_en : 1; ++ int smi_deton_th : 6; ++ int rsv_14 : 2; ++ } DataBitField; ++ int DATA; ++} gephy_all_REG_LpiReg1Ch, *Pgephy_all_REG_LpiReg1Ch; ++ ++typedef union ++{ ++ struct ++ { ++ /* b[15:00] */ ++ int rg_smi_detcnt_max : 6; ++ int rsv_6 : 2; ++ int rg_smi_det_max_en : 1; ++ int smi_det_deglitch_off : 1; ++ int rsv_10 : 6; ++ } DataBitField; ++ int DATA; ++} gephy_all_REG_dev1Eh_reg324h, *Pgephy_all_REG_dev1Eh_reg324h; ++ ++typedef union ++{ ++ struct ++ { ++ /* b[15:00] */ ++ int da_tx_i2mpb_a_tbt : 6; ++ int rsv_6 : 4; ++ int da_tx_i2mpb_a_gbe : 6; ++ } DataBitField; ++ int DATA; ++} gephy_all_REG_dev1Eh_reg012h, *Pgephy_all_REG_dev1Eh_reg012h; ++ ++typedef union ++{ ++ struct ++ { ++ /* b[15:00] */ ++ int da_tx_i2mpb_b_tbt : 6; ++ int rsv_6 : 2; ++ int da_tx_i2mpb_b_gbe : 6; ++ int rsv_14 : 2; ++ } DataBitField; ++ int DATA; ++} gephy_all_REG_dev1Eh_reg017h, *Pgephy_all_REG_dev1Eh_reg017h; ++ ++typedef struct AIR_BASE_T_LED_CFG_S ++{ ++ u16 en; ++ u16 gpio; ++ u16 pol; ++ u16 on_cfg; ++ u16 blk_cfg; ++}AIR_BASE_T_LED_CFG_T; ++ ++typedef enum ++{ ++ AIR_LED_BLK_DUR_32M, ++ AIR_LED_BLK_DUR_64M, ++ AIR_LED_BLK_DUR_128M, ++ AIR_LED_BLK_DUR_256M, ++ AIR_LED_BLK_DUR_512M, ++ AIR_LED_BLK_DUR_1024M, ++ AIR_LED_BLK_DUR_LAST ++} AIR_LED_BLK_DUT_T; ++ ++typedef enum ++{ ++ AIR_ACTIVE_LOW, ++ AIR_ACTIVE_HIGH, ++} AIR_LED_POLARITY; ++typedef enum ++{ ++ AIR_LED_MODE_DISABLE, ++ AIR_LED_MODE_USER_DEFINE, ++ AIR_LED_MODE_LAST ++} AIR_LED_MODE_T; ++ ++/************************************************************************ ++* F U N C T I O N P R O T O T Y P E S ++************************************************************************/ ++ ++unsigned long airoha_pbus_read(struct mii_dev *bus, int pbus_addr, int pbus_reg); ++int airoha_pbus_write(struct mii_dev *bus, int pbus_addr, int pbus_reg, unsigned long pbus_data); ++int airoha_phy_process(void); ++#endif /* __EN8801S_H */ +--- /dev/null ++++ b/drivers/net/phy/air_en8811h.c +@@ -0,0 +1,725 @@ ++// SPDX-License-Identifier: GPL-2.0 ++/************************************************* ++ * FILE NAME: air_en8811h.c ++ * PURPOSE: ++ * EN8811H PHY Driver for Uboot ++ * NOTES: ++ * ++ * Copyright (C) 2023 Airoha Technology Corp. ++ *************************************************/ ++ ++/* INCLUDE FILE DECLARATIONS ++*/ ++#include ++#include ++#include ++#include ++#include ++#include ++#include "air_en8811h.h" ++ ++#ifdef CONFIG_PHY_AIROHA_FW_IN_UBI ++#include ++#endif ++ ++#ifdef CONFIG_PHY_AIROHA_FW_IN_MMC ++#include ++#endif ++ ++#ifdef CONFIG_PHY_AIROHA_FW_IN_MTD ++#include ++#endif ++ ++#if AIR_UBOOT_REVISION > 0x202004 ++#include ++#endif ++ ++/************************** ++ * GPIO5 <-> BASE_T_LED0, ++ * GPIO4 <-> BASE_T_LED1, ++ * GPIO3 <-> BASE_T_LED2, ++ **************************/ ++/* User-defined.B */ ++#define AIR_LED_SUPPORT ++#ifdef AIR_LED_SUPPORT ++static const struct air_base_t_led_cfg_s led_cfg[3] = { ++/********************************************************************* ++ *Enable, GPIO, LED Polarity, LED ON, LED Blink ++**********************************************************************/ ++ {1, AIR_LED0_GPIO5, AIR_ACTIVE_HIGH, AIR_LED0_ON, AIR_LED0_BLK}, ++ {1, AIR_LED1_GPIO4, AIR_ACTIVE_HIGH, AIR_LED1_ON, AIR_LED1_BLK}, ++ {1, AIR_LED2_GPIO3, AIR_ACTIVE_HIGH, AIR_LED2_ON, AIR_LED2_BLK}, ++}; ++static const u16 led_dur = UNIT_LED_BLINK_DURATION << AIR_LED_BLK_DUR_64M; ++#endif ++/* User-defined.E */ ++/************************************************************* ++ * F U N C T I O N S ++ **************************************************************/ ++/* Airoha MII read function */ ++static int air_mii_cl22_read(struct mii_dev *bus, int phy_addr, int phy_register) ++{ ++ int read_data = bus->read(bus, phy_addr, MDIO_DEVAD_NONE, phy_register); ++ ++ if (read_data < 0) ++ return -EIO; ++ return read_data; ++} ++ ++/* Airoha MII write function */ ++static int air_mii_cl22_write(struct mii_dev *bus, int phy_addr, int phy_register, int write_data) ++{ ++ int ret = 0; ++ ++ ret = bus->write(bus, phy_addr, MDIO_DEVAD_NONE, phy_register, write_data); ++ if (ret < 0) { ++ printf("bus->write, ret: %d\n", ret); ++ return ret; ++ } ++ return ret; ++} ++ ++static int air_mii_cl45_read(struct phy_device *phydev, int devad, u16 reg) ++{ ++ int ret = 0; ++ int data; ++ ++ ret = phy_write(phydev, MDIO_DEVAD_NONE, MII_MMD_ACC_CTL_REG, devad); ++ if (ret < 0) { ++ printf("phy_write, ret: %d\n", ret); ++ return INVALID_DATA; ++ } ++ ret = phy_write(phydev, MDIO_DEVAD_NONE, MII_MMD_ADDR_DATA_REG, reg); ++ if (ret < 0) { ++ printf("phy_write, ret: %d\n", ret); ++ return INVALID_DATA; ++ } ++ ret = phy_write(phydev, MDIO_DEVAD_NONE, MII_MMD_ACC_CTL_REG, MMD_OP_MODE_DATA | devad); ++ if (ret < 0) { ++ printf("phy_write, ret: %d\n", ret); ++ return INVALID_DATA; ++ } ++ data = phy_read(phydev, MDIO_DEVAD_NONE, MII_MMD_ADDR_DATA_REG); ++ return data; ++} ++ ++static int air_mii_cl45_write(struct phy_device *phydev, int devad, u16 reg, u16 write_data) ++{ ++ int ret = 0; ++ ++ ret = phy_write(phydev, MDIO_DEVAD_NONE, MII_MMD_ACC_CTL_REG, devad); ++ if (ret < 0) { ++ printf("phy_write, ret: %d\n", ret); ++ return ret; ++ } ++ ret = phy_write(phydev, MDIO_DEVAD_NONE, MII_MMD_ADDR_DATA_REG, reg); ++ if (ret < 0) { ++ printf("phy_write, ret: %d\n", ret); ++ return ret; ++ } ++ ret = phy_write(phydev, MDIO_DEVAD_NONE, MII_MMD_ACC_CTL_REG, MMD_OP_MODE_DATA | devad); ++ if (ret < 0) { ++ printf("phy_write, ret: %d\n", ret); ++ return ret; ++ } ++ ret = phy_write(phydev, MDIO_DEVAD_NONE, MII_MMD_ADDR_DATA_REG, write_data); ++ if (ret < 0) { ++ printf("phy_write, ret: %d\n", ret); ++ return ret; ++ } ++ return 0; ++} ++/* Use default PBUS_PHY_ID */ ++/* EN8811H PBUS write function */ ++static int air_pbus_reg_write(struct phy_device *phydev, unsigned long pbus_address, unsigned long pbus_data) ++{ ++ int ret = 0; ++ struct mii_dev *mbus = phydev->bus; ++ ++ ret = air_mii_cl22_write(mbus, ((phydev->addr) + 8), 0x1F, (unsigned int)(pbus_address >> 6)); ++ if (ret < 0) ++ return ret; ++ ret = air_mii_cl22_write(mbus, ((phydev->addr) + 8), (unsigned int)((pbus_address >> 2) & 0xf), (unsigned int)(pbus_data & 0xFFFF)); ++ if (ret < 0) ++ return ret; ++ ret = air_mii_cl22_write(mbus, ((phydev->addr) + 8), 0x10, (unsigned int)(pbus_data >> 16)); ++ if (ret < 0) ++ return ret; ++ return 0; ++} ++ ++/* EN8811H BUCK write function */ ++static int air_buckpbus_reg_write(struct phy_device *phydev, unsigned long pbus_address, unsigned int pbus_data) ++{ ++ int ret = 0; ++ ++ /* page 4 */ ++ ret = phy_write(phydev, MDIO_DEVAD_NONE, 0x1F, (unsigned int)4); ++ if (ret < 0) { ++ printf("phy_write, ret: %d\n", ret); ++ return ret; ++ } ++ ret = phy_write(phydev, MDIO_DEVAD_NONE, 0x10, (unsigned int)0); ++ if (ret < 0) { ++ printf("phy_write, ret: %d\n", ret); ++ return ret; ++ } ++ ret = phy_write(phydev, MDIO_DEVAD_NONE, 0x11, (unsigned int)((pbus_address >> 16) & 0xffff)); ++ if (ret < 0) { ++ printf("phy_write, ret: %d\n", ret); ++ return ret; ++ } ++ ret = phy_write(phydev, MDIO_DEVAD_NONE, 0x12, (unsigned int)(pbus_address & 0xffff)); ++ if (ret < 0) { ++ printf("phy_write, ret: %d\n", ret); ++ return ret; ++ } ++ ret = phy_write(phydev, MDIO_DEVAD_NONE, 0x13, (unsigned int)((pbus_data >> 16) & 0xffff)); ++ if (ret < 0) { ++ printf("phy_write, ret: %d\n", ret); ++ return ret; ++ } ++ ret = phy_write(phydev, MDIO_DEVAD_NONE, 0x14, (unsigned int)(pbus_data & 0xffff)); ++ if (ret < 0) { ++ printf("phy_write, ret: %d\n", ret); ++ return ret; ++ } ++ return 0; ++} ++ ++/* EN8811H BUCK read function */ ++static unsigned int air_buckpbus_reg_read(struct phy_device *phydev, unsigned long pbus_address) ++{ ++ unsigned int pbus_data = 0, pbus_data_low, pbus_data_high; ++ int ret = 0; ++ ++ ret = phy_write(phydev, MDIO_DEVAD_NONE, 0x1F, (unsigned int)4); /* page 4 */ ++ if (ret < 0) { ++ printf("phy_write, ret: %d\n", ret); ++ return PBUS_INVALID_DATA; ++ } ++ ret = phy_write(phydev, MDIO_DEVAD_NONE, 0x10, (unsigned int)0); ++ if (ret < 0) { ++ printf("phy_write, ret: %d\n", ret); ++ return PBUS_INVALID_DATA; ++ } ++ ret = phy_write(phydev, MDIO_DEVAD_NONE, 0x15, (unsigned int)((pbus_address >> 16) & 0xffff)); ++ if (ret < 0) { ++ printf("phy_write, ret: %d\n", ret); ++ return PBUS_INVALID_DATA; ++ } ++ ret = phy_write(phydev, MDIO_DEVAD_NONE, 0x16, (unsigned int)(pbus_address & 0xffff)); ++ if (ret < 0) { ++ printf("phy_write, ret: %d\n", ret); ++ return PBUS_INVALID_DATA; ++ } ++ ++ pbus_data_high = phy_read(phydev, MDIO_DEVAD_NONE, 0x17); ++ pbus_data_low = phy_read(phydev, MDIO_DEVAD_NONE, 0x18); ++ pbus_data = (pbus_data_high << 16) + pbus_data_low; ++ ret = phy_write(phydev, MDIO_DEVAD_NONE, 0x1F, (unsigned int)0); ++ if (ret < 0) { ++ printf("phy_write, ret: %d\n", ret); ++ return ret; ++ } ++ return pbus_data; ++} ++ ++static int MDIOWriteBuf(struct phy_device *phydev, unsigned long address, unsigned long array_size, const unsigned char *buffer) ++{ ++ unsigned int write_data, offset ; ++ int ret = 0; ++ ++ /* page 4 */ ++ ret = phy_write(phydev, MDIO_DEVAD_NONE, 0x1F, (unsigned int)4); ++ if (ret < 0) { ++ printf("phy_write, ret: %d\n", ret); ++ return ret; ++ } ++ /* address increment*/ ++ ret = phy_write(phydev, MDIO_DEVAD_NONE, 0x10, (unsigned int)0x8000); ++ if (ret < 0) { ++ printf("phy_write, ret: %d\n", ret); ++ return ret; ++ } ++ ret = phy_write(phydev, MDIO_DEVAD_NONE, 0x11, (unsigned int)((address >> 16) & 0xffff)); ++ if (ret < 0) { ++ printf("phy_write, ret: %d\n", ret); ++ return ret; ++ } ++ ret = phy_write(phydev, MDIO_DEVAD_NONE, 0x12, (unsigned int)(address & 0xffff)); ++ if (ret < 0) { ++ printf("phy_write, ret: %d\n", ret); ++ return ret; ++ } ++ ++ for (offset = 0; offset < array_size; offset += 4) { ++ write_data = (buffer[offset + 3] << 8) | buffer[offset + 2]; ++ ret = phy_write(phydev, MDIO_DEVAD_NONE, 0x13, write_data); ++ if (ret < 0) { ++ printf("phy_write, ret: %d\n", ret); ++ return ret; ++ } ++ write_data = (buffer[offset + 1] << 8) | buffer[offset]; ++ ret = phy_write(phydev, MDIO_DEVAD_NONE, 0x14, write_data); ++ if (ret < 0) { ++ printf("phy_write, ret: %d\n", ret); ++ return ret; ++ } ++ } ++ ret = phy_write(phydev, MDIO_DEVAD_NONE, 0x1F, (unsigned int)0); ++ if (ret < 0) { ++ printf("phy_write, ret: %d\n", ret); ++ return ret; ++ } ++ return 0; ++} ++ ++#ifdef AIR_LED_SUPPORT ++static int airoha_led_set_usr_def(struct phy_device *phydev, u8 entity, int polar, ++ u16 on_evt, u16 blk_evt) ++{ ++ int ret = 0; ++ ++ if (AIR_ACTIVE_HIGH == polar) ++ on_evt |= LED_ON_POL; ++ else ++ on_evt &= ~LED_ON_POL; ++ ++ ret = air_mii_cl45_write(phydev, 0x1f, LED_ON_CTRL(entity), on_evt | LED_ON_EN); ++ if (ret < 0) ++ return ret; ++ ret = air_mii_cl45_write(phydev, 0x1f, LED_BLK_CTRL(entity), blk_evt); ++ if (ret < 0) ++ return ret; ++ return 0; ++} ++ ++static int airoha_led_set_mode(struct phy_device *phydev, u8 mode) ++{ ++ u16 cl45_data; ++ int err = 0; ++ ++ cl45_data = air_mii_cl45_read(phydev, 0x1f, LED_BCR); ++ switch (mode) { ++ case AIR_LED_MODE_DISABLE: ++ cl45_data &= ~LED_BCR_EXT_CTRL; ++ cl45_data &= ~LED_BCR_MODE_MASK; ++ cl45_data |= LED_BCR_MODE_DISABLE; ++ break; ++ case AIR_LED_MODE_USER_DEFINE: ++ cl45_data |= LED_BCR_EXT_CTRL; ++ cl45_data |= LED_BCR_CLK_EN; ++ break; ++ default: ++ printf("LED mode%d is not supported!\n", mode); ++ return -EINVAL; ++ } ++ err = air_mii_cl45_write(phydev, 0x1f, LED_BCR, cl45_data); ++ if (err < 0) ++ return err; ++ return 0; ++} ++ ++static int airoha_led_set_state(struct phy_device *phydev, u8 entity, u8 state) ++{ ++ u16 cl45_data; ++ int err; ++ ++ cl45_data = air_mii_cl45_read(phydev, 0x1f, LED_ON_CTRL(entity)); ++ if (LED_ENABLE == state) ++ cl45_data |= LED_ON_EN; ++ else ++ cl45_data &= ~LED_ON_EN; ++ ++ err = air_mii_cl45_write(phydev, 0x1f, LED_ON_CTRL(entity), cl45_data); ++ if (err < 0) ++ return err; ++ return 0; ++} ++ ++static int en8811h_led_init(struct phy_device *phydev) ++{ ++ unsigned int led_gpio = 0, reg_value = 0; ++ u16 cl45_data = led_dur; ++ int ret, led_id; ++ ++ cl45_data = UNIT_LED_BLINK_DURATION << AIR_LED_BLK_DUR_64M; ++ ret = air_mii_cl45_write(phydev, 0x1f, LED_BLK_DUR, cl45_data); ++ if (ret < 0) ++ return ret; ++ cl45_data >>= 1; ++ ret = air_mii_cl45_write(phydev, 0x1f, LED_ON_DUR, cl45_data); ++ if (ret < 0) ++ return ret; ++ ++ ret = airoha_led_set_mode(phydev, AIR_LED_MODE_USER_DEFINE); ++ if (ret != 0) { ++ printf("LED fail to set mode, ret %d !\n", ret); ++ return ret; ++ } ++ for(led_id = 0; led_id < EN8811H_LED_COUNT; led_id++) ++ { ++ /* LED0 <-> GPIO5, LED1 <-> GPIO4, LED0 <-> GPIO3 */ ++ if ( led_cfg[led_id].gpio != (led_id + (AIR_LED0_GPIO5 - (2 * led_id)))) { ++ printf("LED%d uses incorrect GPIO%d !\n", led_id, led_cfg[led_id].gpio); ++ return -EINVAL; ++ } ++ reg_value = 0; ++ if (led_cfg[led_id].en == LED_ENABLE) ++ { ++ led_gpio |= BIT(led_cfg[led_id].gpio); ++ ret = airoha_led_set_state(phydev, led_id, led_cfg[led_id].en); ++ if (ret != 0) { ++ printf("LED fail to set state, ret %d !\n", ret); ++ return ret; ++ } ++ ret = airoha_led_set_usr_def(phydev, led_id, led_cfg[led_id].pol, led_cfg[led_id].on_cfg, led_cfg[led_id].blk_cfg); ++ if (ret != 0) { ++ printf("LED fail to set default, ret %d !\n", ret); ++ return ret; ++ } ++ } ++ } ++ ret = air_buckpbus_reg_write(phydev, 0xcf8b8, led_gpio); ++ if (ret < 0) ++ return ret; ++ printf("LED initialize OK !\n"); ++ return 0; ++} ++#endif /* AIR_LED_SUPPORT */ ++ ++static char *firmware_buf; ++static int en8811h_load_firmware(struct phy_device *phydev) ++{ ++ u32 pbus_value; ++ int ret = 0; ++ ++ if (!firmware_buf) { ++ firmware_buf = malloc(EN8811H_MD32_DM_SIZE + EN8811H_MD32_DSP_SIZE); ++ if (!firmware_buf) { ++ printf("[Airoha] cannot allocated buffer for firmware.\n"); ++ return -ENOMEM; ++ } ++ ++#ifdef CONFIG_PHY_AIROHA_FW_IN_UBI ++ ret = ubi_volume_read("en8811h-fw", firmware_buf, EN8811H_MD32_DM_SIZE + EN8811H_MD32_DSP_SIZE); ++ if (ret) { ++ printf("[Airoha] read firmware from UBI failed.\n"); ++ free(firmware_buf); ++ firmware_buf = NULL; ++ return ret; ++ } ++#elif defined(CONFIG_PHY_AIROHA_FW_IN_MMC) ++ struct mmc *mmc = find_mmc_device(0); ++ if (!mmc) { ++ printf("[Airoha] opening MMC device failed.\n"); ++ free(firmware_buf); ++ firmware_buf = NULL; ++ return -ENODEV; ++ } ++ if (mmc_init(mmc)) { ++ printf("[Airoha] initializing MMC device failed.\n"); ++ free(firmware_buf); ++ firmware_buf = NULL; ++ return -ENODEV; ++ } ++ if (IS_SD(mmc)) { ++ printf("[Airoha] SD card is not supported.\n"); ++ free(firmware_buf); ++ firmware_buf = NULL; ++ return -EINVAL; ++ } ++ ret = mmc_set_part_conf(mmc, 1, 2, 2); ++ if (ret) { ++ printf("[Airoha] cannot access eMMC boot1 hw partition.\n"); ++ free(firmware_buf); ++ firmware_buf = NULL; ++ return ret; ++ } ++ ret = blk_dread(mmc_get_blk_desc(mmc), 0, 0x120, firmware_buf); ++ mmc_set_part_conf(mmc, 1, 1, 0); ++ if (ret != 0x120) { ++ printf("[Airoha] cannot read firmware from eMMC.\n"); ++ free(firmware_buf); ++ firmware_buf = NULL; ++ return -EIO; ++ } ++#else ++#warning EN8811H firmware loading not implemented ++ free(firmware_buf); ++ firmware_buf = NULL; ++ return -EOPNOTSUPP; ++#endif ++ } ++ ++ ret = air_buckpbus_reg_write(phydev, 0x0f0018, 0x0); ++ if (ret < 0) ++ return ret; ++ pbus_value = air_buckpbus_reg_read(phydev, 0x800000); ++ pbus_value |= BIT(11); ++ ret = air_buckpbus_reg_write(phydev, 0x800000, pbus_value); ++ if (ret < 0) ++ return ret; ++ /* Download DM */ ++ ret = MDIOWriteBuf(phydev, 0x00000000, EN8811H_MD32_DM_SIZE, firmware_buf); ++ if (ret < 0) { ++ printf("[Airoha] MDIOWriteBuf 0x00000000 fail.\n"); ++ return ret; ++ } ++ /* Download PM */ ++ ret = MDIOWriteBuf(phydev, 0x00100000, EN8811H_MD32_DSP_SIZE, firmware_buf + EN8811H_MD32_DM_SIZE); ++ if (ret < 0) { ++ printf("[Airoha] MDIOWriteBuf 0x00100000 fail.\n"); ++ return ret; ++ } ++ pbus_value = air_buckpbus_reg_read(phydev, 0x800000); ++ pbus_value &= ~BIT(11); ++ ret = air_buckpbus_reg_write(phydev, 0x800000, pbus_value); ++ if (ret < 0) ++ return ret; ++ ret = air_buckpbus_reg_write(phydev, 0x0f0018, 0x01); ++ if (ret < 0) ++ return ret; ++ return 0; ++} ++ ++static int en8811h_config(struct phy_device *phydev) ++{ ++ int ret = 0; ++ int pid1 = 0, pid2 = 0; ++ ++ ret = air_pbus_reg_write(phydev, 0xcf928 , 0x0); ++ if (ret < 0) ++ return ret; ++ ++ pid1 = phy_read(phydev, MDIO_DEVAD_NONE, MII_PHYSID1); ++ pid2 = phy_read(phydev, MDIO_DEVAD_NONE, MII_PHYSID2); ++ if ((EN8811H_PHY_ID1 != pid1) || (EN8811H_PHY_ID2 != pid2)) { ++ printf("EN8811H does not exist !\n"); ++ return -ENODEV; ++ } ++ ++ return 0; ++} ++ ++static int en8811h_get_autonego(struct phy_device *phydev, int *an) ++{ ++ int reg; ++ reg = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMCR); ++ if (reg < 0) ++ return -EINVAL; ++ if (reg & BMCR_ANENABLE) ++ *an = AUTONEG_ENABLE; ++ else ++ *an = AUTONEG_DISABLE; ++ return 0; ++} ++ ++static int en8811h_startup(struct phy_device *phydev) ++{ ++ ofnode node = phy_get_ofnode(phydev); ++ int ret = 0, lpagb = 0, lpa = 0, common_adv_gb = 0, common_adv = 0, advgb = 0, adv = 0, reg = 0, an = AUTONEG_DISABLE, bmcr = 0, reg_value; ++ int old_link = phydev->link; ++ u32 pbus_value = 0, retry; ++ ++ eth_phy_reset(phydev->dev, 1); ++ mdelay(10); ++ eth_phy_reset(phydev->dev, 0); ++ mdelay(1); ++ ++ ret = en8811h_load_firmware(phydev); ++ if (ret) { ++ printf("EN8811H load firmware fail.\n"); ++ return ret; ++ } ++ retry = MAX_RETRY; ++ do { ++ mdelay(300); ++ reg_value = air_mii_cl45_read(phydev, 0x1e, 0x8009); ++ if (EN8811H_PHY_READY == reg_value) { ++ printf("EN8811H PHY ready!\n"); ++ break; ++ } ++ retry--; ++ } while (retry); ++ if (0 == retry) { ++ printf("EN8811H PHY is not ready. (MD32 FW Status reg: 0x%x)\n", reg_value); ++ pbus_value = air_buckpbus_reg_read(phydev, 0x3b3c); ++ printf("Check MD32 FW Version(0x3b3c) : %08x\n", pbus_value); ++ printf("EN8811H initialize fail!\n"); ++ return 0; ++ } ++ /* Mode selection*/ ++ printf("EN8811H Mode 1 !\n"); ++ ret = air_mii_cl45_write(phydev, 0x1e, 0x800c, 0x0); ++ if (ret < 0) ++ return ret; ++ ret = air_mii_cl45_write(phydev, 0x1e, 0x800d, 0x0); ++ if (ret < 0) ++ return ret; ++ ret = air_mii_cl45_write(phydev, 0x1e, 0x800e, 0x1101); ++ if (ret < 0) ++ return ret; ++ ret = air_mii_cl45_write(phydev, 0x1e, 0x800f, 0x0002); ++ if (ret < 0) ++ return ret; ++ ++ /* Serdes polarity */ ++ pbus_value = air_buckpbus_reg_read(phydev, 0xca0f8); ++ pbus_value &= 0xfffffffc; ++ pbus_value |= ofnode_read_bool(node, "airoha,rx-pol-reverse") ? ++ EN8811H_RX_POLARITY_REVERSE : EN8811H_RX_POLARITY_NORMAL; ++ pbus_value |= ofnode_read_bool(node, "airoha,tx-pol-reverse") ? ++ EN8811H_TX_POLARITY_REVERSE : EN8811H_TX_POLARITY_NORMAL; ++ ret = air_buckpbus_reg_write(phydev, 0xca0f8, pbus_value); ++ if (ret < 0) ++ return ret; ++ pbus_value = air_buckpbus_reg_read(phydev, 0xca0f8); ++ printf("Tx, Rx Polarity(0xca0f8): %08x\n", pbus_value); ++ pbus_value = air_buckpbus_reg_read(phydev, 0x3b3c); ++ printf("MD32 FW Version(0x3b3c) : %08x\n", pbus_value); ++#if defined(AIR_LED_SUPPORT) ++ ret = en8811h_led_init(phydev); ++ if (ret < 0) { ++ printf("en8811h_led_init fail\n"); ++ } ++#endif ++ printf("EN8811H initialize OK ! (%s)\n", EN8811H_DRIVER_VERSION); ++ ++ ret = genphy_update_link(phydev); ++ if (ret) ++ { ++ printf("ret %d!\n", ret); ++ return ret; ++ } ++ ++ ret = genphy_parse_link(phydev); ++ if (ret) ++ { ++ printf("ret %d!\n", ret); ++ return ret; ++ } ++ ++ if (old_link && phydev->link) ++ return 0; ++ ++ phydev->speed = SPEED_100; ++ phydev->duplex = DUPLEX_FULL; ++ phydev->pause = 0; ++ phydev->asym_pause = 0; ++ ++ reg = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMSR); ++ if (reg < 0) ++ { ++ printf("MII_BMSR reg %d!\n", reg); ++ return reg; ++ } ++ reg = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMSR); ++ if (reg < 0) ++ { ++ printf("MII_BMSR reg %d!\n", reg); ++ return reg; ++ } ++ if(reg & BMSR_LSTATUS) ++ { ++ pbus_value = air_buckpbus_reg_read(phydev, 0x109D4); ++ if (0x10 & pbus_value) { ++ phydev->speed = SPEED_2500; ++ phydev->duplex = DUPLEX_FULL; ++ } ++ else ++ { ++ ret = en8811h_get_autonego(phydev, &an); ++ if ((AUTONEG_ENABLE == an) && (0 == ret)) ++ { ++ printf("AN mode!\n"); ++ printf("SPEED 1000/100!\n"); ++ lpagb = phy_read(phydev, MDIO_DEVAD_NONE, MII_STAT1000); ++ if (lpagb < 0 ) ++ return lpagb; ++ advgb = phy_read(phydev, MDIO_DEVAD_NONE, MII_CTRL1000); ++ if (adv < 0 ) ++ return adv; ++ common_adv_gb = (lpagb & (advgb << 2)); ++ ++ lpa = phy_read(phydev, MDIO_DEVAD_NONE, MII_LPA); ++ if (lpa < 0 ) ++ return lpa; ++ adv = phy_read(phydev, MDIO_DEVAD_NONE, MII_ADVERTISE); ++ if (adv < 0 ) ++ return adv; ++ common_adv = (lpa & adv); ++ ++ phydev->speed = SPEED_10; ++ phydev->duplex = DUPLEX_HALF; ++ if (common_adv_gb & (LPA_1000FULL | LPA_1000HALF)) ++ { ++ phydev->speed = SPEED_1000; ++ if (common_adv_gb & LPA_1000FULL) ++ ++ phydev->duplex = DUPLEX_FULL; ++ } ++ else if (common_adv & (LPA_100FULL | LPA_100HALF)) ++ { ++ phydev->speed = SPEED_100; ++ if (common_adv & LPA_100FULL) ++ phydev->duplex = DUPLEX_FULL; ++ } ++ else ++ { ++ if (common_adv & LPA_10FULL) ++ phydev->duplex = DUPLEX_FULL; ++ } ++ } ++ else ++ { ++ printf("Force mode!\n"); ++ bmcr = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMCR); ++ ++ if (bmcr < 0) ++ return bmcr; ++ ++ if (bmcr & BMCR_FULLDPLX) ++ phydev->duplex = DUPLEX_FULL; ++ else ++ phydev->duplex = DUPLEX_HALF; ++ ++ if (bmcr & BMCR_SPEED1000) ++ phydev->speed = SPEED_1000; ++ else if (bmcr & BMCR_SPEED100) ++ phydev->speed = SPEED_100; ++ else ++ phydev->speed = SPEED_100; ++ } ++ } ++ } ++ ++ return ret; ++} ++ ++#if AIR_UBOOT_REVISION > 0x202303 ++U_BOOT_PHY_DRIVER(en8811h) = { ++ .name = "Airoha EN8811H", ++ .uid = EN8811H_PHY_ID, ++ .mask = 0x0ffffff0, ++ .config = &en8811h_config, ++ .startup = &en8811h_startup, ++ .shutdown = &genphy_shutdown, ++}; ++#else ++static struct phy_driver AIR_EN8811H_driver = { ++ .name = "Airoha EN8811H", ++ .uid = EN8811H_PHY_ID, ++ .mask = 0x0ffffff0, ++ .config = &en8811h_config, ++ .startup = &en8811h_startup, ++ .shutdown = &genphy_shutdown, ++}; ++ ++int phy_air_en8811h_init(void) ++{ ++ phy_register(&AIR_EN8811H_driver); ++ return 0; ++} ++#endif +--- /dev/null ++++ b/drivers/net/phy/air_en8811h.h +@@ -0,0 +1,163 @@ ++/* SPDX-License-Identifier: GPL-2.0 */ ++/************************************************* ++ * FILE NAME: air_en8811h.h ++ * PURPOSE: ++ * EN8811H PHY Driver for Uboot ++ * NOTES: ++ * ++ * Copyright (C) 2023 Airoha Technology Corp. ++ *************************************************/ ++ ++#ifndef __EN8811H_H ++#define __EN8811H_H ++ ++#define AIR_UBOOT_REVISION ((((U_BOOT_VERSION_NUM / 1000) % 10) << 20) | \ ++ (((U_BOOT_VERSION_NUM / 100) % 10) << 16) | \ ++ (((U_BOOT_VERSION_NUM / 10) % 10) << 12) | \ ++ ((U_BOOT_VERSION_NUM % 10) << 8) | \ ++ (((U_BOOT_VERSION_NUM_PATCH / 10) % 10) << 4) | \ ++ ((U_BOOT_VERSION_NUM_PATCH % 10) << 0)) ++ ++#define EN8811H_PHY_ID1 0x03a2 ++#define EN8811H_PHY_ID2 0xa411 ++#define EN8811H_PHY_ID ((EN8811H_PHY_ID1 << 16) | EN8811H_PHY_ID2) ++#define EN8811H_SPEED_2500 0x03 ++#define EN8811H_PHY_READY 0x02 ++#define MAX_RETRY 5 ++ ++#define EN8811H_MD32_DM_SIZE 0x4000 ++#define EN8811H_MD32_DSP_SIZE 0x20000 ++ ++#define EN8811H_TX_POLARITY_NORMAL 0x1 ++#define EN8811H_TX_POLARITY_REVERSE 0x0 ++ ++#define EN8811H_RX_POLARITY_NORMAL (0x0 << 1) ++#define EN8811H_RX_POLARITY_REVERSE (0x1 << 1) ++ ++#ifndef BIT ++#define BIT(nr) (1UL << (nr)) ++#endif ++ ++/* CL45 MDIO control */ ++#define MII_MMD_ACC_CTL_REG 0x0d ++#define MII_MMD_ADDR_DATA_REG 0x0e ++#define MMD_OP_MODE_DATA BIT(14) ++/* MultiGBASE-T AN register */ ++#define MULTIG_ANAR_2500M (0x0080) ++#define MULTIG_LPAR_2500M (0x0020) ++ ++#define EN8811H_DRIVER_VERSION "v1.0.4" ++ ++/************************************************************ ++ * For reference only ++ * LED0 Link 2500/Blink 2500 TxRx (GPIO5) <-> BASE_T_LED0, ++ * LED1 Link 1000/Blink 1000 TxRx (GPIO4) <-> BASE_T_LED1, ++ * LED2 Link 100/Blink 100 TxRx (GPIO3) <-> BASE_T_LED2, ++ ************************************************************/ ++/* User-defined.B */ ++#define AIR_LED0_ON (LED_ON_EVT_LINK_2500M) ++#define AIR_LED0_BLK (LED_BLK_EVT_2500M_TX_ACT | LED_BLK_EVT_2500M_RX_ACT) ++#define AIR_LED1_ON (LED_ON_EVT_LINK_1000M) ++#define AIR_LED1_BLK (LED_BLK_EVT_1000M_TX_ACT | LED_BLK_EVT_1000M_RX_ACT) ++#define AIR_LED2_ON (LED_ON_EVT_LINK_100M) ++#define AIR_LED2_BLK (LED_BLK_EVT_100M_TX_ACT | LED_BLK_EVT_100M_RX_ACT) ++/* User-defined.E */ ++ ++#define LED_ON_CTRL(i) (0x024 + ((i)*2)) ++#define LED_ON_EN (1 << 15) ++#define LED_ON_POL (1 << 14) ++#define LED_ON_EVT_MASK (0x1ff) ++/* LED ON Event Option.B */ ++#define LED_ON_EVT_LINK_2500M (1 << 8) ++#define LED_ON_EVT_FORCE (1 << 6) ++#define LED_ON_EVT_HDX (1 << 5) ++#define LED_ON_EVT_FDX (1 << 4) ++#define LED_ON_EVT_LINK_DOWN (1 << 3) ++#define LED_ON_EVT_LINK_100M (1 << 1) ++#define LED_ON_EVT_LINK_1000M (1 << 0) ++/* LED ON Event Option.E */ ++ ++#define LED_BLK_CTRL(i) (0x025 + ((i)*2)) ++#define LED_BLK_EVT_MASK (0xfff) ++/* LED Blinking Event Option.B*/ ++#define LED_BLK_EVT_2500M_RX_ACT (1 << 11) ++#define LED_BLK_EVT_2500M_TX_ACT (1 << 10) ++#define LED_BLK_EVT_FORCE (1 << 9) ++#define LED_BLK_EVT_100M_RX_ACT (1 << 3) ++#define LED_BLK_EVT_100M_TX_ACT (1 << 2) ++#define LED_BLK_EVT_1000M_RX_ACT (1 << 1) ++#define LED_BLK_EVT_1000M_TX_ACT (1 << 0) ++/* LED Blinking Event Option.E*/ ++#define LED_ENABLE 1 ++#define LED_DISABLE 0 ++ ++#define EN8811H_LED_COUNT 3 ++ ++#define LED_BCR (0x021) ++#define LED_BCR_EXT_CTRL (1 << 15) ++#define LED_BCR_CLK_EN (1 << 3) ++#define LED_BCR_TIME_TEST (1 << 2) ++#define LED_BCR_MODE_MASK (3) ++#define LED_BCR_MODE_DISABLE (0) ++#define LED_BCR_MODE_2LED (1) ++#define LED_BCR_MODE_3LED_1 (2) ++#define LED_BCR_MODE_3LED_2 (3) ++ ++#define LED_ON_DUR (0x022) ++#define LED_ON_DUR_MASK (0xffff) ++ ++#define LED_BLK_DUR (0x023) ++#define LED_BLK_DUR_MASK (0xffff) ++ ++#define LED_GPIO_SEL_MASK 0x7FFFFFF ++ ++#define UNIT_LED_BLINK_DURATION 1024 ++ ++#define INVALID_DATA 0xffff ++#define PBUS_INVALID_DATA 0xffffffff ++ ++struct air_base_t_led_cfg_s { ++ u16 en; ++ u16 gpio; ++ u16 pol; ++ u16 on_cfg; ++ u16 blk_cfg; ++}; ++ ++enum { ++ AIR_LED2_GPIO3 = 3, ++ AIR_LED1_GPIO4, ++ AIR_LED0_GPIO5, ++ AIR_LED_LAST ++}; ++ ++enum { ++ AIR_BASE_T_LED0, ++ AIR_BASE_T_LED1, ++ AIR_BASE_T_LED2, ++ AIR_BASE_T_LED3 ++}; ++ ++enum { ++ AIR_LED_BLK_DUR_32M, ++ AIR_LED_BLK_DUR_64M, ++ AIR_LED_BLK_DUR_128M, ++ AIR_LED_BLK_DUR_256M, ++ AIR_LED_BLK_DUR_512M, ++ AIR_LED_BLK_DUR_1024M, ++ AIR_LED_BLK_DUR_LAST ++}; ++ ++enum { ++ AIR_ACTIVE_LOW, ++ AIR_ACTIVE_HIGH, ++}; ++ ++enum { ++ AIR_LED_MODE_DISABLE, ++ AIR_LED_MODE_USER_DEFINE, ++ AIR_LED_MODE_LAST ++}; ++ ++#endif /* End of __EN8811H_MD32_H */ ++ +--- a/drivers/net/eth-phy-uclass.c ++++ b/drivers/net/eth-phy-uclass.c +@@ -155,7 +155,7 @@ static int eth_phy_of_to_plat(struct ude + return 0; + } + +-static void eth_phy_reset(struct udevice *dev, int value) ++void eth_phy_reset(struct udevice *dev, int value) + { + struct eth_phy_device_priv *uc_priv = dev_get_uclass_priv(dev); + u32 delay; +--- a/include/eth_phy.h ++++ b/include/eth_phy.h +@@ -14,5 +14,6 @@ int eth_phy_binds_nodes(struct udevice * + int eth_phy_set_mdio_bus(struct udevice *eth_dev, struct mii_dev *mdio_bus); + struct mii_dev *eth_phy_get_mdio_bus(struct udevice *eth_dev); + int eth_phy_get_addr(struct udevice *dev); ++void eth_phy_reset(struct udevice *dev, int value); + + #endif diff --git a/lede/package/boot/uboot-mediatek/patches/200-cmd-add-imsz-and-imszb.patch b/lede/package/boot/uboot-mediatek/patches/200-cmd-add-imsz-and-imszb.patch index ae7623086e..28175e02e8 100644 --- a/lede/package/boot/uboot-mediatek/patches/200-cmd-add-imsz-and-imszb.patch +++ b/lede/package/boot/uboot-mediatek/patches/200-cmd-add-imsz-and-imszb.patch @@ -1,6 +1,6 @@ --- a/cmd/bootm.c +++ b/cmd/bootm.c -@@ -259,6 +259,67 @@ U_BOOT_CMD( +@@ -245,6 +245,67 @@ U_BOOT_CMD( /* iminfo - print header info for a requested image */ /*******************************************************************/ #if defined(CONFIG_CMD_IMI) @@ -120,7 +120,7 @@ int arch, int ph_type, int bootstage_id, --- a/include/image.h +++ b/include/image.h -@@ -1047,6 +1047,7 @@ int fit_parse_subimage(const char *spec, +@@ -1049,6 +1049,7 @@ int fit_parse_subimage(const char *spec, ulong *addr, const char **image_name); int fit_get_subimage_count(const void *fit, int images_noffset); diff --git a/lede/package/boot/uboot-mediatek/patches/220-cmd-env-readmem.patch b/lede/package/boot/uboot-mediatek/patches/220-cmd-env-readmem.patch index d91b9904cb..7bf87ef7b5 100644 --- a/lede/package/boot/uboot-mediatek/patches/220-cmd-env-readmem.patch +++ b/lede/package/boot/uboot-mediatek/patches/220-cmd-env-readmem.patch @@ -1,6 +1,6 @@ --- a/cmd/Kconfig +++ b/cmd/Kconfig -@@ -602,6 +602,12 @@ config CMD_ENV_EXISTS +@@ -622,6 +622,12 @@ config CMD_ENV_EXISTS Check if a variable is defined in the environment for use in shell scripting. @@ -15,7 +15,7 @@ help --- a/cmd/nvedit.c +++ b/cmd/nvedit.c -@@ -408,6 +408,60 @@ int do_env_ask(struct cmd_tbl *cmdtp, in +@@ -385,6 +385,60 @@ int do_env_ask(struct cmd_tbl *cmdtp, in } #endif @@ -76,7 +76,7 @@ #if defined(CONFIG_CMD_ENV_CALLBACK) static int print_static_binding(const char *var_name, const char *callback_name, void *priv) -@@ -1228,6 +1282,9 @@ static struct cmd_tbl cmd_env_sub[] = { +@@ -1201,6 +1255,9 @@ static struct cmd_tbl cmd_env_sub[] = { U_BOOT_CMD_MKENT(load, 1, 0, do_env_load, "", ""), #endif U_BOOT_CMD_MKENT(print, CONFIG_SYS_MAXARGS, 1, do_env_print, "", ""), @@ -86,7 +86,7 @@ #if defined(CONFIG_CMD_RUN) U_BOOT_CMD_MKENT(run, CONFIG_SYS_MAXARGS, 1, do_run, "", ""), #endif -@@ -1319,6 +1376,9 @@ static char env_help_text[] = +@@ -1284,6 +1341,9 @@ U_BOOT_LONGHELP(env, #if defined(CONFIG_CMD_NVEDIT_EFI) "env print -e [-guid guid] [-n] [name ...] - print UEFI environment\n" #endif @@ -96,7 +96,7 @@ #if defined(CONFIG_CMD_RUN) "env run var [...] - run commands in an environment variable\n" #endif -@@ -1428,6 +1488,17 @@ U_BOOT_CMD( +@@ -1392,6 +1452,17 @@ U_BOOT_CMD( ); #endif diff --git a/lede/package/boot/uboot-mediatek/patches/230-cmd-add-pstore-check.patch b/lede/package/boot/uboot-mediatek/patches/230-cmd-add-pstore-check.patch index d0abcb1acc..48556937bd 100644 --- a/lede/package/boot/uboot-mediatek/patches/230-cmd-add-pstore-check.patch +++ b/lede/package/boot/uboot-mediatek/patches/230-cmd-add-pstore-check.patch @@ -67,7 +67,7 @@ U_BOOT_CMD_MKENT(display, 3, 0, pstore_display, "", ""), U_BOOT_CMD_MKENT(save, 4, 0, pstore_save, "", ""), }; -@@ -560,6 +613,8 @@ U_BOOT_CMD(pstore, 10, 0, do_pstore, +@@ -566,6 +619,8 @@ U_BOOT_CMD(pstore, 10, 0, do_pstore, " 'pmsg-size' is the size of the user space logs record.\n" " 'ecc-size' enables/disables ECC support and specifies ECC buffer size in\n" " bytes (0 disables it, 1 is a special value, means 16 bytes ECC).\n" diff --git a/lede/package/boot/uboot-mediatek/patches/250-fix-mmc-erase-timeout.patch b/lede/package/boot/uboot-mediatek/patches/250-fix-mmc-erase-timeout.patch new file mode 100644 index 0000000000..fd5fdd814b --- /dev/null +++ b/lede/package/boot/uboot-mediatek/patches/250-fix-mmc-erase-timeout.patch @@ -0,0 +1,11 @@ +--- a/drivers/mmc/mmc_write.c ++++ b/drivers/mmc/mmc_write.c +@@ -80,7 +80,7 @@ ulong mmc_berase(struct blk_desc *block_ + u32 start_rem, blkcnt_rem, erase_args = 0; + struct mmc *mmc = find_mmc_device(dev_num); + lbaint_t blk = 0, blk_r = 0; +- int timeout_ms = 1000; ++ int timeout_ms = blkcnt; + + if (!mmc) + return -1; diff --git a/lede/package/boot/uboot-mediatek/patches/290-mt7981-add-USB-nodes.patch b/lede/package/boot/uboot-mediatek/patches/290-mt7981-add-USB-nodes.patch new file mode 100644 index 0000000000..cb1648f5e8 --- /dev/null +++ b/lede/package/boot/uboot-mediatek/patches/290-mt7981-add-USB-nodes.patch @@ -0,0 +1,71 @@ +From cca5775031e4890f195246772e00f7f4ae7438f6 Mon Sep 17 00:00:00 2001 +From: John Crispin +Date: Mon, 19 Feb 2024 05:52:24 +0100 +Subject: [PATCH 1/2] mt7981.dtsi: add USB nodes + +Signed-off-by: John Crispin +--- + arch/arm/dts/mt7981.dtsi | 47 ++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 47 insertions(+) + +--- a/arch/arm/dts/mt7981.dtsi ++++ b/arch/arm/dts/mt7981.dtsi +@@ -6,6 +6,7 @@ + + #include + #include ++#include + #include + #include + #include +@@ -342,4 +343,50 @@ + status = "disabled"; + }; + ++ xhci: xhci@11200000 { ++ compatible = "mediatek,mt7981-xhci", ++ "mediatek,mtk-xhci"; ++ reg = <0x11200000 0x2e00>, ++ <0x11203e00 0x0100>; ++ reg-names = "mac", "ippc"; ++ interrupts = ; ++ phys = <&u2port0 PHY_TYPE_USB2>, ++ <&u3port0 PHY_TYPE_USB3>; ++ clocks = <&infracfg_ao CK_INFRA_IUSB_SYS_CK>, ++ <&infracfg_ao CK_INFRA_IUSB_CK>, ++ <&infracfg_ao CK_INFRA_IUSB_133_CK>, ++ <&infracfg_ao CK_INFRA_IUSB_66M_CK>, ++ <&topckgen CK_TOP_U2U3_XHCI_SEL>; ++ clock-names = "sys_ck", ++ "ref_ck", ++ "mcu_ck", ++ "dma_ck", ++ "xhci_ck"; ++ mediatek,u3p-dis-msk = <0x1>; ++ status = "okay"; ++ }; ++ ++ usbtphy: usb-phy@11e10000 { ++ compatible = "mediatek,mt7981", ++ "mediatek,generic-tphy-v2"; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ status = "okay"; ++ ++ u2port0: usb-phy@11e10000 { ++ reg = <0x11e10000 0x700>; ++ clocks = <&topckgen CK_TOP_USB_FRMCNT_SEL>; ++ clock-names = "ref"; ++ #phy-cells = <1>; ++ status = "okay"; ++ }; ++ ++ u3port0: usb-phy@11e10700 { ++ reg = <0x11e10700 0x900>; ++ clocks = <&topckgen CK_TOP_USB3_PHY_SEL>; ++ clock-names = "ref"; ++ #phy-cells = <1>; ++ status = "okay"; ++ }; ++ }; + }; diff --git a/lede/package/boot/uboot-mediatek/patches/300-force-pylibfdt-build.patch b/lede/package/boot/uboot-mediatek/patches/300-force-pylibfdt-build.patch deleted file mode 100644 index 89cdf60f95..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/300-force-pylibfdt-build.patch +++ /dev/null @@ -1,30 +0,0 @@ ---- a/Makefile -+++ b/Makefile -@@ -2006,26 +2006,7 @@ endif - # Check dtc and pylibfdt, if DTC is provided, else build them - PHONY += scripts_dtc - scripts_dtc: scripts_basic -- $(Q)if test "$(DTC)" = "$(DTC_INTREE)"; then \ -- $(MAKE) $(build)=scripts/dtc; \ -- else \ -- if ! $(DTC) -v >/dev/null; then \ -- echo '*** Failed to check dtc version: $(DTC)'; \ -- false; \ -- else \ -- if test "$(call dtc-version)" -lt $(DTC_MIN_VERSION); then \ -- echo '*** Your dtc is too old, please upgrade to dtc $(DTC_MIN_VERSION) or newer'; \ -- false; \ -- else \ -- if [ -n "$(CONFIG_PYLIBFDT)" ]; then \ -- if ! echo "import libfdt" | $(PYTHON3) 2>/dev/null; then \ -- echo '*** pylibfdt does not seem to be available with $(PYTHON3)'; \ -- false; \ -- fi; \ -- fi; \ -- fi; \ -- fi; \ -- fi -+ $(MAKE) $(build)=scripts/dtc - - # --------------------------------------------------------------------------- - quiet_cmd_cpp_lds = LDS $@ diff --git a/lede/package/boot/uboot-mediatek/patches/300-mt7623-fix-mmc-get-env-dev.patch b/lede/package/boot/uboot-mediatek/patches/300-mt7623-fix-mmc-get-env-dev.patch new file mode 100644 index 0000000000..86c48badda --- /dev/null +++ b/lede/package/boot/uboot-mediatek/patches/300-mt7623-fix-mmc-get-env-dev.patch @@ -0,0 +1,46 @@ +--- a/board/mediatek/mt7623/mt7623_rfb.c ++++ b/board/mediatek/mt7623/mt7623_rfb.c +@@ -5,6 +5,7 @@ + + #include + #include ++#include + #include + + DECLARE_GLOBAL_DATA_PTR; +@@ -22,8 +23,9 @@ int mmc_get_boot_dev(void) + { + int g_mmc_devid = -1; + char *uflag = (char *)0x81DFFFF0; ++ struct blk_desc *desc; + +- if (!find_mmc_device(1)) ++ if (blk_get_device_by_str("mmc", "1", &desc) < 0) + return 0; + + if (strncmp(uflag,"eMMC",4)==0) { +@@ -38,6 +40,23 @@ int mmc_get_boot_dev(void) + + int mmc_get_env_dev(void) + { +- return mmc_get_boot_dev(); ++ struct udevice *dev; ++ const char *mmcdev; ++ ++ switch (mmc_get_boot_dev()) { ++ case 0: ++ mmcdev = "mmc@11230000"; ++ break; ++ case 1: ++ mmcdev = "mmc@11240000"; ++ break; ++ default: ++ return -1; ++ } ++ ++ if (uclass_get_device_by_name(UCLASS_MMC, mmcdev, &dev)) ++ return -1; ++ ++ return dev_seq(dev); + } + #endif diff --git a/lede/package/boot/uboot-mediatek/patches/302-mt7623-generic-reset-button-ignore-env.patch b/lede/package/boot/uboot-mediatek/patches/302-mt7623-generic-reset-button-ignore-env.patch index 928dfe8428..b8d89058a2 100644 --- a/lede/package/boot/uboot-mediatek/patches/302-mt7623-generic-reset-button-ignore-env.patch +++ b/lede/package/boot/uboot-mediatek/patches/302-mt7623-generic-reset-button-ignore-env.patch @@ -1,6 +1,6 @@ --- a/board/mediatek/mt7623/mt7623_rfb.c +++ b/board/mediatek/mt7623/mt7623_rfb.c -@@ -4,8 +4,17 @@ +@@ -4,9 +4,18 @@ */ #include @@ -9,6 +9,7 @@ +#include +#include #include + #include #include +#include + @@ -18,8 +19,8 @@ DECLARE_GLOBAL_DATA_PTR; -@@ -41,3 +50,25 @@ int mmc_get_env_dev(void) - return mmc_get_boot_dev(); +@@ -60,3 +69,25 @@ int mmc_get_env_dev(void) + return dev_seq(dev); } #endif + diff --git a/lede/package/boot/uboot-mediatek/patches/310-mt7988-select-rootdisk.patch b/lede/package/boot/uboot-mediatek/patches/310-mt7988-select-rootdisk.patch new file mode 100644 index 0000000000..28d7e0a3f6 --- /dev/null +++ b/lede/package/boot/uboot-mediatek/patches/310-mt7988-select-rootdisk.patch @@ -0,0 +1,67 @@ +--- a/board/mediatek/mt7988/mt7988_rfb.c ++++ b/board/mediatek/mt7988/mt7988_rfb.c +@@ -11,7 +11,9 @@ + #include + #include + #include ++#include + #include ++#include + + #ifndef CONFIG_RESET_BUTTON_LABEL + #define CONFIG_RESET_BUTTON_LABEL "reset" +@@ -44,3 +46,54 @@ int board_late_init(void) + env_relocate(); + return 0; + } ++ ++#define MT7988_BOOT_NOR 0 ++#define MT7988_BOOT_SPIM_NAND 1 ++#define MT7988_BOOT_EMMC 2 ++#define MT7988_BOOT_SNFI_NAND 3 ++ ++int ft_system_setup(void *blob, struct bd_info *bd) ++{ ++ const u32 *media_handle_p; ++ int chosen, len, ret; ++ const char *media; ++ u32 media_handle; ++ ++ switch ((readl(0x1001f6f0) & 0xc00) >> 10) { ++ case MT7988_BOOT_NOR: ++ media = "rootdisk-nor"; ++ break ++ ;; ++ case MT7988_BOOT_SPIM_NAND: ++ media = "rootdisk-spim-nand"; ++ break ++ ;; ++ case MT7988_BOOT_EMMC: ++ media = "rootdisk-emmc"; ++ break ++ ;; ++ case MT7988_BOOT_SNFI_NAND: ++ media = "rootdisk-sd"; ++ break ++ ;; ++ } ++ ++ chosen = fdt_path_offset(blob, "/chosen"); ++ if (chosen <= 0) ++ return 0; ++ ++ media_handle_p = fdt_getprop(blob, chosen, media, &len); ++ if (media_handle_p <= 0 || len != 4) ++ return 0; ++ ++ media_handle = *media_handle_p; ++ ret = fdt_setprop(blob, chosen, "rootdisk", &media_handle, sizeof(media_handle)); ++ if (ret) { ++ printf("cannot set media phandle %s as rootdisk /chosen node\n", media); ++ return ret; ++ } ++ ++ printf("set /chosen/rootdisk to bootrom media: %s (phandle 0x%08x)\n", media, fdt32_to_cpu(media_handle)); ++ ++ return 0; ++} diff --git a/lede/package/boot/uboot-mediatek/patches/311-mt7986-select-rootdisk.patch b/lede/package/boot/uboot-mediatek/patches/311-mt7986-select-rootdisk.patch new file mode 100644 index 0000000000..3312162765 --- /dev/null +++ b/lede/package/boot/uboot-mediatek/patches/311-mt7986-select-rootdisk.patch @@ -0,0 +1,67 @@ +--- a/board/mediatek/mt7986/mt7986_rfb.c ++++ b/board/mediatek/mt7986/mt7986_rfb.c +@@ -11,7 +11,9 @@ + #include + #include + #include ++#include + #include ++#include + + #ifndef CONFIG_RESET_BUTTON_LABEL + #define CONFIG_RESET_BUTTON_LABEL "reset" +@@ -83,3 +85,54 @@ int board_nmbm_init(void) + + return 0; + } ++ ++#define MT7986_BOOT_NOR 0 ++#define MT7986_BOOT_SPIM_NAND 1 ++#define MT7986_BOOT_EMMC 2 ++#define MT7986_BOOT_SNFI_NAND 3 ++ ++int ft_system_setup(void *blob, struct bd_info *bd) ++{ ++ const u32 *media_handle_p; ++ int chosen, len, ret; ++ const char *media; ++ u32 media_handle; ++ ++ switch ((readl(0x1001f6f0) & 0x300) >> 8) { ++ case MT7986_BOOT_NOR: ++ media = "rootdisk-nor"; ++ break ++ ;; ++ case MT7986_BOOT_SPIM_NAND: ++ media = "rootdisk-spim-nand"; ++ break ++ ;; ++ case MT7986_BOOT_EMMC: ++ media = "rootdisk-emmc"; ++ break ++ ;; ++ case MT7986_BOOT_SNFI_NAND: ++ media = "rootdisk-sd"; ++ break ++ ;; ++ } ++ ++ chosen = fdt_path_offset(blob, "/chosen"); ++ if (chosen <= 0) ++ return 0; ++ ++ media_handle_p = fdt_getprop(blob, chosen, media, &len); ++ if (media_handle_p <= 0 || len != 4) ++ return 0; ++ ++ media_handle = *media_handle_p; ++ ret = fdt_setprop(blob, chosen, "rootdisk", &media_handle, sizeof(media_handle)); ++ if (ret) { ++ printf("cannot set media phandle %s as rootdisk /chosen node\n", media); ++ return ret; ++ } ++ ++ printf("set /chosen/rootdisk to bootrom media: %s (phandle 0x%08x)\n", media, fdt32_to_cpu(media_handle)); ++ ++ return 0; ++} diff --git a/lede/package/boot/uboot-mediatek/patches/312-mt7622-select-rootdisk.patch b/lede/package/boot/uboot-mediatek/patches/312-mt7622-select-rootdisk.patch new file mode 100644 index 0000000000..70cbf6b463 --- /dev/null +++ b/lede/package/boot/uboot-mediatek/patches/312-mt7622-select-rootdisk.patch @@ -0,0 +1,141 @@ +--- a/board/mediatek/mt7622/mt7622_rfb.c ++++ b/board/mediatek/mt7622/mt7622_rfb.c +@@ -11,7 +11,9 @@ + #include + #include + #include ++#include + #include ++#include + + #ifndef CONFIG_RESET_BUTTON_LABEL + #define CONFIG_RESET_BUTTON_LABEL "reset" +@@ -22,10 +24,43 @@ + #include + #include + ++#define MT7622_TOPRGUSTRAP_PAR 0x10212060 ++#define MT7622_BOOT_SEQ_MASK 0x18 ++#define MT7622_BOOT_SEQ_SHIFT 3 ++#define MT7622_BOOT_SEQ_NOR_EMMC_SDXC 0x0 ++#define MT7622_BOOT_SEQ_SPI_NAND_EMMC_SDXC 0x1 ++#define MT7622_BOOT_SEQ_NAND_EMMC_SDXC 0x2 ++#define MT7622_BOOT_SEQ_SDXC_EMMC_NAND 0x3 ++ ++#define MT7622_GPIO_MODE0 0x10211300 ++#define MT7622_GPIO_NAND_MODE_MASK 0x00f00000 ++#define MT7622_GPIO_NAND_MODE_SHIFT 20 ++#define MT7622_GPIO_NAND_MODE_EMMC 0x2 ++#define MT7622_GPIO_RGMII_MODE_MASK 0x0000f000 ++#define MT7622_GPIO_RGMII_MODE_SHIFT 12 ++#define MT7622_GPIO_RGMII_MODE_SDCX 0x2 ++#define MT7622_GPIO_SPI_MODE_MASK 0x00000f00 ++#define MT7622_GPIO_SPI_MODE_SHIFT 8 ++#define MT7622_GPIO_SPI_MODE_NAND 0x2 ++ ++#define MT7622_MSDC_INT 0x1124000C ++#define MT7622_MSDC_INT_BD_CS_ERR 0x200 ++ + DECLARE_GLOBAL_DATA_PTR; + ++static int gpio_mode0; ++static int msdc_int; ++ + int board_init(void) + { ++ /* ++ * Save content of GPIO_MODE0 as left behind by the BootROM. ++ * Also grab MSDC1 INT status to see if BootROM has been reading ++ * from SD card. ++ * Together this will allow to infer the device used for booting. ++ */ ++ gpio_mode0 = readl(MT7622_GPIO_MODE0); ++ msdc_int = readl(MT7622_MSDC_INT); + return 0; + } + +@@ -83,3 +118,84 @@ int board_nmbm_init(void) + + return 0; + } ++ ++int ft_system_setup(void *blob, struct bd_info *bd) ++{ ++ bool pinctrl_set_mmc = false; ++ bool pinctrl_set_snfi = false; ++ bool pinctrl_set_emmc = false; ++ bool msdc_bd_cs_err = false; ++ ++ const u32 *media_handle_p; ++ int chosen, len, ret; ++ const char *media; ++ u32 media_handle, strap; ++ ++ if ((gpio_mode0 & MT7622_GPIO_RGMII_MODE_MASK) >> ++ MT7622_GPIO_RGMII_MODE_SHIFT == MT7622_GPIO_RGMII_MODE_SDCX) ++ pinctrl_set_mmc = true; ++ ++ if ((gpio_mode0 & MT7622_GPIO_SPI_MODE_MASK) >> ++ MT7622_GPIO_SPI_MODE_SHIFT == MT7622_GPIO_SPI_MODE_NAND) ++ pinctrl_set_snfi = true; ++ ++ if ((gpio_mode0 & MT7622_GPIO_NAND_MODE_MASK) >> ++ MT7622_GPIO_NAND_MODE_SHIFT == MT7622_GPIO_NAND_MODE_EMMC) ++ pinctrl_set_emmc = true; ++ ++ if (msdc_int & MT7622_MSDC_INT_BD_CS_ERR) ++ msdc_bd_cs_err = true; ++ ++ strap = readl(MT7622_TOPRGUSTRAP_PAR); ++ strap &= MT7622_BOOT_SEQ_MASK; ++ strap >>= MT7622_BOOT_SEQ_SHIFT; ++ switch (strap) { ++ case MT7622_BOOT_SEQ_NOR_EMMC_SDXC: ++ if (!pinctrl_set_emmc) ++ media = "rootdisk-nor"; ++ else if (pinctrl_set_mmc) ++ media = "rootdisk-emmc"; ++ else ++ media = "rootdisk-sd"; ++ break ++ ;; ++ case MT7622_BOOT_SEQ_SPI_NAND_EMMC_SDXC: ++ if (pinctrl_set_snfi) ++ media = "rootdisk-snfi"; ++ else if (pinctrl_set_emmc) ++ media = "rootdisk-emmc"; ++ else ++ media = "rootdisk-sd"; ++ break ++ ;; ++ case MT7622_BOOT_SEQ_NAND_EMMC_SDXC: ++ case MT7622_BOOT_SEQ_SDXC_EMMC_NAND: ++ if (!pinctrl_set_emmc && pinctrl_set_mmc) ++ media = "rootdisk-nand"; ++ else if (pinctrl_set_emmc) ++ media = "rootdisk-emmc"; ++ else ++ media = "rootdisk-sd"; ++ break ++ ;; ++ } ++ ++ chosen = fdt_path_offset(blob, "/chosen"); ++ if (chosen <= 0) ++ return 0; ++ ++ media_handle_p = fdt_getprop(blob, chosen, media, &len); ++ if (media_handle_p <= 0 || len != 4) ++ return 0; ++ ++ media_handle = *media_handle_p; ++ ret = fdt_setprop(blob, chosen, "rootdisk", &media_handle, sizeof(media_handle)); ++ if (ret) { ++ printf("cannot set media phandle %s as rootdisk /chosen node\n", media); ++ return ret; ++ } ++ ++ printf("set /chosen/rootdisk to bootrom media: %s (phandle 0x%08x)\n", media, fdt32_to_cpu(media_handle)); ++ ++ return 0; ++} diff --git a/lede/package/boot/uboot-mediatek/patches/313-mt7623-select-rootdisk.patch b/lede/package/boot/uboot-mediatek/patches/313-mt7623-select-rootdisk.patch new file mode 100644 index 0000000000..0089307bbd --- /dev/null +++ b/lede/package/boot/uboot-mediatek/patches/313-mt7623-select-rootdisk.patch @@ -0,0 +1,46 @@ +--- a/board/mediatek/mt7623/mt7623_rfb.c ++++ b/board/mediatek/mt7623/mt7623_rfb.c +@@ -91,3 +91,43 @@ int board_late_init(void) + env_relocate(); + return 0; + } ++ ++int ft_system_setup(void *blob, struct bd_info *bd) ++{ ++ const u32 *media_handle_p; ++ int chosen, len, ret; ++ const char *media; ++ u32 media_handle; ++ ++#ifdef CONFIG_MMC ++ switch (mmc_get_boot_dev()) { ++ case 0: ++ media = "rootdisk-emmc"; ++ break ++ ;; ++ case 1: ++ media = "rootdisk-sd"; ++ break ++ ;; ++ } ++ ++ chosen = fdt_path_offset(blob, "/chosen"); ++ if (chosen <= 0) ++ return 0; ++ ++ media_handle_p = fdt_getprop(blob, chosen, media, &len); ++ if (media_handle_p <= 0 || len != 4) ++ return 0; ++ ++ media_handle = *media_handle_p; ++ ret = fdt_setprop(blob, chosen, "rootdisk", &media_handle, sizeof(media_handle)); ++ if (ret) { ++ printf("cannot set media phandle %s as rootdisk /chosen node\n", media); ++ return ret; ++ } ++ ++ printf("set /chosen/rootdisk to bootrom media: %s (phandle 0x%08x)\n", media, fdt32_to_cpu(media_handle)); ++#endif ++ ++ return 0; ++} diff --git a/lede/package/boot/uboot-mediatek/patches/400-update-bpir2-defconfig.patch b/lede/package/boot/uboot-mediatek/patches/400-update-bpir2-defconfig.patch index 7ebe5c0fc7..ab3424e6b5 100644 --- a/lede/package/boot/uboot-mediatek/patches/400-update-bpir2-defconfig.patch +++ b/lede/package/boot/uboot-mediatek/patches/400-update-bpir2-defconfig.patch @@ -1,6 +1,6 @@ --- a/configs/mt7623n_bpir2_defconfig +++ b/configs/mt7623n_bpir2_defconfig -@@ -7,35 +7,105 @@ CONFIG_SYS_MALLOC_F_LEN=0x4000 +@@ -7,34 +7,106 @@ CONFIG_SYS_MALLOC_F_LEN=0x4000 CONFIG_NR_DRAM_BANKS=1 CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x81ffff10 @@ -8,19 +8,17 @@ +CONFIG_ENV_SIZE=0x10000 CONFIG_ENV_OFFSET=0x100000 CONFIG_DEFAULT_DEVICE_TREE="mt7623n-bananapi-bpi-r2" --CONFIG_SYS_PROMPT="U-Boot> " -+CONFIG_USE_DEFAULT_ENV_FILE=y -+CONFIG_SYS_PROMPT="MT7623> " CONFIG_TARGET_MT7623=y CONFIG_SYS_LOAD_ADDR=0x84000000 CONFIG_FIT=y --CONFIG_FIT_VERBOSE=y + CONFIG_FIT_VERBOSE=y +CONFIG_FIT_ENABLE_SHA256_SUPPORT=y +CONFIG_LED=y +CONFIG_LED_BLINK=y +CONFIG_LED_GPIO=y +CONFIG_LOGLEVEL=7 +CONFIG_LOG=y ++CONFIG_OF_SYSTEM_SETUP=y +CONFIG_AUTOBOOT_KEYED=y +CONFIG_AUTOBOOT_MENU_SHOW=y +CONFIG_BOARD_LATE_INIT=y @@ -38,6 +36,9 @@ +CONFIG_CFB_CONSOLE_ANSI=y +CONFIG_CMD_ENV_FLAGS=y # CONFIG_DISPLAY_BOARDINFO is not set +-CONFIG_SYS_PROMPT="U-Boot> " ++CONFIG_USE_DEFAULT_ENV_FILE=y ++CONFIG_SYS_PROMPT="MT7623> " CONFIG_SYS_MAXARGS=8 CONFIG_SYS_PBSIZE=1049 CONFIG_SYS_BOOTM_LEN=0x4000000 @@ -70,7 +71,6 @@ CONFIG_CMD_MMC=y CONFIG_CMD_READ=y -# CONFIG_CMD_SETEXPR is not set - # CONFIG_CMD_NFS is not set +CONFIG_CMD_SF_TEST=y +CONFIG_CMD_PING=y +CONFIG_CMD_PXE=y @@ -111,7 +111,7 @@ CONFIG_USE_IPADDR=y CONFIG_IPADDR="192.168.1.1" CONFIG_USE_SERVERIP=y -@@ -47,6 +117,12 @@ CONFIG_CLK=y +@@ -46,6 +118,12 @@ CONFIG_CLK=y CONFIG_SUPPORT_EMMC_BOOT=y CONFIG_MMC_HS400_SUPPORT=y CONFIG_MMC_MTK=y @@ -124,7 +124,7 @@ CONFIG_PHY_FIXED=y CONFIG_MEDIATEK_ETH=y CONFIG_PINCTRL=y -@@ -56,10 +132,13 @@ CONFIG_POWER_DOMAIN=y +@@ -55,10 +133,13 @@ CONFIG_POWER_DOMAIN=y CONFIG_MTK_POWER_DOMAIN=y CONFIG_DM_SERIAL=y CONFIG_MTK_SERIAL=y @@ -140,7 +140,7 @@ # CONFIG_EFI_GRUB_ARM32_WORKAROUND is not set --- /dev/null +++ b/bananapi_bpi-r2_env -@@ -0,0 +1,70 @@ +@@ -0,0 +1,69 @@ +ipaddr=192.168.1.1 +serverip=192.168.1.254 +loadaddr=0x88000000 @@ -193,14 +193,13 @@ +sdmmc_write_recovery=iminfo $fileaddr && mmc dev 1 && part start mmc 1 $part_recovery part_addr && part size mmc 1 $part_recovery part_size && run mmc_write_vol +_checkbootedfrom=setenv _checkbootedfrom ; if itest.l *81dffff0 == 434d4d65 ; then setenv bootedfrom eMMC ; else setenv bootedfrom SD ; fi +_init_env=setenv _init_env ; setenv _create_env ; saveenv ; saveenv -+_firstboot=setenv _firstboot ; led $bootled_pwr off ;led $bootled_rec on ; run _checkbootedfrom _switch_to_menu _update_bootdev _update_bootcmd _update_bootcmd2 _init_env boot_first ++_firstboot=setenv _firstboot ; led $bootled_pwr off ;led $bootled_rec on ; run _checkbootedfrom _switch_to_menu _update_bootcmd _update_bootcmd2 _init_env boot_first +_set_bootcmd_sdmmc=setenv boot_production "led $bootled_rec off ; led $bootled_pwr on ; run sdmmc_read_production && bootm $loadaddr ; led $bootled_pwr off" +_set_bootcmd_emmc=setenv boot_production "led $bootled_rec off ; led $bootled_pwr on ; run emmc_read_production && bootm $loadaddr ; led $bootled_pwr off" +_update_bootcmd=setenv _update_bootcmd ; if test "$bootedfrom" = "SD" ; then run _set_bootcmd_sdmmc ; else run _set_bootcmd_emmc ; fi ; setenv _set_bootcmd_sdmmc ; setenv _set_bootcmd_emmc +_set_bootcmd2_sdmmc=setenv boot_recovery "led $bootled_pwr off ; led $bootled_rec on ; run sdmmc_read_recovery && bootm $loadaddr ; led $bootled_rec off" +_set_bootcmd2_emmc=setenv boot_recovery "led $bootled_pwr off ; led $bootled_rec on ; run emmc_read_recovery && bootm $loadaddr ; led $bootled_rec off" +_update_bootcmd2=setenv _update_bootcmd2 ; if test "$bootedfrom" = "SD" ; then run _set_bootcmd2_sdmmc ; else run _set_bootcmd2_emmc ; fi ; setenv _set_bootcmd2_sdmmc ; setenv _set_bootcmd2_emmc -+_update_bootdev=setenv _update_bootdev ; if test "$bootedfrom" = "SD" ; then setenv bootargs "$console root=/dev/mmcblk1p65" ; else setenv bootargs "$console root=/dev/mmcblk0p65" ; fi +_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title +_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title [$bootedfrom] $ver" ; run _set_bm2 +_set_bm2=setenv _set_bm2 ; setenv bootmenu_2 "Boot production system from $bootedfrom.=run boot_production ; run bootmenu_confirm_return" ; run _set_bm3 diff --git a/lede/package/boot/uboot-mediatek/patches/401-update-u7623-defconfig.patch b/lede/package/boot/uboot-mediatek/patches/401-update-u7623-defconfig.patch index 453456c94f..58c62dc3ef 100644 --- a/lede/package/boot/uboot-mediatek/patches/401-update-u7623-defconfig.patch +++ b/lede/package/boot/uboot-mediatek/patches/401-update-u7623-defconfig.patch @@ -1,6 +1,6 @@ --- a/configs/mt7623a_unielec_u7623_02_defconfig +++ b/configs/mt7623a_unielec_u7623_02_defconfig -@@ -7,34 +7,110 @@ CONFIG_SYS_MALLOC_F_LEN=0x4000 +@@ -7,33 +7,109 @@ CONFIG_SYS_MALLOC_F_LEN=0x4000 CONFIG_NR_DRAM_BANKS=1 CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x81ffff10 @@ -8,13 +8,10 @@ +CONFIG_ENV_SIZE=0x10000 CONFIG_ENV_OFFSET=0x100000 CONFIG_DEFAULT_DEVICE_TREE="mt7623a-unielec-u7623-02-emmc" --CONFIG_SYS_PROMPT="U-Boot> " -+CONFIG_USE_DEFAULT_ENV_FILE=y -+CONFIG_SYS_PROMPT="MT7623> " CONFIG_TARGET_MT7623=y CONFIG_SYS_LOAD_ADDR=0x84000000 CONFIG_FIT=y --CONFIG_FIT_VERBOSE=y + CONFIG_FIT_VERBOSE=y +CONFIG_FIT_ENABLE_SHA256_SUPPORT=y +CONFIG_LED=y +CONFIG_LED_BLINK=y @@ -38,6 +35,9 @@ +CONFIG_CFB_CONSOLE_ANSI=y +CONFIG_CMD_ENV_FLAGS=y # CONFIG_DISPLAY_BOARDINFO is not set +-CONFIG_SYS_PROMPT="U-Boot> " ++CONFIG_USE_DEFAULT_ENV_FILE=y ++CONFIG_SYS_PROMPT="MT7623> " CONFIG_SYS_MAXARGS=8 CONFIG_SYS_PBSIZE=1049 CONFIG_SYS_BOOTM_LEN=0x4000000 @@ -71,7 +71,6 @@ CONFIG_CMD_MMC=y CONFIG_CMD_READ=y -# CONFIG_CMD_SETEXPR is not set - # CONFIG_CMD_NFS is not set +CONFIG_CMD_SF_TEST=y +CONFIG_CMD_PING=y +CONFIG_CMD_PXE=y @@ -110,13 +109,12 @@ CONFIG_SYS_RELOC_GD_ENV_ADDR=y +CONFIG_SYS_MMC_ENV_DEV=0 +CONFIG_ENV_OVERWRITE=y -+CONFIG_ENV_IS_IN_MMC=y CONFIG_NET_RANDOM_ETHADDR=y +CONFIG_NETCONSOLE=y CONFIG_USE_IPADDR=y CONFIG_IPADDR="192.168.1.1" CONFIG_USE_SERVERIP=y -@@ -46,6 +122,11 @@ CONFIG_CLK=y +@@ -45,6 +121,11 @@ CONFIG_CLK=y CONFIG_SUPPORT_EMMC_BOOT=y CONFIG_MMC_HS400_SUPPORT=y CONFIG_MMC_MTK=y @@ -128,7 +126,7 @@ CONFIG_PHY_FIXED=y CONFIG_MEDIATEK_ETH=y CONFIG_PINCTRL=y -@@ -55,9 +136,12 @@ CONFIG_POWER_DOMAIN=y +@@ -54,9 +135,12 @@ CONFIG_POWER_DOMAIN=y CONFIG_MTK_POWER_DOMAIN=y CONFIG_DM_SERIAL=y CONFIG_MTK_SERIAL=y @@ -188,7 +186,7 @@ +reset_factory=eraseenv && reset +_init_env=setenv _init_env ; saveenv ; saveenv +_firstboot=setenv _firstboot ; run _switch_to_menu _update_bootdev _init_env boot_first -+_update_bootdev=setenv _update_bootdev ; setenv bootargs "$console root=/dev/mmcblk0p65" ++_update_bootdev=setenv _update_bootdev ; setenv bootargs "$console root=/dev/fit0 rootwait" +_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title +_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" --- a/arch/arm/dts/mt7623a-unielec-u7623-02-emmc.dts diff --git a/lede/package/boot/uboot-mediatek/patches/403-add-bananapi_bpi-r64-snand.patch b/lede/package/boot/uboot-mediatek/patches/403-add-bananapi_bpi-r64-snand.patch index c9da03c725..2ec5770806 100644 --- a/lede/package/boot/uboot-mediatek/patches/403-add-bananapi_bpi-r64-snand.patch +++ b/lede/package/boot/uboot-mediatek/patches/403-add-bananapi_bpi-r64-snand.patch @@ -9,7 +9,7 @@ ethernet0 = ð }; -@@ -208,17 +208,11 @@ +@@ -208,16 +208,27 @@ }; }; @@ -22,12 +22,26 @@ + pinctrl-0 = <&snfi_pins>; + quad-spi; status = "okay"; -- + - spi-flash@0{ - compatible = "jedec,spi-nor"; - reg = <0>; - bootph-all; -- }; ++ partitions { ++ compatible = "fixed-partitions"; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ partition@0 { ++ label = "bl2"; ++ reg = <0x0 0x80000>; ++ }; ++ ++ partition@80000 { ++ label = "ubi"; ++ reg = <0x80000 0x7f80000>; ++ compatible = "linux,ubi"; ++ }; + }; }; - &uart0 { diff --git a/lede/package/boot/uboot-mediatek/patches/404-add-bananapi_bpi-r64_defconfigs.patch b/lede/package/boot/uboot-mediatek/patches/404-add-bananapi_bpi-r64_defconfigs.patch index f3d9499e17..6ee8729674 100644 --- a/lede/package/boot/uboot-mediatek/patches/404-add-bananapi_bpi-r64_defconfigs.patch +++ b/lede/package/boot/uboot-mediatek/patches/404-add-bananapi_bpi-r64_defconfigs.patch @@ -17,6 +17,7 @@ +CONFIG_DEBUG_UART_CLOCK=25000000 +CONFIG_DEFAULT_DEVICE_TREE="mt7622-bananapi-bpi-r64" +CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_OF_SYSTEM_SETUP=y +CONFIG_DEBUG_UART=y +CONFIG_DEFAULT_ENV_FILE="bananapi_bpi-r64-sdmmc_env" +CONFIG_NET_RANDOM_ETHADDR=y @@ -126,7 +127,6 @@ +CONFIG_PCI=y +CONFIG_MTD=y +CONFIG_MTD_UBI_FASTMAP=y -+CONFIG_MTDPARTS_DEFAULT="mtdparts=spi-nand0:512k(bl2),2048k(fip),-(ubi)" +CONFIG_DM_PCI=y +CONFIG_PCIE_MEDIATEK=y +CONFIG_PINCTRL=y @@ -167,11 +167,11 @@ +CONFIG_SERVERIP="192.168.1.254" --- /dev/null +++ b/bananapi_bpi-r64-sdmmc_env -@@ -0,0 +1,82 @@ +@@ -0,0 +1,81 @@ +ipaddr=192.168.1.1 +serverip=192.168.1.254 +loadaddr=0x48000000 -+bootargs=root=/dev/mmcblk1p65 ++bootargs=root=/dev/fit0 rootwait +bootcmd=if pstore check ; then run boot_recovery ; else run boot_sdmmc ; fi +bootconf=config-1#mt7622-bananapi-bpi-r64-pcie1 +bootconf_pcie=config-1#mt7622-bananapi-bpi-r64-pcie1 @@ -210,7 +210,6 @@ +boot_ubi=ubi part ubi && setenv bootargs && run boot_ubi_production ; run boot_ubi_recovery +boot_ubi_production=led $bootled_pwr on ; run ubi_read_production && bootm $loadaddr ; led $bootled_pwr off +boot_ubi_recovery=led $bootled_rec on ; run ubi_read_recovery ; bootm $loadaddr#$bootconf ; ubi remove recovery ; led $bootled_rec off -+check_ubi=ubi part ubi || run ubi_format +emmc_init=run emmc_init_bl && run emmc_init_openwrt ; env default bootcmd ; saveenv ; saveenv +emmc_init_bl=run sdmmc_read_emmc_bl2 && run emmc_write_bl2 && run sdmmc_read_emmc_hdr && run emmc_write_hdr && run sdmmc_read_emmc_fip && run emmc_write_fip +emmc_init_openwrt=run sdmmc_read_recovery && iminfo $loadaddr && run emmc_write_recovery ; run sdmmc_read_production && iminfo $loadaddr && run emmc_write_production @@ -220,7 +219,7 @@ +emmc_write_production=mmc dev 0 && part start mmc 0 $part_default part_addr && part size mmc 0 $part_default part_size && run mmc_write_vol +emmc_write_recovery=mmc dev 0 && part start mmc 0 $part_recovery part_addr && part size mmc 0 $part_recovery part_size && run mmc_write_vol +mmc_write_vol=imszb $loadaddr image_size && test 0x$image_size -le 0x$part_size && mmc erase 0x$part_addr 0x$image_size && mmc write $loadaddr 0x$part_addr 0x$image_size -+mmc_read_vol=mmc read $loadaddr $part_addr 0x8 && imszb $loadaddr image_size && test 0x$image_size -le 0x$part_size && mmc read $loadaddr 0x$part_addr 0x$image_size && setexpr filesize $image_size * 0x200 ++mmc_read_vol=mmc read $loadaddr $part_addr 0x100 && imszb $loadaddr image_size && test 0x$image_size -le 0x$part_size && mmc read $loadaddr 0x$part_addr 0x$image_size && setexpr filesize $image_size * 0x200 +part_default=production +part_recovery=recovery +reset_factory=eraseenv && reset @@ -233,26 +232,26 @@ +sdmmc_read_snand_fip=mmc dev 1 && part start mmc 1 install part_addr && setexpr offset $part_addr + 0x2400 && mmc read $loadaddr $offset 0x1000 +sdmmc_write_production=mmc dev 1 && part start mmc 1 $part_default part_addr && part size mmc 1 $part_default part_size && run mmc_write_vol +sdmmc_write_recovery=mmc dev 1 && part start mmc 1 $part_recovery part_addr && part size mmc 1 $part_recovery part_size && run mmc_write_vol -+snand_write_fip=mtd erase fip && mtd write fip $loadaddr -+snand_write_bl2=mtd erase bl2 && mtd write bl2 $loadaddr -+ubi_create_env=ubi create ubootenv 0x100000 dynamic 0 ; ubi create ubootenv2 0x100000 dynamic 1 ; ubi create fit 0x100000 dynamic 2 ; ubi create recovery 0x100000 dynamic 3 -+ubi_format=ubi detach ; mtd erase ubi && ubi part ubi ; reset -+ubi_init=run ubi_init_bl && ubi detach && mtd erase ubi && ubi part ubi && run ubi_create_env && run ubi_init_openwrt ++snand_write_bl2=mtd erase bl2 && mtd write bl2 $loadaddr 0x0 0x20000 && mtd write bl2 $loadaddr 0x20000 0x20000 && mtd write bl2 $loadaddr 0x40000 0x20000 && mtd write bl2 $loadaddr 0x60000 0x20000 ++ubi_create_env=ubi create ubootenv 0x1f000 dynamic ; ubi create ubootenv2 0x1f000 dynamic ++ubi_format=ubi detach ; mtd erase ubi && ubi part ubi ++ubi_init=run ubi_format && run ubi_init_bl && run ubi_create_env && run ubi_init_openwrt +ubi_init_openwrt=run sdmmc_read_recovery && iminfo $loadaddr && run ubi_write_recovery ; run sdmmc_read_production && iminfo $loadaddr && run ubi_write_production -+ubi_init_bl=run sdmmc_read_snand_bl2 && run snand_write_bl2 && run sdmmc_read_snand_fip && run snand_write_fip ++ubi_init_bl=run sdmmc_read_snand_bl2 && run snand_write_bl2 && run sdmmc_read_snand_fip && run ubi_write_fip +ubi_prepare_rootfs=if ubi check rootfs_data ; then else if env exists rootfs_data_max ; then ubi create rootfs_data $rootfs_data_max dynamic || ubi create rootfs_data - dynamic ; else ubi create rootfs_data - dynamic ; fi ; fi +ubi_read_production=ubi read $loadaddr fit && iminfo $loadaddr && run ubi_prepare_rootfs +ubi_read_recovery=ubi check recovery && ubi read $loadaddr recovery +ubi_remove_rootfs=ubi check rootfs_data && ubi remove rootfs_data -+ubi_write_production=ubi check fit && ubi remove fit ; run ubi_remove_rootfs ; ubi create fit $filesize dynamic 2 && ubi write $loadaddr fit $filesize -+ubi_write_recovery=ubi check recovery && ubi remove recovery ; run ubi_remove_rootfs ; ubi create recovery $filesize dynamic 3 && ubi write $loadaddr recovery $filesize ++ubi_write_fip=run ubi_remove_rootfs ; ubi check fip && ubi remove fip ; ubi create fip 0x200000 static ; ubi write $loadaddr fip 0x200000 ++ubi_write_production=ubi check fit && ubi remove fit ; run ubi_remove_rootfs ; ubi create fit $filesize dynamic && ubi write $loadaddr fit $filesize ++ubi_write_recovery=ubi check recovery && ubi remove recovery ; run ubi_remove_rootfs ; ubi create recovery $filesize dynamic && ubi write $loadaddr recovery $filesize +_init_env=setenv _init_env ; setenv _create_env ; saveenv ; saveenv +_firstboot=setenv _firstboot ; run _switch_to_menu ; run _init_env ; run boot_first +_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title +_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" --- /dev/null +++ b/configs/mt7622_bananapi_bpi-r64-emmc_defconfig -@@ -0,0 +1,151 @@ +@@ -0,0 +1,152 @@ +CONFIG_ARM=y +CONFIG_POSITION_INDEPENDENT=y +CONFIG_ARCH_MEDIATEK=y @@ -269,6 +268,7 @@ +CONFIG_DEBUG_UART_CLOCK=25000000 +CONFIG_DEFAULT_DEVICE_TREE="mt7622-bananapi-bpi-r64" +CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_OF_SYSTEM_SETUP=y +CONFIG_DEBUG_UART=y +CONFIG_DEFAULT_ENV_FILE="bananapi_bpi-r64-emmc_env" +CONFIG_NET_RANDOM_ETHADDR=y @@ -411,7 +411,7 @@ +serverip=192.168.1.254 +loadaddr=0x48000000 +bootcmd=if pstore check ; then run boot_recovery ; else run boot_emmc ; fi -+bootargs=root=/dev/mmcblk0p65 ++bootargs=root=/dev/fit0 rootwait +bootconf=config-1#mt7622-bananapi-bpi-r64-pcie1 +bootconf_pcie=config-1#mt7622-bananapi-bpi-r64-pcie1 +bootconf_sata=config-1#mt7622-bananapi-bpi-r64-sata @@ -455,7 +455,7 @@ +emmc_read_production=mmc dev 0 && part start mmc 0 $part_default part_addr && part size mmc 0 $part_default part_size && run mmc_read_vol +emmc_read_recovery=mmc dev 0 && part start mmc 0 $part_recovery part_addr && part size mmc 0 $part_recovery part_size && run mmc_read_vol +mmc_write_vol=imszb $fileaddr image_size && test 0x$image_size -le 0x$part_size && mmc erase 0x$part_addr 0x$image_size && mmc write $fileaddr 0x$part_addr 0x$image_size -+mmc_read_vol=mmc read $loadaddr $part_addr 0x8 && imszb $loadaddr image_size && test 0x$image_size -le 0x$part_size && mmc read $loadaddr 0x$part_addr 0x$image_size ++mmc_read_vol=mmc read $loadaddr $part_addr 0x100 && imszb $loadaddr image_size && test 0x$image_size -le 0x$part_size && mmc read $loadaddr 0x$part_addr 0x$image_size +part_default=production +part_recovery=recovery +reset_factory=eraseenv && reset @@ -481,6 +481,7 @@ +CONFIG_DEBUG_UART_CLOCK=25000000 +CONFIG_DEFAULT_DEVICE_TREE="mt7622-bananapi-bpi-r64" +CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_OF_SYSTEM_SETUP=y +CONFIG_DEBUG_UART=y +CONFIG_DEFAULT_ENV_FILE="bananapi_bpi-r64-snand_env" +CONFIG_DISTRO_DEFAULTS=y @@ -574,7 +575,6 @@ +CONFIG_PCI=y +CONFIG_MTD=y +CONFIG_MTD_UBI_FASTMAP=y -+CONFIG_MTDPARTS_DEFAULT="mtdparts=spi-nand0:512k(bl2),2048k(fip),-(ubi)" +CONFIG_DM_PCI=y +CONFIG_PCIE_MEDIATEK=y +CONFIG_PINCTRL=y @@ -613,11 +613,11 @@ +CONFIG_SERVERIP="192.168.1.3" --- /dev/null +++ b/bananapi_bpi-r64-snand_env -@@ -0,0 +1,57 @@ +@@ -0,0 +1,56 @@ +ipaddr=192.168.1.1 +serverip=192.168.1.254 +loadaddr=0x48000000 -+bootargs=root=/dev/ubiblock0_2p1 ++bootargs=ubi.block=0,fit root=/dev/fit0 rootwait +bootcmd=if pstore check ; then run boot_recovery ; else run boot_ubi ; fi +bootconf=config-1#mt7622-bananapi-bpi-r64-pcie1 +bootconf_pcie=config-1#mt7622-bananapi-bpi-r64-pcie1 @@ -652,22 +652,21 @@ +boot_tftp_forever=led $bootled_rec on ; while true ; do run boot_tftp_recovery ; sleep 1 ; done +boot_tftp_production=tftpboot $loadaddr $bootfile_upg && iminfo $loadaddr && ubi part ubi && run ubi_write_production ubi_prepare_rootfs ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi +boot_tftp_recovery=tftpboot $loadaddr $bootfile && iminfo $loadaddr && ubi part ubi && run ubi_write_recovery ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi -+boot_tftp_write_bl2=tftpboot $loadaddr $bootfile_bl2 && run boot_write_bl2 -+boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run boot_write_fip ++boot_tftp_write_bl2=tftpboot $loadaddr $bootfile_bl2 && run snand_write_bl2 ++boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run ubi_write_fip +boot_ubi=ubi part ubi && run boot_production ; run boot_recovery -+boot_write_bl2=mtd erase bl2 && mtd write spi-nand0 $loadaddr 0x0 0x20000 && mtd write spi-nand0 $loadaddr 0x20000 0x20000 && mtd write spi-nand0 $loadaddr 0x40000 0x20000 && mtd write spi-nand0 $loadaddr 0x60000 0x20000 -+boot_write_fip=mtd erase fip && mtd write fip $loadaddr ++snand_write_bl2=mtd erase bl2 && mtd write bl2 $loadaddr 0x0 0x20000 && mtd write bl2 $loadaddr 0x20000 0x20000 && mtd write bl2 $loadaddr 0x40000 0x20000 && mtd write bl2 $loadaddr 0x60000 0x20000 +check_ubi=ubi part ubi || run ubi_format -+reset_factory=mw $loadaddr 0x0 0x100000 ; ubi part ubi ; ubi write $loadaddr ubootenv 0x100000 ; ubi write $loadaddr ubootenv2 0x100000 ; ubi remove rootfs_data -+ubi_format=ubi detach ; mtd erase ubi && ubi part ubi ; reset ++reset_factory=mw $loadaddr 0x0 0x1f000 ; ubi part ubi ; ubi write $loadaddr ubootenv 0x1f000 ; ubi write $loadaddr ubootenv2 0x1f000 ; ubi remove rootfs_data +ubi_prepare_rootfs=if ubi check rootfs_data ; then else if env exists rootfs_data_max ; then ubi create rootfs_data $rootfs_data_max dynamic || ubi create rootfs_data - dynamic ; else ubi create rootfs_data - dynamic ; fi ; fi +ubi_read_production=ubi read $loadaddr fit && iminfo $loadaddr && run ubi_prepare_rootfs +ubi_read_recovery=ubi check recovery && ubi read $loadaddr recovery +ubi_remove_rootfs=ubi check rootfs_data && ubi remove rootfs_data ++ubi_write_fip=run ubi_remove_rootfs ; ubi check fip && ubi remove fip ; ubi create fip 0x200000 static ; ubi write $loadaddr fip 0x200000 +ubi_write_production=ubi check fit && env exists replacevol && ubi remove fit ; if ubi check fit ; then else run ubi_remove_rootfs ; ubi create fit $filesize dynamic 2 && ubi write $loadaddr fit $filesize ; fi +ubi_write_recovery=ubi check recovery && env exists replacevol && ubi remove recovery ; if ubi check recovery ; then else run ubi_remove_rootfs ; ubi create recovery $filesize dynamic 3 && ubi write $loadaddr recovery $filesize ; fi -+_create_env=ubi create ubootenv 0x100000 dynamic 0 ; ubi create ubootenv2 0x100000 dynamic 1 ; ubi create fit 0x100000 dynamic 2 ; ubi create recovery 0x100000 dynamic 3 -+_init_env=setenv _init_env ; if ubi check ubootenv && ubi check ubootenv2 ; then else run _create_env ; fi ; setenv _create_env ; saveenv || run ubi_format ; saveenv || run ubi_format -+_firstboot=setenv _firstboot ; run _switch_to_menu ; run check_ubi ; run _init_env ; run boot_first ++_create_env=ubi create ubootenv 0x1f000 dynamic ; ubi create ubootenv2 0x1f000 dynamic ++_init_env=setenv _init_env ; if ubi check ubootenv && ubi check ubootenv2 ; then else run _create_env ; fi ; setenv _create_env ; saveenv ; saveenv ++_firstboot=setenv _firstboot ; run _switch_to_menu ; run _init_env ; run boot_first +_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title +_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" diff --git a/lede/package/boot/uboot-mediatek/patches/410-add-linksys-e8450.patch b/lede/package/boot/uboot-mediatek/patches/410-add-linksys-e8450.patch index 363509efc1..ca8fb32bea 100644 --- a/lede/package/boot/uboot-mediatek/patches/410-add-linksys-e8450.patch +++ b/lede/package/boot/uboot-mediatek/patches/410-add-linksys-e8450.patch @@ -1,6 +1,6 @@ --- /dev/null +++ b/configs/mt7622_linksys_e8450_defconfig -@@ -0,0 +1,141 @@ +@@ -0,0 +1,140 @@ +CONFIG_ARM=y +CONFIG_POSITION_INDEPENDENT=y +CONFIG_ARCH_MEDIATEK=y @@ -17,7 +17,6 @@ +CONFIG_DEBUG_UART_CLOCK=25000000 +CONFIG_DEFAULT_DEVICE_TREE="mt7622-linksys-e8450-ubi" +CONFIG_DEBUG_UART=y -+CONFIG_MTDPARTS_DEFAULT="mtdparts=spi-nand0:512k(bl2),1280k(fip),1024k(factory),256k(reserved),-(ubi)" +CONFIG_SMBIOS_PRODUCT_NAME="" +CONFIG_AUTOBOOT_KEYED=y +CONFIG_BOOTDELAY=30 @@ -144,7 +143,7 @@ +CONFIG_USB_STORAGE=y --- /dev/null +++ b/arch/arm/dts/mt7622-linksys-e8450-ubi.dts -@@ -0,0 +1,197 @@ +@@ -0,0 +1,214 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2019 MediaTek Inc. @@ -307,6 +306,23 @@ + pinctrl-0 = <&snfi_pins>; + status = "okay"; + quad-spi; ++ ++ partitions { ++ compatible = "fixed-partitions"; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ partition@0 { ++ label = "bl2"; ++ reg = <0x0 0x80000>; ++ }; ++ ++ partition@80000 { ++ label = "ubi"; ++ reg = <0x80000 0x7f80000>; ++ compatible = "linux,ubi"; ++ }; ++ }; +}; + +&uart0 { @@ -344,7 +360,7 @@ +}; --- a/arch/arm/dts/Makefile +++ b/arch/arm/dts/Makefile -@@ -1305,6 +1305,7 @@ dtb-$(CONFIG_ARCH_MEDIATEK) += \ +@@ -1422,6 +1422,7 @@ dtb-$(CONFIG_ARCH_MEDIATEK) += \ mt7622-rfb.dtb \ mt7623a-unielec-u7623-02-emmc.dtb \ mt7622-bananapi-bpi-r64.dtb \ @@ -354,8 +370,8 @@ mt7981-rfb.dtb \ --- /dev/null +++ b/linksys_e8450_env -@@ -0,0 +1,57 @@ -+ethaddr_factory=mtd read spi-nand0 0x40080000 0x220000 0x20000 && env readmem -b ethaddr 0x4009fff4 0x6 ; setenv ethaddr_factory +@@ -0,0 +1,55 @@ ++ethaddr_factory=ubi read 0x40080000 factory && env readmem -b ethaddr 0x400ffff4 0x6 ; setenv ethaddr_factory +ipaddr=192.168.1.1 +serverip=192.168.1.254 +loadaddr=0x48000000 @@ -387,28 +403,26 @@ +boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_recovery ; setenv replacevol 1 ; run boot_tftp_forever +boot_production=led $bootled_pwr on ; run ubi_read_production && bootm $loadaddr#$bootconf ; led $bootled_pwr off +boot_recovery=led $bootled_rec on ; run ubi_read_recovery ; bootm $loadaddr#$bootconf ; ubi remove recovery ; led $bootled_rec off -+boot_serial_write_bl2=loadx $loadaddr 115200 && run boot_write_bl2 -+boot_serial_write_fip=loadx $loadaddr 115200 && run boot_write_fip ++boot_serial_write_bl2=loadx $loadaddr 115200 && run snand_write_bl2 ++boot_serial_write_fip=loadx $loadaddr 115200 && run ubi_write_fip +boot_tftp=tftpboot $loadaddr $bootfile && bootm $loadaddr#$bootconf +boot_tftp_forever=led $bootled_rec on ; while true ; do run boot_tftp_recovery ; sleep 1 ; done +boot_tftp_production=tftpboot $loadaddr $bootfile_upg && iminfo $loadaddr && ubi part ubi && run ubi_write_production ubi_prepare_rootfs ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi +boot_tftp_recovery=tftpboot $loadaddr $bootfile && iminfo $loadaddr && ubi part ubi && run ubi_write_recovery ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi -+boot_tftp_write_bl2=tftpboot $loadaddr $bootfile_bl2 && run boot_write_bl2 -+boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run boot_write_fip ++boot_tftp_write_bl2=tftpboot $loadaddr $bootfile_bl2 && run snand_write_bl2 ++boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run ubi_write_fip +boot_ubi=ubi part ubi && run boot_production ; run boot_recovery -+boot_write_bl2=mtd erase bl2 && mtd write spi-nand0 $loadaddr 0x0 0x20000 && mtd write spi-nand0 $loadaddr 0x20000 0x20000 && mtd write spi-nand0 $loadaddr 0x40000 0x20000 && mtd write spi-nand0 $loadaddr 0x60000 0x20000 -+boot_write_fip=mtd erase fip && mtd write fip $loadaddr -+check_ubi=ubi part ubi || run ubi_format -+reset_factory=mw $loadaddr 0x0 0x100000 ; ubi part ubi ; ubi write $loadaddr ubootenv 0x100000 ; ubi write $loadaddr ubootenv2 0x100000 ; ubi remove rootfs_data -+ubi_format=ubi detach ; mtd erase ubi && ubi part ubi ; reset ++snand_write_bl2=mtd erase bl2 && mtd write spi-nand0 $loadaddr 0x0 0x20000 && mtd write spi-nand0 $loadaddr 0x20000 0x20000 && mtd write spi-nand0 $loadaddr 0x40000 0x20000 && mtd write spi-nand0 $loadaddr 0x60000 0x20000 ++reset_factory=mw $loadaddr 0xff 0x1f000 ; ubi part ubi ; ubi write $loadaddr ubootenv 0x1f000 ; ubi write $loadaddr ubootenv2 0x1f000 ; ubi remove rootfs_data +ubi_prepare_rootfs=if ubi check rootfs_data ; then else if env exists rootfs_data_max ; then ubi create rootfs_data $rootfs_data_max dynamic || ubi create rootfs_data - dynamic ; else ubi create rootfs_data - dynamic ; fi ; fi +ubi_read_production=ubi read $loadaddr fit && iminfo $loadaddr && run ubi_prepare_rootfs +ubi_read_recovery=ubi check recovery && ubi read $loadaddr recovery +ubi_remove_rootfs=ubi check rootfs_data && ubi remove rootfs_data ++ubi_write_fip=run ubi_remove_rootfs ; ubi check fip && ubi remove fip ; ubi create fip 0x200000 static ; ubi write $loadaddr fip 0x200000 +ubi_write_production=ubi check fit && env exists replacevol && ubi remove fit ; if ubi check fit ; then else run ubi_remove_rootfs ; ubi create fit $filesize dynamic && ubi write $loadaddr fit $filesize ; fi +ubi_write_recovery=ubi check recovery && env exists replacevol && ubi remove recovery ; if ubi check recovery ; then else run ubi_remove_rootfs ; ubi create recovery $filesize dynamic && ubi write $loadaddr recovery $filesize ; fi -+_create_env=ubi create ubootenv 0x100000 dynamic ; ubi create ubootenv2 0x100000 dynamic ++_create_env=ubi create ubootenv 0x1f000 dynamic ; ubi create ubootenv2 0x1f000 dynamic +_init_env=setenv _init_env ; if ubi check ubootenv && ubi check ubootenv2 ; then else run _create_env ; fi ; setenv _create_env ; saveenv || run ubi_format ; saveenv || run ubi_format -+_firstboot=setenv _firstboot ; run _switch_to_menu ; run ethaddr_factory ; run check_ubi ; run _init_env ; run boot_first ++_firstboot=setenv _firstboot ; run _switch_to_menu ; run ethaddr_factory ; run _init_env ; run boot_first +_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title +_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" diff --git a/lede/package/boot/uboot-mediatek/patches/412-add-ubnt-unifi-6-lr.patch b/lede/package/boot/uboot-mediatek/patches/412-add-ubnt-unifi-6-lr.patch index 4bde061765..bbd05fe41f 100644 --- a/lede/package/boot/uboot-mediatek/patches/412-add-ubnt-unifi-6-lr.patch +++ b/lede/package/boot/uboot-mediatek/patches/412-add-ubnt-unifi-6-lr.patch @@ -1,5 +1,5 @@ --- /dev/null -+++ b/configs/mt7622_ubnt_unifi-6-lr_defconfig ++++ b/configs/mt7622_ubnt_unifi-6-lr-v1_defconfig @@ -0,0 +1,147 @@ +CONFIG_ARM=y +CONFIG_POSITION_INDEPENDENT=y @@ -149,6 +149,305 @@ +CONFIG_USE_SERVERIP=y +CONFIG_SERVERIP="192.168.1.254" --- /dev/null ++++ b/configs/mt7622_ubnt_unifi-6-lr-v2_defconfig +@@ -0,0 +1,147 @@ ++CONFIG_ARM=y ++CONFIG_POSITION_INDEPENDENT=y ++CONFIG_ARCH_MEDIATEK=y ++CONFIG_TARGET_MT7622=y ++CONFIG_TEXT_BASE=0x41e00000 ++CONFIG_SYS_MALLOC_F_LEN=0x4000 ++CONFIG_SYS_LOAD_ADDR=0x40080000 ++CONFIG_USE_DEFAULT_ENV_FILE=y ++CONFIG_MTDPARTS_DEFAULT="mtdparts=nor0:128k(bl2),640k(fip),64k(u-boot-env),256k(factory),64k(eeprom),15232k(recovery),-(firmware)" ++CONFIG_ENV_IS_IN_MTD=y ++CONFIG_ENV_MTD_NAME="nor0" ++CONFIG_ENV_SIZE_REDUND=0x4000 ++CONFIG_ENV_SIZE=0x4000 ++CONFIG_ENV_OFFSET=0xc0000 ++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_RESET_BUTTON_SETTLE_DELAY=400 ++CONFIG_BOOTP_SEND_HOSTNAME=y ++CONFIG_DEFAULT_ENV_FILE="ubnt_unifi-6-lr-v2_env" ++CONFIG_DEBUG_UART_BASE=0x11002000 ++CONFIG_DEBUG_UART_CLOCK=25000000 ++CONFIG_DEFAULT_DEVICE_TREE="mt7622-ubnt-unifi-6-lr" ++CONFIG_DEBUG_UART=y ++CONFIG_SMBIOS_PRODUCT_NAME="" ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_CFB_CONSOLE_ANSI=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y ++CONFIG_GPIO_HOG=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_FIT=y ++CONFIG_FIT_ENABLE_SHA256_SUPPORT=y ++CONFIG_LOGLEVEL=7 ++CONFIG_LOG=y ++CONFIG_DEFAULT_FDT_FILE="mt7622-ubnt-unifi-6-lr" ++CONFIG_SYS_PROMPT="MT7622> " ++# CONFIG_LEGACY_IMAGE_FORMAT is not set ++# CONFIG_BOOTM_PLAN9 is not set ++# CONFIG_BOOTM_RTEMS is not set ++# CONFIG_BOOTM_VXWORKS is not set ++# CONFIG_EFI is not set ++# CONFIG_EFI_LOADER is not set ++CONFIG_CMD_BOOTMENU=y ++# CONFIG_CMD_BOOTEFI is not set ++CONFIG_CMD_BOOTP=y ++CONFIG_CMD_BUTTON=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_ECHO=y ++# CONFIG_CMD_ELF is not set ++# CONFIG_CMD_BOOTEFI_BOOTMGR is not set ++CONFIG_CMD_ENV_READMEM=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_ITEST=y ++CONFIG_CMD_LED=y ++CONFIG_CMD_LINK_LOCAL=y ++# CONFIG_CMD_MBR is not set ++CONFIG_CMD_MTD=y ++CONFIG_CMD_MTDPARTS=y ++# CONFIG_CMD_PCI is not set ++CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_PING=y ++CONFIG_CMD_PXE=y ++CONFIG_CMD_SMC=y ++CONFIG_CMD_TFTPBOOT=y ++CONFIG_CMD_TFTPSRV=y ++# CONFIG_CMD_UNLZ4 is not set ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_RARP=y ++CONFIG_CMD_SETEXPR=y ++CONFIG_CMD_SLEEP=y ++CONFIG_CMD_SOURCE=y ++CONFIG_CMD_UUID=y ++CONFIG_DISPLAY_CPUINFO=y ++CONFIG_DM_ETH=y ++CONFIG_DM_ETH_PHY=y ++CONFIG_DM_GPIO=y ++CONFIG_DM_MDIO=y ++CONFIG_DM_MTD=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++# CONFIG_DM_MMC is not set ++CONFIG_DM_SERIAL=y ++CONFIG_DM_SPI=y ++CONFIG_DM_SPI_FLASH=y ++CONFIG_HUSH_PARSER=y ++# CONFIG_PARTITION_UUIDS is not set ++CONFIG_SYS_RELOC_GD_ENV_ADDR=y ++# CONFIG_LED is not set ++# CONFIG_LZ4 is not set ++CONFIG_VERSION_VARIABLE=y ++CONFIG_NETCONSOLE=y ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_CLK=y ++CONFIG_PHY=y ++CONFIG_PHY_FIXED=y ++CONFIG_PHYLIB_10G=y ++CONFIG_PHY_AQUANTIA=y ++CONFIG_PHY_ADDR_ENABLE=y ++CONFIG_PHY_ADDR=8 ++CONFIG_MEDIATEK_ETH=y ++CONFIG_MTD=y ++# CONFIG_MMC is not set ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7622=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_PRE_CONSOLE_BUFFER=y ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_RAM=y ++CONFIG_MTK_SERIAL=y ++CONFIG_SPI=y ++CONFIG_MTK_SNFI_SPI=y ++CONFIG_MTK_SNOR=y ++CONFIG_SYSRESET_WATCHDOG=y ++CONFIG_WDT_MTK=y ++CONFIG_HEXDUMP=y ++CONFIG_RANDOM_UUID=y ++CONFIG_REGEX=y ++CONFIG_SPI_FLASH=y ++CONFIG_SPI_FLASH_BAR=y ++CONFIG_SPI_FLASH_MTD=y ++CONFIG_SPI_FLASH_UNLOCK_ALL=y ++CONFIG_SPI_FLASH_EON=y ++CONFIG_SPI_FLASH_GIGADEVICE=y ++CONFIG_SPI_FLASH_MACRONIX=y ++CONFIG_SPI_FLASH_SPANSION=y ++CONFIG_SPI_FLASH_STMICRO=y ++CONFIG_SPI_FLASH_SST=y ++CONFIG_SPI_FLASH_WINBOND=y ++CONFIG_SPI_FLASH_XMC=y ++CONFIG_SPI_FLASH_USE_4K_SECTORS=y ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.254" +--- /dev/null ++++ b/configs/mt7622_ubnt_unifi-6-lr-v3_defconfig +@@ -0,0 +1,146 @@ ++CONFIG_ARM=y ++CONFIG_POSITION_INDEPENDENT=y ++CONFIG_ARCH_MEDIATEK=y ++CONFIG_TARGET_MT7622=y ++CONFIG_TEXT_BASE=0x41e00000 ++CONFIG_SYS_MALLOC_F_LEN=0x4000 ++CONFIG_SYS_LOAD_ADDR=0x40080000 ++CONFIG_USE_DEFAULT_ENV_FILE=y ++CONFIG_MTDPARTS_DEFAULT="mtdparts=nor0:128k(bl2),640k(fip),64k(u-boot-env),256k(factory),64k(eeprom),15232k(recovery),-(firmware)" ++CONFIG_ENV_IS_IN_MTD=y ++CONFIG_ENV_MTD_NAME="nor0" ++CONFIG_ENV_SIZE_REDUND=0x4000 ++CONFIG_ENV_SIZE=0x4000 ++CONFIG_ENV_OFFSET=0xc0000 ++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_RESET_BUTTON_SETTLE_DELAY=400 ++CONFIG_BOOTP_SEND_HOSTNAME=y ++CONFIG_DEFAULT_ENV_FILE="ubnt_unifi-6-lr_env" ++CONFIG_DEBUG_UART_BASE=0x11002000 ++CONFIG_DEBUG_UART_CLOCK=25000000 ++CONFIG_DEFAULT_DEVICE_TREE="mt7622-ubnt-unifi-6-lr-v3" ++CONFIG_DEBUG_UART=y ++CONFIG_SMBIOS_PRODUCT_NAME="" ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_CFB_CONSOLE_ANSI=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y ++CONFIG_GPIO_HOG=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_FIT=y ++CONFIG_FIT_ENABLE_SHA256_SUPPORT=y ++CONFIG_LOGLEVEL=7 ++CONFIG_LOG=y ++CONFIG_DEFAULT_FDT_FILE="mt7622-ubnt-unifi-6-lr-v3" ++CONFIG_SYS_PROMPT="MT7622> " ++# CONFIG_LEGACY_IMAGE_FORMAT is not set ++# CONFIG_BOOTM_PLAN9 is not set ++# CONFIG_BOOTM_RTEMS is not set ++# CONFIG_BOOTM_VXWORKS is not set ++# CONFIG_EFI is not set ++# CONFIG_EFI_LOADER is not set ++CONFIG_CMD_BOOTMENU=y ++# CONFIG_CMD_BOOTEFI is not set ++CONFIG_CMD_BOOTP=y ++CONFIG_CMD_BUTTON=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_ECHO=y ++# CONFIG_CMD_ELF is not set ++# CONFIG_CMD_BOOTEFI_BOOTMGR is not set ++CONFIG_CMD_ENV_READMEM=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_ITEST=y ++CONFIG_CMD_LED=y ++CONFIG_CMD_LINK_LOCAL=y ++# CONFIG_CMD_MBR is not set ++CONFIG_CMD_MTD=y ++CONFIG_CMD_MTDPARTS=y ++# CONFIG_CMD_PCI is not set ++CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_PING=y ++CONFIG_CMD_PXE=y ++CONFIG_CMD_SMC=y ++CONFIG_CMD_TFTPBOOT=y ++CONFIG_CMD_TFTPSRV=y ++# CONFIG_CMD_UNLZ4 is not set ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_RARP=y ++CONFIG_CMD_SETEXPR=y ++CONFIG_CMD_SLEEP=y ++CONFIG_CMD_SOURCE=y ++CONFIG_CMD_UUID=y ++CONFIG_DISPLAY_CPUINFO=y ++CONFIG_DM_ETH=y ++CONFIG_DM_ETH_PHY=y ++CONFIG_DM_GPIO=y ++CONFIG_DM_MDIO=y ++CONFIG_DM_MTD=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++# CONFIG_DM_MMC is not set ++CONFIG_DM_SERIAL=y ++CONFIG_DM_SPI=y ++CONFIG_DM_SPI_FLASH=y ++CONFIG_HUSH_PARSER=y ++# CONFIG_PARTITION_UUIDS is not set ++CONFIG_SYS_RELOC_GD_ENV_ADDR=y ++# CONFIG_LED is not set ++# CONFIG_LZ4 is not set ++CONFIG_VERSION_VARIABLE=y ++CONFIG_NETCONSOLE=y ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_CLK=y ++CONFIG_PHY=y ++CONFIG_PHY_FIXED=y ++CONFIG_PHY_REALTEK=y ++CONFIG_PHY_ADDR_ENABLE=y ++CONFIG_PHY_ADDR=0 ++CONFIG_MEDIATEK_ETH=y ++CONFIG_MTD=y ++# CONFIG_MMC is not set ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7622=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_PRE_CONSOLE_BUFFER=y ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_RAM=y ++CONFIG_MTK_SERIAL=y ++CONFIG_SPI=y ++CONFIG_MTK_SNFI_SPI=y ++CONFIG_MTK_SNOR=y ++CONFIG_SYSRESET_WATCHDOG=y ++CONFIG_WDT_MTK=y ++CONFIG_HEXDUMP=y ++CONFIG_RANDOM_UUID=y ++CONFIG_REGEX=y ++CONFIG_SPI_FLASH=y ++CONFIG_SPI_FLASH_BAR=y ++CONFIG_SPI_FLASH_MTD=y ++CONFIG_SPI_FLASH_UNLOCK_ALL=y ++CONFIG_SPI_FLASH_EON=y ++CONFIG_SPI_FLASH_GIGADEVICE=y ++CONFIG_SPI_FLASH_MACRONIX=y ++CONFIG_SPI_FLASH_SPANSION=y ++CONFIG_SPI_FLASH_STMICRO=y ++CONFIG_SPI_FLASH_SST=y ++CONFIG_SPI_FLASH_WINBOND=y ++CONFIG_SPI_FLASH_XMC=y ++CONFIG_SPI_FLASH_USE_4K_SECTORS=y ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.254" +--- /dev/null +++ b/arch/arm/dts/mt7622-ubnt-unifi-6-lr.dts @@ -0,0 +1,193 @@ +// SPDX-License-Identifier: GPL-2.0 @@ -344,13 +643,210 @@ + }; + }; +}; +--- /dev/null ++++ b/arch/arm/dts/mt7622-ubnt-unifi-6-lr-v3.dts +@@ -0,0 +1,193 @@ ++// SPDX-License-Identifier: GPL-2.0 ++/* ++ * Copyright (c) 2019 MediaTek Inc. ++ * Author: Sam Shih ++ */ ++ ++/dts-v1/; ++#include ++#include "mt7622.dtsi" ++#include "mt7622-u-boot.dtsi" ++ ++/ { ++ #address-cells = <1>; ++ #size-cells = <1>; ++ model = "mt7622-ubnt-unifi-6-lr-v3"; ++ compatible = "mediatek,mt7622", "ubnt,unifi-6-lr-v3"; ++ ++ chosen { ++ stdout-path = &uart0; ++ tick-timer = &timer0; ++ }; ++ ++ memory@40000000 { ++ device_type = "memory"; ++ reg = <0x40000000 0x20000000>; ++ }; ++ ++ aliases { ++ spi0 = &snor; ++ }; ++ ++ gpio-keys { ++ compatible = "gpio-keys"; ++ ++ reset { ++ label = "reset"; ++ gpios = <&gpio 62 GPIO_ACTIVE_LOW>; ++ linux,code = ; ++ }; ++ }; ++ ++ memory@40000000 { ++ device_type = "memory"; ++ reg = <0x40000000 0x20000000>; ++ }; ++ ++ reg_1p8v: regulator-1p8v { ++ compatible = "regulator-fixed"; ++ regulator-name = "fixed-1.8V"; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ regulator-boot-on; ++ regulator-always-on; ++ }; ++ ++ reg_3p3v: regulator-3p3v { ++ compatible = "regulator-fixed"; ++ regulator-name = "fixed-3.3V"; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-boot-on; ++ regulator-always-on; ++ }; ++ ++ reg_5v: regulator-5v { ++ compatible = "regulator-fixed"; ++ regulator-name = "fixed-5V"; ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5000000>; ++ regulator-boot-on; ++ regulator-always-on; ++ }; ++}; ++ ++&pcie { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pcie0_pins>, <&pcie1_pins>; ++ status = "okay"; ++ ++ pcie@0,0 { ++ status = "okay"; ++ }; ++ ++ pcie@1,0 { ++ status = "okay"; ++ }; ++}; ++ ++&pinctrl { ++ eth_pins: eth-pins { ++ mux { ++ function = "eth"; ++ groups = "mdc_mdio", "rgmii_via_gmac2"; ++ }; ++ }; ++ ++ pcie0_pins: pcie0-pins { ++ mux { ++ function = "pcie"; ++ groups = "pcie0_pad_perst", ++ "pcie0_1_waken", ++ "pcie0_1_clkreq"; ++ }; ++ }; ++ ++ pcie1_pins: pcie1-pins { ++ mux { ++ function = "pcie"; ++ groups = "pcie1_pad_perst", ++ "pcie1_0_waken", ++ "pcie1_0_clkreq"; ++ }; ++ }; ++ ++ snfi_pins: snfi-pins { ++ mux { ++ function = "flash"; ++ groups = "snfi"; ++ }; ++ }; ++ ++ snor_pins: snor-pins { ++ mux { ++ function = "flash"; ++ groups = "spi_nor"; ++ }; ++ }; ++ ++ uart0_pins: uart0 { ++ mux { ++ function = "uart"; ++ groups = "uart0_0_tx_rx" ; ++ }; ++ }; ++ ++ watchdog_pins: watchdog-default { ++ mux { ++ function = "watchdog"; ++ groups = "watchdog"; ++ }; ++ }; ++}; ++ ++&snor { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&snor_pins>; ++ status = "okay"; ++ ++ spi-flash@0 { ++ compatible = "jedec,spi-nor"; ++ reg = <0>; ++ spi-tx-bus-width = <1>; ++ spi-rx-bus-width = <4>; ++ u-boot,dm-pre-reloc; ++ }; ++}; ++ ++&uart0 { ++ mediatek,force-highspeed; ++ status = "okay"; ++}; ++ ++&watchdog { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&watchdog_pins>; ++ status = "okay"; ++}; ++ ++ð { ++ status = "okay"; ++ pinctrl-names = "default"; ++ pinctrl-0 = <ð_pins>; ++ ++ mediatek,gmac-id = <0>; ++ phy-mode = "sgmii"; ++ phy-handle = <&gphy>; ++ ++ fixed-link { ++ speed = <2500>; ++ full-duplex; ++ }; ++ ++ mdio-bus { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ gphy: ethernet-phy@0 { ++ /* RealTek RTL8211FS */ ++ compatible = "ethernet-phy-ieee802.3-c22"; ++ reg = <0x0>; ++ }; ++ }; ++}; --- a/arch/arm/dts/Makefile +++ b/arch/arm/dts/Makefile -@@ -1306,6 +1306,7 @@ dtb-$(CONFIG_ARCH_MEDIATEK) += \ +@@ -1423,6 +1423,8 @@ dtb-$(CONFIG_ARCH_MEDIATEK) += \ mt7623a-unielec-u7623-02-emmc.dtb \ mt7622-bananapi-bpi-r64.dtb \ mt7622-linksys-e8450-ubi.dtb \ + mt7622-ubnt-unifi-6-lr.dtb \ ++ mt7622-ubnt-unifi-6-lr-v3.dtb \ mt7623n-bananapi-bpi-r2.dtb \ mt7629-rfb.dtb \ mt7981-rfb.dtb \ @@ -407,6 +903,112 @@ +_firstboot=setenv _firstboot ; run _switch_to_menu ; run ethaddr_factory ; run _init_env ; run boot_first +_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title +_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" +--- /dev/null ++++ b/ubnt_unifi-6-lr-v2_env +@@ -0,0 +1,50 @@ ++ethaddr_factory=mtd read nor0 $loadaddr 0x110000 0x10000 && env readmem -b ethaddr $loadaddr 0x6 ; setenv ethaddr_factory ++ipaddr=192.168.1.1 ++serverip=192.168.1.254 ++loadaddr=0x48000000 ++bootcmd=if pstore check ; then run boot_recovery ; else run boot_nor ; fi ++bootdelay=0 ++bootfile=openwrt-mediatek-mt7622-ubnt_unifi-6-lr-v2-ubootmod-initramfs-recovery.itb ++bootfile_bl2=openwrt-mediatek-mt7622-ubnt_unifi-6-lr-v2-ubootmod-preloader.bin ++bootfile_fip=openwrt-mediatek-mt7622-ubnt_unifi-6-lr-v2-ubootmod-bl31-uboot.fip ++bootfile_upg=openwrt-mediatek-mt7622-ubnt_unifi-6-lr-v2-ubootmod-squashfs-sysupgrade.itb ++bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60 ++bootmenu_default=0 ++bootmenu_delay=0 ++bootmenu_title= ( ( ( OpenWrt ) ) ) ++bootmenu_0=Initialize environment.=run _firstboot ++bootmenu_0d=Run default boot command.=run boot_default ++bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return ++bootmenu_2=Boot production system from flash.=run boot_production ; run bootmenu_confirm_return ++bootmenu_3=Boot recovery system from flash.=run boot_recovery ; run bootmenu_confirm_return ++bootmenu_4=Load production system via TFTP then write to flash.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_production ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_5=Load recovery system via TFTP then write to flash.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_recovery ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_6=Load BL31+U-Boot FIP via TFTP then write to flash.=run boot_tftp_write_fip ; run bootmenu_confirm_return ++bootmenu_7=Load BL2 preloader via TFTP then write to flash.=run boot_tftp_write_preloader ; run bootmenu_confirm_return ++bootmenu_8=Reboot.=reset ++bootmenu_9=Reset all settings to factory defaults.=run reset_factory ; reset ++boot_first=if button reset ; then run boot_tftp_recovery ; setenv flag_recover 1 ; run boot_default ; fi ; bootmenu ++boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_recovery ; setenv replacevol 1 ; run boot_tftp_forever ++boot_production=run nor_read_production && bootm $loadaddr ++boot_recovery=run nor_read_recovery ; bootm $loadaddr ++boot_serial_write_fip=loadx $loadaddr 115200 && run boot_write_fip ++boot_serial_write_preloader=loadx $loadaddr 115200 && run boot_write_preloader ++boot_tftp_forever=while true ; do run boot_tftp_recovery ; sleep 1 ; done ++boot_tftp_production=tftpboot $loadaddr $bootfile_upg && env exists replacevol && iminfo $loadaddr && run nor_write_production ; if env exists noboot ; then else bootm $loadaddr ; fi ++boot_tftp_recovery=tftpboot $loadaddr $bootfile && env exists replacevol && iminfo $loadaddr && run nor_write_recovery ; if env exists noboot ; then else bootm $loadaddr ; fi ++boot_tftp=tftpboot $loadaddr $bootfile && bootm $loadaddr ++boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run boot_write_fip ++boot_tftp_write_preloader=tftpboot $loadaddr $bootfile_bl2 && run boot_write_preloader ++boot_nor=run boot_production ; run boot_recovery ++boot_write_fip=mtd erase nor0 0x20000 0x80000 && mtd write nor0 $loadaddr 0x20000 0x80000 ++boot_write_preloader=mtd erase nor0 0x0 0x20000 && mtd write nor0 $loadaddr 0x0 0x20000 ++reset_factory=mtd erase nor0 0xc0000 0x10000 && reset ++nor_read_production=mtd read nor0 $loadaddr 0x1000000 0x1000 && imsz $loadaddr image_size && mtd read nor0 $loadaddr 0x1000000 $image_size ++nor_read_recovery=mtd read nor0 $loadaddr 0x120000 0x1000 && imsz $loadaddr image_size && mtd read nor0 $loadaddr 0x120000 $image_size ++nor_pad_size=imsz $loadaddr image_size ; setexpr image_eb 0x$image_size / 0x1000 ; setexpr tmp1 0x$image_size % 0x1000 ; test 0x$tmp1 -gt 0 && setexpr image_eb 0x$image_eb + 1 ; setexpr image_eb 0x$image_eb * 0x1000 ++nor_write_production=run nor_pad_size ; test 0x$image_eb -le 0x3000000 && mtd erase nor0 0x1000000 0x$image_eb && mtd write nor0 $loadaddr 0x1000000 $filesize ++nor_write_recovery=run nor_pad_size ; test 0x$image_eb -le 0xee0000 && mtd erase nor0 0x120000 0x$image_eb && mtd write nor0 $loadaddr 0x120000 $filesize ++_init_env=setenv _init_env ; saveenv ++_firstboot=setenv _firstboot ; run _switch_to_menu ; run ethaddr_factory ; run _init_env ; run boot_first ++_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title ++_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver"--- /dev/null +--- /dev/null ++++ b/ubnt_unifi-6-lr-v3_env +@@ -0,0 +1,50 @@ ++ethaddr_factory=mtd read nor0 $loadaddr 0x110000 0x10000 && env readmem -b ethaddr $loadaddr 0x6 ; setenv ethaddr_factory ++ipaddr=192.168.1.1 ++serverip=192.168.1.254 ++loadaddr=0x48000000 ++bootcmd=if pstore check ; then run boot_recovery ; else run boot_nor ; fi ++bootdelay=0 ++bootfile=openwrt-mediatek-mt7622-ubnt_unifi-6-lr-v3-ubootmod-initramfs-recovery.itb ++bootfile_bl2=openwrt-mediatek-mt7622-ubnt_unifi-6-lr-v3-ubootmod-preloader.bin ++bootfile_fip=openwrt-mediatek-mt7622-ubnt_unifi-6-lr-v3-ubootmod-bl31-uboot.fip ++bootfile_upg=openwrt-mediatek-mt7622-ubnt_unifi-6-lr-v3-ubootmod-squashfs-sysupgrade.itb ++bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60 ++bootmenu_default=0 ++bootmenu_delay=0 ++bootmenu_title= ( ( ( OpenWrt ) ) ) ++bootmenu_0=Initialize environment.=run _firstboot ++bootmenu_0d=Run default boot command.=run boot_default ++bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return ++bootmenu_2=Boot production system from flash.=run boot_production ; run bootmenu_confirm_return ++bootmenu_3=Boot recovery system from flash.=run boot_recovery ; run bootmenu_confirm_return ++bootmenu_4=Load production system via TFTP then write to flash.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_production ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_5=Load recovery system via TFTP then write to flash.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_recovery ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_6=Load BL31+U-Boot FIP via TFTP then write to flash.=run boot_tftp_write_fip ; run bootmenu_confirm_return ++bootmenu_7=Load BL2 preloader via TFTP then write to flash.=run boot_tftp_write_preloader ; run bootmenu_confirm_return ++bootmenu_8=Reboot.=reset ++bootmenu_9=Reset all settings to factory defaults.=run reset_factory ; reset ++boot_first=if button reset ; then run boot_tftp_recovery ; setenv flag_recover 1 ; run boot_default ; fi ; bootmenu ++boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_recovery ; setenv replacevol 1 ; run boot_tftp_forever ++boot_production=run nor_read_production && bootm $loadaddr ++boot_recovery=run nor_read_recovery ; bootm $loadaddr ++boot_serial_write_fip=loadx $loadaddr 115200 && run boot_write_fip ++boot_serial_write_preloader=loadx $loadaddr 115200 && run boot_write_preloader ++boot_tftp_forever=while true ; do run boot_tftp_recovery ; sleep 1 ; done ++boot_tftp_production=tftpboot $loadaddr $bootfile_upg && env exists replacevol && iminfo $loadaddr && run nor_write_production ; if env exists noboot ; then else bootm $loadaddr ; fi ++boot_tftp_recovery=tftpboot $loadaddr $bootfile && env exists replacevol && iminfo $loadaddr && run nor_write_recovery ; if env exists noboot ; then else bootm $loadaddr ; fi ++boot_tftp=tftpboot $loadaddr $bootfile && bootm $loadaddr ++boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run boot_write_fip ++boot_tftp_write_preloader=tftpboot $loadaddr $bootfile_bl2 && run boot_write_preloader ++boot_nor=run boot_production ; run boot_recovery ++boot_write_fip=mtd erase nor0 0x20000 0x80000 && mtd write nor0 $loadaddr 0x20000 0x80000 ++boot_write_preloader=mtd erase nor0 0x0 0x20000 && mtd write nor0 $loadaddr 0x0 0x20000 ++reset_factory=mtd erase nor0 0xc0000 0x10000 && reset ++nor_read_production=mtd read nor0 $loadaddr 0x1000000 0x1000 && imsz $loadaddr image_size && mtd read nor0 $loadaddr 0x1000000 $image_size ++nor_read_recovery=mtd read nor0 $loadaddr 0x120000 0x1000 && imsz $loadaddr image_size && mtd read nor0 $loadaddr 0x120000 $image_size ++nor_pad_size=imsz $loadaddr image_size ; setexpr image_eb 0x$image_size / 0x1000 ; setexpr tmp1 0x$image_size % 0x1000 ; test 0x$tmp1 -gt 0 && setexpr image_eb 0x$image_eb + 1 ; setexpr image_eb 0x$image_eb * 0x1000 ++nor_write_production=run nor_pad_size ; test 0x$image_eb -le 0x3000000 && mtd erase nor0 0x1000000 0x$image_eb && mtd write nor0 $loadaddr 0x1000000 $filesize ++nor_write_recovery=run nor_pad_size ; test 0x$image_eb -le 0xee0000 && mtd erase nor0 0x120000 0x$image_eb && mtd write nor0 $loadaddr 0x120000 $filesize ++_init_env=setenv _init_env ; saveenv ++_firstboot=setenv _firstboot ; run _switch_to_menu ; run ethaddr_factory ; run _init_env ; run boot_first ++_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title ++_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" --- a/common/board_r.c +++ b/common/board_r.c @@ -66,6 +66,7 @@ @@ -417,7 +1019,7 @@ DECLARE_GLOBAL_DATA_PTR; -@@ -412,6 +413,20 @@ static int initr_onenand(void) +@@ -397,6 +398,20 @@ static int initr_onenand(void) } #endif @@ -438,7 +1040,7 @@ #ifdef CONFIG_MMC static int initr_mmc(void) { -@@ -713,6 +728,9 @@ static init_fnc_t init_sequence_r[] = { +@@ -692,6 +707,9 @@ static init_fnc_t init_sequence_r[] = { #ifdef CONFIG_NMBM_MTD initr_nmbm, #endif diff --git a/lede/package/boot/uboot-mediatek/patches/420-add-support-for-RAVPower-RP-WD009.patch b/lede/package/boot/uboot-mediatek/patches/420-add-support-for-RAVPower-RP-WD009.patch index 3cd4d1b2df..4ee87ce3d2 100644 --- a/lede/package/boot/uboot-mediatek/patches/420-add-support-for-RAVPower-RP-WD009.patch +++ b/lede/package/boot/uboot-mediatek/patches/420-add-support-for-RAVPower-RP-WD009.patch @@ -22,7 +22,7 @@ Subject: [PATCH] add support for RAVPower RP-WD009 --- a/arch/mips/dts/Makefile +++ b/arch/mips/dts/Makefile -@@ -25,6 +25,7 @@ dtb-$(CONFIG_TARGET_OCTEON_EBB7304) += m +@@ -26,6 +26,7 @@ dtb-$(CONFIG_TARGET_OCTEON_EBB7304) += m dtb-$(CONFIG_TARGET_OCTEON_NIC23) += mrvl,octeon-nic23.dtb dtb-$(CONFIG_BOARD_NETGEAR_CG3100D) += netgear,cg3100d.dtb dtb-$(CONFIG_BOARD_NETGEAR_DGND3700V2) += netgear,dgnd3700v2.dtb diff --git a/lede/package/boot/uboot-mediatek/patches/421-zbtlink_zbt-wg3526-16m.patch b/lede/package/boot/uboot-mediatek/patches/421-zbtlink_zbt-wg3526-16m.patch new file mode 100644 index 0000000000..b9b241a51d --- /dev/null +++ b/lede/package/boot/uboot-mediatek/patches/421-zbtlink_zbt-wg3526-16m.patch @@ -0,0 +1,314 @@ +--- /dev/null ++++ b/configs/mt7621_zbtlink_zbt-wg3526-16m_defconfig +@@ -0,0 +1,138 @@ ++CONFIG_MIPS=y ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y ++CONFIG_SYS_MALLOC_LEN=0x100000 ++CONFIG_SPL_LIBCOMMON_SUPPORT=y ++CONFIG_SPL_LIBGENERIC_SUPPORT=y ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_ENV_SIZE=0x1000 ++CONFIG_ENV_IS_IN_MTD=y ++CONFIG_ENV_MTD_NAME="nor0" ++CONFIG_ENV_SIZE_REDUND=0x10000 ++CONFIG_ENV_SIZE=0x10000 ++CONFIG_ENV_OFFSET=0x30000 ++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_RESET_BUTTON_SETTLE_DELAY=400 ++CONFIG_BOOTP_SEND_HOSTNAME=y ++# CONFIG_BOOTSTD is not set ++CONFIG_DEFAULT_ENV_FILE="zbtlink_zbt-wg3526-16m_env" ++CONFIG_DEFAULT_DEVICE_TREE="zbtlink,zbt-wg3526" ++CONFIG_SPL_BSS_MAX_SIZE=0x80000 ++CONFIG_SPL_BSS_START_ADDR=0x80140000 ++CONFIG_SPL_SERIAL=y ++CONFIG_SPL_SYS_MALLOC_F_LEN=0x40000 ++CONFIG_SPL=y ++CONFIG_DEBUG_UART_BASE=0xbe000c00 ++CONFIG_DEBUG_UART_CLOCK=50000000 ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y ++CONFIG_SYS_LOAD_ADDR=0x83000000 ++CONFIG_SYS_MIPS_TIMER_FREQ=440000000 ++CONFIG_ARCH_MTMIPS=y ++CONFIG_SOC_MT7621=y ++# CONFIG_MIPS_CACHE_SETUP is not set ++# CONFIG_MIPS_CACHE_DISABLE is not set ++CONFIG_RESTORE_EXCEPTION_VECTOR_BASE=y ++CONFIG_MIPS_BOOT_FDT=y ++CONFIG_DEBUG_UART=y ++CONFIG_TPL_SYS_MALLOC_F_LEN=0x1000 ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_CFB_CONSOLE_ANSI=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y ++CONFIG_GPIO_HOG=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_FIT=y ++# CONFIG_FIT_ENABLE_SHA256_SUPPORT is not set ++CONFIG_HUSH_PARSER=y ++CONFIG_LOGLEVEL=6 ++# CONFIG_LOG is not set ++# CONFIG_SYS_LONGHELP is not set ++# CONFIG_ARCH_FIXUP_FDT_MEMORY is not set ++CONFIG_SYS_CONSOLE_INFO_QUIET=y ++CONFIG_SPL_SYS_MALLOC_SIMPLE=y ++CONFIG_SPL_NOR_SUPPORT=y ++CONFIG_TPL=y ++# CONFIG_TPL_FRAMEWORK is not set ++CONFIG_LEGACY_IMAGE_FORMAT=y ++# CONFIG_BOOTM_NETBSD is not set ++# CONFIG_BOOTM_PLAN9 is not set ++# CONFIG_BOOTM_RTEMS is not set ++# CONFIG_BOOTM_VXWORKS is not set ++# CONFIG_EFI is not set ++# CONFIG_EFI_LOADER is not set ++CONFIG_CMD_BOOTMENU=y ++# CONFIG_CMD_BOOTEFI is not set ++# CONFIG_CMD_BOOTD is not set ++# CONFIG_CMD_BOOTP is not set ++CONFIG_CMD_BOOTM=y ++# CONFIG_CMD_BOOTDEV is not set ++# CONFIG_CMD_BOOTFLOW is not set ++CONFIG_CMD_BUTTON=y ++CONFIG_CMD_ECHO=y ++# CONFIG_CMD_ELF is not set ++# CONFIG_CMD_BOOTEFI_BOOTMGR is not set ++CONFIG_CMD_ENV_READMEM=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_ITEST=y ++CONFIG_CMD_LED=y ++# CONFIG_CMD_MBR is not set ++CONFIG_CMD_MMC=y ++CONFIG_CMD_MTD=y ++CONFIG_CMD_MTDPART=y ++# CONFIG_CMD_PCI is not set ++CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_PING=y ++CONFIG_CMD_TFTPBOOT=y ++# CONFIG_CMD_UNLZ4 is not set ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_SETEXPR=y ++CONFIG_CMD_SLEEP=y ++CONFIG_CMD_SOURCE=y ++CONFIG_DOS_PARTITION=y ++# CONFIG_SPL_DOS_PARTITION is not set ++# CONFIG_ISO_PARTITION is not set ++# CONFIG_EFI_PARTITION is not set ++# CONFIG_SPL_EFI_PARTITION is not set ++CONFIG_PARTITION_TYPE_GUID=y ++CONFIG_SYS_RELOC_GD_ENV_ADDR=y ++# CONFIG_NET_RANDOM_ETHADDR is not set ++# CONFIG_I2C is not set ++# CONFIG_INPUT is not set ++CONFIG_MMC=y ++# CONFIG_MMC_QUIRKS is not set ++# CONFIG_MMC_HW_PARTITIONING is not set ++CONFIG_MMC_MTK=y ++CONFIG_MTD=y ++CONFIG_DM_MTD=y ++CONFIG_SF_DEFAULT_SPEED=20000000 ++# CONFIG_SPI_FLASH_BAR is not set ++# CONFIG_SPI_FLASH_EON is not set ++# CONFIG_SPI_FLASH_GIGADEVICE is not set ++# CONFIG_SPI_FLASH_ISSI is not set ++# CONFIG_SPI_FLASH_MACRONIX is not set ++# CONFIG_SPI_FLASH_SPANSION is not set ++# CONFIG_SPI_FLASH_STMICRO is not set ++CONFIG_SPI_FLASH_WINBOND=y ++# CONFIG_SPI_FLASH_XMC is not set ++# CONFIG_SPI_FLASH_XTX is not set ++CONFIG_SPI_FLASH_MTD=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PHY=y ++CONFIG_PHY_MTK_TPHY=y ++CONFIG_DEBUG_UART_SHIFT=2 ++CONFIG_SPI=y ++CONFIG_MT7621_SPI=y ++CONFIG_SYSRESET=y ++CONFIG_SYSRESET_RESETCTL=y ++# CONFIG_SYS_XTRACE is not set ++CONFIG_USE_DEFAULT_ENV_FILE=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_WDT=y ++CONFIG_WDT_MT7621=y ++# CONFIG_BINMAN_FDT is not set ++CONFIG_LZMA=y ++CONFIG_SPL_LZMA=y ++# CONFIG_GZIP is not set +--- /dev/null ++++ b/zbtlink_zbt-wg3526-16m_env +@@ -0,0 +1,36 @@ ++ethaddr_factory=mtd read factory $loadaddr 0x0 0x10000 ; setexpr macoffs $loadaddr + 0xe000 ; env readmem -b ethaddr $macoffs 0x6 ; setenv ethaddr_factory ++ipaddr=192.168.1.1 ++serverip=192.168.1.254 ++loadaddr=0x83000000 ++bootcmd=run boot_nor ++bootdelay=0 ++bootfile=openwrt-ramips-mt7621-zbtlink_zbt-wg3526-16m-initramfs-kernel.bin ++bootfile_uboot=u-boot-mt7621.bin ++bootfile_upg=openwrt-ramips-mt7621-zbtlink_zbt-wg3526-16m-squashfs-sysupgrade.bin ++bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60 ++bootmenu_default=0 ++bootmenu_delay=0 ++bootmenu_title= ( ( ( OpenWrt ) ) ) ++bootmenu_0=Initialize environment.=run _firstboot ++bootmenu_0d=Run default boot command.=run boot_default ++bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return ++bootmenu_2=Boot system from flash.=run boot_nor ; run bootmenu_confirm_return ++bootmenu_3=Load system via TFTP then write to flash.=run boot_tftp_sysupgrade ; run bootmenu_confirm_return ++bootmenu_4=Load U-Boot via TFTP then write to flash.=run boot_tftp_write_uboot ; run bootmenu_confirm_return ++bootmenu_5=Reset all settings to factory defaults.=run reset_factory ; reset ++bootmenu_6=Reboot.=reset ++boot_first=if button reset ; then run boot_tftp ; setenv flag_recover 1 ; run boot_default ; fi ; bootmenu ++boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_tftp_forever ++boot_nor=bootm 0x1fc50000 ++boot_tftp=tftpboot $loadaddr $bootfile && bootm $loadaddr ++boot_tftp_forever=while true ; do run boot_tftp ; sleep 1 ; done ++boot_tftp_sysupgrade=tftpboot $loadaddr $bootfile_upg && iminfo $loadaddr && run nor_write_production ++boot_tftp_write_uboot=tftpboot $loadaddr $bootfile_uboot && run nor_write_uboot ++reset_factory=mtd erase u-boot-env 0x0 0x10000 && reset ++nor_pad_size=setexpr image_eb $filesize / 0x1000 ; setexpr tmp1 image_size % 0x1000 ; test 0x$tmp1 -gt 0 && setexpr image_eb $image_eb + 1 ; setexpr image_eb $image_eb * 0x1000 ++nor_write_production=run nor_pad_size ; test 0x$image_eb -le 0xfb0000 && mtd erase firmware 0x0 0x$image_eb && mtd write firmware $loadaddr 0x0 $filesize ++nor_write_uboot=mtd erase u-boot 0x0 0x30000 && mtd write u-boot $loadaddr 0x0 0x30000 ++_init_env=setenv _init_env ; saveenv ++_firstboot=setenv _firstboot ; run _switch_to_menu ; run ethaddr_factory ; run _init_env ; run boot_first ++_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title ++_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" +--- /dev/null ++++ b/arch/mips/dts/zbtlink,zbt-wg3526.dts +@@ -0,0 +1,131 @@ ++// SPDX-License-Identifier: GPL-2.0 ++/* ++ * Copyright (C) 2022 MediaTek Inc. All rights reserved. ++ * ++ * Author: Weijie Gao ++ */ ++ ++/dts-v1/; ++ ++#include "mt7621.dtsi" ++#include ++ ++/ { ++ compatible = "zbtlink,zbt-wg3526", "mediatek,mt7621-rfb", "mediatek,mt7621-soc"; ++ model = "Zbtlink WG3526"; ++ ++ aliases { ++ ethernet0 = ð ++ serial0 = &uart0; ++ spi0 = &spi; ++ }; ++ ++ chosen { ++ stdout-path = &uart0; ++ }; ++ ++ keys { ++ compatible = "gpio-keys"; ++ ++ reset { ++ label = "reset"; ++ gpios = <&gpio 18 GPIO_ACTIVE_LOW>; ++ }; ++ }; ++ ++ leds { ++ compatible = "gpio-leds"; ++ ++ led_status: status { ++ label = "green:status"; ++ gpios = <&gpio 24 GPIO_ACTIVE_LOW>; ++ }; ++ }; ++}; ++ ++&pinctrl { ++ state_default: pin_state { ++ gpios { ++ groups = "i2c", "uart3", "pcie reset"; ++ function = "gpio"; ++ }; ++ ++ wdt { ++ groups = "wdt"; ++ function = "wdt rst"; ++ }; ++ ++ jtag { ++ groups = "jtag"; ++ function = "jtag"; ++ }; ++ }; ++}; ++ ++&uart0 { ++ status = "okay"; ++}; ++ ++&gpio { ++ status = "okay"; ++}; ++ ++&spi { ++ status = "okay"; ++ num-cs = <2>; ++ ++ spi-flash@0 { ++ #address-cells = <1>; ++ #size-cells = <1>; ++ compatible = "jedec,spi-nor"; ++ spi-max-frequency = <25000000>; ++ reg = <0>; ++ ++ ++ partitions { ++ compatible = "fixed-partitions"; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ partition@0 { ++ label = "u-boot"; ++ reg = <0x0 0x30000>; ++ }; ++ ++ partition@30000 { ++ label = "u-boot-env"; ++ reg = <0x30000 0x10000>; ++ }; ++ ++ factory: partition@40000 { ++ label = "factory"; ++ reg = <0x40000 0x10000>; ++ read-only; ++ }; ++ ++ firmware: partition@50000 { ++ compatible = "denx,uimage"; ++ label = "firmware"; ++ reg = <0x50000 0xfb0000>; ++ }; ++ }; ++ }; ++}; ++ ++ð { ++ status = "okay"; ++}; ++ ++&mmc { ++ cap-sd-highspeed; ++ ++ status = "okay"; ++}; ++ ++&ssusb { ++ status = "okay"; ++}; ++ ++&u3phy { ++ status = "okay"; ++}; diff --git a/lede/package/boot/uboot-mediatek/patches/429-add-netcore-n60.patch b/lede/package/boot/uboot-mediatek/patches/429-add-netcore-n60.patch new file mode 100644 index 0000000000..2304fcd5ce --- /dev/null +++ b/lede/package/boot/uboot-mediatek/patches/429-add-netcore-n60.patch @@ -0,0 +1,433 @@ +--- /dev/null ++++ b/configs/mt7986_netcore_n60_defconfig +@@ -0,0 +1,182 @@ ++CONFIG_ARM=y ++CONFIG_POSITION_INDEPENDENT=y ++CONFIG_ARCH_MEDIATEK=y ++CONFIG_TARGET_MT7986=y ++CONFIG_TEXT_BASE=0x41e00000 ++CONFIG_SYS_MALLOC_F_LEN=0x4000 ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_DEFAULT_DEVICE_TREE="mt7986a-netcore-n60" ++CONFIG_DEFAULT_ENV_FILE="netcore_n60_env" ++CONFIG_DEFAULT_FDT_FILE="mediatek/mt7986a-netcore-n60.dtb" ++CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_DEBUG_UART_BASE=0x11002000 ++CONFIG_DEBUG_UART_CLOCK=40000000 ++CONFIG_DEBUG_UART=y ++CONFIG_SYS_LOAD_ADDR=0x46000000 ++CONFIG_SMBIOS_PRODUCT_NAME="" ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_CFB_CONSOLE_ANSI=y ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y ++CONFIG_GPIO_HOG=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_FIT=y ++CONFIG_FIT_ENABLE_SHA256_SUPPORT=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y ++CONFIG_LOGLEVEL=7 ++CONFIG_LOG=y ++CONFIG_SYS_PROMPT="MT7986> " ++CONFIG_CMD_BOOTMENU=y ++CONFIG_CMD_BOOTP=y ++CONFIG_CMD_BUTTON=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_CPU=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DM=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_ECHO=y ++CONFIG_CMD_ENV_READMEM=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_EXT4=y ++CONFIG_CMD_FAT=y ++CONFIG_CMD_FDT=y ++CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_GPT=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_ITEST=y ++CONFIG_CMD_LED=y ++CONFIG_CMD_LICENSE=y ++CONFIG_CMD_LINK_LOCAL=y ++# CONFIG_CMD_MBR is not set ++CONFIG_CMD_PCI=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_PING=y ++CONFIG_CMD_PXE=y ++CONFIG_CMD_PWM=y ++CONFIG_CMD_SMC=y ++CONFIG_CMD_TFTPBOOT=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_UBI=y ++CONFIG_CMD_UBI_RENAME=y ++CONFIG_CMD_UBIFS=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_PART=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_SETEXPR=y ++CONFIG_CMD_SLEEP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_SOURCE=y ++CONFIG_CMD_STRINGS=y ++CONFIG_CMD_USB=y ++CONFIG_CMD_UUID=y ++CONFIG_DISPLAY_CPUINFO=y ++CONFIG_DM_MTD=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_DM_USB=y ++CONFIG_DM_PWM=y ++CONFIG_PWM_MTK=y ++CONFIG_HUSH_PARSER=y ++CONFIG_SYS_REDUNDAND_ENVIRONMENT=y ++CONFIG_SYS_RELOC_GD_ENV_ADDR=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_PARTITION_UUIDS=y ++CONFIG_NETCONSOLE=y ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_CLK=y ++CONFIG_DM_GPIO=y ++CONFIG_DM_SCSI=y ++CONFIG_AHCI=y ++CONFIG_AHCI_PCI=y ++CONFIG_SCSI_AHCI=y ++CONFIG_SCSI=y ++CONFIG_CMD_SCSI=y ++CONFIG_PHY=y ++CONFIG_PHY_MTK_TPHY=y ++CONFIG_PHY_FIXED=y ++CONFIG_MTK_AHCI=y ++CONFIG_DM_ETH=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PCI=y ++# CONFIG_MMC is not set ++# CONFIG_DM_MMC is not set ++CONFIG_MTD=y ++CONFIG_MTD_UBI_FASTMAP=y ++CONFIG_DM_PCI=y ++CONFIG_PCIE_MEDIATEK=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7622=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_PRE_CONSOLE_BUFFER=y ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_RAM=y ++CONFIG_DM_SERIAL=y ++CONFIG_MTK_SERIAL=y ++CONFIG_SPI=y ++CONFIG_DM_SPI=y ++CONFIG_MTK_SPI_NAND=y ++CONFIG_MTK_SPI_NAND_MTD=y ++CONFIG_SYSRESET_WATCHDOG=y ++CONFIG_WDT_MTK=y ++CONFIG_LZO=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y ++CONFIG_RANDOM_UUID=y ++CONFIG_REGEX=y ++CONFIG_USB=y ++CONFIG_USB_HOST=y ++CONFIG_USB_XHCI_HCD=y ++CONFIG_USB_XHCI_MTK=y ++CONFIG_USB_STORAGE=y ++CONFIG_OF_EMBED=y ++CONFIG_ENV_OVERWRITE=y ++CONFIG_ENV_IS_IN_UBI=y ++CONFIG_ENV_UBI_PART="ubi" ++CONFIG_ENV_SIZE=0x1f000 ++CONFIG_ENV_SIZE_REDUND=0x1f000 ++CONFIG_ENV_UBI_VOLUME="ubootenv" ++CONFIG_ENV_UBI_VOLUME_REDUND="ubootenv2" ++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_NET_RANDOM_ETHADDR=y ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_CLK=y ++CONFIG_PHY_FIXED=y ++CONFIG_DM_ETH=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7986=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_SERIAL=y ++CONFIG_MTK_SERIAL=y ++CONFIG_HEXDUMP=y ++CONFIG_USE_DEFAULT_ENV_FILE=y ++CONFIG_MTD_SPI_NAND=y ++CONFIG_MTK_SPIM=y ++CONFIG_CMD_MTD=y ++CONFIG_CMD_NAND=y ++CONFIG_CMD_NAND_TRIMFFS=y ++CONFIG_LMB_MAX_REGIONS=64 ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.254" +--- /dev/null ++++ b/arch/arm/dts/mt7986a-netcore-n60.dts +@@ -0,0 +1,185 @@ ++// SPDX-License-Identifier: GPL-2.0 ++/* ++ * Copyright (c) 2021 MediaTek Inc. ++ * Author: Sam Shih ++ */ ++ ++/dts-v1/; ++#include "mt7986.dtsi" ++#include ++#include ++ ++/ { ++ #address-cells = <1>; ++ #size-cells = <1>; ++ model = "Netcore N60"; ++ compatible = "mediatek,mt7986", "mediatek,mt7986-rfb"; ++ ++ chosen { ++ stdout-path = &uart0; ++ tick-timer = &timer0; ++ }; ++ ++ memory@40000000 { ++ device_type = "memory"; ++ reg = <0x40000000 0x20000000>; ++ }; ++ ++ keys { ++ compatible = "gpio-keys"; ++ ++ factory { ++ label = "reset"; ++ linux,code = ; ++ gpios = <&gpio 9 GPIO_ACTIVE_LOW>; ++ }; ++ ++ wps { ++ label = "wps"; ++ linux,code = ; ++ gpios = <&gpio 10 GPIO_ACTIVE_LOW>; ++ }; ++ }; ++ ++ leds { ++ compatible = "gpio-leds"; ++ ++ status_red { ++ label = "red:status"; ++ gpios = <&gpio 29 GPIO_ACTIVE_LOW>; ++ }; ++ ++ status_green { ++ label = "green:status"; ++ gpios = <&gpio 32 GPIO_ACTIVE_LOW>; ++ }; ++ }; ++}; ++ ++&uart0 { ++ mediatek,force-highspeed; ++ status = "okay"; ++}; ++ ++&uart1 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&uart1_pins>; ++ status = "disabled"; ++}; ++ ++ð { ++ status = "okay"; ++ mediatek,gmac-id = <0>; ++ phy-mode = "2500base-x"; ++ mediatek,switch = "mt7531"; ++ reset-gpios = <&gpio 5 GPIO_ACTIVE_HIGH>; ++ ++ fixed-link { ++ speed = <2500>; ++ full-duplex; ++ }; ++}; ++ ++&pinctrl { ++ spi_flash_pins: spi0-pins-func-1 { ++ mux { ++ function = "flash"; ++ groups = "spi0", "spi0_wp_hold"; ++ }; ++ ++ conf-pu { ++ pins = "SPI2_CS", "SPI2_HOLD", "SPI2_WP"; ++ drive-strength = ; ++ bias-pull-up = ; ++ }; ++ ++ conf-pd { ++ pins = "SPI2_CLK", "SPI2_MOSI", "SPI2_MISO"; ++ drive-strength = ; ++ bias-pull-down = ; ++ }; ++ }; ++ ++ spic_pins: spi1-pins-func-1 { ++ mux { ++ function = "spi"; ++ groups = "spi1_2"; ++ }; ++ }; ++ ++ uart1_pins: spi1-pins-func-3 { ++ mux { ++ function = "uart"; ++ groups = "uart1_2"; ++ }; ++ }; ++ ++ pwm_pins: pwm0-pins-func-1 { ++ mux { ++ function = "pwm"; ++ groups = "pwm0"; ++ }; ++ }; ++}; ++ ++&pwm { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pwm_pins>; ++ status = "okay"; ++}; ++ ++&spi0 { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&spi_flash_pins>; ++ status = "okay"; ++ must_tx; ++ enhance_timing; ++ dma_ext; ++ ipm_design; ++ support_quad; ++ tick_dly = <1>; ++ sample_sel = <0>; ++ ++ spi_nand@1 { ++ compatible = "spi-nand"; ++ reg = <1>; ++ spi-max-frequency = <52000000>; ++ ++ partitions { ++ compatible = "fixed-partitions"; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ partition@0 { ++ label = "bl2"; ++ reg = <0x0 0x100000>; ++ }; ++ ++ partition@100000 { ++ label = "orig-env"; ++ reg = <0x100000 0x80000>; ++ }; ++ ++ partition@160000 { ++ label = "factory"; ++ reg = <0x180000 0x200000>; ++ }; ++ ++ partition@380000 { ++ label = "fip"; ++ reg = <0x380000 0x200000>; ++ }; ++ ++ partition@580000 { ++ label = "ubi"; ++ reg = <0x580000 0x7280000>; ++ }; ++ }; ++ }; ++}; ++ ++&watchdog { ++ status = "disabled"; ++}; +--- /dev/null ++++ b/netcore_n60_env +@@ -0,0 +1,57 @@ ++ipaddr=192.168.1.1 ++serverip=192.168.1.254 ++loadaddr=0x46000000 ++console=earlycon=uart8250,mmio32,0x11002000 console=ttyS0 ++bootcmd=if pstore check ; then run boot_recovery ; else run boot_ubi ; fi ++bootconf=config-1 ++bootdelay=0 ++bootfile=openwrt-mediatek-filogic-netcore_n60-initramfs-recovery.itb ++bootfile_bl2=openwrt-mediatek-filogic-netcore_n60-preloader.bin ++bootfile_fip=openwrt-mediatek-filogic-netcore_n60-bl31-uboot.fip ++bootfile_upg=openwrt-mediatek-filogic-netcore_n60-squashfs-sysupgrade.itb ++bootled_pwr=green:status ++bootled_rec=red:status ++bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60 ++bootmenu_default=0 ++bootmenu_delay=0 ++bootmenu_title= ( ( ( OpenWrt ) ) ) ++bootmenu_0=Initialize environment.=run _firstboot ++bootmenu_0d=Run default boot command.=run boot_default ++bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return ++bootmenu_2=Boot production system from NAND.=run boot_production ; run bootmenu_confirm_return ++bootmenu_3=Boot recovery system from NAND.=run boot_recovery ; run bootmenu_confirm_return ++bootmenu_4=Load production system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_production ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_5=Load recovery system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_recovery ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_6=Load BL31+U-Boot FIP via TFTP then write to NAND.=run boot_tftp_write_fip ; run bootmenu_confirm_return ++bootmenu_7=Load BL2 preloader via TFTP then write to NAND.=run boot_tftp_write_bl2 ; run bootmenu_confirm_return ++bootmenu_8=Reboot.=reset ++bootmenu_9=Reset all settings to factory defaults.=run reset_factory ; reset ++boot_first=if button reset ; then led $bootled_rec on ; run boot_tftp_recovery ; setenv flag_recover 1 ; run boot_default ; fi ; bootmenu ++boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_recovery ; setenv replacevol 1 ; run boot_tftp_forever ++boot_production=led $bootled_pwr on ; run ubi_read_production && bootm $loadaddr#$bootconf ; led $bootled_pwr off ++boot_recovery=led $bootled_rec on ; run ubi_read_recovery && bootm $loadaddr#$bootconf ; led $bootled_rec off ++boot_ubi=run boot_production ; run boot_recovery ; run boot_tftp_forever ++boot_tftp_forever=led $bootled_rec on ; while true ; do run boot_tftp_recovery ; sleep 1 ; done ++boot_tftp_production=tftpboot $loadaddr $bootfile_upg && env exists replacevol && iminfo $loadaddr && run ubi_write_production ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp_recovery=tftpboot $loadaddr $bootfile && env exists replacevol && iminfo $loadaddr && run ubi_write_recovery ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp=tftpboot $loadaddr $bootfile && bootm $loadaddr#$bootconf ++boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run mtd_write_fip && run reset_factory ++boot_tftp_write_bl2=tftpboot $loadaddr $bootfile_bl2 && run mtd_write_bl2 ++part_default=production ++part_recovery=recovery ++reset_factory=ubi part ubi ; mw $loadaddr 0x0 0x800 ; ubi write $loadaddr ubootenv 0x800 ; ubi write $loadaddr ubootenv2 0x800 ++mtd_write_fip=mtd erase fip && mtd write fip $loadaddr ++mtd_write_bl2=mtd erase bl2 && mtd write bl2 $loadaddr ++ubi_create_env=ubi check ubootenv || ubi create ubootenv 0x100000 dynamic 0 || run ubi_format ; ubi check ubootenv2 || ubi create ubootenv2 0x100000 dynamic 1 || run ubi_format ++ubi_format=ubi detach ; mtd erase ubi && ubi part ubi ; reset ++ubi_prepare_rootfs=if ubi check rootfs_data ; then else if env exists rootfs_data_max ; then ubi create rootfs_data $rootfs_data_max dynamic || ubi create rootfs_data - dynamic ; else ubi create rootfs_data - dynamic ; fi ; fi ++ubi_read_production=ubi read $loadaddr fit && iminfo $loadaddr && run ubi_prepare_rootfs ++ubi_read_recovery=ubi check recovery && ubi read $loadaddr recovery ++ubi_remove_rootfs=ubi check rootfs_data && ubi remove rootfs_data ++ubi_write_production=ubi check fit && ubi remove fit ; run ubi_remove_rootfs ; ubi create fit $filesize dynamic 2 && ubi write $loadaddr fit $filesize ++ubi_write_recovery=ubi check recovery && ubi remove recovery ; run ubi_remove_rootfs ; ubi create recovery $filesize dynamic 3 && ubi write $loadaddr recovery $filesize ++ethaddr_factory=mtd read factory 0x40080000 0x1fe000 0x1000 && env readmem -b ethaddr 0x40080f20 0x6 ; setenv ethaddr_factory ++_init_env=setenv _init_env ; run ubi_create_env ; saveenv ; saveenv ++_firstboot=setenv _firstboot ; run ethaddr_factory ; run _switch_to_menu ; run _init_env ; run boot_first ++_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title ++_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" diff --git a/lede/package/boot/uboot-mediatek/patches/430-add-bpi-r3.patch b/lede/package/boot/uboot-mediatek/patches/430-add-bpi-r3.patch index 1567ba537c..cbcda89119 100644 --- a/lede/package/boot/uboot-mediatek/patches/430-add-bpi-r3.patch +++ b/lede/package/boot/uboot-mediatek/patches/430-add-bpi-r3.patch @@ -1,6 +1,6 @@ --- /dev/null +++ b/configs/mt7986a_bpi-r3-emmc_defconfig -@@ -0,0 +1,196 @@ +@@ -0,0 +1,197 @@ +CONFIG_ARM=y +CONFIG_POSITION_INDEPENDENT=y +CONFIG_ARCH_MEDIATEK=y @@ -13,6 +13,7 @@ +CONFIG_DEFAULT_ENV_FILE="bananapi_bpi-r3_emmc_env" +CONFIG_DEFAULT_FDT_FILE="mediatek/mt7986a-bpi-r3-emmc.dtb" +CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_OF_SYSTEM_SETUP=y +CONFIG_DEBUG_UART_BASE=0x11002000 +CONFIG_DEBUG_UART_CLOCK=40000000 +CONFIG_DEBUG_UART=y @@ -199,7 +200,7 @@ +CONFIG_SERVERIP="192.168.1.254" --- /dev/null +++ b/configs/mt7986a_bpi-r3-nor_defconfig -@@ -0,0 +1,195 @@ +@@ -0,0 +1,193 @@ +CONFIG_ARM=y +CONFIG_POSITION_INDEPENDENT=y +CONFIG_ARCH_MEDIATEK=y @@ -212,6 +213,7 @@ +CONFIG_DEFAULT_ENV_FILE="bananapi_bpi-r3_nor_env" +CONFIG_DEFAULT_FDT_FILE="mediatek/mt7986a-bpi-r3-emmc.dtb" +CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_OF_SYSTEM_SETUP=y +CONFIG_DEBUG_UART_BASE=0x11002000 +CONFIG_DEBUG_UART_CLOCK=40000000 +CONFIG_DEBUG_UART=y @@ -271,9 +273,6 @@ +CONFIG_CMD_SMC=y +CONFIG_CMD_TFTPBOOT=y +CONFIG_CMD_TFTPSRV=y -+CONFIG_CMD_UBI=y -+CONFIG_CMD_UBI_RENAME=y -+CONFIG_CMD_UBIFS=y +CONFIG_CMD_ASKENV=y +CONFIG_CMD_PART=y +CONFIG_CMD_RARP=y @@ -397,7 +396,7 @@ +CONFIG_SERVERIP="192.168.1.254" --- /dev/null +++ b/configs/mt7986a_bpi-r3-sd_defconfig -@@ -0,0 +1,196 @@ +@@ -0,0 +1,197 @@ +CONFIG_ARM=y +CONFIG_POSITION_INDEPENDENT=y +CONFIG_ARCH_MEDIATEK=y @@ -410,6 +409,7 @@ +CONFIG_DEFAULT_ENV_FILE="bananapi_bpi-r3_sdmmc_env" +CONFIG_DEFAULT_FDT_FILE="mediatek/mt7986a-bpi-r3-sd.dtb" +CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_OF_SYSTEM_SETUP=y +CONFIG_DEBUG_UART_BASE=0x11002000 +CONFIG_DEBUG_UART_CLOCK=40000000 +CONFIG_DEBUG_UART=y @@ -596,7 +596,7 @@ +CONFIG_SERVERIP="192.168.1.254" --- /dev/null +++ b/configs/mt7986a_bpi-r3-snand_defconfig -@@ -0,0 +1,197 @@ +@@ -0,0 +1,198 @@ +CONFIG_ARM=y +CONFIG_POSITION_INDEPENDENT=y +CONFIG_ARCH_MEDIATEK=y @@ -609,6 +609,7 @@ +CONFIG_DEFAULT_ENV_FILE="bananapi_bpi-r3_snand_env" +CONFIG_DEFAULT_FDT_FILE="mediatek/mt7986a-bpi-r3-emmc.dtb" +CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_OF_SYSTEM_SETUP=y +CONFIG_DEBUG_UART_BASE=0x11002000 +CONFIG_DEBUG_UART_CLOCK=40000000 +CONFIG_DEBUG_UART=y @@ -796,12 +797,12 @@ +CONFIG_SERVERIP="192.168.1.254" --- /dev/null +++ b/bananapi_bpi-r3_sdmmc_env -@@ -0,0 +1,80 @@ +@@ -0,0 +1,81 @@ +ipaddr=192.168.1.1 +serverip=192.168.1.254 +loadaddr=0x46000000 +console=earlycon=uart8250,mmio32,0x11002000 console=ttyS0 -+bootargs=root=/dev/mmcblk0p65 ++bootargs=root=/dev/fit0 rootwait +bootcmd=if pstore check ; then run boot_recovery ; else run boot_sdmmc ; fi +bootconf=config-mt7986a-bananapi-bpi-r3 +bootconf_base=config-mt7986a-bananapi-bpi-r3 @@ -853,26 +854,27 @@ +sdmmc_read_emmc_install=part start mmc 0 install part_addr && setexpr offset $part_addr + 0x3800 && mmc read $loadaddr $offset 0x4000 +sdmmc_write_production=part start mmc 0 $part_default part_addr && part size mmc 0 $part_default part_size && run mmc_write_vol +sdmmc_write_recovery=part start mmc 0 $part_recovery part_addr && part size mmc 0 $part_recovery part_size && run mmc_write_vol -+mtd_write_fip=mtd erase fip && mtd write fip $loadaddr -+mtd_write_bl2=mtd erase bl2 && mtd write bl2 $loadaddr ++snand_write_bl2=mtd erase bl2 0x0 0x100000 && mtd write bl2 $loadaddr 0x0 0x40000 && mtd write bl2 $loadaddr 0x40000 0x40000 && mtd write bl2 $loadaddr 0x80000 0x40000 && mtd write bl2 $loadaddr 0xc0000 0x40000 ++nor_write_bl2=mtd erase bl2 && mtd write bl2 $loadaddr ++nor_write_fip=mtd erase fip && mtd write fip $loadaddr +nor_pad_size=imsz $loadaddr image_size ; setexpr image_eb 0x$image_size / 0x10000 ; setexpr tmp1 0x$image_size % 0x10000 ; test 0x$tmp1 -gt 0 && setexpr image_eb 0x$image_eb + 1 ; setexpr image_eb $image_eb * 0x10000 +nor_erase_env=mtd erase u-boot-env +nor_write_production=run nor_pad_size ; test 0x$image_eb -le 0x3000000 && mtd erase fit && mtd write fit $loadaddr 0x0 $image_eb +nor_write_recovery=run nor_pad_size ; test 0x$image_eb -le 0x900000 && mtd erase recovery 0x0 0x$image_eb && mtd write recovery $loadaddr 0x0 $image_eb +nor_init=run nor_init_bl && run nor_init_openwrt -+nor_init_bl=run sdmmc_read_nor_bl2 && run mtd_write_bl2 && run sdmmc_read_nor_fip && run mtd_write_fip && run nor_erase_env ++nor_init_bl=run sdmmc_read_nor_bl2 && run nor_write_bl2 && run sdmmc_read_nor_fip && run nor_write_fip && run nor_erase_env +nor_init_openwrt=run sdmmc_read_recovery && iminfo $loadaddr && run nor_write_recovery ; run sdmmc_read_production && iminfo $loadaddr && run nor_write_production -+ubi_create_env=ubi create ubootenv 0x100000 dynamic 0 ; ubi create ubootenv2 0x100000 dynamic 1 +ubi_format=ubi detach ; mtd erase ubi && ubi part ubi -+ubi_init=run ubi_init_bl && run ubi_format && run ubi_create_env && run ubi_init_openwrt && run ubi_init_emmc_install ++ubi_init=run ubi_format && run ubi_init_bl && run ubi_init_openwrt && run ubi_init_emmc_install +ubi_init_openwrt=run sdmmc_read_recovery && iminfo $loadaddr && run ubi_write_recovery ; run sdmmc_read_production && iminfo $loadaddr && run ubi_write_production -+ubi_init_bl=run sdmmc_read_snand_bl2 && run mtd_write_bl2 && run sdmmc_read_snand_fip && run mtd_write_fip ++ubi_init_bl=run sdmmc_read_snand_bl2 && run snand_write_bl2 && run sdmmc_read_snand_fip && run ubi_write_fip +ubi_init_emmc_install=run sdmmc_read_emmc_install && run ubi_write_emmc_install +ubi_prepare_rootfs=if ubi check rootfs_data ; then else if env exists rootfs_data_max ; then ubi create rootfs_data $rootfs_data_max dynamic || ubi create rootfs_data - dynamic ; else ubi create rootfs_data - dynamic ; fi ; fi +ubi_remove_rootfs=ubi check rootfs_data && ubi remove rootfs_data ++ubi_write_fip=run ubi_remove_rootfs ; ubi check fip && ubi remove fip ; ubi create fip 0x200000 static ; ubi write $loadaddr fip 0x200000 +ubi_write_emmc_install=ubi check emmc_install && ubi remove emmc_install ; ubi create emmc_install 0x800000 dynamic ; ubi write $loadaddr emmc_install 0x800000 -+ubi_write_production=ubi check fit && ubi remove fit ; run ubi_remove_rootfs ; ubi create fit $filesize dynamic 2 && ubi write $loadaddr fit $filesize -+ubi_write_recovery=ubi check recovery && ubi remove recovery ; run ubi_remove_rootfs ; ubi create recovery $filesize dynamic 3 && ubi write $loadaddr recovery $filesize ++ubi_write_production=ubi check fit && ubi remove fit ; run ubi_remove_rootfs ; ubi create fit $filesize dynamic && ubi write $loadaddr fit $filesize ++ubi_write_recovery=ubi check recovery && ubi remove recovery ; run ubi_remove_rootfs ; ubi create recovery $filesize dynamic && ubi write $loadaddr recovery $filesize +_init_env=setenv _init_env ; setenv _create_env ; saveenv ; saveenv +_firstboot=setenv _firstboot ; run _switch_to_menu ; run _init_env ; run boot_first +_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title @@ -884,7 +886,7 @@ +serverip=192.168.1.254 +loadaddr=0x46000000 +console=earlycon=uart8250,mmio32,0x11002000 console=ttyS0 -+bootargs=root=/dev/mtdblock0p1 ++bootargs=root=/dev/fit0 rootwait +bootcmd=if pstore check ; then run boot_recovery ; else run boot_nor ; fi +bootconf=config-mt7986a-bananapi-bpi-r3 +bootconf_base=config-mt7986a-bananapi-bpi-r3 @@ -911,7 +913,7 @@ +bootmenu_4=Load production system via TFTP then write to flash.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_production ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return +bootmenu_5=Load recovery system via TFTP then write to flash.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_recovery ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return +bootmenu_6=Load BL31+U-Boot FIP via TFTP then write to flash.=run boot_tftp_write_fip ; run bootmenu_confirm_return -+bootmenu_7=Load BL2 preloader via TFTP then write to flash.=run boot_tftp_write_preloader ; run bootmenu_confirm_return ++bootmenu_7=Load BL2 preloader via TFTP then write to flash.=run boot_tftp_write_bl2 ; run bootmenu_confirm_return +bootmenu_8=Reboot.=reset +bootmenu_9=Reset all settings to factory defaults.=run reset_factory ; reset +boot_first=if button reset ; then led $bootled_rec on ; run boot_tftp_recovery ; setenv flag_recover 1 ; run boot_default ; fi ; bootmenu @@ -924,13 +926,13 @@ +boot_tftp_production=run boot_update_conf ; tftpboot $loadaddr $bootfile_upg && env exists replacevol && iminfo $loadaddr && run nor_write_production ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi +boot_tftp_recovery=run boot_update_conf ; tftpboot $loadaddr $bootfile && env exists replacevol && iminfo $loadaddr && run nor_write_recovery ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi +boot_tftp=run boot_update_conf ; tftpboot $loadaddr $bootfile && bootm $loadaddr#$bootconf -+boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run boot_write_fip -+boot_tftp_write_preloader=tftpboot $loadaddr $bootfile_bl2 && run boot_write_preloader ++boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run nor_write_fip ++boot_tftp_write_bl2=tftpboot $loadaddr $bootfile_bl2 && run nor_write_bl2 +boot_update_conf=if mmc partconf 0 ; then setenv bootconf $bootconf_base#$bootconf_nor#$bootconf_emmc ; else setenv bootconf $bootconf_base#$bootconf_nor#$bootconf_sd ; fi +boot_nor=run boot_production ; run boot_recovery -+boot_write_fip=mtd erase fip && mtd write fip $loadaddr -+boot_write_preloader=mtd erase bl2 && mtd write bl2 $loadaddr +reset_factory=mtd erase u-boot-env ++nor_write_fip=mtd erase fip && mtd write fip $loadaddr ++nor_write_bl2=mtd erase bl2 && mtd write bl2 $loadaddr +nor_read_production=mtd read fit $loadaddr 0x0 0x20000 && imsz $loadaddr image_size && mtd read fit $loadaddr 0x0 $image_size +nor_read_recovery=mtd read recovery $loadaddr 0x0 0x20000 && imsz $loadaddr image_size && mtd read recovery $loadaddr 0x0 $image_size +nor_pad_size=imsz $loadaddr image_size ; setexpr image_eb 0x$image_size / 0x10000 ; setexpr tmp1 0x$image_size % 0x10000 ; test 0x$tmp1 -gt 0 && setexpr image_eb 0x$image_eb + 1 ; setexpr image_eb $image_eb * 0x10000 @@ -942,12 +944,12 @@ +_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" --- /dev/null +++ b/bananapi_bpi-r3_snand_env -@@ -0,0 +1,74 @@ +@@ -0,0 +1,73 @@ +ipaddr=192.168.1.1 +serverip=192.168.1.254 +loadaddr=0x46000000 +console=earlycon=uart8250,mmio32,0x11002000 console=ttyS0 -+bootargs=root=/dev/ubiblock0_2p1 ++bootargs=root=/dev/fit0 rootwait +bootconf=config-mt7986a-bananapi-bpi-r3 +bootconf_base=config-mt7986a-bananapi-bpi-r3 +bootconf_nor=mt7986a-bananapi-bpi-r3-nor @@ -982,28 +984,27 @@ +boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_recovery ; setenv replacevol 1 ; run boot_tftp_forever +boot_production=run boot_update_conf ; led $bootled_pwr on ; run ubi_read_production && bootm $loadaddr#$bootconf ; led $bootled_pwr off +boot_recovery=run boot_update_conf ; led $bootled_rec on ; run ubi_read_recovery && bootm $loadaddr#$bootconf ; led $bootled_rec off -+boot_ubi=run boot_update_conf ; run boot_production ; run boot_recovery ++boot_ubi=run boot_production ; run boot_recovery +boot_tftp_forever=led $bootled_rec on ; while true ; do run boot_tftp_recovery ; sleep 1 ; done +boot_tftp_production=run boot_update_conf ; tftpboot $loadaddr $bootfile_upg && env exists replacevol && iminfo $loadaddr && run ubi_write_production ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi +boot_tftp_recovery=run boot_update_conf ; tftpboot $loadaddr $bootfile && env exists replacevol && iminfo $loadaddr && run ubi_write_recovery ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi +boot_tftp=run boot_update_conf ; tftpboot $loadaddr $bootfile && bootm $loadaddr#$bootconf -+boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run mtd_write_fip && run reset_factory -+boot_tftp_write_bl2=tftpboot $loadaddr $bootfile_bl2 && run mtd_write_bl2 -+boot_update_conf=if mmc partconf 0 ; then setenv bootconf $bootconf_base#$bootconf_nand#$bootconf_emmc ; else setenv bootconf $bootconf_base#$bootconf_nand#$bootconf_sd ; fi ++boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run ubi_write_fip && run reset_factory ++boot_tftp_write_bl2=tftpboot $loadaddr $bootfile_bl2 && run snand_write_bl2 ++boot_update_conf=if mmc partconf 0 ; then setenv bootconf $bootconf_base#$bootconf_nand#$bootconf_emmc ; else setenv bootconf $bootconf_base#$bootconf_nand#$bootconf_sd ; fi +part_default=production +part_recovery=recovery -+reset_factory=ubi part ubi ; mw $loadaddr 0x0 0x800 ; ubi write $loadaddr ubootenv 0x800 ; ubi write $loadaddr ubootenv2 0x800 -+mtd_write_fip=mtd erase fip && mtd write fip $loadaddr -+mtd_write_bl2=mtd erase bl2 && mtd write bl2 $loadaddr -+ubi_create_env=ubi check ubootenv || ubi create ubootenv 0x100000 dynamic 0 ; ubi check ubootenv2 || ubi create ubootenv2 0x100000 dynamic 1 -+ubi_format=ubi detach ; mtd erase ubi && ubi part ubi ; reset ++reset_factory=ubi part ubi ; mw $loadaddr 0xff 0x1f000 ; ubi write $loadaddr ubootenv 0x1f000 ; ubi write $loadaddr ubootenv2 0x1f000 ++snand_write_bl2=mtd erase bl2 0x0 0x100000 && mtd write bl2 $loadaddr 0x0 0x40000 && mtd write bl2 $loadaddr 0x40000 0x40000 && mtd write bl2 $loadaddr 0x80000 0x40000 && mtd write bl2 $loadaddr 0xc0000 0x40000 ++ubi_create_env=ubi check ubootenv || ubi create ubootenv 0x1f000 dynamic ; ubi check ubootenv2 || ubi create ubootenv2 0x1f000 dynamic +ubi_prepare_rootfs=if ubi check rootfs_data ; then else if env exists rootfs_data_max ; then ubi create rootfs_data $rootfs_data_max dynamic || ubi create rootfs_data - dynamic ; else ubi create rootfs_data - dynamic ; fi ; fi +ubi_read_production=ubi read $loadaddr fit && iminfo $loadaddr && run ubi_prepare_rootfs +ubi_read_recovery=ubi check recovery && ubi read $loadaddr recovery +ubi_read_emmc_install=ubi check emmc_install && ubi read $loadaddr emmc_install +ubi_remove_rootfs=ubi check rootfs_data && ubi remove rootfs_data -+ubi_write_production=ubi check fit && ubi remove fit ; run ubi_remove_rootfs ; ubi create fit $filesize dynamic 2 && ubi write $loadaddr fit $filesize -+ubi_write_recovery=ubi check recovery && ubi remove recovery ; run ubi_remove_rootfs ; ubi create recovery $filesize dynamic 3 && ubi write $loadaddr recovery $filesize ++ubi_write_fip=run ubi_remove_rootfs ; ubi check fip && ubi remove fip ; ubi create fip 0x200000 static ; ubi write $loadaddr fip 0x200000 ++ubi_write_production=ubi check fit && ubi remove fit ; run ubi_remove_rootfs ; ubi create fit $filesize dynamic && ubi write $loadaddr fit $filesize ++ubi_write_recovery=ubi check recovery && ubi remove recovery ; run ubi_remove_rootfs ; ubi create recovery $filesize dynamic && ubi write $loadaddr recovery $filesize +mmc_write_vol=imszb $loadaddr image_size && test 0x$image_size -le 0x$part_size && mmc erase 0x$part_addr 0x$image_size && mmc write $loadaddr 0x$part_addr 0x$image_size +emmc_init=mmc dev 0 && mmc bootbus 0 0 0 0 && run emmc_init_bl && run emmc_init_openwrt ; env default bootcmd ; saveenv ; saveenv +emmc_init_bl=run ubi_read_emmc_install && setenv fileaddr $loadaddr && run emmc_write_bl2 && setexpr fileaddr $loadaddr + 0x100000 && run emmc_write_fip && setexpr fileaddr $loadaddr + 0x500000 && run emmc_write_hdr @@ -1024,7 +1025,7 @@ +serverip=192.168.1.254 +loadaddr=0x46000000 +console=earlycon=uart8250,mmio32,0x11002000 console=ttyS0 -+bootargs=root=/dev/mmcblk0p65 ++bootargs=root=/dev/fit0 rootwait +bootcmd=if pstore check ; then run boot_recovery ; else run boot_emmc ; fi +bootconf=config-mt7986a-bananapi-bpi-r3 +bootconf_base=config-mt7986a-bananapi-bpi-r3 @@ -1058,7 +1059,7 @@ +boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_recovery ; setenv replacevol 1 ; run boot_tftp_forever +boot_production=run boot_update_conf ; led $bootled_pwr on ; run emmc_read_production && bootm $loadaddr#$bootconf ; led $bootled_pwr off +boot_recovery=run boot_update_conf ; led $bootled_rec on ; run emmc_read_recovery && bootm $loadaddr#$bootconf ; led $bootled_rec off -+boot_emmc=run boot_update_conf ; run boot_production ; run boot_recovery ++boot_emmc=run boot_production ; run boot_recovery +boot_tftp_forever=led $bootled_rec on ; while true ; do run boot_tftp_recovery ; sleep 1 ; done +boot_tftp_production=run boot_update_conf ; tftpboot $loadaddr $bootfile_upg && env exists replacevol && iminfo $loadaddr && run emmc_write_production ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi +boot_tftp_recovery=run boot_update_conf ; tftpboot $loadaddr $bootfile && env exists replacevol && iminfo $loadaddr && run emmc_write_recovery ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi @@ -1081,3 +1082,32 @@ +_firstboot=setenv _firstboot ; run _switch_to_menu ; run _init_env ; run boot_first +_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title +_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" +--- a/arch/arm/dts/mt7986a-bpi-r3-sd.dts ++++ b/arch/arm/dts/mt7986a-bpi-r3-sd.dts +@@ -235,22 +235,13 @@ + + partition@0 { + label = "bl2"; +- reg = <0x0 0x80000>; ++ reg = <0x0 0x200000>; + }; + +- partition@80000 { +- label = "factory"; +- reg = <0x80000 0x300000>; +- }; +- +- partition@380000 { +- label = "fip"; +- reg = <0x380000 0x200000>; +- }; +- +- partition@580000 { ++ partition@200000 { + label = "ubi"; +- reg = <0x580000 0x7a80000>; ++ reg = <0x200000 0x7e00000>; ++ compatible = "linux,ubi"; + }; + }; + }; diff --git a/lede/package/boot/uboot-mediatek/patches/432-add-tplink-xdr608x.patch b/lede/package/boot/uboot-mediatek/patches/432-add-tplink-xdr608x.patch new file mode 100644 index 0000000000..365f280947 --- /dev/null +++ b/lede/package/boot/uboot-mediatek/patches/432-add-tplink-xdr608x.patch @@ -0,0 +1,934 @@ +--- /dev/null ++++ b/configs/mt7986_tplink_tl-xdr4288_defconfig +@@ -0,0 +1,182 @@ ++CONFIG_ARM=y ++CONFIG_POSITION_INDEPENDENT=y ++CONFIG_ARCH_MEDIATEK=y ++CONFIG_TARGET_MT7986=y ++CONFIG_TEXT_BASE=0x41e00000 ++CONFIG_SYS_MALLOC_F_LEN=0x4000 ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_DEFAULT_DEVICE_TREE="mt7986a-tplink-tl-xdr608x" ++CONFIG_DEFAULT_ENV_FILE="tplink_tl-xdr4288_env" ++CONFIG_DEFAULT_FDT_FILE="mediatek/mt7986a-tplink-tl-xdr608x.dtb" ++CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_DEBUG_UART_BASE=0x11002000 ++CONFIG_DEBUG_UART_CLOCK=40000000 ++CONFIG_DEBUG_UART=y ++CONFIG_SYS_LOAD_ADDR=0x46000000 ++CONFIG_SMBIOS_PRODUCT_NAME="" ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_CFB_CONSOLE_ANSI=y ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y ++CONFIG_GPIO_HOG=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_FIT=y ++CONFIG_FIT_ENABLE_SHA256_SUPPORT=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y ++CONFIG_LOGLEVEL=7 ++CONFIG_LOG=y ++CONFIG_SYS_PROMPT="MT7986> " ++CONFIG_CMD_BOOTMENU=y ++CONFIG_CMD_BOOTP=y ++CONFIG_CMD_BUTTON=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_CPU=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DM=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_ECHO=y ++CONFIG_CMD_ENV_READMEM=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_EXT4=y ++CONFIG_CMD_FAT=y ++CONFIG_CMD_FDT=y ++CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_GPT=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_ITEST=y ++CONFIG_CMD_LED=y ++CONFIG_CMD_LICENSE=y ++CONFIG_CMD_LINK_LOCAL=y ++# CONFIG_CMD_MBR is not set ++CONFIG_CMD_PCI=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_PING=y ++CONFIG_CMD_PXE=y ++CONFIG_CMD_PWM=y ++CONFIG_CMD_SMC=y ++CONFIG_CMD_TFTPBOOT=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_UBI=y ++CONFIG_CMD_UBI_RENAME=y ++CONFIG_CMD_UBIFS=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_PART=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_SETEXPR=y ++CONFIG_CMD_SLEEP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_SOURCE=y ++CONFIG_CMD_STRINGS=y ++CONFIG_CMD_USB=y ++CONFIG_CMD_UUID=y ++CONFIG_DISPLAY_CPUINFO=y ++CONFIG_DM_MTD=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_DM_USB=y ++CONFIG_DM_PWM=y ++CONFIG_PWM_MTK=y ++CONFIG_HUSH_PARSER=y ++CONFIG_SYS_REDUNDAND_ENVIRONMENT=y ++CONFIG_SYS_RELOC_GD_ENV_ADDR=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_PARTITION_UUIDS=y ++CONFIG_NETCONSOLE=y ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_CLK=y ++CONFIG_DM_GPIO=y ++CONFIG_DM_SCSI=y ++CONFIG_AHCI=y ++CONFIG_AHCI_PCI=y ++CONFIG_SCSI_AHCI=y ++CONFIG_SCSI=y ++CONFIG_CMD_SCSI=y ++CONFIG_PHY=y ++CONFIG_PHY_MTK_TPHY=y ++CONFIG_PHY_FIXED=y ++CONFIG_MTK_AHCI=y ++CONFIG_DM_ETH=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PCI=y ++# CONFIG_MMC is not set ++# CONFIG_DM_MMC is not set ++CONFIG_MTD=y ++CONFIG_MTD_UBI_FASTMAP=y ++CONFIG_DM_PCI=y ++CONFIG_PCIE_MEDIATEK=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7622=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_PRE_CONSOLE_BUFFER=y ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_RAM=y ++CONFIG_DM_SERIAL=y ++CONFIG_MTK_SERIAL=y ++CONFIG_SPI=y ++CONFIG_DM_SPI=y ++CONFIG_MTK_SPI_NAND=y ++CONFIG_MTK_SPI_NAND_MTD=y ++CONFIG_SYSRESET_WATCHDOG=y ++CONFIG_WDT_MTK=y ++CONFIG_LZO=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y ++CONFIG_RANDOM_UUID=y ++CONFIG_REGEX=y ++CONFIG_USB=y ++CONFIG_USB_HOST=y ++CONFIG_USB_XHCI_HCD=y ++CONFIG_USB_XHCI_MTK=y ++CONFIG_USB_STORAGE=y ++CONFIG_OF_EMBED=y ++CONFIG_ENV_OVERWRITE=y ++CONFIG_ENV_IS_IN_UBI=y ++CONFIG_ENV_UBI_PART="ubi" ++CONFIG_ENV_SIZE=0x1f000 ++CONFIG_ENV_SIZE_REDUND=0x1f000 ++CONFIG_ENV_UBI_VOLUME="ubootenv" ++CONFIG_ENV_UBI_VOLUME_REDUND="ubootenv2" ++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_NET_RANDOM_ETHADDR=y ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_CLK=y ++CONFIG_PHY_FIXED=y ++CONFIG_DM_ETH=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7986=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_SERIAL=y ++CONFIG_MTK_SERIAL=y ++CONFIG_HEXDUMP=y ++CONFIG_USE_DEFAULT_ENV_FILE=y ++CONFIG_MTD_SPI_NAND=y ++CONFIG_MTK_SPIM=y ++CONFIG_CMD_MTD=y ++CONFIG_CMD_NAND=y ++CONFIG_CMD_NAND_TRIMFFS=y ++CONFIG_LMB_MAX_REGIONS=64 ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.254" +--- /dev/null ++++ b/configs/mt7986_tplink_tl-xdr6086_defconfig +@@ -0,0 +1,182 @@ ++CONFIG_ARM=y ++CONFIG_POSITION_INDEPENDENT=y ++CONFIG_ARCH_MEDIATEK=y ++CONFIG_TARGET_MT7986=y ++CONFIG_TEXT_BASE=0x41e00000 ++CONFIG_SYS_MALLOC_F_LEN=0x4000 ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_DEFAULT_DEVICE_TREE="mt7986a-tplink-tl-xdr608x" ++CONFIG_DEFAULT_ENV_FILE="tplink_tl-xdr6086_env" ++CONFIG_DEFAULT_FDT_FILE="mediatek/mt7986a-tplink-tl-xdr608x.dtb" ++CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_DEBUG_UART_BASE=0x11002000 ++CONFIG_DEBUG_UART_CLOCK=40000000 ++CONFIG_DEBUG_UART=y ++CONFIG_SYS_LOAD_ADDR=0x46000000 ++CONFIG_SMBIOS_PRODUCT_NAME="" ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_CFB_CONSOLE_ANSI=y ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y ++CONFIG_GPIO_HOG=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_FIT=y ++CONFIG_FIT_ENABLE_SHA256_SUPPORT=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y ++CONFIG_LOGLEVEL=7 ++CONFIG_LOG=y ++CONFIG_SYS_PROMPT="MT7986> " ++CONFIG_CMD_BOOTMENU=y ++CONFIG_CMD_BOOTP=y ++CONFIG_CMD_BUTTON=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_CPU=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DM=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_ECHO=y ++CONFIG_CMD_ENV_READMEM=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_EXT4=y ++CONFIG_CMD_FAT=y ++CONFIG_CMD_FDT=y ++CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_GPT=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_ITEST=y ++CONFIG_CMD_LED=y ++CONFIG_CMD_LICENSE=y ++CONFIG_CMD_LINK_LOCAL=y ++# CONFIG_CMD_MBR is not set ++CONFIG_CMD_PCI=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_PING=y ++CONFIG_CMD_PXE=y ++CONFIG_CMD_PWM=y ++CONFIG_CMD_SMC=y ++CONFIG_CMD_TFTPBOOT=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_UBI=y ++CONFIG_CMD_UBI_RENAME=y ++CONFIG_CMD_UBIFS=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_PART=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_SETEXPR=y ++CONFIG_CMD_SLEEP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_SOURCE=y ++CONFIG_CMD_STRINGS=y ++CONFIG_CMD_USB=y ++CONFIG_CMD_UUID=y ++CONFIG_DISPLAY_CPUINFO=y ++CONFIG_DM_MTD=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_DM_USB=y ++CONFIG_DM_PWM=y ++CONFIG_PWM_MTK=y ++CONFIG_HUSH_PARSER=y ++CONFIG_SYS_REDUNDAND_ENVIRONMENT=y ++CONFIG_SYS_RELOC_GD_ENV_ADDR=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_PARTITION_UUIDS=y ++CONFIG_NETCONSOLE=y ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_CLK=y ++CONFIG_DM_GPIO=y ++CONFIG_DM_SCSI=y ++CONFIG_AHCI=y ++CONFIG_AHCI_PCI=y ++CONFIG_SCSI_AHCI=y ++CONFIG_SCSI=y ++CONFIG_CMD_SCSI=y ++CONFIG_PHY=y ++CONFIG_PHY_MTK_TPHY=y ++CONFIG_PHY_FIXED=y ++CONFIG_MTK_AHCI=y ++CONFIG_DM_ETH=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PCI=y ++# CONFIG_MMC is not set ++# CONFIG_DM_MMC is not set ++CONFIG_MTD=y ++CONFIG_MTD_UBI_FASTMAP=y ++CONFIG_DM_PCI=y ++CONFIG_PCIE_MEDIATEK=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7622=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_PRE_CONSOLE_BUFFER=y ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_RAM=y ++CONFIG_DM_SERIAL=y ++CONFIG_MTK_SERIAL=y ++CONFIG_SPI=y ++CONFIG_DM_SPI=y ++CONFIG_MTK_SPI_NAND=y ++CONFIG_MTK_SPI_NAND_MTD=y ++CONFIG_SYSRESET_WATCHDOG=y ++CONFIG_WDT_MTK=y ++CONFIG_LZO=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y ++CONFIG_RANDOM_UUID=y ++CONFIG_REGEX=y ++CONFIG_USB=y ++CONFIG_USB_HOST=y ++CONFIG_USB_XHCI_HCD=y ++CONFIG_USB_XHCI_MTK=y ++CONFIG_USB_STORAGE=y ++CONFIG_OF_EMBED=y ++CONFIG_ENV_OVERWRITE=y ++CONFIG_ENV_IS_IN_UBI=y ++CONFIG_ENV_UBI_PART="ubi" ++CONFIG_ENV_SIZE=0x1f000 ++CONFIG_ENV_SIZE_REDUND=0x1f000 ++CONFIG_ENV_UBI_VOLUME="ubootenv" ++CONFIG_ENV_UBI_VOLUME_REDUND="ubootenv2" ++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_NET_RANDOM_ETHADDR=y ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_CLK=y ++CONFIG_PHY_FIXED=y ++CONFIG_DM_ETH=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7986=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_SERIAL=y ++CONFIG_MTK_SERIAL=y ++CONFIG_HEXDUMP=y ++CONFIG_USE_DEFAULT_ENV_FILE=y ++CONFIG_MTD_SPI_NAND=y ++CONFIG_MTK_SPIM=y ++CONFIG_CMD_MTD=y ++CONFIG_CMD_NAND=y ++CONFIG_CMD_NAND_TRIMFFS=y ++CONFIG_LMB_MAX_REGIONS=64 ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.254" +--- /dev/null ++++ b/configs/mt7986_tplink_tl-xdr6088_defconfig +@@ -0,0 +1,182 @@ ++CONFIG_ARM=y ++CONFIG_POSITION_INDEPENDENT=y ++CONFIG_ARCH_MEDIATEK=y ++CONFIG_TARGET_MT7986=y ++CONFIG_TEXT_BASE=0x41e00000 ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y ++CONFIG_SYS_MALLOC_F_LEN=0x4000 ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_DEFAULT_DEVICE_TREE="mt7986a-tplink-tl-xdr608x" ++CONFIG_DEFAULT_ENV_FILE="tplink_tl-xdr6088_env" ++CONFIG_DEFAULT_FDT_FILE="mediatek/mt7986a-tplink-tl-xdr608x.dtb" ++CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_DEBUG_UART_BASE=0x11002000 ++CONFIG_DEBUG_UART_CLOCK=40000000 ++CONFIG_DEBUG_UART=y ++CONFIG_SYS_LOAD_ADDR=0x46000000 ++CONFIG_SMBIOS_PRODUCT_NAME="" ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_CFB_CONSOLE_ANSI=y ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y ++CONFIG_GPIO_HOG=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_FIT=y ++CONFIG_FIT_ENABLE_SHA256_SUPPORT=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y ++CONFIG_LOGLEVEL=7 ++CONFIG_LOG=y ++CONFIG_SYS_PROMPT="MT7986> " ++CONFIG_CMD_BOOTMENU=y ++CONFIG_CMD_BOOTP=y ++CONFIG_CMD_BUTTON=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_CPU=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DM=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_ECHO=y ++CONFIG_CMD_ENV_READMEM=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_EXT4=y ++CONFIG_CMD_FAT=y ++CONFIG_CMD_FDT=y ++CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_GPT=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_ITEST=y ++CONFIG_CMD_LED=y ++CONFIG_CMD_LICENSE=y ++CONFIG_CMD_LINK_LOCAL=y ++# CONFIG_CMD_MBR is not set ++CONFIG_CMD_PCI=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_PING=y ++CONFIG_CMD_PXE=y ++CONFIG_CMD_PWM=y ++CONFIG_CMD_SMC=y ++CONFIG_CMD_TFTPBOOT=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_UBI=y ++CONFIG_CMD_UBI_RENAME=y ++CONFIG_CMD_UBIFS=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_PART=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_SETEXPR=y ++CONFIG_CMD_SLEEP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_SOURCE=y ++CONFIG_CMD_STRINGS=y ++CONFIG_CMD_USB=y ++CONFIG_CMD_UUID=y ++CONFIG_DISPLAY_CPUINFO=y ++CONFIG_DM_MTD=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_DM_USB=y ++CONFIG_DM_PWM=y ++CONFIG_PWM_MTK=y ++CONFIG_HUSH_PARSER=y ++CONFIG_SYS_REDUNDAND_ENVIRONMENT=y ++CONFIG_SYS_RELOC_GD_ENV_ADDR=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_PARTITION_UUIDS=y ++CONFIG_NETCONSOLE=y ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_CLK=y ++CONFIG_DM_GPIO=y ++CONFIG_DM_SCSI=y ++CONFIG_AHCI=y ++CONFIG_AHCI_PCI=y ++CONFIG_SCSI_AHCI=y ++CONFIG_SCSI=y ++CONFIG_CMD_SCSI=y ++CONFIG_PHY=y ++CONFIG_PHY_MTK_TPHY=y ++CONFIG_PHY_FIXED=y ++CONFIG_MTK_AHCI=y ++CONFIG_DM_ETH=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PCI=y ++# CONFIG_MMC is not set ++# CONFIG_DM_MMC is not set ++CONFIG_MTD=y ++CONFIG_MTD_UBI_FASTMAP=y ++CONFIG_DM_PCI=y ++CONFIG_PCIE_MEDIATEK=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7622=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_PRE_CONSOLE_BUFFER=y ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_RAM=y ++CONFIG_DM_SERIAL=y ++CONFIG_MTK_SERIAL=y ++CONFIG_SPI=y ++CONFIG_DM_SPI=y ++CONFIG_MTK_SPI_NAND=y ++CONFIG_MTK_SPI_NAND_MTD=y ++CONFIG_SYSRESET_WATCHDOG=y ++CONFIG_WDT_MTK=y ++CONFIG_LZO=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y ++CONFIG_RANDOM_UUID=y ++CONFIG_REGEX=y ++CONFIG_USB=y ++CONFIG_USB_HOST=y ++CONFIG_USB_XHCI_HCD=y ++CONFIG_USB_XHCI_MTK=y ++CONFIG_USB_STORAGE=y ++CONFIG_OF_EMBED=y ++CONFIG_ENV_OVERWRITE=y ++CONFIG_ENV_IS_IN_UBI=y ++CONFIG_ENV_UBI_PART="ubi" ++CONFIG_ENV_SIZE=0x1f000 ++CONFIG_ENV_SIZE_REDUND=0x1f000 ++CONFIG_ENV_UBI_VOLUME="ubootenv" ++CONFIG_ENV_UBI_VOLUME_REDUND="ubootenv2" ++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_NET_RANDOM_ETHADDR=y ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_CLK=y ++CONFIG_PHY_FIXED=y ++CONFIG_DM_ETH=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7986=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_SERIAL=y ++CONFIG_MTK_SERIAL=y ++CONFIG_HEXDUMP=y ++CONFIG_USE_DEFAULT_ENV_FILE=y ++CONFIG_MTD_SPI_NAND=y ++CONFIG_MTK_SPIM=y ++CONFIG_CMD_MTD=y ++CONFIG_CMD_NAND=y ++CONFIG_CMD_NAND_TRIMFFS=y ++CONFIG_LMB_MAX_REGIONS=64 ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.254" +--- /dev/null ++++ b/arch/arm/dts/mt7986a-tplink-tl-xdr608x.dts +@@ -0,0 +1,196 @@ ++// SPDX-License-Identifier: GPL-2.0 ++/* ++ * Copyright (c) 2021 MediaTek Inc. ++ * Author: Sam Shih ++ */ ++ ++/dts-v1/; ++#include "mt7986.dtsi" ++#include ++#include ++ ++/ { ++ #address-cells = <1>; ++ #size-cells = <1>; ++ model = "TP-Link TL-XDR608x"; ++ compatible = "mediatek,mt7986", "mediatek,mt7986-rfb"; ++ ++ chosen { ++ stdout-path = &uart0; ++ tick-timer = &timer0; ++ }; ++ ++ memory@40000000 { ++ device_type = "memory"; ++ reg = <0x40000000 0x20000000>; ++ }; ++ ++ keys { ++ compatible = "gpio-keys"; ++ ++ factory { ++ label = "reset"; ++ linux,code = ; ++ gpios = <&gpio 9 GPIO_ACTIVE_LOW>; ++ }; ++ ++ wps { ++ label = "wps"; ++ linux,code = ; ++ gpios = <&gpio 10 GPIO_ACTIVE_LOW>; ++ }; ++ ++ turbo { ++ label = "turbo"; ++ linux,code = ; ++ gpios = <&gpio 11 GPIO_ACTIVE_LOW>; ++ }; ++ }; ++ ++ leds { ++ compatible = "gpio-leds"; ++ ++ status_red { ++ label = "red:status"; ++ gpios = <&gpio 7 GPIO_ACTIVE_HIGH>; ++ }; ++ ++ status_green { ++ label = "green:status"; ++ gpios = <&gpio 8 GPIO_ACTIVE_HIGH>; ++ }; ++ ++ turbo { ++ label = "green:turbo"; ++ gpios = <&gpio 12 GPIO_ACTIVE_HIGH>; ++ }; ++ }; ++}; ++ ++&uart0 { ++ mediatek,force-highspeed; ++ status = "okay"; ++}; ++ ++&uart1 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&uart1_pins>; ++ status = "disabled"; ++}; ++ ++ð { ++ status = "okay"; ++ mediatek,gmac-id = <0>; ++ phy-mode = "2500base-x"; ++ mediatek,switch = "mt7531"; ++ reset-gpios = <&gpio 5 GPIO_ACTIVE_HIGH>; ++ ++ fixed-link { ++ speed = <2500>; ++ full-duplex; ++ }; ++}; ++ ++&pinctrl { ++ spi_flash_pins: spi0-pins-func-1 { ++ mux { ++ function = "flash"; ++ groups = "spi0", "spi0_wp_hold"; ++ }; ++ ++ conf-pu { ++ pins = "SPI2_CS", "SPI2_HOLD", "SPI2_WP"; ++ drive-strength = ; ++ bias-pull-up = ; ++ }; ++ ++ conf-pd { ++ pins = "SPI2_CLK", "SPI2_MOSI", "SPI2_MISO"; ++ drive-strength = ; ++ bias-pull-down = ; ++ }; ++ }; ++ ++ spic_pins: spi1-pins-func-1 { ++ mux { ++ function = "spi"; ++ groups = "spi1_2"; ++ }; ++ }; ++ ++ uart1_pins: spi1-pins-func-3 { ++ mux { ++ function = "uart"; ++ groups = "uart1_2"; ++ }; ++ }; ++ ++ pwm_pins: pwm0-pins-func-1 { ++ mux { ++ function = "pwm"; ++ groups = "pwm0"; ++ }; ++ }; ++}; ++ ++&pwm { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pwm_pins>; ++ status = "okay"; ++}; ++ ++&spi0 { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&spi_flash_pins>; ++ status = "okay"; ++ must_tx; ++ enhance_timing; ++ dma_ext; ++ ipm_design; ++ support_quad; ++ tick_dly = <1>; ++ sample_sel = <0>; ++ ++ spi_nand@1 { ++ compatible = "spi-nand"; ++ reg = <1>; ++ spi-max-frequency = <52000000>; ++ ++ partitions { ++ compatible = "fixed-partitions"; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ partition@0 { ++ label = "bl2"; ++ reg = <0x0 0x80000>; ++ }; ++ ++ partition@100000 { ++ label = "config"; ++ reg = <0x100000 0x60000>; ++ }; ++ ++ partition@160000 { ++ label = "factory"; ++ reg = <0x160000 0x60000>; ++ }; ++ ++ partition@380000 { ++ label = "fip"; ++ reg = <0x380000 0x200000>; ++ }; ++ ++ partition@580000 { ++ label = "ubi"; ++ reg = <0x580000 0x7800000>; ++ }; ++ }; ++ }; ++}; ++ ++&watchdog { ++ status = "disabled"; ++}; +--- /dev/null ++++ b/tplink_tl-xdr4288_env +@@ -0,0 +1,57 @@ ++ethaddr_factory=mtd read config 0x40080000 0x0 0x20000 && env readmem -b ethaddr 0x4008001c 0x6 ; setenv ethaddr_factory ++ipaddr=192.168.1.1 ++serverip=192.168.1.254 ++loadaddr=0x46000000 ++console=earlycon=uart8250,mmio32,0x11002000 console=ttyS0 ++bootcmd=if pstore check ; then run boot_recovery ; else run boot_ubi ; fi ++bootconf=config-1 ++bootdelay=0 ++bootfile=openwrt-mediatek-filogic-tplink_tl-xdr4288-initramfs-recovery.itb ++bootfile_bl2=openwrt-mediatek-filogic-tplink_tl-xdr4288-preloader.bin ++bootfile_fip=openwrt-mediatek-filogic-tplink_tl-xdr4288-bl31-uboot.fip ++bootfile_upg=openwrt-mediatek-filogic-tplink_tl-xdr4288-squashfs-sysupgrade.itb ++bootled_pwr=green:status ++bootled_rec=red:status ++bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60 ++bootmenu_default=0 ++bootmenu_delay=0 ++bootmenu_title= ( ( ( OpenWrt ) ) ) ++bootmenu_0=Initialize environment.=run _firstboot ++bootmenu_0d=Run default boot command.=run boot_default ++bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return ++bootmenu_2=Boot production system from NAND.=run boot_production ; run bootmenu_confirm_return ++bootmenu_3=Boot recovery system from NAND.=run boot_recovery ; run bootmenu_confirm_return ++bootmenu_4=Load production system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_production ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_5=Load recovery system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_recovery ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_6=Load BL31+U-Boot FIP via TFTP then write to NAND.=run boot_tftp_write_fip ; run bootmenu_confirm_return ++bootmenu_7=Load BL2 preloader via TFTP then write to NAND.=run boot_tftp_write_bl2 ; run bootmenu_confirm_return ++bootmenu_8=Reboot.=reset ++bootmenu_9=Reset all settings to factory defaults.=run reset_factory ; reset ++boot_first=if button reset ; then led $bootled_rec on ; run boot_tftp_recovery ; setenv flag_recover 1 ; run boot_default ; fi ; bootmenu ++boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_recovery ; setenv replacevol 1 ; run boot_tftp_forever ++boot_production=led $bootled_pwr on ; run ubi_read_production && bootm $loadaddr#$bootconf ; led $bootled_pwr off ++boot_recovery=led $bootled_rec on ; run ubi_read_recovery && bootm $loadaddr#$bootconf ; led $bootled_rec off ++boot_ubi=run boot_production ; run boot_recovery ; run boot_tftp_forever ++boot_tftp_forever=led $bootled_rec on ; while true ; do run boot_tftp_recovery ; sleep 1 ; done ++boot_tftp_production=tftpboot $loadaddr $bootfile_upg && env exists replacevol && iminfo $loadaddr && run ubi_write_production ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp_recovery=tftpboot $loadaddr $bootfile && env exists replacevol && iminfo $loadaddr && run ubi_write_recovery ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp=tftpboot $loadaddr $bootfile && bootm $loadaddr#$bootconf ++boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run mtd_write_fip && run reset_factory ++boot_tftp_write_bl2=tftpboot $loadaddr $bootfile_bl2 && run mtd_write_bl2 ++part_default=production ++part_recovery=recovery ++reset_factory=ubi part ubi ; mw $loadaddr 0x0 0x800 ; ubi write $loadaddr ubootenv 0x800 ; ubi write $loadaddr ubootenv2 0x800 ++mtd_write_fip=mtd erase fip && mtd write fip $loadaddr ++mtd_write_bl2=mtd erase bl2 && mtd write bl2 $loadaddr ++ubi_create_env=ubi check ubootenv || ubi create ubootenv 0x100000 dynamic 0 || run ubi_format ; ubi check ubootenv2 || ubi create ubootenv2 0x100000 dynamic 1 || run ubi_format ++ubi_format=ubi detach ; mtd erase ubi && ubi part ubi ; reset ++ubi_prepare_rootfs=if ubi check rootfs_data ; then else if env exists rootfs_data_max ; then ubi create rootfs_data $rootfs_data_max dynamic || ubi create rootfs_data - dynamic ; else ubi create rootfs_data - dynamic ; fi ; fi ++ubi_read_production=ubi read $loadaddr fit && iminfo $loadaddr && run ubi_prepare_rootfs ++ubi_read_recovery=ubi check recovery && ubi read $loadaddr recovery ++ubi_remove_rootfs=ubi check rootfs_data && ubi remove rootfs_data ++ubi_write_production=ubi check fit && ubi remove fit ; run ubi_remove_rootfs ; ubi create fit $filesize dynamic 2 && ubi write $loadaddr fit $filesize ++ubi_write_recovery=ubi check recovery && ubi remove recovery ; run ubi_remove_rootfs ; ubi create recovery $filesize dynamic 3 && ubi write $loadaddr recovery $filesize ++_init_env=setenv _init_env ; run ubi_create_env ; saveenv ; saveenv ++_firstboot=setenv _firstboot ; run ethaddr_factory ; run _switch_to_menu ; run _init_env ; run boot_first ++_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title ++_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" +--- /dev/null ++++ b/tplink_tl-xdr6086_env +@@ -0,0 +1,57 @@ ++ethaddr_factory=mtd read config 0x40080000 0x0 0x20000 && env readmem -b ethaddr 0x4008001c 0x6 ; setenv ethaddr_factory ++ipaddr=192.168.1.1 ++serverip=192.168.1.254 ++loadaddr=0x46000000 ++console=earlycon=uart8250,mmio32,0x11002000 console=ttyS0 ++bootcmd=if pstore check ; then run boot_recovery ; else run boot_ubi ; fi ++bootconf=config-1 ++bootdelay=0 ++bootfile=openwrt-mediatek-filogic-tplink_tl-xdr6086-initramfs-recovery.itb ++bootfile_bl2=openwrt-mediatek-filogic-tplink_tl-xdr6086-preloader.bin ++bootfile_fip=openwrt-mediatek-filogic-tplink_tl-xdr6086-bl31-uboot.fip ++bootfile_upg=openwrt-mediatek-filogic-tplink_tl-xdr6086-squashfs-sysupgrade.itb ++bootled_pwr=green:status ++bootled_rec=red:status ++bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60 ++bootmenu_default=0 ++bootmenu_delay=0 ++bootmenu_title= ( ( ( OpenWrt ) ) ) ++bootmenu_0=Initialize environment.=run _firstboot ++bootmenu_0d=Run default boot command.=run boot_default ++bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return ++bootmenu_2=Boot production system from NAND.=run boot_production ; run bootmenu_confirm_return ++bootmenu_3=Boot recovery system from NAND.=run boot_recovery ; run bootmenu_confirm_return ++bootmenu_4=Load production system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_production ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_5=Load recovery system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_recovery ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_6=Load BL31+U-Boot FIP via TFTP then write to NAND.=run boot_tftp_write_fip ; run bootmenu_confirm_return ++bootmenu_7=Load BL2 preloader via TFTP then write to NAND.=run boot_tftp_write_bl2 ; run bootmenu_confirm_return ++bootmenu_8=Reboot.=reset ++bootmenu_9=Reset all settings to factory defaults.=run reset_factory ; reset ++boot_first=if button reset ; then led $bootled_rec on ; run boot_tftp_recovery ; setenv flag_recover 1 ; run boot_default ; fi ; bootmenu ++boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_recovery ; setenv replacevol 1 ; run boot_tftp_forever ++boot_production=led $bootled_pwr on ; run ubi_read_production && bootm $loadaddr#$bootconf ; led $bootled_pwr off ++boot_recovery=led $bootled_rec on ; run ubi_read_recovery && bootm $loadaddr#$bootconf ; led $bootled_rec off ++boot_ubi=run boot_production ; run boot_recovery ; run boot_tftp_forever ++boot_tftp_forever=led $bootled_rec on ; while true ; do run boot_tftp_recovery ; sleep 1 ; done ++boot_tftp_production=tftpboot $loadaddr $bootfile_upg && env exists replacevol && iminfo $loadaddr && run ubi_write_production ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp_recovery=tftpboot $loadaddr $bootfile && env exists replacevol && iminfo $loadaddr && run ubi_write_recovery ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp=tftpboot $loadaddr $bootfile && bootm $loadaddr#$bootconf ++boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run mtd_write_fip && run reset_factory ++boot_tftp_write_bl2=tftpboot $loadaddr $bootfile_bl2 && run mtd_write_bl2 ++part_default=production ++part_recovery=recovery ++reset_factory=ubi part ubi ; mw $loadaddr 0x0 0x800 ; ubi write $loadaddr ubootenv 0x800 ; ubi write $loadaddr ubootenv2 0x800 ++mtd_write_fip=mtd erase fip && mtd write fip $loadaddr ++mtd_write_bl2=mtd erase bl2 && mtd write bl2 $loadaddr ++ubi_create_env=ubi check ubootenv || ubi create ubootenv 0x100000 dynamic 0 || run ubi_format ; ubi check ubootenv2 || ubi create ubootenv2 0x100000 dynamic 1 || run ubi_format ++ubi_format=ubi detach ; mtd erase ubi && ubi part ubi ; reset ++ubi_prepare_rootfs=if ubi check rootfs_data ; then else if env exists rootfs_data_max ; then ubi create rootfs_data $rootfs_data_max dynamic || ubi create rootfs_data - dynamic ; else ubi create rootfs_data - dynamic ; fi ; fi ++ubi_read_production=ubi read $loadaddr fit && iminfo $loadaddr && run ubi_prepare_rootfs ++ubi_read_recovery=ubi check recovery && ubi read $loadaddr recovery ++ubi_remove_rootfs=ubi check rootfs_data && ubi remove rootfs_data ++ubi_write_production=ubi check fit && ubi remove fit ; run ubi_remove_rootfs ; ubi create fit $filesize dynamic 2 && ubi write $loadaddr fit $filesize ++ubi_write_recovery=ubi check recovery && ubi remove recovery ; run ubi_remove_rootfs ; ubi create recovery $filesize dynamic 3 && ubi write $loadaddr recovery $filesize ++_init_env=setenv _init_env ; run ubi_create_env ; saveenv ; saveenv ++_firstboot=setenv _firstboot ; run ethaddr_factory ; run _switch_to_menu ; run _init_env ; run boot_first ++_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title ++_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" +--- /dev/null ++++ b/tplink_tl-xdr6088_env +@@ -0,0 +1,57 @@ ++ethaddr_factory=mtd read config 0x40080000 0x0 0x20000 && env readmem -b ethaddr 0x4008001c 0x6 ; setenv ethaddr_factory ++ipaddr=192.168.1.1 ++serverip=192.168.1.254 ++loadaddr=0x46000000 ++console=earlycon=uart8250,mmio32,0x11002000 console=ttyS0 ++bootcmd=if pstore check ; then run boot_recovery ; else run boot_ubi ; fi ++bootconf=config-1 ++bootdelay=0 ++bootfile=openwrt-mediatek-filogic-tplink_tl-xdr6088-initramfs-recovery.itb ++bootfile_bl2=openwrt-mediatek-filogic-tplink_tl-xdr6088-preloader.bin ++bootfile_fip=openwrt-mediatek-filogic-tplink_tl-xdr6088-bl31-uboot.fip ++bootfile_upg=openwrt-mediatek-filogic-tplink_tl-xdr6088-squashfs-sysupgrade.itb ++bootled_pwr=green:status ++bootled_rec=red:status ++bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60 ++bootmenu_default=0 ++bootmenu_delay=0 ++bootmenu_title= ( ( ( OpenWrt ) ) ) ++bootmenu_0=Initialize environment.=run _firstboot ++bootmenu_0d=Run default boot command.=run boot_default ++bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return ++bootmenu_2=Boot production system from NAND.=run boot_production ; run bootmenu_confirm_return ++bootmenu_3=Boot recovery system from NAND.=run boot_recovery ; run bootmenu_confirm_return ++bootmenu_4=Load production system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_production ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_5=Load recovery system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_recovery ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_6=Load BL31+U-Boot FIP via TFTP then write to NAND.=run boot_tftp_write_fip ; run bootmenu_confirm_return ++bootmenu_7=Load BL2 preloader via TFTP then write to NAND.=run boot_tftp_write_bl2 ; run bootmenu_confirm_return ++bootmenu_8=Reboot.=reset ++bootmenu_9=Reset all settings to factory defaults.=run reset_factory ; reset ++boot_first=if button reset ; then led $bootled_rec on ; run boot_tftp_recovery ; setenv flag_recover 1 ; run boot_default ; fi ; bootmenu ++boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_recovery ; setenv replacevol 1 ; run boot_tftp_forever ++boot_production=led $bootled_pwr on ; run ubi_read_production && bootm $loadaddr#$bootconf ; led $bootled_pwr off ++boot_recovery=led $bootled_rec on ; run ubi_read_recovery && bootm $loadaddr#$bootconf ; led $bootled_rec off ++boot_ubi=run boot_production ; run boot_recovery ; run boot_tftp_forever ++boot_tftp_forever=led $bootled_rec on ; while true ; do run boot_tftp_recovery ; sleep 1 ; done ++boot_tftp_production=tftpboot $loadaddr $bootfile_upg && env exists replacevol && iminfo $loadaddr && run ubi_write_production ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp_recovery=tftpboot $loadaddr $bootfile && env exists replacevol && iminfo $loadaddr && run ubi_write_recovery ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp=tftpboot $loadaddr $bootfile && bootm $loadaddr#$bootconf ++boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run mtd_write_fip && run reset_factory ++boot_tftp_write_bl2=tftpboot $loadaddr $bootfile_bl2 && run mtd_write_bl2 ++part_default=production ++part_recovery=recovery ++reset_factory=ubi part ubi ; mw $loadaddr 0x0 0x800 ; ubi write $loadaddr ubootenv 0x800 ; ubi write $loadaddr ubootenv2 0x800 ++mtd_write_fip=mtd erase fip && mtd write fip $loadaddr ++mtd_write_bl2=mtd erase bl2 && mtd write bl2 $loadaddr ++ubi_create_env=ubi check ubootenv || ubi create ubootenv 0x100000 dynamic 0 || run ubi_format ; ubi check ubootenv2 || ubi create ubootenv2 0x100000 dynamic 1 || run ubi_format ++ubi_format=ubi detach ; mtd erase ubi && ubi part ubi ; reset ++ubi_prepare_rootfs=if ubi check rootfs_data ; then else if env exists rootfs_data_max ; then ubi create rootfs_data $rootfs_data_max dynamic || ubi create rootfs_data - dynamic ; else ubi create rootfs_data - dynamic ; fi ; fi ++ubi_read_production=ubi read $loadaddr fit && iminfo $loadaddr && run ubi_prepare_rootfs ++ubi_read_recovery=ubi check recovery && ubi read $loadaddr recovery ++ubi_remove_rootfs=ubi check rootfs_data && ubi remove rootfs_data ++ubi_write_production=ubi check fit && ubi remove fit ; run ubi_remove_rootfs ; ubi create fit $filesize dynamic 2 && ubi write $loadaddr fit $filesize ++ubi_write_recovery=ubi check recovery && ubi remove recovery ; run ubi_remove_rootfs ; ubi create recovery $filesize dynamic 3 && ubi write $loadaddr recovery $filesize ++_init_env=setenv _init_env ; run ubi_create_env ; saveenv ; saveenv ++_firstboot=setenv _firstboot ; run ethaddr_factory ; run _switch_to_menu ; run _init_env ; run boot_first ++_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title ++_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" diff --git a/lede/package/boot/uboot-mediatek/patches/433-add-qihoo_360t7.patch b/lede/package/boot/uboot-mediatek/patches/433-add-qihoo_360t7.patch new file mode 100644 index 0000000000..4f98c95893 --- /dev/null +++ b/lede/package/boot/uboot-mediatek/patches/433-add-qihoo_360t7.patch @@ -0,0 +1,425 @@ +--- /dev/null ++++ b/configs/mt7981_qihoo-360t7_defconfig +@@ -0,0 +1,175 @@ ++CONFIG_ARM=y ++CONFIG_POSITION_INDEPENDENT=y ++CONFIG_ARCH_MEDIATEK=y ++CONFIG_TARGET_MT7981=y ++CONFIG_TEXT_BASE=0x41e00000 ++CONFIG_SYS_MALLOC_F_LEN=0x4000 ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_DEFAULT_DEVICE_TREE="mt7981_qihoo-360t7" ++CONFIG_DEFAULT_ENV_FILE="qihoo-360t7_env" ++CONFIG_DEFAULT_FDT_FILE="mediatek/mt7981_qihoo-360t7.dtb" ++CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_DEBUG_UART_BASE=0x11002000 ++CONFIG_DEBUG_UART_CLOCK=40000000 ++CONFIG_DEBUG_UART=y ++CONFIG_SYS_LOAD_ADDR=0x46000000 ++CONFIG_SMBIOS_PRODUCT_NAME="" ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_CFB_CONSOLE_ANSI=y ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y ++CONFIG_GPIO_HOG=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_FIT=y ++CONFIG_FIT_ENABLE_SHA256_SUPPORT=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y ++CONFIG_LOGLEVEL=7 ++CONFIG_LOG=y ++CONFIG_SYS_PROMPT="MT7981> " ++CONFIG_CMD_BOOTMENU=y ++CONFIG_CMD_BOOTP=y ++CONFIG_CMD_BUTTON=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_CPU=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DM=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_ECHO=y ++CONFIG_CMD_ENV_READMEM=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_EXT4=y ++CONFIG_CMD_FAT=y ++CONFIG_CMD_FDT=y ++CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_GPT=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_ITEST=y ++CONFIG_CMD_LED=y ++CONFIG_CMD_LICENSE=y ++CONFIG_CMD_LINK_LOCAL=y ++# CONFIG_CMD_MBR is not set ++CONFIG_CMD_PCI=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_PING=y ++CONFIG_CMD_PXE=y ++CONFIG_CMD_PWM=y ++CONFIG_CMD_SMC=y ++CONFIG_CMD_TFTPBOOT=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_UBI=y ++CONFIG_CMD_UBI_RENAME=y ++CONFIG_CMD_UBIFS=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_PART=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_SETEXPR=y ++CONFIG_CMD_SLEEP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_SOURCE=y ++CONFIG_CMD_STRINGS=y ++CONFIG_CMD_UUID=y ++CONFIG_DISPLAY_CPUINFO=y ++CONFIG_DM_MTD=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_DM_PWM=y ++CONFIG_PWM_MTK=y ++CONFIG_HUSH_PARSER=y ++CONFIG_SYS_REDUNDAND_ENVIRONMENT=y ++CONFIG_SYS_RELOC_GD_ENV_ADDR=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_PARTITION_UUIDS=y ++CONFIG_NETCONSOLE=y ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_CLK=y ++CONFIG_DM_GPIO=y ++CONFIG_DM_SCSI=y ++CONFIG_AHCI=y ++CONFIG_AHCI_PCI=y ++CONFIG_SCSI_AHCI=y ++CONFIG_SCSI=y ++CONFIG_CMD_SCSI=y ++CONFIG_PHY=y ++CONFIG_PHY_MTK_TPHY=y ++CONFIG_PHY_FIXED=y ++CONFIG_MTK_AHCI=y ++CONFIG_DM_ETH=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PCI=y ++# CONFIG_MMC is not set ++# CONFIG_DM_MMC is not set ++CONFIG_MTD=y ++CONFIG_MTD_UBI_FASTMAP=y ++CONFIG_DM_PCI=y ++CONFIG_PCIE_MEDIATEK=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7622=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_PRE_CONSOLE_BUFFER=y ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_RAM=y ++CONFIG_DM_SERIAL=y ++CONFIG_MTK_SERIAL=y ++CONFIG_SPI=y ++CONFIG_DM_SPI=y ++CONFIG_MTK_SPI_NAND=y ++CONFIG_MTK_SPI_NAND_MTD=y ++CONFIG_SYSRESET_WATCHDOG=y ++CONFIG_WDT_MTK=y ++CONFIG_LZO=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y ++CONFIG_RANDOM_UUID=y ++CONFIG_REGEX=y ++CONFIG_OF_EMBED=y ++CONFIG_ENV_OVERWRITE=y ++CONFIG_ENV_IS_IN_UBI=y ++CONFIG_ENV_UBI_PART="ubi" ++CONFIG_ENV_SIZE=0x1f000 ++CONFIG_ENV_SIZE_REDUND=0x1f000 ++CONFIG_ENV_UBI_VOLUME="ubootenv" ++CONFIG_ENV_UBI_VOLUME_REDUND="ubootenv2" ++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_NET_RANDOM_ETHADDR=y ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_CLK=y ++CONFIG_PHY_FIXED=y ++CONFIG_DM_ETH=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7981=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_SERIAL=y ++CONFIG_MTK_SERIAL=y ++CONFIG_HEXDUMP=y ++CONFIG_USE_DEFAULT_ENV_FILE=y ++CONFIG_MTD_SPI_NAND=y ++CONFIG_MTK_SPIM=y ++CONFIG_CMD_MTD=y ++CONFIG_CMD_NAND=y ++CONFIG_CMD_NAND_TRIMFFS=y ++CONFIG_LMB_MAX_REGIONS=64 ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.254" +--- /dev/null ++++ b/arch/arm/dts/mt7981_qihoo-360t7.dts +@@ -0,0 +1,185 @@ ++// SPDX-License-Identifier: GPL-2.0 ++/* ++ * Copyright (c) 2022 MediaTek Inc. ++ * Author: Sam Shih ++ */ ++ ++/dts-v1/; ++#include "mt7981.dtsi" ++#include ++#include ++ ++/ { ++ #address-cells = <1>; ++ #size-cells = <1>; ++ model = "Qihoo 360T7"; ++ compatible = "mediatek,mt7981", "mediatek,mt7981-rfb"; ++ ++ chosen { ++ stdout-path = &uart0; ++ tick-timer = &timer0; ++ }; ++ ++ memory@40000000 { ++ device_type = "memory"; ++ reg = <0x40000000 0x10000000>; ++ }; ++ ++ keys { ++ compatible = "gpio-keys"; ++ ++ factory { ++ label = "reset"; ++ linux,code = ; ++ gpios = <&gpio 1 GPIO_ACTIVE_LOW>; ++ }; ++ ++ wps { ++ label = "wps"; ++ linux,code = ; ++ gpios = <&gpio 0 GPIO_ACTIVE_LOW>; ++ }; ++ }; ++ ++ leds { ++ compatible = "gpio-leds"; ++ ++ status_red { ++ label = "red:status"; ++ gpios = <&gpio 3 GPIO_ACTIVE_LOW>; ++ }; ++ ++ status_green { ++ label = "green:status"; ++ gpios = <&gpio 7 GPIO_ACTIVE_LOW>; ++ }; ++ }; ++}; ++ ++&uart0 { ++ mediatek,force-highspeed; ++ status = "okay"; ++}; ++ ++&uart1 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&uart1_pins>; ++ status = "disabled"; ++}; ++ ++ð { ++ status = "okay"; ++ mediatek,gmac-id = <0>; ++ phy-mode = "2500base-x"; ++ mediatek,switch = "mt7531"; ++ reset-gpios = <&gpio 39 GPIO_ACTIVE_HIGH>; ++ ++ fixed-link { ++ speed = <2500>; ++ full-duplex; ++ }; ++}; ++ ++&pinctrl { ++ spi_flash_pins: spi0-pins-func-1 { ++ mux { ++ function = "flash"; ++ groups = "spi0", "spi0_wp_hold"; ++ }; ++ ++ conf-pu { ++ pins = "SPI0_CS", "SPI0_HOLD", "SPI0_WP"; ++ drive-strength = ; ++ bias-pull-up = ; ++ }; ++ ++ conf-pd { ++ pins = "SPI0_CLK", "SPI0_MOSI", "SPI0_MISO"; ++ drive-strength = ; ++ bias-pull-down = ; ++ }; ++ }; ++ ++ spic_pins: spi1-pins-func-1 { ++ mux { ++ function = "spi"; ++ groups = "spi1_1"; ++ }; ++ }; ++ ++ uart1_pins: spi1-pins-func-3 { ++ mux { ++ function = "uart"; ++ groups = "uart1_2"; ++ }; ++ }; ++ ++ pwm_pins: pwm0-pins-func-1 { ++ mux { ++ function = "pwm"; ++ groups = "pwm0_1", "pwm1_0"; ++ }; ++ }; ++}; ++ ++&pwm { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pwm_pins>; ++ status = "okay"; ++}; ++ ++&spi0 { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&spi_flash_pins>; ++ status = "okay"; ++ must_tx; ++ enhance_timing; ++ dma_ext; ++ ipm_design; ++ support_quad; ++ tick_dly = <2>; ++ sample_sel = <0>; ++ ++ spi_nand@0 { ++ compatible = "spi-nand"; ++ reg = <0>; ++ spi-max-frequency = <52000000>; ++ ++ partitions { ++ compatible = "fixed-partitions"; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ partition@0 { ++ label = "bl2"; ++ reg = <0x0 0x100000>; ++ }; ++ ++ partition@100000 { ++ label = "orig-env"; ++ reg = <0x100000 0x80000>; ++ }; ++ ++ partition@160000 { ++ label = "factory"; ++ reg = <0x180000 0x200000>; ++ }; ++ ++ partition@380000 { ++ label = "fip"; ++ reg = <0x380000 0x200000>; ++ }; ++ ++ partition@580000 { ++ label = "ubi"; ++ reg = <0x580000 0x6c00000>; ++ }; ++ }; ++ }; ++}; ++ ++&watchdog { ++ status = "disabled"; ++}; +--- /dev/null ++++ b/qihoo-360t7_env +@@ -0,0 +1,56 @@ ++ipaddr=192.168.1.1 ++serverip=192.168.1.254 ++loadaddr=0x46000000 ++console=earlycon=uart8250,mmio32,0x11002000 console=ttyS0 ++bootcmd=if pstore check ; then run boot_recovery ; else run boot_ubi ; fi ++bootconf=config-1 ++bootdelay=0 ++bootfile=openwrt-mediatek-filogic-qihoo_360t7-initramfs-recovery.itb ++bootfile_bl2=openwrt-mediatek-filogic-qihoo_360t7-preloader.bin ++bootfile_fip=openwrt-mediatek-filogic-qihoo_360t7-bl31-uboot.fip ++bootfile_upg=openwrt-mediatek-filogic-qihoo_360t7-squashfs-sysupgrade.itb ++bootled_pwr=green:status ++bootled_rec=red:status ++bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60 ++bootmenu_default=0 ++bootmenu_delay=0 ++bootmenu_title= ( ( ( OpenWrt ) ) ) ++bootmenu_0=Initialize environment.=run _firstboot ++bootmenu_0d=Run default boot command.=run boot_default ++bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return ++bootmenu_2=Boot production system from NAND.=run boot_production ; run bootmenu_confirm_return ++bootmenu_3=Boot recovery system from NAND.=run boot_recovery ; run bootmenu_confirm_return ++bootmenu_4=Load production system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_production ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_5=Load recovery system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_recovery ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_6=Load BL31+U-Boot FIP via TFTP then write to NAND.=run boot_tftp_write_fip ; run bootmenu_confirm_return ++bootmenu_7=Load BL2 preloader via TFTP then write to NAND.=run boot_tftp_write_bl2 ; run bootmenu_confirm_return ++bootmenu_8=Reboot.=reset ++bootmenu_9=Reset all settings to factory defaults.=run reset_factory ; reset ++boot_first=if button reset ; then led $bootled_rec on ; run boot_tftp_recovery ; setenv flag_recover 1 ; run boot_default ; fi ; bootmenu ++boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_recovery ; setenv replacevol 1 ; run boot_tftp_forever ++boot_production=led $bootled_pwr on ; run ubi_read_production && bootm $loadaddr#$bootconf ; led $bootled_pwr off ++boot_recovery=led $bootled_rec on ; run ubi_read_recovery && bootm $loadaddr#$bootconf ; led $bootled_rec off ++boot_ubi=run boot_production ; run boot_recovery ; run boot_tftp_forever ++boot_tftp_forever=led $bootled_rec on ; while true ; do run boot_tftp_recovery ; sleep 1 ; done ++boot_tftp_production=tftpboot $loadaddr $bootfile_upg && env exists replacevol && iminfo $loadaddr && run ubi_write_production ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp_recovery=tftpboot $loadaddr $bootfile && env exists replacevol && iminfo $loadaddr && run ubi_write_recovery ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp=tftpboot $loadaddr $bootfile && bootm $loadaddr#$bootconf ++boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run mtd_write_fip && run reset_factory ++boot_tftp_write_bl2=tftpboot $loadaddr $bootfile_bl2 && run mtd_write_bl2 ++part_default=production ++part_recovery=recovery ++reset_factory=ubi part ubi ; mw $loadaddr 0x0 0x800 ; ubi write $loadaddr ubootenv 0x800 ; ubi write $loadaddr ubootenv2 0x800 ++mtd_write_fip=mtd erase fip && mtd write fip $loadaddr ++mtd_write_bl2=mtd erase bl2 && mtd write bl2 $loadaddr ++ubi_create_env=ubi check ubootenv || ubi create ubootenv 0x100000 dynamic 0 || run ubi_format ; ubi check ubootenv2 || ubi create ubootenv2 0x100000 dynamic 1 || run ubi_format ++ubi_format=ubi detach ; mtd erase ubi && ubi part ubi ; reset ++ubi_prepare_rootfs=if ubi check rootfs_data ; then else if env exists rootfs_data_max ; then ubi create rootfs_data $rootfs_data_max dynamic || ubi create rootfs_data - dynamic ; else ubi create rootfs_data - dynamic ; fi ; fi ++ubi_read_production=ubi read $loadaddr fit && iminfo $loadaddr && run ubi_prepare_rootfs ++ubi_read_recovery=ubi check recovery && ubi read $loadaddr recovery ++ubi_remove_rootfs=ubi check rootfs_data && ubi remove rootfs_data ++ubi_write_production=ubi check fit && ubi remove fit ; run ubi_remove_rootfs ; ubi create fit $filesize dynamic 2 && ubi write $loadaddr fit $filesize ++ubi_write_recovery=ubi check recovery && ubi remove recovery ; run ubi_remove_rootfs ; ubi create recovery $filesize dynamic 3 && ubi write $loadaddr recovery $filesize ++_init_env=setenv _init_env ; run ubi_create_env ; saveenv ; saveenv ++_firstboot=setenv _firstboot ; run _switch_to_menu ; run _init_env ; run boot_first ++_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title ++_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" diff --git a/lede/package/boot/uboot-mediatek/patches/434-add-xiaomi_mi-router-wr30u.patch b/lede/package/boot/uboot-mediatek/patches/434-add-xiaomi_mi-router-wr30u.patch new file mode 100644 index 0000000000..2bd1afe7a8 --- /dev/null +++ b/lede/package/boot/uboot-mediatek/patches/434-add-xiaomi_mi-router-wr30u.patch @@ -0,0 +1,461 @@ +--- /dev/null ++++ b/configs/mt7981_xiaomi_mi-router-wr30u_defconfig +@@ -0,0 +1,175 @@ ++CONFIG_ARM=y ++CONFIG_POSITION_INDEPENDENT=y ++CONFIG_ARCH_MEDIATEK=y ++CONFIG_TARGET_MT7981=y ++CONFIG_TEXT_BASE=0x41e00000 ++CONFIG_SYS_MALLOC_F_LEN=0x4000 ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_DEFAULT_DEVICE_TREE="mt7981_xiaomi_mi-router-wr30u" ++CONFIG_DEFAULT_ENV_FILE="xiaomi_mi-router-wr30u_env" ++CONFIG_DEFAULT_FDT_FILE="mediatek/mt7981_xiaomi_mi-router-wr30u.dtb" ++CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_DEBUG_UART_BASE=0x11002000 ++CONFIG_DEBUG_UART_CLOCK=40000000 ++CONFIG_DEBUG_UART=y ++CONFIG_SYS_LOAD_ADDR=0x46000000 ++CONFIG_SMBIOS_PRODUCT_NAME="" ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_CFB_CONSOLE_ANSI=y ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y ++CONFIG_GPIO_HOG=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_FIT=y ++CONFIG_FIT_ENABLE_SHA256_SUPPORT=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y ++CONFIG_LOGLEVEL=7 ++CONFIG_LOG=y ++CONFIG_SYS_PROMPT="MT7981> " ++CONFIG_CMD_BOOTMENU=y ++CONFIG_CMD_BOOTP=y ++CONFIG_CMD_BUTTON=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_CPU=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DM=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_ECHO=y ++CONFIG_CMD_ENV_READMEM=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_EXT4=y ++CONFIG_CMD_FAT=y ++CONFIG_CMD_FDT=y ++CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_GPT=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_ITEST=y ++CONFIG_CMD_LED=y ++CONFIG_CMD_LICENSE=y ++CONFIG_CMD_LINK_LOCAL=y ++# CONFIG_CMD_MBR is not set ++CONFIG_CMD_PCI=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_PING=y ++CONFIG_CMD_PXE=y ++CONFIG_CMD_PWM=y ++CONFIG_CMD_SMC=y ++CONFIG_CMD_TFTPBOOT=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_UBI=y ++CONFIG_CMD_UBI_RENAME=y ++CONFIG_CMD_UBIFS=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_PART=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_SETEXPR=y ++CONFIG_CMD_SLEEP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_SOURCE=y ++CONFIG_CMD_STRINGS=y ++CONFIG_CMD_UUID=y ++CONFIG_DISPLAY_CPUINFO=y ++CONFIG_DM_MTD=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_DM_PWM=y ++CONFIG_PWM_MTK=y ++CONFIG_HUSH_PARSER=y ++CONFIG_SYS_REDUNDAND_ENVIRONMENT=y ++CONFIG_SYS_RELOC_GD_ENV_ADDR=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_PARTITION_UUIDS=y ++CONFIG_NETCONSOLE=y ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_CLK=y ++CONFIG_DM_GPIO=y ++CONFIG_DM_SCSI=y ++CONFIG_AHCI=y ++CONFIG_AHCI_PCI=y ++CONFIG_SCSI_AHCI=y ++CONFIG_SCSI=y ++CONFIG_CMD_SCSI=y ++CONFIG_PHY=y ++CONFIG_PHY_MTK_TPHY=y ++CONFIG_PHY_FIXED=y ++CONFIG_MTK_AHCI=y ++CONFIG_DM_ETH=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PCI=y ++# CONFIG_MMC is not set ++# CONFIG_DM_MMC is not set ++CONFIG_MTD=y ++CONFIG_MTD_UBI_FASTMAP=y ++CONFIG_DM_PCI=y ++CONFIG_PCIE_MEDIATEK=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7622=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_PRE_CONSOLE_BUFFER=y ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_RAM=y ++CONFIG_DM_SERIAL=y ++CONFIG_MTK_SERIAL=y ++CONFIG_SPI=y ++CONFIG_DM_SPI=y ++CONFIG_MTK_SPI_NAND=y ++CONFIG_MTK_SPI_NAND_MTD=y ++CONFIG_SYSRESET_WATCHDOG=y ++CONFIG_WDT_MTK=y ++CONFIG_LZO=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y ++CONFIG_RANDOM_UUID=y ++CONFIG_REGEX=y ++CONFIG_OF_EMBED=y ++CONFIG_ENV_OVERWRITE=y ++CONFIG_ENV_IS_IN_UBI=y ++CONFIG_ENV_UBI_PART="ubi" ++CONFIG_ENV_SIZE=0x1f000 ++CONFIG_ENV_SIZE_REDUND=0x1f000 ++CONFIG_ENV_UBI_VOLUME="ubootenv" ++CONFIG_ENV_UBI_VOLUME_REDUND="ubootenv2" ++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_NET_RANDOM_ETHADDR=y ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_CLK=y ++CONFIG_PHY_FIXED=y ++CONFIG_DM_ETH=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7981=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_SERIAL=y ++CONFIG_MTK_SERIAL=y ++CONFIG_HEXDUMP=y ++CONFIG_USE_DEFAULT_ENV_FILE=y ++CONFIG_MTD_SPI_NAND=y ++CONFIG_MTK_SPIM=y ++CONFIG_CMD_MTD=y ++CONFIG_CMD_NAND=y ++CONFIG_CMD_NAND_TRIMFFS=y ++CONFIG_LMB_MAX_REGIONS=64 ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.254" +--- /dev/null ++++ b/arch/arm/dts/mt7981_xiaomi_mi-router-wr30u.dts +@@ -0,0 +1,221 @@ ++// SPDX-License-Identifier: GPL-2.0 ++/* ++ * Copyright (c) 2022 MediaTek Inc. ++ * Author: Sam Shih ++ */ ++ ++/dts-v1/; ++#include "mt7981.dtsi" ++#include ++#include ++ ++/ { ++ #address-cells = <1>; ++ #size-cells = <1>; ++ model = "Xiaomi Router WR30U"; ++ compatible = "mediatek,mt7981", "mediatek,mt7981-rfb"; ++ ++ chosen { ++ stdout-path = &uart0; ++ tick-timer = &timer0; ++ }; ++ ++ config { ++ blink_led = "yellow:network"; ++ system_led = "yellow:system"; ++ }; ++ ++ memory@40000000 { ++ device_type = "memory"; ++ reg = <0x40000000 0x10000000>; ++ }; ++ ++ gpio-keys { ++ compatible = "gpio-keys"; ++ ++ reset { ++ label = "reset"; ++ gpios = <&gpio 1 GPIO_ACTIVE_LOW>; ++ linux,code = ; ++ }; ++ ++ mesh { ++ label = "mesh"; ++ gpios = <&gpio 0 GPIO_ACTIVE_LOW>; ++ linux,code = ; ++ linux,input-type = ; ++ }; ++ }; ++ ++ leds { ++ compatible = "gpio-leds"; ++ ++ led_system_blue { ++ label = "blue:system"; ++ gpios = <&gpio 9 GPIO_ACTIVE_LOW>; ++ }; ++ ++ led_system_yellow { ++ label = "yellow:system"; ++ gpios = <&gpio 10 GPIO_ACTIVE_LOW>; ++ }; ++ ++ led_network_blue { ++ label = "blue:network"; ++ gpios = <&gpio 11 GPIO_ACTIVE_LOW>; ++ }; ++ ++ led_network_yellow { ++ label = "yellow:network"; ++ gpios = <&gpio 12 GPIO_ACTIVE_LOW>; ++ }; ++ }; ++}; ++ ++&uart0 { ++ mediatek,force-highspeed; ++ status = "okay"; ++}; ++ ++&uart1 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&uart1_pins>; ++ status = "disabled"; ++}; ++ ++ð { ++ status = "okay"; ++ mediatek,gmac-id = <0>; ++ phy-mode = "sgmii"; ++ mediatek,switch = "mt7531"; ++ reset-gpios = <&gpio 39 GPIO_ACTIVE_HIGH>; ++ ++ fixed-link { ++ speed = <1000>; ++ full-duplex; ++ }; ++}; ++ ++&pinctrl { ++ spi_flash_pins: spi0-pins-func-1 { ++ mux { ++ function = "flash"; ++ groups = "spi0", "spi0_wp_hold"; ++ }; ++ ++ conf-pu { ++ pins = "SPI0_CS", "SPI0_HOLD", "SPI0_WP"; ++ drive-strength = ; ++ bias-pull-up = ; ++ }; ++ ++ conf-pd { ++ pins = "SPI0_CLK", "SPI0_MOSI", "SPI0_MISO"; ++ drive-strength = ; ++ bias-pull-down = ; ++ }; ++ }; ++ ++ spic_pins: spi1-pins-func-1 { ++ mux { ++ function = "spi"; ++ groups = "spi1_1"; ++ }; ++ }; ++ ++ uart1_pins: spi1-pins-func-3 { ++ mux { ++ function = "uart"; ++ groups = "uart1_2"; ++ }; ++ }; ++ ++ pwm_pins: pwm0-pins-func-1 { ++ mux { ++ function = "pwm"; ++ groups = "pwm0_1", "pwm1_0"; ++ }; ++ }; ++}; ++ ++&pwm { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pwm_pins>; ++ status = "okay"; ++}; ++ ++&spi0 { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&spi_flash_pins>; ++ status = "okay"; ++ must_tx; ++ enhance_timing; ++ dma_ext; ++ ipm_design; ++ support_quad; ++ tick_dly = <2>; ++ sample_sel = <0>; ++ ++ spi_nand@0 { ++ compatible = "spi-nand"; ++ reg = <0>; ++ spi-max-frequency = <52000000>; ++ ++ partitions { ++ compatible = "fixed-partitions"; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ partition@0 { ++ label = "bl2"; ++ reg = <0x00 0x100000>; ++ }; ++ ++ partition@100000 { ++ label = "Nvram"; ++ reg = <0x100000 0x40000>; ++ }; ++ ++ partition@140000 { ++ label = "Bdata"; ++ reg = <0x140000 0x40000>; ++ }; ++ ++ partition@180000 { ++ label = "factory"; ++ reg = <0x180000 0x200000>; ++ }; ++ ++ partition@380000 { ++ label = "fip"; ++ reg = <0x380000 0x200000>; ++ }; ++ ++ partition@580000 { ++ label = "crash"; ++ reg = <0x580000 0x40000>; ++ }; ++ ++ partition@5c0000 { ++ label = "crash_log"; ++ reg = <0x5c0000 0x40000>; ++ }; ++ ++ partition@600000 { ++ label = "ubi"; ++ reg = <0x600000 0x7000000>; ++ }; ++ ++ partition@7600000 { ++ label = "KF"; ++ reg = <0x7600000 0x40000>; ++ }; ++ }; ++ }; ++}; ++ ++&watchdog { ++ status = "disabled"; ++}; +--- /dev/null ++++ b/xiaomi_mi-router-wr30u_env +@@ -0,0 +1,56 @@ ++ipaddr=192.168.1.1 ++serverip=192.168.1.254 ++loadaddr=0x46000000 ++console=earlycon=uart8250,mmio32,0x11002000 console=ttyS0 ++bootcmd=if pstore check ; then run boot_recovery ; else run boot_ubi ; fi ++bootconf=config-1 ++bootdelay=0 ++bootfile=openwrt-mediatek-filogic-xiaomi_mi-router-wr30u-ubootmod-initramfs-recovery.itb ++bootfile_bl2=openwrt-mediatek-filogic-xiaomi_mi-router-wr30u-ubootmod-preloader.bin ++bootfile_fip=openwrt-mediatek-filogic-xiaomi_mi-router-wr30u-ubootmod-bl31-uboot.fip ++bootfile_upg=openwrt-mediatek-filogic-xiaomi_mi-router-wr30u-ubootmod-squashfs-sysupgrade.itb ++bootled_pwr=yellow:system ++bootled_rec=yellow:network ++bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60 ++bootmenu_default=0 ++bootmenu_delay=0 ++bootmenu_title= ( ( ( OpenWrt ) ) ) ++bootmenu_0=Initialize environment.=run _firstboot ++bootmenu_0d=Run default boot command.=run boot_default ++bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return ++bootmenu_2=Boot production system from NAND.=run boot_production ; run bootmenu_confirm_return ++bootmenu_3=Boot recovery system from NAND.=run boot_recovery ; run bootmenu_confirm_return ++bootmenu_4=Load production system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_production ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_5=Load recovery system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_recovery ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_6=Load BL31+U-Boot FIP via TFTP then write to NAND.=run boot_tftp_write_fip ; run bootmenu_confirm_return ++bootmenu_7=Load BL2 preloader via TFTP then write to NAND.=run boot_tftp_write_bl2 ; run bootmenu_confirm_return ++bootmenu_8=Reboot.=reset ++bootmenu_9=Reset all settings to factory defaults.=run reset_factory ; reset ++boot_first=if button reset ; then led $bootled_rec on ; run boot_tftp_recovery ; setenv flag_recover 1 ; run boot_default ; fi ; bootmenu ++boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_recovery ; setenv replacevol 1 ; run boot_tftp_forever ++boot_production=led $bootled_pwr on ; run ubi_read_production && bootm $loadaddr#$bootconf ; led $bootled_pwr off ++boot_recovery=led $bootled_rec on ; run ubi_read_recovery && bootm $loadaddr#$bootconf ; led $bootled_rec off ++boot_ubi=run boot_production ; run boot_recovery ; run boot_tftp_forever ++boot_tftp_forever=led $bootled_rec on ; while true ; do run boot_tftp_recovery ; sleep 1 ; done ++boot_tftp_production=tftpboot $loadaddr $bootfile_upg && env exists replacevol && iminfo $loadaddr && run ubi_write_production ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp_recovery=tftpboot $loadaddr $bootfile && env exists replacevol && iminfo $loadaddr && run ubi_write_recovery ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp=tftpboot $loadaddr $bootfile && bootm $loadaddr#$bootconf ++boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run mtd_write_fip && run reset_factory ++boot_tftp_write_bl2=tftpboot $loadaddr $bootfile_bl2 && run mtd_write_bl2 ++part_default=production ++part_recovery=recovery ++reset_factory=ubi part ubi ; mw $loadaddr 0x0 0x800 ; ubi write $loadaddr ubootenv 0x800 ; ubi write $loadaddr ubootenv2 0x800 ++mtd_write_fip=mtd erase fip && mtd write fip $loadaddr ++mtd_write_bl2=mtd erase bl2 && mtd write bl2 $loadaddr ++ubi_create_env=ubi check ubootenv || ubi create ubootenv 0x100000 dynamic 0 || run ubi_format ; ubi check ubootenv2 || ubi create ubootenv2 0x100000 dynamic 1 || run ubi_format ++ubi_format=ubi detach ; mtd erase ubi && ubi part ubi ; reset ++ubi_prepare_rootfs=if ubi check rootfs_data ; then else if env exists rootfs_data_max ; then ubi create rootfs_data $rootfs_data_max dynamic || ubi create rootfs_data - dynamic ; else ubi create rootfs_data - dynamic ; fi ; fi ++ubi_read_production=ubi read $loadaddr fit && iminfo $loadaddr && run ubi_prepare_rootfs ++ubi_read_recovery=ubi check recovery && ubi read $loadaddr recovery ++ubi_remove_rootfs=ubi check rootfs_data && ubi remove rootfs_data ++ubi_write_production=ubi check fit && ubi remove fit ; run ubi_remove_rootfs ; ubi create fit $filesize dynamic 2 && ubi write $loadaddr fit $filesize ++ubi_write_recovery=ubi check recovery && ubi remove recovery ; run ubi_remove_rootfs ; ubi create recovery $filesize dynamic 3 && ubi write $loadaddr recovery $filesize ++_init_env=setenv _init_env ; run ubi_create_env ; saveenv ; saveenv ++_firstboot=setenv _firstboot ; run _switch_to_menu ; run _init_env ; run boot_first ++_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title ++_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" diff --git a/lede/package/boot/uboot-mediatek/patches/435-add-h3c_magic-nx30-pro.patch b/lede/package/boot/uboot-mediatek/patches/435-add-h3c_magic-nx30-pro.patch new file mode 100644 index 0000000000..d5a149b903 --- /dev/null +++ b/lede/package/boot/uboot-mediatek/patches/435-add-h3c_magic-nx30-pro.patch @@ -0,0 +1,445 @@ +--- /dev/null ++++ b/configs/mt7981_h3c_magic-nx30-pro_defconfig +@@ -0,0 +1,175 @@ ++CONFIG_ARM=y ++CONFIG_POSITION_INDEPENDENT=y ++CONFIG_ARCH_MEDIATEK=y ++CONFIG_TARGET_MT7981=y ++CONFIG_TEXT_BASE=0x41e00000 ++CONFIG_SYS_MALLOC_F_LEN=0x4000 ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_DEFAULT_DEVICE_TREE="mt7981_h3c_magic-nx30-pro" ++CONFIG_DEFAULT_ENV_FILE="h3c_magic-nx30-pro_env" ++CONFIG_DEFAULT_FDT_FILE="mediatek/mt7981_h3c_magic-nx30-pro.dtb" ++CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_DEBUG_UART_BASE=0x11002000 ++CONFIG_DEBUG_UART_CLOCK=40000000 ++CONFIG_DEBUG_UART=y ++CONFIG_SYS_LOAD_ADDR=0x46000000 ++CONFIG_SMBIOS_PRODUCT_NAME="" ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_CFB_CONSOLE_ANSI=y ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y ++CONFIG_GPIO_HOG=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_FIT=y ++CONFIG_FIT_ENABLE_SHA256_SUPPORT=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y ++CONFIG_LOGLEVEL=7 ++CONFIG_LOG=y ++CONFIG_SYS_PROMPT="MT7981> " ++CONFIG_CMD_BOOTMENU=y ++CONFIG_CMD_BOOTP=y ++CONFIG_CMD_BUTTON=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_CPU=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DM=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_ECHO=y ++CONFIG_CMD_ENV_READMEM=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_EXT4=y ++CONFIG_CMD_FAT=y ++CONFIG_CMD_FDT=y ++CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_GPT=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_ITEST=y ++CONFIG_CMD_LED=y ++CONFIG_CMD_LICENSE=y ++CONFIG_CMD_LINK_LOCAL=y ++# CONFIG_CMD_MBR is not set ++CONFIG_CMD_PCI=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_PING=y ++CONFIG_CMD_PXE=y ++CONFIG_CMD_PWM=y ++CONFIG_CMD_SMC=y ++CONFIG_CMD_TFTPBOOT=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_UBI=y ++CONFIG_CMD_UBI_RENAME=y ++CONFIG_CMD_UBIFS=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_PART=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_SETEXPR=y ++CONFIG_CMD_SLEEP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_SOURCE=y ++CONFIG_CMD_STRINGS=y ++CONFIG_CMD_UUID=y ++CONFIG_DISPLAY_CPUINFO=y ++CONFIG_DM_MTD=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_DM_PWM=y ++CONFIG_PWM_MTK=y ++CONFIG_HUSH_PARSER=y ++CONFIG_SYS_REDUNDAND_ENVIRONMENT=y ++CONFIG_SYS_RELOC_GD_ENV_ADDR=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_PARTITION_UUIDS=y ++CONFIG_NETCONSOLE=y ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_CLK=y ++CONFIG_DM_GPIO=y ++CONFIG_DM_SCSI=y ++CONFIG_AHCI=y ++CONFIG_AHCI_PCI=y ++CONFIG_SCSI_AHCI=y ++CONFIG_SCSI=y ++CONFIG_CMD_SCSI=y ++CONFIG_PHY=y ++CONFIG_PHY_MTK_TPHY=y ++CONFIG_PHY_FIXED=y ++CONFIG_MTK_AHCI=y ++CONFIG_DM_ETH=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PCI=y ++# CONFIG_MMC is not set ++# CONFIG_DM_MMC is not set ++CONFIG_MTD=y ++CONFIG_MTD_UBI_FASTMAP=y ++CONFIG_DM_PCI=y ++CONFIG_PCIE_MEDIATEK=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7622=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_PRE_CONSOLE_BUFFER=y ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_RAM=y ++CONFIG_DM_SERIAL=y ++CONFIG_MTK_SERIAL=y ++CONFIG_SPI=y ++CONFIG_DM_SPI=y ++CONFIG_MTK_SPI_NAND=y ++CONFIG_MTK_SPI_NAND_MTD=y ++CONFIG_SYSRESET_WATCHDOG=y ++CONFIG_WDT_MTK=y ++CONFIG_LZO=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y ++CONFIG_RANDOM_UUID=y ++CONFIG_REGEX=y ++CONFIG_OF_EMBED=y ++CONFIG_ENV_OVERWRITE=y ++CONFIG_ENV_IS_IN_UBI=y ++CONFIG_ENV_UBI_PART="ubi" ++CONFIG_ENV_SIZE=0x1f000 ++CONFIG_ENV_SIZE_REDUND=0x1f000 ++CONFIG_ENV_UBI_VOLUME="ubootenv" ++CONFIG_ENV_UBI_VOLUME_REDUND="ubootenv2" ++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_NET_RANDOM_ETHADDR=y ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_CLK=y ++CONFIG_PHY_FIXED=y ++CONFIG_DM_ETH=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7981=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_SERIAL=y ++CONFIG_MTK_SERIAL=y ++CONFIG_HEXDUMP=y ++CONFIG_USE_DEFAULT_ENV_FILE=y ++CONFIG_MTD_SPI_NAND=y ++CONFIG_MTK_SPIM=y ++CONFIG_CMD_MTD=y ++CONFIG_CMD_NAND=y ++CONFIG_CMD_NAND_TRIMFFS=y ++CONFIG_LMB_MAX_REGIONS=64 ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.254" +--- /dev/null ++++ b/arch/arm/dts/mt7981_h3c_magic-nx30-pro.dts +@@ -0,0 +1,205 @@ ++// SPDX-License-Identifier: GPL-2.0 ++/* ++ * Copyright (c) 2022 MediaTek Inc. ++ * Author: Sam Shih ++ */ ++ ++/dts-v1/; ++#include "mt7981.dtsi" ++#include ++#include ++ ++/ { ++ #address-cells = <1>; ++ #size-cells = <1>; ++ model = "H3C Magic NX30 Pro"; ++ compatible = "mediatek,mt7981", "mediatek,mt7981-rfb"; ++ ++ chosen { ++ stdout-path = &uart0; ++ tick-timer = &timer0; ++ }; ++ ++ memory@40000000 { ++ device_type = "memory"; ++ reg = <0x40000000 0x10000000>; ++ }; ++ ++ keys { ++ compatible = "gpio-keys"; ++ ++ factory { ++ label = "reset"; ++ linux,code = ; ++ gpios = <&gpio 1 GPIO_ACTIVE_LOW>; ++ }; ++ ++ wps { ++ label = "wps"; ++ linux,code = ; ++ gpios = <&gpio 0 GPIO_ACTIVE_LOW>; ++ }; ++ }; ++ ++ leds { ++ compatible = "gpio-leds"; ++ ++ status_red { ++ label = "red:status"; ++ gpios = <&gpio 4 GPIO_ACTIVE_LOW>; ++ }; ++ ++ status_green { ++ label = "green:status"; ++ gpios = <&gpio 5 GPIO_ACTIVE_LOW>; ++ }; ++ }; ++}; ++ ++&uart0 { ++ mediatek,force-highspeed; ++ status = "okay"; ++}; ++ ++&uart1 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&uart1_pins>; ++ status = "disabled"; ++}; ++ ++ð { ++ status = "okay"; ++ mediatek,gmac-id = <0>; ++ phy-mode = "2500base-x"; ++ mediatek,switch = "mt7531"; ++ reset-gpios = <&gpio 39 GPIO_ACTIVE_HIGH>; ++ ++ fixed-link { ++ speed = <2500>; ++ full-duplex; ++ }; ++}; ++ ++&pinctrl { ++ spi_flash_pins: spi0-pins-func-1 { ++ mux { ++ function = "flash"; ++ groups = "spi0", "spi0_wp_hold"; ++ }; ++ ++ conf-pu { ++ pins = "SPI0_CS", "SPI0_HOLD", "SPI0_WP"; ++ drive-strength = ; ++ bias-pull-up = ; ++ }; ++ ++ conf-pd { ++ pins = "SPI0_CLK", "SPI0_MOSI", "SPI0_MISO"; ++ drive-strength = ; ++ bias-pull-down = ; ++ }; ++ }; ++ ++ spic_pins: spi1-pins-func-1 { ++ mux { ++ function = "spi"; ++ groups = "spi1_1"; ++ }; ++ }; ++ ++ uart1_pins: spi1-pins-func-3 { ++ mux { ++ function = "uart"; ++ groups = "uart1_2"; ++ }; ++ }; ++ ++ pwm_pins: pwm0-pins-func-1 { ++ mux { ++ function = "pwm"; ++ groups = "pwm0_1", "pwm1_0"; ++ }; ++ }; ++}; ++ ++&pwm { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pwm_pins>; ++ status = "okay"; ++}; ++ ++&spi0 { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&spi_flash_pins>; ++ status = "okay"; ++ must_tx; ++ enhance_timing; ++ dma_ext; ++ ipm_design; ++ support_quad; ++ tick_dly = <2>; ++ sample_sel = <0>; ++ ++ spi_nand@0 { ++ compatible = "spi-nand"; ++ reg = <0>; ++ spi-max-frequency = <52000000>; ++ ++ partitions { ++ compatible = "fixed-partitions"; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ partition@0 { ++ label = "bl2"; ++ reg = <0x0000000 0x0100000>; ++ }; ++ ++ partition@100000 { ++ label = "orig-env"; ++ reg = <0x0100000 0x0080000>; ++ }; ++ ++ partition@180000 { ++ label = "factory"; ++ reg = <0x0180000 0x0200000>; ++ }; ++ ++ partition@380000 { ++ label = "fip"; ++ reg = <0x0380000 0x0200000>; ++ }; ++ ++ partition@580000 { ++ label = "ubi"; ++ reg = <0x0580000 0x4000000>; ++ }; ++ ++ partition@4580000 { ++ label = "pdt_data"; ++ reg = <0x4580000 0x0600000>; ++ }; ++ ++ partition@4b80000 { ++ label = "pdt_data_1"; ++ reg = <0x4b80000 0x0600000>; ++ }; ++ ++ partition@5180000 { ++ label = "exp"; ++ reg = <0x5180000 0x0100000>; ++ }; ++ ++ partition@5280000 { ++ label = "plugin"; ++ reg = <0x5280000 0x2580000>; ++ }; ++ }; ++ }; ++}; ++ ++&watchdog { ++ status = "disabled"; ++}; +--- /dev/null ++++ b/h3c_magic-nx30-pro_env +@@ -0,0 +1,56 @@ ++ipaddr=192.168.1.1 ++serverip=192.168.1.254 ++loadaddr=0x46000000 ++console=earlycon=uart8250,mmio32,0x11002000 console=ttyS0 ++bootcmd=if pstore check ; then run boot_recovery ; else run boot_ubi ; fi ++bootconf=config-1 ++bootdelay=0 ++bootfile=openwrt-mediatek-filogic-h3c_magic-nx30-pro-initramfs-recovery.itb ++bootfile_bl2=openwrt-mediatek-filogic-h3c_magic-nx30-pro-preloader.bin ++bootfile_fip=openwrt-mediatek-filogic-h3c_magic-nx30-pro-bl31-uboot.fip ++bootfile_upg=openwrt-mediatek-filogic-h3c_magic-nx30-pro-squashfs-sysupgrade.itb ++bootled_pwr=green:status ++bootled_rec=red:status ++bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60 ++bootmenu_default=0 ++bootmenu_delay=0 ++bootmenu_title= ( ( ( OpenWrt ) ) ) ++bootmenu_0=Initialize environment.=run _firstboot ++bootmenu_0d=Run default boot command.=run boot_default ++bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return ++bootmenu_2=Boot production system from NAND.=run boot_production ; run bootmenu_confirm_return ++bootmenu_3=Boot recovery system from NAND.=run boot_recovery ; run bootmenu_confirm_return ++bootmenu_4=Load production system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_production ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_5=Load recovery system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_recovery ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_6=Load BL31+U-Boot FIP via TFTP then write to NAND.=run boot_tftp_write_fip ; run bootmenu_confirm_return ++bootmenu_7=Load BL2 preloader via TFTP then write to NAND.=run boot_tftp_write_bl2 ; run bootmenu_confirm_return ++bootmenu_8=Reboot.=reset ++bootmenu_9=Reset all settings to factory defaults.=run reset_factory ; reset ++boot_first=if button reset ; then led $bootled_rec on ; run boot_tftp_recovery ; setenv flag_recover 1 ; run boot_default ; fi ; bootmenu ++boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_recovery ; setenv replacevol 1 ; run boot_tftp_forever ++boot_production=led $bootled_pwr on ; run ubi_read_production && bootm $loadaddr#$bootconf ; led $bootled_pwr off ++boot_recovery=led $bootled_rec on ; run ubi_read_recovery && bootm $loadaddr#$bootconf ; led $bootled_rec off ++boot_ubi=run boot_production ; run boot_recovery ; run boot_tftp_forever ++boot_tftp_forever=led $bootled_rec on ; while true ; do run boot_tftp_recovery ; sleep 1 ; done ++boot_tftp_production=tftpboot $loadaddr $bootfile_upg && env exists replacevol && iminfo $loadaddr && run ubi_write_production ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp_recovery=tftpboot $loadaddr $bootfile && env exists replacevol && iminfo $loadaddr && run ubi_write_recovery ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp=tftpboot $loadaddr $bootfile && bootm $loadaddr#$bootconf ++boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run mtd_write_fip && run reset_factory ++boot_tftp_write_bl2=tftpboot $loadaddr $bootfile_bl2 && run mtd_write_bl2 ++part_default=production ++part_recovery=recovery ++reset_factory=ubi part ubi ; mw $loadaddr 0x0 0x800 ; ubi write $loadaddr ubootenv 0x800 ; ubi write $loadaddr ubootenv2 0x800 ++mtd_write_fip=mtd erase fip && mtd write fip $loadaddr ++mtd_write_bl2=mtd erase bl2 && mtd write bl2 $loadaddr ++ubi_create_env=ubi check ubootenv || ubi create ubootenv 0x100000 dynamic 0 || run ubi_format ; ubi check ubootenv2 || ubi create ubootenv2 0x100000 dynamic 1 || run ubi_format ++ubi_format=ubi detach ; mtd erase ubi && ubi part ubi ; reset ++ubi_prepare_rootfs=if ubi check rootfs_data ; then else if env exists rootfs_data_max ; then ubi create rootfs_data $rootfs_data_max dynamic || ubi create rootfs_data - dynamic ; else ubi create rootfs_data - dynamic ; fi ; fi ++ubi_read_production=ubi read $loadaddr fit && iminfo $loadaddr && run ubi_prepare_rootfs ++ubi_read_recovery=ubi check recovery && ubi read $loadaddr recovery ++ubi_remove_rootfs=ubi check rootfs_data && ubi remove rootfs_data ++ubi_write_production=ubi check fit && ubi remove fit ; run ubi_remove_rootfs ; ubi create fit $filesize dynamic 2 && ubi write $loadaddr fit $filesize ++ubi_write_recovery=ubi check recovery && ubi remove recovery ; run ubi_remove_rootfs ; ubi create recovery $filesize dynamic 3 && ubi write $loadaddr recovery $filesize ++_init_env=setenv _init_env ; run ubi_create_env ; saveenv ; saveenv ++_firstboot=setenv _firstboot ; run _switch_to_menu ; run _init_env ; run boot_first ++_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title ++_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" diff --git a/lede/package/boot/uboot-mediatek/patches/437-add-cmcc_rax3000m.patch b/lede/package/boot/uboot-mediatek/patches/437-add-cmcc_rax3000m.patch new file mode 100644 index 0000000000..26e0e30a99 --- /dev/null +++ b/lede/package/boot/uboot-mediatek/patches/437-add-cmcc_rax3000m.patch @@ -0,0 +1,697 @@ +--- /dev/null ++++ b/configs/mt7981_cmcc_rax3000m-emmc_defconfig +@@ -0,0 +1,175 @@ ++CONFIG_ARM=y ++CONFIG_POSITION_INDEPENDENT=y ++CONFIG_ARCH_MEDIATEK=y ++CONFIG_TARGET_MT7981=y ++CONFIG_TEXT_BASE=0x41e00000 ++CONFIG_SYS_MALLOC_F_LEN=0x4000 ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_DEFAULT_DEVICE_TREE="mt7981-cmcc-rax3000m-emmc" ++CONFIG_DEFAULT_ENV_FILE="cmcc_rax3000m-emmc_env" ++CONFIG_DEFAULT_FDT_FILE="mediatek/mt7981-cmcc-rax3000m-emmc.dtb" ++CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_DEBUG_UART_BASE=0x11002000 ++CONFIG_DEBUG_UART_CLOCK=40000000 ++CONFIG_DEBUG_UART=y ++CONFIG_SYS_LOAD_ADDR=0x46000000 ++CONFIG_SMBIOS_PRODUCT_NAME="" ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_CFB_CONSOLE_ANSI=y ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y ++CONFIG_GPIO_HOG=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_FIT=y ++CONFIG_FIT_ENABLE_SHA256_SUPPORT=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y ++CONFIG_LOGLEVEL=7 ++CONFIG_LOG=y ++CONFIG_SYS_PROMPT="MT7981> " ++CONFIG_CMD_BOOTMENU=y ++CONFIG_CMD_BOOTP=y ++CONFIG_CMD_BUTTON=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_CPU=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DM=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_ECHO=y ++CONFIG_CMD_ENV_READMEM=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_EXT4=y ++CONFIG_CMD_FAT=y ++CONFIG_CMD_FDT=y ++CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_GPT=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_ITEST=y ++CONFIG_CMD_LED=y ++CONFIG_CMD_LICENSE=y ++CONFIG_CMD_LINK_LOCAL=y ++# CONFIG_CMD_MBR is not set ++CONFIG_CMD_MMC=y ++CONFIG_CMD_PCI=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_PING=y ++CONFIG_CMD_PXE=y ++CONFIG_CMD_PWM=y ++CONFIG_CMD_SMC=y ++CONFIG_CMD_TFTPBOOT=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_PART=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_SETEXPR=y ++CONFIG_CMD_SLEEP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_SOURCE=y ++CONFIG_CMD_STRINGS=y ++CONFIG_CMD_USB=y ++CONFIG_CMD_UUID=y ++CONFIG_DISPLAY_CPUINFO=y ++CONFIG_DM_MMC=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_DM_USB=y ++CONFIG_DM_PWM=y ++CONFIG_PWM_MTK=y ++CONFIG_HUSH_PARSER=y ++CONFIG_SYS_REDUNDAND_ENVIRONMENT=y ++CONFIG_SYS_RELOC_GD_ENV_ADDR=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_PARTITION_UUIDS=y ++CONFIG_NETCONSOLE=y ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_CLK=y ++CONFIG_DM_GPIO=y ++CONFIG_DM_SCSI=y ++CONFIG_AHCI=y ++CONFIG_AHCI_PCI=y ++CONFIG_SCSI_AHCI=y ++CONFIG_SCSI=y ++CONFIG_CMD_SCSI=y ++CONFIG_PHY=y ++CONFIG_PHY_MTK_TPHY=y ++CONFIG_PHY_FIXED=y ++CONFIG_MTK_AHCI=y ++CONFIG_DM_ETH=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PCI=y ++CONFIG_DM_PCI=y ++CONFIG_PCIE_MEDIATEK=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7622=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_PRE_CONSOLE_BUFFER=y ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_RAM=y ++CONFIG_DM_SERIAL=y ++CONFIG_MTK_SERIAL=y ++CONFIG_MMC=y ++CONFIG_MMC_DEFAULT_DEV=1 ++CONFIG_MMC_HS200_SUPPORT=y ++CONFIG_MMC_MTK=y ++CONFIG_MMC_SUPPORTS_TUNING=y ++CONFIG_SUPPORT_EMMC_BOOT=y ++CONFIG_SPI=y ++CONFIG_SYSRESET_WATCHDOG=y ++CONFIG_WDT_MTK=y ++CONFIG_LZO=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y ++CONFIG_RANDOM_UUID=y ++CONFIG_REGEX=y ++CONFIG_USB=y ++CONFIG_USB_HOST=y ++CONFIG_USB_XHCI_HCD=y ++CONFIG_USB_XHCI_MTK=y ++CONFIG_USB_STORAGE=y ++CONFIG_OF_EMBED=y ++CONFIG_ENV_OVERWRITE=y ++CONFIG_ENV_IS_IN_MMC=y ++CONFIG_ENV_OFFSET=0x400000 ++CONFIG_ENV_OFFSET_REDUND=0x440000 ++CONFIG_ENV_SIZE=0x40000 ++CONFIG_ENV_SIZE_REDUND=0x40000 ++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_NET_RANDOM_ETHADDR=y ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_CLK=y ++CONFIG_SUPPORT_EMMC_BOOT=y ++CONFIG_PHY_FIXED=y ++CONFIG_DM_ETH=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7981=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_SERIAL=y ++CONFIG_MTK_SERIAL=y ++CONFIG_HEXDUMP=y ++CONFIG_USE_DEFAULT_ENV_FILE=y ++CONFIG_CMD_SF=y ++CONFIG_LMB_MAX_REGIONS=64 ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.254" +--- /dev/null ++++ b/configs/mt7981_cmcc_rax3000m-nand_defconfig +@@ -0,0 +1,175 @@ ++CONFIG_ARM=y ++CONFIG_POSITION_INDEPENDENT=y ++CONFIG_ARCH_MEDIATEK=y ++CONFIG_TARGET_MT7981=y ++CONFIG_TEXT_BASE=0x41e00000 ++CONFIG_SYS_MALLOC_F_LEN=0x4000 ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_DEFAULT_DEVICE_TREE="mt7981-cmcc-rax3000m-nand" ++CONFIG_DEFAULT_ENV_FILE="cmcc_rax3000m-nand_env" ++CONFIG_DEFAULT_FDT_FILE="mediatek/mt7981-cmcc-rax3000m-nand.dtb" ++CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_DEBUG_UART_BASE=0x11002000 ++CONFIG_DEBUG_UART_CLOCK=40000000 ++CONFIG_DEBUG_UART=y ++CONFIG_SYS_LOAD_ADDR=0x46000000 ++CONFIG_SMBIOS_PRODUCT_NAME="" ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_CFB_CONSOLE_ANSI=y ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y ++CONFIG_GPIO_HOG=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_FIT=y ++CONFIG_FIT_ENABLE_SHA256_SUPPORT=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y ++CONFIG_LOGLEVEL=7 ++CONFIG_LOG=y ++CONFIG_SYS_PROMPT="MT7981> " ++CONFIG_CMD_BOOTMENU=y ++CONFIG_CMD_BOOTP=y ++CONFIG_CMD_BUTTON=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_CPU=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DM=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_ECHO=y ++CONFIG_CMD_ENV_READMEM=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_EXT4=y ++CONFIG_CMD_FAT=y ++CONFIG_CMD_FDT=y ++CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_GPT=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_ITEST=y ++CONFIG_CMD_LED=y ++CONFIG_CMD_LICENSE=y ++CONFIG_CMD_LINK_LOCAL=y ++# CONFIG_CMD_MBR is not set ++CONFIG_CMD_PCI=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_PING=y ++CONFIG_CMD_PXE=y ++CONFIG_CMD_PWM=y ++CONFIG_CMD_SMC=y ++CONFIG_CMD_TFTPBOOT=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_UBI=y ++CONFIG_CMD_UBI_RENAME=y ++CONFIG_CMD_UBIFS=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_PART=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_SETEXPR=y ++CONFIG_CMD_SLEEP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_SOURCE=y ++CONFIG_CMD_STRINGS=y ++CONFIG_CMD_UUID=y ++CONFIG_DISPLAY_CPUINFO=y ++CONFIG_DM_MTD=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_DM_PWM=y ++CONFIG_PWM_MTK=y ++CONFIG_HUSH_PARSER=y ++CONFIG_SYS_REDUNDAND_ENVIRONMENT=y ++CONFIG_SYS_RELOC_GD_ENV_ADDR=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_PARTITION_UUIDS=y ++CONFIG_NETCONSOLE=y ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_CLK=y ++CONFIG_DM_GPIO=y ++CONFIG_DM_SCSI=y ++CONFIG_AHCI=y ++CONFIG_AHCI_PCI=y ++CONFIG_SCSI_AHCI=y ++CONFIG_SCSI=y ++CONFIG_CMD_SCSI=y ++CONFIG_PHY=y ++CONFIG_PHY_MTK_TPHY=y ++CONFIG_PHY_FIXED=y ++CONFIG_MTK_AHCI=y ++CONFIG_DM_ETH=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PCI=y ++# CONFIG_MMC is not set ++# CONFIG_DM_MMC is not set ++CONFIG_MTD=y ++CONFIG_MTD_UBI_FASTMAP=y ++CONFIG_DM_PCI=y ++CONFIG_PCIE_MEDIATEK=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7622=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_PRE_CONSOLE_BUFFER=y ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_RAM=y ++CONFIG_DM_SERIAL=y ++CONFIG_MTK_SERIAL=y ++CONFIG_SPI=y ++CONFIG_DM_SPI=y ++CONFIG_MTK_SPI_NAND=y ++CONFIG_MTK_SPI_NAND_MTD=y ++CONFIG_SYSRESET_WATCHDOG=y ++CONFIG_WDT_MTK=y ++CONFIG_LZO=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y ++CONFIG_RANDOM_UUID=y ++CONFIG_REGEX=y ++CONFIG_OF_EMBED=y ++CONFIG_ENV_OVERWRITE=y ++CONFIG_ENV_IS_IN_UBI=y ++CONFIG_ENV_UBI_PART="ubi" ++CONFIG_ENV_SIZE=0x1f000 ++CONFIG_ENV_SIZE_REDUND=0x1f000 ++CONFIG_ENV_UBI_VOLUME="ubootenv" ++CONFIG_ENV_UBI_VOLUME_REDUND="ubootenv2" ++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_NET_RANDOM_ETHADDR=y ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_CLK=y ++CONFIG_PHY_FIXED=y ++CONFIG_DM_ETH=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7981=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_SERIAL=y ++CONFIG_MTK_SERIAL=y ++CONFIG_HEXDUMP=y ++CONFIG_USE_DEFAULT_ENV_FILE=y ++CONFIG_MTD_SPI_NAND=y ++CONFIG_MTK_SPIM=y ++CONFIG_CMD_MTD=y ++CONFIG_CMD_NAND=y ++CONFIG_CMD_NAND_TRIMFFS=y ++CONFIG_LMB_MAX_REGIONS=64 ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.254" +--- /dev/null ++++ b/arch/arm/dts/mt7981-cmcc-rax3000m.dtsi +@@ -0,0 +1,85 @@ ++// SPDX-License-Identifier: GPL-2.0-only ++/* ++ * Copyright (c) 2022 MediaTek Inc. ++ * Author: Sam Shih ++ */ ++ ++/dts-v1/; ++#include "mt7981.dtsi" ++#include ++#include ++ ++/ { ++ #address-cells = <1>; ++ #size-cells = <1>; ++ model = "CMCC RAX3000M"; ++ compatible = "mediatek,mt7981", "mediatek,mt7981-rfb"; ++ ++ chosen { ++ stdout-path = &uart0; ++ tick-timer = &timer0; ++ }; ++ ++ memory@40000000 { ++ device_type = "memory"; ++ reg = <0x40000000 0x20000000>; ++ }; ++ ++ keys { ++ compatible = "gpio-keys"; ++ ++ button-reset { ++ label = "reset"; ++ linux,code = ; ++ gpios = <&gpio 1 GPIO_ACTIVE_LOW>; ++ }; ++ ++ button-mesh { ++ label = "mesh"; ++ linux,code = ; ++ linux,input-type = ; ++ gpios = <&gpio 0 GPIO_ACTIVE_LOW>; ++ }; ++ }; ++ ++ leds { ++ compatible = "gpio-leds"; ++ ++ led-0 { ++ label = "green:status"; ++ gpios = <&gpio 9 GPIO_ACTIVE_LOW>; ++ }; ++ ++ led-1 { ++ label = "blue:status"; ++ gpios = <&gpio 12 GPIO_ACTIVE_LOW>; ++ }; ++ ++ led-2 { ++ label = "red:status"; ++ gpios = <&gpio 35 GPIO_ACTIVE_LOW>; ++ }; ++ }; ++}; ++ ++ð { ++ status = "okay"; ++ mediatek,gmac-id = <0>; ++ phy-mode = "2500base-x"; ++ mediatek,switch = "mt7531"; ++ reset-gpios = <&gpio 39 GPIO_ACTIVE_HIGH>; ++ ++ fixed-link { ++ speed = <2500>; ++ full-duplex; ++ }; ++}; ++ ++&uart0 { ++ mediatek,force-highspeed; ++ status = "okay"; ++}; ++ ++&watchdog { ++ status = "disabled"; ++}; +--- /dev/null ++++ b/arch/arm/dts/mt7981-cmcc-rax3000m-emmc.dts +@@ -0,0 +1,53 @@ ++// SPDX-License-Identifier: GPL-2.0-only ++ ++/dts-v1/; ++#include "mt7981-cmcc-rax3000m.dtsi" ++ ++/ { ++ reg_3p3v: regulator-3p3v { ++ compatible = "regulator-fixed"; ++ regulator-name = "fixed-3.3V"; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-boot-on; ++ regulator-always-on; ++ }; ++}; ++ ++&mmc0 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&mmc0_pins_default>; ++ max-frequency = <26000000>; ++ bus-width = <8>; ++ cap-mmc-hw-reset; ++ vmmc-supply = <®_3p3v>; ++ non-removable; ++ status = "okay"; ++}; ++ ++&pinctrl { ++ mmc0_pins_default: mmc0default { ++ mux { ++ function = "flash"; ++ groups = "emmc_45"; ++ }; ++ conf-cmd-dat { ++ pins = "SPI0_CLK", "SPI0_MOSI", "SPI0_MISO", ++ "SPI0_CS", "SPI0_HOLD", "SPI0_WP", ++ "SPI1_CLK", "SPI1_MOSI", "SPI1_MISO"; ++ input-enable; ++ drive-strength = ; ++ bias-pull-up = ; ++ }; ++ conf-clk { ++ pins = "SPI1_CS"; ++ drive-strength = ; ++ bias-pull-down = ; ++ }; ++ conf-rst { ++ pins = "PWM0"; ++ drive-strength = ; ++ bias-pull-up = ; ++ }; ++ }; ++}; +--- /dev/null ++++ b/arch/arm/dts/mt7981-cmcc-rax3000m-nand.dts +@@ -0,0 +1,77 @@ ++// SPDX-License-Identifier: GPL-2.0-only ++ ++/dts-v1/; ++#include "mt7981-cmcc-rax3000m.dtsi" ++ ++&pinctrl { ++ spi_flash_pins: spi0-pins-func-1 { ++ mux { ++ function = "flash"; ++ groups = "spi0", "spi0_wp_hold"; ++ }; ++ ++ conf-pu { ++ pins = "SPI0_CS", "SPI0_HOLD", "SPI0_WP"; ++ drive-strength = ; ++ bias-pull-up = ; ++ }; ++ ++ conf-pd { ++ pins = "SPI0_CLK", "SPI0_MOSI", "SPI0_MISO"; ++ drive-strength = ; ++ bias-pull-down = ; ++ }; ++ }; ++}; ++ ++&spi0 { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&spi_flash_pins>; ++ status = "okay"; ++ must_tx; ++ enhance_timing; ++ dma_ext; ++ ipm_design; ++ support_quad; ++ tick_dly = <2>; ++ sample_sel = <0>; ++ ++ spi_nand@0 { ++ compatible = "spi-nand"; ++ reg = <0>; ++ spi-max-frequency = <52000000>; ++ ++ partitions { ++ compatible = "fixed-partitions"; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ partition@0 { ++ label = "bl2"; ++ reg = <0x0 0x100000>; ++ }; ++ ++ partition@100000 { ++ label = "orig-env"; ++ reg = <0x100000 0x80000>; ++ }; ++ ++ partition@160000 { ++ label = "factory"; ++ reg = <0x180000 0x200000>; ++ }; ++ ++ partition@380000 { ++ label = "fip"; ++ reg = <0x380000 0x200000>; ++ }; ++ ++ partition@580000 { ++ label = "ubi"; ++ reg = <0x580000 0x7200000>; ++ }; ++ }; ++ }; ++}; +--- /dev/null ++++ b/cmcc_rax3000m-emmc_env +@@ -0,0 +1,55 @@ ++ipaddr=192.168.1.1 ++serverip=192.168.1.254 ++loadaddr=0x46000000 ++console=earlycon=uart8250,mmio32,0x11002000 console=ttyS0 ++bootargs=root=/dev/mmcblk0p65 ++bootcmd=if pstore check ; then run boot_recovery ; else run boot_emmc ; fi ++bootconf=config-1#mt7981b-cmcc-rax3000m-emmc ++bootdelay=0 ++bootfile=openwrt-mediatek-filogic-cmcc_rax3000m-initramfs-recovery.itb ++bootfile_bl2=openwrt-mediatek-filogic-cmcc_rax3000m-emmc-preloader.bin ++bootfile_fip=openwrt-mediatek-filogic-cmcc_rax3000m-emmc-bl31-uboot.fip ++bootfile_upg=openwrt-mediatek-filogic-cmcc_rax3000m-squashfs-sysupgrade.itb ++bootled_pwr=red:status ++bootled_rec=blue:status ++bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60 ++bootmenu_default=0 ++bootmenu_delay=0 ++bootmenu_title= ( ( ( OpenWrt ) ) ) [eMMC] ++bootmenu_0=Initialize environment.=run _firstboot ++bootmenu_0d=Run default boot command.=run boot_default ++bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return ++bootmenu_2=Boot production system from eMMC.=run boot_production ; run bootmenu_confirm_return ++bootmenu_3=Boot recovery system from eMMC.=run boot_recovery ; run bootmenu_confirm_return ++bootmenu_4=Load production system via TFTP then write to eMMC.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_production ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_5=Load recovery system via TFTP then write to eMMC.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_recovery ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_6=Load BL31+U-Boot FIP via TFTP then write to eMMC.=run boot_tftp_write_fip ; run bootmenu_confirm_return ++bootmenu_7=Load BL2 preloader via TFTP then write to eMMC.=run boot_tftp_write_bl2 ; run bootmenu_confirm_return ++bootmenu_8=Reboot.=reset ++bootmenu_9=Reset all settings to factory defaults.=run reset_factory ; reset ++boot_first=if button reset ; then led $bootled_rec on ; run boot_tftp_recovery ; setenv flag_recover 1 ; run boot_default ; fi ; bootmenu ++boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_recovery ; setenv replacevol 1 ; run boot_tftp_forever ++boot_production=led $bootled_pwr on ; run emmc_read_production && bootm $loadaddr#$bootconf ; led $bootled_pwr off ++boot_recovery=led $bootled_rec on ; run emmc_read_recovery && bootm $loadaddr#$bootconf ; led $bootled_rec off ++boot_emmc=run boot_production ; run boot_recovery ++boot_tftp_forever=led $bootled_rec on ; while true ; do run boot_tftp_recovery ; sleep 1 ; done ++boot_tftp_production=tftpboot $loadaddr $bootfile_upg && env exists replacevol && iminfo $loadaddr && run emmc_write_production ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp_recovery=tftpboot $loadaddr $bootfile && env exists replacevol && iminfo $loadaddr && run emmc_write_recovery ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run emmc_write_fip ++boot_tftp_write_bl2=tftpboot $loadaddr $bootfile_bl2 && run emmc_write_bl2 ++boot_tftp=tftpboot $loadaddr $bootfile && bootm $loadaddr#$bootconf ++mmc_write_vol=imszb $loadaddr image_size && test 0x$image_size -le 0x$part_size && mmc erase 0x$part_addr 0x$image_size && mmc write $loadaddr 0x$part_addr 0x$image_size ++mmc_read_vol=mmc read $loadaddr $part_addr 0x100 && imszb $loadaddr image_size && test 0x$image_size -le 0x$part_size && mmc read $loadaddr 0x$part_addr 0x$image_size && setexpr filesize $image_size * 0x200 ++part_default=production ++part_recovery=recovery ++reset_factory=eraseenv && reset ++emmc_read_production=part start mmc 0 $part_default part_addr && part size mmc 0 $part_default part_size && run mmc_read_vol ++emmc_read_recovery=part start mmc 0 $part_recovery part_addr && part size mmc 0 $part_recovery part_size && run mmc_read_vol ++emmc_write_bl2=mmc partconf 0 1 1 1 && mmc erase 0x0 0x400 && mmc write $fileaddr 0x0 0x400 ; mmc partconf 0 1 1 0 ++emmc_write_fip=mmc erase 0x3400 0x2000 && mmc write $fileaddr 0x3400 0x2000 && mmc erase 0x2000 0x800 ++emmc_write_production=part start mmc 0 $part_default part_addr && part size mmc 0 $part_default part_size && run mmc_write_vol ++emmc_write_recovery=part start mmc 0 $part_recovery part_addr && part size mmc 0 $part_recovery part_size && run mmc_write_vol ++_init_env=setenv _init_env ; setenv _create_env ; saveenv ; saveenv ++_firstboot=setenv _firstboot ; run _switch_to_menu ; run _init_env ; run boot_first ++_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title ++_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" +--- /dev/null ++++ b/cmcc_rax3000m-nand_env +@@ -0,0 +1,56 @@ ++ipaddr=192.168.1.1 ++serverip=192.168.1.254 ++loadaddr=0x46000000 ++console=earlycon=uart8250,mmio32,0x11002000 console=ttyS0 ++bootconf=config-1#mt7981b-cmcc-rax3000m-nand ++bootcmd=if pstore check ; then run boot_recovery ; else run boot_ubi ; fi ++bootdelay=0 ++bootfile=openwrt-mediatek-filogic-cmcc_rax3000m-initramfs-recovery.itb ++bootfile_bl2=openwrt-mediatek-filogic-cmcc_rax3000m-nand-preloader.bin ++bootfile_fip=openwrt-mediatek-filogic-cmcc_rax3000m-nand-bl31-uboot.fip ++bootfile_upg=openwrt-mediatek-filogic-cmcc_rax3000m-squashfs-sysupgrade.itb ++bootled_pwr=red:status ++bootled_rec=blue:status ++bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60 ++bootmenu_default=0 ++bootmenu_delay=0 ++bootmenu_title= ( ( ( OpenWrt ) ) ) [SPI-NAND] ++bootmenu_0=Initialize environment.=run _firstboot ++bootmenu_0d=Run default boot command.=run boot_default ++bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return ++bootmenu_2=Boot production system from NAND.=run boot_production ; run bootmenu_confirm_return ++bootmenu_3=Boot recovery system from NAND.=run boot_recovery ; run bootmenu_confirm_return ++bootmenu_4=Load production system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_production ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_5=Load recovery system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_recovery ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_6=Load BL31+U-Boot FIP via TFTP then write to NAND.=run boot_tftp_write_fip ; run bootmenu_confirm_return ++bootmenu_7=Load BL2 preloader via TFTP then write to NAND.=run boot_tftp_write_bl2 ; run bootmenu_confirm_return ++bootmenu_8=Reboot.=reset ++bootmenu_9=Reset all settings to factory defaults.=run reset_factory ; reset ++boot_first=if button reset ; then led $bootled_rec on ; run boot_tftp_recovery ; setenv flag_recover 1 ; run boot_default ; fi ; bootmenu ++boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_recovery ; setenv replacevol 1 ; run boot_tftp_forever ++boot_production=led $bootled_pwr on ; run ubi_read_production && bootm $loadaddr#$bootconf ; led $bootled_pwr off ++boot_recovery=led $bootled_rec on ; run ubi_read_recovery && bootm $loadaddr#$bootconf ; led $bootled_rec off ++boot_ubi=run boot_production ; run boot_recovery ; run boot_tftp_forever ++boot_tftp_forever=led $bootled_rec on ; while true ; do run boot_tftp_recovery ; sleep 1 ; done ++boot_tftp_production=tftpboot $loadaddr $bootfile_upg && env exists replacevol && iminfo $loadaddr && run ubi_write_production ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp_recovery=tftpboot $loadaddr $bootfile && env exists replacevol && iminfo $loadaddr && run ubi_write_recovery ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp=tftpboot $loadaddr $bootfile && bootm $loadaddr#$bootconf ++boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run mtd_write_fip && run reset_factory ++boot_tftp_write_bl2=tftpboot $loadaddr $bootfile_bl2 && run mtd_write_bl2 ++part_default=production ++part_recovery=recovery ++reset_factory=ubi part ubi ; mw $loadaddr 0x0 0x800 ; ubi write $loadaddr ubootenv 0x800 ; ubi write $loadaddr ubootenv2 0x800 ++mtd_write_fip=mtd erase fip && mtd write fip $loadaddr ++mtd_write_bl2=mtd erase bl2 && mtd write bl2 $loadaddr ++ubi_create_env=ubi check ubootenv || ubi create ubootenv 0x100000 dynamic 0 || run ubi_format ; ubi check ubootenv2 || ubi create ubootenv2 0x100000 dynamic 1 || run ubi_format ++ubi_format=ubi detach ; mtd erase ubi && ubi part ubi ; reset ++ubi_prepare_rootfs=if ubi check rootfs_data ; then else if env exists rootfs_data_max ; then ubi create rootfs_data $rootfs_data_max dynamic || ubi create rootfs_data - dynamic ; else ubi create rootfs_data - dynamic ; fi ; fi ++ubi_read_production=ubi read $loadaddr fit && iminfo $loadaddr && run ubi_prepare_rootfs ++ubi_read_recovery=ubi check recovery && ubi read $loadaddr recovery ++ubi_remove_rootfs=ubi check rootfs_data && ubi remove rootfs_data ++ubi_write_production=ubi check fit && ubi remove fit ; run ubi_remove_rootfs ; ubi create fit $filesize dynamic 2 && ubi write $loadaddr fit $filesize ++ubi_write_recovery=ubi check recovery && ubi remove recovery ; run ubi_remove_rootfs ; ubi create recovery $filesize dynamic 3 && ubi write $loadaddr recovery $filesize ++_init_env=setenv _init_env ; run ubi_create_env ; saveenv ; saveenv ++_firstboot=setenv _firstboot ; run _switch_to_menu ; run _init_env ; run boot_first ++_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title ++_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" diff --git a/lede/package/boot/uboot-mediatek/patches/438-add-jcg_q30-pro.patch b/lede/package/boot/uboot-mediatek/patches/438-add-jcg_q30-pro.patch new file mode 100644 index 0000000000..639cae174e --- /dev/null +++ b/lede/package/boot/uboot-mediatek/patches/438-add-jcg_q30-pro.patch @@ -0,0 +1,420 @@ +--- /dev/null ++++ b/configs/mt7981_jcg_q30-pro_defconfig +@@ -0,0 +1,175 @@ ++CONFIG_ARM=y ++CONFIG_POSITION_INDEPENDENT=y ++CONFIG_ARCH_MEDIATEK=y ++CONFIG_TARGET_MT7981=y ++CONFIG_TEXT_BASE=0x41e00000 ++CONFIG_SYS_MALLOC_F_LEN=0x4000 ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_DEFAULT_DEVICE_TREE="mt7981_jcg_q30-pro" ++CONFIG_DEFAULT_ENV_FILE="jcg_q30-pro_env" ++CONFIG_DEFAULT_FDT_FILE="mediatek/mt7981_jcg_q30-pro.dtb" ++CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_DEBUG_UART_BASE=0x11002000 ++CONFIG_DEBUG_UART_CLOCK=40000000 ++CONFIG_DEBUG_UART=y ++CONFIG_SYS_LOAD_ADDR=0x46000000 ++CONFIG_SMBIOS_PRODUCT_NAME="" ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_CFB_CONSOLE_ANSI=y ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y ++CONFIG_GPIO_HOG=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_FIT=y ++CONFIG_FIT_ENABLE_SHA256_SUPPORT=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y ++CONFIG_LOGLEVEL=7 ++CONFIG_LOG=y ++CONFIG_SYS_PROMPT="MT7981> " ++CONFIG_CMD_BOOTMENU=y ++CONFIG_CMD_BOOTP=y ++CONFIG_CMD_BUTTON=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_CPU=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DM=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_ECHO=y ++CONFIG_CMD_ENV_READMEM=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_EXT4=y ++CONFIG_CMD_FAT=y ++CONFIG_CMD_FDT=y ++CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_GPT=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_ITEST=y ++CONFIG_CMD_LED=y ++CONFIG_CMD_LICENSE=y ++CONFIG_CMD_LINK_LOCAL=y ++# CONFIG_CMD_MBR is not set ++CONFIG_CMD_PCI=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_PING=y ++CONFIG_CMD_PXE=y ++CONFIG_CMD_PWM=y ++CONFIG_CMD_SMC=y ++CONFIG_CMD_TFTPBOOT=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_UBI=y ++CONFIG_CMD_UBI_RENAME=y ++CONFIG_CMD_UBIFS=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_PART=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_SETEXPR=y ++CONFIG_CMD_SLEEP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_SOURCE=y ++CONFIG_CMD_STRINGS=y ++CONFIG_CMD_UUID=y ++CONFIG_DISPLAY_CPUINFO=y ++CONFIG_DM_MTD=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_DM_PWM=y ++CONFIG_PWM_MTK=y ++CONFIG_HUSH_PARSER=y ++CONFIG_SYS_REDUNDAND_ENVIRONMENT=y ++CONFIG_SYS_RELOC_GD_ENV_ADDR=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_PARTITION_UUIDS=y ++CONFIG_NETCONSOLE=y ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_CLK=y ++CONFIG_DM_GPIO=y ++CONFIG_DM_SCSI=y ++CONFIG_AHCI=y ++CONFIG_AHCI_PCI=y ++CONFIG_SCSI_AHCI=y ++CONFIG_SCSI=y ++CONFIG_CMD_SCSI=y ++CONFIG_PHY=y ++CONFIG_PHY_MTK_TPHY=y ++CONFIG_PHY_FIXED=y ++CONFIG_MTK_AHCI=y ++CONFIG_DM_ETH=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PCI=y ++# CONFIG_MMC is not set ++# CONFIG_DM_MMC is not set ++CONFIG_MTD=y ++CONFIG_MTD_UBI_FASTMAP=y ++CONFIG_DM_PCI=y ++CONFIG_PCIE_MEDIATEK=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7622=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_PRE_CONSOLE_BUFFER=y ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_RAM=y ++CONFIG_DM_SERIAL=y ++CONFIG_MTK_SERIAL=y ++CONFIG_SPI=y ++CONFIG_DM_SPI=y ++CONFIG_MTK_SPI_NAND=y ++CONFIG_MTK_SPI_NAND_MTD=y ++CONFIG_SYSRESET_WATCHDOG=y ++CONFIG_WDT_MTK=y ++CONFIG_LZO=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y ++CONFIG_RANDOM_UUID=y ++CONFIG_REGEX=y ++CONFIG_OF_EMBED=y ++CONFIG_ENV_OVERWRITE=y ++CONFIG_ENV_IS_IN_UBI=y ++CONFIG_ENV_UBI_PART="ubi" ++CONFIG_ENV_SIZE=0x1f000 ++CONFIG_ENV_SIZE_REDUND=0x1f000 ++CONFIG_ENV_UBI_VOLUME="ubootenv" ++CONFIG_ENV_UBI_VOLUME_REDUND="ubootenv2" ++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_NET_RANDOM_ETHADDR=y ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_CLK=y ++CONFIG_PHY_FIXED=y ++CONFIG_DM_ETH=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7981=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_SERIAL=y ++CONFIG_MTK_SERIAL=y ++CONFIG_HEXDUMP=y ++CONFIG_USE_DEFAULT_ENV_FILE=y ++CONFIG_MTD_SPI_NAND=y ++CONFIG_MTK_SPIM=y ++CONFIG_CMD_MTD=y ++CONFIG_CMD_NAND=y ++CONFIG_CMD_NAND_TRIMFFS=y ++CONFIG_LMB_MAX_REGIONS=64 ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.254" +--- /dev/null ++++ b/arch/arm/dts/mt7981_jcg_q30-pro.dts +@@ -0,0 +1,179 @@ ++// SPDX-License-Identifier: GPL-2.0 ++/* ++ * Copyright (c) 2022 MediaTek Inc. ++ * Author: Sam Shih ++ */ ++ ++/dts-v1/; ++#include "mt7981.dtsi" ++#include ++#include ++ ++/ { ++ #address-cells = <1>; ++ #size-cells = <1>; ++ model = "JCG Q30 PRO"; ++ compatible = "mediatek,mt7981", "mediatek,mt7981-rfb"; ++ ++ chosen { ++ stdout-path = &uart0; ++ tick-timer = &timer0; ++ }; ++ ++ memory@40000000 { ++ device_type = "memory"; ++ reg = <0x40000000 0x10000000>; ++ }; ++ ++ keys { ++ compatible = "gpio-keys"; ++ ++ factory { ++ label = "reset"; ++ linux,code = ; ++ gpios = <&gpio 1 GPIO_ACTIVE_LOW>; ++ }; ++ }; ++ ++ leds { ++ compatible = "gpio-leds"; ++ ++ status_red { ++ label = "red:status"; ++ gpios = <&gpio 8 GPIO_ACTIVE_HIGH>; ++ }; ++ ++ status_blue { ++ label = "blue:status"; ++ gpios = <&gpio 13 GPIO_ACTIVE_LOW>; ++ }; ++ }; ++}; ++ ++&uart0 { ++ mediatek,force-highspeed; ++ status = "okay"; ++}; ++ ++&uart1 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&uart1_pins>; ++ status = "disabled"; ++}; ++ ++ð { ++ status = "okay"; ++ mediatek,gmac-id = <0>; ++ phy-mode = "2500base-x"; ++ mediatek,switch = "mt7531"; ++ reset-gpios = <&gpio 39 GPIO_ACTIVE_HIGH>; ++ ++ fixed-link { ++ speed = <2500>; ++ full-duplex; ++ }; ++}; ++ ++&pinctrl { ++ spi_flash_pins: spi0-pins-func-1 { ++ mux { ++ function = "flash"; ++ groups = "spi0", "spi0_wp_hold"; ++ }; ++ ++ conf-pu { ++ pins = "SPI0_CS", "SPI0_HOLD", "SPI0_WP"; ++ drive-strength = ; ++ bias-pull-up = ; ++ }; ++ ++ conf-pd { ++ pins = "SPI0_CLK", "SPI0_MOSI", "SPI0_MISO"; ++ drive-strength = ; ++ bias-pull-down = ; ++ }; ++ }; ++ ++ spic_pins: spi1-pins-func-1 { ++ mux { ++ function = "spi"; ++ groups = "spi1_1"; ++ }; ++ }; ++ ++ uart1_pins: spi1-pins-func-3 { ++ mux { ++ function = "uart"; ++ groups = "uart1_2"; ++ }; ++ }; ++ ++ pwm_pins: pwm0-pins-func-1 { ++ mux { ++ function = "pwm"; ++ groups = "pwm0_1", "pwm1_0"; ++ }; ++ }; ++}; ++ ++&pwm { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pwm_pins>; ++ status = "okay"; ++}; ++ ++&spi0 { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&spi_flash_pins>; ++ status = "okay"; ++ must_tx; ++ enhance_timing; ++ dma_ext; ++ ipm_design; ++ support_quad; ++ tick_dly = <2>; ++ sample_sel = <0>; ++ ++ spi_nand@0 { ++ compatible = "spi-nand"; ++ reg = <0>; ++ spi-max-frequency = <52000000>; ++ ++ partitions { ++ compatible = "fixed-partitions"; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ partition@0 { ++ label = "bl2"; ++ reg = <0x0 0x100000>; ++ }; ++ ++ partition@100000 { ++ label = "orig-env"; ++ reg = <0x100000 0x80000>; ++ }; ++ ++ partition@160000 { ++ label = "factory"; ++ reg = <0x180000 0x200000>; ++ }; ++ ++ partition@380000 { ++ label = "fip"; ++ reg = <0x380000 0x200000>; ++ }; ++ ++ partition@580000 { ++ label = "ubi"; ++ reg = <0x580000 0x7000000>; ++ }; ++ }; ++ }; ++}; ++ ++&watchdog { ++ status = "disabled"; ++}; +--- /dev/null ++++ b/jcg_q30-pro_env +@@ -0,0 +1,57 @@ ++ipaddr=192.168.1.1 ++serverip=192.168.1.254 ++loadaddr=0x46000000 ++console=earlycon=uart8250,mmio32,0x11002000 console=ttyS0 ++bootcmd=if pstore check ; then run boot_recovery ; else run boot_ubi ; fi ++bootconf=config-1 ++bootdelay=0 ++bootfile=openwrt-mediatek-filogic-jcg_q30-pro-initramfs-recovery.itb ++bootfile_bl2=openwrt-mediatek-filogic-jcg_q30-pro-preloader.bin ++bootfile_fip=openwrt-mediatek-filogic-jcg_q30-pro-bl31-uboot.fip ++bootfile_upg=openwrt-mediatek-filogic-jcg_q30-pro-squashfs-sysupgrade.itb ++bootled_pwr=blue:status ++bootled_rec=red:status ++bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60 ++bootmenu_default=0 ++bootmenu_delay=0 ++bootmenu_title= ( ( ( OpenWrt ) ) ) ++bootmenu_0=Initialize environment.=run _firstboot ++bootmenu_0d=Run default boot command.=run boot_default ++bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return ++bootmenu_2=Boot production system from NAND.=run boot_production ; run bootmenu_confirm_return ++bootmenu_3=Boot recovery system from NAND.=run boot_recovery ; run bootmenu_confirm_return ++bootmenu_4=Load production system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_production ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_5=Load recovery system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_recovery ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_6=Load BL31+U-Boot FIP via TFTP then write to NAND.=run boot_tftp_write_fip ; run bootmenu_confirm_return ++bootmenu_7=Load BL2 preloader via TFTP then write to NAND.=run boot_tftp_write_bl2 ; run bootmenu_confirm_return ++bootmenu_8=Reboot.=reset ++bootmenu_9=Reset all settings to factory defaults.=run reset_factory ; reset ++boot_first=if button reset ; then led $bootled_rec on ; run boot_tftp_recovery ; setenv flag_recover 1 ; run boot_default ; fi ; bootmenu ++boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_recovery ; setenv replacevol 1 ; run boot_tftp_forever ++boot_production=led $bootled_pwr on ; run ubi_read_production && bootm $loadaddr#$bootconf ; led $bootled_pwr off ++boot_recovery=led $bootled_rec on ; run ubi_read_recovery && bootm $loadaddr#$bootconf ; led $bootled_rec off ++boot_ubi=run boot_production ; run boot_recovery ; run boot_tftp_forever ++boot_tftp_forever=led $bootled_rec on ; while true ; do run boot_tftp_recovery ; sleep 1 ; done ++boot_tftp_production=tftpboot $loadaddr $bootfile_upg && env exists replacevol && iminfo $loadaddr && run ubi_write_production ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp_recovery=tftpboot $loadaddr $bootfile && env exists replacevol && iminfo $loadaddr && run ubi_write_recovery ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp=tftpboot $loadaddr $bootfile && bootm $loadaddr#$bootconf ++boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run mtd_write_fip && run reset_factory ++boot_tftp_write_bl2=tftpboot $loadaddr $bootfile_bl2 && run mtd_write_bl2 ++part_default=production ++part_recovery=recovery ++reset_factory=ubi part ubi ; mw $loadaddr 0x0 0x800 ; ubi write $loadaddr ubootenv 0x800 ; ubi write $loadaddr ubootenv2 0x800 ++mtd_write_fip=mtd erase fip && mtd write fip $loadaddr ++mtd_write_bl2=mtd erase bl2 && mtd write bl2 $loadaddr ++ubi_create_env=ubi check ubootenv || ubi create ubootenv 0x100000 dynamic 0 || run ubi_format ; ubi check ubootenv2 || ubi create ubootenv2 0x100000 dynamic 1 || run ubi_format ++ubi_format=ubi detach ; mtd erase ubi && ubi part ubi ; reset ++ubi_prepare_rootfs=if ubi check rootfs_data ; then else if env exists rootfs_data_max ; then ubi create rootfs_data $rootfs_data_max dynamic || ubi create rootfs_data - dynamic ; else ubi create rootfs_data - dynamic ; fi ; fi ++ubi_read_production=ubi read $loadaddr fit && iminfo $loadaddr && run ubi_prepare_rootfs ++ubi_read_recovery=ubi check recovery && ubi read $loadaddr recovery ++ubi_remove_rootfs=ubi check rootfs_data && ubi remove rootfs_data ++ubi_write_production=ubi check fit && ubi remove fit ; run ubi_remove_rootfs ; ubi create fit $filesize dynamic 2 && ubi write $loadaddr fit $filesize ++ubi_write_recovery=ubi check recovery && ubi remove recovery ; run ubi_remove_rootfs ; ubi create recovery $filesize dynamic 3 && ubi write $loadaddr recovery $filesize ++ethaddr_factory=mtd read factory 0x40080000 0xa0000 0x800 && env readmem -b ethaddr 0x4008002a 0x6 ; setenv ethaddr_factory ++_init_env=setenv _init_env ; run ubi_create_env ; saveenv ; saveenv ++_firstboot=setenv _firstboot ; run ethaddr_factory ; run _switch_to_menu ; run _init_env ; run boot_first ++_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title ++_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" diff --git a/lede/package/boot/uboot-mediatek/patches/439-add-zyxel_ex5601-t0.patch b/lede/package/boot/uboot-mediatek/patches/439-add-zyxel_ex5601-t0.patch new file mode 100644 index 0000000000..7f0564fd49 --- /dev/null +++ b/lede/package/boot/uboot-mediatek/patches/439-add-zyxel_ex5601-t0.patch @@ -0,0 +1,431 @@ +--- /dev/null ++++ b/configs/mt7986_zyxel_ex5601-t0_defconfig +@@ -0,0 +1,186 @@ ++CONFIG_ARM=y ++CONFIG_POSITION_INDEPENDENT=y ++CONFIG_ARCH_MEDIATEK=y ++CONFIG_TARGET_MT7986=y ++CONFIG_TEXT_BASE=0x41e00000 ++CONFIG_SYS_MALLOC_F_LEN=0x4000 ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_DEFAULT_DEVICE_TREE="mt7986a-zyxel_ex5601-t0" ++CONFIG_DEFAULT_ENV_FILE="zyxel_ex5601-t0_env" ++CONFIG_DEFAULT_FDT_FILE="mediatek/mt7986a-zyxel_ex5601-t0.dtb" ++CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_DEBUG_UART_BASE=0x11002000 ++CONFIG_DEBUG_UART_CLOCK=40000000 ++CONFIG_DEBUG_UART=y ++CONFIG_SYS_LOAD_ADDR=0x46000000 ++CONFIG_SMBIOS_PRODUCT_NAME="" ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_CFB_CONSOLE_ANSI=y ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y ++CONFIG_GPIO_HOG=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_FIT=y ++CONFIG_FIT_ENABLE_SHA256_SUPPORT=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y ++CONFIG_LOGLEVEL=7 ++CONFIG_LOG=y ++CONFIG_SYS_PROMPT="EX5601> " ++CONFIG_CMD_BOOTMENU=y ++CONFIG_CMD_BOOTP=y ++CONFIG_CMD_BUTTON=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_CPU=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DM=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_ECHO=y ++CONFIG_CMD_ENV_READMEM=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_EXT4=y ++CONFIG_CMD_FAT=y ++CONFIG_CMD_FDT=y ++CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_GPT=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_ITEST=y ++CONFIG_CMD_LED=y ++CONFIG_CMD_LICENSE=y ++CONFIG_CMD_LINK_LOCAL=y ++# CONFIG_CMD_MBR is not set ++CONFIG_CMD_MTD=y ++CONFIG_CMD_PCI=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_PING=y ++CONFIG_CMD_PXE=y ++CONFIG_CMD_PWM=y ++CONFIG_CMD_SMC=y ++CONFIG_CMD_TFTPBOOT=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_UBI=y ++CONFIG_CMD_UBI_RENAME=y ++CONFIG_CMD_UBIFS=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_PART=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_SETEXPR=y ++CONFIG_CMD_SLEEP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_SOURCE=y ++CONFIG_CMD_STRINGS=y ++CONFIG_CMD_USB=y ++# CONFIG_CMD_FLASH is not set ++CONFIG_CMD_UUID=y ++CONFIG_DISPLAY_CPUINFO=y ++CONFIG_DM_MTD=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_DM_USB=y ++CONFIG_DM_PWM=y ++CONFIG_PWM_MTK=y ++CONFIG_HUSH_PARSER=y ++CONFIG_SYS_REDUNDAND_ENVIRONMENT=y ++CONFIG_SYS_RELOC_GD_ENV_ADDR=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_PARTITION_UUIDS=y ++CONFIG_NETCONSOLE=y ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_CLK=y ++CONFIG_DM_GPIO=y ++CONFIG_DM_SCSI=y ++CONFIG_AHCI=y ++CONFIG_AHCI_PCI=y ++CONFIG_SCSI_AHCI=y ++CONFIG_SCSI=y ++CONFIG_CMD_SCSI=y ++CONFIG_PHY=y ++CONFIG_PHY_MTK_TPHY=y ++CONFIG_PHY_FIXED=y ++CONFIG_MTK_AHCI=y ++CONFIG_DM_ETH=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PCI=y ++CONFIG_DM_PCI=y ++CONFIG_PCIE_MEDIATEK=y ++# CONFIG_MMC is not set ++# CONFIG_DM_MMC is not set ++CONFIG_MTD=y ++CONFIG_MTD_UBI_FASTMAP=y ++# CONFIG_DM_PCI is not set ++# CONFIG_PCIE_MEDIATEK is not set ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7622=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_PRE_CONSOLE_BUFFER=y ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_RAM=y ++CONFIG_DM_SERIAL=y ++CONFIG_MTK_SERIAL=y ++CONFIG_SPI=y ++# CONFIG_I2C is not set ++CONFIG_DM_SPI=y ++CONFIG_MTK_SPI_NAND=y ++CONFIG_MTK_SPI_NAND_MTD=y ++CONFIG_SYSRESET_WATCHDOG=y ++CONFIG_WDT_MTK=y ++CONFIG_LZO=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y ++CONFIG_RANDOM_UUID=y ++CONFIG_REGEX=y ++CONFIG_USB=y ++CONFIG_USB_HOST=y ++CONFIG_USB_XHCI_HCD=y ++CONFIG_USB_XHCI_MTK=y ++CONFIG_USB_STORAGE=y ++CONFIG_OF_EMBED=y ++CONFIG_ENV_OVERWRITE=y ++CONFIG_ENV_IS_IN_UBI=y ++CONFIG_ENV_UBI_PART="ubi" ++CONFIG_ENV_SIZE=0x1f000 ++CONFIG_ENV_SIZE_REDUND=0x1f000 ++CONFIG_ENV_UBI_VOLUME="ubootenv" ++CONFIG_ENV_UBI_VOLUME_REDUND="ubootenv2" ++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_NET_RANDOM_ETHADDR=y ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_CLK=y ++CONFIG_PHY_FIXED=y ++CONFIG_DM_ETH=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7986=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_SERIAL=y ++CONFIG_MTK_SERIAL=y ++CONFIG_HEXDUMP=y ++CONFIG_USE_DEFAULT_ENV_FILE=y ++CONFIG_MTD_SPI_NAND=y ++CONFIG_MTK_SPIM=y ++CONFIG_CMD_NAND=y ++CONFIG_CMD_NAND_TRIMFFS=y ++CONFIG_LMB_MAX_REGIONS=64 ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.254" +--- /dev/null ++++ b/arch/arm/dts/mt7986a-zyxel_ex5601-t0.dts +@@ -0,0 +1,181 @@ ++// SPDX-License-Identifier: GPL-2.0 ++/* ++ * Author: Valerio 'ftp21' Mancini ++ * Author: Nicolò Veronese ++ */ ++ ++/dts-v1/; ++#include ++#include "mt7986.dtsi" ++#include ++ ++/ { ++ #address-cells = <1>; ++ #size-cells = <1>; ++ model = "Zyxel EX5601-T0 ubootmod"; ++ compatible = "mediatek,mt7986", "mediatek,mt7986-sd-rfb"; ++ ++ chosen { ++ stdout-path = &uart0; ++ tick-timer = &timer0; ++ }; ++ ++ memory@40000000 { ++ device_type = "memory"; ++ reg = <0x40000000 0x20000000>; ++ }; ++ ++ keys { ++ compatible = "gpio-keys"; ++ factory { ++ label = "reset"; ++ gpios = <&gpio 21 GPIO_ACTIVE_LOW>; ++ linux,code = ; ++ }; ++ ++ wps { ++ label = "wps"; ++ gpios = <&gpio 56 GPIO_ACTIVE_LOW>; ++ linux,code = ; ++ }; ++ }; ++ ++ leds { ++ compatible = "gpio-leds"; ++ ++ led_status_green: pwr { ++ label = "green:status"; ++ gpios = <&gpio 13 GPIO_ACTIVE_HIGH>; ++ default-state = "off"; ++ }; ++ ++ led_sfp_green: sfp { ++ label = "green:sfp"; ++ gpios = <&gpio 24 GPIO_ACTIVE_HIGH>; ++ default-state = "off"; ++ }; ++ }; ++}; ++ ++&uart0 { ++ mediatek,force-highspeed; ++ status = "okay"; ++}; ++ ++&uart1 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&uart1_pins>; ++ status = "disabled"; ++}; ++ ++ð { ++ status = "okay"; ++ mediatek,gmac-id = <0>; ++ phy-mode = "2500base-x"; ++ mediatek,switch = "mt7531"; ++ reset-gpios = <&gpio 5 GPIO_ACTIVE_HIGH>; ++ ++ fixed-link { ++ speed = <2500>; ++ full-duplex; ++ }; ++}; ++ ++&pinctrl { ++ spic_pins: spi1-pins-func-1 { ++ mux { ++ function = "spi"; ++ groups = "spi1_2"; ++ }; ++ }; ++ ++ uart1_pins: spi1-pins-func-3 { ++ mux { ++ function = "uart"; ++ groups = "uart1_2"; ++ }; ++ }; ++ ++ spi_flash_pins: spi0-pins-func-1 { ++ mux { ++ function = "flash"; ++ groups = "spi0", "spi0_wp_hold"; ++ }; ++ ++ conf-pu { ++ pins = "SPI2_CS", "SPI2_HOLD", "SPI2_WP"; ++ drive-strength = ; ++ bias-pull-up = ; ++ }; ++ ++ conf-pd { ++ pins = "SPI2_CLK", "SPI2_MOSI", "SPI2_MISO"; ++ drive-strength = ; ++ bias-pull-down = ; ++ }; ++ }; ++}; ++ ++&spi0 { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&spi_flash_pins>; ++ status = "okay"; ++ must_tx; ++ enhance_timing; ++ dma_ext; ++ ipm_design; ++ support_quad; ++ tick_dly = <1>; ++ sample_sel = <0>; ++ ++ spi_nand@0 { ++ compatible = "spi-nand"; ++ reg = <0>; ++ spi-max-frequency = <20000000>; ++ spi-tx-buswidth = <4>; ++ spi-rx-buswidth = <4>; ++ ++ partitions { ++ compatible = "fixed-partitions"; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ partition@0 { ++ label = "bl2"; ++ reg = <0x0 0x100000>; ++ }; ++ ++ partition@100000 { ++ label = "u-boot-env"; ++ reg = <0x0100000 0x0080000>; ++ }; ++ ++ partition@180000 { ++ label = "Factory"; ++ reg = <0x180000 0x0200000>; ++ }; ++ ++ partition@380000 { ++ label = "fip"; ++ reg = <0x380000 0x0200000>; ++ }; ++ ++ partition@540000 { ++ label = "zloader"; ++ reg = <0x540000 0x0040000>; ++ read-only; ++ }; ++ partition@580000 { ++ label = "ubi"; ++ reg = <0x580000 0x1da80000>; ++ }; ++ }; ++ }; ++}; ++ ++&watchdog { ++ status = "disabled"; ++}; ++ +--- /dev/null ++++ b/zyxel_ex5601-t0_env +@@ -0,0 +1,55 @@ ++ethaddr_factory=mtd read Factory 0x40080000 0x0 0x20000 && env readmem -b ethaddr 0x4008002A 0x6 ; setenv ethaddr_factory ++ipaddr=192.168.1.1 ++serverip=192.168.1.254 ++loadaddr=0x46000000 ++console=earlycon=uart8250,mmio32,0x11002000 console=ttyS0 ++bootargs=console=ttyS0,115200n8 console_msg_format=syslog ++bootcmd=if pstore check ; then run boot_recovery ; else run boot_ubi ; fi ++bootconf=config-1 ++bootdelay=0 ++bootfile=openwrt-mediatek-filogic-zyxel_ex5601-t0-ubootmod-initramfs-recovery.itb ++bootfile_bl2=openwrt-mediatek-filogic-zyxel_ex5601-t0-ubootmod-preloader.bin ++bootfile_fip=openwrt-mediatek-filogic-zyxel_ex5601-t0-ubootmod-bl31-uboot.fip ++bootfile_upg=openwrt-mediatek-filogic-zyxel_ex5601-t0-ubootmod-squashfs-sysupgrade.itb ++bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60 ++bootmenu_default=0 ++bootmenu_delay=0 ++bootmenu_title= ( ( ( OpenWrt ) ) ) ++bootmenu_0=Initialize environment.=run _firstboot ++bootmenu_0d=Run default boot command.=run boot_default ++bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return ++bootmenu_2=Boot production system from NAND.=run boot_production ; run bootmenu_confirm_return ++bootmenu_3=Boot recovery system from NAND.=run boot_recovery ; run bootmenu_confirm_return ++bootmenu_4=Load production system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_production ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_5=Load recovery system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_recovery ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_6=Load BL31+U-Boot FIP via TFTP then write to NAND.=run boot_tftp_write_fip ; run bootmenu_confirm_return ++bootmenu_7=Load BL2 preloader via TFTP then write to NAND.=run boot_tftp_write_bl2 ; run bootmenu_confirm_return ++bootmenu_8=Reboot.=reset ++bootmenu_9=Reset all settings to factory defaults.=run reset_factory ; reset ++boot_first=if button reset ; then run boot_tftp_recovery ; setenv flag_recover 1 ; run boot_default ; fi ; bootmenu ++boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_recovery ; setenv replacevol 1 ; run boot_tftp_forever ++boot_production=run ubi_read_production && bootm $loadaddr#$bootconf ++boot_recovery=run ubi_read_recovery && bootm $loadaddr#$bootconf ++boot_ubi=run boot_production ; run boot_recovery ; run boot_tftp_forever ++boot_tftp_forever=while true ; do run boot_tftp_recovery ; sleep 1 ; done ++boot_tftp_recovery=tftpboot $loadaddr $bootfile && env exists replacevol && iminfo $loadaddr && run ubi_write_recovery ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp_production=tftpboot $loadaddr $bootfile_upg && env exists replacevol && iminfo $loadaddr && run ubi_write_production ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp=tftpboot $loadaddr $bootfile && bootm $loadaddr#$bootconf ++boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run mtd_write_fip && run reset_factory ++boot_tftp_write_bl2=tftpboot $loadaddr $bootfile_bl2 && run mtd_write_bl2 ++part_fit=fit ++reset_factory=ubi part ubi ; mw $loadaddr 0x0 0x800 ; ubi write $loadaddr ubootenv 0x800 ; ubi write $loadaddr ubootenv2 0x800 ++mtd_write_fip=mtd erase fip && mtd write fip $loadaddr ++mtd_write_bl2=mtd erase bl2 && mtd write bl2 $loadaddr ++ubi_create_env=ubi check ubootenv || ubi create ubootenv 0x100000 dynamic 0 ; ubi check ubootenv2 || ubi create ubootenv2 0x100000 dynamic 1 ++ubi_format=ubi detach ; mtd erase ubi && ubi part ubi ; reset ++ubi_prepare_rootfs=if ubi check rootfs_data ; then else if env exists rootfs_data_max ; then ubi create rootfs_data $rootfs_data_max dynamic || ubi create rootfs_data - dynamic ; else ubi create rootfs_data - dynamic ; fi ; fi ++ubi_read_production=ubi read $loadaddr $part_fit && iminfo $loadaddr && run ubi_prepare_rootfs ++ubi_read_recovery=ubi check recovery && ubi read $loadaddr recovery ++ubi_remove_rootfs=ubi check rootfs_data && ubi remove rootfs_data ++ubi_write_production=ubi check fit && ubi remove fit ; run ubi_remove_rootfs ; ubi create fit $filesize dynamic && ubi write $loadaddr fit $filesize ++ubi_write_recovery=ubi check recovery && ubi remove recovery ; run ubi_remove_rootfs ; ubi create recovery $filesize dynamic && ubi write $loadaddr recovery $filesize ++_init_env=setenv _init_env ; run ubi_create_env ; saveenv ; saveenv ++_firstboot=setenv _firstboot ; run ethaddr_factory ; run _switch_to_menu ; run _init_env ; run boot_first ++_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title ++_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" diff --git a/lede/package/boot/uboot-mediatek/patches/440-add-xiaomi_mi-router-ax3000t.patch b/lede/package/boot/uboot-mediatek/patches/440-add-xiaomi_mi-router-ax3000t.patch new file mode 100644 index 0000000000..9b50166a94 --- /dev/null +++ b/lede/package/boot/uboot-mediatek/patches/440-add-xiaomi_mi-router-ax3000t.patch @@ -0,0 +1,414 @@ +--- /dev/null ++++ b/configs/mt7981_xiaomi_mi-router-ax3000t_defconfig +@@ -0,0 +1,163 @@ ++CONFIG_ARM=y ++CONFIG_POSITION_INDEPENDENT=y ++CONFIG_ARCH_MEDIATEK=y ++CONFIG_TARGET_MT7981=y ++CONFIG_TEXT_BASE=0x41e00000 ++CONFIG_SYS_MALLOC_F_LEN=0x4000 ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_DEFAULT_DEVICE_TREE="mt7981_xiaomi_mi-router-ax3000t" ++CONFIG_DEFAULT_ENV_FILE="xiaomi_mi-router-ax3000t_env" ++CONFIG_DEFAULT_FDT_FILE="mediatek/mt7981_xiaomi_mi-router-ax3000t.dtb" ++CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_DEBUG_UART_BASE=0x11002000 ++CONFIG_DEBUG_UART_CLOCK=40000000 ++CONFIG_DEBUG_UART=y ++CONFIG_SYS_LOAD_ADDR=0x46000000 ++CONFIG_SMBIOS_PRODUCT_NAME="" ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_CFB_CONSOLE_ANSI=y ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y ++CONFIG_GPIO_HOG=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_FIT=y ++CONFIG_FIT_ENABLE_SHA256_SUPPORT=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y ++CONFIG_LOGLEVEL=7 ++CONFIG_LOG=y ++CONFIG_SYS_PROMPT="MT7981> " ++CONFIG_CMD_BOOTMENU=y ++CONFIG_CMD_BOOTP=y ++CONFIG_CMD_BUTTON=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_CPU=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DM=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_ECHO=y ++CONFIG_CMD_ENV_READMEM=y ++CONFIG_CMD_ERASEENV=y ++# CONFIG_CMD_EXT4 is not set ++# CONFIG_CMD_FAT is not set ++CONFIG_CMD_FDT=y ++# CONFIG_CMD_FS_GENERIC is not set ++# CONFIG_CMD_FS_UUID is not set ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_GPT=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_ITEST=y ++CONFIG_CMD_LED=y ++CONFIG_CMD_LICENSE=y ++CONFIG_CMD_LINK_LOCAL=y ++# CONFIG_CMD_MBR is not set ++CONFIG_CMD_MTD=y ++# CONFIG_CMD_PCI is not set ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_PING=y ++CONFIG_CMD_PXE=y ++# CONFIG_CMD_PWM is not set ++CONFIG_CMD_SMC=y ++CONFIG_CMD_TFTPBOOT=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_UBI=y ++CONFIG_CMD_UBI_RENAME=y ++CONFIG_CMD_UBIFS=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_PART=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_SETEXPR=y ++CONFIG_CMD_SLEEP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_SOURCE=y ++CONFIG_CMD_STRINGS=y ++# CONFIG_CMD_USB is not set ++# CONFIG_CMD_FLASH is not set ++CONFIG_CMD_UUID=y ++CONFIG_DISPLAY_CPUINFO=y ++CONFIG_DM_MTD=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++# CONFIG_DM_USB is not set ++# CONFIG_DM_PWM is not set ++# CONFIG_PWM_MTK is not set ++CONFIG_HUSH_PARSER=y ++CONFIG_SYS_REDUNDAND_ENVIRONMENT=y ++CONFIG_SYS_RELOC_GD_ENV_ADDR=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_PARTITION_UUIDS=y ++CONFIG_NETCONSOLE=y ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_CLK=y ++CONFIG_DM_GPIO=y ++# CONFIG_DM_SCSI is not set ++# CONFIG_AHCI is not set ++CONFIG_PHY=y ++# CONFIG_PHY_MTK_TPHY is not set ++CONFIG_PHY_FIXED=y ++CONFIG_MTK_AHCI=y ++CONFIG_DM_ETH=y ++CONFIG_MEDIATEK_ETH=y ++# CONFIG_PCI is not set ++# CONFIG_MMC is not set ++# CONFIG_DM_MMC is not set ++CONFIG_MTD=y ++CONFIG_MTD_UBI_FASTMAP=y ++# CONFIG_DM_PCI is not set ++# CONFIG_PCIE_MEDIATEK is not set ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7981=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_PRE_CONSOLE_BUFFER=y ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_RAM=y ++CONFIG_DM_SERIAL=y ++CONFIG_MTK_SERIAL=y ++CONFIG_SPI=y ++CONFIG_DM_SPI=y ++CONFIG_MTK_SPI_NAND=y ++CONFIG_MTK_SPI_NAND_MTD=y ++CONFIG_SYSRESET_WATCHDOG=y ++CONFIG_WDT_MTK=y ++CONFIG_LZO=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y ++CONFIG_RANDOM_UUID=y ++CONFIG_REGEX=y ++# CONFIG_USB is not set ++# CONFIG_USB_HOST is not set ++# CONFIG_USB_XHCI_HCD is not set ++# CONFIG_USB_XHCI_MTK is not set ++# CONFIG_USB_STORAGE is not set ++CONFIG_OF_EMBED=y ++CONFIG_ENV_OVERWRITE=y ++CONFIG_ENV_IS_IN_UBI=y ++CONFIG_ENV_UBI_PART="ubi" ++CONFIG_ENV_SIZE=0x1f000 ++CONFIG_ENV_SIZE_REDUND=0x1f000 ++CONFIG_ENV_UBI_VOLUME="ubootenv" ++CONFIG_ENV_UBI_VOLUME_REDUND="ubootenv2" ++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_NET_RANDOM_ETHADDR=y ++CONFIG_USE_DEFAULT_ENV_FILE=y ++CONFIG_MTD_SPI_NAND=y ++CONFIG_MTK_SPIM=y ++CONFIG_CMD_NAND=y ++CONFIG_CMD_NAND_TRIMFFS=y ++CONFIG_LMB_MAX_REGIONS=64 ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.254" +--- /dev/null ++++ b/arch/arm/dts/mt7981_xiaomi_mi-router-ax3000t.dts +@@ -0,0 +1,187 @@ ++// SPDX-License-Identifier: GPL-2.0 ++/* ++ * Copyright (c) 2022 MediaTek Inc. ++ * Author: Sam Shih ++ */ ++ ++/dts-v1/; ++#include "mt7981.dtsi" ++#include ++#include ++ ++/ { ++ #address-cells = <1>; ++ #size-cells = <1>; ++ model = "Xiaomi Router AX3000T"; ++ compatible = "mediatek,mt7981", "mediatek,mt7981-rfb"; ++ ++ chosen { ++ stdout-path = &uart0; ++ tick-timer = &timer0; ++ }; ++ ++ memory@40000000 { ++ device_type = "memory"; ++ reg = <0x40000000 0x10000000>; ++ }; ++ ++ gpio-keys { ++ compatible = "gpio-keys"; ++ ++ reset { ++ label = "reset"; ++ gpios = <&gpio 1 GPIO_ACTIVE_LOW>; ++ linux,code = ; ++ }; ++ ++ mesh { ++ label = "mesh"; ++ gpios = <&gpio 0 GPIO_ACTIVE_LOW>; ++ linux,code = ; ++ linux,input-type = ; ++ }; ++ }; ++ ++ leds { ++ compatible = "gpio-leds"; ++ ++ led_status_blue { ++ label = "blue:status"; ++ gpios = <&gpio 9 GPIO_ACTIVE_LOW>; ++ }; ++ ++ led_status_yellow { ++ label = "yellow:status"; ++ gpios = <&gpio 10 GPIO_ACTIVE_LOW>; ++ }; ++ }; ++}; ++ ++&uart0 { ++ mediatek,force-highspeed; ++ status = "okay"; ++}; ++ ++ð { ++ status = "okay"; ++ mediatek,gmac-id = <0>; ++ phy-mode = "2500base-x"; ++ mediatek,switch = "mt7531"; ++ reset-gpios = <&gpio 39 GPIO_ACTIVE_HIGH>; ++ ++ fixed-link { ++ speed = <2500>; ++ full-duplex; ++ }; ++}; ++ ++&pinctrl { ++ spic_pins: spi1-pins-func-1 { ++ mux { ++ function = "spi"; ++ groups = "spi1_1"; ++ }; ++ }; ++ ++ uart1_pins: spi1-pins-func-3 { ++ mux { ++ function = "uart"; ++ groups = "uart1_2"; ++ }; ++ }; ++ ++ spi_flash_pins: spi0-pins-func-1 { ++ mux { ++ function = "flash"; ++ groups = "spi0", "spi0_wp_hold"; ++ }; ++ ++ conf-pu { ++ pins = "SPI0_CS", "SPI0_HOLD", "SPI0_WP"; ++ drive-strength = ; ++ bias-pull-up = ; ++ }; ++ ++ conf-pd { ++ pins = "SPI0_CLK", "SPI0_MOSI", "SPI0_MISO"; ++ drive-strength = ; ++ bias-pull-down = ; ++ }; ++ }; ++}; ++ ++&spi0 { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&spi_flash_pins>; ++ status = "okay"; ++ must_tx; ++ enhance_timing; ++ dma_ext; ++ ipm_design; ++ support_quad; ++ tick_dly = <2>; ++ sample_sel = <0>; ++ ++ spi_nand@0 { ++ compatible = "spi-nand"; ++ reg = <0>; ++ spi-max-frequency = <52000000>; ++ ++ partitions { ++ compatible = "fixed-partitions"; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ partition@0 { ++ label = "bl2"; ++ reg = <0x00 0x100000>; ++ }; ++ ++ partition@100000 { ++ label = "Nvram"; ++ reg = <0x100000 0x40000>; ++ }; ++ ++ partition@140000 { ++ label = "Bdata"; ++ reg = <0x140000 0x40000>; ++ }; ++ ++ partition@180000 { ++ label = "factory"; ++ reg = <0x180000 0x200000>; ++ }; ++ ++ partition@380000 { ++ label = "fip"; ++ reg = <0x380000 0x200000>; ++ }; ++ ++ partition@580000 { ++ label = "crash"; ++ reg = <0x580000 0x40000>; ++ }; ++ ++ partition@5c0000 { ++ label = "crash_log"; ++ reg = <0x5c0000 0x40000>; ++ }; ++ ++ partition@600000 { ++ label = "ubi"; ++ reg = <0x600000 0x7000000>; ++ }; ++ ++ partition@7600000 { ++ label = "KF"; ++ reg = <0x7600000 0x40000>; ++ }; ++ }; ++ }; ++}; ++ ++&watchdog { ++ status = "disabled"; ++}; +--- /dev/null ++++ b/xiaomi_mi-router-ax3000t_env +@@ -0,0 +1,55 @@ ++ipaddr=192.168.1.1 ++serverip=192.168.1.254 ++loadaddr=0x46000000 ++console=earlycon=uart8250,mmio32,0x11002000 console=ttyS0 ++bootargs=console=ttyS0,115200n8 console_msg_format=syslog ++bootcmd=if pstore check ; then run boot_recovery ; else run boot_ubi ; fi ++bootconf=config-1 ++bootdelay=0 ++bootfile=openwrt-mediatek-filogic-xiaomi_mi-router-ax3000t-ubootmod-initramfs-recovery.itb ++bootfile_bl2=openwrt-mediatek-filogic-xiaomi_mi-router-ax3000t-ubootmod-preloader.bin ++bootfile_fip=openwrt-mediatek-filogic-xiaomi_mi-router-ax3000t-ubootmod-bl31-uboot.fip ++bootfile_upg=openwrt-mediatek-filogic-xiaomi_mi-router-ax3000t-ubootmod-squashfs-sysupgrade.itb ++bootled_pwr=yellow:status ++bootled_rec=blue:status ++bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60 ++bootmenu_default=0 ++bootmenu_delay=0 ++bootmenu_title= ( ( ( OpenWrt ) ) ) ++bootmenu_0=Initialize environment.=run _firstboot ++bootmenu_0d=Run default boot command.=run boot_default ++bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return ++bootmenu_2=Boot production system from NAND.=run boot_production ; run bootmenu_confirm_return ++bootmenu_3=Boot recovery system from NAND.=run boot_recovery ; run bootmenu_confirm_return ++bootmenu_4=Load production system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_production ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_5=Load recovery system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_recovery ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_6=Load BL31+U-Boot FIP via TFTP then write to NAND.=run boot_tftp_write_fip ; run bootmenu_confirm_return ++bootmenu_7=Load BL2 preloader via TFTP then write to NAND.=run boot_tftp_write_bl2 ; run bootmenu_confirm_return ++bootmenu_8=Reboot.=reset ++bootmenu_9=Reset all settings to factory defaults.=run reset_factory ; reset ++boot_first=if button reset ; then led $bootled_rec on ; run boot_tftp_recovery ; setenv flag_recover 1 ; run boot_default ; fi ; bootmenu ++boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_recovery ; setenv replacevol 1 ; run boot_tftp_forever ++boot_production=led $bootled_pwr on ; run ubi_read_production && bootm $loadaddr#$bootconf ; led $bootled_pwr off ++boot_recovery=led $bootled_rec on ; run ubi_read_recovery && bootm $loadaddr#$bootconf ; led $bootled_rec off ++boot_ubi=run boot_production ; run boot_recovery ; run boot_tftp_forever ++boot_tftp_forever=led $bootled_rec on ; while true ; do run boot_tftp_recovery ; sleep 1 ; done ++boot_tftp_recovery=tftpboot $loadaddr $bootfile && env exists replacevol && iminfo $loadaddr && run ubi_write_recovery ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp_production=tftpboot $loadaddr $bootfile_upg && env exists replacevol && iminfo $loadaddr && run ubi_write_production ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp=tftpboot $loadaddr $bootfile && bootm $loadaddr#$bootconf ++boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run mtd_write_fip && run reset_factory ++boot_tftp_write_bl2=tftpboot $loadaddr $bootfile_bl2 && run mtd_write_bl2 ++reset_factory=ubi part ubi ; mw $loadaddr 0x0 0x800 ; ubi write $loadaddr ubootenv 0x800 ; ubi write $loadaddr ubootenv2 0x800 ++mtd_write_fip=mtd erase fip && mtd write fip $loadaddr ++mtd_write_bl2=mtd erase bl2 && mtd write bl2 $loadaddr ++ubi_create_env=ubi check ubootenv || ubi create ubootenv 0x100000 dynamic 0 || run ubi_format ; ubi check ubootenv2 || ubi create ubootenv2 0x100000 dynamic 1 || run ubi_format ++ubi_format=ubi detach ; mtd erase ubi && ubi part ubi ; reset ++ubi_prepare_rootfs=if ubi check rootfs_data ; then else if env exists rootfs_data_max ; then ubi create rootfs_data $rootfs_data_max dynamic || ubi create rootfs_data - dynamic ; else ubi create rootfs_data - dynamic ; fi ; fi ++ubi_read_production=ubi read $loadaddr fit && iminfo $loadaddr && run ubi_prepare_rootfs ++ubi_read_recovery=ubi check recovery && ubi read $loadaddr recovery ++ubi_remove_rootfs=ubi check rootfs_data && ubi remove rootfs_data ++ubi_write_production=ubi check fit && ubi remove fit ; run ubi_remove_rootfs ; ubi create fit $filesize dynamic 2 && ubi write $loadaddr fit $filesize ++ubi_write_recovery=ubi check recovery && ubi remove recovery ; run ubi_remove_rootfs ; ubi create recovery $filesize dynamic 3 && ubi write $loadaddr recovery $filesize ++_init_env=setenv _init_env ; run ubi_create_env ; saveenv ; saveenv ++_firstboot=setenv _firstboot ; run _switch_to_menu ; run _init_env ; run boot_first ++_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title ++_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" diff --git a/lede/package/boot/uboot-mediatek/patches/441-add-jdcloud_re-cp-03.patch b/lede/package/boot/uboot-mediatek/patches/441-add-jdcloud_re-cp-03.patch new file mode 100644 index 0000000000..dc8dfe0140 --- /dev/null +++ b/lede/package/boot/uboot-mediatek/patches/441-add-jdcloud_re-cp-03.patch @@ -0,0 +1,324 @@ +--- /dev/null ++++ b/configs/mt7986a_jdcloud_re-cp-03_defconfig +@@ -0,0 +1,112 @@ ++CONFIG_ARM=y ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y ++CONFIG_POSITION_INDEPENDENT=y ++CONFIG_ARCH_MEDIATEK=y ++CONFIG_TEXT_BASE=0x41e00000 ++CONFIG_SYS_MALLOC_F_LEN=0x4000 ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_ENV_SIZE=0x40000 ++CONFIG_ENV_OFFSET=0x400000 ++CONFIG_DEFAULT_DEVICE_TREE="mt7986a-jdcloud_re-cp-03" ++CONFIG_SYS_PROMPT="MT7986> " ++CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_TARGET_MT7986=y ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 ++CONFIG_DEBUG_UART_BASE=0x11002000 ++CONFIG_DEBUG_UART_CLOCK=40000000 ++CONFIG_ENV_OFFSET_REDUND=0x440000 ++CONFIG_SYS_LOAD_ADDR=0x46000000 ++CONFIG_DEBUG_UART=y ++CONFIG_FIT=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_DEFAULT_FDT_FILE="mediatek/mt7986a-jdcloud_re-cp-03.dtb" ++CONFIG_LOGLEVEL=7 ++CONFIG_PRE_CONSOLE_BUFFER=y ++CONFIG_LOG=y ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_HUSH_PARSER=y ++CONFIG_CMD_CPU=y ++CONFIG_CMD_LICENSE=y ++CONFIG_CMD_BOOTMENU=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_CMD_STRINGS=y ++CONFIG_CMD_DM=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_PWM=y ++CONFIG_CMD_GPT=y ++CONFIG_CMD_MMC=y ++CONFIG_CMD_PART=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_PING=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_LINK_LOCAL=y ++CONFIG_CMD_PXE=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_UUID=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_SMC=y ++CONFIG_CMD_EXT4=y ++CONFIG_CMD_FAT=y ++CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y ++CONFIG_OF_EMBED=y ++CONFIG_ENV_OVERWRITE=y ++CONFIG_ENV_IS_IN_MMC=y ++CONFIG_SYS_REDUNDAND_ENVIRONMENT=y ++CONFIG_SYS_RELOC_GD_ENV_ADDR=y ++CONFIG_USE_DEFAULT_ENV_FILE=y ++CONFIG_DEFAULT_ENV_FILE="jdcloud_re-cp-03_env" ++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_NET_RANDOM_ETHADDR=y ++CONFIG_NETCONSOLE=y ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.254" ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y ++CONFIG_CLK=y ++CONFIG_GPIO_HOG=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y ++CONFIG_SUPPORT_EMMC_BOOT=y ++CONFIG_MMC_HS200_SUPPORT=y ++CONFIG_MMC_MTK=y ++CONFIG_PHY_FIXED=y ++CONFIG_DM_MDIO=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PHY=y ++CONFIG_PHY_MTK_TPHY=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7622=y ++CONFIG_PINCTRL_MT7986=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_DM_PWM=y ++CONFIG_PWM_MTK=y ++CONFIG_RAM=y ++CONFIG_SCSI=y ++CONFIG_DM_SCSI=y ++CONFIG_DM_SERIAL=y ++CONFIG_MTK_SERIAL=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y ++CONFIG_LMB_MAX_REGIONS=64 +--- /dev/null ++++ b/arch/arm/dts/mt7986a-jdcloud_re-cp-03.dts +@@ -0,0 +1,148 @@ ++// SPDX-License-Identifier: GPL-2.0-or-later ++ ++/dts-v1/; ++#include ++#include "mt7986.dtsi" ++#include ++ ++/ { ++ #address-cells = <1>; ++ #size-cells = <1>; ++ model = "JDCloud RE-CP-03"; ++ compatible = "mediatek,mt7986", "mediatek,mt7986-rfb"; ++ ++ chosen { ++ stdout-path = &uart0; ++ tick-timer = &timer0; ++ }; ++ ++ memory@40000000 { ++ device_type = "memory"; ++ reg = <0x40000000 0x40000000>; ++ }; ++ ++ gpio-keys { ++ compatible = "gpio-keys"; ++ ++ button-joylink { ++ label = "joylink"; ++ linux,code = ; ++ gpios = <&gpio 10 GPIO_ACTIVE_LOW>; ++ }; ++ ++ button-reset { ++ label = "reset"; ++ linux,code = ; ++ gpios = <&gpio 9 GPIO_ACTIVE_LOW>; ++ }; ++ }; ++ ++ gpio-leds { ++ compatible = "gpio-leds"; ++ ++ led-0 { ++ label = "blue:status"; ++ gpios = <&gpio 7 GPIO_ACTIVE_HIGH>; ++ default-state = "off"; ++ }; ++ ++ led-1 { ++ label = "red:status"; ++ gpios = <&gpio 11 GPIO_ACTIVE_HIGH>; ++ default-state = "on"; ++ }; ++ ++ led-2 { ++ label = "green:status"; ++ gpios = <&gpio 12 GPIO_ACTIVE_LOW>; ++ default-state = "off"; ++ }; ++ }; ++ ++ reg_1p8v: regulator-1p8v { ++ compatible = "regulator-fixed"; ++ regulator-name = "fixed-1.8V"; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ regulator-boot-on; ++ regulator-always-on; ++ }; ++ ++ reg_3p3v: regulator-3p3v { ++ compatible = "regulator-fixed"; ++ regulator-name = "fixed-3.3V"; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-boot-on; ++ regulator-always-on; ++ }; ++}; ++ ++ð { ++ status = "okay"; ++ mediatek,gmac-id = <0>; ++ phy-mode = "2500base-x"; ++ mediatek,switch = "mt7531"; ++ reset-gpios = <&gpio 5 GPIO_ACTIVE_HIGH>; ++ ++ fixed-link { ++ speed = <2500>; ++ full-duplex; ++ }; ++}; ++ ++&mmc0 { ++ bus-width = <8>; ++ cap-mmc-highspeed; ++ cap-mmc-hw-reset; ++ max-frequency = <200000000>; ++ non-removable; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&mmc0_pins_default>; ++ vmmc-supply = <®_3p3v>; ++ vqmmc-supply = <®_1p8v>; ++ status = "okay"; ++}; ++ ++&pinctrl { ++ mmc0_pins_default: mmc0default { ++ mux { ++ function = "flash"; ++ groups = "emmc_51"; ++ }; ++ ++ conf-cmd-dat { ++ pins = "EMMC_DATA_0", "EMMC_DATA_1", "EMMC_DATA_2", ++ "EMMC_DATA_3", "EMMC_DATA_4", "EMMC_DATA_5", ++ "EMMC_DATA_6", "EMMC_DATA_7", "EMMC_CMD"; ++ input-enable; ++ drive-strength = ; ++ bias-pull-up = ; ++ }; ++ ++ conf-clk { ++ pins = "EMMC_CK"; ++ drive-strength = ; ++ bias-pull-down = ; ++ }; ++ ++ conf-dsl { ++ pins = "EMMC_DSL"; ++ bias-pull-down = ; ++ }; ++ ++ conf-rst { ++ pins = "EMMC_RSTB"; ++ drive-strength = ; ++ bias-pull-up = ; ++ }; ++ }; ++}; ++ ++&uart0 { ++ status = "okay"; ++}; ++ ++&watchdog { ++ status = "disabled"; ++}; +--- /dev/null ++++ b/jdcloud_re-cp-03_env +@@ -0,0 +1,55 @@ ++ipaddr=192.168.1.1 ++serverip=192.168.1.254 ++loadaddr=0x46000000 ++console=earlycon=uart8250,mmio32,0x11002000 console=ttyS0 ++bootargs=root=/dev/fit0 rootwait ++bootcmd=if pstore check ; then run boot_recovery ; else run boot_emmc ; fi ++bootconf=config-1 ++bootdelay=0 ++bootfile=openwrt-mediatek-filogic-jdcloud_re-cp-03-initramfs-recovery.itb ++bootfile_bl2=openwrt-mediatek-filogic-jdcloud_re-cp-03-preloader.bin ++bootfile_fip=openwrt-mediatek-filogic-jdcloud_re-cp-03-bl31-uboot.fip ++bootfile_upg=openwrt-mediatek-filogic-jdcloud_re-cp-03-squashfs-sysupgrade.itb ++bootled_pwr=red:status ++bootled_rec=blue:status ++bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60 ++bootmenu_default=0 ++bootmenu_delay=0 ++bootmenu_title= ( ( ( OpenWrt ) ) ) ++bootmenu_0=Initialize environment.=run _firstboot ++bootmenu_0d=Run default boot command.=run boot_default ++bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return ++bootmenu_2=Boot production system from eMMC.=run boot_production ; run bootmenu_confirm_return ++bootmenu_3=Boot recovery system from eMMC.=run boot_recovery ; run bootmenu_confirm_return ++bootmenu_4=Load production system via TFTP then write to eMMC.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_production ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_5=Load recovery system via TFTP then write to eMMC.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_recovery ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_6=Load BL31+U-Boot FIP via TFTP then write to eMMC.=run boot_tftp_write_fip ; run bootmenu_confirm_return ++bootmenu_7=Load BL2 preloader via TFTP then write to eMMC.=run boot_tftp_write_bl2 ; run bootmenu_confirm_return ++bootmenu_8=Reboot.=reset ++bootmenu_9=Reset all settings to factory defaults.=run reset_factory ; reset ++boot_first=if button reset ; then led $bootled_rec on ; run boot_tftp_recovery ; setenv flag_recover 1 ; run boot_default ; fi ; bootmenu ++boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_recovery ; setenv replacevol 1 ; run boot_tftp_forever ++boot_production=led $bootled_pwr on ; run emmc_read_production && bootm $loadaddr#$bootconf ; led $bootled_pwr off ++boot_recovery=led $bootled_rec on ; run emmc_read_recovery && bootm $loadaddr#$bootconf ; led $bootled_rec off ++boot_emmc=run boot_production ; run boot_recovery ++boot_tftp_forever=led $bootled_rec on ; while true ; do run boot_tftp_recovery ; sleep 1 ; done ++boot_tftp_production=tftpboot $loadaddr $bootfile_upg && env exists replacevol && iminfo $loadaddr && run emmc_write_production ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp_recovery=tftpboot $loadaddr $bootfile && env exists replacevol && iminfo $loadaddr && run emmc_write_recovery ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run emmc_write_fip ++boot_tftp_write_bl2=tftpboot $loadaddr $bootfile_bl2 && run emmc_write_bl2 ++boot_tftp=tftpboot $loadaddr $bootfile && bootm $loadaddr#$bootconf ++mmc_write_vol=imszb $loadaddr image_size && test 0x$image_size -le 0x$part_size && mmc erase 0x$part_addr 0x$image_size && mmc write $loadaddr 0x$part_addr 0x$image_size ++mmc_read_vol=mmc read $loadaddr $part_addr 0x100 && imszb $loadaddr image_size && test 0x$image_size -le 0x$part_size && mmc read $loadaddr 0x$part_addr 0x$image_size && setexpr filesize $image_size * 0x200 ++part_default=production ++part_recovery=recovery ++reset_factory=eraseenv && reset ++emmc_read_production=part start mmc 0 $part_default part_addr && part size mmc 0 $part_default part_size && run mmc_read_vol ++emmc_read_recovery=part start mmc 0 $part_recovery part_addr && part size mmc 0 $part_recovery part_size && run mmc_read_vol ++emmc_write_bl2=mmc partconf 0 1 1 1 && mmc erase 0x0 0x400 && mmc write $fileaddr 0x0 0x400 ; mmc partconf 0 1 1 0 ++emmc_write_fip=mmc erase 0x3400 0x2000 && mmc write $fileaddr 0x3400 0x2000 && mmc erase 0x2000 0x800 ++emmc_write_production=part start mmc 0 $part_default part_addr && part size mmc 0 $part_default part_size && run mmc_write_vol ++emmc_write_recovery=part start mmc 0 $part_recovery part_addr && part size mmc 0 $part_recovery part_size && run mmc_write_vol ++_init_env=setenv _init_env ; setenv _create_env ; saveenv ; saveenv ++_firstboot=setenv _firstboot ; run _switch_to_menu ; run _init_env ; run boot_first ++_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title ++_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" diff --git a/lede/package/boot/uboot-mediatek/patches/442-add-bpi-r3-mini.patch b/lede/package/boot/uboot-mediatek/patches/442-add-bpi-r3-mini.patch new file mode 100644 index 0000000000..5409f7fa0d --- /dev/null +++ b/lede/package/boot/uboot-mediatek/patches/442-add-bpi-r3-mini.patch @@ -0,0 +1,779 @@ +--- /dev/null ++++ b/configs/mt7986a_bpi-r3-mini-emmc_defconfig +@@ -0,0 +1,203 @@ ++CONFIG_ARM=y ++CONFIG_POSITION_INDEPENDENT=y ++CONFIG_ARCH_MEDIATEK=y ++CONFIG_TARGET_MT7986=y ++CONFIG_TEXT_BASE=0x41e00000 ++CONFIG_SYS_MALLOC_F_LEN=0x4000 ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_DEFAULT_DEVICE_TREE="mt7986a-bpi-r3-mini" ++CONFIG_DEFAULT_ENV_FILE="bananapi_bpi-r3-mini_emmc_env" ++CONFIG_DEFAULT_FDT_FILE="mediatek/mt7986a-bpi-r3-mini.dtb" ++CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_OF_SYSTEM_SETUP=y ++CONFIG_DEBUG_UART_BASE=0x11002000 ++CONFIG_DEBUG_UART_CLOCK=40000000 ++CONFIG_DEBUG_UART=y ++CONFIG_SYS_LOAD_ADDR=0x46000000 ++CONFIG_SMBIOS_PRODUCT_NAME="" ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_CFB_CONSOLE_ANSI=y ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y ++CONFIG_GPIO_HOG=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_FIT=y ++CONFIG_FIT_ENABLE_SHA256_SUPPORT=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y ++CONFIG_LOGLEVEL=7 ++CONFIG_LOG=y ++CONFIG_SYS_PROMPT="MT7986> " ++CONFIG_CMD_BOOTMENU=y ++CONFIG_CMD_BOOTP=y ++CONFIG_CMD_BUTTON=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_CPU=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DM=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_ECHO=y ++CONFIG_CMD_ENV_READMEM=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_EXT4=y ++CONFIG_CMD_FAT=y ++CONFIG_CMD_FDT=y ++CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_GPT=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_ITEST=y ++CONFIG_CMD_LED=y ++CONFIG_CMD_LICENSE=y ++CONFIG_CMD_LINK_LOCAL=y ++# CONFIG_CMD_MBR is not set ++CONFIG_CMD_MDIO=y ++CONFIG_CMD_MII=y ++CONFIG_CMD_MMC=y ++CONFIG_CMD_MTD=y ++CONFIG_CMD_PCI=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_PING=y ++CONFIG_CMD_PXE=y ++CONFIG_CMD_PWM=y ++CONFIG_CMD_SMC=y ++CONFIG_CMD_TFTPBOOT=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_UBI=y ++CONFIG_CMD_UBI_RENAME=y ++CONFIG_CMD_UBIFS=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_PART=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_SETEXPR=y ++CONFIG_CMD_SLEEP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_SOURCE=y ++CONFIG_CMD_STRINGS=y ++CONFIG_CMD_USB=y ++CONFIG_CMD_UUID=y ++CONFIG_DISPLAY_CPUINFO=y ++CONFIG_DM_MDIO=y ++CONFIG_DM_MMC=y ++CONFIG_DM_MTD=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_DM_USB=y ++CONFIG_DM_PWM=y ++CONFIG_PWM_MTK=y ++CONFIG_HUSH_PARSER=y ++CONFIG_SYS_REDUNDAND_ENVIRONMENT=y ++CONFIG_SYS_RELOC_GD_ENV_ADDR=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_PARTITION_UUIDS=y ++CONFIG_NETCONSOLE=y ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_CLK=y ++CONFIG_DM_GPIO=y ++CONFIG_DM_SCSI=y ++CONFIG_AHCI=y ++CONFIG_AHCI_PCI=y ++CONFIG_SCSI_AHCI=y ++CONFIG_SCSI=y ++CONFIG_CMD_SCSI=y ++CONFIG_PHY=y ++CONFIG_PHY_MTK_TPHY=y ++CONFIG_PHY_ETHERNET_ID=y ++CONFIG_PHY_FIXED=y ++CONFIG_MTK_AHCI=y ++CONFIG_DM_ETH=y ++CONFIG_DM_ETH_PHY=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PHY_AIROHA=y ++CONFIG_PHY_AIROHA_EN8811H=y ++CONFIG_PHY_AIROHA_FW_IN_MMC=y ++CONFIG_PCI=y ++CONFIG_MTD=y ++CONFIG_MTD_UBI_FASTMAP=y ++CONFIG_DM_PCI=y ++CONFIG_PCIE_MEDIATEK=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7622=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_PRE_CONSOLE_BUFFER=y ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_RAM=y ++CONFIG_DM_SERIAL=y ++CONFIG_MTK_SERIAL=y ++CONFIG_MMC=y ++CONFIG_MMC_DEFAULT_DEV=1 ++CONFIG_MMC_HS200_SUPPORT=y ++CONFIG_MMC_MTK=y ++CONFIG_MMC_SUPPORTS_TUNING=y ++CONFIG_SUPPORT_EMMC_BOOT=y ++CONFIG_SPI=y ++CONFIG_DM_SPI=y ++CONFIG_MTK_SPI_NAND=y ++CONFIG_MTK_SPI_NAND_MTD=y ++CONFIG_SYSRESET_WATCHDOG=y ++CONFIG_WDT_MTK=y ++CONFIG_LZO=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y ++CONFIG_RANDOM_UUID=y ++CONFIG_REGEX=y ++CONFIG_USB=y ++CONFIG_USB_HOST=y ++CONFIG_USB_XHCI_HCD=y ++CONFIG_USB_XHCI_MTK=y ++CONFIG_USB_STORAGE=y ++CONFIG_OF_EMBED=y ++CONFIG_ENV_OVERWRITE=y ++CONFIG_ENV_IS_IN_MMC=y ++CONFIG_ENV_OFFSET=0x400000 ++CONFIG_ENV_OFFSET_REDUND=0x440000 ++CONFIG_ENV_SIZE=0x40000 ++CONFIG_ENV_SIZE_REDUND=0x40000 ++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_NET_RANDOM_ETHADDR=y ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_CLK=y ++CONFIG_SUPPORT_EMMC_BOOT=y ++CONFIG_MMC_HS200_SUPPORT=y ++CONFIG_MMC_MTK=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7986=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_SERIAL=y ++CONFIG_MTK_SERIAL=y ++CONFIG_HEXDUMP=y ++CONFIG_USE_DEFAULT_ENV_FILE=y ++CONFIG_MTD_SPI_NAND=y ++CONFIG_MTK_SPIM=y ++#CONFIG_MTK_SNOR=y ++CONFIG_DM_SPI_FLASH=y ++CONFIG_SPI_FLASH_MTD=y ++CONFIG_SPI_FLASH_WINBOND=y ++# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set ++CONFIG_CMD_SF=y ++CONFIG_CMD_NAND=y ++CONFIG_CMD_NAND_TRIMFFS=y ++CONFIG_LMB_MAX_REGIONS=64 ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.254" +--- /dev/null ++++ b/configs/mt7986a_bpi-r3-mini-snand_defconfig +@@ -0,0 +1,203 @@ ++CONFIG_ARM=y ++CONFIG_POSITION_INDEPENDENT=y ++CONFIG_ARCH_MEDIATEK=y ++CONFIG_TARGET_MT7986=y ++CONFIG_TEXT_BASE=0x41e00000 ++CONFIG_SYS_MALLOC_F_LEN=0x4000 ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_DEFAULT_DEVICE_TREE="mt7986a-bpi-r3-mini" ++CONFIG_DEFAULT_ENV_FILE="bananapi_bpi-r3-mini_snand_env" ++CONFIG_DEFAULT_FDT_FILE="mediatek/mt7986a-bpi-r3-mini.dtb" ++CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_OF_SYSTEM_SETUP=y ++CONFIG_DEBUG_UART_BASE=0x11002000 ++CONFIG_DEBUG_UART_CLOCK=40000000 ++CONFIG_DEBUG_UART=y ++CONFIG_SYS_LOAD_ADDR=0x46000000 ++CONFIG_SMBIOS_PRODUCT_NAME="" ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_CFB_CONSOLE_ANSI=y ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y ++CONFIG_GPIO_HOG=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_FIT=y ++CONFIG_FIT_ENABLE_SHA256_SUPPORT=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y ++CONFIG_LOGLEVEL=7 ++CONFIG_LOG=y ++CONFIG_SYS_PROMPT="MT7986> " ++CONFIG_CMD_BOOTMENU=y ++CONFIG_CMD_BOOTP=y ++CONFIG_CMD_BUTTON=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_CPU=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DM=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_ECHO=y ++CONFIG_CMD_ENV_READMEM=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_EXT4=y ++CONFIG_CMD_FAT=y ++CONFIG_CMD_FDT=y ++CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_GPT=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_ITEST=y ++CONFIG_CMD_LED=y ++CONFIG_CMD_LICENSE=y ++CONFIG_CMD_LINK_LOCAL=y ++# CONFIG_CMD_MBR is not set ++CONFIG_CMD_MDIO=y ++CONFIG_CMD_MII=y ++CONFIG_CMD_MMC=y ++CONFIG_CMD_MTD=y ++CONFIG_CMD_PCI=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_PING=y ++CONFIG_CMD_PXE=y ++CONFIG_CMD_PWM=y ++CONFIG_CMD_SMC=y ++CONFIG_CMD_TFTPBOOT=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_UBI=y ++CONFIG_CMD_UBI_RENAME=y ++CONFIG_CMD_UBIFS=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_PART=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_SETEXPR=y ++CONFIG_CMD_SLEEP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_SOURCE=y ++CONFIG_CMD_STRINGS=y ++CONFIG_CMD_USB=y ++CONFIG_CMD_UUID=y ++CONFIG_DISPLAY_CPUINFO=y ++CONFIG_DM_MMC=y ++CONFIG_DM_MTD=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_DM_USB=y ++CONFIG_DM_PWM=y ++CONFIG_PWM_MTK=y ++CONFIG_HUSH_PARSER=y ++CONFIG_SYS_REDUNDAND_ENVIRONMENT=y ++CONFIG_SYS_RELOC_GD_ENV_ADDR=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_PARTITION_UUIDS=y ++CONFIG_NETCONSOLE=y ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_CLK=y ++CONFIG_DM_GPIO=y ++CONFIG_DM_SCSI=y ++CONFIG_AHCI=y ++CONFIG_AHCI_PCI=y ++CONFIG_SCSI_AHCI=y ++CONFIG_SCSI=y ++CONFIG_CMD_SCSI=y ++CONFIG_DM_MDIO=y ++CONFIG_PHY=y ++CONFIG_PHY_MTK_TPHY=y ++CONFIG_PHY_ETHERNET_ID=y ++CONFIG_PHY_FIXED=y ++CONFIG_MTK_AHCI=y ++CONFIG_DM_ETH=y ++CONFIG_DM_ETH_PHY=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PCI=y ++CONFIG_MTD=y ++CONFIG_MTD_UBI_FASTMAP=y ++CONFIG_DM_PCI=y ++CONFIG_PCIE_MEDIATEK=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7622=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_PRE_CONSOLE_BUFFER=y ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_RAM=y ++CONFIG_DM_SERIAL=y ++CONFIG_MTK_SERIAL=y ++CONFIG_MMC=y ++CONFIG_MMC_DEFAULT_DEV=1 ++CONFIG_MMC_HS200_SUPPORT=y ++CONFIG_MMC_MTK=y ++CONFIG_MMC_SUPPORTS_TUNING=y ++CONFIG_SUPPORT_EMMC_BOOT=y ++CONFIG_SPI=y ++CONFIG_DM_SPI=y ++CONFIG_MTK_SPI_NAND=y ++CONFIG_MTK_SPI_NAND_MTD=y ++CONFIG_SYSRESET_WATCHDOG=y ++CONFIG_WDT_MTK=y ++CONFIG_LZO=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y ++CONFIG_RANDOM_UUID=y ++CONFIG_REGEX=y ++CONFIG_USB=y ++CONFIG_USB_HOST=y ++CONFIG_USB_XHCI_HCD=y ++CONFIG_USB_XHCI_MTK=y ++CONFIG_USB_STORAGE=y ++CONFIG_OF_EMBED=y ++CONFIG_ENV_OVERWRITE=y ++CONFIG_ENV_IS_IN_UBI=y ++CONFIG_ENV_UBI_PART="ubi" ++CONFIG_ENV_SIZE=0x1f000 ++CONFIG_ENV_SIZE_REDUND=0x1f000 ++CONFIG_ENV_UBI_VOLUME="ubootenv" ++CONFIG_ENV_UBI_VOLUME_REDUND="ubootenv2" ++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_NET_RANDOM_ETHADDR=y ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_CLK=y ++CONFIG_SUPPORT_EMMC_BOOT=y ++CONFIG_MMC_HS200_SUPPORT=y ++CONFIG_MMC_MTK=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PHY_AIROHA=y ++CONFIG_PHY_AIROHA_EN8811H=y ++CONFIG_PHY_AIROHA_FW_IN_UBI=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7986=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_SERIAL=y ++CONFIG_MTK_SERIAL=y ++CONFIG_HEXDUMP=y ++CONFIG_USE_DEFAULT_ENV_FILE=y ++CONFIG_MTD_SPI_NAND=y ++CONFIG_MTK_SPIM=y ++#CONFIG_MTK_SNOR=y ++#CONFIG_DM_SPI_FLASH=y ++#CONFIG_SPI_FLASH_MTD=y ++#CONFIG_SPI_FLASH_WINBOND=y ++# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set ++#CONFIG_CMD_SF=y ++CONFIG_CMD_NAND=y ++CONFIG_CMD_NAND_TRIMFFS=y ++CONFIG_LMB_MAX_REGIONS=64 ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_SERVERIP=y +--- /dev/null ++++ b/bananapi_bpi-r3-mini_snand_env +@@ -0,0 +1,61 @@ ++ipaddr=192.168.1.1 ++serverip=192.168.1.254 ++loadaddr=0x46000000 ++console=earlycon=uart8250,mmio32,0x11002000 console=ttyS0 ++bootargs=root=ubi.block=0,fit root=/dev/fit0 rootwait ++bootcmd=if pstore check ; then run boot_recovery ; else run boot_ubi ; fi ++bootconf=config-mt7986a-bananapi-bpi-r3-mini ++bootdelay=0 ++bootfile=openwrt-mediatek-filogic-bananapi_bpi-r3-mini-initramfs-recovery.itb ++bootfile_bl2=openwrt-mediatek-filogic-bananapi_bpi-r3-mini-snand-preloader.bin ++bootfile_fip=openwrt-mediatek-filogic-bananapi_bpi-r3-mini-snand-bl31-uboot.fip ++bootfile_upg=openwrt-mediatek-filogic-bananapi_bpi-r3-mini-squashfs-sysupgrade.itb ++bootfile_en8811h_fw=EthMD32.bin ++bootled_pwr=green:status ++bootled_rec=blue:status ++bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60 ++bootmenu_default=0 ++bootmenu_delay=0 ++bootmenu_title= ( ( ( OpenWrt ) ) ) [SPI-NAND] ++bootmenu_0=Initialize environment.=run _firstboot ++bootmenu_0d=Run default boot command.=run boot_default ++bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return ++bootmenu_2=Boot production system from NAND.=run boot_production ; run bootmenu_confirm_return ++bootmenu_3=Boot recovery system from NAND.=run boot_recovery ; run bootmenu_confirm_return ++bootmenu_4=Load production system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_production ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_5=Load recovery system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_recovery ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_6=Load Airoha EN8811H firmware via TFTP then write to NAND.=run boot_tftp_write_en8811h_fw ; run bootmenu_confirm_return ++bootmenu_7=Load BL31+U-Boot FIP via TFTP then write to NAND.=run boot_tftp_write_fip ; run bootmenu_confirm_return ++bootmenu_8=Load BL2 preloader via TFTP then write to NAND.=run boot_tftp_write_bl2 ; run bootmenu_confirm_return ++bootmenu_9=Reboot.=reset ++bootmenu_10=Reset all settings to factory defaults.=run reset_factory ; reset ++boot_first=if button reset ; then led $bootled_rec on ; run boot_tftp_recovery ; setenv flag_recover 1 ; run boot_default ; fi ; bootmenu ++boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_recovery ; setenv replacevol 1 ; run boot_tftp_forever ++boot_production=led $bootled_pwr on ; run ubi_read_production && bootm $loadaddr#$bootconf ; led $bootled_pwr off ++boot_recovery=led $bootled_rec on ; run ubi_read_recovery && bootm $loadaddr#$bootconf ; led $bootled_rec off ++boot_ubi=run boot_production ; run boot_recovery ++boot_tftp_forever=led $bootled_rec on ; while true ; do run boot_tftp_recovery ; sleep 1 ; done ++boot_tftp_production=tftpboot $loadaddr $bootfile_upg && env exists replacevol && iminfo $loadaddr && run ubi_write_production ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp_recovery=tftpboot $loadaddr $bootfile && env exists replacevol && iminfo $loadaddr && run ubi_write_recovery ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp=tftpboot $loadaddr $bootfile && bootm $loadaddr#$bootconf ++boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run ubi_write_fip && run reset_factory ++boot_tftp_write_bl2=tftpboot $loadaddr $bootfile_bl2 && run snand_write_bl2 ++boot_tftp_write_en8811h_fw=tftpboot $loadaddr $bootfile_en8811h_fw && run ubi_write_en8811h_fw ++part_default=production ++part_recovery=recovery ++reset_factory=mw $loadaddr 0xff 0x1f000 ; ubi write $loadaddr ubootenv 0x1f000 ; ubi write $loadaddr ubootenv2 0x1f000 ; ubi remove rootfs_data ++snand_write_bl2=mtd erase bl2 && mtd write bl2 $loadaddr 0x0 0x40000 && mtd write bl2 $loadaddr 0x40000 0x40000 && mtd write bl2 $loadaddr 0x80000 0x40000 && mtd write bl2 $loadaddr 0xc0000 0x40000 ++ubi_create_env=ubi check ubootenv || ubi create ubootenv 0x1f000 dynamic ; ubi check ubootenv2 || ubi create ubootenv2 0x1f000 dynamic ++ubi_prepare_rootfs=if ubi check rootfs_data ; then else if env exists rootfs_data_max ; then ubi create rootfs_data $rootfs_data_max dynamic || ubi create rootfs_data - dynamic ; else ubi create rootfs_data - dynamic ; fi ; fi ++ubi_read_production=ubi read $loadaddr fit && iminfo $loadaddr && run ubi_prepare_rootfs ++ubi_read_recovery=ubi check recovery && ubi read $loadaddr recovery ++ubi_read_emmc_install=ubi check emmc_install && ubi read $loadaddr emmc_install ++ubi_remove_rootfs=ubi check rootfs_data && ubi remove rootfs_data ++ubi_write_fip=run ubi_remove_rootfs ; ubi check fip && ubi remove fip ; ubi create fip 0x200000 static ; ubi write $loadaddr fip 0x200000 ++ubi_write_en8811h_fw=ubi check en8811h-fw && ubi remove en8811h-fw ; ubi create en8811h-fw 0x24000 static ; ubi write $loadaddr en8811h-fw 0x24000 ++ubi_write_production=ubi check fit && ubi remove fit ; run ubi_remove_rootfs ; ubi create fit $filesize dynamic && ubi write $loadaddr fit $filesize ++ubi_write_recovery=ubi check recovery && ubi remove recovery ; run ubi_remove_rootfs ; ubi create recovery $filesize dynamic && ubi write $loadaddr recovery $filesize ++_init_env=setenv _init_env ; run ubi_create_env ; saveenv ; saveenv ++_firstboot=setenv _firstboot ; run _switch_to_menu ; run _init_env ; run boot_first ++_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title ++_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" +--- /dev/null ++++ b/bananapi_bpi-r3-mini_emmc_env +@@ -0,0 +1,59 @@ ++ipaddr=192.168.1.1 ++serverip=192.168.1.254 ++loadaddr=0x46000000 ++console=earlycon=uart8250,mmio32,0x11002000 console=ttyS0 ++bootargs=root=/dev/fit0 rootwait ++bootcmd=if pstore check ; then run boot_recovery ; else run boot_emmc ; fi ++bootconf=config-mt7986a-bananapi-bpi-r3-mini ++bootdelay=0 ++bootfile=openwrt-mediatek-filogic-bananapi_bpi-r3-mini-initramfs-recovery.itb ++bootfile_bl2=openwrt-mediatek-filogic-bananapi_bpi-r3-mini-emmc-preloader.bin ++bootfile_fip=openwrt-mediatek-filogic-bananapi_bpi-r3-mini-emmc-bl31-uboot.fip ++bootfile_upg=openwrt-mediatek-filogic-bananapi_bpi-r3-mini-squashfs-sysupgrade.itb ++bootfile_en8811h_fw=EthMD32.bin ++bootled_pwr=green:status ++bootled_rec=blue:status ++bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60 ++bootmenu_default=0 ++bootmenu_delay=0 ++bootmenu_title= ( ( ( OpenWrt ) ) ) [eMMC] ++bootmenu_0=Initialize environment.=run _firstboot ++bootmenu_0d=Run default boot command.=run boot_default ++bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return ++bootmenu_2=Boot production system from eMMC.=run boot_production ; run bootmenu_confirm_return ++bootmenu_3=Boot recovery system from eMMC.=run boot_recovery ; run bootmenu_confirm_return ++bootmenu_4=Load production system via TFTP then write to eMMC.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_production ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_5=Load recovery system via TFTP then write to eMMC.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_recovery ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_6=Load Airoha EN8811H firmware via TFTP then write to eMMC.=run boot_tftp_write_en8811h_fw ; run bootmenu_confirm_return ++bootmenu_7=Load BL31+U-Boot FIP via TFTP then write to eMMC.=run boot_tftp_write_fip ; run bootmenu_confirm_return ++bootmenu_8=Load BL2 preloader via TFTP then write to eMMC.=run boot_tftp_write_bl2 ; run bootmenu_confirm_return ++bootmenu_9=Reboot.=reset ++bootmenu_10=Reset all settings to factory defaults.=run reset_factory ; reset ++boot_first=if button reset ; then led $bootled_rec on ; run boot_tftp_recovery ; setenv flag_recover 1 ; run boot_default ; fi ; bootmenu ++boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_recovery ; setenv replacevol 1 ; run boot_tftp_forever ++boot_production=led $bootled_pwr on ; run emmc_read_production && bootm $loadaddr#$bootconf ; led $bootled_pwr off ++boot_recovery=led $bootled_rec on ; run emmc_read_recovery && bootm $loadaddr#$bootconf ; led $bootled_rec off ++boot_emmc=run boot_production ; run boot_recovery ++boot_tftp_forever=led $bootled_rec on ; while true ; do run boot_tftp_recovery ; sleep 1 ; done ++boot_tftp_production=tftpboot $loadaddr $bootfile_upg && env exists replacevol && iminfo $loadaddr && run emmc_write_production ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp_recovery=tftpboot $loadaddr $bootfile && env exists replacevol && iminfo $loadaddr && run emmc_write_recovery ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run emmc_write_fip ++boot_tftp_write_bl2=tftpboot $loadaddr $bootfile_bl2 && run emmc_write_bl2 ++boot_tftp_write_en8811h_fw=tftpboot $loadaddr $bootfile_en8811h_fw && run emmc_write_en8811h_fw ++boot_tftp=tftpboot $loadaddr $bootfile && bootm $loadaddr#$bootconf ++mmc_write_vol=imszb $loadaddr image_size && test 0x$image_size -le 0x$part_size && mmc erase 0x$part_addr 0x$image_size && mmc write $loadaddr 0x$part_addr 0x$image_size ++mmc_read_vol=mmc read $loadaddr $part_addr 0x100 && imszb $loadaddr image_size && test 0x$image_size -le 0x$part_size && mmc read $loadaddr 0x$part_addr 0x$image_size && setexpr filesize $image_size * 0x200 ++part_default=production ++part_recovery=recovery ++reset_factory=eraseenv && reset ++emmc_read_production=part start mmc 0 $part_default part_addr && part size mmc 0 $part_default part_size && run mmc_read_vol ++emmc_read_recovery=part start mmc 0 $part_recovery part_addr && part size mmc 0 $part_recovery part_size && run mmc_read_vol ++emmc_write_en8811h_fw=mmc partconf 0 1 2 2 && mmc erase 0x0 0x120 && mmc write $fileaddr 0x0 0x120 ; mmc partconf 0 1 1 0 ++emmc_write_bl2=mmc partconf 0 1 1 1 && mmc erase 0x0 0x400 && mmc write $fileaddr 0x0 0x400 ; mmc partconf 0 1 1 0 ++emmc_write_fip=mmc erase 0x3400 0x2000 && mmc write $fileaddr 0x3400 0x2000 && mmc erase 0x2000 0x800 ++emmc_write_production=part start mmc 0 $part_default part_addr && part size mmc 0 $part_default part_size && run mmc_write_vol ++emmc_write_recovery=part start mmc 0 $part_recovery part_addr && part size mmc 0 $part_recovery part_size && run mmc_write_vol ++_init_env=setenv _init_env ; setenv _create_env ; saveenv ; saveenv ++_firstboot=setenv _firstboot ; run _switch_to_menu ; run _init_env ; run boot_first ++_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title ++_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" +--- /dev/null ++++ b/arch/arm/dts/mt7986a-bpi-r3-mini.dts +@@ -0,0 +1,238 @@ ++// SPDX-License-Identifier: GPL-2.0-or-later ++ ++/dts-v1/; ++#include "mt7986.dtsi" ++#include ++#include ++ ++/ { ++ #address-cells = <1>; ++ #size-cells = <1>; ++ model = "Bananapi BPi-R3 Mini"; ++ compatible = "mediatek,mt7986", "mediatek,mt7986-rfb"; ++ ++ chosen { ++ stdout-path = &uart0; ++ tick-timer = &timer0; ++ }; ++ ++ memory@40000000 { ++ device_type = "memory"; ++ reg = <0x40000000 0x80000000>; ++ }; ++ ++ gpio-keys { ++ compatible = "gpio-keys"; ++ ++ button-reset { ++ label = "reset"; ++ linux,code = ; ++ gpios = <&gpio 7 GPIO_ACTIVE_LOW>; ++ }; ++ }; ++ ++ leds { ++ compatible = "gpio-leds"; ++ ++ status_led: led-0 { ++ label = "green:status"; ++ gpios = <&gpio 19 GPIO_ACTIVE_HIGH>; ++ }; ++ ++ led-1 { ++ label = "blue:wlan2g"; ++ gpios = <&gpio 1 GPIO_ACTIVE_HIGH>; ++ }; ++ ++ led-2 { ++ label = "blue:wlan5g"; ++ gpios = <&gpio 2 GPIO_ACTIVE_HIGH>; ++ }; ++ }; ++ ++ reg_1p8v: regulator-1p8v { ++ compatible = "regulator-fixed"; ++ regulator-name = "fixed-1.8V"; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ regulator-boot-on; ++ regulator-always-on; ++ }; ++ ++ reg_3p3v: regulator-3p3v { ++ compatible = "regulator-fixed"; ++ regulator-name = "fixed-3.3V"; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-boot-on; ++ regulator-always-on; ++ }; ++}; ++ ++ð { ++ status = "okay"; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&mdio_pins>; ++ ++ mediatek,gmac-id = <0>; ++ phy-mode = "2500base-x"; ++ phy-handle = <&phy14>; ++ ++ phy14: eth-phy@e { ++ compatible = "ethernet-phy-id03a2.a411"; ++ reg = <14>; ++ ++ airoha,rx-pol-reverse; ++ ++ reset-gpios = <&gpio 49 GPIO_ACTIVE_LOW>; ++ reset-assert-us = <10000>; ++ reset-deassert-us = <20000>; ++ }; ++}; ++ ++&mmc0 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&mmc0_pins_default>; ++ bus-width = <8>; ++ max-frequency = <200000000>; ++ cap-mmc-highspeed; ++ cap-mmc-hw-reset; ++ vmmc-supply = <®_3p3v>; ++ vqmmc-supply = <®_1p8v>; ++ non-removable; ++ status = "okay"; ++}; ++ ++&pinctrl { ++ mdio_pins: mdio-pins { ++ mux { ++ function = "eth"; ++ groups = "mdc_mdio"; ++ }; ++ ++ conf-en8811-pwr-a { ++ pins = "GPIO_11"; ++ drive-strength = ; ++ bias-pull-down = ; ++ output-low; ++ }; ++ ++ conf-en8811-pwr-b { ++ pins = "GPIO_12"; ++ drive-strength = ; ++ bias-pull-down = ; ++ output-low; ++ }; ++ }; ++ ++ mmc0_pins_default: mmc0default { ++ mux { ++ function = "flash"; ++ groups = "emmc_51"; ++ }; ++ ++ conf-cmd-dat { ++ pins = "EMMC_DATA_0", "EMMC_DATA_1", "EMMC_DATA_2", ++ "EMMC_DATA_3", "EMMC_DATA_4", "EMMC_DATA_5", ++ "EMMC_DATA_6", "EMMC_DATA_7", "EMMC_CMD"; ++ input-enable; ++ drive-strength = ; ++ bias-pull-up = ; ++ }; ++ ++ conf-clk { ++ pins = "EMMC_CK"; ++ drive-strength = ; ++ bias-pull-down = ; ++ }; ++ ++ conf-dsl { ++ pins = "EMMC_DSL"; ++ bias-pull-down = ; ++ }; ++ ++ conf-rst { ++ pins = "EMMC_RSTB"; ++ drive-strength = ; ++ bias-pull-up = ; ++ }; ++ }; ++ ++ spi_flash_pins: spi0-pins-func-1 { ++ mux { ++ function = "flash"; ++ groups = "spi0", "spi0_wp_hold"; ++ }; ++ ++ conf-pu { ++ pins = "SPI2_CS", "SPI2_HOLD", "SPI2_WP"; ++ drive-strength = ; ++ bias-pull-up = ; ++ }; ++ ++ conf-pd { ++ pins = "SPI2_CLK", "SPI2_MOSI", "SPI2_MISO"; ++ drive-strength = ; ++ bias-pull-down = ; ++ }; ++ }; ++ ++ pwm_pins: pwm0-pins-func-1 { ++ mux { ++ function = "pwm"; ++ groups = "pwm0"; ++ }; ++ }; ++}; ++ ++&pwm { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pwm_pins>; ++ status = "okay"; ++}; ++ ++&spi0 { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&spi_flash_pins>; ++ status = "okay"; ++ must_tx; ++ enhance_timing; ++ dma_ext; ++ ipm_design; ++ support_quad; ++ tick_dly = <1>; ++ sample_sel = <0>; ++ ++ spi_nand@0 { ++ compatible = "spi-nand"; ++ reg = <0>; ++ spi-max-frequency = <20000000>; ++ ++ partitions { ++ compatible = "fixed-partitions"; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ partition@0 { ++ label = "bl2"; ++ reg = <0x0 0x200000>; ++ }; ++ ++ partition@200000 { ++ label = "ubi"; ++ reg = <0x200000 0x7e00000>; ++ }; ++ }; ++ }; ++ ++}; ++ ++&uart0 { ++ status = "okay"; ++}; ++ ++&watchdog { ++ status = "disabled"; ++}; diff --git a/lede/package/boot/uboot-mediatek/patches/443-add-nokia_ea0326gmp.patch b/lede/package/boot/uboot-mediatek/patches/443-add-nokia_ea0326gmp.patch new file mode 100644 index 0000000000..0b72e1ee98 --- /dev/null +++ b/lede/package/boot/uboot-mediatek/patches/443-add-nokia_ea0326gmp.patch @@ -0,0 +1,413 @@ +--- /dev/null ++++ b/configs/mt7981_nokia_ea0326gmp_defconfig +@@ -0,0 +1,163 @@ ++CONFIG_ARM=y ++CONFIG_POSITION_INDEPENDENT=y ++CONFIG_ARCH_MEDIATEK=y ++CONFIG_TARGET_MT7981=y ++CONFIG_TEXT_BASE=0x41e00000 ++CONFIG_SYS_MALLOC_F_LEN=0x4000 ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_DEFAULT_DEVICE_TREE="mt7981-nokia-ea0326gmp" ++CONFIG_DEFAULT_ENV_FILE="nokia_ea0326gmp_env" ++CONFIG_DEFAULT_FDT_FILE="mediatek/mt7981-nokia-ea0326gmp.dtb" ++CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_DEBUG_UART_BASE=0x11002000 ++CONFIG_DEBUG_UART_CLOCK=40000000 ++CONFIG_DEBUG_UART=y ++CONFIG_SYS_LOAD_ADDR=0x46000000 ++CONFIG_SMBIOS_PRODUCT_NAME="" ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_CFB_CONSOLE_ANSI=y ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y ++CONFIG_GPIO_HOG=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_FIT=y ++CONFIG_FIT_ENABLE_SHA256_SUPPORT=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y ++CONFIG_LOGLEVEL=7 ++CONFIG_LOG=y ++CONFIG_SYS_PROMPT="MT7981> " ++CONFIG_CMD_BOOTMENU=y ++CONFIG_CMD_BOOTP=y ++CONFIG_CMD_BUTTON=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_CPU=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DM=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_ECHO=y ++CONFIG_CMD_ENV_READMEM=y ++CONFIG_CMD_ERASEENV=y ++# CONFIG_CMD_EXT4 is not set ++# CONFIG_CMD_FAT is not set ++CONFIG_CMD_FDT=y ++# CONFIG_CMD_FS_GENERIC is not set ++# CONFIG_CMD_FS_UUID is not set ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_GPT=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_ITEST=y ++CONFIG_CMD_LED=y ++CONFIG_CMD_LICENSE=y ++CONFIG_CMD_LINK_LOCAL=y ++# CONFIG_CMD_MBR is not set ++CONFIG_CMD_MTD=y ++# CONFIG_CMD_PCI is not set ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_PING=y ++CONFIG_CMD_PXE=y ++# CONFIG_CMD_PWM is not set ++CONFIG_CMD_SMC=y ++CONFIG_CMD_TFTPBOOT=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_UBI=y ++CONFIG_CMD_UBI_RENAME=y ++CONFIG_CMD_UBIFS=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_PART=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_SETEXPR=y ++CONFIG_CMD_SLEEP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_SOURCE=y ++CONFIG_CMD_STRINGS=y ++# CONFIG_CMD_USB is not set ++# CONFIG_CMD_FLASH is not set ++CONFIG_CMD_UUID=y ++CONFIG_DISPLAY_CPUINFO=y ++CONFIG_DM_MTD=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++# CONFIG_DM_USB is not set ++# CONFIG_DM_PWM is not set ++# CONFIG_PWM_MTK is not set ++CONFIG_HUSH_PARSER=y ++CONFIG_SYS_REDUNDAND_ENVIRONMENT=y ++CONFIG_SYS_RELOC_GD_ENV_ADDR=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_PARTITION_UUIDS=y ++CONFIG_NETCONSOLE=y ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_CLK=y ++CONFIG_DM_GPIO=y ++# CONFIG_DM_SCSI is not set ++# CONFIG_AHCI is not set ++CONFIG_PHY=y ++# CONFIG_PHY_MTK_TPHY is not set ++CONFIG_PHY_FIXED=y ++CONFIG_MTK_AHCI=y ++CONFIG_DM_ETH=y ++CONFIG_MEDIATEK_ETH=y ++# CONFIG_PCI is not set ++# CONFIG_MMC is not set ++# CONFIG_DM_MMC is not set ++CONFIG_MTD=y ++CONFIG_MTD_UBI_FASTMAP=y ++# CONFIG_DM_PCI is not set ++# CONFIG_PCIE_MEDIATEK is not set ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7981=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_PRE_CONSOLE_BUFFER=y ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_RAM=y ++CONFIG_DM_SERIAL=y ++CONFIG_MTK_SERIAL=y ++CONFIG_SPI=y ++CONFIG_DM_SPI=y ++CONFIG_MTK_SPI_NAND=y ++CONFIG_MTK_SPI_NAND_MTD=y ++CONFIG_SYSRESET_WATCHDOG=y ++CONFIG_WDT_MTK=y ++CONFIG_LZO=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y ++CONFIG_RANDOM_UUID=y ++CONFIG_REGEX=y ++# CONFIG_USB is not set ++# CONFIG_USB_HOST is not set ++# CONFIG_USB_XHCI_HCD is not set ++# CONFIG_USB_XHCI_MTK is not set ++# CONFIG_USB_STORAGE is not set ++CONFIG_OF_EMBED=y ++CONFIG_ENV_OVERWRITE=y ++CONFIG_ENV_IS_IN_UBI=y ++CONFIG_ENV_UBI_PART="ubi" ++CONFIG_ENV_SIZE=0x1f000 ++CONFIG_ENV_SIZE_REDUND=0x1f000 ++CONFIG_ENV_UBI_VOLUME="ubootenv" ++CONFIG_ENV_UBI_VOLUME_REDUND="ubootenv2" ++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_NET_RANDOM_ETHADDR=y ++CONFIG_USE_DEFAULT_ENV_FILE=y ++CONFIG_MTD_SPI_NAND=y ++CONFIG_MTK_SPIM=y ++CONFIG_CMD_NAND=y ++CONFIG_CMD_NAND_TRIMFFS=y ++CONFIG_LMB_MAX_REGIONS=64 ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.254" +--- /dev/null ++++ b/arch/arm/dts/mt7981-nokia-ea0326gmp.dts +@@ -0,0 +1,186 @@ ++// SPDX-License-Identifier: GPL-2.0-or-later ++ ++/dts-v1/; ++#include "mt7981.dtsi" ++#include ++#include ++ ++/ { ++ #address-cells = <1>; ++ #size-cells = <1>; ++ model = "Nokia EA0326GMP"; ++ compatible = "mediatek,mt7981", "mediatek,mt7981-rfb"; ++ ++ chosen { ++ stdout-path = &uart0; ++ tick-timer = &timer0; ++ }; ++ ++ memory@40000000 { ++ device_type = "memory"; ++ reg = <0x40000000 0x10000000>; ++ }; ++ ++ gpio-keys { ++ compatible = "gpio-keys"; ++ ++ ++ button-reset { ++ label = "reset"; ++ linux,code = ; ++ gpios = <&gpio 1 GPIO_ACTIVE_LOW>; ++ }; ++ ++ button-wps { ++ label = "wps"; ++ linux,code = ; ++ gpios = <&gpio 0 GPIO_ACTIVE_LOW>; ++ }; ++ }; ++ ++ gpio-leds { ++ compatible = "gpio-leds"; ++ ++ power_led: led-0 { ++ label = "green:power"; ++ gpios = <&gpio 4 GPIO_ACTIVE_LOW>; ++ default-state = "on"; ++ }; ++ ++ led-1 { ++ label = "green:wan"; ++ gpios = <&gpio 5 GPIO_ACTIVE_LOW>; ++ default-state = "off"; ++ }; ++ ++ led-2 { ++ label = "red:wan"; ++ gpios = <&gpio 6 GPIO_ACTIVE_LOW>; ++ default-state = "off"; ++ }; ++ ++ led-3 { ++ label = "green:lan"; ++ gpios = <&gpio 7 GPIO_ACTIVE_LOW>; ++ default-state = "off"; ++ }; ++ ++ led-4 { ++ label = "green:wlan"; ++ gpios = <&gpio 8 GPIO_ACTIVE_LOW>; ++ default-state = "off"; ++ }; ++ ++ led-5 { ++ label = "green:wps"; ++ gpios = <&gpio 9 GPIO_ACTIVE_LOW>; ++ default-state = "off"; ++ }; ++ }; ++}; ++ ++ð { ++ status = "okay"; ++ mediatek,gmac-id = <0>; ++ phy-mode = "2500base-x"; ++ mediatek,switch = "mt7531"; ++ reset-gpios = <&gpio 39 GPIO_ACTIVE_HIGH>; ++ ++ fixed-link { ++ speed = <2500>; ++ full-duplex; ++ }; ++}; ++ ++&pinctrl { ++ spi_flash_pins: spi0-pins-func-1 { ++ mux { ++ function = "flash"; ++ groups = "spi0", "spi0_wp_hold"; ++ }; ++ ++ conf-pu { ++ pins = "SPI0_CS", "SPI0_HOLD", "SPI0_WP"; ++ drive-strength = ; ++ bias-pull-up = ; ++ }; ++ ++ conf-pd { ++ pins = "SPI0_CLK", "SPI0_MOSI", "SPI0_MISO"; ++ drive-strength = ; ++ bias-pull-down = ; ++ }; ++ }; ++}; ++ ++&spi0 { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&spi_flash_pins>; ++ status = "okay"; ++ must_tx; ++ enhance_timing; ++ dma_ext; ++ ipm_design; ++ support_quad; ++ tick_dly = <2>; ++ sample_sel = <0>; ++ ++ spi_nand@0 { ++ compatible = "spi-nand"; ++ reg = <0>; ++ spi-max-frequency = <52000000>; ++ ++ partitions { ++ compatible = "fixed-partitions"; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ partition@0 { ++ label = "bl2"; ++ reg = <0x00000 0x0100000>; ++ }; ++ ++ partition@100000 { ++ label = "u-boot-env"; ++ reg = <0x0100000 0x0080000>; ++ }; ++ ++ partition@180000 { ++ label = "factory"; ++ reg = <0x180000 0x0200000>; ++ }; ++ ++ partition@380000 { ++ label = "fip"; ++ reg = <0x380000 0x0200000>; ++ }; ++ ++ partition@580000 { ++ label = "config"; ++ reg = <0x580000 0x200000>; ++ }; ++ ++ partition@780000 { ++ label = "config2"; ++ reg = <0x780000 0x200000>; ++ }; ++ ++ partition@980000 { ++ label = "ubi"; ++ reg = <0x980000 0x7680000>; ++ compatible = "linux,ubi"; ++ }; ++ }; ++ }; ++}; ++ ++&uart0 { ++ mediatek,force-highspeed; ++ status = "okay"; ++}; ++ ++&watchdog { ++ status = "disabled"; ++}; +--- /dev/null ++++ b/nokia_ea0326gmp_env +@@ -0,0 +1,55 @@ ++ipaddr=192.168.1.1 ++serverip=192.168.1.254 ++loadaddr=0x46000000 ++console=earlycon=uart8250,mmio32,0x11002000 console=ttyS0 ++bootargs=root=/dev/fit0 rootwait ++bootcmd=if pstore check ; then run boot_recovery ; else run boot_ubi ; fi ++bootconf=config-1 ++bootdelay=0 ++bootfile=openwrt-mediatek-filogic-nokia_ea0326gmp-initramfs-recovery.itb ++bootfile_bl2=openwrt-mediatek-filogic-nokia_ea0326gmp-preloader.bin ++bootfile_fip=openwrt-mediatek-filogic-nokia_ea0326gmp-bl31-uboot.fip ++bootfile_upg=openwrt-mediatek-filogic-nokia_ea0326gmp-squashfs-sysupgrade.itb ++bootled_pwr=green:power ++bootled_rec=green:power ++bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60 ++bootmenu_default=0 ++bootmenu_delay=0 ++bootmenu_title= ( ( ( OpenWrt ) ) ) ++bootmenu_0=Initialize environment.=run _firstboot ++bootmenu_0d=Run default boot command.=run boot_default ++bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return ++bootmenu_2=Boot production system from NAND.=run boot_production ; run bootmenu_confirm_return ++bootmenu_3=Boot recovery system from NAND.=run boot_recovery ; run bootmenu_confirm_return ++bootmenu_4=Load production system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_production ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_5=Load recovery system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_recovery ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_6=Load BL31+U-Boot FIP via TFTP then write to NAND.=run boot_tftp_write_fip ; run bootmenu_confirm_return ++bootmenu_7=Load BL2 preloader via TFTP then write to NAND.=run boot_tftp_write_bl2 ; run bootmenu_confirm_return ++bootmenu_8=Reboot.=reset ++bootmenu_9=Reset all settings to factory defaults.=run reset_factory ; reset ++boot_first=if button reset ; then led $bootled_rec on ; run boot_tftp_recovery ; setenv flag_recover 1 ; run boot_default ; fi ; bootmenu ++boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_recovery ; setenv replacevol 1 ; run boot_tftp_forever ++boot_production=led $bootled_pwr on ; run ubi_read_production && bootm $loadaddr#$bootconf ; led $bootled_pwr off ++boot_recovery=led $bootled_rec on ; run ubi_read_recovery && bootm $loadaddr#$bootconf ; led $bootled_rec off ++boot_ubi=run boot_production ; run boot_recovery ; run boot_tftp_forever ++boot_tftp_forever=led $bootled_rec on ; while true ; do run boot_tftp_recovery ; sleep 1 ; done ++boot_tftp_production=tftpboot $loadaddr $bootfile_upg && env exists replacevol && iminfo $loadaddr && run ubi_write_production ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp_recovery=tftpboot $loadaddr $bootfile && env exists replacevol && iminfo $loadaddr && run ubi_write_recovery ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp=tftpboot $loadaddr $bootfile && bootm $loadaddr#$bootconf ++boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run mtd_write_fip && run reset_factory ++boot_tftp_write_bl2=tftpboot $loadaddr $bootfile_bl2 && run mtd_write_bl2 ++reset_factory=ubi part ubi ; mw $loadaddr 0x0 0x800 ; ubi write $loadaddr ubootenv 0x800 ; ubi write $loadaddr ubootenv2 0x800 ++mtd_write_fip=mtd erase fip && mtd write fip $loadaddr ++mtd_write_bl2=mtd erase bl2 && mtd write bl2 $loadaddr ++ubi_create_env=ubi check ubootenv || ubi create ubootenv 0x100000 dynamic 0 || run ubi_format ; ubi check ubootenv2 || ubi create ubootenv2 0x100000 dynamic 1 || run ubi_format ++ubi_format=ubi detach ; mtd erase ubi && ubi part ubi ; reset ++ubi_prepare_rootfs=if ubi check rootfs_data ; then else if env exists rootfs_data_max ; then ubi create rootfs_data $rootfs_data_max dynamic || ubi create rootfs_data - dynamic ; else ubi create rootfs_data - dynamic ; fi ; fi ++ubi_read_production=ubi read $loadaddr fit && iminfo $loadaddr && run ubi_prepare_rootfs ++ubi_read_recovery=ubi check recovery && ubi read $loadaddr recovery ++ubi_remove_rootfs=ubi check rootfs_data && ubi remove rootfs_data ++ubi_write_production=ubi check fit && ubi remove fit ; run ubi_remove_rootfs ; ubi create fit $filesize dynamic 2 && ubi write $loadaddr fit $filesize ++ubi_write_recovery=ubi check recovery && ubi remove recovery ; run ubi_remove_rootfs ; ubi create recovery $filesize dynamic 3 && ubi write $loadaddr recovery $filesize ++_init_env=setenv _init_env ; run ubi_create_env ; saveenv ; saveenv ++_firstboot=setenv _firstboot ; run _switch_to_menu ; run _init_env ; run boot_first ++_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title ++_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" diff --git a/lede/package/boot/uboot-mediatek/patches/450-add-bpi-r4.patch b/lede/package/boot/uboot-mediatek/patches/450-add-bpi-r4.patch new file mode 100644 index 0000000000..0a69e74e02 --- /dev/null +++ b/lede/package/boot/uboot-mediatek/patches/450-add-bpi-r4.patch @@ -0,0 +1,1748 @@ +--- /dev/null ++++ b/configs/mt7988a_bananapi_bpi-r4-emmc_defconfig +@@ -0,0 +1,180 @@ ++CONFIG_ARM=y ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y ++CONFIG_POSITION_INDEPENDENT=y ++CONFIG_ARCH_MEDIATEK=y ++CONFIG_TEXT_BASE=0x41e00000 ++CONFIG_SYS_MALLOC_F_LEN=0x4000 ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_SYS_PROMPT="MT7988> " ++CONFIG_TARGET_MT7988=y ++CONFIG_DEBUG_UART_BASE=0x11000000 ++CONFIG_DEBUG_UART_CLOCK=40000000 ++CONFIG_SYS_LOAD_ADDR=0x50000000 ++CONFIG_DEBUG_UART=y ++CONFIG_SYS_CBSIZE=512 ++CONFIG_SYS_PBSIZE=1049 ++CONFIG_DEFAULT_DEVICE_TREE="mt7988a-bananapi-bpi-r4-emmc" ++CONFIG_DEFAULT_ENV_FILE="bananapi_bpi-r4_emmc_env" ++CONFIG_DEFAULT_FDT_FILE="mediatek/mt7988a-bpi-r4-emmc.dtb" ++CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_OF_SYSTEM_SETUP=y ++CONFIG_SMBIOS_PRODUCT_NAME="" ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_CFB_CONSOLE_ANSI=y ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y ++CONFIG_GPIO_HOG=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_FIT=y ++CONFIG_FIT_ENABLE_SHA256_SUPPORT=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y ++CONFIG_LOGLEVEL=7 ++CONFIG_LOG=y ++CONFIG_CMD_BOOTMENU=y ++CONFIG_CMD_BOOTP=y ++CONFIG_CMD_BUTTON=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_CPU=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DM=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_ECHO=y ++CONFIG_CMD_ENV_READMEM=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_EXT4=y ++CONFIG_CMD_FAT=y ++CONFIG_CMD_FDT=y ++CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_GPT=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_ITEST=y ++CONFIG_CMD_LED=y ++CONFIG_CMD_LICENSE=y ++CONFIG_CMD_LINK_LOCAL=y ++# CONFIG_CMD_MBR is not set ++CONFIG_CMD_MMC=y ++CONFIG_CMD_MTD=y ++CONFIG_CMD_PCI=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_PING=y ++CONFIG_CMD_PXE=y ++CONFIG_CMD_PWM=y ++CONFIG_CMD_SMC=y ++CONFIG_CMD_TFTPBOOT=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_UBI=y ++CONFIG_CMD_UBI_RENAME=y ++CONFIG_CMD_UBIFS=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_PART=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_SETEXPR=y ++CONFIG_CMD_SLEEP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_SOURCE=y ++CONFIG_CMD_STRINGS=y ++CONFIG_CMD_USB=y ++CONFIG_CMD_UUID=y ++CONFIG_DISPLAY_CPUINFO=y ++CONFIG_DM_MMC=y ++CONFIG_DM_MTD=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_DM_USB=y ++CONFIG_DM_PWM=y ++CONFIG_PWM_MTK=y ++CONFIG_HUSH_PARSER=y ++CONFIG_SYS_REDUNDAND_ENVIRONMENT=y ++CONFIG_SYS_RELOC_GD_ENV_ADDR=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_PARTITION_UUIDS=y ++CONFIG_NETCONSOLE=y ++CONFIG_DM_GPIO=y ++CONFIG_DM_SCSI=y ++CONFIG_AHCI=y ++CONFIG_AHCI_PCI=y ++CONFIG_SCSI_AHCI=y ++CONFIG_SCSI=y ++CONFIG_CMD_SCSI=y ++CONFIG_PHY=y ++CONFIG_PHY_MTK_TPHY=y ++CONFIG_MTK_AHCI=y ++CONFIG_PCI=y ++CONFIG_MTD=y ++CONFIG_MTD_UBI_FASTMAP=y ++CONFIG_DM_PCI=y ++CONFIG_PCIE_MEDIATEK=y ++CONFIG_PRE_CONSOLE_BUFFER=y ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 ++CONFIG_RAM=y ++CONFIG_DM_SERIAL=y ++CONFIG_MTK_SERIAL=y ++CONFIG_MMC=y ++CONFIG_MMC_DEFAULT_DEV=1 ++CONFIG_MMC_SUPPORTS_TUNING=y ++CONFIG_SPI=y ++CONFIG_DM_SPI=y ++CONFIG_MTK_SPI_NAND=y ++CONFIG_MTK_SPI_NAND_MTD=y ++CONFIG_SYSRESET_WATCHDOG=y ++CONFIG_WDT_MTK=y ++CONFIG_LZO=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y ++CONFIG_RANDOM_UUID=y ++CONFIG_REGEX=y ++CONFIG_USB=y ++CONFIG_USB_HOST=y ++CONFIG_USB_XHCI_HCD=y ++CONFIG_USB_XHCI_MTK=y ++CONFIG_USB_STORAGE=y ++CONFIG_OF_EMBED=y ++CONFIG_ENV_OVERWRITE=y ++CONFIG_ENV_IS_IN_MMC=y ++CONFIG_ENV_OFFSET=0x400000 ++CONFIG_ENV_OFFSET_REDUND=0x440000 ++CONFIG_ENV_SIZE=0x40000 ++CONFIG_ENV_SIZE_REDUND=0x40000 ++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_NET_RANDOM_ETHADDR=y ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_CLK=y ++CONFIG_SUPPORT_EMMC_BOOT=y ++CONFIG_MMC_HS200_SUPPORT=y ++CONFIG_MMC_MTK=y ++CONFIG_PHY_FIXED=y ++CONFIG_DM_ETH=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7988=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_USE_DEFAULT_ENV_FILE=y ++CONFIG_MTD_SPI_NAND=y ++CONFIG_MTK_SPIM=y ++#CONFIG_MTK_SNOR=y ++CONFIG_DM_SPI_FLASH=y ++CONFIG_SPI_FLASH_MTD=y ++CONFIG_SPI_FLASH_WINBOND=y ++# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set ++CONFIG_CMD_SF=y ++CONFIG_CMD_NAND=y ++CONFIG_CMD_NAND_TRIMFFS=y ++CONFIG_LMB_MAX_REGIONS=64 ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.254" +--- /dev/null ++++ b/configs/mt7988a_bananapi_bpi-r4-sdmmc_defconfig +@@ -0,0 +1,180 @@ ++CONFIG_ARM=y ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y ++CONFIG_POSITION_INDEPENDENT=y ++CONFIG_ARCH_MEDIATEK=y ++CONFIG_TEXT_BASE=0x41e00000 ++CONFIG_SYS_MALLOC_F_LEN=0x4000 ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_SYS_PROMPT="MT7988> " ++CONFIG_TARGET_MT7988=y ++CONFIG_DEBUG_UART_BASE=0x11000000 ++CONFIG_DEBUG_UART_CLOCK=40000000 ++CONFIG_SYS_LOAD_ADDR=0x50000000 ++CONFIG_DEBUG_UART=y ++CONFIG_SYS_CBSIZE=512 ++CONFIG_SYS_PBSIZE=1049 ++CONFIG_DEFAULT_DEVICE_TREE="mt7988a-bananapi-bpi-r4-sd" ++CONFIG_DEFAULT_ENV_FILE="bananapi_bpi-r4_sdmmc_env" ++CONFIG_DEFAULT_FDT_FILE="mediatek/mt7988a-bpi-r4-sd.dtb" ++CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_OF_SYSTEM_SETUP=y ++CONFIG_SMBIOS_PRODUCT_NAME="" ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_CFB_CONSOLE_ANSI=y ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y ++CONFIG_GPIO_HOG=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_FIT=y ++CONFIG_FIT_ENABLE_SHA256_SUPPORT=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y ++CONFIG_LOGLEVEL=7 ++CONFIG_LOG=y ++CONFIG_CMD_BOOTMENU=y ++CONFIG_CMD_BOOTP=y ++CONFIG_CMD_BUTTON=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_CPU=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DM=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_ECHO=y ++CONFIG_CMD_ENV_READMEM=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_EXT4=y ++CONFIG_CMD_FAT=y ++CONFIG_CMD_FDT=y ++CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_GPT=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_ITEST=y ++CONFIG_CMD_LED=y ++CONFIG_CMD_LICENSE=y ++CONFIG_CMD_LINK_LOCAL=y ++# CONFIG_CMD_MBR is not set ++CONFIG_CMD_MMC=y ++CONFIG_CMD_MTD=y ++CONFIG_CMD_PCI=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_PING=y ++CONFIG_CMD_PXE=y ++CONFIG_CMD_PWM=y ++CONFIG_CMD_SMC=y ++CONFIG_CMD_TFTPBOOT=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_UBI=y ++CONFIG_CMD_UBI_RENAME=y ++CONFIG_CMD_UBIFS=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_PART=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_SETEXPR=y ++CONFIG_CMD_SLEEP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_SOURCE=y ++CONFIG_CMD_STRINGS=y ++CONFIG_CMD_USB=y ++CONFIG_CMD_UUID=y ++CONFIG_DISPLAY_CPUINFO=y ++CONFIG_DM_MMC=y ++CONFIG_DM_MTD=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_DM_USB=y ++CONFIG_DM_PWM=y ++CONFIG_PWM_MTK=y ++CONFIG_HUSH_PARSER=y ++CONFIG_SYS_REDUNDAND_ENVIRONMENT=y ++CONFIG_SYS_RELOC_GD_ENV_ADDR=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_PARTITION_UUIDS=y ++CONFIG_NETCONSOLE=y ++CONFIG_DM_GPIO=y ++CONFIG_DM_SCSI=y ++CONFIG_AHCI=y ++CONFIG_AHCI_PCI=y ++CONFIG_SCSI_AHCI=y ++CONFIG_SCSI=y ++CONFIG_CMD_SCSI=y ++CONFIG_PHY=y ++CONFIG_PHY_MTK_TPHY=y ++CONFIG_MTK_AHCI=y ++CONFIG_PCI=y ++CONFIG_MTD=y ++CONFIG_MTD_UBI_FASTMAP=y ++CONFIG_DM_PCI=y ++CONFIG_PCIE_MEDIATEK=y ++CONFIG_PRE_CONSOLE_BUFFER=y ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 ++CONFIG_RAM=y ++CONFIG_DM_SERIAL=y ++CONFIG_MTK_SERIAL=y ++CONFIG_MMC=y ++CONFIG_MMC_DEFAULT_DEV=1 ++CONFIG_MMC_SUPPORTS_TUNING=y ++CONFIG_SPI=y ++CONFIG_DM_SPI=y ++CONFIG_MTK_SPI_NAND=y ++CONFIG_MTK_SPI_NAND_MTD=y ++CONFIG_SYSRESET_WATCHDOG=y ++CONFIG_WDT_MTK=y ++CONFIG_LZO=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y ++CONFIG_RANDOM_UUID=y ++CONFIG_REGEX=y ++CONFIG_USB=y ++CONFIG_USB_HOST=y ++CONFIG_USB_XHCI_HCD=y ++CONFIG_USB_XHCI_MTK=y ++CONFIG_USB_STORAGE=y ++CONFIG_OF_EMBED=y ++CONFIG_ENV_OVERWRITE=y ++CONFIG_ENV_IS_IN_MMC=y ++CONFIG_ENV_OFFSET=0x400000 ++CONFIG_ENV_OFFSET_REDUND=0x440000 ++CONFIG_ENV_SIZE=0x40000 ++CONFIG_ENV_SIZE_REDUND=0x40000 ++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_NET_RANDOM_ETHADDR=y ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_CLK=y ++CONFIG_SUPPORT_EMMC_BOOT=y ++CONFIG_MMC_HS200_SUPPORT=y ++CONFIG_MMC_MTK=y ++CONFIG_PHY_FIXED=y ++CONFIG_DM_ETH=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7988=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_USE_DEFAULT_ENV_FILE=y ++CONFIG_MTD_SPI_NAND=y ++CONFIG_MTK_SPIM=y ++#CONFIG_MTK_SNOR=y ++CONFIG_DM_SPI_FLASH=y ++CONFIG_SPI_FLASH_MTD=y ++CONFIG_SPI_FLASH_WINBOND=y ++# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set ++CONFIG_CMD_SF=y ++CONFIG_CMD_NAND=y ++CONFIG_CMD_NAND_TRIMFFS=y ++CONFIG_LMB_MAX_REGIONS=64 ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.254" +--- /dev/null ++++ b/configs/mt7988a_bananapi_bpi-r4-snand_defconfig +@@ -0,0 +1,182 @@ ++CONFIG_ARM=y ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y ++CONFIG_POSITION_INDEPENDENT=y ++CONFIG_ARCH_MEDIATEK=y ++CONFIG_TEXT_BASE=0x41e00000 ++CONFIG_SYS_MALLOC_F_LEN=0x4000 ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_SYS_PROMPT="MT7988> " ++CONFIG_TARGET_MT7988=y ++CONFIG_DEBUG_UART_BASE=0x11000000 ++CONFIG_DEBUG_UART_CLOCK=40000000 ++CONFIG_SYS_LOAD_ADDR=0x50000000 ++CONFIG_DEBUG_UART=y ++CONFIG_SYS_CBSIZE=512 ++CONFIG_SYS_PBSIZE=1049 ++CONFIG_DEFAULT_DEVICE_TREE="mt7988a-bananapi-bpi-r4-emmc" ++CONFIG_DEFAULT_ENV_FILE="bananapi_bpi-r4_snand_env" ++CONFIG_DEFAULT_FDT_FILE="mediatek/mt7988a-bpi-r4-emmc.dtb" ++CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_OF_SYSTEM_SETUP=y ++CONFIG_SMBIOS_PRODUCT_NAME="" ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_CFB_CONSOLE_ANSI=y ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y ++CONFIG_GPIO_HOG=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_FIT=y ++CONFIG_FIT_ENABLE_SHA256_SUPPORT=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y ++CONFIG_LOGLEVEL=7 ++CONFIG_LOG=y ++CONFIG_CMD_BOOTMENU=y ++CONFIG_CMD_BOOTP=y ++CONFIG_CMD_BUTTON=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_CPU=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DM=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_ECHO=y ++CONFIG_CMD_ENV_READMEM=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_EXT4=y ++CONFIG_CMD_FAT=y ++CONFIG_CMD_FDT=y ++CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_GPT=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_ITEST=y ++CONFIG_CMD_LED=y ++CONFIG_CMD_LICENSE=y ++CONFIG_CMD_LINK_LOCAL=y ++# CONFIG_CMD_MBR is not set ++CONFIG_CMD_MMC=y ++CONFIG_CMD_MTD=y ++CONFIG_CMD_PCI=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_PING=y ++CONFIG_CMD_PXE=y ++CONFIG_CMD_PWM=y ++CONFIG_CMD_SMC=y ++CONFIG_CMD_TFTPBOOT=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_UBI=y ++CONFIG_CMD_UBI_RENAME=y ++CONFIG_CMD_UBIFS=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_PART=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_SETEXPR=y ++CONFIG_CMD_SLEEP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_SOURCE=y ++CONFIG_CMD_STRINGS=y ++CONFIG_CMD_USB=y ++CONFIG_CMD_UUID=y ++CONFIG_DISPLAY_CPUINFO=y ++CONFIG_DM_MMC=y ++CONFIG_DM_MTD=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_DM_USB=y ++CONFIG_DM_PWM=y ++CONFIG_PWM_MTK=y ++CONFIG_HUSH_PARSER=y ++CONFIG_SYS_REDUNDAND_ENVIRONMENT=y ++CONFIG_SYS_RELOC_GD_ENV_ADDR=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_PARTITION_UUIDS=y ++CONFIG_NETCONSOLE=y ++CONFIG_DM_GPIO=y ++CONFIG_DM_SCSI=y ++CONFIG_AHCI=y ++CONFIG_AHCI_PCI=y ++CONFIG_SCSI_AHCI=y ++CONFIG_SCSI=y ++CONFIG_CMD_SCSI=y ++CONFIG_PHY=y ++CONFIG_PHY_MTK_TPHY=y ++CONFIG_MTK_AHCI=y ++CONFIG_PCI=y ++CONFIG_MTD=y ++CONFIG_MTD_UBI_FASTMAP=y ++CONFIG_DM_PCI=y ++CONFIG_PCIE_MEDIATEK=y ++CONFIG_PINCTRL_MT7988=y ++CONFIG_PRE_CONSOLE_BUFFER=y ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 ++CONFIG_RAM=y ++CONFIG_DM_SERIAL=y ++CONFIG_MTK_SERIAL=y ++CONFIG_MMC=y ++CONFIG_MMC_DEFAULT_DEV=1 ++CONFIG_MMC_SUPPORTS_TUNING=y ++CONFIG_SPI=y ++CONFIG_DM_SPI=y ++CONFIG_MTK_SPI_NAND=y ++CONFIG_MTK_SPI_NAND_MTD=y ++CONFIG_SYSRESET_WATCHDOG=y ++CONFIG_WDT_MTK=y ++CONFIG_LZO=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y ++CONFIG_RANDOM_UUID=y ++CONFIG_REGEX=y ++CONFIG_USB=y ++CONFIG_USB_HOST=y ++CONFIG_USB_XHCI_HCD=y ++CONFIG_USB_XHCI_MTK=y ++CONFIG_USB_STORAGE=y ++CONFIG_OF_EMBED=y ++CONFIG_ENV_OVERWRITE=y ++CONFIG_ENV_IS_IN_UBI=y ++CONFIG_ENV_UBI_PART="ubi" ++CONFIG_ENV_SIZE=0x1f000 ++CONFIG_ENV_SIZE_REDUND=0x1f000 ++CONFIG_ENV_UBI_VOLUME="ubootenv" ++CONFIG_ENV_UBI_VOLUME_REDUND="ubootenv2" ++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_NET_RANDOM_ETHADDR=y ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_CLK=y ++CONFIG_SUPPORT_EMMC_BOOT=y ++CONFIG_MMC_HS200_SUPPORT=y ++CONFIG_MMC_MTK=y ++CONFIG_PHY_FIXED=y ++CONFIG_DM_ETH=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7988=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_USE_DEFAULT_ENV_FILE=y ++CONFIG_MTD_SPI_NAND=y ++CONFIG_MTK_SPIM=y ++#CONFIG_MTK_SNOR=y ++CONFIG_DM_SPI_FLASH=y ++CONFIG_SPI_FLASH_MTD=y ++CONFIG_SPI_FLASH_WINBOND=y ++# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set ++CONFIG_CMD_SF=y ++CONFIG_CMD_NAND=y ++CONFIG_CMD_NAND_TRIMFFS=y ++CONFIG_LMB_MAX_REGIONS=64 ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.254" +--- /dev/null ++++ b/bananapi_bpi-r4_sdmmc_env +@@ -0,0 +1,66 @@ ++ipaddr=192.168.1.1 ++serverip=192.168.1.254 ++loadaddr=0x50000000 ++bootargs=console=ttyS0,115200n1 pci=pcie_bus_perf root=/dev/fit0 rootwait ++bootcmd=if pstore check ; then run boot_recovery ; else run boot_sdmmc ; fi ++bootconf=config-mt7988a-bananapi-bpi-r4 ++bootconf_sd=mt7988a-bananapi-bpi-r4-sd ++bootconf_emmc=mt7988a-bananapi-bpi-r4-emmc ++bootconf_extra= ++bootdelay=0 ++bootfile=openwrt-mediatek-filogic-bananapi_bpi-r4-initramfs-recovery.itb ++bootfile_upg=openwrt-mediatek-filogic-bananapi_bpi-r4-squashfs-sysupgrade.itb ++bootled_pwr=green:status ++bootled_rec=blue:status ++bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60 ++bootmenu_default=0 ++bootmenu_delay=0 ++bootmenu_title= ( ( ( OpenWrt ) ) ) [SD card] ++bootmenu_0=Initialize environment.=run _firstboot ++bootmenu_0d=Run default boot command.=run boot_default ++bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return ++bootmenu_2=Boot production system from SD card.=run boot_production ; run bootmenu_confirm_return ++bootmenu_3=Boot recovery system from SD card.=run boot_recovery ; run bootmenu_confirm_return ++bootmenu_4=Load production system via TFTP then write to SD card.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_production ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_5=Load recovery system via TFTP then write to SD card.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_recovery ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_6=Install bootloader, recovery and production to NAND.=if nand info ; then run ubi_init ; else echo "NAND not detected" ; fi ; run bootmenu_confirm_return ++bootmenu_7=Reboot.=reset ++bootmenu_8=Reset all settings to factory defaults.=run reset_factory ; reset ++boot_first=if button reset ; then led $bootled_rec on ; run boot_tftp_recovery ; setenv flag_recover 1 ; run boot_default ; fi ; bootmenu ++boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_recovery ; setenv replacevol 1 ; run boot_tftp_forever ++boot_production=led $bootled_pwr on ; run sdmmc_read_production && bootm $loadaddr#$bootconf#$bootconf_sd#$bootconf_extra ; led $bootled_pwr off ++boot_recovery=led $bootled_rec on ; run sdmmc_read_recovery && bootm $loadaddr#$bootconf#$bootconf_emmc ; led $bootled_rec off ++boot_sdmmc=run boot_production ; run boot_recovery ++boot_tftp_forever=led $bootled_rec on ; while true ; do run boot_tftp_recovery ; sleep 1 ; done ++boot_tftp_production=tftpboot $loadaddr $bootfile_upg && env exists replacevol && iminfo $loadaddr && run sdmmc_write_production ; if env exists noboot ; then else bootm $loadaddr#$bootconf#$bootconf_sd#$bootconf_extra ; fi ++boot_tftp_recovery=tftpboot $loadaddr $bootfile && env exists replacevol && iminfo $loadaddr && run sdmmc_write_recovery ; if env exists noboot ; then else bootm $loadaddr#$bootconf#$bootconf_sd ; fi ++boot_tftp=tftpboot $loadaddr $bootfile && bootm $loadaddr#$bootconf#$bootconf_sd ++mmc_write_vol=imszb $loadaddr image_size && test 0x$image_size -le 0x$part_size && mmc erase 0x$part_addr 0x$image_size && mmc write $loadaddr 0x$part_addr 0x$image_size ++mmc_read_vol=mmc read $loadaddr $part_addr 0x100 && imszb $loadaddr image_size && test 0x$image_size -le 0x$part_size && mmc read $loadaddr 0x$part_addr 0x$image_size && setexpr filesize $image_size * 0x200 ++part_default=production ++part_recovery=recovery ++reset_factory=eraseenv && reset ++sdmmc_read_production=part start mmc 0 $part_default part_addr && part size mmc 0 $part_default part_size && run mmc_read_vol ++sdmmc_read_recovery=part start mmc 0 $part_recovery part_addr && part size mmc 0 $part_recovery part_size && run mmc_read_vol ++sdmmc_read_snand_bl2=part start mmc 0 install part_addr && mmc read $loadaddr $part_addr 0x400 ++sdmmc_read_snand_fip=part start mmc 0 install part_addr && setexpr offset $part_addr + 0x800 && mmc read $loadaddr $offset 0x1000 ++sdmmc_read_emmc_install=part start mmc 0 install part_addr && setexpr offset $part_addr + 0x3800 && mmc read $loadaddr $offset 0x4000 ++sdmmc_write_production=part start mmc 0 $part_default part_addr && part size mmc 0 $part_default part_size && run mmc_write_vol ++sdmmc_write_recovery=part start mmc 0 $part_recovery part_addr && part size mmc 0 $part_recovery part_size && run mmc_write_vol ++snand_write_bl2=mtd erase bl2 && mtd write bl2 $loadaddr 0x0 0x80000 && mtd write bl2 $loadaddr 0x80000 0x80000 && mtd write bl2 $loadaddr 0x100000 0x80000 && mtd write bl2 $loadaddr 0x180000 0x80000 ++ubi_create_env=ubi create ubootenv 0x100000 dynamic 1 ; ubi create ubootenv2 0x100000 dynamic 2 ++ubi_format=ubi detach ; mtd erase ubi && ubi part ubi ++ubi_init=run ubi_format && run ubi_init_bl && run ubi_create_env && run ubi_init_openwrt && run ubi_init_emmc_install ++ubi_init_openwrt=run sdmmc_read_recovery && iminfo $loadaddr && run ubi_write_recovery ; run sdmmc_read_production && iminfo $loadaddr && run ubi_write_production ++ubi_init_bl=run sdmmc_read_snand_bl2 && run snand_write_bl2 && run sdmmc_read_snand_fip && run ubi_write_fip ++ubi_init_emmc_install=run sdmmc_read_emmc_install && run ubi_write_emmc_install ++ubi_prepare_rootfs=if ubi check rootfs_data ; then else if env exists rootfs_data_max ; then ubi create rootfs_data $rootfs_data_max dynamic || ubi create rootfs_data - dynamic ; else ubi create rootfs_data - dynamic ; fi ; fi ++ubi_remove_rootfs=ubi check rootfs_data && ubi remove rootfs_data ++ubi_write_fip=run ubi_remove_rootfs ; ubi check fip && ubi remove fip ; ubi create fip 0x200000 static ; ubi write $loadaddr fip 0x200000 ++ubi_write_emmc_install=ubi check emmc_install && ubi remove emmc_install ; ubi create emmc_install 0x800000 dynamic ; ubi write $loadaddr emmc_install 0x800000 ++ubi_write_production=ubi check fit && ubi remove fit ; run ubi_remove_rootfs ; ubi create fit $filesize dynamic && ubi write $loadaddr fit $filesize ++ubi_write_recovery=ubi check recovery && ubi remove recovery ; run ubi_remove_rootfs ; ubi create recovery $filesize dynamic && ubi write $loadaddr recovery $filesize ++_init_env=setenv _init_env ; setenv _create_env ; saveenv ; saveenv ++_firstboot=setenv _firstboot ; run _switch_to_menu ; run _init_env ; run boot_first ++_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title ++_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" +--- /dev/null ++++ b/bananapi_bpi-r4_snand_env +@@ -0,0 +1,67 @@ ++ipaddr=192.168.1.1 ++serverip=192.168.1.254 ++loadaddr=0x50000000 ++bootargs=console=ttyS0,115200n1 pci=pcie_bus_perf root=/dev/fit0 rootwait ubi.block=0,fit ++bootconf=config-mt7988a-bananapi-bpi-r4 ++bootconf_extra=mt7988a-bananapi-bpi-r4-emmc ++bootcmd=if pstore check ; then run boot_recovery ; else run boot_ubi ; fi ++bootdelay=0 ++bootfile=openwrt-mediatek-filogic-bananapi_bpi-r4-initramfs-recovery.itb ++bootfile_bl2=openwrt-mediatek-filogic-bananapi_bpi-r4-snand-preloader.bin ++bootfile_fip=openwrt-mediatek-filogic-bananapi_bpi-r4-snand-bl31-uboot.fip ++bootfile_upg=openwrt-mediatek-filogic-bananapi_bpi-r4-squashfs-sysupgrade.itb ++bootled_pwr=green:status ++bootled_rec=blue:status ++bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60 ++bootmenu_default=0 ++bootmenu_delay=0 ++bootmenu_title= ( ( ( OpenWrt ) ) ) [SPI-NAND] ++bootmenu_0=Initialize environment.=run _firstboot ++bootmenu_0d=Run default boot command.=run boot_default ++bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return ++bootmenu_2=Boot production system from NAND.=run boot_production ; run bootmenu_confirm_return ++bootmenu_3=Boot recovery system from NAND.=run boot_recovery ; run bootmenu_confirm_return ++bootmenu_4=Load production system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_production ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_5=Load recovery system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_recovery ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_6=Load BL31+U-Boot FIP via TFTP then write to NAND.=run boot_tftp_write_fip ; run bootmenu_confirm_return ++bootmenu_7=Load BL2 preloader via TFTP then write to NAND.=run boot_tftp_write_bl2 ; run bootmenu_confirm_return ++bootmenu_8=Install bootloader, recovery and production to eMMC.=if mmc partconf 0 ; then run emmc_init ; else echo "eMMC not detected" ; fi ; run bootmenu_confirm_return ++bootmenu_9=Reboot.=reset ++bootmenu_10=Reset all settings to factory defaults.=run reset_factory ; reset ++boot_first=if button reset ; then led $bootled_rec on ; run boot_tftp_recovery ; setenv flag_recover 1 ; run boot_default ; fi ; bootmenu ++boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_recovery ; setenv replacevol 1 ; run boot_tftp_forever ++boot_production=led $bootled_pwr on ; run ubi_read_production && bootm $loadaddr#$bootconf#$bootconf_extra ; led $bootled_pwr off ++boot_recovery=led $bootled_rec on ; run ubi_read_recovery && bootm $loadaddr#$bootconf ; led $bootled_rec off ++boot_ubi=run boot_production ; run boot_recovery ++boot_tftp_forever=led $bootled_rec on ; while true ; do run boot_tftp_recovery ; sleep 1 ; done ++boot_tftp_production=tftpboot $loadaddr $bootfile_upg && env exists replacevol && iminfo $loadaddr && run ubi_write_production ; if env exists noboot ; then else bootm $loadaddr#$bootconf#$bootconf_extra ; fi ++boot_tftp_recovery=tftpboot $loadaddr $bootfile && env exists replacevol && iminfo $loadaddr && run ubi_write_recovery ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp=tftpboot $loadaddr $bootfile && bootm $loadaddr#$bootconf ++boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run ubi_write_fip && run reset_factory ++boot_tftp_write_bl2=tftpboot $loadaddr $bootfile_bl2 && run snand_write_bl2 ++part_default=production ++part_recovery=recovery ++reset_factory=ubi part ubi ; mw $loadaddr 0x0 0x800 ; ubi write $loadaddr ubootenv 0x800 ; ubi write $loadaddr ubootenv2 0x800 ++snand_write_bl2=mtd erase bl2 && mtd write bl2 $loadaddr 0x0 0x80000 && mtd write bl2 $loadaddr 0x80000 0x80000 && mtd write bl2 $loadaddr 0x100000 0x80000 && mtd write bl2 $loadaddr 0x180000 0x80000 ++ubi_create_env=ubi check ubootenv || ubi create ubootenv 0x100000 dynamic 1 ; ubi check ubootenv2 || ubi create ubootenv2 0x100000 dynamic 2 ++ubi_prepare_rootfs=if ubi check rootfs_data ; then else if env exists rootfs_data_max ; then ubi create rootfs_data $rootfs_data_max dynamic || ubi create rootfs_data - dynamic ; else ubi create rootfs_data - dynamic ; fi ; fi ++ubi_read_production=ubi read $loadaddr fit && iminfo $loadaddr && run ubi_prepare_rootfs ++ubi_read_recovery=ubi check recovery && ubi read $loadaddr recovery ++ubi_read_emmc_install=ubi check emmc_install && ubi read $loadaddr emmc_install ++ubi_remove_rootfs=ubi check rootfs_data && ubi remove rootfs_data ++ubi_write_fip=run ubi_remove_rootfs ; ubi check fip && ubi remove fip ; ubi create fip 0x200000 static ; ubi write $loadaddr fip 0x200000 ++ubi_write_production=ubi check fit && ubi remove fit ; run ubi_remove_rootfs ; ubi create fit $filesize dynamic && ubi write $loadaddr fit $filesize ++ubi_write_recovery=ubi check recovery && ubi remove recovery ; run ubi_remove_rootfs ; ubi create recovery $filesize dynamic && ubi write $loadaddr recovery $filesize ++mmc_write_vol=imszb $loadaddr image_size && test 0x$image_size -le 0x$part_size && mmc erase 0x$part_addr 0x$image_size && mmc write $loadaddr 0x$part_addr 0x$image_size ++emmc_init=mmc dev 0 && mmc bootbus 0 0 0 0 && run emmc_init_bl && run emmc_init_openwrt ; env default bootcmd ; saveenv ; saveenv ++emmc_init_bl=run ubi_read_emmc_install && setenv fileaddr $loadaddr && run emmc_write_bl2 && setexpr fileaddr $loadaddr + 0x100000 && run emmc_write_fip && setexpr fileaddr $loadaddr + 0x500000 && run emmc_write_hdr ++emmc_init_openwrt=run ubi_read_recovery && iminfo $loadaddr && run emmc_write_recovery ; run ubi_read_production && iminfo $loadaddr && run emmc_write_production ++emmc_write_bl2=mmc partconf 0 1 1 1 && mmc erase 0x0 0x400 && mmc write $fileaddr 0x0 0x400 ; mmc partconf 0 1 1 0 ++emmc_write_fip=mmc erase 0x3400 0x2000 && mmc write $fileaddr 0x3400 0x2000 && mmc erase 0x2000 0x800 ++emmc_write_hdr=mmc erase 0x0 0x40 && mmc write $fileaddr 0x0 0x40 ++emmc_write_production=part start mmc 0 $part_default part_addr && part size mmc 0 $part_default part_size && run mmc_write_vol ++emmc_write_recovery=part start mmc 0 $part_recovery part_addr && part size mmc 0 $part_recovery part_size && run mmc_write_vol ++_init_env=setenv _init_env ; run ubi_create_env ; saveenv ; saveenv ++_firstboot=setenv _firstboot ; run _switch_to_menu ; run _init_env ; run boot_first ++_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title ++_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" +--- /dev/null ++++ b/bananapi_bpi-r4_emmc_env +@@ -0,0 +1,57 @@ ++ipaddr=192.168.1.1 ++serverip=192.168.1.254 ++loadaddr=0x50000000 ++bootargs=console=ttyS0,115200n1 pci=pcie_bus_perf root=/dev/fit0 rootwait ++bootcmd=if pstore check ; then run boot_recovery ; else run boot_emmc ; fi ++bootconf=config-mt7988a-bananapi-bpi-r4 ++bootconf_base=config-mt7988a-bananapi-bpi-r4 ++bootconf_emmc=mt7988a-bananapi-bpi-r4-emmc ++bootconf_extra= ++bootdelay=0 ++bootfile=openwrt-mediatek-filogic-bananapi_bpi-r4-initramfs-recovery.itb ++bootfile_bl2=openwrt-mediatek-filogic-bananapi_bpi-r4-emmc-preloader.bin ++bootfile_fip=openwrt-mediatek-filogic-bananapi_bpi-r4-emmc-bl31-uboot.fip ++bootfile_upg=openwrt-mediatek-filogic-bananapi_bpi-r4-squashfs-sysupgrade.itb ++bootled_pwr=green:status ++bootled_rec=blue:status ++bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60 ++bootmenu_default=0 ++bootmenu_delay=0 ++bootmenu_title= ( ( ( OpenWrt ) ) ) [eMMC] ++bootmenu_0=Initialize environment.=run _firstboot ++bootmenu_0d=Run default boot command.=run boot_default ++bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return ++bootmenu_2=Boot production system from eMMC.=run boot_production ; run bootmenu_confirm_return ++bootmenu_3=Boot recovery system from eMMC.=run boot_recovery ; run bootmenu_confirm_return ++bootmenu_4=Load production system via TFTP then write to eMMC.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_production ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_5=Load recovery system via TFTP then write to eMMC.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_recovery ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_6=Load BL31+U-Boot FIP via TFTP then write to eMMC.=run boot_tftp_write_fip ; run bootmenu_confirm_return ++bootmenu_7=Load BL2 preloader via TFTP then write to eMMC.=run boot_tftp_write_bl2 ; run bootmenu_confirm_return ++bootmenu_8=Reboot.=reset ++bootmenu_9=Reset all settings to factory defaults.=run reset_factory ; reset ++boot_first=if button reset ; then led $bootled_rec on ; run boot_tftp_recovery ; setenv flag_recover 1 ; run boot_default ; fi ; bootmenu ++boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_recovery ; setenv replacevol 1 ; run boot_tftp_forever ++boot_production=led $bootled_pwr on ; run emmc_read_production && bootm $loadaddr#$bootconf#$bootconf_emmc#$bootconf_extra ; led $bootled_pwr off ++boot_recovery=led $bootled_rec on ; run emmc_read_recovery && bootm $loadaddr#$bootconf#$bootconf_emmc#$bootconf_extra ; led $bootled_rec off ++boot_emmc=run boot_production ; run boot_recovery ++boot_tftp_forever=led $bootled_rec on ; while true ; do run boot_tftp_recovery ; sleep 1 ; done ++boot_tftp_production=tftpboot $loadaddr $bootfile_upg && env exists replacevol && iminfo $loadaddr && run emmc_write_production ; if env exists noboot ; then else bootm $loadaddr#$bootconf#$bootconf_emmc#$bootconf_extra ; fi ++boot_tftp_recovery=tftpboot $loadaddr $bootfile && env exists replacevol && iminfo $loadaddr && run emmc_write_recovery ; if env exists noboot ; then else bootm $loadaddr#$bootconf#$bootconf_emmc ; fi ++boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run emmc_write_fip ++boot_tftp_write_bl2=tftpboot $loadaddr $bootfile_bl2 && run emmc_write_bl2 ++boot_tftp=tftpboot $loadaddr $bootfile && bootm $loadaddr#$bootconf ++mmc_write_vol=imszb $loadaddr image_size && test 0x$image_size -le 0x$part_size && mmc erase 0x$part_addr 0x$image_size && mmc write $loadaddr 0x$part_addr 0x$image_size ++mmc_read_vol=mmc read $loadaddr $part_addr 0x100 && imszb $loadaddr image_size && test 0x$image_size -le 0x$part_size && mmc read $loadaddr 0x$part_addr 0x$image_size && setexpr filesize $image_size * 0x200 ++part_default=production ++part_recovery=recovery ++reset_factory=eraseenv && reset ++emmc_read_production=part start mmc 0 $part_default part_addr && part size mmc 0 $part_default part_size && run mmc_read_vol ++emmc_read_recovery=part start mmc 0 $part_recovery part_addr && part size mmc 0 $part_recovery part_size && run mmc_read_vol ++emmc_write_bl2=mmc partconf 0 1 1 1 && mmc erase 0x0 0x400 && mmc write $fileaddr 0x0 0x400 ; mmc partconf 0 1 1 0 ++emmc_write_fip=mmc erase 0x3400 0x2000 && mmc write $fileaddr 0x3400 0x2000 && mmc erase 0x2000 0x800 ++emmc_write_production=part start mmc 0 $part_default part_addr && part size mmc 0 $part_default part_size && run mmc_write_vol ++emmc_write_recovery=part start mmc 0 $part_recovery part_addr && part size mmc 0 $part_recovery part_size && run mmc_write_vol ++_init_env=setenv _init_env ; setenv _create_env ; saveenv ; saveenv ++_firstboot=setenv _firstboot ; run _switch_to_menu ; run _init_env ; run boot_first ++_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title ++_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" +--- /dev/null ++++ b/arch/arm/dts/mt7988a-bananapi-bpi-r4.dtsi +@@ -0,0 +1,199 @@ ++// SPDX-License-Identifier: GPL-2.0 ++/* ++ * Copyright (c) 2022 MediaTek Inc. ++ * Author: Sam Shih ++ */ ++ ++/dts-v1/; ++#include "mt7988.dtsi" ++#include ++#include ++ ++/ { ++ model = "Bananapi BPI-R4"; ++ compatible = "bananapi,bpi-r4", "mediatek,mt7988"; ++ ++ chosen { ++ stdout-path = &uart0; ++ }; ++ ++ memory@40000000 { ++ device_type = "memory"; ++ reg = <0 0x40000000 0 0x10000000>; ++ }; ++ ++ reg_3p3v: regulator-3p3v { ++ compatible = "regulator-fixed"; ++ regulator-name = "fixed-3.3V"; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-boot-on; ++ regulator-always-on; ++ }; ++ ++ reg_1p8v: regulator-1p8v { ++ compatible = "regulator-fixed"; ++ regulator-name = "fixed-1.8V"; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ regulator-boot-on; ++ regulator-always-on; ++ }; ++ ++ keys { ++ compatible = "gpio-keys"; ++ ++ wps { ++ label = "reset"; ++ linux,code = ; ++ gpios = <&gpio 14 GPIO_ACTIVE_LOW>; ++ }; ++ }; ++ ++ leds { ++ compatible = "gpio-leds"; ++ ++ led_status_green: led-green { ++ label = "green:status"; ++ gpios = <&gpio 79 GPIO_ACTIVE_HIGH>; ++ }; ++ ++ led_status_blue: led-blue { ++ label = "blue:status"; ++ gpios = <&gpio 63 GPIO_ACTIVE_HIGH>; ++ }; ++ }; ++}; ++ ++&uart0 { ++ status = "okay"; ++}; ++ ++&i2c1 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&i2c1_pins>; ++ status = "okay"; ++}; ++ ++ð { ++ status = "okay"; ++ mediatek,gmac-id = <0>; ++ phy-mode = "usxgmii"; ++ mediatek,switch = "mt7988"; ++ ++ fixed-link { ++ speed = <1000>; ++ full-duplex; ++ pause; ++ }; ++}; ++ ++&pinctrl { ++ i2c1_pins: i2c1-pins { ++ mux { ++ function = "i2c"; ++ groups = "i2c1_0"; ++ }; ++ }; ++ ++ pwm_pins: pwm-pins { ++ mux { ++ function = "pwm"; ++ groups = "pwm0", "pwm1", "pwm2", "pwm3", "pwm4", ++ "pwm5", "pwm6", "pwm7"; ++ }; ++ }; ++ ++ spi0_pins: spi0-pins { ++ mux { ++ function = "spi"; ++ groups = "spi0", "spi0_wp_hold"; ++ }; ++ }; ++ ++ mmc0_pins_default: mmc0default { ++ mux { ++ function = "flash"; ++ groups = "emmc_51"; ++ }; ++ ++ conf-cmd-dat { ++ pins = "EMMC_DATA_0", "EMMC_DATA_1", "EMMC_DATA_2", ++ "EMMC_DATA_3", "EMMC_DATA_4", "EMMC_DATA_5", ++ "EMMC_DATA_6", "EMMC_DATA_7", "EMMC_CMD"; ++ input-enable; ++ }; ++ ++ conf-clk { ++ pins = "EMMC_CK"; ++ }; ++ ++ conf-dsl { ++ pins = "EMMC_DSL"; ++ }; ++ ++ conf-rst { ++ pins = "EMMC_RSTB"; ++ }; ++ }; ++ ++ mmc1_pins_default: mmc1default { ++ mux { ++ function = "flash"; ++ groups = "emmc_45"; ++ }; ++ ++ conf-cmd-dat { ++ pins = "SPI2_CSB", "SPI2_MISO", "SPI2_MOSI", ++ "SPI2_CLK", "SPI2_HOLD"; ++ input-enable; ++ }; ++ ++ conf-clk { ++ pins = "SPI2_WP"; ++ }; ++ }; ++}; ++ ++&pwm { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pwm_pins>; ++ status = "okay"; ++}; ++ ++&spi0 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&spi0_pins>; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ status = "okay"; ++ must_tx; ++ enhance_timing; ++ dma_ext; ++ ipm_design; ++ support_quad; ++ tick_dly = <2>; ++ sample_sel = <0>; ++ ++ spi_nand@0 { ++ compatible = "spi-nand"; ++ reg = <0>; ++ spi-max-frequency = <52000000>; ++ partitions { ++ compatible = "fixed-partitions"; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ partition@0 { ++ label = "bl2"; ++ reg = <0x0 0x200000>; ++ }; ++ ++ partition@200000 { ++ label = "ubi"; ++ reg = <0x200000 0x7e00000>; ++ compatible = "linux,ubi"; ++ }; ++ }; ++ }; ++}; +--- /dev/null ++++ b/arch/arm/dts/mt7988a-bananapi-bpi-r4-sd.dts +@@ -0,0 +1,19 @@ ++// SPDX-License-Identifier: GPL-2.0 ++/* ++ * Copyright (c) 2022 MediaTek Inc. ++ * Author: Sam Shih ++ */ ++ ++/dts-v1/; ++#include "mt7988a-bananapi-bpi-r4.dtsi" ++ ++&mmc0 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&mmc1_pins_default>; ++ max-frequency = <52000000>; ++ bus-width = <4>; ++ cap-sd-highspeed; ++ vmmc-supply = <®_3p3v>; ++ vqmmc-supply = <®_3p3v>; ++ status = "okay"; ++}; +--- /dev/null ++++ b/arch/arm/dts/mt7988a-bananapi-bpi-r4-emmc.dts +@@ -0,0 +1,21 @@ ++// SPDX-License-Identifier: GPL-2.0 ++/* ++ * Copyright (c) 2022 MediaTek Inc. ++ * Author: Sam Shih ++ */ ++ ++/dts-v1/; ++#include "mt7988a-bananapi-bpi-r4.dtsi" ++ ++&mmc0 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&mmc0_pins_default>; ++ max-frequency = <52000000>; ++ bus-width = <8>; ++ cap-mmc-highspeed; ++ cap-mmc-hw-reset; ++ vmmc-supply = <®_3p3v>; ++ vqmmc-supply = <®_1p8v>; ++ non-removable; ++ status = "okay"; ++}; +--- /dev/null ++++ b/configs/mt7988a_bananapi_bpi-r4-poe-emmc_defconfig +@@ -0,0 +1,180 @@ ++CONFIG_ARM=y ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y ++CONFIG_POSITION_INDEPENDENT=y ++CONFIG_ARCH_MEDIATEK=y ++CONFIG_TEXT_BASE=0x41e00000 ++CONFIG_SYS_MALLOC_F_LEN=0x4000 ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_SYS_PROMPT="MT7988> " ++CONFIG_TARGET_MT7988=y ++CONFIG_DEBUG_UART_BASE=0x11000000 ++CONFIG_DEBUG_UART_CLOCK=40000000 ++CONFIG_SYS_LOAD_ADDR=0x50000000 ++CONFIG_DEBUG_UART=y ++CONFIG_SYS_CBSIZE=512 ++CONFIG_SYS_PBSIZE=1049 ++CONFIG_DEFAULT_DEVICE_TREE="mt7988a-bananapi-bpi-r4-emmc" ++CONFIG_DEFAULT_ENV_FILE="bananapi_bpi-r4-poe_emmc_env" ++CONFIG_DEFAULT_FDT_FILE="mediatek/mt7988a-bpi-r4-emmc.dtb" ++CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_OF_SYSTEM_SETUP=y ++CONFIG_SMBIOS_PRODUCT_NAME="" ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_CFB_CONSOLE_ANSI=y ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y ++CONFIG_GPIO_HOG=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_FIT=y ++CONFIG_FIT_ENABLE_SHA256_SUPPORT=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y ++CONFIG_LOGLEVEL=7 ++CONFIG_LOG=y ++CONFIG_CMD_BOOTMENU=y ++CONFIG_CMD_BOOTP=y ++CONFIG_CMD_BUTTON=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_CPU=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DM=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_ECHO=y ++CONFIG_CMD_ENV_READMEM=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_EXT4=y ++CONFIG_CMD_FAT=y ++CONFIG_CMD_FDT=y ++CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_GPT=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_ITEST=y ++CONFIG_CMD_LED=y ++CONFIG_CMD_LICENSE=y ++CONFIG_CMD_LINK_LOCAL=y ++# CONFIG_CMD_MBR is not set ++CONFIG_CMD_MMC=y ++CONFIG_CMD_MTD=y ++CONFIG_CMD_PCI=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_PING=y ++CONFIG_CMD_PXE=y ++CONFIG_CMD_PWM=y ++CONFIG_CMD_SMC=y ++CONFIG_CMD_TFTPBOOT=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_UBI=y ++CONFIG_CMD_UBI_RENAME=y ++CONFIG_CMD_UBIFS=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_PART=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_SETEXPR=y ++CONFIG_CMD_SLEEP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_SOURCE=y ++CONFIG_CMD_STRINGS=y ++CONFIG_CMD_USB=y ++CONFIG_CMD_UUID=y ++CONFIG_DISPLAY_CPUINFO=y ++CONFIG_DM_MMC=y ++CONFIG_DM_MTD=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_DM_USB=y ++CONFIG_DM_PWM=y ++CONFIG_PWM_MTK=y ++CONFIG_HUSH_PARSER=y ++CONFIG_SYS_REDUNDAND_ENVIRONMENT=y ++CONFIG_SYS_RELOC_GD_ENV_ADDR=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_PARTITION_UUIDS=y ++CONFIG_NETCONSOLE=y ++CONFIG_DM_GPIO=y ++CONFIG_DM_SCSI=y ++CONFIG_AHCI=y ++CONFIG_AHCI_PCI=y ++CONFIG_SCSI_AHCI=y ++CONFIG_SCSI=y ++CONFIG_CMD_SCSI=y ++CONFIG_PHY=y ++CONFIG_PHY_MTK_TPHY=y ++CONFIG_MTK_AHCI=y ++CONFIG_PCI=y ++CONFIG_MTD=y ++CONFIG_MTD_UBI_FASTMAP=y ++CONFIG_DM_PCI=y ++CONFIG_PCIE_MEDIATEK=y ++CONFIG_PRE_CONSOLE_BUFFER=y ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 ++CONFIG_RAM=y ++CONFIG_DM_SERIAL=y ++CONFIG_MTK_SERIAL=y ++CONFIG_MMC=y ++CONFIG_MMC_DEFAULT_DEV=1 ++CONFIG_MMC_SUPPORTS_TUNING=y ++CONFIG_SPI=y ++CONFIG_DM_SPI=y ++CONFIG_MTK_SPI_NAND=y ++CONFIG_MTK_SPI_NAND_MTD=y ++CONFIG_SYSRESET_WATCHDOG=y ++CONFIG_WDT_MTK=y ++CONFIG_LZO=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y ++CONFIG_RANDOM_UUID=y ++CONFIG_REGEX=y ++CONFIG_USB=y ++CONFIG_USB_HOST=y ++CONFIG_USB_XHCI_HCD=y ++CONFIG_USB_XHCI_MTK=y ++CONFIG_USB_STORAGE=y ++CONFIG_OF_EMBED=y ++CONFIG_ENV_OVERWRITE=y ++CONFIG_ENV_IS_IN_MMC=y ++CONFIG_ENV_OFFSET=0x400000 ++CONFIG_ENV_OFFSET_REDUND=0x440000 ++CONFIG_ENV_SIZE=0x40000 ++CONFIG_ENV_SIZE_REDUND=0x40000 ++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_NET_RANDOM_ETHADDR=y ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_CLK=y ++CONFIG_SUPPORT_EMMC_BOOT=y ++CONFIG_MMC_HS200_SUPPORT=y ++CONFIG_MMC_MTK=y ++CONFIG_PHY_FIXED=y ++CONFIG_DM_ETH=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7988=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_USE_DEFAULT_ENV_FILE=y ++CONFIG_MTD_SPI_NAND=y ++CONFIG_MTK_SPIM=y ++#CONFIG_MTK_SNOR=y ++CONFIG_DM_SPI_FLASH=y ++CONFIG_SPI_FLASH_MTD=y ++CONFIG_SPI_FLASH_WINBOND=y ++# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set ++CONFIG_CMD_SF=y ++CONFIG_CMD_NAND=y ++CONFIG_CMD_NAND_TRIMFFS=y ++CONFIG_LMB_MAX_REGIONS=64 ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.254" +--- /dev/null ++++ b/configs/mt7988a_bananapi_bpi-r4-poe-sdmmc_defconfig +@@ -0,0 +1,180 @@ ++CONFIG_ARM=y ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y ++CONFIG_POSITION_INDEPENDENT=y ++CONFIG_ARCH_MEDIATEK=y ++CONFIG_TEXT_BASE=0x41e00000 ++CONFIG_SYS_MALLOC_F_LEN=0x4000 ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_SYS_PROMPT="MT7988> " ++CONFIG_TARGET_MT7988=y ++CONFIG_DEBUG_UART_BASE=0x11000000 ++CONFIG_DEBUG_UART_CLOCK=40000000 ++CONFIG_SYS_LOAD_ADDR=0x50000000 ++CONFIG_DEBUG_UART=y ++CONFIG_SYS_CBSIZE=512 ++CONFIG_SYS_PBSIZE=1049 ++CONFIG_DEFAULT_DEVICE_TREE="mt7988a-bananapi-bpi-r4-sd" ++CONFIG_DEFAULT_ENV_FILE="bananapi_bpi-r4-poe_sdmmc_env" ++CONFIG_DEFAULT_FDT_FILE="mediatek/mt7988a-bpi-r4-sd.dtb" ++CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_OF_SYSTEM_SETUP=y ++CONFIG_SMBIOS_PRODUCT_NAME="" ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_CFB_CONSOLE_ANSI=y ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y ++CONFIG_GPIO_HOG=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_FIT=y ++CONFIG_FIT_ENABLE_SHA256_SUPPORT=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y ++CONFIG_LOGLEVEL=7 ++CONFIG_LOG=y ++CONFIG_CMD_BOOTMENU=y ++CONFIG_CMD_BOOTP=y ++CONFIG_CMD_BUTTON=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_CPU=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DM=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_ECHO=y ++CONFIG_CMD_ENV_READMEM=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_EXT4=y ++CONFIG_CMD_FAT=y ++CONFIG_CMD_FDT=y ++CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_GPT=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_ITEST=y ++CONFIG_CMD_LED=y ++CONFIG_CMD_LICENSE=y ++CONFIG_CMD_LINK_LOCAL=y ++# CONFIG_CMD_MBR is not set ++CONFIG_CMD_MMC=y ++CONFIG_CMD_MTD=y ++CONFIG_CMD_PCI=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_PING=y ++CONFIG_CMD_PXE=y ++CONFIG_CMD_PWM=y ++CONFIG_CMD_SMC=y ++CONFIG_CMD_TFTPBOOT=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_UBI=y ++CONFIG_CMD_UBI_RENAME=y ++CONFIG_CMD_UBIFS=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_PART=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_SETEXPR=y ++CONFIG_CMD_SLEEP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_SOURCE=y ++CONFIG_CMD_STRINGS=y ++CONFIG_CMD_USB=y ++CONFIG_CMD_UUID=y ++CONFIG_DISPLAY_CPUINFO=y ++CONFIG_DM_MMC=y ++CONFIG_DM_MTD=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_DM_USB=y ++CONFIG_DM_PWM=y ++CONFIG_PWM_MTK=y ++CONFIG_HUSH_PARSER=y ++CONFIG_SYS_REDUNDAND_ENVIRONMENT=y ++CONFIG_SYS_RELOC_GD_ENV_ADDR=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_PARTITION_UUIDS=y ++CONFIG_NETCONSOLE=y ++CONFIG_DM_GPIO=y ++CONFIG_DM_SCSI=y ++CONFIG_AHCI=y ++CONFIG_AHCI_PCI=y ++CONFIG_SCSI_AHCI=y ++CONFIG_SCSI=y ++CONFIG_CMD_SCSI=y ++CONFIG_PHY=y ++CONFIG_PHY_MTK_TPHY=y ++CONFIG_MTK_AHCI=y ++CONFIG_PCI=y ++CONFIG_MTD=y ++CONFIG_MTD_UBI_FASTMAP=y ++CONFIG_DM_PCI=y ++CONFIG_PCIE_MEDIATEK=y ++CONFIG_PRE_CONSOLE_BUFFER=y ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 ++CONFIG_RAM=y ++CONFIG_DM_SERIAL=y ++CONFIG_MTK_SERIAL=y ++CONFIG_MMC=y ++CONFIG_MMC_DEFAULT_DEV=1 ++CONFIG_MMC_SUPPORTS_TUNING=y ++CONFIG_SPI=y ++CONFIG_DM_SPI=y ++CONFIG_MTK_SPI_NAND=y ++CONFIG_MTK_SPI_NAND_MTD=y ++CONFIG_SYSRESET_WATCHDOG=y ++CONFIG_WDT_MTK=y ++CONFIG_LZO=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y ++CONFIG_RANDOM_UUID=y ++CONFIG_REGEX=y ++CONFIG_USB=y ++CONFIG_USB_HOST=y ++CONFIG_USB_XHCI_HCD=y ++CONFIG_USB_XHCI_MTK=y ++CONFIG_USB_STORAGE=y ++CONFIG_OF_EMBED=y ++CONFIG_ENV_OVERWRITE=y ++CONFIG_ENV_IS_IN_MMC=y ++CONFIG_ENV_OFFSET=0x400000 ++CONFIG_ENV_OFFSET_REDUND=0x440000 ++CONFIG_ENV_SIZE=0x40000 ++CONFIG_ENV_SIZE_REDUND=0x40000 ++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_NET_RANDOM_ETHADDR=y ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_CLK=y ++CONFIG_SUPPORT_EMMC_BOOT=y ++CONFIG_MMC_HS200_SUPPORT=y ++CONFIG_MMC_MTK=y ++CONFIG_PHY_FIXED=y ++CONFIG_DM_ETH=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7988=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_USE_DEFAULT_ENV_FILE=y ++CONFIG_MTD_SPI_NAND=y ++CONFIG_MTK_SPIM=y ++#CONFIG_MTK_SNOR=y ++CONFIG_DM_SPI_FLASH=y ++CONFIG_SPI_FLASH_MTD=y ++CONFIG_SPI_FLASH_WINBOND=y ++# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set ++CONFIG_CMD_SF=y ++CONFIG_CMD_NAND=y ++CONFIG_CMD_NAND_TRIMFFS=y ++CONFIG_LMB_MAX_REGIONS=64 ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.254" +--- /dev/null ++++ b/configs/mt7988a_bananapi_bpi-r4-poe-snand_defconfig +@@ -0,0 +1,182 @@ ++CONFIG_ARM=y ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y ++CONFIG_POSITION_INDEPENDENT=y ++CONFIG_ARCH_MEDIATEK=y ++CONFIG_TEXT_BASE=0x41e00000 ++CONFIG_SYS_MALLOC_F_LEN=0x4000 ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_SYS_PROMPT="MT7988> " ++CONFIG_TARGET_MT7988=y ++CONFIG_DEBUG_UART_BASE=0x11000000 ++CONFIG_DEBUG_UART_CLOCK=40000000 ++CONFIG_SYS_LOAD_ADDR=0x50000000 ++CONFIG_DEBUG_UART=y ++CONFIG_SYS_CBSIZE=512 ++CONFIG_SYS_PBSIZE=1049 ++CONFIG_DEFAULT_DEVICE_TREE="mt7988a-bananapi-bpi-r4-emmc" ++CONFIG_DEFAULT_ENV_FILE="bananapi_bpi-r4-poe_snand_env" ++CONFIG_DEFAULT_FDT_FILE="mediatek/mt7988a-bpi-r4-emmc.dtb" ++CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_OF_SYSTEM_SETUP=y ++CONFIG_SMBIOS_PRODUCT_NAME="" ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_CFB_CONSOLE_ANSI=y ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y ++CONFIG_GPIO_HOG=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_FIT=y ++CONFIG_FIT_ENABLE_SHA256_SUPPORT=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y ++CONFIG_LOGLEVEL=7 ++CONFIG_LOG=y ++CONFIG_CMD_BOOTMENU=y ++CONFIG_CMD_BOOTP=y ++CONFIG_CMD_BUTTON=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_CPU=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DM=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_ECHO=y ++CONFIG_CMD_ENV_READMEM=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_EXT4=y ++CONFIG_CMD_FAT=y ++CONFIG_CMD_FDT=y ++CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_GPT=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_ITEST=y ++CONFIG_CMD_LED=y ++CONFIG_CMD_LICENSE=y ++CONFIG_CMD_LINK_LOCAL=y ++# CONFIG_CMD_MBR is not set ++CONFIG_CMD_MMC=y ++CONFIG_CMD_MTD=y ++CONFIG_CMD_PCI=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_PING=y ++CONFIG_CMD_PXE=y ++CONFIG_CMD_PWM=y ++CONFIG_CMD_SMC=y ++CONFIG_CMD_TFTPBOOT=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_UBI=y ++CONFIG_CMD_UBI_RENAME=y ++CONFIG_CMD_UBIFS=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_PART=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_SETEXPR=y ++CONFIG_CMD_SLEEP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_SOURCE=y ++CONFIG_CMD_STRINGS=y ++CONFIG_CMD_USB=y ++CONFIG_CMD_UUID=y ++CONFIG_DISPLAY_CPUINFO=y ++CONFIG_DM_MMC=y ++CONFIG_DM_MTD=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_DM_USB=y ++CONFIG_DM_PWM=y ++CONFIG_PWM_MTK=y ++CONFIG_HUSH_PARSER=y ++CONFIG_SYS_REDUNDAND_ENVIRONMENT=y ++CONFIG_SYS_RELOC_GD_ENV_ADDR=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_PARTITION_UUIDS=y ++CONFIG_NETCONSOLE=y ++CONFIG_DM_GPIO=y ++CONFIG_DM_SCSI=y ++CONFIG_AHCI=y ++CONFIG_AHCI_PCI=y ++CONFIG_SCSI_AHCI=y ++CONFIG_SCSI=y ++CONFIG_CMD_SCSI=y ++CONFIG_PHY=y ++CONFIG_PHY_MTK_TPHY=y ++CONFIG_MTK_AHCI=y ++CONFIG_PCI=y ++CONFIG_MTD=y ++CONFIG_MTD_UBI_FASTMAP=y ++CONFIG_DM_PCI=y ++CONFIG_PCIE_MEDIATEK=y ++CONFIG_PINCTRL_MT7988=y ++CONFIG_PRE_CONSOLE_BUFFER=y ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 ++CONFIG_RAM=y ++CONFIG_DM_SERIAL=y ++CONFIG_MTK_SERIAL=y ++CONFIG_MMC=y ++CONFIG_MMC_DEFAULT_DEV=1 ++CONFIG_MMC_SUPPORTS_TUNING=y ++CONFIG_SPI=y ++CONFIG_DM_SPI=y ++CONFIG_MTK_SPI_NAND=y ++CONFIG_MTK_SPI_NAND_MTD=y ++CONFIG_SYSRESET_WATCHDOG=y ++CONFIG_WDT_MTK=y ++CONFIG_LZO=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y ++CONFIG_RANDOM_UUID=y ++CONFIG_REGEX=y ++CONFIG_USB=y ++CONFIG_USB_HOST=y ++CONFIG_USB_XHCI_HCD=y ++CONFIG_USB_XHCI_MTK=y ++CONFIG_USB_STORAGE=y ++CONFIG_OF_EMBED=y ++CONFIG_ENV_OVERWRITE=y ++CONFIG_ENV_IS_IN_UBI=y ++CONFIG_ENV_UBI_PART="ubi" ++CONFIG_ENV_SIZE=0x1f000 ++CONFIG_ENV_SIZE_REDUND=0x1f000 ++CONFIG_ENV_UBI_VOLUME="ubootenv" ++CONFIG_ENV_UBI_VOLUME_REDUND="ubootenv2" ++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_NET_RANDOM_ETHADDR=y ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_CLK=y ++CONFIG_SUPPORT_EMMC_BOOT=y ++CONFIG_MMC_HS200_SUPPORT=y ++CONFIG_MMC_MTK=y ++CONFIG_PHY_FIXED=y ++CONFIG_DM_ETH=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7988=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_USE_DEFAULT_ENV_FILE=y ++CONFIG_MTD_SPI_NAND=y ++CONFIG_MTK_SPIM=y ++#CONFIG_MTK_SNOR=y ++CONFIG_DM_SPI_FLASH=y ++CONFIG_SPI_FLASH_MTD=y ++CONFIG_SPI_FLASH_WINBOND=y ++# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set ++CONFIG_CMD_SF=y ++CONFIG_CMD_NAND=y ++CONFIG_CMD_NAND_TRIMFFS=y ++CONFIG_LMB_MAX_REGIONS=64 ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.254" +--- /dev/null ++++ b/bananapi_bpi-r4-poe_emmc_env +@@ -0,0 +1,57 @@ ++ipaddr=192.168.1.1 ++serverip=192.168.1.254 ++loadaddr=0x50000000 ++bootargs=console=ttyS0,115200n1 pci=pcie_bus_perf root=/dev/fit0 rootwait ++bootcmd=if pstore check ; then run boot_recovery ; else run boot_emmc ; fi ++bootconf=config-mt7988a-bananapi-bpi-r4-poe ++bootconf_base=config-mt7988a-bananapi-bpi-r4-poe ++bootconf_emmc=mt7988a-bananapi-bpi-r4-emmc ++bootconf_extra= ++bootdelay=0 ++bootfile=openwrt-mediatek-filogic-bananapi_bpi-r4-poe-initramfs-recovery.itb ++bootfile_bl2=openwrt-mediatek-filogic-bananapi_bpi-r4-poe-emmc-preloader.bin ++bootfile_fip=openwrt-mediatek-filogic-bananapi_bpi-r4-poe-emmc-bl31-uboot.fip ++bootfile_upg=openwrt-mediatek-filogic-bananapi_bpi-r4-poe-squashfs-sysupgrade.itb ++bootled_pwr=green:status ++bootled_rec=blue:status ++bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60 ++bootmenu_default=0 ++bootmenu_delay=0 ++bootmenu_title= ( ( ( OpenWrt ) ) ) [eMMC] ++bootmenu_0=Initialize environment.=run _firstboot ++bootmenu_0d=Run default boot command.=run boot_default ++bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return ++bootmenu_2=Boot production system from eMMC.=run boot_production ; run bootmenu_confirm_return ++bootmenu_3=Boot recovery system from eMMC.=run boot_recovery ; run bootmenu_confirm_return ++bootmenu_4=Load production system via TFTP then write to eMMC.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_production ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_5=Load recovery system via TFTP then write to eMMC.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_recovery ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_6=Load BL31+U-Boot FIP via TFTP then write to eMMC.=run boot_tftp_write_fip ; run bootmenu_confirm_return ++bootmenu_7=Load BL2 preloader via TFTP then write to eMMC.=run boot_tftp_write_bl2 ; run bootmenu_confirm_return ++bootmenu_8=Reboot.=reset ++bootmenu_9=Reset all settings to factory defaults.=run reset_factory ; reset ++boot_first=if button reset ; then led $bootled_rec on ; run boot_tftp_recovery ; setenv flag_recover 1 ; run boot_default ; fi ; bootmenu ++boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_recovery ; setenv replacevol 1 ; run boot_tftp_forever ++boot_production=led $bootled_pwr on ; run emmc_read_production && bootm $loadaddr#$bootconf#$bootconf_emmc#$bootconf_extra ; led $bootled_pwr off ++boot_recovery=led $bootled_rec on ; run emmc_read_recovery && bootm $loadaddr#$bootconf#$bootconf_emmc#$bootconf_extra ; led $bootled_rec off ++boot_emmc=run boot_production ; run boot_recovery ++boot_tftp_forever=led $bootled_rec on ; while true ; do run boot_tftp_recovery ; sleep 1 ; done ++boot_tftp_production=tftpboot $loadaddr $bootfile_upg && env exists replacevol && iminfo $loadaddr && run emmc_write_production ; if env exists noboot ; then else bootm $loadaddr#$bootconf#$bootconf_emmc#$bootconf_extra ; fi ++boot_tftp_recovery=tftpboot $loadaddr $bootfile && env exists replacevol && iminfo $loadaddr && run emmc_write_recovery ; if env exists noboot ; then else bootm $loadaddr#$bootconf#$bootconf_emmc ; fi ++boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run emmc_write_fip ++boot_tftp_write_bl2=tftpboot $loadaddr $bootfile_bl2 && run emmc_write_bl2 ++boot_tftp=tftpboot $loadaddr $bootfile && bootm $loadaddr#$bootconf ++mmc_write_vol=imszb $loadaddr image_size && test 0x$image_size -le 0x$part_size && mmc erase 0x$part_addr 0x$image_size && mmc write $loadaddr 0x$part_addr 0x$image_size ++mmc_read_vol=mmc read $loadaddr $part_addr 0x100 && imszb $loadaddr image_size && test 0x$image_size -le 0x$part_size && mmc read $loadaddr 0x$part_addr 0x$image_size && setexpr filesize $image_size * 0x200 ++part_default=production ++part_recovery=recovery ++reset_factory=eraseenv && reset ++emmc_read_production=part start mmc 0 $part_default part_addr && part size mmc 0 $part_default part_size && run mmc_read_vol ++emmc_read_recovery=part start mmc 0 $part_recovery part_addr && part size mmc 0 $part_recovery part_size && run mmc_read_vol ++emmc_write_bl2=mmc partconf 0 1 1 1 && mmc erase 0x0 0x400 && mmc write $fileaddr 0x0 0x400 ; mmc partconf 0 1 1 0 ++emmc_write_fip=mmc erase 0x3400 0x2000 && mmc write $fileaddr 0x3400 0x2000 && mmc erase 0x2000 0x800 ++emmc_write_production=part start mmc 0 $part_default part_addr && part size mmc 0 $part_default part_size && run mmc_write_vol ++emmc_write_recovery=part start mmc 0 $part_recovery part_addr && part size mmc 0 $part_recovery part_size && run mmc_write_vol ++_init_env=setenv _init_env ; setenv _create_env ; saveenv ; saveenv ++_firstboot=setenv _firstboot ; run _switch_to_menu ; run _init_env ; run boot_first ++_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title ++_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" +--- /dev/null ++++ b/bananapi_bpi-r4-poe_sdmmc_env +@@ -0,0 +1,66 @@ ++ipaddr=192.168.1.1 ++serverip=192.168.1.254 ++loadaddr=0x50000000 ++bootargs=console=ttyS0,115200n1 pci=pcie_bus_perf root=/dev/fit0 rootwait ++bootcmd=if pstore check ; then run boot_recovery ; else run boot_sdmmc ; fi ++bootconf=config-mt7988a-bananapi-bpi-r4-poe ++bootconf_sd=mt7988a-bananapi-bpi-r4-sd ++bootconf_emmc=mt7988a-bananapi-bpi-r4-emmc ++bootconf_extra= ++bootdelay=0 ++bootfile=openwrt-mediatek-filogic-bananapi_bpi-r4-poe-initramfs-recovery.itb ++bootfile_upg=openwrt-mediatek-filogic-bananapi_bpi-r4-poe-squashfs-sysupgrade.itb ++bootled_pwr=green:status ++bootled_rec=blue:status ++bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60 ++bootmenu_default=0 ++bootmenu_delay=0 ++bootmenu_title= ( ( ( OpenWrt ) ) ) [SD card] ++bootmenu_0=Initialize environment.=run _firstboot ++bootmenu_0d=Run default boot command.=run boot_default ++bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return ++bootmenu_2=Boot production system from SD card.=run boot_production ; run bootmenu_confirm_return ++bootmenu_3=Boot recovery system from SD card.=run boot_recovery ; run bootmenu_confirm_return ++bootmenu_4=Load production system via TFTP then write to SD card.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_production ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_5=Load recovery system via TFTP then write to SD card.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_recovery ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_6=Install bootloader, recovery and production to NAND.=if nand info ; then run ubi_init ; else echo "NAND not detected" ; fi ; run bootmenu_confirm_return ++bootmenu_7=Reboot.=reset ++bootmenu_8=Reset all settings to factory defaults.=run reset_factory ; reset ++boot_first=if button reset ; then led $bootled_rec on ; run boot_tftp_recovery ; setenv flag_recover 1 ; run boot_default ; fi ; bootmenu ++boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_recovery ; setenv replacevol 1 ; run boot_tftp_forever ++boot_production=led $bootled_pwr on ; run sdmmc_read_production && bootm $loadaddr#$bootconf#$bootconf_sd#$bootconf_extra ; led $bootled_pwr off ++boot_recovery=led $bootled_rec on ; run sdmmc_read_recovery && bootm $loadaddr#$bootconf#$bootconf_emmc ; led $bootled_rec off ++boot_sdmmc=run boot_production ; run boot_recovery ++boot_tftp_forever=led $bootled_rec on ; while true ; do run boot_tftp_recovery ; sleep 1 ; done ++boot_tftp_production=tftpboot $loadaddr $bootfile_upg && env exists replacevol && iminfo $loadaddr && run sdmmc_write_production ; if env exists noboot ; then else bootm $loadaddr#$bootconf#$bootconf_sd#$bootconf_extra ; fi ++boot_tftp_recovery=tftpboot $loadaddr $bootfile && env exists replacevol && iminfo $loadaddr && run sdmmc_write_recovery ; if env exists noboot ; then else bootm $loadaddr#$bootconf#$bootconf_sd ; fi ++boot_tftp=tftpboot $loadaddr $bootfile && bootm $loadaddr#$bootconf#$bootconf_sd ++mmc_write_vol=imszb $loadaddr image_size && test 0x$image_size -le 0x$part_size && mmc erase 0x$part_addr 0x$image_size && mmc write $loadaddr 0x$part_addr 0x$image_size ++mmc_read_vol=mmc read $loadaddr $part_addr 0x100 && imszb $loadaddr image_size && test 0x$image_size -le 0x$part_size && mmc read $loadaddr 0x$part_addr 0x$image_size && setexpr filesize $image_size * 0x200 ++part_default=production ++part_recovery=recovery ++reset_factory=eraseenv && reset ++sdmmc_read_production=part start mmc 0 $part_default part_addr && part size mmc 0 $part_default part_size && run mmc_read_vol ++sdmmc_read_recovery=part start mmc 0 $part_recovery part_addr && part size mmc 0 $part_recovery part_size && run mmc_read_vol ++sdmmc_read_snand_bl2=part start mmc 0 install part_addr && mmc read $loadaddr $part_addr 0x400 ++sdmmc_read_snand_fip=part start mmc 0 install part_addr && setexpr offset $part_addr + 0x800 && mmc read $loadaddr $offset 0x1000 ++sdmmc_read_emmc_install=part start mmc 0 install part_addr && setexpr offset $part_addr + 0x3800 && mmc read $loadaddr $offset 0x4000 ++sdmmc_write_production=part start mmc 0 $part_default part_addr && part size mmc 0 $part_default part_size && run mmc_write_vol ++sdmmc_write_recovery=part start mmc 0 $part_recovery part_addr && part size mmc 0 $part_recovery part_size && run mmc_write_vol ++snand_write_bl2=mtd erase bl2 && mtd write bl2 $loadaddr 0x0 0x80000 && mtd write bl2 $loadaddr 0x80000 0x80000 && mtd write bl2 $loadaddr 0x100000 0x80000 && mtd write bl2 $loadaddr 0x180000 0x80000 ++ubi_create_env=ubi create ubootenv 0x100000 dynamic 1 ; ubi create ubootenv2 0x100000 dynamic 2 ++ubi_format=ubi detach ; mtd erase ubi && ubi part ubi ++ubi_init=run ubi_format && run ubi_init_bl && run ubi_create_env && run ubi_init_openwrt && run ubi_init_emmc_install ++ubi_init_openwrt=run sdmmc_read_recovery && iminfo $loadaddr && run ubi_write_recovery ; run sdmmc_read_production && iminfo $loadaddr && run ubi_write_production ++ubi_init_bl=run sdmmc_read_snand_bl2 && run snand_write_bl2 && run sdmmc_read_snand_fip && run ubi_write_fip ++ubi_init_emmc_install=run sdmmc_read_emmc_install && run ubi_write_emmc_install ++ubi_prepare_rootfs=if ubi check rootfs_data ; then else if env exists rootfs_data_max ; then ubi create rootfs_data $rootfs_data_max dynamic || ubi create rootfs_data - dynamic ; else ubi create rootfs_data - dynamic ; fi ; fi ++ubi_remove_rootfs=ubi check rootfs_data && ubi remove rootfs_data ++ubi_write_fip=run ubi_remove_rootfs ; ubi check fip && ubi remove fip ; ubi create fip 0x200000 static ; ubi write $loadaddr fip 0x200000 ++ubi_write_emmc_install=ubi check emmc_install && ubi remove emmc_install ; ubi create emmc_install 0x800000 dynamic ; ubi write $loadaddr emmc_install 0x800000 ++ubi_write_production=ubi check fit && ubi remove fit ; run ubi_remove_rootfs ; ubi create fit $filesize dynamic && ubi write $loadaddr fit $filesize ++ubi_write_recovery=ubi check recovery && ubi remove recovery ; run ubi_remove_rootfs ; ubi create recovery $filesize dynamic && ubi write $loadaddr recovery $filesize ++_init_env=setenv _init_env ; setenv _create_env ; saveenv ; saveenv ++_firstboot=setenv _firstboot ; run _switch_to_menu ; run _init_env ; run boot_first ++_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title ++_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" +--- /dev/null ++++ b/bananapi_bpi-r4-poe_snand_env +@@ -0,0 +1,67 @@ ++ipaddr=192.168.1.1 ++serverip=192.168.1.254 ++loadaddr=0x50000000 ++bootargs=console=ttyS0,115200n1 pci=pcie_bus_perf root=/dev/fit0 rootwait ubi.block=0,fit ++bootconf=config-mt7988a-bananapi-bpi-r4-poe ++bootconf_extra=mt7988a-bananapi-bpi-r4-emmc ++bootcmd=if pstore check ; then run boot_recovery ; else run boot_ubi ; fi ++bootdelay=0 ++bootfile=openwrt-mediatek-filogic-bananapi_bpi-r4-poe-initramfs-recovery.itb ++bootfile_bl2=openwrt-mediatek-filogic-bananapi_bpi-r4-poe-snand-preloader.bin ++bootfile_fip=openwrt-mediatek-filogic-bananapi_bpi-r4-poe-snand-bl31-uboot.fip ++bootfile_upg=openwrt-mediatek-filogic-bananapi_bpi-r4-poe-squashfs-sysupgrade.itb ++bootled_pwr=green:status ++bootled_rec=blue:status ++bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60 ++bootmenu_default=0 ++bootmenu_delay=0 ++bootmenu_title= ( ( ( OpenWrt ) ) ) [SPI-NAND] ++bootmenu_0=Initialize environment.=run _firstboot ++bootmenu_0d=Run default boot command.=run boot_default ++bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return ++bootmenu_2=Boot production system from NAND.=run boot_production ; run bootmenu_confirm_return ++bootmenu_3=Boot recovery system from NAND.=run boot_recovery ; run bootmenu_confirm_return ++bootmenu_4=Load production system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_production ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_5=Load recovery system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_recovery ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_6=Load BL31+U-Boot FIP via TFTP then write to NAND.=run boot_tftp_write_fip ; run bootmenu_confirm_return ++bootmenu_7=Load BL2 preloader via TFTP then write to NAND.=run boot_tftp_write_bl2 ; run bootmenu_confirm_return ++bootmenu_8=Install bootloader, recovery and production to eMMC.=if mmc partconf 0 ; then run emmc_init ; else echo "eMMC not detected" ; fi ; run bootmenu_confirm_return ++bootmenu_9=Reboot.=reset ++bootmenu_10=Reset all settings to factory defaults.=run reset_factory ; reset ++boot_first=if button reset ; then led $bootled_rec on ; run boot_tftp_recovery ; setenv flag_recover 1 ; run boot_default ; fi ; bootmenu ++boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_recovery ; setenv replacevol 1 ; run boot_tftp_forever ++boot_production=led $bootled_pwr on ; run ubi_read_production && bootm $loadaddr#$bootconf#$bootconf_extra ; led $bootled_pwr off ++boot_recovery=led $bootled_rec on ; run ubi_read_recovery && bootm $loadaddr#$bootconf ; led $bootled_rec off ++boot_ubi=run boot_production ; run boot_recovery ++boot_tftp_forever=led $bootled_rec on ; while true ; do run boot_tftp_recovery ; sleep 1 ; done ++boot_tftp_production=tftpboot $loadaddr $bootfile_upg && env exists replacevol && iminfo $loadaddr && run ubi_write_production ; if env exists noboot ; then else bootm $loadaddr#$bootconf#$bootconf_extra ; fi ++boot_tftp_recovery=tftpboot $loadaddr $bootfile && env exists replacevol && iminfo $loadaddr && run ubi_write_recovery ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp=tftpboot $loadaddr $bootfile && bootm $loadaddr#$bootconf ++boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run ubi_write_fip && run reset_factory ++boot_tftp_write_bl2=tftpboot $loadaddr $bootfile_bl2 && run snand_write_bl2 ++part_default=production ++part_recovery=recovery ++reset_factory=ubi part ubi ; mw $loadaddr 0x0 0x800 ; ubi write $loadaddr ubootenv 0x800 ; ubi write $loadaddr ubootenv2 0x800 ++snand_write_bl2=mtd erase bl2 && mtd write bl2 $loadaddr 0x0 0x80000 && mtd write bl2 $loadaddr 0x80000 0x80000 && mtd write bl2 $loadaddr 0x100000 0x80000 && mtd write bl2 $loadaddr 0x180000 0x80000 ++ubi_create_env=ubi check ubootenv || ubi create ubootenv 0x100000 dynamic 1 ; ubi check ubootenv2 || ubi create ubootenv2 0x100000 dynamic 2 ++ubi_prepare_rootfs=if ubi check rootfs_data ; then else if env exists rootfs_data_max ; then ubi create rootfs_data $rootfs_data_max dynamic || ubi create rootfs_data - dynamic ; else ubi create rootfs_data - dynamic ; fi ; fi ++ubi_read_production=ubi read $loadaddr fit && iminfo $loadaddr && run ubi_prepare_rootfs ++ubi_read_recovery=ubi check recovery && ubi read $loadaddr recovery ++ubi_read_emmc_install=ubi check emmc_install && ubi read $loadaddr emmc_install ++ubi_remove_rootfs=ubi check rootfs_data && ubi remove rootfs_data ++ubi_write_fip=run ubi_remove_rootfs ; ubi check fip && ubi remove fip ; ubi create fip 0x200000 static ; ubi write $loadaddr fip 0x200000 ++ubi_write_production=ubi check fit && ubi remove fit ; run ubi_remove_rootfs ; ubi create fit $filesize dynamic && ubi write $loadaddr fit $filesize ++ubi_write_recovery=ubi check recovery && ubi remove recovery ; run ubi_remove_rootfs ; ubi create recovery $filesize dynamic && ubi write $loadaddr recovery $filesize ++mmc_write_vol=imszb $loadaddr image_size && test 0x$image_size -le 0x$part_size && mmc erase 0x$part_addr 0x$image_size && mmc write $loadaddr 0x$part_addr 0x$image_size ++emmc_init=mmc dev 0 && mmc bootbus 0 0 0 0 && run emmc_init_bl && run emmc_init_openwrt ; env default bootcmd ; saveenv ; saveenv ++emmc_init_bl=run ubi_read_emmc_install && setenv fileaddr $loadaddr && run emmc_write_bl2 && setexpr fileaddr $loadaddr + 0x100000 && run emmc_write_fip && setexpr fileaddr $loadaddr + 0x500000 && run emmc_write_hdr ++emmc_init_openwrt=run ubi_read_recovery && iminfo $loadaddr && run emmc_write_recovery ; run ubi_read_production && iminfo $loadaddr && run emmc_write_production ++emmc_write_bl2=mmc partconf 0 1 1 1 && mmc erase 0x0 0x400 && mmc write $fileaddr 0x0 0x400 ; mmc partconf 0 1 1 0 ++emmc_write_fip=mmc erase 0x3400 0x2000 && mmc write $fileaddr 0x3400 0x2000 && mmc erase 0x2000 0x800 ++emmc_write_hdr=mmc erase 0x0 0x40 && mmc write $fileaddr 0x0 0x40 ++emmc_write_production=part start mmc 0 $part_default part_addr && part size mmc 0 $part_default part_size && run mmc_write_vol ++emmc_write_recovery=part start mmc 0 $part_recovery part_addr && part size mmc 0 $part_recovery part_size && run mmc_write_vol ++_init_env=setenv _init_env ; run ubi_create_env ; saveenv ; saveenv ++_firstboot=setenv _firstboot ; run _switch_to_menu ; run _init_env ; run boot_first ++_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title ++_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" diff --git a/lede/package/boot/uboot-mediatek/patches/452-add-xiaomi-redmi-ax6s.patch b/lede/package/boot/uboot-mediatek/patches/452-add-xiaomi-redmi-ax6s.patch new file mode 100644 index 0000000000..28cc5d73d7 --- /dev/null +++ b/lede/package/boot/uboot-mediatek/patches/452-add-xiaomi-redmi-ax6s.patch @@ -0,0 +1,320 @@ +From 57dc777bddf0baf3c27177576c40b5113309ce54 Mon Sep 17 00:00:00 2001 +From: Chuanhong Guo +Date: Sat, 2 Mar 2024 20:30:16 +0800 +Subject: [PATCH] add xiaomi redmi ax6s + +--- + arch/arm/dts/Makefile | 1 + + .../dts/mt7622-xiaomi-redmi-router-ax6s.dts | 166 ++++++++++++++++++ + ...omi_redmi-router-ax6s-ubi-loader_defconfig | 98 +++++++++++ + xiaomi-redmi-router-ax6s-ubi-loader_env | 22 +++ + 4 files changed, 287 insertions(+) + create mode 100644 arch/arm/dts/mt7622-xiaomi-redmi-router-ax6s.dts + create mode 100644 configs/mt7622_xiaomi_redmi-router-ax6s-ubi-loader_defconfig + create mode 100644 xiaomi-redmi-router-ax6s-ubi-loader_env + +--- a/arch/arm/dts/Makefile ++++ b/arch/arm/dts/Makefile +@@ -1425,6 +1425,7 @@ dtb-$(CONFIG_ARCH_MEDIATEK) += \ + mt7622-linksys-e8450-ubi.dtb \ + mt7622-ubnt-unifi-6-lr.dtb \ + mt7622-ubnt-unifi-6-lr-v3.dtb \ ++ mt7622-xiaomi-redmi-router-ax6s.dtb \ + mt7623n-bananapi-bpi-r2.dtb \ + mt7629-rfb.dtb \ + mt7981-rfb.dtb \ +--- /dev/null ++++ b/arch/arm/dts/mt7622-xiaomi-redmi-router-ax6s.dts +@@ -0,0 +1,166 @@ ++// SPDX-License-Identifier: GPL-2.0-or-later OR MIT ++ ++/dts-v1/; ++#include ++#include ++#include "mt7622.dtsi" ++#include "mt7622-u-boot.dtsi" ++ ++/ { ++ #address-cells = <1>; ++ #size-cells = <1>; ++ model = "Xiaomi Redmi Router AX6S"; ++ compatible = "xiaomi,redmi-router-ax6s", "mediatek,mt7622"; ++ ++ chosen { ++ stdout-path = &uart0; ++ tick-timer = &timer0; ++ }; ++ ++ aliases { ++ spi0 = &snand; ++ ethernet0 = ð ++ }; ++ ++ memory@40000000 { ++ device_type = "memory"; ++ reg = <0x40000000 0x8000000>; ++ }; ++ ++ leds { ++ compatible = "gpio-leds"; ++ ++ led_power_blue: power_blue { ++ function = LED_FUNCTION_POWER; ++ color = ; ++ gpios = <&gpio 18 GPIO_ACTIVE_LOW>; ++ }; ++ ++ led_power_amber: power_amber { ++ function = LED_FUNCTION_POWER; ++ color = ; ++ gpios = <&gpio 17 GPIO_ACTIVE_LOW>; ++ }; ++ ++ led_net_blue: net_blue { ++ label = "blue:net"; ++ gpios = <&gpio 1 GPIO_ACTIVE_LOW>; ++ }; ++ ++ led_net_amber: net_amber { ++ label = "amber:net"; ++ gpios = <&gpio 16 GPIO_ACTIVE_LOW>; ++ }; ++ ++ }; ++ ++ keys { ++ compatible = "gpio-keys"; ++ ++ reset { ++ label = "reset"; ++ gpios = <&gpio 0 GPIO_ACTIVE_LOW>; ++ linux,code = ; ++ }; ++ ++ mesh { ++ label = "mesh"; ++ gpios = <&gpio 102 GPIO_ACTIVE_LOW>; ++ linux,code = ; ++ linux,input-type = ; ++ }; ++ }; ++ ++ reg_1p8v: regulator-1p8v { ++ compatible = "regulator-fixed"; ++ regulator-name = "fixed-1.8V"; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ regulator-boot-on; ++ regulator-always-on; ++ }; ++ ++ reg_3p3v: regulator-3p3v { ++ compatible = "regulator-fixed"; ++ regulator-name = "fixed-3.3V"; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-boot-on; ++ regulator-always-on; ++ }; ++}; ++ ++&pcie { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pcie0_pins>; ++ status = "okay"; ++ ++ pcie@0,0 { ++ status = "okay"; ++ }; ++}; ++ ++&pinctrl { ++ pcie0_pins: pcie0-pins { ++ mux { ++ function = "pcie"; ++ groups = "pcie0_pad_perst", ++ "pcie0_1_waken", ++ "pcie0_1_clkreq"; ++ }; ++ }; ++ ++ snfi_pins: snfi-pins { ++ mux { ++ function = "flash"; ++ groups = "snfi"; ++ }; ++ }; ++ ++ uart0_pins: uart0 { ++ mux { ++ function = "uart"; ++ groups = "uart0_0_tx_rx" ; ++ }; ++ }; ++ ++ watchdog_pins: watchdog-default { ++ mux { ++ function = "watchdog"; ++ groups = "watchdog"; ++ }; ++ }; ++}; ++ ++&snand { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&snfi_pins>; ++ quad-spi; ++ status = "okay"; ++}; ++ ++&uart0 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&uart0_pins>; ++ mediatek,force-highspeed; ++ status = "okay"; ++}; ++ ++&watchdog { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&watchdog_pins>; ++ status = "okay"; ++}; ++ ++ð { ++ status = "okay"; ++ mediatek,gmac-id = <0>; ++ phy-mode = "2500base-x"; ++ mediatek,switch = "mt7531"; ++ reset-gpios = <&gpio 54 GPIO_ACTIVE_HIGH>; ++ ++ fixed-link { ++ speed = <2500>; ++ full-duplex; ++ }; ++}; +--- /dev/null ++++ b/configs/mt7622_xiaomi_redmi-router-ax6s-ubi-loader_defconfig +@@ -0,0 +1,98 @@ ++CONFIG_ARM=y ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y ++CONFIG_POSITION_INDEPENDENT=y ++CONFIG_ARCH_MEDIATEK=y ++CONFIG_TEXT_BASE=0x41e00000 ++CONFIG_SYS_MALLOC_F_LEN=0x4000 ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_DEFAULT_DEVICE_TREE="mt7622-xiaomi-redmi-router-ax6s" ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 ++CONFIG_DEBUG_UART_BASE=0x11002000 ++CONFIG_DEBUG_UART_CLOCK=25000000 ++CONFIG_SYS_LOAD_ADDR=0x40080000 ++CONFIG_PCI=y ++CONFIG_DEBUG_UART=y ++CONFIG_FIT=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_DEFAULT_FDT_FILE="mediatek/mt7622-xiaomi-redmi-router-ax6s" ++CONFIG_LOGLEVEL=7 ++CONFIG_PRE_CONSOLE_BUFFER=y ++CONFIG_LOG=y ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_LAST_STAGE_INIT=y ++CONFIG_HUSH_PARSER=y ++# CONFIG_AUTO_COMPLETE is not set ++CONFIG_SYS_PROMPT="MT7622> " ++CONFIG_CMD_LICENSE=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_ENV_FLAGS=y ++# CONFIG_CMD_UNLZ4 is not set ++# CONFIG_CMD_UNZIP is not set ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_MTD=y ++# CONFIG_CMD_BOOTP is not set ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_PING=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_SMC=y ++CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y ++CONFIG_CMD_MTDPARTS=y ++CONFIG_MTDPARTS_DEFAULT="mtdparts=spi-nand0:512k(preloader),2816k(reserved),117248k(ubi)" ++CONFIG_CMD_UBI=y ++CONFIG_CMD_UBI_RENAME=y ++CONFIG_DOS_PARTITION=y ++CONFIG_EFI_PARTITION=y ++CONFIG_SYS_REDUNDAND_ENVIRONMENT=y ++CONFIG_SYS_RELOC_GD_ENV_ADDR=y ++CONFIG_USE_DEFAULT_ENV_FILE=y ++CONFIG_DEFAULT_ENV_FILE="xiaomi-redmi-router-ax6s-ubi-loader_env" ++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_PROT_UDP=y ++CONFIG_BOOTP_SEND_HOSTNAME=y ++CONFIG_NET_RANDOM_ETHADDR=y ++CONFIG_NETCONSOLE=y ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.254" ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y ++CONFIG_CLK=y ++CONFIG_GPIO_HOG=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y ++# CONFIG_MMC is not set ++CONFIG_MTD=y ++CONFIG_DM_MTD=y ++CONFIG_MTK_SPI_NAND=y ++CONFIG_MTK_SPI_NAND_MTD=y ++CONFIG_UBI_SILENCE_MSG=y ++CONFIG_MTD_UBI_FASTMAP=y ++CONFIG_PHY_FIXED=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PCIE_MEDIATEK=y ++CONFIG_PHY=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7622=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_RAM=y ++CONFIG_DM_SERIAL=y ++CONFIG_MTK_SERIAL=y ++CONFIG_SPI=y ++CONFIG_DM_SPI=y ++CONFIG_UBIFS_SILENCE_MSG=y ++CONFIG_LZ4=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y +--- /dev/null ++++ b/xiaomi-redmi-router-ax6s-ubi-loader_env +@@ -0,0 +1,22 @@ ++ipaddr=192.168.1.1 ++serverip=192.168.1.254 ++loadaddr=0x46000000 ++console=earlycon=uart8250,mmio32,0x11002000 console=ttyS0 ++bootled_pwr=power_blue ++bootled_rec=power_amber ++bootcmd=run boot_or_recovery ++bootconf=config-1 ++bootdelay=0 ++bootfile=openwrt-mediatek-mt7622-xiaomi_redmi-router-ax6s-initramfs-recovery.itb ++bootfile_upg=openwrt-mediatek-mt7622-xiaomi_redmi-router-ax6s-squashfs-sysupgrade.itb ++boot_or_recovery=run boot_production ; led $bootled_pwr off ; led $bootled_rec on ; if ubi check fit ; then run boot_tftp_forever ; else run tftp_production ; fi ++boot_tftp=tftpboot $loadaddr $bootfile && bootm $loadaddr#$bootconf ++boot_tftp_forever=while true ; do run boot_tftp ; sleep 1 ; done ++boot_production=run ubi_read_production && bootm $loadaddr#$bootconf ++ubi_format=ubi detach ; mtd erase ubi && ubi part ubi ++ubi_init=ubi part ubi || run ubi_format ++ubi_prepare_rootfs=if ubi check rootfs_data ; then else if env exists rootfs_data_max ; then ubi create rootfs_data $rootfs_data_max dynamic || ubi create rootfs_data - dynamic ; else ubi create rootfs_data - dynamic ; fi ; fi ++ubi_remove_rootfs=ubi check rootfs_data && ubi remove rootfs_data ++ubi_write_production=ubi check fit && ubi remove fit ; run ubi_remove_rootfs ; ubi create fit $filesize dynamic 2 && ubi write $loadaddr fit $filesize ++ubi_read_production=run ubi_init && ubi read $loadaddr fit && iminfo $loadaddr && run ubi_prepare_rootfs ++tftp_production=tftpboot $loadaddr $bootfile_upg && iminfo $loadaddr && run ubi_write_production && reset diff --git a/lede/package/boot/uboot-mediatek/patches/453-add-openwrt-one.patch b/lede/package/boot/uboot-mediatek/patches/453-add-openwrt-one.patch new file mode 100644 index 0000000000..25d2733d1c --- /dev/null +++ b/lede/package/boot/uboot-mediatek/patches/453-add-openwrt-one.patch @@ -0,0 +1,3949 @@ +--- /dev/null ++++ b/arch/arm/dts/openwrt-one.dts +@@ -0,0 +1,203 @@ ++// SPDX-License-Identifier: GPL-2.0 ++/* ++ * Copyright (c) 2024 John Crispin ++ */ ++ ++/dts-v1/; ++#include "mt7981.dtsi" ++#include ++#include ++ ++/ { ++ #address-cells = <1>; ++ #size-cells = <1>; ++ model = "OpenWrt One"; ++ compatible = "openwrt,one", "mediatek,mt7981"; ++ chosen { ++ stdout-path = &uart0; ++ tick-timer = &timer0; ++ }; ++ ++ memory@40000000 { ++ device_type = "memory"; ++ reg = <0x40000000 0x10000000>; ++ }; ++ ++ keys { ++ compatible = "gpio-keys"; ++ ++ user { ++ label = "front"; ++ gpios = <&gpio 0 GPIO_ACTIVE_LOW>; ++ linux,code = ; ++ }; ++ ++ reset { ++ label = "back"; ++ gpios = <&gpio 1 GPIO_ACTIVE_LOW>; ++ linux,code = ; ++ }; ++ }; ++ ++ leds { ++ compatible = "gpio-leds"; ++ ++ red { ++ label = "red"; ++ gpios = <&gpio 9 GPIO_ACTIVE_HIGH>; ++ }; ++ ++ white { ++ label = "white"; ++ gpios = <&gpio 13 GPIO_ACTIVE_HIGH>; ++ }; ++ ++ green { ++ label = "green"; ++ gpios = <&gpio 15 GPIO_ACTIVE_HIGH>; ++ }; ++ }; ++}; ++ ++&uart0 { ++ status = "okay"; ++}; ++ ++ð { ++ status = "okay"; ++ mediatek,gmac-id = <1>; ++ phy-mode = "gmii"; ++ phy-handle = <&phy0>; ++ ++ phy0: eth-phy@0 { ++ compatible = "ethernet-phy-ieee802.3-c22"; ++ reg = <0>; ++ }; ++}; ++ ++&pinctrl { ++ spi_flash_pins: spi0-pins-func-1 { ++ mux { ++ function = "flash"; ++ groups = "spi0", "spi0_wp_hold"; ++ }; ++ ++ conf-pu { ++ pins = "SPI0_CS", "SPI0_HOLD", "SPI0_WP"; ++ drive-strength = ; ++ bias-pull-up = ; ++ }; ++ ++ conf-pd { ++ pins = "SPI0_CLK", "SPI0_MOSI", "SPI0_MISO"; ++ drive-strength = ; ++ bias-pull-down = ; ++ }; ++ }; ++ ++ spi2_flash_pins: spi2-spi2-pins { ++ mux { ++ function = "spi"; ++ groups = "spi2", "spi2_wp_hold"; ++ }; ++ ++ conf-pu { ++ pins = "SPI2_CS", "SPI2_HOLD", "SPI2_WP"; ++ drive-strength = ; ++ bias-pull-down = ; ++ }; ++ ++ conf-pd { ++ pins = "SPI2_CLK", "SPI2_MOSI", "SPI2_MISO"; ++ drive-strength = ; ++ bias-pull-down = ; ++ }; ++ }; ++}; ++ ++&spi0 { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&spi_flash_pins>; ++ status = "okay"; ++ must_tx; ++ enhance_timing; ++ dma_ext; ++ ipm_design; ++ support_quad; ++ tick_dly = <2>; ++ sample_sel = <0>; ++ ++ spi_nand@0 { ++ compatible = "spi-nand"; ++ reg = <0>; ++ spi-max-frequency = <52000000>; ++ ++ partitions { ++ compatible = "fixed-partitions"; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ partition@0 { ++ label = "bl2"; ++ reg = <0x0 0x100000>; ++ }; ++ ++ partition@200000 { ++ label = "ubi"; ++ reg = <0x100000 0x7f00000>; ++ }; ++ }; ++ }; ++}; ++ ++&spi2 { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&spi2_flash_pins>; ++ status = "okay"; ++ must_tx; ++ enhance_timing; ++ dma_ext; ++ ipm_design; ++ tick_dly = <2>; ++ sample_sel = <0>; ++ ++ spi_nor@0 { ++ compatible = "jedec,spi-nor"; ++ reg = <0>; ++ spi-max-frequency = <5000000>; ++ ++ partitions { ++ compatible = "fixed-partitions"; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ partition@00000 { ++ label = "bl2-nor"; ++ reg = <0x00000 0x0040000>; ++ }; ++ ++ partition@40000 { ++ label = "factory"; ++ reg = <0x40000 0x00C0000>; ++ }; ++ ++ partition@100000 { ++ label = "fip-nor"; ++ reg = <0x100000 0x0080000>; ++ }; ++ ++ partition@180000 { ++ label = "recovery"; ++ reg = <0x180000 0xc80000>; ++ }; ++ }; ++ }; ++}; ++ ++&watchdog { ++ status = "disabled"; ++}; +--- /dev/null ++++ b/configs/mt7981_openwrt-one-nor_defconfig +@@ -0,0 +1,1811 @@ ++# ++# Automatically generated file; DO NOT EDIT. ++# U-Boot 2024.01 Configuration ++# ++ ++# ++# Compiler: aarch64-openwrt-linux-musl-gcc (OpenWrt GCC 13.2.0 r26144+12-219018185e) 13.2.0 ++# ++CONFIG_CREATE_ARCH_SYMLINK=y ++CONFIG_SYS_CACHE_SHIFT_6=y ++CONFIG_SYS_CACHELINE_SIZE=64 ++CONFIG_LINKER_LIST_ALIGN=8 ++# CONFIG_ARC is not set ++CONFIG_ARM=y ++# CONFIG_M68K is not set ++# CONFIG_MICROBLAZE is not set ++# CONFIG_MIPS is not set ++# CONFIG_NIOS2 is not set ++# CONFIG_PPC is not set ++# CONFIG_RISCV is not set ++# CONFIG_SANDBOX is not set ++# CONFIG_SH is not set ++# CONFIG_X86 is not set ++# CONFIG_XTENSA is not set ++CONFIG_SYS_ARCH="arm" ++CONFIG_SYS_CPU="armv8" ++CONFIG_SYS_SOC="mediatek" ++CONFIG_SYS_VENDOR="mediatek" ++CONFIG_SYS_BOARD="mt7981" ++CONFIG_SYS_CONFIG_NAME="mt7981" ++ ++# ++# Skipping low level initialization functions ++# ++# CONFIG_SKIP_LOWLEVEL_INIT is not set ++# CONFIG_SKIP_LOWLEVEL_INIT_ONLY is not set ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y ++CONFIG_SYS_NONCACHED_MEMORY=0x100000 ++# CONFIG_SYS_ICACHE_OFF is not set ++# CONFIG_SYS_DCACHE_OFF is not set ++ ++# ++# ARM architecture ++# ++CONFIG_ARM64=y ++CONFIG_ARM64_CRC32=y ++CONFIG_COUNTER_FREQUENCY=0 ++CONFIG_POSITION_INDEPENDENT=y ++CONFIG_INIT_SP_RELATIVE=y ++CONFIG_SYS_INIT_SP_BSS_OFFSET=524288 ++# CONFIG_GIC_V3_ITS is not set ++CONFIG_STATIC_RELA=y ++CONFIG_DMA_ADDR_T_64BIT=y ++CONFIG_GPIO_EXTRA_HEADER=y ++CONFIG_ARM_ASM_UNIFIED=y ++# CONFIG_SYS_ARM_CACHE_CP15 is not set ++# CONFIG_SYS_ARM_MMU is not set ++# CONFIG_SYS_ARM_MPU is not set ++CONFIG_SYS_ARM_ARCH=8 ++CONFIG_SYS_ARM_CACHE_WRITEBACK=y ++# CONFIG_SYS_ARM_CACHE_WRITETHROUGH is not set ++# CONFIG_SYS_ARM_CACHE_WRITEALLOC is not set ++# CONFIG_ARCH_CPU_INIT is not set ++CONFIG_SYS_ARCH_TIMER=y ++CONFIG_ARM_SMCCC=y ++# CONFIG_SYS_L2_PL310 is not set ++# CONFIG_SPL_SYS_L2_PL310 is not set ++# CONFIG_SYS_L2CACHE_OFF is not set ++# CONFIG_ENABLE_ARM_SOC_BOOT0_HOOK is not set ++# CONFIG_USE_ARCH_MEMCPY is not set ++# CONFIG_USE_ARCH_MEMSET is not set ++CONFIG_ARM64_SUPPORT_AARCH32=y ++# CONFIG_ARCH_AT91 is not set ++# CONFIG_ARCH_DAVINCI is not set ++# CONFIG_ARCH_HISTB is not set ++# CONFIG_ARCH_KIRKWOOD is not set ++# CONFIG_ARCH_MVEBU is not set ++# CONFIG_ARCH_ORION5X is not set ++# CONFIG_TARGET_STV0991 is not set ++# CONFIG_ARCH_BCM283X is not set ++# CONFIG_ARCH_BCMSTB is not set ++# CONFIG_ARCH_BCMBCA is not set ++# CONFIG_TARGET_VEXPRESS_CA9X4 is not set ++# CONFIG_TARGET_BCMNS is not set ++# CONFIG_TARGET_BCMNS2 is not set ++# CONFIG_TARGET_BCMNS3 is not set ++# CONFIG_ARCH_EXYNOS is not set ++# CONFIG_ARCH_S5PC1XX is not set ++# CONFIG_ARCH_HIGHBANK is not set ++# CONFIG_ARCH_INTEGRATOR is not set ++# CONFIG_ARCH_IPQ40XX is not set ++# CONFIG_ARCH_KEYSTONE is not set ++# CONFIG_ARCH_K3 is not set ++# CONFIG_ARCH_OMAP2PLUS is not set ++# CONFIG_ARCH_MESON is not set ++CONFIG_ARCH_MEDIATEK=y ++# CONFIG_ARCH_LPC32XX is not set ++# CONFIG_ARCH_IMX8 is not set ++# CONFIG_ARCH_IMX8M is not set ++# CONFIG_ARCH_IMX8ULP is not set ++# CONFIG_ARCH_IMX9 is not set ++# CONFIG_ARCH_IMXRT is not set ++# CONFIG_ARCH_MX23 is not set ++# CONFIG_ARCH_MX28 is not set ++# CONFIG_ARCH_MX31 is not set ++# CONFIG_ARCH_MX7ULP is not set ++# CONFIG_ARCH_MX7 is not set ++# CONFIG_ARCH_MX6 is not set ++# CONFIG_ARCH_MX5 is not set ++# CONFIG_ARCH_NEXELL is not set ++# CONFIG_ARCH_NPCM is not set ++# CONFIG_ARCH_APPLE is not set ++# CONFIG_ARCH_OWL is not set ++# CONFIG_ARCH_QEMU is not set ++# CONFIG_ARCH_RMOBILE is not set ++# CONFIG_ARCH_SNAPDRAGON is not set ++# CONFIG_ARCH_SOCFPGA is not set ++# CONFIG_ARCH_SUNXI is not set ++# CONFIG_ARCH_U8500 is not set ++# CONFIG_ARCH_VERSAL is not set ++# CONFIG_ARCH_VERSAL_NET is not set ++# CONFIG_ARCH_VF610 is not set ++# CONFIG_ARCH_ZYNQ is not set ++# CONFIG_ARCH_ZYNQMP_R5 is not set ++# CONFIG_ARCH_ZYNQMP is not set ++# CONFIG_ARCH_TEGRA is not set ++# CONFIG_ARCH_VEXPRESS64 is not set ++# CONFIG_TARGET_CORSTONE1000 is not set ++# CONFIG_TARGET_TOTAL_COMPUTE is not set ++# CONFIG_TARGET_LS2080A_EMU is not set ++# CONFIG_TARGET_LS1088AQDS is not set ++# CONFIG_TARGET_LS2080AQDS is not set ++# CONFIG_TARGET_LS2080ARDB is not set ++# CONFIG_TARGET_LS2081ARDB is not set ++# CONFIG_TARGET_LX2160ARDB is not set ++# CONFIG_TARGET_LX2160AQDS is not set ++# CONFIG_TARGET_LX2162AQDS is not set ++# CONFIG_TARGET_HIKEY is not set ++# CONFIG_TARGET_HIKEY960 is not set ++# CONFIG_TARGET_POPLAR is not set ++# CONFIG_TARGET_LS1012AQDS is not set ++# CONFIG_TARGET_LS1012ARDB is not set ++# CONFIG_TARGET_LS1012A2G5RDB is not set ++# CONFIG_TARGET_LS1012AFRWY is not set ++# CONFIG_TARGET_LS1012AFRDM is not set ++# CONFIG_TARGET_LS1028AQDS is not set ++# CONFIG_TARGET_LS1028ARDB is not set ++# CONFIG_TARGET_LS1088ARDB is not set ++# CONFIG_TARGET_LS1021AQDS is not set ++# CONFIG_TARGET_LS1021ATWR is not set ++# CONFIG_TARGET_PG_WCOM_SELI8 is not set ++# CONFIG_TARGET_PG_WCOM_EXPU1 is not set ++# CONFIG_TARGET_LS1021ATSN is not set ++# CONFIG_TARGET_LS1021AIOT is not set ++# CONFIG_TARGET_LS1043AQDS is not set ++# CONFIG_TARGET_LS1043ARDB is not set ++# CONFIG_TARGET_LS1046AQDS is not set ++# CONFIG_TARGET_LS1046ARDB is not set ++# CONFIG_TARGET_LS1046AFRWY is not set ++# CONFIG_TARGET_SL28 is not set ++# CONFIG_TARGET_TEN64 is not set ++# CONFIG_ARCH_UNIPHIER is not set ++# CONFIG_ARCH_SYNQUACER is not set ++# CONFIG_ARCH_STM32 is not set ++# CONFIG_ARCH_STI is not set ++# CONFIG_ARCH_STM32MP is not set ++# CONFIG_ARCH_ROCKCHIP is not set ++# CONFIG_ARCH_OCTEONTX is not set ++# CONFIG_ARCH_OCTEONTX2 is not set ++# CONFIG_TARGET_THUNDERX_88XX is not set ++# CONFIG_ARCH_ASPEED is not set ++# CONFIG_TARGET_DURIAN is not set ++# CONFIG_TARGET_POMELO is not set ++# CONFIG_TARGET_PRESIDIO_ASIC is not set ++# CONFIG_TARGET_XENGUEST_ARM64 is not set ++# CONFIG_ARCH_GXP is not set ++# CONFIG_STATIC_MACH_TYPE is not set ++CONFIG_TEXT_BASE=0x41e00000 ++CONFIG_SYS_MALLOC_LEN=0x400000 ++CONFIG_SYS_MALLOC_F_LEN=0x4000 ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_ENV_SOURCE_FILE="" ++CONFIG_SF_DEFAULT_SPEED=1000000 ++CONFIG_SF_DEFAULT_MODE=0x0 ++CONFIG_ENV_SIZE=0x8000 ++CONFIG_DM_GPIO=y ++CONFIG_DEFAULT_DEVICE_TREE="openwrt-one" ++CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_MULTI_DTB_FIT_UNCOMPRESS_SZ=0x8000 ++CONFIG_DM_RESET=y ++CONFIG_SYS_MONITOR_LEN=0 ++# CONFIG_MT8512 is not set ++# CONFIG_TARGET_MT7622 is not set ++# CONFIG_TARGET_MT7623 is not set ++# CONFIG_TARGET_MT7629 is not set ++CONFIG_TARGET_MT7981=y ++# CONFIG_TARGET_MT7986 is not set ++# CONFIG_TARGET_MT7988 is not set ++# CONFIG_TARGET_MT8183 is not set ++# CONFIG_TARGET_MT8512 is not set ++# CONFIG_TARGET_MT8516 is not set ++# CONFIG_TARGET_MT8518 is not set ++CONFIG_MTK_BROM_HEADER_INFO="media=snand;nandinfo=2k+64" ++CONFIG_RESET_BUTTON_LABEL="back" ++CONFIG_RESET_BUTTON_SETTLE_DELAY=0 ++CONFIG_ERR_PTR_OFFSET=0x0 ++# CONFIG_SPL is not set ++CONFIG_BOOTSTAGE_STASH_ADDR=0x0 ++CONFIG_DEBUG_UART_BASE=0x11002000 ++CONFIG_DEBUG_UART_CLOCK=40000000 ++# CONFIG_DEBUG_UART_BOARD_INIT is not set ++CONFIG_IDENT_STRING="" ++CONFIG_SYS_CLK_FREQ=0 ++# CONFIG_CHIP_DIP_SCAN is not set ++# CONFIG_CMO_BY_VA_ONLY is not set ++# CONFIG_ARMV8_MULTIENTRY is not set ++# CONFIG_ARMV8_SET_SMPEN is not set ++# CONFIG_ARMV8_SWITCH_TO_EL1 is not set ++ ++# ++# ARMv8 secure monitor firmware ++# ++# CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT is not set ++CONFIG_PSCI_RESET=y ++# CONFIG_ARMV8_PSCI is not set ++# CONFIG_ARMV8_EA_EL3_FIRST is not set ++# CONFIG_ARMV8_CRYPTO is not set ++# CONFIG_CMD_DEKBLOB is not set ++# CONFIG_IMX_CAAM_DEK_ENCAP is not set ++# CONFIG_IMX_OPTEE_DEK_ENCAP is not set ++# CONFIG_IMX_SECO_DEK_ENCAP is not set ++# CONFIG_IMX_ELE_DEK_ENCAP is not set ++# CONFIG_CMD_HDMIDETECT is not set ++CONFIG_IMX_DCD_ADDR=0x00910000 ++CONFIG_SYS_MEM_TOP_HIDE=0x0 ++CONFIG_SYS_LOAD_ADDR=0x46000000 ++ ++# ++# ARM debug ++# ++CONFIG_BUILD_TARGET="" ++# CONFIG_PCI is not set ++CONFIG_FWU_NUM_BANKS=2 ++CONFIG_FWU_NUM_IMAGES_PER_BANK=2 ++CONFIG_DEBUG_UART=y ++# CONFIG_AHCI is not set ++# CONFIG_OF_BOARD_FIXUP is not set ++ ++# ++# Functionality shared between NXP SoCs ++# ++# CONFIG_NXP_ESBC is not set ++ ++# ++# General setup ++# ++CONFIG_LOCALVERSION="" ++CONFIG_LOCALVERSION_AUTO=y ++CONFIG_CC_IS_GCC=y ++CONFIG_GCC_VERSION=130200 ++CONFIG_CLANG_VERSION=0 ++CONFIG_CC_OPTIMIZE_FOR_SIZE=y ++# CONFIG_CC_OPTIMIZE_FOR_SPEED is not set ++# CONFIG_CC_OPTIMIZE_FOR_DEBUG is not set ++# CONFIG_OPTIMIZE_INLINING is not set ++CONFIG_ARCH_SUPPORTS_LTO=y ++# CONFIG_LTO is not set ++CONFIG_CC_HAS_ASM_INLINE=y ++# CONFIG_XEN is not set ++# CONFIG_ENV_VARS_UBOOT_CONFIG is not set ++# CONFIG_SYS_BOOT_GET_CMDLINE is not set ++# CONFIG_SYS_BOOT_GET_KBD is not set ++CONFIG_SYS_MALLOC_F=y ++# CONFIG_VALGRIND is not set ++CONFIG_EXPERT=y ++CONFIG_SYS_MALLOC_CLEAR_ON_INIT=y ++# CONFIG_SYS_MALLOC_DEFAULT_TO_INIT is not set ++# CONFIG_TOOLS_DEBUG is not set ++CONFIG_PHYS_64BIT=y ++CONFIG_FDT_64BIT=y ++# CONFIG_REMAKE_ELF is not set ++# CONFIG_HAS_BOARD_SIZE_LIMIT is not set ++# CONFIG_SYS_CUSTOM_LDSCRIPT is not set ++CONFIG_PLATFORM_ELFENTRY="_start" ++CONFIG_STACK_SIZE=0x1000000 ++CONFIG_SYS_SRAM_BASE=0x0 ++CONFIG_SYS_SRAM_SIZE=0x0 ++# CONFIG_MP is not set ++CONFIG_HAVE_TEXT_BASE=y ++# CONFIG_HAVE_SYS_UBOOT_START is not set ++CONFIG_SYS_UBOOT_START=0x41e00000 ++# CONFIG_DYNAMIC_SYS_CLK_FREQ is not set ++# CONFIG_API is not set ++ ++# ++# Boot options ++# ++ ++# ++# Boot images ++# ++# CONFIG_ANDROID_BOOT_IMAGE is not set ++# CONFIG_TIMESTAMP is not set ++CONFIG_FIT=y ++CONFIG_FIT_EXTERNAL_OFFSET=0x0 ++CONFIG_FIT_FULL_CHECK=y ++# CONFIG_FIT_SIGNATURE is not set ++# CONFIG_FIT_CIPHER is not set ++# CONFIG_FIT_VERBOSE is not set ++# CONFIG_FIT_BEST_MATCH is not set ++CONFIG_FIT_PRINT=y ++# CONFIG_SPL_LOAD_FIT_FULL is not set ++CONFIG_PXE_UTILS=y ++CONFIG_BOOTSTD=y ++# CONFIG_BOOTSTD_FULL is not set ++# CONFIG_BOOTSTD_DEFAULTS is not set ++CONFIG_BOOTSTD_BOOTCOMMAND=y ++CONFIG_BOOTMETH_GLOBAL=y ++# CONFIG_BOOTMETH_CROS is not set ++CONFIG_BOOTMETH_EXTLINUX=y ++CONFIG_BOOTMETH_EXTLINUX_PXE=y ++CONFIG_BOOTMETH_EFILOADER=y ++CONFIG_BOOTMETH_VBE=y ++CONFIG_BOOTMETH_VBE_REQUEST=y ++CONFIG_BOOTMETH_VBE_SIMPLE=y ++CONFIG_BOOTMETH_VBE_SIMPLE_OS=y ++# CONFIG_BOOTMETH_SCRIPT is not set ++CONFIG_LEGACY_IMAGE_FORMAT=y ++# CONFIG_SUPPORT_RAW_INITRD is not set ++# CONFIG_CHROMEOS is not set ++# CONFIG_CHROMEOS_VBOOT is not set ++# CONFIG_RAMBOOT_PBL is not set ++CONFIG_SYS_BOOT_RAMDISK_HIGH=y ++# CONFIG_DISTRO_DEFAULTS is not set ++ ++# ++# Boot timing ++# ++# CONFIG_BOOTSTAGE is not set ++CONFIG_BOOTSTAGE_STASH_SIZE=0x1000 ++# CONFIG_SHOW_BOOT_PROGRESS is not set ++ ++# ++# Boot media ++# ++CONFIG_NAND_BOOT=y ++# CONFIG_ONENAND_BOOT is not set ++# CONFIG_QSPI_BOOT is not set ++# CONFIG_SATA_BOOT is not set ++# CONFIG_SD_BOOT is not set ++# CONFIG_SD_BOOT_QSPI is not set ++CONFIG_SPI_BOOT=y ++ ++# ++# Autoboot options ++# ++CONFIG_AUTOBOOT=y ++CONFIG_BOOTDELAY=2 ++# CONFIG_AUTOBOOT_KEYED is not set ++# CONFIG_AUTOBOOT_USE_MENUKEY is not set ++CONFIG_AUTOBOOT_MENU_SHOW=y ++# CONFIG_BOOTMENU_DISABLE_UBOOT_CONSOLE is not set ++# CONFIG_BOOT_RETRY is not set ++ ++# ++# Image support ++# ++# CONFIG_IMAGE_PRE_LOAD is not set ++ ++# ++# Devicetree fixup ++# ++# CONFIG_OF_BOARD_SETUP is not set ++# CONFIG_OF_SYSTEM_SETUP is not set ++# CONFIG_OF_STDOUT_VIA_ALIAS is not set ++# CONFIG_FDT_FIXUP_PARTITIONS is not set ++# CONFIG_FDT_SIMPLEFB is not set ++CONFIG_ARCH_FIXUP_FDT_MEMORY=y ++# CONFIG_USE_BOOTARGS is not set ++# CONFIG_BOOTARGS_SUBST is not set ++# CONFIG_USE_BOOTCOMMAND is not set ++CONFIG_USE_PREBOOT=y ++CONFIG_DEFAULT_FDT_FILE="openwrt-one" ++# CONFIG_SAVE_PREV_BL_FDT_ADDR is not set ++# CONFIG_SAVE_PREV_BL_INITRAMFS_START_ADDR is not set ++ ++# ++# Configuration editor ++# ++# CONFIG_CEDIT is not set ++ ++# ++# Console ++# ++CONFIG_MENU=y ++# CONFIG_CONSOLE_RECORD is not set ++# CONFIG_DISABLE_CONSOLE is not set ++CONFIG_LOGLEVEL=7 ++# CONFIG_SILENT_CONSOLE is not set ++# CONFIG_SPL_SILENT_CONSOLE is not set ++# CONFIG_TPL_SILENT_CONSOLE is not set ++# CONFIG_PRE_CONSOLE_BUFFER is not set ++CONFIG_CONSOLE_FLUSH_SUPPORT=y ++# CONFIG_CONSOLE_FLUSH_ON_NEWLINE is not set ++# CONFIG_CONSOLE_MUX is not set ++# CONFIG_SYS_CONSOLE_IS_IN_ENV is not set ++# CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE is not set ++# CONFIG_SYS_CONSOLE_INFO_QUIET is not set ++# CONFIG_SYS_STDIO_DEREGISTER is not set ++# CONFIG_SPL_SYS_STDIO_DEREGISTER is not set ++# CONFIG_SYS_DEVICE_NULLDEV is not set ++ ++# ++# Logging ++# ++CONFIG_LOG=y ++CONFIG_LOG_MAX_LEVEL=6 ++CONFIG_LOG_DEFAULT_LEVEL=6 ++CONFIG_LOG_CONSOLE=y ++# CONFIG_LOGF_FILE is not set ++# CONFIG_LOGF_LINE is not set ++# CONFIG_LOGF_FUNC is not set ++CONFIG_LOGF_FUNC_PAD=20 ++# CONFIG_LOG_SYSLOG is not set ++# CONFIG_LOG_ERROR_RETURN is not set ++ ++# ++# Init options ++# ++# CONFIG_BOARD_TYPES is not set ++CONFIG_DISPLAY_CPUINFO=y ++CONFIG_DISPLAY_BOARDINFO=y ++# CONFIG_DISPLAY_BOARDINFO_LATE is not set ++ ++# ++# Start-up hooks ++# ++# CONFIG_CYCLIC is not set ++CONFIG_EVENT=y ++CONFIG_EVENT_DYNAMIC=y ++# CONFIG_EVENT_DEBUG is not set ++# CONFIG_ARCH_MISC_INIT is not set ++# CONFIG_BOARD_EARLY_INIT_F is not set ++# CONFIG_BOARD_EARLY_INIT_R is not set ++# CONFIG_BOARD_POSTCLK_INIT is not set ++CONFIG_BOARD_LATE_INIT=y ++# CONFIG_CLOCKS is not set ++# CONFIG_HWCONFIG is not set ++CONFIG_LAST_STAGE_INIT=y ++# CONFIG_MISC_INIT_R is not set ++# CONFIG_SYS_MALLOC_BOOTPARAMS is not set ++# CONFIG_ID_EEPROM is not set ++# CONFIG_RESET_PHY_R is not set ++ ++# ++# Security support ++# ++CONFIG_HASH=y ++# CONFIG_STACKPROTECTOR is not set ++# CONFIG_BOARD_RNG_SEED is not set ++ ++# ++# Update support ++# ++# CONFIG_UPDATE_TFTP is not set ++# CONFIG_ANDROID_AB is not set ++ ++# ++# Blob list ++# ++# CONFIG_BLOBLIST is not set ++CONFIG_SUPPORT_SPL=y ++# CONFIG_VPL is not set ++ ++# ++# Command line interface ++# ++CONFIG_CMDLINE=y ++CONFIG_HUSH_PARSER=y ++CONFIG_CMDLINE_EDITING=y ++# CONFIG_CMDLINE_PS_SUPPORT is not set ++CONFIG_AUTO_COMPLETE=y ++CONFIG_SYS_LONGHELP=y ++CONFIG_SYS_PROMPT="OpenWrt One> " ++CONFIG_SYS_PROMPT_HUSH_PS2="> " ++CONFIG_SYS_MAXARGS=16 ++CONFIG_SYS_CBSIZE=512 ++CONFIG_SYS_PBSIZE=1049 ++CONFIG_SYS_XTRACE=y ++CONFIG_BUILD_BIN2C=y ++ ++# ++# Commands ++# ++ ++# ++# Info commands ++# ++CONFIG_CMD_BDI=y ++# CONFIG_CMD_BDINFO_EXTRA is not set ++# CONFIG_CMD_CONFIG is not set ++CONFIG_CMD_CONSOLE=y ++CONFIG_CMD_CPU=y ++# CONFIG_CMD_HISTORY is not set ++CONFIG_CMD_LICENSE=y ++# CONFIG_CMD_PMC is not set ++ ++# ++# Boot commands ++# ++CONFIG_CMD_BOOTD=y ++CONFIG_CMD_BOOTM=y ++# CONFIG_CMD_BOOTDEV is not set ++CONFIG_CMD_BOOTFLOW=y ++# CONFIG_CMD_BOOTMETH is not set ++CONFIG_BOOTM_EFI=y ++# CONFIG_CMD_BOOTZ is not set ++CONFIG_CMD_BOOTI=y ++CONFIG_BOOTM_LINUX=y ++# CONFIG_BOOTM_NETBSD is not set ++# CONFIG_BOOTM_OPENRTOS is not set ++# CONFIG_BOOTM_OSE is not set ++# CONFIG_BOOTM_PLAN9 is not set ++# CONFIG_BOOTM_RTEMS is not set ++# CONFIG_CMD_VBE is not set ++# CONFIG_BOOTM_VXWORKS is not set ++CONFIG_SYS_BOOTM_LEN=0x4000000 ++CONFIG_CMD_BOOTEFI=y ++CONFIG_CMD_BOOTEFI_HELLO_COMPILE=y ++# CONFIG_CMD_BOOTEFI_HELLO is not set ++# CONFIG_CMD_BOOTEFI_SELFTEST is not set ++CONFIG_CMD_BOOTMENU=y ++# CONFIG_CMD_ADTIMG is not set ++CONFIG_CMD_ELF=y ++CONFIG_CMD_FDT=y ++CONFIG_CMD_GO=y ++CONFIG_CMD_RUN=y ++CONFIG_CMD_IMI=y ++# CONFIG_CMD_IMLS is not set ++CONFIG_CMD_XIMG=y ++# CONFIG_CMD_ZBOOT is not set ++ ++# ++# Environment commands ++# ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_EXPORTENV=y ++CONFIG_CMD_IMPORTENV=y ++CONFIG_CMD_EDITENV=y ++# CONFIG_CMD_GREPENV is not set ++CONFIG_CMD_SAVEENV=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_ENV_EXISTS=y ++CONFIG_CMD_ENV_READMEM=y ++# CONFIG_CMD_ENV_CALLBACK is not set ++CONFIG_CMD_ENV_FLAGS=y ++# CONFIG_CMD_NVEDIT_EFI is not set ++# CONFIG_CMD_NVEDIT_INDIRECT is not set ++# CONFIG_CMD_NVEDIT_INFO is not set ++# CONFIG_CMD_NVEDIT_LOAD is not set ++# CONFIG_CMD_NVEDIT_SELECT is not set ++ ++# ++# Memory commands ++# ++# CONFIG_CMD_BINOP is not set ++# CONFIG_CMD_BLOBLIST is not set ++CONFIG_CMD_CRC32=y ++# CONFIG_CRC32_VERIFY is not set ++# CONFIG_CMD_EEPROM is not set ++# CONFIG_LOOPW is not set ++# CONFIG_CMD_MD5SUM is not set ++# CONFIG_CMD_MEMINFO is not set ++CONFIG_CMD_MEMORY=y ++# CONFIG_CMD_MEM_SEARCH is not set ++# CONFIG_CMD_MX_CYCLIC is not set ++CONFIG_CMD_RANDOM=y ++# CONFIG_CMD_MEMTEST is not set ++# CONFIG_CMD_SHA1SUM is not set ++CONFIG_CMD_STRINGS=y ++ ++# ++# Compression commands ++# ++CONFIG_CMD_LZMADEC=y ++# CONFIG_CMD_UNLZ4 is not set ++# CONFIG_CMD_UNZIP is not set ++# CONFIG_CMD_ZIP is not set ++ ++# ++# Device access commands ++# ++# CONFIG_CMD_ARMFLASH is not set ++# CONFIG_CMD_BIND is not set ++# CONFIG_CMD_CLK is not set ++# CONFIG_CMD_DEMO is not set ++# CONFIG_CMD_DFU is not set ++CONFIG_CMD_DM=y ++CONFIG_CMD_FLASH=y ++# CONFIG_CMD_FPGAD is not set ++# CONFIG_CMD_FUSE is not set ++CONFIG_CMD_GPIO=y ++# CONFIG_CMD_GPIO_READ is not set ++CONFIG_CMD_PWM=y ++# CONFIG_CMD_GPT is not set ++# CONFIG_RANDOM_UUID is not set ++# CONFIG_CMD_IDE is not set ++# CONFIG_CMD_IO is not set ++# CONFIG_CMD_IOTRACE is not set ++# CONFIG_CMD_I2C is not set ++CONFIG_CMD_LOADB=y ++# CONFIG_CMD_LOADM is not set ++CONFIG_CMD_LOADS=y ++# CONFIG_LOADS_ECHO is not set ++# CONFIG_CMD_SAVES is not set ++# CONFIG_SYS_LOADS_BAUD_CHANGE is not set ++CONFIG_CMD_LOADXY_TIMEOUT=90 ++# CONFIG_CMD_LSBLK is not set ++# CONFIG_CMD_MBR is not set ++# CONFIG_CMD_CLONE is not set ++CONFIG_CMD_MTD=y ++CONFIG_CMD_NAND_EXT=y ++# CONFIG_CMD_ONENAND is not set ++# CONFIG_CMD_OSD is not set ++# CONFIG_CMD_PART is not set ++CONFIG_CMD_PCI=y ++CONFIG_CMD_PINMUX=y ++# CONFIG_CMD_POWEROFF is not set ++# CONFIG_CMD_READ is not set ++# CONFIG_CMD_SATA is not set ++# CONFIG_CMD_SDRAM is not set ++CONFIG_CMD_SF=y ++CONFIG_CMD_SF_TEST=y ++# CONFIG_CMD_SPI is not set ++# CONFIG_CMD_TSI148 is not set ++# CONFIG_CMD_UNIVERSE is not set ++CONFIG_CMD_USB=y ++# CONFIG_CMD_USB_SDP is not set ++# CONFIG_CMD_RKMTD is not set ++# CONFIG_CMD_WRITE is not set ++ ++# ++# Shell scripting commands ++# ++# CONFIG_CMD_CAT is not set ++CONFIG_CMD_ECHO=y ++CONFIG_CMD_ITEST=y ++CONFIG_CMD_SOURCE=y ++CONFIG_CMD_SETEXPR=y ++# CONFIG_CMD_SETEXPR_FMT is not set ++# CONFIG_CMD_XXD is not set ++ ++# ++# Android support commands ++# ++CONFIG_CMD_NET=y ++CONFIG_CMD_BOOTP=y ++CONFIG_CMD_DHCP=y ++# CONFIG_BOOTP_MAY_FAIL is not set ++CONFIG_BOOTP_BOOTPATH=y ++# CONFIG_BOOTP_VENDOREX is not set ++# CONFIG_BOOTP_BOOTFILESIZE is not set ++CONFIG_BOOTP_DNS=y ++# CONFIG_BOOTP_DNS2 is not set ++CONFIG_BOOTP_GATEWAY=y ++CONFIG_BOOTP_HOSTNAME=y ++# CONFIG_BOOTP_PREFER_SERVERIP is not set ++CONFIG_BOOTP_SUBNETMASK=y ++# CONFIG_BOOTP_NISDOMAIN is not set ++# CONFIG_BOOTP_NTPSERVER is not set ++# CONFIG_BOOTP_TIMEOFFSET is not set ++# CONFIG_CMD_PCAP is not set ++CONFIG_BOOTP_PXE=y ++CONFIG_BOOTP_PXE_CLIENTARCH=0x16 ++# CONFIG_BOOTP_PXE_DHCP_OPTION is not set ++CONFIG_BOOTP_VCI_STRING="U-Boot.armv8" ++CONFIG_CMD_TFTPBOOT=y ++# CONFIG_CMD_TFTPPUT is not set ++CONFIG_CMD_TFTPSRV=y ++CONFIG_NET_TFTP_VARS=y ++CONFIG_CMD_RARP=y ++# CONFIG_CMD_NFS is not set ++# CONFIG_SYS_DISABLE_AUTOLOAD is not set ++# CONFIG_CMD_WGET is not set ++# CONFIG_CMD_MII is not set ++# CONFIG_CMD_MDIO is not set ++CONFIG_CMD_PING=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_LINK_LOCAL=y ++# CONFIG_CMD_ETHSW is not set ++CONFIG_CMD_PXE=y ++# CONFIG_CMD_WOL is not set ++ ++# ++# Misc commands ++# ++# CONFIG_CMD_2048 is not set ++# CONFIG_CMD_BSP is not set ++CONFIG_CMD_BLOCK_CACHE=y ++CONFIG_CMD_BUTTON=y ++CONFIG_CMD_CACHE=y ++# CONFIG_CMD_CONITRACE is not set ++# CONFIG_CMD_CLS is not set ++# CONFIG_CMD_EFIDEBUG is not set ++CONFIG_CMD_EFICONFIG=y ++# CONFIG_CMD_EXCEPTION is not set ++CONFIG_CMD_LED=y ++# CONFIG_CMD_INI is not set ++# CONFIG_CMD_DATE is not set ++# CONFIG_CMD_TIME is not set ++# CONFIG_CMD_GETTIME is not set ++# CONFIG_CMD_PAUSE is not set ++CONFIG_CMD_SLEEP=y ++# CONFIG_CMD_TIMER is not set ++# CONFIG_CMD_SYSBOOT is not set ++# CONFIG_CMD_QFW is not set ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_PSTORE_MEM_SIZE=0x10000 ++CONFIG_CMD_PSTORE_RECORD_SIZE=0x1000 ++CONFIG_CMD_PSTORE_CONSOLE_SIZE=0x1000 ++CONFIG_CMD_PSTORE_FTRACE_SIZE=0x1000 ++CONFIG_CMD_PSTORE_PMSG_SIZE=0x1000 ++CONFIG_CMD_PSTORE_ECC_SIZE=0 ++# CONFIG_CMD_TERMINAL is not set ++CONFIG_CMD_UUID=y ++ ++# ++# TI specific command line interface ++# ++ ++# ++# Power commands ++# ++ ++# ++# Security commands ++# ++# CONFIG_CMD_AES is not set ++# CONFIG_CMD_BLOB is not set ++CONFIG_CMD_HASH=y ++# CONFIG_CMD_HVC is not set ++CONFIG_CMD_SMC=y ++# CONFIG_HASH_VERIFY is not set ++ ++# ++# Firmware commands ++# ++ ++# ++# Filesystem commands ++# ++# CONFIG_CMD_BTRFS is not set ++# CONFIG_CMD_EROFS is not set ++# CONFIG_CMD_EXT2 is not set ++# CONFIG_CMD_EXT4 is not set ++CONFIG_CMD_FAT=y ++# CONFIG_CMD_SQUASHFS is not set ++CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y ++# CONFIG_CMD_JFFS2 is not set ++# CONFIG_CMD_MTDPARTS is not set ++CONFIG_MTDIDS_DEFAULT="" ++CONFIG_MTDPARTS_DEFAULT="" ++# CONFIG_CMD_REISER is not set ++# CONFIG_CMD_ZFS is not set ++ ++# ++# Debug commands ++# ++# CONFIG_CMD_DIAG is not set ++# CONFIG_CMD_EVENT is not set ++# CONFIG_CMD_LOG is not set ++CONFIG_CMD_UBI=y ++CONFIG_CMD_UBI_RENAME=y ++CONFIG_CMD_UBIFS=y ++ ++# ++# Partition Types ++# ++CONFIG_PARTITIONS=y ++# CONFIG_MAC_PARTITION is not set ++CONFIG_DOS_PARTITION=y ++# CONFIG_ISO_PARTITION is not set ++# CONFIG_AMIGA_PARTITION is not set ++# CONFIG_EFI_PARTITION is not set ++CONFIG_PARTITION_UUIDS=y ++CONFIG_SUPPORT_OF_CONTROL=y ++ ++# ++# Device Tree Control ++# ++CONFIG_OF_CONTROL=y ++CONFIG_OF_REAL=y ++# CONFIG_OF_LIVE is not set ++CONFIG_OF_SEPARATE=y ++# CONFIG_OF_EMBED is not set ++# CONFIG_OF_BOARD is not set ++# CONFIG_OF_OMIT_DTB is not set ++CONFIG_DEVICE_TREE_INCLUDES="" ++CONFIG_OF_LIST="openwrt-one" ++# CONFIG_MULTI_DTB_FIT is not set ++CONFIG_OF_TAG_MIGRATE=y ++# CONFIG_OF_DTB_PROPS_REMOVE is not set ++ ++# ++# Environment ++# ++CONFIG_ENV_SUPPORT=y ++CONFIG_SAVEENV=y ++CONFIG_ENV_OVERWRITE=y ++CONFIG_ENV_MIN_ENTRIES=64 ++CONFIG_ENV_MAX_ENTRIES=512 ++CONFIG_ENV_IS_DEFAULT=y ++CONFIG_ENV_IS_NOWHERE=y ++# CONFIG_ENV_IS_IN_EEPROM is not set ++# CONFIG_ENV_IS_IN_FAT is not set ++# CONFIG_ENV_IS_IN_EXT4 is not set ++# CONFIG_ENV_IS_IN_FLASH is not set ++# CONFIG_ENV_IS_IN_MTD is not set ++# CONFIG_ENV_IS_IN_NAND is not set ++# CONFIG_ENV_IS_IN_NVRAM is not set ++# CONFIG_ENV_IS_IN_ONENAND is not set ++# CONFIG_ENV_IS_IN_REMOTE is not set ++# CONFIG_ENV_IS_IN_SPI_FLASH is not set ++# CONFIG_ENV_IS_IN_UBI is not set ++CONFIG_SYS_REDUNDAND_ENVIRONMENT=y ++CONFIG_SYS_RELOC_GD_ENV_ADDR=y ++CONFIG_USE_DEFAULT_ENV_FILE=y ++CONFIG_DEFAULT_ENV_FILE="openwrt-one-nor_env" ++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++# CONFIG_ENV_IMPORT_FDT is not set ++# CONFIG_ENV_APPEND is not set ++# CONFIG_ENV_WRITEABLE_LIST is not set ++# CONFIG_ENV_ACCESS_IGNORE_FORCE is not set ++# CONFIG_USE_BOOTFILE is not set ++# CONFIG_USE_ETHPRIME is not set ++# CONFIG_USE_HOSTNAME is not set ++# CONFIG_VERSION_VARIABLE is not set ++CONFIG_NET=y ++CONFIG_ARP_TIMEOUT=5000 ++CONFIG_NET_RETRY_COUNT=5 ++CONFIG_PROT_UDP=y ++CONFIG_BOOTDEV_ETH=y ++# CONFIG_BOOTP_SEND_HOSTNAME is not set ++CONFIG_NET_RANDOM_ETHADDR=y ++# CONFIG_NETCONSOLE is not set ++# CONFIG_IP_DEFRAG is not set ++# CONFIG_SYS_FAULT_ECHO_LINK_DOWN is not set ++CONFIG_TFTP_BLOCKSIZE=1468 ++# CONFIG_TFTP_PORT is not set ++CONFIG_TFTP_WINDOWSIZE=1 ++# CONFIG_TFTP_TSIZE is not set ++# CONFIG_SERVERIP_FROM_PROXYDHCP is not set ++CONFIG_SERVERIP_FROM_PROXYDHCP_DELAY_MS=100 ++# CONFIG_KEEP_SERVERADDR is not set ++# CONFIG_UDP_CHECKSUM is not set ++# CONFIG_BOOTP_SERVERIP is not set ++CONFIG_BOOTP_MAX_ROOT_PATH_LEN=64 ++# CONFIG_USE_GATEWAYIP is not set ++# CONFIG_USE_IPADDR is not set ++# CONFIG_USE_NETMASK is not set ++# CONFIG_USE_ROOTPATH is not set ++# CONFIG_USE_SERVERIP is not set ++# CONFIG_PROT_TCP is not set ++# CONFIG_IPV6 is not set ++CONFIG_SYS_RX_ETH_BUFFER=4 ++ ++# ++# Device Drivers ++# ++ ++# ++# Generic Driver Options ++# ++CONFIG_DM=y ++# CONFIG_DM_WARN is not set ++# CONFIG_DM_DEBUG is not set ++# CONFIG_DM_STATS is not set ++CONFIG_DM_DEVICE_REMOVE=y ++CONFIG_DM_EVENT=y ++CONFIG_DM_STDIO=y ++CONFIG_DM_SEQ_ALIAS=y ++# CONFIG_DM_DMA is not set ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++# CONFIG_DEVRES is not set ++CONFIG_SIMPLE_BUS=y ++# CONFIG_SIMPLE_BUS_CORRECT_RANGE is not set ++# CONFIG_SIMPLE_PM_BUS is not set ++CONFIG_OF_TRANSLATE=y ++# CONFIG_TRANSLATION_OFFSET is not set ++CONFIG_DM_DEV_READ_INLINE=y ++# CONFIG_OFNODE_MULTI_TREE is not set ++# CONFIG_BOUNCE_BUFFER is not set ++# CONFIG_ADC is not set ++# CONFIG_ADC_EXYNOS is not set ++# CONFIG_ADC_SANDBOX is not set ++# CONFIG_SARADC_MESON is not set ++# CONFIG_SARADC_ROCKCHIP is not set ++# CONFIG_SATA is not set ++# CONFIG_SCSI_AHCI is not set ++ ++# ++# SATA/SCSI device support ++# ++# CONFIG_AXI is not set ++ ++# ++# Bus devices ++# ++CONFIG_BLK=y ++CONFIG_BLOCK_CACHE=y ++# CONFIG_BLKMAP is not set ++# CONFIG_EFI_MEDIA is not set ++# CONFIG_IDE is not set ++# CONFIG_LBA48 is not set ++# CONFIG_SYS_64BIT_LBA is not set ++# CONFIG_RKMTD is not set ++# CONFIG_BOOTCOUNT_LIMIT is not set ++ ++# ++# Button Support ++# ++CONFIG_BUTTON=y ++# CONFIG_BUTTON_ADC is not set ++CONFIG_BUTTON_GPIO=y ++ ++# ++# Cache Controller drivers ++# ++# CONFIG_CACHE is not set ++# CONFIG_L2X0_CACHE is not set ++# CONFIG_V5L2_CACHE is not set ++# CONFIG_NCORE_CACHE is not set ++# CONFIG_SIFIVE_CCACHE is not set ++ ++# ++# Clock ++# ++CONFIG_CLK=y ++# CONFIG_CLK_CCF is not set ++# CONFIG_CLK_GPIO is not set ++# CONFIG_CLK_CDCE9XX is not set ++# CONFIG_CLK_ICS8N3QV01 is not set ++# CONFIG_CLK_K210 is not set ++# CONFIG_CLK_MPC83XX is not set ++# CONFIG_CLK_XLNX_CLKWZRD is not set ++# CONFIG_CLK_AT91 is not set ++# CONFIG_CLK_RCAR is not set ++# CONFIG_CLK_RCAR_CPG_LIB is not set ++# CONFIG_CLK_SIFIVE is not set ++# CONFIG_CLK_TI_AM3_DPLL is not set ++# CONFIG_CLK_TI_CTRL is not set ++# CONFIG_CLK_TI_GATE is not set ++# CONFIG_CLK_K3 is not set ++CONFIG_CPU=y ++# CONFIG_CPU_IMX is not set ++ ++# ++# Hardware crypto devices ++# ++# CONFIG_DM_HASH is not set ++# CONFIG_FSL_CAAM is not set ++CONFIG_CAAM_64BIT=y ++# CONFIG_SYS_FSL_SEC_BE is not set ++# CONFIG_SYS_FSL_SEC_LE is not set ++# CONFIG_NPCM_AES is not set ++# CONFIG_NPCM_SHA is not set ++# CONFIG_DDR_SPD is not set ++# CONFIG_IMX_SNPS_DDR_PHY is not set ++ ++# ++# Demo for driver model ++# ++# CONFIG_DM_DEMO is not set ++ ++# ++# DFU support ++# ++ ++# ++# DMA Support ++# ++# CONFIG_DMA is not set ++# CONFIG_DMA_LPC32XX is not set ++# CONFIG_TI_EDMA3 is not set ++# CONFIG_DMA_LEGACY is not set ++ ++# ++# Extcon Support ++# ++# CONFIG_EXTCON is not set ++ ++# ++# Fastboot support ++# ++# CONFIG_UDP_FUNCTION_FASTBOOT is not set ++# CONFIG_TCP_FUNCTION_FASTBOOT is not set ++CONFIG_FIRMWARE=y ++CONFIG_ARM_PSCI_FW=y ++# CONFIG_ZYNQMP_FIRMWARE is not set ++# CONFIG_ARM_SMCCC_FEATURES is not set ++# CONFIG_ARM_FFA_TRANSPORT is not set ++# CONFIG_SCMI_FIRMWARE is not set ++# CONFIG_DM_FUZZING_ENGINE is not set ++ ++# ++# FPGA support ++# ++# CONFIG_FPGA_ALTERA is not set ++# CONFIG_FPGA_SOCFPGA is not set ++# CONFIG_FPGA_LATTICE is not set ++# CONFIG_FPGA_XILINX is not set ++# CONFIG_DM_FPGA is not set ++# CONFIG_FWU_MDATA is not set ++CONFIG_GPIO=y ++CONFIG_GPIO_HOG=y ++# CONFIG_DM_GPIO_LOOKUP_LABEL is not set ++# CONFIG_ALTERA_PIO is not set ++# CONFIG_BCM2835_GPIO is not set ++# CONFIG_DWAPB_GPIO is not set ++# CONFIG_AT91_GPIO is not set ++# CONFIG_ATMEL_PIO4 is not set ++# CONFIG_ASPEED_GPIO is not set ++# CONFIG_DA8XX_GPIO is not set ++# CONFIG_HIKEY_GPIO is not set ++# CONFIG_INTEL_BROADWELL_GPIO is not set ++# CONFIG_INTEL_GPIO is not set ++# CONFIG_INTEL_ICH6_GPIO is not set ++# CONFIG_IMX_RGPIO2P is not set ++# CONFIG_IPROC_GPIO is not set ++# CONFIG_HSDK_CREG_GPIO is not set ++# CONFIG_KIRKWOOD_GPIO is not set ++# CONFIG_LPC32XX_GPIO is not set ++# CONFIG_MCP230XX_GPIO is not set ++# CONFIG_MSM_GPIO is not set ++# CONFIG_MXC_GPIO is not set ++# CONFIG_MXS_GPIO is not set ++# CONFIG_NPCM_GPIO is not set ++# CONFIG_CMD_PCA953X is not set ++# CONFIG_ROCKCHIP_GPIO is not set ++# CONFIG_XILINX_GPIO is not set ++# CONFIG_TCA642X is not set ++# CONFIG_TEGRA_GPIO is not set ++# CONFIG_TEGRA186_GPIO is not set ++# CONFIG_VYBRID_GPIO is not set ++# CONFIG_SIFIVE_GPIO is not set ++# CONFIG_ZYNQ_GPIO is not set ++# CONFIG_DM_74X164 is not set ++# CONFIG_PCA953X is not set ++# CONFIG_MPC8XXX_GPIO is not set ++# CONFIG_MPC8XX_GPIO is not set ++# CONFIG_NX_GPIO is not set ++# CONFIG_NOMADIK_GPIO is not set ++# CONFIG_ZYNQMP_GPIO_MODEPIN is not set ++# CONFIG_SLG7XL45106_I2C_GPO is not set ++# CONFIG_TURRIS_OMNIA_MCU is not set ++# CONFIG_FTGPIO010 is not set ++ ++# ++# Hardware Spinlock Support ++# ++# CONFIG_DM_HWSPINLOCK is not set ++CONFIG_I2C=y ++# CONFIG_DM_I2C is not set ++# CONFIG_SYS_I2C_LEGACY is not set ++# CONFIG_SPL_SYS_I2C_LEGACY is not set ++# CONFIG_SYS_I2C_FSL is not set ++# CONFIG_SYS_I2C_DW is not set ++# CONFIG_SYS_I2C_IMX_LPI2C is not set ++# CONFIG_SYS_I2C_MTK is not set ++# CONFIG_SYS_I2C_MICROCHIP is not set ++# CONFIG_SYS_I2C_MXC is not set ++# CONFIG_SYS_I2C_NPCM is not set ++# CONFIG_SYS_I2C_SOFT is not set ++# CONFIG_SYS_I2C_MV is not set ++# CONFIG_SYS_I2C_MVTWSI is not set ++CONFIG_INPUT=y ++# CONFIG_DM_KEYBOARD is not set ++# CONFIG_CROS_EC_KEYB is not set ++# CONFIG_TEGRA_KEYBOARD is not set ++# CONFIG_TWL4030_INPUT is not set ++ ++# ++# IOMMU device drivers ++# ++# CONFIG_IOMMU is not set ++ ++# ++# LED Support ++# ++CONFIG_LED=y ++# CONFIG_LED_PWM is not set ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y ++# CONFIG_LED_STATUS is not set ++ ++# ++# Mailbox Controller Support ++# ++# CONFIG_DM_MAILBOX is not set ++ ++# ++# Memory Controller drivers ++# ++# CONFIG_MEMORY is not set ++# CONFIG_ATMEL_EBI is not set ++# CONFIG_MFD_ATMEL_SMC is not set ++ ++# ++# Multifunction device drivers ++# ++# CONFIG_MISC is not set ++# CONFIG_NVMEM is not set ++# CONFIG_SPL_NVMEM is not set ++# CONFIG_SMSC_LPC47M is not set ++# CONFIG_SMSC_SIO1007 is not set ++# CONFIG_CROS_EC is not set ++# CONFIG_DS4510 is not set ++# CONFIG_FSL_SEC_MON is not set ++# CONFIG_IRQ is not set ++# CONFIG_NPCM_HOST is not set ++# CONFIG_NUVOTON_NCT6102D is not set ++# CONFIG_PWRSEQ is not set ++# CONFIG_PCA9551_LED is not set ++# CONFIG_TEST_DRV is not set ++# CONFIG_USB_HUB_USB251XB is not set ++# CONFIG_TWL4030_LED is not set ++# CONFIG_WINBOND_W83627 is not set ++# CONFIG_FS_LOADER is not set ++ ++# ++# MMC Host controller Support ++# ++# CONFIG_MMC is not set ++# CONFIG_MMC_BROKEN_CD is not set ++# CONFIG_DM_MMC is not set ++# CONFIG_FSL_ESDHC is not set ++# CONFIG_FSL_ESDHC_IMX is not set ++ ++# ++# MTD Support ++# ++CONFIG_MTD_PARTITIONS=y ++CONFIG_MTD=y ++CONFIG_DM_MTD=y ++# CONFIG_MTD_NOR_FLASH is not set ++# CONFIG_MTD_CONCAT is not set ++# CONFIG_SYS_MTDPARTS_RUNTIME is not set ++# CONFIG_FLASH_CFI_DRIVER is not set ++# CONFIG_CFI_FLASH is not set ++# CONFIG_ALTERA_QSPI is not set ++# CONFIG_HBMC_AM654 is not set ++# CONFIG_SAMSUNG_ONENAND is not set ++# CONFIG_USE_SYS_MAX_FLASH_BANKS is not set ++CONFIG_MTD_NAND_CORE=y ++# CONFIG_MTD_RAW_NAND is not set ++CONFIG_MTD_SPI_NAND=y ++ ++# ++# SPI Flash Support ++# ++CONFIG_DM_SPI_FLASH=y ++CONFIG_SPI_FLASH=y ++CONFIG_SF_DEFAULT_BUS=0 ++CONFIG_SF_DEFAULT_CS=0 ++# CONFIG_BOOTDEV_SPI_FLASH is not set ++CONFIG_SPI_FLASH_SFDP_SUPPORT=y ++CONFIG_SPI_FLASH_SMART_HWCAPS=y ++# CONFIG_SPI_NOR_BOOT_SOFT_RESET_EXT_INVERT is not set ++# CONFIG_SPI_FLASH_SOFT_RESET is not set ++# CONFIG_SPI_FLASH_BAR is not set ++CONFIG_SPI_FLASH_LOCK=y ++CONFIG_SPI_FLASH_UNLOCK_ALL=y ++# CONFIG_SPI_FLASH_ATMEL is not set ++CONFIG_SPI_FLASH_EON=y ++CONFIG_SPI_FLASH_GIGADEVICE=y ++CONFIG_SPI_FLASH_ISSI=y ++CONFIG_SPI_FLASH_MACRONIX=y ++CONFIG_SPI_FLASH_SPANSION=y ++# CONFIG_SPI_FLASH_S28HX_T is not set ++CONFIG_SPI_FLASH_STMICRO=y ++# CONFIG_SPI_FLASH_MT35XU is not set ++# CONFIG_SPI_FLASH_SST is not set ++CONFIG_SPI_FLASH_WINBOND=y ++CONFIG_SPI_FLASH_XMC=y ++CONFIG_SPI_FLASH_XTX=y ++# CONFIG_SPI_FLASH_ZBIT is not set ++CONFIG_SPI_FLASH_USE_4K_SECTORS=y ++# CONFIG_SPI_FLASH_DATAFLASH is not set ++CONFIG_SPI_FLASH_MTD=y ++ ++# ++# UBI support ++# ++CONFIG_UBI_SILENCE_MSG=y ++CONFIG_MTD_UBI=y ++CONFIG_MTD_UBI_MODULE=y ++CONFIG_MTD_UBI_WL_THRESHOLD=4096 ++CONFIG_MTD_UBI_BEB_LIMIT=20 ++# CONFIG_MTD_UBI_FASTMAP is not set ++# CONFIG_NVMXIP is not set ++# CONFIG_NVMXIP_QSPI is not set ++# CONFIG_NMBM is not set ++ ++# ++# Multiplexer drivers ++# ++# CONFIG_MULTIPLEXER is not set ++# CONFIG_BITBANGMII is not set ++# CONFIG_MV88E6352_SWITCH is not set ++CONFIG_PHYLIB=y ++# CONFIG_PHY_ADDR_ENABLE is not set ++# CONFIG_B53_SWITCH is not set ++# CONFIG_MV88E61XX_SWITCH is not set ++# CONFIG_PHYLIB_10G is not set ++# CONFIG_PHY_ADIN is not set ++# CONFIG_PHY_AIROHA is not set ++# CONFIG_PHY_AQUANTIA is not set ++# CONFIG_PHY_ATHEROS is not set ++# CONFIG_SPL_PHY_ATHEROS is not set ++# CONFIG_PHY_BROADCOM is not set ++# CONFIG_PHY_CORTINA is not set ++# CONFIG_PHY_DAVICOM is not set ++# CONFIG_PHY_ET1011C is not set ++# CONFIG_PHY_LXT is not set ++# CONFIG_PHY_MARVELL is not set ++# CONFIG_PHY_MARVELL_10G is not set ++# CONFIG_PHY_MESON_GXL is not set ++# CONFIG_PHY_MICREL is not set ++# CONFIG_PHY_MOTORCOMM is not set ++# CONFIG_PHY_MSCC is not set ++# CONFIG_PHY_NATSEMI is not set ++# CONFIG_PHY_NXP_C45_TJA11XX is not set ++# CONFIG_PHY_NXP_TJA11XX is not set ++# CONFIG_PHY_REALTEK is not set ++# CONFIG_PHY_SMSC is not set ++# CONFIG_PHY_TERANETICS is not set ++# CONFIG_PHY_TI is not set ++# CONFIG_PHY_TI_DP83867 is not set ++# CONFIG_PHY_TI_DP83869 is not set ++# CONFIG_PHY_TI_GENERIC is not set ++# CONFIG_PHY_VITESSE is not set ++# CONFIG_PHY_XILINX is not set ++# CONFIG_PHY_XILINX_GMII2RGMII is not set ++# CONFIG_PHY_XWAY is not set ++# CONFIG_PHY_ETHERNET_ID is not set ++CONFIG_PHY_FIXED=y ++# CONFIG_PHY_NCSI is not set ++# CONFIG_FSL_MEMAC is not set ++CONFIG_PHY_RESET_DELAY=0 ++# CONFIG_FSL_PFE is not set ++CONFIG_ETH=y ++CONFIG_DM_ETH=y ++# CONFIG_DM_MDIO is not set ++# CONFIG_DM_ETH_PHY is not set ++CONFIG_NETDEVICES=y ++# CONFIG_PHY_GIGE is not set ++# CONFIG_ALTERA_TSE is not set ++# CONFIG_BCM_SF2_ETH is not set ++# CONFIG_BCMGENET is not set ++# CONFIG_BNXT_ETH is not set ++# CONFIG_CALXEDA_XGMAC is not set ++# CONFIG_DRIVER_DM9000 is not set ++# CONFIG_DWC_ETH_QOS is not set ++# CONFIG_EEPRO100 is not set ++# CONFIG_ETH_DESIGNWARE is not set ++# CONFIG_ETH_DESIGNWARE_MESON8B is not set ++# CONFIG_ETHOC is not set ++# CONFIG_FMAN_ENET is not set ++# CONFIG_FTMAC100 is not set ++# CONFIG_FTGMAC100 is not set ++# CONFIG_MCFFEC is not set ++# CONFIG_FSLDMAFEC is not set ++# CONFIG_KS8851_MLL is not set ++# CONFIG_LITEETH is not set ++# CONFIG_MACB is not set ++# CONFIG_NET_NPCM750 is not set ++# CONFIG_PCH_GBE is not set ++# CONFIG_RGMII is not set ++# CONFIG_MII is not set ++# CONFIG_RMII is not set ++# CONFIG_PCNET is not set ++# CONFIG_QE_UEC is not set ++# CONFIG_RTL8139 is not set ++# CONFIG_SMC911X is not set ++# CONFIG_SUN7I_GMAC is not set ++# CONFIG_SUN4I_EMAC is not set ++# CONFIG_SUN8I_EMAC is not set ++# CONFIG_SH_ETHER is not set ++# CONFIG_DRIVER_TI_CPSW is not set ++# CONFIG_DRIVER_TI_EMAC is not set ++# CONFIG_DRIVER_TI_KEYSTONE_NET is not set ++# CONFIG_TULIP is not set ++# CONFIG_XILINX_AXIEMAC is not set ++# CONFIG_VSC7385_ENET is not set ++# CONFIG_XILINX_EMACLITE is not set ++# CONFIG_ZYNQ_GEM is not set ++# CONFIG_SYS_DPAA_QBMAN is not set ++# CONFIG_TSEC_ENET is not set ++CONFIG_MEDIATEK_ETH=y ++# CONFIG_HIFEMAC_ETH is not set ++# CONFIG_HIGMACV300_ETH is not set ++# CONFIG_NVME is not set ++# CONFIG_NVME_APPLE is not set ++ ++# ++# PCI Endpoint ++# ++# CONFIG_PCI_ENDPOINT is not set ++# CONFIG_X86_PCH7 is not set ++# CONFIG_X86_PCH9 is not set ++ ++# ++# PHY Subsystem ++# ++CONFIG_PHY=y ++# CONFIG_NOP_PHY is not set ++# CONFIG_MIPI_DPHY_HELPERS is not set ++# CONFIG_BCM_SR_PCIE_PHY is not set ++# CONFIG_OMAP_USB2_PHY is not set ++CONFIG_PHY_MTK_TPHY=y ++ ++# ++# Rockchip PHY driver ++# ++# CONFIG_PHY_CADENCE_SIERRA is not set ++# CONFIG_PHY_CADENCE_TORRENT is not set ++# CONFIG_MSM8916_USB_PHY is not set ++# CONFIG_MVEBU_COMPHY_SUPPORT is not set ++ ++# ++# Pin controllers ++# ++CONFIG_PINCTRL=y ++CONFIG_PINCTRL_FULL=y ++CONFIG_PINCTRL_GENERIC=y ++CONFIG_PINMUX=y ++CONFIG_PINCONF=y ++CONFIG_PINCONF_RECURSIVE=y ++# CONFIG_PINCTRL_AT91 is not set ++# CONFIG_PINCTRL_AT91PIO4 is not set ++# CONFIG_PINCTRL_INTEL is not set ++# CONFIG_PINCTRL_QE is not set ++# CONFIG_PINCTRL_ROCKCHIP_RV1108 is not set ++# CONFIG_PINCTRL_SINGLE is not set ++# CONFIG_PINCTRL_STM32 is not set ++# CONFIG_PINCTRL_STMFX is not set ++# CONFIG_PINCTRL_K210 is not set ++CONFIG_PINCTRL_MTK=y ++# CONFIG_PINCTRL_MT7622 is not set ++# CONFIG_PINCTRL_MT7623 is not set ++# CONFIG_PINCTRL_MT7629 is not set ++CONFIG_PINCTRL_MT7981=y ++# CONFIG_PINCTRL_MT7986 is not set ++# CONFIG_PINCTRL_MT7988 is not set ++# CONFIG_PINCTRL_MT8512 is not set ++# CONFIG_PINCTRL_MT8516 is not set ++# CONFIG_PINCTRL_MT8518 is not set ++CONFIG_POWER=y ++# CONFIG_POWER_LEGACY is not set ++# CONFIG_ACPI_PMC is not set ++ ++# ++# Power Domain Support ++# ++CONFIG_POWER_DOMAIN=y ++# CONFIG_APPLE_PMGR_POWER_DOMAIN is not set ++CONFIG_MTK_POWER_DOMAIN=y ++# CONFIG_DM_PMIC is not set ++# CONFIG_PMIC_TPS65217 is not set ++# CONFIG_POWER_TPS65218 is not set ++# CONFIG_POWER_TPS62362 is not set ++# CONFIG_DM_REGULATOR is not set ++# CONFIG_TPS6586X_POWER is not set ++# CONFIG_POWER_MT6323 is not set ++CONFIG_DM_PWM=y ++# CONFIG_PWM_ASPEED is not set ++# CONFIG_PWM_CADENCE_TTC is not set ++# CONFIG_PWM_CROS_EC is not set ++# CONFIG_PWM_EXYNOS is not set ++# CONFIG_PWM_IMX is not set ++# CONFIG_PWM_MESON is not set ++CONFIG_PWM_MTK=y ++# CONFIG_PWM_ROCKCHIP is not set ++# CONFIG_PWM_SANDBOX is not set ++# CONFIG_PWM_SIFIVE is not set ++# CONFIG_PWM_TEGRA is not set ++# CONFIG_PWM_SUNXI is not set ++# CONFIG_U_QE is not set ++# CONFIG_RAM is not set ++ ++# ++# Reboot Mode Support ++# ++# CONFIG_DM_REBOOT_MODE is not set ++ ++# ++# Remote Processor drivers ++# ++ ++# ++# Reset Controller Support ++# ++# CONFIG_RESET_AST2500 is not set ++# CONFIG_RESET_AST2600 is not set ++CONFIG_RESET_MEDIATEK=y ++# CONFIG_RESET_HISILICON is not set ++# CONFIG_RESET_SYSCON is not set ++# CONFIG_RESET_SCMI is not set ++# CONFIG_RESET_DRA7 is not set ++# CONFIG_DM_RNG is not set ++ ++# ++# Real Time Clock ++# ++# CONFIG_DM_RTC is not set ++# CONFIG_RTC_ENABLE_32KHZ_OUTPUT is not set ++# CONFIG_RTC_DS1337 is not set ++# CONFIG_RTC_DS1338 is not set ++# CONFIG_RTC_DS1374 is not set ++# CONFIG_RTC_DS3231 is not set ++# CONFIG_RTC_PCF8563 is not set ++# CONFIG_RTC_PT7C4338 is not set ++# CONFIG_RTC_PL031 is not set ++# CONFIG_RTC_S35392A is not set ++# CONFIG_RTC_MC13XXX is not set ++# CONFIG_RTC_MC146818 is not set ++# CONFIG_RTC_M41T62 is not set ++# CONFIG_SCSI is not set ++# CONFIG_DM_SCSI is not set ++CONFIG_SERIAL=y ++CONFIG_BAUDRATE=115200 ++# CONFIG_DEFAULT_ENV_IS_RW is not set ++CONFIG_REQUIRE_SERIAL_CONSOLE=y ++# CONFIG_SPECIFY_CONSOLE_INDEX is not set ++CONFIG_SERIAL_PRESENT=y ++CONFIG_DM_SERIAL=y ++# CONFIG_SERIAL_RX_BUFFER is not set ++# CONFIG_SERIAL_PUTS is not set ++# CONFIG_SERIAL_SEARCH_ALL is not set ++# CONFIG_SERIAL_PROBE_ALL is not set ++# CONFIG_VPL_DM_SERIAL is not set ++CONFIG_DEBUG_UART_MTK=y ++CONFIG_DEBUG_UART_SHIFT=0 ++# CONFIG_DEBUG_UART_ANNOUNCE is not set ++# CONFIG_DEBUG_UART_SKIP_INIT is not set ++# CONFIG_ALTERA_JTAG_UART is not set ++# CONFIG_ALTERA_UART is not set ++# CONFIG_ARC_SERIAL is not set ++# CONFIG_ARM_DCC is not set ++# CONFIG_ATMEL_USART is not set ++# CONFIG_BCM6345_SERIAL is not set ++# CONFIG_COREBOOT_SERIAL is not set ++# CONFIG_CORTINA_UART is not set ++# CONFIG_FSL_LINFLEXUART is not set ++# CONFIG_FSL_LPUART is not set ++# CONFIG_MVEBU_A3700_UART is not set ++# CONFIG_MCFUART is not set ++# CONFIG_NULLDEV_SERIAL is not set ++# CONFIG_SYS_NS16550 is not set ++# CONFIG_PL01X_SERIAL is not set ++# CONFIG_ROCKCHIP_SERIAL is not set ++# CONFIG_XILINX_UARTLITE is not set ++# CONFIG_MSM_SERIAL is not set ++# CONFIG_MSM_GENI_SERIAL is not set ++# CONFIG_MXS_AUART_SERIAL is not set ++# CONFIG_OMAP_SERIAL is not set ++# CONFIG_SIFIVE_SERIAL is not set ++# CONFIG_ZYNQ_SERIAL is not set ++CONFIG_MTK_SERIAL=y ++# CONFIG_MT7620_SERIAL is not set ++# CONFIG_NPCM_SERIAL is not set ++# CONFIG_SM is not set ++# CONFIG_MESON_SM is not set ++# CONFIG_SMEM is not set ++ ++# ++# Sound support ++# ++# CONFIG_SOUND is not set ++ ++# ++# SOC (System On Chip) specific Drivers ++# ++# CONFIG_SOC_DEVICE is not set ++# CONFIG_SOC_TI is not set ++CONFIG_SPI=y ++CONFIG_DM_SPI=y ++CONFIG_SPI_MEM=y ++# CONFIG_SPI_DIRMAP is not set ++# CONFIG_ALTERA_SPI is not set ++# CONFIG_APPLE_SPI is not set ++# CONFIG_ATCSPI200_SPI is not set ++# CONFIG_ATMEL_SPI is not set ++# CONFIG_BCMSTB_SPI is not set ++# CONFIG_CORTINA_SFLASH is not set ++# CONFIG_CADENCE_QSPI is not set ++# CONFIG_CF_SPI is not set ++# CONFIG_DESIGNWARE_SPI is not set ++# CONFIG_EXYNOS_SPI is not set ++# CONFIG_FSL_DSPI is not set ++# CONFIG_FSL_QSPI is not set ++# CONFIG_GXP_SPI is not set ++# CONFIG_ICH_SPI is not set ++# CONFIG_IPROC_QSPI is not set ++# CONFIG_KIRKWOOD_SPI is not set ++# CONFIG_MICROCHIP_COREQSPI is not set ++# CONFIG_MPC8XXX_SPI is not set ++# CONFIG_MTK_SNOR is not set ++# CONFIG_MTK_SNFI_SPI is not set ++CONFIG_MTK_SPIM=y ++# CONFIG_MVEBU_A3700_SPI is not set ++# CONFIG_MXS_SPI is not set ++# CONFIG_SPI_MXIC is not set ++# CONFIG_NPCM_FIU_SPI is not set ++# CONFIG_NPCM_PSPI is not set ++# CONFIG_NXP_FSPI is not set ++# CONFIG_OMAP3_SPI is not set ++# CONFIG_PL022_SPI is not set ++# CONFIG_ROCKCHIP_SFC is not set ++# CONFIG_ROCKCHIP_SPI is not set ++# CONFIG_SPI_ASPEED_SMC is not set ++# CONFIG_SPI_SIFIVE is not set ++# CONFIG_SOFT_SPI is not set ++# CONFIG_SPI_SN_F_OSPI is not set ++# CONFIG_SPI_SUNXI is not set ++# CONFIG_TEGRA114_SPI is not set ++# CONFIG_TEGRA20_SFLASH is not set ++# CONFIG_TEGRA20_SLINK is not set ++# CONFIG_TEGRA210_QSPI is not set ++# CONFIG_TI_QSPI is not set ++# CONFIG_XILINX_SPI is not set ++# CONFIG_ZYNQ_SPI is not set ++# CONFIG_ZYNQ_QSPI is not set ++# CONFIG_ZYNQMP_GQSPI is not set ++# CONFIG_SH_QSPI is not set ++# CONFIG_MXC_SPI is not set ++ ++# ++# SPMI support ++# ++# CONFIG_SPMI is not set ++# CONFIG_SYSINFO is not set ++ ++# ++# System reset device drivers ++# ++# CONFIG_SYSRESET is not set ++# CONFIG_TEE is not set ++# CONFIG_DM_THERMAL is not set ++ ++# ++# Timer Support ++# ++# CONFIG_TIMER is not set ++ ++# ++# TPM support ++# ++CONFIG_USB=y ++CONFIG_DM_USB=y ++# CONFIG_DM_USB_GADGET is not set ++ ++# ++# USB Host Controller Drivers ++# ++CONFIG_USB_HOST=y ++CONFIG_USB_XHCI_HCD=y ++# CONFIG_USB_XHCI_DWC3 is not set ++# CONFIG_USB_XHCI_DWC3_OF_SIMPLE is not set ++CONFIG_USB_XHCI_MTK=y ++# CONFIG_USB_XHCI_FSL is not set ++# CONFIG_USB_XHCI_BRCM is not set ++# CONFIG_USB_EHCI_HCD is not set ++# CONFIG_USB_OHCI_HCD is not set ++# CONFIG_USB_UHCI_HCD is not set ++# CONFIG_USB_DWC2 is not set ++# CONFIG_USB_R8A66597_HCD is not set ++# CONFIG_USB_ISP1760 is not set ++# CONFIG_USB_CDNS3 is not set ++# CONFIG_USB_DWC3 is not set ++# CONFIG_USB_MTU3 is not set ++ ++# ++# Legacy MUSB Support ++# ++# CONFIG_USB_MUSB_HCD is not set ++# CONFIG_USB_MUSB_UDC is not set ++ ++# ++# MUSB Controller Driver ++# ++# CONFIG_USB_MUSB_HOST is not set ++# CONFIG_USB_MUSB_PIO_ONLY is not set ++ ++# ++# USB Phy ++# ++# CONFIG_TWL4030_USB is not set ++# CONFIG_ROCKCHIP_USB2_PHY is not set ++ ++# ++# ULPI drivers ++# ++ ++# ++# USB peripherals ++# ++CONFIG_USB_STORAGE=y ++# CONFIG_USB_KEYBOARD is not set ++# CONFIG_USB_ONBOARD_HUB is not set ++CONFIG_USB_HUB_DEBOUNCE_TIMEOUT=1000 ++# CONFIG_USB_HOST_ETHER is not set ++# CONFIG_USB_GADGET is not set ++# CONFIG_SPL_USB_GADGET is not set ++ ++# ++# UFS Host Controller Support ++# ++# CONFIG_TI_J721E_UFS is not set ++ ++# ++# Graphics support ++# ++# CONFIG_VIDEO is not set ++ ++# ++# VirtIO Drivers ++# ++# CONFIG_VIRTIO_MMIO is not set ++ ++# ++# 1-Wire support ++# ++# CONFIG_W1 is not set ++ ++# ++# 1-wire EEPROM support ++# ++# CONFIG_W1_EEPROM is not set ++ ++# ++# Watchdog Timer Support ++# ++# CONFIG_WATCHDOG is not set ++CONFIG_WATCHDOG_TIMEOUT_MSECS=60000 ++# CONFIG_IMX_WATCHDOG is not set ++# CONFIG_ULP_WATCHDOG is not set ++# CONFIG_WDT is not set ++# CONFIG_PHYS_TO_BUS is not set ++ ++# ++# File systems ++# ++# CONFIG_FS_BTRFS is not set ++# CONFIG_FS_CBFS is not set ++# CONFIG_FS_EXT4 is not set ++CONFIG_FS_FAT=y ++CONFIG_FAT_WRITE=y ++CONFIG_FS_FAT_MAX_CLUSTSIZE=65536 ++# CONFIG_FS_JFFS2 is not set ++CONFIG_UBIFS_SILENCE_MSG=y ++CONFIG_UBIFS_SILENCE_DEBUG_DUMP=y ++# CONFIG_FS_CRAMFS is not set ++# CONFIG_YAFFS2 is not set ++# CONFIG_FS_SQUASHFS is not set ++# CONFIG_FS_EROFS is not set ++ ++# ++# Library routines ++# ++# CONFIG_ADDR_MAP is not set ++# CONFIG_SYS_TIMER_COUNTS_DOWN is not set ++# CONFIG_PHYSMEM is not set ++# CONFIG_BCH is not set ++# CONFIG_CC_OPTIMIZE_LIBS_FOR_SPEED is not set ++CONFIG_CHARSET=y ++# CONFIG_DYNAMIC_CRC_TABLE is not set ++CONFIG_LIB_UUID=y ++# CONFIG_SEMIHOSTING is not set ++CONFIG_PRINTF=y ++CONFIG_SPRINTF=y ++CONFIG_STRTO=y ++CONFIG_SYS_HZ=1000 ++# CONFIG_PANIC_HANG is not set ++CONFIG_REGEX=y ++CONFIG_LIB_RAND=y ++# CONFIG_LIB_HW_RAND is not set ++CONFIG_SUPPORT_ACPI=y ++# CONFIG_ACPI is not set ++CONFIG_RBTREE=y ++# CONFIG_BITREVERSE is not set ++# CONFIG_TRACE is not set ++# CONFIG_CIRCBUF is not set ++# CONFIG_CMD_DHRYSTONE is not set ++ ++# ++# Security support ++# ++# CONFIG_AES is not set ++# CONFIG_ECDSA is not set ++# CONFIG_RSA is not set ++# CONFIG_TPM is not set ++ ++# ++# Android Verified Boot ++# ++ ++# ++# Hashing Support ++# ++# CONFIG_BLAKE2 is not set ++CONFIG_SHA1=y ++CONFIG_SHA256=y ++# CONFIG_SHA512 is not set ++# CONFIG_SHA384 is not set ++# CONFIG_SHA_HW_ACCEL is not set ++CONFIG_MD5=y ++CONFIG_CRC8=y ++CONFIG_CRC32=y ++ ++# ++# Compression Support ++# ++# CONFIG_LZ4 is not set ++CONFIG_LZMA=y ++CONFIG_LZO=y ++CONFIG_GZIP=y ++# CONFIG_ZLIB_UNCOMPRESS is not set ++# CONFIG_BZIP2 is not set ++CONFIG_ZLIB=y ++# CONFIG_ZSTD is not set ++CONFIG_VPL_LZMA=y ++# CONFIG_SPL_GZIP is not set ++# CONFIG_ERRNO_STR is not set ++CONFIG_HEXDUMP=y ++# CONFIG_GETOPT is not set ++CONFIG_OF_LIBFDT=y ++CONFIG_OF_LIBFDT_ASSUME_MASK=0x0 ++CONFIG_SYS_FDT_PAD=0x3000 ++ ++# ++# System tables ++# ++CONFIG_GENERATE_SMBIOS_TABLE=y ++# CONFIG_LIB_RATIONAL is not set ++CONFIG_SMBIOS=y ++# CONFIG_SMBIOS_PARSER is not set ++CONFIG_EFI_LOADER=y ++CONFIG_CMD_BOOTEFI_BOOTMGR=y ++CONFIG_EFI_VARIABLE_FILE_STORE=y ++# CONFIG_EFI_VARIABLE_NO_STORE is not set ++# CONFIG_EFI_VARIABLES_PRESEED is not set ++CONFIG_EFI_VAR_BUF_SIZE=131072 ++# CONFIG_EFI_SCROLL_ON_CLEAR_SCREEN is not set ++# CONFIG_EFI_RUNTIME_UPDATE_CAPSULE is not set ++CONFIG_EFI_CAPSULE_MAX=15 ++CONFIG_EFI_DEVICE_PATH_TO_TEXT=y ++CONFIG_EFI_DEVICE_PATH_UTIL=y ++CONFIG_EFI_DT_FIXUP=y ++CONFIG_EFI_LOADER_HII=y ++CONFIG_EFI_UNICODE_COLLATION_PROTOCOL2=y ++CONFIG_EFI_UNICODE_CAPITALIZATION=y ++# CONFIG_EFI_LOADER_BOUNCE_BUFFER is not set ++CONFIG_EFI_PLATFORM_LANG_CODES="en-US" ++CONFIG_EFI_HAVE_RUNTIME_RESET=y ++CONFIG_EFI_LOAD_FILE2_INITRD=y ++CONFIG_EFI_ECPT=y ++CONFIG_EFI_EBBR_2_1_CONFORMANCE=y ++# CONFIG_OPTEE_LIB is not set ++# CONFIG_OPTEE_IMAGE is not set ++# CONFIG_BOOTM_OPTEE is not set ++# CONFIG_TEST_FDTDEC is not set ++CONFIG_LIB_ELF=y ++CONFIG_LMB=y ++CONFIG_LMB_USE_MAX_REGIONS=y ++CONFIG_LMB_MAX_REGIONS=64 ++# CONFIG_PHANDLE_CHECK_SEQ is not set ++ ++# ++# Testing ++# ++# CONFIG_UNIT_TEST is not set ++# CONFIG_POST is not set ++ ++# ++# Tools options ++# ++CONFIG_MKIMAGE_DTC_PATH="dtc" ++CONFIG_TOOLS_CRC32=y ++# CONFIG_TOOLS_LIBCRYPTO is not set ++CONFIG_TOOLS_FIT=y ++CONFIG_TOOLS_FIT_FULL_CHECK=y ++CONFIG_TOOLS_FIT_PRINT=y ++CONFIG_TOOLS_FIT_RSASSA_PSS=y ++CONFIG_TOOLS_FIT_SIGNATURE=y ++CONFIG_TOOLS_FIT_SIGNATURE_MAX_SIZE=0x10000000 ++CONFIG_TOOLS_FIT_VERBOSE=y ++CONFIG_TOOLS_MD5=y ++CONFIG_TOOLS_OF_LIBFDT=y ++CONFIG_TOOLS_SHA1=y ++CONFIG_TOOLS_SHA256=y ++CONFIG_TOOLS_SHA384=y ++CONFIG_TOOLS_SHA512=y ++# CONFIG_TOOLS_MKEFICAPSULE is not set ++# CONFIG_FSPI_CONF_HEADER is not set ++# CONFIG_TOOLS_MKFWUMDATA is not set +--- /dev/null ++++ b/configs/mt7981_openwrt-one-spi-nand_defconfig +@@ -0,0 +1,1815 @@ ++# ++# Automatically generated file; DO NOT EDIT. ++# U-Boot 2024.01 Configuration ++# ++ ++# ++# Compiler: aarch64-openwrt-linux-musl-gcc (OpenWrt GCC 12.3.0 r25206+8-d5e2177a6b) 12.3.0 ++# ++CONFIG_CREATE_ARCH_SYMLINK=y ++CONFIG_SYS_CACHE_SHIFT_6=y ++CONFIG_SYS_CACHELINE_SIZE=64 ++CONFIG_LINKER_LIST_ALIGN=8 ++# CONFIG_ARC is not set ++CONFIG_ARM=y ++# CONFIG_M68K is not set ++# CONFIG_MICROBLAZE is not set ++# CONFIG_MIPS is not set ++# CONFIG_NIOS2 is not set ++# CONFIG_PPC is not set ++# CONFIG_RISCV is not set ++# CONFIG_SANDBOX is not set ++# CONFIG_SH is not set ++# CONFIG_X86 is not set ++# CONFIG_XTENSA is not set ++CONFIG_SYS_ARCH="arm" ++CONFIG_SYS_CPU="armv8" ++CONFIG_SYS_SOC="mediatek" ++CONFIG_SYS_VENDOR="mediatek" ++CONFIG_SYS_BOARD="mt7981" ++CONFIG_SYS_CONFIG_NAME="mt7981" ++ ++# ++# Skipping low level initialization functions ++# ++# CONFIG_SKIP_LOWLEVEL_INIT is not set ++# CONFIG_SKIP_LOWLEVEL_INIT_ONLY is not set ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y ++CONFIG_SYS_NONCACHED_MEMORY=0x100000 ++# CONFIG_SYS_ICACHE_OFF is not set ++# CONFIG_SYS_DCACHE_OFF is not set ++ ++# ++# ARM architecture ++# ++CONFIG_ARM64=y ++CONFIG_ARM64_CRC32=y ++CONFIG_COUNTER_FREQUENCY=0 ++CONFIG_POSITION_INDEPENDENT=y ++CONFIG_INIT_SP_RELATIVE=y ++CONFIG_SYS_INIT_SP_BSS_OFFSET=524288 ++# CONFIG_GIC_V3_ITS is not set ++CONFIG_STATIC_RELA=y ++CONFIG_DMA_ADDR_T_64BIT=y ++CONFIG_GPIO_EXTRA_HEADER=y ++CONFIG_ARM_ASM_UNIFIED=y ++# CONFIG_SYS_ARM_CACHE_CP15 is not set ++# CONFIG_SYS_ARM_MMU is not set ++# CONFIG_SYS_ARM_MPU is not set ++CONFIG_SYS_ARM_ARCH=8 ++CONFIG_SYS_ARM_CACHE_WRITEBACK=y ++# CONFIG_SYS_ARM_CACHE_WRITETHROUGH is not set ++# CONFIG_SYS_ARM_CACHE_WRITEALLOC is not set ++# CONFIG_ARCH_CPU_INIT is not set ++CONFIG_SYS_ARCH_TIMER=y ++CONFIG_ARM_SMCCC=y ++# CONFIG_SYS_L2_PL310 is not set ++# CONFIG_SPL_SYS_L2_PL310 is not set ++# CONFIG_SYS_L2CACHE_OFF is not set ++# CONFIG_ENABLE_ARM_SOC_BOOT0_HOOK is not set ++# CONFIG_USE_ARCH_MEMCPY is not set ++# CONFIG_USE_ARCH_MEMSET is not set ++CONFIG_ARM64_SUPPORT_AARCH32=y ++# CONFIG_ARCH_AT91 is not set ++# CONFIG_ARCH_DAVINCI is not set ++# CONFIG_ARCH_HISTB is not set ++# CONFIG_ARCH_KIRKWOOD is not set ++# CONFIG_ARCH_MVEBU is not set ++# CONFIG_ARCH_ORION5X is not set ++# CONFIG_TARGET_STV0991 is not set ++# CONFIG_ARCH_BCM283X is not set ++# CONFIG_ARCH_BCMSTB is not set ++# CONFIG_ARCH_BCMBCA is not set ++# CONFIG_TARGET_VEXPRESS_CA9X4 is not set ++# CONFIG_TARGET_BCMNS is not set ++# CONFIG_TARGET_BCMNS2 is not set ++# CONFIG_TARGET_BCMNS3 is not set ++# CONFIG_ARCH_EXYNOS is not set ++# CONFIG_ARCH_S5PC1XX is not set ++# CONFIG_ARCH_HIGHBANK is not set ++# CONFIG_ARCH_INTEGRATOR is not set ++# CONFIG_ARCH_IPQ40XX is not set ++# CONFIG_ARCH_KEYSTONE is not set ++# CONFIG_ARCH_K3 is not set ++# CONFIG_ARCH_OMAP2PLUS is not set ++# CONFIG_ARCH_MESON is not set ++CONFIG_ARCH_MEDIATEK=y ++# CONFIG_ARCH_LPC32XX is not set ++# CONFIG_ARCH_IMX8 is not set ++# CONFIG_ARCH_IMX8M is not set ++# CONFIG_ARCH_IMX8ULP is not set ++# CONFIG_ARCH_IMX9 is not set ++# CONFIG_ARCH_IMXRT is not set ++# CONFIG_ARCH_MX23 is not set ++# CONFIG_ARCH_MX28 is not set ++# CONFIG_ARCH_MX31 is not set ++# CONFIG_ARCH_MX7ULP is not set ++# CONFIG_ARCH_MX7 is not set ++# CONFIG_ARCH_MX6 is not set ++# CONFIG_ARCH_MX5 is not set ++# CONFIG_ARCH_NEXELL is not set ++# CONFIG_ARCH_NPCM is not set ++# CONFIG_ARCH_APPLE is not set ++# CONFIG_ARCH_OWL is not set ++# CONFIG_ARCH_QEMU is not set ++# CONFIG_ARCH_RMOBILE is not set ++# CONFIG_ARCH_SNAPDRAGON is not set ++# CONFIG_ARCH_SOCFPGA is not set ++# CONFIG_ARCH_SUNXI is not set ++# CONFIG_ARCH_U8500 is not set ++# CONFIG_ARCH_VERSAL is not set ++# CONFIG_ARCH_VERSAL_NET is not set ++# CONFIG_ARCH_VF610 is not set ++# CONFIG_ARCH_ZYNQ is not set ++# CONFIG_ARCH_ZYNQMP_R5 is not set ++# CONFIG_ARCH_ZYNQMP is not set ++# CONFIG_ARCH_TEGRA is not set ++# CONFIG_ARCH_VEXPRESS64 is not set ++# CONFIG_TARGET_CORSTONE1000 is not set ++# CONFIG_TARGET_TOTAL_COMPUTE is not set ++# CONFIG_TARGET_LS2080A_EMU is not set ++# CONFIG_TARGET_LS1088AQDS is not set ++# CONFIG_TARGET_LS2080AQDS is not set ++# CONFIG_TARGET_LS2080ARDB is not set ++# CONFIG_TARGET_LS2081ARDB is not set ++# CONFIG_TARGET_LX2160ARDB is not set ++# CONFIG_TARGET_LX2160AQDS is not set ++# CONFIG_TARGET_LX2162AQDS is not set ++# CONFIG_TARGET_HIKEY is not set ++# CONFIG_TARGET_HIKEY960 is not set ++# CONFIG_TARGET_POPLAR is not set ++# CONFIG_TARGET_LS1012AQDS is not set ++# CONFIG_TARGET_LS1012ARDB is not set ++# CONFIG_TARGET_LS1012A2G5RDB is not set ++# CONFIG_TARGET_LS1012AFRWY is not set ++# CONFIG_TARGET_LS1012AFRDM is not set ++# CONFIG_TARGET_LS1028AQDS is not set ++# CONFIG_TARGET_LS1028ARDB is not set ++# CONFIG_TARGET_LS1088ARDB is not set ++# CONFIG_TARGET_LS1021AQDS is not set ++# CONFIG_TARGET_LS1021ATWR is not set ++# CONFIG_TARGET_PG_WCOM_SELI8 is not set ++# CONFIG_TARGET_PG_WCOM_EXPU1 is not set ++# CONFIG_TARGET_LS1021ATSN is not set ++# CONFIG_TARGET_LS1021AIOT is not set ++# CONFIG_TARGET_LS1043AQDS is not set ++# CONFIG_TARGET_LS1043ARDB is not set ++# CONFIG_TARGET_LS1046AQDS is not set ++# CONFIG_TARGET_LS1046ARDB is not set ++# CONFIG_TARGET_LS1046AFRWY is not set ++# CONFIG_TARGET_SL28 is not set ++# CONFIG_TARGET_TEN64 is not set ++# CONFIG_ARCH_UNIPHIER is not set ++# CONFIG_ARCH_SYNQUACER is not set ++# CONFIG_ARCH_STM32 is not set ++# CONFIG_ARCH_STI is not set ++# CONFIG_ARCH_STM32MP is not set ++# CONFIG_ARCH_ROCKCHIP is not set ++# CONFIG_ARCH_OCTEONTX is not set ++# CONFIG_ARCH_OCTEONTX2 is not set ++# CONFIG_TARGET_THUNDERX_88XX is not set ++# CONFIG_ARCH_ASPEED is not set ++# CONFIG_TARGET_DURIAN is not set ++# CONFIG_TARGET_POMELO is not set ++# CONFIG_TARGET_PRESIDIO_ASIC is not set ++# CONFIG_TARGET_XENGUEST_ARM64 is not set ++# CONFIG_ARCH_GXP is not set ++# CONFIG_STATIC_MACH_TYPE is not set ++CONFIG_TEXT_BASE=0x41e00000 ++CONFIG_SYS_MALLOC_LEN=0x400000 ++CONFIG_SYS_MALLOC_F_LEN=0x4000 ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_ENV_SOURCE_FILE="" ++CONFIG_SF_DEFAULT_SPEED=1000000 ++CONFIG_SF_DEFAULT_MODE=0x0 ++CONFIG_ENV_SIZE=0x1f000 ++CONFIG_DM_GPIO=y ++CONFIG_DEFAULT_DEVICE_TREE="openwrt-one" ++CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_MULTI_DTB_FIT_UNCOMPRESS_SZ=0x8000 ++CONFIG_DM_RESET=y ++CONFIG_SYS_MONITOR_LEN=0 ++# CONFIG_MT8512 is not set ++# CONFIG_TARGET_MT7622 is not set ++# CONFIG_TARGET_MT7623 is not set ++# CONFIG_TARGET_MT7629 is not set ++CONFIG_TARGET_MT7981=y ++# CONFIG_TARGET_MT7986 is not set ++# CONFIG_TARGET_MT7988 is not set ++# CONFIG_TARGET_MT8183 is not set ++# CONFIG_TARGET_MT8512 is not set ++# CONFIG_TARGET_MT8516 is not set ++# CONFIG_TARGET_MT8518 is not set ++CONFIG_MTK_BROM_HEADER_INFO="media=snand;nandinfo=2k+64" ++CONFIG_RESET_BUTTON_LABEL="back" ++CONFIG_RESET_BUTTON_SETTLE_DELAY=0 ++CONFIG_ERR_PTR_OFFSET=0x0 ++# CONFIG_SPL is not set ++CONFIG_BOOTSTAGE_STASH_ADDR=0x0 ++CONFIG_DEBUG_UART_BASE=0x11002000 ++CONFIG_DEBUG_UART_CLOCK=40000000 ++# CONFIG_DEBUG_UART_BOARD_INIT is not set ++CONFIG_IDENT_STRING="" ++CONFIG_SYS_CLK_FREQ=0 ++# CONFIG_CHIP_DIP_SCAN is not set ++# CONFIG_CMO_BY_VA_ONLY is not set ++# CONFIG_ARMV8_MULTIENTRY is not set ++# CONFIG_ARMV8_SET_SMPEN is not set ++# CONFIG_ARMV8_SWITCH_TO_EL1 is not set ++ ++# ++# ARMv8 secure monitor firmware ++# ++# CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT is not set ++CONFIG_PSCI_RESET=y ++# CONFIG_ARMV8_PSCI is not set ++# CONFIG_ARMV8_EA_EL3_FIRST is not set ++# CONFIG_ARMV8_CRYPTO is not set ++# CONFIG_CMD_DEKBLOB is not set ++# CONFIG_IMX_CAAM_DEK_ENCAP is not set ++# CONFIG_IMX_OPTEE_DEK_ENCAP is not set ++# CONFIG_IMX_SECO_DEK_ENCAP is not set ++# CONFIG_IMX_ELE_DEK_ENCAP is not set ++# CONFIG_CMD_HDMIDETECT is not set ++CONFIG_IMX_DCD_ADDR=0x00910000 ++CONFIG_SYS_MEM_TOP_HIDE=0x0 ++CONFIG_SYS_LOAD_ADDR=0x46000000 ++ ++# ++# ARM debug ++# ++CONFIG_BUILD_TARGET="" ++# CONFIG_PCI is not set ++CONFIG_FWU_NUM_BANKS=2 ++CONFIG_FWU_NUM_IMAGES_PER_BANK=2 ++CONFIG_DEBUG_UART=y ++# CONFIG_AHCI is not set ++# CONFIG_OF_BOARD_FIXUP is not set ++ ++# ++# Functionality shared between NXP SoCs ++# ++# CONFIG_NXP_ESBC is not set ++ ++# ++# General setup ++# ++CONFIG_LOCALVERSION="" ++CONFIG_LOCALVERSION_AUTO=y ++CONFIG_CC_IS_GCC=y ++CONFIG_GCC_VERSION=120300 ++CONFIG_CLANG_VERSION=0 ++CONFIG_CC_OPTIMIZE_FOR_SIZE=y ++# CONFIG_CC_OPTIMIZE_FOR_SPEED is not set ++# CONFIG_CC_OPTIMIZE_FOR_DEBUG is not set ++# CONFIG_OPTIMIZE_INLINING is not set ++CONFIG_ARCH_SUPPORTS_LTO=y ++# CONFIG_LTO is not set ++CONFIG_CC_HAS_ASM_INLINE=y ++# CONFIG_XEN is not set ++# CONFIG_ENV_VARS_UBOOT_CONFIG is not set ++# CONFIG_SYS_BOOT_GET_CMDLINE is not set ++# CONFIG_SYS_BOOT_GET_KBD is not set ++CONFIG_SYS_MALLOC_F=y ++# CONFIG_VALGRIND is not set ++CONFIG_EXPERT=y ++CONFIG_SYS_MALLOC_CLEAR_ON_INIT=y ++# CONFIG_SYS_MALLOC_DEFAULT_TO_INIT is not set ++# CONFIG_TOOLS_DEBUG is not set ++CONFIG_PHYS_64BIT=y ++CONFIG_FDT_64BIT=y ++# CONFIG_REMAKE_ELF is not set ++# CONFIG_HAS_BOARD_SIZE_LIMIT is not set ++# CONFIG_SYS_CUSTOM_LDSCRIPT is not set ++CONFIG_PLATFORM_ELFENTRY="_start" ++CONFIG_STACK_SIZE=0x1000000 ++CONFIG_SYS_SRAM_BASE=0x0 ++CONFIG_SYS_SRAM_SIZE=0x0 ++# CONFIG_MP is not set ++CONFIG_HAVE_TEXT_BASE=y ++# CONFIG_HAVE_SYS_UBOOT_START is not set ++CONFIG_SYS_UBOOT_START=0x41e00000 ++# CONFIG_DYNAMIC_SYS_CLK_FREQ is not set ++# CONFIG_API is not set ++ ++# ++# Boot options ++# ++ ++# ++# Boot images ++# ++# CONFIG_ANDROID_BOOT_IMAGE is not set ++# CONFIG_TIMESTAMP is not set ++CONFIG_FIT=y ++CONFIG_FIT_EXTERNAL_OFFSET=0x0 ++CONFIG_FIT_FULL_CHECK=y ++# CONFIG_FIT_SIGNATURE is not set ++# CONFIG_FIT_CIPHER is not set ++# CONFIG_FIT_VERBOSE is not set ++# CONFIG_FIT_BEST_MATCH is not set ++CONFIG_FIT_PRINT=y ++# CONFIG_SPL_LOAD_FIT_FULL is not set ++CONFIG_PXE_UTILS=y ++CONFIG_BOOTSTD=y ++# CONFIG_BOOTSTD_FULL is not set ++# CONFIG_BOOTSTD_DEFAULTS is not set ++CONFIG_BOOTSTD_BOOTCOMMAND=y ++CONFIG_BOOTMETH_GLOBAL=y ++# CONFIG_BOOTMETH_CROS is not set ++CONFIG_BOOTMETH_EXTLINUX=y ++CONFIG_BOOTMETH_EXTLINUX_PXE=y ++CONFIG_BOOTMETH_EFILOADER=y ++CONFIG_BOOTMETH_VBE=y ++CONFIG_BOOTMETH_VBE_REQUEST=y ++CONFIG_BOOTMETH_VBE_SIMPLE=y ++CONFIG_BOOTMETH_VBE_SIMPLE_OS=y ++# CONFIG_BOOTMETH_SCRIPT is not set ++CONFIG_LEGACY_IMAGE_FORMAT=y ++# CONFIG_SUPPORT_RAW_INITRD is not set ++# CONFIG_CHROMEOS is not set ++# CONFIG_CHROMEOS_VBOOT is not set ++# CONFIG_RAMBOOT_PBL is not set ++CONFIG_SYS_BOOT_RAMDISK_HIGH=y ++# CONFIG_DISTRO_DEFAULTS is not set ++ ++# ++# Boot timing ++# ++# CONFIG_BOOTSTAGE is not set ++CONFIG_BOOTSTAGE_STASH_SIZE=0x1000 ++# CONFIG_SHOW_BOOT_PROGRESS is not set ++ ++# ++# Boot media ++# ++CONFIG_NAND_BOOT=y ++# CONFIG_ONENAND_BOOT is not set ++# CONFIG_QSPI_BOOT is not set ++# CONFIG_SATA_BOOT is not set ++# CONFIG_SD_BOOT is not set ++# CONFIG_SD_BOOT_QSPI is not set ++CONFIG_SPI_BOOT=y ++ ++# ++# Autoboot options ++# ++CONFIG_AUTOBOOT=y ++CONFIG_BOOTDELAY=2 ++# CONFIG_AUTOBOOT_KEYED is not set ++# CONFIG_AUTOBOOT_USE_MENUKEY is not set ++CONFIG_AUTOBOOT_MENU_SHOW=y ++# CONFIG_BOOTMENU_DISABLE_UBOOT_CONSOLE is not set ++# CONFIG_BOOT_RETRY is not set ++ ++# ++# Image support ++# ++# CONFIG_IMAGE_PRE_LOAD is not set ++ ++# ++# Devicetree fixup ++# ++# CONFIG_OF_BOARD_SETUP is not set ++# CONFIG_OF_SYSTEM_SETUP is not set ++# CONFIG_OF_STDOUT_VIA_ALIAS is not set ++# CONFIG_FDT_FIXUP_PARTITIONS is not set ++# CONFIG_FDT_SIMPLEFB is not set ++CONFIG_ARCH_FIXUP_FDT_MEMORY=y ++# CONFIG_USE_BOOTARGS is not set ++# CONFIG_BOOTARGS_SUBST is not set ++# CONFIG_USE_BOOTCOMMAND is not set ++CONFIG_USE_PREBOOT=y ++CONFIG_DEFAULT_FDT_FILE="openwrt-one" ++# CONFIG_SAVE_PREV_BL_FDT_ADDR is not set ++# CONFIG_SAVE_PREV_BL_INITRAMFS_START_ADDR is not set ++ ++# ++# Configuration editor ++# ++# CONFIG_CEDIT is not set ++ ++# ++# Console ++# ++CONFIG_MENU=y ++# CONFIG_CONSOLE_RECORD is not set ++# CONFIG_DISABLE_CONSOLE is not set ++CONFIG_LOGLEVEL=7 ++# CONFIG_SILENT_CONSOLE is not set ++# CONFIG_SPL_SILENT_CONSOLE is not set ++# CONFIG_TPL_SILENT_CONSOLE is not set ++# CONFIG_PRE_CONSOLE_BUFFER is not set ++CONFIG_CONSOLE_FLUSH_SUPPORT=y ++# CONFIG_CONSOLE_FLUSH_ON_NEWLINE is not set ++# CONFIG_CONSOLE_MUX is not set ++# CONFIG_SYS_CONSOLE_IS_IN_ENV is not set ++# CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE is not set ++# CONFIG_SYS_CONSOLE_INFO_QUIET is not set ++# CONFIG_SYS_STDIO_DEREGISTER is not set ++# CONFIG_SPL_SYS_STDIO_DEREGISTER is not set ++# CONFIG_SYS_DEVICE_NULLDEV is not set ++ ++# ++# Logging ++# ++CONFIG_LOG=y ++CONFIG_LOG_MAX_LEVEL=6 ++CONFIG_LOG_DEFAULT_LEVEL=6 ++CONFIG_LOG_CONSOLE=y ++# CONFIG_LOGF_FILE is not set ++# CONFIG_LOGF_LINE is not set ++# CONFIG_LOGF_FUNC is not set ++CONFIG_LOGF_FUNC_PAD=20 ++# CONFIG_LOG_SYSLOG is not set ++# CONFIG_LOG_ERROR_RETURN is not set ++ ++# ++# Init options ++# ++# CONFIG_BOARD_TYPES is not set ++CONFIG_DISPLAY_CPUINFO=y ++CONFIG_DISPLAY_BOARDINFO=y ++# CONFIG_DISPLAY_BOARDINFO_LATE is not set ++ ++# ++# Start-up hooks ++# ++# CONFIG_CYCLIC is not set ++CONFIG_EVENT=y ++CONFIG_EVENT_DYNAMIC=y ++# CONFIG_EVENT_DEBUG is not set ++# CONFIG_ARCH_MISC_INIT is not set ++# CONFIG_BOARD_EARLY_INIT_F is not set ++# CONFIG_BOARD_EARLY_INIT_R is not set ++# CONFIG_BOARD_POSTCLK_INIT is not set ++CONFIG_BOARD_LATE_INIT=y ++# CONFIG_CLOCKS is not set ++# CONFIG_HWCONFIG is not set ++CONFIG_LAST_STAGE_INIT=y ++# CONFIG_MISC_INIT_R is not set ++# CONFIG_SYS_MALLOC_BOOTPARAMS is not set ++# CONFIG_ID_EEPROM is not set ++# CONFIG_RESET_PHY_R is not set ++ ++# ++# Security support ++# ++CONFIG_HASH=y ++# CONFIG_STACKPROTECTOR is not set ++# CONFIG_BOARD_RNG_SEED is not set ++ ++# ++# Update support ++# ++# CONFIG_UPDATE_TFTP is not set ++# CONFIG_ANDROID_AB is not set ++ ++# ++# Blob list ++# ++# CONFIG_BLOBLIST is not set ++CONFIG_SUPPORT_SPL=y ++# CONFIG_VPL is not set ++ ++# ++# Command line interface ++# ++CONFIG_CMDLINE=y ++CONFIG_HUSH_PARSER=y ++CONFIG_CMDLINE_EDITING=y ++# CONFIG_CMDLINE_PS_SUPPORT is not set ++CONFIG_AUTO_COMPLETE=y ++CONFIG_SYS_LONGHELP=y ++CONFIG_SYS_PROMPT="OpenWrt One> " ++CONFIG_SYS_PROMPT_HUSH_PS2="> " ++CONFIG_SYS_MAXARGS=16 ++CONFIG_SYS_CBSIZE=512 ++CONFIG_SYS_PBSIZE=1049 ++CONFIG_SYS_XTRACE=y ++CONFIG_BUILD_BIN2C=y ++ ++# ++# Commands ++# ++ ++# ++# Info commands ++# ++CONFIG_CMD_BDI=y ++# CONFIG_CMD_BDINFO_EXTRA is not set ++# CONFIG_CMD_CONFIG is not set ++CONFIG_CMD_CONSOLE=y ++CONFIG_CMD_CPU=y ++# CONFIG_CMD_HISTORY is not set ++CONFIG_CMD_LICENSE=y ++# CONFIG_CMD_PMC is not set ++ ++# ++# Boot commands ++# ++CONFIG_CMD_BOOTD=y ++CONFIG_CMD_BOOTM=y ++# CONFIG_CMD_BOOTDEV is not set ++CONFIG_CMD_BOOTFLOW=y ++# CONFIG_CMD_BOOTMETH is not set ++CONFIG_BOOTM_EFI=y ++# CONFIG_CMD_BOOTZ is not set ++CONFIG_CMD_BOOTI=y ++CONFIG_BOOTM_LINUX=y ++# CONFIG_BOOTM_NETBSD is not set ++# CONFIG_BOOTM_OPENRTOS is not set ++# CONFIG_BOOTM_OSE is not set ++# CONFIG_BOOTM_PLAN9 is not set ++# CONFIG_BOOTM_RTEMS is not set ++# CONFIG_CMD_VBE is not set ++# CONFIG_BOOTM_VXWORKS is not set ++CONFIG_SYS_BOOTM_LEN=0x4000000 ++CONFIG_CMD_BOOTEFI=y ++CONFIG_CMD_BOOTEFI_HELLO_COMPILE=y ++# CONFIG_CMD_BOOTEFI_HELLO is not set ++# CONFIG_CMD_BOOTEFI_SELFTEST is not set ++CONFIG_CMD_BOOTMENU=y ++# CONFIG_CMD_ADTIMG is not set ++CONFIG_CMD_ELF=y ++CONFIG_CMD_FDT=y ++CONFIG_CMD_GO=y ++CONFIG_CMD_RUN=y ++CONFIG_CMD_IMI=y ++# CONFIG_CMD_IMLS is not set ++CONFIG_CMD_XIMG=y ++# CONFIG_CMD_ZBOOT is not set ++ ++# ++# Environment commands ++# ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_EXPORTENV=y ++CONFIG_CMD_IMPORTENV=y ++CONFIG_CMD_EDITENV=y ++# CONFIG_CMD_GREPENV is not set ++CONFIG_CMD_SAVEENV=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_ENV_EXISTS=y ++CONFIG_CMD_ENV_READMEM=y ++# CONFIG_CMD_ENV_CALLBACK is not set ++CONFIG_CMD_ENV_FLAGS=y ++# CONFIG_CMD_NVEDIT_EFI is not set ++# CONFIG_CMD_NVEDIT_INDIRECT is not set ++# CONFIG_CMD_NVEDIT_INFO is not set ++# CONFIG_CMD_NVEDIT_LOAD is not set ++# CONFIG_CMD_NVEDIT_SELECT is not set ++ ++# ++# Memory commands ++# ++# CONFIG_CMD_BINOP is not set ++# CONFIG_CMD_BLOBLIST is not set ++CONFIG_CMD_CRC32=y ++# CONFIG_CRC32_VERIFY is not set ++# CONFIG_CMD_EEPROM is not set ++# CONFIG_LOOPW is not set ++# CONFIG_CMD_MD5SUM is not set ++# CONFIG_CMD_MEMINFO is not set ++CONFIG_CMD_MEMORY=y ++# CONFIG_CMD_MEM_SEARCH is not set ++# CONFIG_CMD_MX_CYCLIC is not set ++CONFIG_CMD_RANDOM=y ++# CONFIG_CMD_MEMTEST is not set ++# CONFIG_CMD_SHA1SUM is not set ++CONFIG_CMD_STRINGS=y ++ ++# ++# Compression commands ++# ++CONFIG_CMD_LZMADEC=y ++# CONFIG_CMD_UNLZ4 is not set ++# CONFIG_CMD_UNZIP is not set ++# CONFIG_CMD_ZIP is not set ++ ++# ++# Device access commands ++# ++# CONFIG_CMD_ARMFLASH is not set ++# CONFIG_CMD_BIND is not set ++# CONFIG_CMD_CLK is not set ++# CONFIG_CMD_DEMO is not set ++# CONFIG_CMD_DFU is not set ++CONFIG_CMD_DM=y ++CONFIG_CMD_FLASH=y ++# CONFIG_CMD_FPGAD is not set ++# CONFIG_CMD_FUSE is not set ++CONFIG_CMD_GPIO=y ++# CONFIG_CMD_GPIO_READ is not set ++CONFIG_CMD_PWM=y ++# CONFIG_CMD_GPT is not set ++# CONFIG_RANDOM_UUID is not set ++# CONFIG_CMD_IDE is not set ++# CONFIG_CMD_IO is not set ++# CONFIG_CMD_IOTRACE is not set ++# CONFIG_CMD_I2C is not set ++CONFIG_CMD_LOADB=y ++# CONFIG_CMD_LOADM is not set ++CONFIG_CMD_LOADS=y ++# CONFIG_LOADS_ECHO is not set ++# CONFIG_CMD_SAVES is not set ++# CONFIG_SYS_LOADS_BAUD_CHANGE is not set ++CONFIG_CMD_LOADXY_TIMEOUT=90 ++# CONFIG_CMD_LSBLK is not set ++# CONFIG_CMD_MBR is not set ++# CONFIG_CMD_CLONE is not set ++CONFIG_CMD_MTD=y ++CONFIG_CMD_NAND_EXT=y ++# CONFIG_CMD_ONENAND is not set ++# CONFIG_CMD_OSD is not set ++# CONFIG_CMD_PART is not set ++CONFIG_CMD_PCI=y ++CONFIG_CMD_PINMUX=y ++# CONFIG_CMD_POWEROFF is not set ++# CONFIG_CMD_READ is not set ++# CONFIG_CMD_SATA is not set ++# CONFIG_CMD_SDRAM is not set ++CONFIG_CMD_SF=y ++CONFIG_CMD_SF_TEST=y ++# CONFIG_CMD_SPI is not set ++# CONFIG_CMD_TSI148 is not set ++# CONFIG_CMD_UNIVERSE is not set ++CONFIG_CMD_USB=y ++# CONFIG_CMD_USB_SDP is not set ++# CONFIG_CMD_RKMTD is not set ++# CONFIG_CMD_WRITE is not set ++ ++# ++# Shell scripting commands ++# ++# CONFIG_CMD_CAT is not set ++CONFIG_CMD_ECHO=y ++CONFIG_CMD_ITEST=y ++CONFIG_CMD_SOURCE=y ++CONFIG_CMD_SETEXPR=y ++# CONFIG_CMD_SETEXPR_FMT is not set ++# CONFIG_CMD_XXD is not set ++ ++# ++# Android support commands ++# ++CONFIG_CMD_NET=y ++CONFIG_CMD_BOOTP=y ++CONFIG_CMD_DHCP=y ++# CONFIG_BOOTP_MAY_FAIL is not set ++CONFIG_BOOTP_BOOTPATH=y ++# CONFIG_BOOTP_VENDOREX is not set ++# CONFIG_BOOTP_BOOTFILESIZE is not set ++CONFIG_BOOTP_DNS=y ++# CONFIG_BOOTP_DNS2 is not set ++CONFIG_BOOTP_GATEWAY=y ++CONFIG_BOOTP_HOSTNAME=y ++# CONFIG_BOOTP_PREFER_SERVERIP is not set ++CONFIG_BOOTP_SUBNETMASK=y ++# CONFIG_BOOTP_NISDOMAIN is not set ++# CONFIG_BOOTP_NTPSERVER is not set ++# CONFIG_BOOTP_TIMEOFFSET is not set ++# CONFIG_CMD_PCAP is not set ++CONFIG_BOOTP_PXE=y ++CONFIG_BOOTP_PXE_CLIENTARCH=0x16 ++# CONFIG_BOOTP_PXE_DHCP_OPTION is not set ++CONFIG_BOOTP_VCI_STRING="U-Boot.armv8" ++CONFIG_CMD_TFTPBOOT=y ++# CONFIG_CMD_TFTPPUT is not set ++CONFIG_CMD_TFTPSRV=y ++CONFIG_NET_TFTP_VARS=y ++CONFIG_CMD_RARP=y ++# CONFIG_CMD_NFS is not set ++# CONFIG_SYS_DISABLE_AUTOLOAD is not set ++# CONFIG_CMD_WGET is not set ++# CONFIG_CMD_MII is not set ++# CONFIG_CMD_MDIO is not set ++CONFIG_CMD_PING=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_LINK_LOCAL=y ++# CONFIG_CMD_ETHSW is not set ++CONFIG_CMD_PXE=y ++# CONFIG_CMD_WOL is not set ++ ++# ++# Misc commands ++# ++# CONFIG_CMD_2048 is not set ++# CONFIG_CMD_BSP is not set ++CONFIG_CMD_BLOCK_CACHE=y ++CONFIG_CMD_BUTTON=y ++CONFIG_CMD_CACHE=y ++# CONFIG_CMD_CONITRACE is not set ++# CONFIG_CMD_CLS is not set ++# CONFIG_CMD_EFIDEBUG is not set ++CONFIG_CMD_EFICONFIG=y ++# CONFIG_CMD_EXCEPTION is not set ++CONFIG_CMD_LED=y ++# CONFIG_CMD_INI is not set ++# CONFIG_CMD_DATE is not set ++# CONFIG_CMD_TIME is not set ++# CONFIG_CMD_GETTIME is not set ++# CONFIG_CMD_PAUSE is not set ++CONFIG_CMD_SLEEP=y ++# CONFIG_CMD_TIMER is not set ++# CONFIG_CMD_SYSBOOT is not set ++# CONFIG_CMD_QFW is not set ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_PSTORE_MEM_SIZE=0x10000 ++CONFIG_CMD_PSTORE_RECORD_SIZE=0x1000 ++CONFIG_CMD_PSTORE_CONSOLE_SIZE=0x1000 ++CONFIG_CMD_PSTORE_FTRACE_SIZE=0x1000 ++CONFIG_CMD_PSTORE_PMSG_SIZE=0x1000 ++CONFIG_CMD_PSTORE_ECC_SIZE=0 ++# CONFIG_CMD_TERMINAL is not set ++CONFIG_CMD_UUID=y ++ ++# ++# TI specific command line interface ++# ++ ++# ++# Power commands ++# ++ ++# ++# Security commands ++# ++# CONFIG_CMD_AES is not set ++# CONFIG_CMD_BLOB is not set ++CONFIG_CMD_HASH=y ++# CONFIG_CMD_HVC is not set ++CONFIG_CMD_SMC=y ++# CONFIG_HASH_VERIFY is not set ++ ++# ++# Firmware commands ++# ++ ++# ++# Filesystem commands ++# ++# CONFIG_CMD_BTRFS is not set ++# CONFIG_CMD_EROFS is not set ++# CONFIG_CMD_EXT2 is not set ++# CONFIG_CMD_EXT4 is not set ++CONFIG_CMD_FAT=y ++# CONFIG_CMD_SQUASHFS is not set ++CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y ++# CONFIG_CMD_JFFS2 is not set ++# CONFIG_CMD_MTDPARTS is not set ++CONFIG_MTDIDS_DEFAULT="" ++CONFIG_MTDPARTS_DEFAULT="" ++# CONFIG_CMD_REISER is not set ++# CONFIG_CMD_ZFS is not set ++ ++# ++# Debug commands ++# ++# CONFIG_CMD_DIAG is not set ++# CONFIG_CMD_EVENT is not set ++# CONFIG_CMD_LOG is not set ++CONFIG_CMD_UBI=y ++CONFIG_CMD_UBI_RENAME=y ++CONFIG_CMD_UBIFS=y ++ ++# ++# Partition Types ++# ++CONFIG_PARTITIONS=y ++# CONFIG_MAC_PARTITION is not set ++CONFIG_DOS_PARTITION=y ++# CONFIG_ISO_PARTITION is not set ++# CONFIG_AMIGA_PARTITION is not set ++# CONFIG_EFI_PARTITION is not set ++CONFIG_PARTITION_UUIDS=y ++CONFIG_SUPPORT_OF_CONTROL=y ++ ++# ++# Device Tree Control ++# ++CONFIG_OF_CONTROL=y ++CONFIG_OF_REAL=y ++# CONFIG_OF_LIVE is not set ++CONFIG_OF_SEPARATE=y ++# CONFIG_OF_EMBED is not set ++# CONFIG_OF_BOARD is not set ++# CONFIG_OF_OMIT_DTB is not set ++CONFIG_DEVICE_TREE_INCLUDES="" ++CONFIG_OF_LIST="openwrt-one" ++# CONFIG_MULTI_DTB_FIT is not set ++CONFIG_OF_TAG_MIGRATE=y ++# CONFIG_OF_DTB_PROPS_REMOVE is not set ++ ++# ++# Environment ++# ++CONFIG_ENV_SUPPORT=y ++CONFIG_SAVEENV=y ++CONFIG_ENV_OVERWRITE=y ++CONFIG_ENV_MIN_ENTRIES=64 ++CONFIG_ENV_MAX_ENTRIES=512 ++# CONFIG_ENV_IS_NOWHERE is not set ++# CONFIG_ENV_IS_IN_EEPROM is not set ++# CONFIG_ENV_IS_IN_FAT is not set ++# CONFIG_ENV_IS_IN_EXT4 is not set ++# CONFIG_ENV_IS_IN_FLASH is not set ++# CONFIG_ENV_IS_IN_MTD is not set ++# CONFIG_ENV_IS_IN_NAND is not set ++# CONFIG_ENV_IS_IN_NVRAM is not set ++# CONFIG_ENV_IS_IN_ONENAND is not set ++# CONFIG_ENV_IS_IN_REMOTE is not set ++# CONFIG_ENV_IS_IN_SPI_FLASH is not set ++CONFIG_ENV_IS_IN_UBI=y ++CONFIG_SYS_REDUNDAND_ENVIRONMENT=y ++CONFIG_ENV_UBI_PART="ubi" ++CONFIG_ENV_UBI_VOLUME="ubootenv" ++CONFIG_ENV_UBI_VOLUME_REDUND="ubootenv2" ++# CONFIG_ENV_UBI_VOLUME_CREATE is not set ++CONFIG_ENV_UBI_VID_OFFSET=0 ++CONFIG_SYS_RELOC_GD_ENV_ADDR=y ++CONFIG_USE_DEFAULT_ENV_FILE=y ++CONFIG_DEFAULT_ENV_FILE="openwrt-one-spi-nand_env" ++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++# CONFIG_ENV_IMPORT_FDT is not set ++# CONFIG_ENV_APPEND is not set ++# CONFIG_ENV_WRITEABLE_LIST is not set ++# CONFIG_ENV_ACCESS_IGNORE_FORCE is not set ++# CONFIG_USE_BOOTFILE is not set ++# CONFIG_USE_ETHPRIME is not set ++# CONFIG_USE_HOSTNAME is not set ++# CONFIG_VERSION_VARIABLE is not set ++CONFIG_NET=y ++CONFIG_ARP_TIMEOUT=5000 ++CONFIG_NET_RETRY_COUNT=5 ++CONFIG_PROT_UDP=y ++CONFIG_BOOTDEV_ETH=y ++# CONFIG_BOOTP_SEND_HOSTNAME is not set ++CONFIG_NET_RANDOM_ETHADDR=y ++# CONFIG_NETCONSOLE is not set ++# CONFIG_IP_DEFRAG is not set ++# CONFIG_SYS_FAULT_ECHO_LINK_DOWN is not set ++CONFIG_TFTP_BLOCKSIZE=1468 ++# CONFIG_TFTP_PORT is not set ++CONFIG_TFTP_WINDOWSIZE=1 ++# CONFIG_TFTP_TSIZE is not set ++# CONFIG_SERVERIP_FROM_PROXYDHCP is not set ++CONFIG_SERVERIP_FROM_PROXYDHCP_DELAY_MS=100 ++# CONFIG_KEEP_SERVERADDR is not set ++# CONFIG_UDP_CHECKSUM is not set ++# CONFIG_BOOTP_SERVERIP is not set ++CONFIG_BOOTP_MAX_ROOT_PATH_LEN=64 ++# CONFIG_USE_GATEWAYIP is not set ++# CONFIG_USE_IPADDR is not set ++# CONFIG_USE_NETMASK is not set ++# CONFIG_USE_ROOTPATH is not set ++# CONFIG_USE_SERVERIP is not set ++# CONFIG_PROT_TCP is not set ++# CONFIG_IPV6 is not set ++CONFIG_SYS_RX_ETH_BUFFER=4 ++ ++# ++# Device Drivers ++# ++ ++# ++# Generic Driver Options ++# ++CONFIG_DM=y ++# CONFIG_DM_WARN is not set ++# CONFIG_DM_DEBUG is not set ++# CONFIG_DM_STATS is not set ++CONFIG_DM_DEVICE_REMOVE=y ++CONFIG_DM_EVENT=y ++CONFIG_DM_STDIO=y ++CONFIG_DM_SEQ_ALIAS=y ++# CONFIG_DM_DMA is not set ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++# CONFIG_DEVRES is not set ++CONFIG_SIMPLE_BUS=y ++# CONFIG_SIMPLE_BUS_CORRECT_RANGE is not set ++# CONFIG_SIMPLE_PM_BUS is not set ++CONFIG_OF_TRANSLATE=y ++# CONFIG_TRANSLATION_OFFSET is not set ++CONFIG_DM_DEV_READ_INLINE=y ++# CONFIG_OFNODE_MULTI_TREE is not set ++# CONFIG_BOUNCE_BUFFER is not set ++# CONFIG_ADC is not set ++# CONFIG_ADC_EXYNOS is not set ++# CONFIG_ADC_SANDBOX is not set ++# CONFIG_SARADC_MESON is not set ++# CONFIG_SARADC_ROCKCHIP is not set ++# CONFIG_SATA is not set ++# CONFIG_SCSI_AHCI is not set ++ ++# ++# SATA/SCSI device support ++# ++# CONFIG_AXI is not set ++ ++# ++# Bus devices ++# ++CONFIG_BLK=y ++CONFIG_BLOCK_CACHE=y ++# CONFIG_BLKMAP is not set ++# CONFIG_EFI_MEDIA is not set ++# CONFIG_IDE is not set ++# CONFIG_LBA48 is not set ++# CONFIG_SYS_64BIT_LBA is not set ++# CONFIG_RKMTD is not set ++# CONFIG_BOOTCOUNT_LIMIT is not set ++ ++# ++# Button Support ++# ++CONFIG_BUTTON=y ++# CONFIG_BUTTON_ADC is not set ++CONFIG_BUTTON_GPIO=y ++ ++# ++# Cache Controller drivers ++# ++# CONFIG_CACHE is not set ++# CONFIG_L2X0_CACHE is not set ++# CONFIG_V5L2_CACHE is not set ++# CONFIG_NCORE_CACHE is not set ++# CONFIG_SIFIVE_CCACHE is not set ++ ++# ++# Clock ++# ++CONFIG_CLK=y ++# CONFIG_CLK_CCF is not set ++# CONFIG_CLK_GPIO is not set ++# CONFIG_CLK_CDCE9XX is not set ++# CONFIG_CLK_ICS8N3QV01 is not set ++# CONFIG_CLK_K210 is not set ++# CONFIG_CLK_MPC83XX is not set ++# CONFIG_CLK_XLNX_CLKWZRD is not set ++# CONFIG_CLK_AT91 is not set ++# CONFIG_CLK_RCAR is not set ++# CONFIG_CLK_RCAR_CPG_LIB is not set ++# CONFIG_CLK_SIFIVE is not set ++# CONFIG_CLK_TI_AM3_DPLL is not set ++# CONFIG_CLK_TI_CTRL is not set ++# CONFIG_CLK_TI_GATE is not set ++# CONFIG_CLK_K3 is not set ++CONFIG_CPU=y ++# CONFIG_CPU_IMX is not set ++ ++# ++# Hardware crypto devices ++# ++# CONFIG_DM_HASH is not set ++# CONFIG_FSL_CAAM is not set ++CONFIG_CAAM_64BIT=y ++# CONFIG_SYS_FSL_SEC_BE is not set ++# CONFIG_SYS_FSL_SEC_LE is not set ++# CONFIG_NPCM_AES is not set ++# CONFIG_NPCM_SHA is not set ++# CONFIG_DDR_SPD is not set ++# CONFIG_IMX_SNPS_DDR_PHY is not set ++ ++# ++# Demo for driver model ++# ++# CONFIG_DM_DEMO is not set ++ ++# ++# DFU support ++# ++ ++# ++# DMA Support ++# ++# CONFIG_DMA is not set ++# CONFIG_DMA_LPC32XX is not set ++# CONFIG_TI_EDMA3 is not set ++# CONFIG_DMA_LEGACY is not set ++ ++# ++# Extcon Support ++# ++# CONFIG_EXTCON is not set ++ ++# ++# Fastboot support ++# ++# CONFIG_UDP_FUNCTION_FASTBOOT is not set ++# CONFIG_TCP_FUNCTION_FASTBOOT is not set ++CONFIG_FIRMWARE=y ++CONFIG_ARM_PSCI_FW=y ++# CONFIG_ZYNQMP_FIRMWARE is not set ++# CONFIG_ARM_SMCCC_FEATURES is not set ++# CONFIG_ARM_FFA_TRANSPORT is not set ++# CONFIG_SCMI_FIRMWARE is not set ++# CONFIG_DM_FUZZING_ENGINE is not set ++ ++# ++# FPGA support ++# ++# CONFIG_FPGA_ALTERA is not set ++# CONFIG_FPGA_SOCFPGA is not set ++# CONFIG_FPGA_LATTICE is not set ++# CONFIG_FPGA_XILINX is not set ++# CONFIG_DM_FPGA is not set ++# CONFIG_FWU_MDATA is not set ++CONFIG_GPIO=y ++CONFIG_GPIO_HOG=y ++# CONFIG_DM_GPIO_LOOKUP_LABEL is not set ++# CONFIG_ALTERA_PIO is not set ++# CONFIG_BCM2835_GPIO is not set ++# CONFIG_DWAPB_GPIO is not set ++# CONFIG_AT91_GPIO is not set ++# CONFIG_ATMEL_PIO4 is not set ++# CONFIG_ASPEED_GPIO is not set ++# CONFIG_DA8XX_GPIO is not set ++# CONFIG_HIKEY_GPIO is not set ++# CONFIG_INTEL_BROADWELL_GPIO is not set ++# CONFIG_INTEL_GPIO is not set ++# CONFIG_INTEL_ICH6_GPIO is not set ++# CONFIG_IMX_RGPIO2P is not set ++# CONFIG_IPROC_GPIO is not set ++# CONFIG_HSDK_CREG_GPIO is not set ++# CONFIG_KIRKWOOD_GPIO is not set ++# CONFIG_LPC32XX_GPIO is not set ++# CONFIG_MCP230XX_GPIO is not set ++# CONFIG_MSM_GPIO is not set ++# CONFIG_MXC_GPIO is not set ++# CONFIG_MXS_GPIO is not set ++# CONFIG_NPCM_GPIO is not set ++# CONFIG_CMD_PCA953X is not set ++# CONFIG_ROCKCHIP_GPIO is not set ++# CONFIG_XILINX_GPIO is not set ++# CONFIG_TCA642X is not set ++# CONFIG_TEGRA_GPIO is not set ++# CONFIG_TEGRA186_GPIO is not set ++# CONFIG_VYBRID_GPIO is not set ++# CONFIG_SIFIVE_GPIO is not set ++# CONFIG_ZYNQ_GPIO is not set ++# CONFIG_DM_74X164 is not set ++# CONFIG_PCA953X is not set ++# CONFIG_MPC8XXX_GPIO is not set ++# CONFIG_MPC8XX_GPIO is not set ++# CONFIG_NX_GPIO is not set ++# CONFIG_NOMADIK_GPIO is not set ++# CONFIG_ZYNQMP_GPIO_MODEPIN is not set ++# CONFIG_SLG7XL45106_I2C_GPO is not set ++# CONFIG_TURRIS_OMNIA_MCU is not set ++# CONFIG_FTGPIO010 is not set ++ ++# ++# Hardware Spinlock Support ++# ++# CONFIG_DM_HWSPINLOCK is not set ++CONFIG_I2C=y ++# CONFIG_DM_I2C is not set ++# CONFIG_SYS_I2C_LEGACY is not set ++# CONFIG_SPL_SYS_I2C_LEGACY is not set ++# CONFIG_SYS_I2C_FSL is not set ++# CONFIG_SYS_I2C_DW is not set ++# CONFIG_SYS_I2C_IMX_LPI2C is not set ++# CONFIG_SYS_I2C_MTK is not set ++# CONFIG_SYS_I2C_MICROCHIP is not set ++# CONFIG_SYS_I2C_MXC is not set ++# CONFIG_SYS_I2C_NPCM is not set ++# CONFIG_SYS_I2C_SOFT is not set ++# CONFIG_SYS_I2C_MV is not set ++# CONFIG_SYS_I2C_MVTWSI is not set ++CONFIG_INPUT=y ++# CONFIG_DM_KEYBOARD is not set ++# CONFIG_CROS_EC_KEYB is not set ++# CONFIG_TEGRA_KEYBOARD is not set ++# CONFIG_TWL4030_INPUT is not set ++ ++# ++# IOMMU device drivers ++# ++# CONFIG_IOMMU is not set ++ ++# ++# LED Support ++# ++CONFIG_LED=y ++# CONFIG_LED_PWM is not set ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y ++# CONFIG_LED_STATUS is not set ++ ++# ++# Mailbox Controller Support ++# ++# CONFIG_DM_MAILBOX is not set ++ ++# ++# Memory Controller drivers ++# ++# CONFIG_MEMORY is not set ++# CONFIG_ATMEL_EBI is not set ++# CONFIG_MFD_ATMEL_SMC is not set ++ ++# ++# Multifunction device drivers ++# ++# CONFIG_MISC is not set ++# CONFIG_NVMEM is not set ++# CONFIG_SPL_NVMEM is not set ++# CONFIG_SMSC_LPC47M is not set ++# CONFIG_SMSC_SIO1007 is not set ++# CONFIG_CROS_EC is not set ++# CONFIG_DS4510 is not set ++# CONFIG_FSL_SEC_MON is not set ++# CONFIG_IRQ is not set ++# CONFIG_NPCM_HOST is not set ++# CONFIG_NUVOTON_NCT6102D is not set ++# CONFIG_PWRSEQ is not set ++# CONFIG_PCA9551_LED is not set ++# CONFIG_TEST_DRV is not set ++# CONFIG_USB_HUB_USB251XB is not set ++# CONFIG_TWL4030_LED is not set ++# CONFIG_WINBOND_W83627 is not set ++# CONFIG_FS_LOADER is not set ++ ++# ++# MMC Host controller Support ++# ++# CONFIG_MMC is not set ++# CONFIG_MMC_BROKEN_CD is not set ++# CONFIG_DM_MMC is not set ++# CONFIG_FSL_ESDHC is not set ++# CONFIG_FSL_ESDHC_IMX is not set ++ ++# ++# MTD Support ++# ++CONFIG_MTD_PARTITIONS=y ++CONFIG_MTD=y ++CONFIG_DM_MTD=y ++# CONFIG_MTD_NOR_FLASH is not set ++# CONFIG_MTD_CONCAT is not set ++# CONFIG_SYS_MTDPARTS_RUNTIME is not set ++# CONFIG_FLASH_CFI_DRIVER is not set ++# CONFIG_CFI_FLASH is not set ++# CONFIG_ALTERA_QSPI is not set ++# CONFIG_HBMC_AM654 is not set ++# CONFIG_SAMSUNG_ONENAND is not set ++# CONFIG_USE_SYS_MAX_FLASH_BANKS is not set ++CONFIG_MTD_NAND_CORE=y ++# CONFIG_MTD_RAW_NAND is not set ++CONFIG_MTD_SPI_NAND=y ++ ++# ++# SPI Flash Support ++# ++CONFIG_DM_SPI_FLASH=y ++CONFIG_SPI_FLASH=y ++CONFIG_SF_DEFAULT_BUS=0 ++CONFIG_SF_DEFAULT_CS=0 ++# CONFIG_BOOTDEV_SPI_FLASH is not set ++CONFIG_SPI_FLASH_SFDP_SUPPORT=y ++CONFIG_SPI_FLASH_SMART_HWCAPS=y ++# CONFIG_SPI_NOR_BOOT_SOFT_RESET_EXT_INVERT is not set ++# CONFIG_SPI_FLASH_SOFT_RESET is not set ++# CONFIG_SPI_FLASH_BAR is not set ++CONFIG_SPI_FLASH_LOCK=y ++CONFIG_SPI_FLASH_UNLOCK_ALL=y ++# CONFIG_SPI_FLASH_ATMEL is not set ++CONFIG_SPI_FLASH_EON=y ++CONFIG_SPI_FLASH_GIGADEVICE=y ++CONFIG_SPI_FLASH_ISSI=y ++CONFIG_SPI_FLASH_MACRONIX=y ++CONFIG_SPI_FLASH_SPANSION=y ++# CONFIG_SPI_FLASH_S28HX_T is not set ++CONFIG_SPI_FLASH_STMICRO=y ++# CONFIG_SPI_FLASH_MT35XU is not set ++# CONFIG_SPI_FLASH_SST is not set ++CONFIG_SPI_FLASH_WINBOND=y ++CONFIG_SPI_FLASH_XMC=y ++CONFIG_SPI_FLASH_XTX=y ++# CONFIG_SPI_FLASH_ZBIT is not set ++CONFIG_SPI_FLASH_USE_4K_SECTORS=y ++# CONFIG_SPI_FLASH_DATAFLASH is not set ++CONFIG_SPI_FLASH_MTD=y ++ ++# ++# UBI support ++# ++CONFIG_UBI_SILENCE_MSG=y ++CONFIG_MTD_UBI=y ++CONFIG_MTD_UBI_MODULE=y ++CONFIG_MTD_UBI_WL_THRESHOLD=4096 ++CONFIG_MTD_UBI_BEB_LIMIT=20 ++# CONFIG_MTD_UBI_FASTMAP is not set ++# CONFIG_NVMXIP is not set ++# CONFIG_NVMXIP_QSPI is not set ++# CONFIG_NMBM is not set ++ ++# ++# Multiplexer drivers ++# ++# CONFIG_MULTIPLEXER is not set ++# CONFIG_BITBANGMII is not set ++# CONFIG_MV88E6352_SWITCH is not set ++CONFIG_PHYLIB=y ++# CONFIG_PHY_ADDR_ENABLE is not set ++# CONFIG_B53_SWITCH is not set ++# CONFIG_MV88E61XX_SWITCH is not set ++# CONFIG_PHYLIB_10G is not set ++# CONFIG_PHY_ADIN is not set ++# CONFIG_PHY_AIROHA is not set ++# CONFIG_PHY_AQUANTIA is not set ++# CONFIG_PHY_ATHEROS is not set ++# CONFIG_SPL_PHY_ATHEROS is not set ++# CONFIG_PHY_BROADCOM is not set ++# CONFIG_PHY_CORTINA is not set ++# CONFIG_PHY_DAVICOM is not set ++# CONFIG_PHY_ET1011C is not set ++# CONFIG_PHY_LXT is not set ++# CONFIG_PHY_MARVELL is not set ++# CONFIG_PHY_MARVELL_10G is not set ++# CONFIG_PHY_MESON_GXL is not set ++# CONFIG_PHY_MICREL is not set ++# CONFIG_PHY_MOTORCOMM is not set ++# CONFIG_PHY_MSCC is not set ++# CONFIG_PHY_NATSEMI is not set ++# CONFIG_PHY_NXP_C45_TJA11XX is not set ++# CONFIG_PHY_NXP_TJA11XX is not set ++# CONFIG_PHY_REALTEK is not set ++# CONFIG_PHY_SMSC is not set ++# CONFIG_PHY_TERANETICS is not set ++# CONFIG_PHY_TI is not set ++# CONFIG_PHY_TI_DP83867 is not set ++# CONFIG_PHY_TI_DP83869 is not set ++# CONFIG_PHY_TI_GENERIC is not set ++# CONFIG_PHY_VITESSE is not set ++# CONFIG_PHY_XILINX is not set ++# CONFIG_PHY_XILINX_GMII2RGMII is not set ++# CONFIG_PHY_XWAY is not set ++# CONFIG_PHY_ETHERNET_ID is not set ++CONFIG_PHY_FIXED=y ++# CONFIG_PHY_NCSI is not set ++# CONFIG_FSL_MEMAC is not set ++CONFIG_PHY_RESET_DELAY=0 ++# CONFIG_FSL_PFE is not set ++CONFIG_ETH=y ++CONFIG_DM_ETH=y ++# CONFIG_DM_MDIO is not set ++# CONFIG_DM_ETH_PHY is not set ++CONFIG_NETDEVICES=y ++# CONFIG_PHY_GIGE is not set ++# CONFIG_ALTERA_TSE is not set ++# CONFIG_BCM_SF2_ETH is not set ++# CONFIG_BCMGENET is not set ++# CONFIG_BNXT_ETH is not set ++# CONFIG_CALXEDA_XGMAC is not set ++# CONFIG_DRIVER_DM9000 is not set ++# CONFIG_DWC_ETH_QOS is not set ++# CONFIG_EEPRO100 is not set ++# CONFIG_ETH_DESIGNWARE is not set ++# CONFIG_ETH_DESIGNWARE_MESON8B is not set ++# CONFIG_ETHOC is not set ++# CONFIG_FMAN_ENET is not set ++# CONFIG_FTMAC100 is not set ++# CONFIG_FTGMAC100 is not set ++# CONFIG_MCFFEC is not set ++# CONFIG_FSLDMAFEC is not set ++# CONFIG_KS8851_MLL is not set ++# CONFIG_LITEETH is not set ++# CONFIG_MACB is not set ++# CONFIG_NET_NPCM750 is not set ++# CONFIG_PCH_GBE is not set ++# CONFIG_RGMII is not set ++# CONFIG_MII is not set ++# CONFIG_RMII is not set ++# CONFIG_PCNET is not set ++# CONFIG_QE_UEC is not set ++# CONFIG_RTL8139 is not set ++# CONFIG_SMC911X is not set ++# CONFIG_SUN7I_GMAC is not set ++# CONFIG_SUN4I_EMAC is not set ++# CONFIG_SUN8I_EMAC is not set ++# CONFIG_SH_ETHER is not set ++# CONFIG_DRIVER_TI_CPSW is not set ++# CONFIG_DRIVER_TI_EMAC is not set ++# CONFIG_DRIVER_TI_KEYSTONE_NET is not set ++# CONFIG_TULIP is not set ++# CONFIG_XILINX_AXIEMAC is not set ++# CONFIG_VSC7385_ENET is not set ++# CONFIG_XILINX_EMACLITE is not set ++# CONFIG_ZYNQ_GEM is not set ++# CONFIG_SYS_DPAA_QBMAN is not set ++# CONFIG_TSEC_ENET is not set ++CONFIG_MEDIATEK_ETH=y ++# CONFIG_HIFEMAC_ETH is not set ++# CONFIG_HIGMACV300_ETH is not set ++# CONFIG_NVME is not set ++# CONFIG_NVME_APPLE is not set ++ ++# ++# PCI Endpoint ++# ++# CONFIG_PCI_ENDPOINT is not set ++# CONFIG_X86_PCH7 is not set ++# CONFIG_X86_PCH9 is not set ++ ++# ++# PHY Subsystem ++# ++CONFIG_PHY=y ++# CONFIG_NOP_PHY is not set ++# CONFIG_MIPI_DPHY_HELPERS is not set ++# CONFIG_BCM_SR_PCIE_PHY is not set ++# CONFIG_OMAP_USB2_PHY is not set ++CONFIG_PHY_MTK_TPHY=y ++ ++# ++# Rockchip PHY driver ++# ++# CONFIG_PHY_CADENCE_SIERRA is not set ++# CONFIG_PHY_CADENCE_TORRENT is not set ++# CONFIG_MSM8916_USB_PHY is not set ++# CONFIG_MVEBU_COMPHY_SUPPORT is not set ++ ++# ++# Pin controllers ++# ++CONFIG_PINCTRL=y ++CONFIG_PINCTRL_FULL=y ++CONFIG_PINCTRL_GENERIC=y ++CONFIG_PINMUX=y ++CONFIG_PINCONF=y ++CONFIG_PINCONF_RECURSIVE=y ++# CONFIG_PINCTRL_AT91 is not set ++# CONFIG_PINCTRL_AT91PIO4 is not set ++# CONFIG_PINCTRL_INTEL is not set ++# CONFIG_PINCTRL_QE is not set ++# CONFIG_PINCTRL_ROCKCHIP_RV1108 is not set ++# CONFIG_PINCTRL_SINGLE is not set ++# CONFIG_PINCTRL_STM32 is not set ++# CONFIG_PINCTRL_STMFX is not set ++# CONFIG_PINCTRL_K210 is not set ++CONFIG_PINCTRL_MTK=y ++# CONFIG_PINCTRL_MT7622 is not set ++# CONFIG_PINCTRL_MT7623 is not set ++# CONFIG_PINCTRL_MT7629 is not set ++CONFIG_PINCTRL_MT7981=y ++# CONFIG_PINCTRL_MT7986 is not set ++# CONFIG_PINCTRL_MT7988 is not set ++# CONFIG_PINCTRL_MT8512 is not set ++# CONFIG_PINCTRL_MT8516 is not set ++# CONFIG_PINCTRL_MT8518 is not set ++CONFIG_POWER=y ++# CONFIG_POWER_LEGACY is not set ++# CONFIG_ACPI_PMC is not set ++ ++# ++# Power Domain Support ++# ++CONFIG_POWER_DOMAIN=y ++# CONFIG_APPLE_PMGR_POWER_DOMAIN is not set ++CONFIG_MTK_POWER_DOMAIN=y ++# CONFIG_DM_PMIC is not set ++# CONFIG_PMIC_TPS65217 is not set ++# CONFIG_POWER_TPS65218 is not set ++# CONFIG_POWER_TPS62362 is not set ++# CONFIG_DM_REGULATOR is not set ++# CONFIG_TPS6586X_POWER is not set ++# CONFIG_POWER_MT6323 is not set ++CONFIG_DM_PWM=y ++# CONFIG_PWM_ASPEED is not set ++# CONFIG_PWM_CADENCE_TTC is not set ++# CONFIG_PWM_CROS_EC is not set ++# CONFIG_PWM_EXYNOS is not set ++# CONFIG_PWM_IMX is not set ++# CONFIG_PWM_MESON is not set ++CONFIG_PWM_MTK=y ++# CONFIG_PWM_ROCKCHIP is not set ++# CONFIG_PWM_SANDBOX is not set ++# CONFIG_PWM_SIFIVE is not set ++# CONFIG_PWM_TEGRA is not set ++# CONFIG_PWM_SUNXI is not set ++# CONFIG_U_QE is not set ++# CONFIG_RAM is not set ++ ++# ++# Reboot Mode Support ++# ++# CONFIG_DM_REBOOT_MODE is not set ++ ++# ++# Remote Processor drivers ++# ++ ++# ++# Reset Controller Support ++# ++# CONFIG_RESET_AST2500 is not set ++# CONFIG_RESET_AST2600 is not set ++CONFIG_RESET_MEDIATEK=y ++# CONFIG_RESET_HISILICON is not set ++# CONFIG_RESET_SYSCON is not set ++# CONFIG_RESET_SCMI is not set ++# CONFIG_RESET_DRA7 is not set ++# CONFIG_DM_RNG is not set ++ ++# ++# Real Time Clock ++# ++# CONFIG_DM_RTC is not set ++# CONFIG_RTC_ENABLE_32KHZ_OUTPUT is not set ++# CONFIG_RTC_DS1337 is not set ++# CONFIG_RTC_DS1338 is not set ++# CONFIG_RTC_DS1374 is not set ++# CONFIG_RTC_DS3231 is not set ++# CONFIG_RTC_PCF8563 is not set ++# CONFIG_RTC_PT7C4338 is not set ++# CONFIG_RTC_PL031 is not set ++# CONFIG_RTC_S35392A is not set ++# CONFIG_RTC_MC13XXX is not set ++# CONFIG_RTC_MC146818 is not set ++# CONFIG_RTC_M41T62 is not set ++# CONFIG_SCSI is not set ++# CONFIG_DM_SCSI is not set ++CONFIG_SERIAL=y ++CONFIG_BAUDRATE=115200 ++# CONFIG_DEFAULT_ENV_IS_RW is not set ++CONFIG_REQUIRE_SERIAL_CONSOLE=y ++# CONFIG_SPECIFY_CONSOLE_INDEX is not set ++CONFIG_SERIAL_PRESENT=y ++CONFIG_DM_SERIAL=y ++# CONFIG_SERIAL_RX_BUFFER is not set ++# CONFIG_SERIAL_PUTS is not set ++# CONFIG_SERIAL_SEARCH_ALL is not set ++# CONFIG_SERIAL_PROBE_ALL is not set ++# CONFIG_VPL_DM_SERIAL is not set ++CONFIG_DEBUG_UART_MTK=y ++CONFIG_DEBUG_UART_SHIFT=0 ++# CONFIG_DEBUG_UART_ANNOUNCE is not set ++# CONFIG_DEBUG_UART_SKIP_INIT is not set ++# CONFIG_ALTERA_JTAG_UART is not set ++# CONFIG_ALTERA_UART is not set ++# CONFIG_ARC_SERIAL is not set ++# CONFIG_ARM_DCC is not set ++# CONFIG_ATMEL_USART is not set ++# CONFIG_BCM6345_SERIAL is not set ++# CONFIG_COREBOOT_SERIAL is not set ++# CONFIG_CORTINA_UART is not set ++# CONFIG_FSL_LINFLEXUART is not set ++# CONFIG_FSL_LPUART is not set ++# CONFIG_MVEBU_A3700_UART is not set ++# CONFIG_MCFUART is not set ++# CONFIG_NULLDEV_SERIAL is not set ++# CONFIG_SYS_NS16550 is not set ++# CONFIG_PL01X_SERIAL is not set ++# CONFIG_ROCKCHIP_SERIAL is not set ++# CONFIG_XILINX_UARTLITE is not set ++# CONFIG_MSM_SERIAL is not set ++# CONFIG_MSM_GENI_SERIAL is not set ++# CONFIG_MXS_AUART_SERIAL is not set ++# CONFIG_OMAP_SERIAL is not set ++# CONFIG_SIFIVE_SERIAL is not set ++# CONFIG_ZYNQ_SERIAL is not set ++CONFIG_MTK_SERIAL=y ++# CONFIG_MT7620_SERIAL is not set ++# CONFIG_NPCM_SERIAL is not set ++# CONFIG_SM is not set ++# CONFIG_MESON_SM is not set ++# CONFIG_SMEM is not set ++ ++# ++# Sound support ++# ++# CONFIG_SOUND is not set ++ ++# ++# SOC (System On Chip) specific Drivers ++# ++# CONFIG_SOC_DEVICE is not set ++# CONFIG_SOC_TI is not set ++CONFIG_SPI=y ++CONFIG_DM_SPI=y ++CONFIG_SPI_MEM=y ++# CONFIG_SPI_DIRMAP is not set ++# CONFIG_ALTERA_SPI is not set ++# CONFIG_APPLE_SPI is not set ++# CONFIG_ATCSPI200_SPI is not set ++# CONFIG_ATMEL_SPI is not set ++# CONFIG_BCMSTB_SPI is not set ++# CONFIG_CORTINA_SFLASH is not set ++# CONFIG_CADENCE_QSPI is not set ++# CONFIG_CF_SPI is not set ++# CONFIG_DESIGNWARE_SPI is not set ++# CONFIG_EXYNOS_SPI is not set ++# CONFIG_FSL_DSPI is not set ++# CONFIG_FSL_QSPI is not set ++# CONFIG_GXP_SPI is not set ++# CONFIG_ICH_SPI is not set ++# CONFIG_IPROC_QSPI is not set ++# CONFIG_KIRKWOOD_SPI is not set ++# CONFIG_MICROCHIP_COREQSPI is not set ++# CONFIG_MPC8XXX_SPI is not set ++# CONFIG_MTK_SNOR is not set ++# CONFIG_MTK_SNFI_SPI is not set ++CONFIG_MTK_SPIM=y ++# CONFIG_MVEBU_A3700_SPI is not set ++# CONFIG_MXS_SPI is not set ++# CONFIG_SPI_MXIC is not set ++# CONFIG_NPCM_FIU_SPI is not set ++# CONFIG_NPCM_PSPI is not set ++# CONFIG_NXP_FSPI is not set ++# CONFIG_OMAP3_SPI is not set ++# CONFIG_PL022_SPI is not set ++# CONFIG_ROCKCHIP_SFC is not set ++# CONFIG_ROCKCHIP_SPI is not set ++# CONFIG_SPI_ASPEED_SMC is not set ++# CONFIG_SPI_SIFIVE is not set ++# CONFIG_SOFT_SPI is not set ++# CONFIG_SPI_SN_F_OSPI is not set ++# CONFIG_SPI_SUNXI is not set ++# CONFIG_TEGRA114_SPI is not set ++# CONFIG_TEGRA20_SFLASH is not set ++# CONFIG_TEGRA20_SLINK is not set ++# CONFIG_TEGRA210_QSPI is not set ++# CONFIG_TI_QSPI is not set ++# CONFIG_XILINX_SPI is not set ++# CONFIG_ZYNQ_SPI is not set ++# CONFIG_ZYNQ_QSPI is not set ++# CONFIG_ZYNQMP_GQSPI is not set ++# CONFIG_SH_QSPI is not set ++# CONFIG_MXC_SPI is not set ++ ++# ++# SPMI support ++# ++# CONFIG_SPMI is not set ++# CONFIG_SYSINFO is not set ++ ++# ++# System reset device drivers ++# ++# CONFIG_SYSRESET is not set ++# CONFIG_TEE is not set ++# CONFIG_DM_THERMAL is not set ++ ++# ++# Timer Support ++# ++# CONFIG_TIMER is not set ++ ++# ++# TPM support ++# ++CONFIG_USB=y ++CONFIG_DM_USB=y ++# CONFIG_DM_USB_GADGET is not set ++ ++# ++# USB Host Controller Drivers ++# ++CONFIG_USB_HOST=y ++CONFIG_USB_XHCI_HCD=y ++# CONFIG_USB_XHCI_DWC3 is not set ++# CONFIG_USB_XHCI_DWC3_OF_SIMPLE is not set ++CONFIG_USB_XHCI_MTK=y ++# CONFIG_USB_XHCI_FSL is not set ++# CONFIG_USB_XHCI_BRCM is not set ++# CONFIG_USB_EHCI_HCD is not set ++# CONFIG_USB_OHCI_HCD is not set ++# CONFIG_USB_UHCI_HCD is not set ++# CONFIG_USB_DWC2 is not set ++# CONFIG_USB_R8A66597_HCD is not set ++# CONFIG_USB_ISP1760 is not set ++# CONFIG_USB_CDNS3 is not set ++# CONFIG_USB_DWC3 is not set ++# CONFIG_USB_MTU3 is not set ++ ++# ++# Legacy MUSB Support ++# ++# CONFIG_USB_MUSB_HCD is not set ++# CONFIG_USB_MUSB_UDC is not set ++ ++# ++# MUSB Controller Driver ++# ++# CONFIG_USB_MUSB_HOST is not set ++# CONFIG_USB_MUSB_PIO_ONLY is not set ++ ++# ++# USB Phy ++# ++# CONFIG_TWL4030_USB is not set ++# CONFIG_ROCKCHIP_USB2_PHY is not set ++ ++# ++# ULPI drivers ++# ++ ++# ++# USB peripherals ++# ++CONFIG_USB_STORAGE=y ++# CONFIG_USB_KEYBOARD is not set ++# CONFIG_USB_ONBOARD_HUB is not set ++CONFIG_USB_HUB_DEBOUNCE_TIMEOUT=1000 ++# CONFIG_USB_HOST_ETHER is not set ++# CONFIG_USB_GADGET is not set ++# CONFIG_SPL_USB_GADGET is not set ++ ++# ++# UFS Host Controller Support ++# ++# CONFIG_TI_J721E_UFS is not set ++ ++# ++# Graphics support ++# ++# CONFIG_VIDEO is not set ++ ++# ++# VirtIO Drivers ++# ++# CONFIG_VIRTIO_MMIO is not set ++ ++# ++# 1-Wire support ++# ++# CONFIG_W1 is not set ++ ++# ++# 1-wire EEPROM support ++# ++# CONFIG_W1_EEPROM is not set ++ ++# ++# Watchdog Timer Support ++# ++# CONFIG_WATCHDOG is not set ++CONFIG_WATCHDOG_TIMEOUT_MSECS=60000 ++# CONFIG_IMX_WATCHDOG is not set ++# CONFIG_ULP_WATCHDOG is not set ++# CONFIG_WDT is not set ++# CONFIG_PHYS_TO_BUS is not set ++ ++# ++# File systems ++# ++# CONFIG_FS_BTRFS is not set ++# CONFIG_FS_CBFS is not set ++# CONFIG_FS_EXT4 is not set ++CONFIG_FS_FAT=y ++CONFIG_FAT_WRITE=y ++CONFIG_FS_FAT_MAX_CLUSTSIZE=65536 ++# CONFIG_FS_JFFS2 is not set ++CONFIG_UBIFS_SILENCE_MSG=y ++CONFIG_UBIFS_SILENCE_DEBUG_DUMP=y ++# CONFIG_FS_CRAMFS is not set ++# CONFIG_YAFFS2 is not set ++# CONFIG_FS_SQUASHFS is not set ++# CONFIG_FS_EROFS is not set ++ ++# ++# Library routines ++# ++# CONFIG_ADDR_MAP is not set ++# CONFIG_SYS_TIMER_COUNTS_DOWN is not set ++# CONFIG_PHYSMEM is not set ++# CONFIG_BCH is not set ++# CONFIG_CC_OPTIMIZE_LIBS_FOR_SPEED is not set ++CONFIG_CHARSET=y ++# CONFIG_DYNAMIC_CRC_TABLE is not set ++CONFIG_LIB_UUID=y ++# CONFIG_SEMIHOSTING is not set ++CONFIG_PRINTF=y ++CONFIG_SPRINTF=y ++CONFIG_STRTO=y ++CONFIG_SYS_HZ=1000 ++# CONFIG_PANIC_HANG is not set ++CONFIG_REGEX=y ++CONFIG_LIB_RAND=y ++# CONFIG_LIB_HW_RAND is not set ++CONFIG_SUPPORT_ACPI=y ++# CONFIG_ACPI is not set ++CONFIG_RBTREE=y ++# CONFIG_BITREVERSE is not set ++# CONFIG_TRACE is not set ++# CONFIG_CIRCBUF is not set ++# CONFIG_CMD_DHRYSTONE is not set ++ ++# ++# Security support ++# ++# CONFIG_AES is not set ++# CONFIG_ECDSA is not set ++# CONFIG_RSA is not set ++# CONFIG_TPM is not set ++ ++# ++# Android Verified Boot ++# ++ ++# ++# Hashing Support ++# ++# CONFIG_BLAKE2 is not set ++CONFIG_SHA1=y ++CONFIG_SHA256=y ++# CONFIG_SHA512 is not set ++# CONFIG_SHA384 is not set ++# CONFIG_SHA_HW_ACCEL is not set ++CONFIG_MD5=y ++CONFIG_CRC8=y ++CONFIG_CRC32=y ++ ++# ++# Compression Support ++# ++# CONFIG_LZ4 is not set ++CONFIG_LZMA=y ++CONFIG_LZO=y ++CONFIG_GZIP=y ++# CONFIG_ZLIB_UNCOMPRESS is not set ++# CONFIG_BZIP2 is not set ++CONFIG_ZLIB=y ++# CONFIG_ZSTD is not set ++CONFIG_VPL_LZMA=y ++# CONFIG_SPL_GZIP is not set ++# CONFIG_ERRNO_STR is not set ++CONFIG_HEXDUMP=y ++# CONFIG_GETOPT is not set ++CONFIG_OF_LIBFDT=y ++CONFIG_OF_LIBFDT_ASSUME_MASK=0x0 ++CONFIG_SYS_FDT_PAD=0x3000 ++ ++# ++# System tables ++# ++CONFIG_GENERATE_SMBIOS_TABLE=y ++# CONFIG_LIB_RATIONAL is not set ++CONFIG_SMBIOS=y ++# CONFIG_SMBIOS_PARSER is not set ++CONFIG_EFI_LOADER=y ++CONFIG_CMD_BOOTEFI_BOOTMGR=y ++CONFIG_EFI_VARIABLE_FILE_STORE=y ++# CONFIG_EFI_VARIABLE_NO_STORE is not set ++# CONFIG_EFI_VARIABLES_PRESEED is not set ++CONFIG_EFI_VAR_BUF_SIZE=131072 ++# CONFIG_EFI_SCROLL_ON_CLEAR_SCREEN is not set ++# CONFIG_EFI_RUNTIME_UPDATE_CAPSULE is not set ++CONFIG_EFI_CAPSULE_MAX=15 ++CONFIG_EFI_DEVICE_PATH_TO_TEXT=y ++CONFIG_EFI_DEVICE_PATH_UTIL=y ++CONFIG_EFI_DT_FIXUP=y ++CONFIG_EFI_LOADER_HII=y ++CONFIG_EFI_UNICODE_COLLATION_PROTOCOL2=y ++CONFIG_EFI_UNICODE_CAPITALIZATION=y ++# CONFIG_EFI_LOADER_BOUNCE_BUFFER is not set ++CONFIG_EFI_PLATFORM_LANG_CODES="en-US" ++CONFIG_EFI_HAVE_RUNTIME_RESET=y ++CONFIG_EFI_LOAD_FILE2_INITRD=y ++CONFIG_EFI_ECPT=y ++CONFIG_EFI_EBBR_2_1_CONFORMANCE=y ++# CONFIG_OPTEE_LIB is not set ++# CONFIG_OPTEE_IMAGE is not set ++# CONFIG_BOOTM_OPTEE is not set ++# CONFIG_TEST_FDTDEC is not set ++CONFIG_LIB_ELF=y ++CONFIG_LMB=y ++CONFIG_LMB_USE_MAX_REGIONS=y ++CONFIG_LMB_MAX_REGIONS=64 ++# CONFIG_PHANDLE_CHECK_SEQ is not set ++ ++# ++# Testing ++# ++# CONFIG_UNIT_TEST is not set ++# CONFIG_POST is not set ++ ++# ++# Tools options ++# ++CONFIG_MKIMAGE_DTC_PATH="dtc" ++CONFIG_TOOLS_CRC32=y ++CONFIG_TOOLS_LIBCRYPTO=y ++CONFIG_TOOLS_FIT=y ++CONFIG_TOOLS_FIT_FULL_CHECK=y ++CONFIG_TOOLS_FIT_PRINT=y ++CONFIG_TOOLS_FIT_RSASSA_PSS=y ++CONFIG_TOOLS_FIT_SIGNATURE=y ++CONFIG_TOOLS_FIT_SIGNATURE_MAX_SIZE=0x10000000 ++CONFIG_TOOLS_FIT_VERBOSE=y ++CONFIG_TOOLS_MD5=y ++CONFIG_TOOLS_OF_LIBFDT=y ++CONFIG_TOOLS_SHA1=y ++CONFIG_TOOLS_SHA256=y ++CONFIG_TOOLS_SHA384=y ++CONFIG_TOOLS_SHA512=y ++# CONFIG_TOOLS_MKEFICAPSULE is not set ++# CONFIG_FSPI_CONF_HEADER is not set ++# CONFIG_TOOLS_MKFWUMDATA is not set +--- /dev/null ++++ b/openwrt-one-nor_env +@@ -0,0 +1,46 @@ ++bl2_mtd_write=mtd erase bl2-nor && mtd write bl2-nor $loadaddr 0x0 0x40000 ++bl2_tftp_write=tftpboot $loadaddr $bootfile_bl2_nor && run bl2_mtd_write ++bootcmd=run check_button ; run led_start ; mtd read recovery ${loadaddr} ; bootm ; run led_loop_error ++bootconf=config-1 ++bootdelay=0 ++bootfile=openwrt-mediatek-filogic-openwrt_one-initramfs.itb ++bootfile_bl2_nor=openwrt-mediatek-filogic-openwrt_one-nor-preloader.bin ++bootfile_fip_nor=openwrt-mediatek-filogic-openwrt_one-nor-bl31-uboot.fip ++bootmenu_0=Initialize environment.=run _firstboot ++bootmenu_0d=Run default boot command.=run bootcmd ++bootmenu_1=Boot system via TFTP.=run tftp_boot ; run bootmenu_confirm_return ++bootmenu_2=Unlock NOR. (Make sure the NOR/WP jumper is populated)=sf probe 1:0 && sf protect unlock 0x0 0x1000000 ; run bootmenu_confirm_return ++bootmenu_3=Load BL31+U-Boot FIP via TFTP then write to NOR.=run fip_tftp_write ; run bootmenu_confirm_return ++bootmenu_4=Load BL2 preloader via TFTP then write to NOR.=run bl2_tftp_write ; run bootmenu_confirm_return ++bootmenu_5=Load recovery system via TFTP then write to NOR.=run tftp_write ; run bootmenu_confirm_return ++bootmenu_6=Lock NOR. (Remove jumper afterwards)=sf probe 1:0 && sf protect lock 0x0 0x1000000 ; run bootmenu_confirm_return ++bootmenu_7=Reboot.=reset ++bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60 ++bootmenu_default=0 ++bootmenu_delay=0 ++bootmenu_title= ( ( ( OpenWrt ) ) ) [SPI-NOR] ++check_button=if button front ; then run usb_recovery ; run led_loop_error ; fi ++fip_mtd_write=mtd erase fip-nor && mtd write fip-nor $loadaddr ++fip_tftp_write=tftpboot $loadaddr $bootfile_fip_nor && run fip_mtd_write ++ipaddr=192.168.11.11 ++led_done=led green off ; led white on ++led_loop_done=led white off ; led green on ; echo done ; while true ; do sleep 1 ; done ++led_loop_error=led white off ; led green off ; while true ; do led red on ; sleep 1 ; led red off ; sleep 1 ; done ++led_boot=led green on ; led white on ; led red on ++led_start=led green off ; led red off; led white on ++loadaddr=0x46000000 ++preboot=run led_boot ++recoverfile_bl2=openwrt-mediatek-filogic-openwrt_one-snand-preloader.bin ++recoverfile_ubi=openwrt-mediatek-filogic-openwrt_one-factory.ubi ++recovery_write_bl2=mtd erase bl2 && for offset in 0x0 0x40000 0x80000; do mtd write bl2 $loadaddr $offset 0x40000 ; done ++recovery_write_ubi=mtd erase ubi && mtd write ubi $loadaddr 0 ${filesize} ++serverip=192.168.11.23 ++tftp_boot=run led_start ; tftpboot $loadaddr $bootfile && bootm $loadaddr#$bootconf ++tftp_write=run led_start ; tftpboot $loadaddr $bootfile && mtd erase recovery 0x0 ${filesize} && mtd write recovery $loadaddr 0x0 ${filesize} ++usb_recovery=run led_start ; usb start && run usb_recovery_bl2 && run usb_recovery_ubi && run led_loop_done ++usb_recovery_bl2=fatload usb 0:1 ${loadaddr} ${recoverfile_bl2} && run recovery_write_bl2 ++usb_recovery_ubi=fatload usb 0:1 ${loadaddr} ${recoverfile_ubi} && run recovery_write_ubi ++_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" ++_firstboot=setenv _firstboot ; run _switch_to_menu ; run _init_env ; bootmenu ++_init_env=setenv _init_env ; echo Initialize Env ; run ubi_create_env ; saveenv ++_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title +--- /dev/null ++++ b/openwrt-one-spi-nand_env +@@ -0,0 +1,59 @@ ++ipaddr=192.168.11.11 ++serverip=192.168.11.23 ++loadaddr=0x46000000 ++console=earlycon=uart8250,mmio32,0x11002000 console=ttyS0 ++bootcmd=run check_buttons ; run led_start ; run boot_calibration ; run boot_production ; run boot_recovery ++bootconf=config-1 ++bootdelay=0 ++bootfile=openwrt-mediatek-filogic-openwrt_one-initramfs.itb ++bootfile_bl2=openwrt-mediatek-filogic-openwrt_one-snand-preloader.bin ++bootfile_fip=openwrt-mediatek-filogic-openwrt_one-snand-bl31-uboot.fip ++bootfile_upg=openwrt-mediatek-filogic-openwrt_one-squashfs-sysupgrade.itb ++bootmenu_confirm_return=askenv - Press ENTER to return to menu ; run led_boot ; bootmenu 60 ++bootmenu_default=0 ++bootmenu_delay=0 ++bootmenu_title= ( ( ( OpenWrt ) ) ) [SPI-NAND] ++bootmenu_0=Initialize environment.=run _firstboot ++bootmenu_0d=Run default boot command.=run boot_default ++bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return ++bootmenu_2=Boot production system from NAND.=run boot_production ; run bootmenu_confirm_return ++bootmenu_3=Boot recovery system from NAND.=run boot_recovery ; run bootmenu_confirm_return ++bootmenu_4=Load production system via TFTP then write to NAND.=noboot=1 ; replacevol=1 ; run boot_tftp_production ; noboot= ; replacevol= ; run bootmenu_confirm_return ++bootmenu_5=Load recovery system via TFTP then write to NAND.=noboot=1 ; replacevol=1 ; run boot_tftp_recovery ; noboot= ; replacevol= ; run bootmenu_confirm_return ++bootmenu_6=Load BL31+U-Boot FIP via TFTP then write to NAND.=run boot_tftp_write_fip ; run bootmenu_confirm_return ++bootmenu_7=Load BL2 preloader via TFTP then write to NAND.=run boot_tftp_write_bl2 ; run bootmenu_confirm_return ++bootmenu_8=Reboot.=reset ++bootmenu_9=Reset all settings to factory defaults.=run reset_factory ; reset ++boot_default=run bootcmd ; run boot_recovery ; replacevol=1 ; run boot_tftp_forever ++boot_calibration=ubi read $loadaddr calibration && bootm $loadaddr#$bootconf ++boot_production=led white on ; run ubi_read_production && bootm $loadaddr#$bootconf ; led white off ++boot_recovery=led green on ; run ubi_read_recovery && bootm $loadaddr#$bootconf ; led green off ++boot_tftp=run led_start ; tftpboot $loadaddr $bootfile && bootm $loadaddr#$bootconf ++boot_tftp_forever=led green off ; led white off ; led red on ; while true ; do run boot_tftp_recovery ; led red off ; sleep 1 ; done ++boot_tftp_production=tftpboot $loadaddr $bootfile_upg && test $replacevol = 1 && iminfo $loadaddr && run ubi_write_production ; if test $noboot = 1 ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp_recovery=tftpboot $loadaddr $bootfile && test $replacevol = 1 && iminfo $loadaddr && run ubi_write_recovery ; if test $noboot = 1 ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp=tftpboot $loadaddr $bootfile && bootm $loadaddr#$bootconf ++boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run ubi_write_fip && run reset_factory ++boot_tftp_write_bl2=tftpboot $loadaddr $bootfile_bl2 && run snand_write_bl2 ++check_buttons=if button front ; then run boot_recovery ; run boot_tftp ; run led_loop_error ; else if button back ; then ; run usb_recover ; run led_loop_error ; fi ; fi ++led_boot=led green on ; led white on ; led red on ++led_done=led green on ; led white off ; led red off ++led_loop_error=led white off ; led green off ; while true ; do led red on ; sleep 1 ; led red off ; sleep 1 ; done ++led_start=led white on ; led green off ; led red off ++preboot=run led_boot ++reset_factory=mw $loadaddr 0xff 0x1f000 ; ubi write $loadaddr ubootenv 0x1f000 ; ubi write $loadaddr ubootenv2 0x1f000 ; ubi remove rootfs_data ++snand_write_bl2=mtd erase bl2 && for offset in 0x0 0x40000 0x80000 0xc0000 ; do mtd write bl2 $loadaddr $offset 0x40000 ; done ++ubi_create_env=ubi check ubootenv || ubi create ubootenv 0x1f000 dynamic ; ubi check ubootenv2 || ubi create ubootenv2 0x1f000 dynamic ++ubi_prepare_rootfs=if ubi check rootfs_data ; then else if env exists rootfs_data_max ; then ubi create rootfs_data $rootfs_data_max dynamic || ubi create rootfs_data - dynamic ; else ubi create rootfs_data - dynamic ; fi ; fi ++ubi_read_production=ubi read $loadaddr fit && iminfo $loadaddr && run ubi_prepare_rootfs ++ubi_read_recovery=ubi check recovery && ubi read $loadaddr recovery ++ubi_remove_rootfs=ubi check rootfs_data && ubi remove rootfs_data ++usb_recover=run led_start ; usb start && run usb_recover_production && run led_loop_done ++usb_recover_production=fatload usb 0:1 ${loadaddr} ${bootfile_upg} && iminfo $loadaddr && run ubi_write_production ++ubi_write_fip=run ubi_remove_rootfs ; ubi check fip && ubi remove fip ; ubi create fip $filesize static && ubi write $loadaddr fip $filesize ++ubi_write_production=ubi check fit && ubi remove fit ; run ubi_remove_rootfs ; ubi create fit $filesize dynamic && ubi write $loadaddr fit $filesize ++ubi_write_recovery=ubi check recovery && ubi remove recovery ; run ubi_remove_rootfs ; ubi create recovery $filesize dynamic && ubi write $loadaddr recovery $filesize ++_init_env=setenv _init_env ; run ubi_create_env ; saveenv ; saveenv ++_firstboot=setenv _firstboot ; run _switch_to_menu ; run _init_env ; bootmenu ++_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title ++_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" diff --git a/lede/package/boot/uboot-mediatek/patches/500-board-mt7623-fix-mmc-detect.patch b/lede/package/boot/uboot-mediatek/patches/500-board-mt7623-fix-mmc-detect.patch deleted file mode 100644 index 2f0ed85e53..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/500-board-mt7623-fix-mmc-detect.patch +++ /dev/null @@ -1,21 +0,0 @@ ---- a/board/mediatek/mt7623/mt7623_rfb.c -+++ b/board/mediatek/mt7623/mt7623_rfb.c -@@ -9,6 +9,7 @@ - #include - #include - #include -+#include - #include - #include - -@@ -31,8 +32,9 @@ int mmc_get_boot_dev(void) - { - int g_mmc_devid = -1; - char *uflag = (char *)0x81DFFFF0; -+ struct blk_desc *desc; - -- if (!find_mmc_device(1)) -+ if (blk_get_device_by_str("mmc", "1", &desc) < 0) - return 0; - - if (strncmp(uflag,"eMMC",4)==0) { diff --git a/lede/package/kernel/mt76/Makefile b/lede/package/kernel/mt76/Makefile index e376c825ca..8336fcf1b0 100644 --- a/lede/package/kernel/mt76/Makefile +++ b/lede/package/kernel/mt76/Makefile @@ -14,6 +14,10 @@ PKG_SOURCE_DATE:=2022-12-22 PKG_SOURCE_VERSION:=5b509e80384ab019ac11aa90c81ec0dbb5b0d7f2 PKG_MIRROR_HASH:=6fc25df4d28becd010ff4971b23731c08b53e69381a9e4c868091899712f78a9 PATCH_DIR:=./patches-5.4 +else ifdef CONFIG_LINUX_6_6 +PKG_SOURCE_DATE:=2024-02-03 +PKG_SOURCE_VERSION:=9827df56b241601f29bf496b62545713c67afb61 +PKG_MIRROR_HASH:=d758db4228eed55c93fff8f87ec92d482b8507a68698b28dcf273e12b02ddf5f else PKG_SOURCE_DATE:=2023-08-14 PKG_SOURCE_VERSION:=b14c2351ddb8601c322576d84029e463d456caef diff --git a/lede/package/system/fstools/Makefile b/lede/package/system/fstools/Makefile index a61d4bb5a0..7277741928 100644 --- a/lede/package/system/fstools/Makefile +++ b/lede/package/system/fstools/Makefile @@ -12,15 +12,16 @@ PKG_RELEASE:=1 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL=$(PROJECT_GIT)/project/fstools.git -PKG_MIRROR_HASH:=edda9151c73c1adfe369f5e315347344727a540ad57d3e2b41b9f57f9d4313fe -PKG_SOURCE_DATE:=2023-01-22 -PKG_SOURCE_VERSION:=1ea5855e980cd88766dd9f615e78e7dd6edfbb74 +PKG_MIRROR_HASH:=cf9e09885954e0e43b58126ce4b6f5552462cf1495b89330ce4e66056249787e +PKG_SOURCE_DATE:=2024-01-22 +PKG_SOURCE_VERSION:=08cd7083cac4bddf88459efa0881ee52858e7d0a CMAKE_INSTALL:=1 PKG_LICENSE:=GPL-2.0 PKG_LICENSE_FILES:= PKG_USE_MIPS16:=0 +PKG_BUILD_FLAGS:=no-mips16 PKG_FLAGS:=nonshared PKG_BUILD_DEPENDS := util-linux @@ -48,7 +49,7 @@ define Package/fstools/config depends on PACKAGE_fstools depends on NAND_SUPPORT bool "Support extroot functionality with UBIFS" - default n + default y help This option makes it possible to use extroot functionality if the root filesystem resides on an UBIFS partition @@ -82,7 +83,7 @@ define Package/block-mount SECTION:=base CATEGORY:=Base system TITLE:=Block device mounting and checking - DEPENDS:=+fstools +ubox +libubox +libuci +libblobmsg-json +libjson-c + DEPENDS:=+ubox +libubox +libuci +libblobmsg-json +libjson-c endef define Package/blockd diff --git a/lede/package/system/fstools/patches/0001-fstools-support-extroot-for-non-MTD-rootfs_data.patch b/lede/package/system/fstools/patches/0001-fstools-support-extroot-for-non-MTD-rootfs_data.patch deleted file mode 100644 index 20a68484d3..0000000000 --- a/lede/package/system/fstools/patches/0001-fstools-support-extroot-for-non-MTD-rootfs_data.patch +++ /dev/null @@ -1,129 +0,0 @@ -From: Qi Liu - -In order to support extroot, block extroot command has to be able to -discover and properly mount the rootfs_data volume in order to discover -the extroot volume. Currently this process can only discover MTD devices. -This patch leverages libfstools in a similar way as mount_root to -discover, initialize, and mount rootfs_data volume. It would enable any -device with non-MTD rootfs_data volume to support extroot, including x86. - -Signed-off-by: Qi Liu ---- - CMakeLists.txt | 4 ++-- - block.c | 40 ++++++++++++++++++++++++++++++++++++++++ - libfstools/fstype.h | 12 ++++++++++++ - libfstools/libfstools.h | 11 +---------- - 4 files changed, 55 insertions(+), 12 deletions(-) - create mode 100644 libfstools/fstype.h - ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -78,9 +78,9 @@ INSTALL(TARGETS blockd RUNTIME DESTINATI - ADD_EXECUTABLE(block block.c probe.c probe-libblkid.c) - IF(DEFINED CMAKE_UBIFS_EXTROOT) - ADD_DEFINITIONS(-DUBIFS_EXTROOT) -- TARGET_LINK_LIBRARIES(block blkid-tiny dl uci ubox ubus blobmsg_json ubi-utils ${json}) -+ TARGET_LINK_LIBRARIES(block fstools blkid-tiny dl uci ubox ubus blobmsg_json ubi-utils ${json}) - ELSE(DEFINED CMAKE_UBIFS_EXTROOT) -- TARGET_LINK_LIBRARIES(block blkid-tiny dl uci ubox ubus blobmsg_json ${json}) -+ TARGET_LINK_LIBRARIES(block fstools blkid-tiny dl uci ubox ubus blobmsg_json ${json}) - ENDIF(DEFINED CMAKE_UBIFS_EXTROOT) - INSTALL(TARGETS block RUNTIME DESTINATION sbin) - ---- a/block.c -+++ b/block.c -@@ -44,6 +44,8 @@ - #include - #include - -+#include "libfstools/fstype.h" -+#include "libfstools/volume.h" - #include "probe.h" - - #define AUTOFS_MOUNT_PATH "/tmp/run/blockd/" -@@ -1696,6 +1698,44 @@ static int main_extroot(int argc, char * - } - #endif - -+ /* Find volume using libfstools */ -+ struct volume *data = volume_find("rootfs_data"); -+ if (data) { -+ volume_init(data); -+ -+ switch (volume_identify(data)) { -+ case FS_EXT4: { -+ char cfg[] = "/tmp/ext4_cfg"; -+ -+ /* Mount volume and try extroot (using fstab from that vol) */ -+ mkdir_p(cfg, 0755); -+ if (!mount(data->blk, cfg, "ext4", MS_NOATIME, NULL)) { -+ err = mount_extroot(cfg); -+ umount2(cfg, MNT_DETACH); -+ } -+ if (err < 0) -+ rmdir("/tmp/overlay"); -+ rmdir(cfg); -+ return err; -+ } -+ -+ case FS_F2FS: { -+ char cfg[] = "/tmp/f2fs_cfg"; -+ -+ /* Mount volume and try extroot (using fstab from that vol) */ -+ mkdir_p(cfg, 0755); -+ if (!mount(data->blk, cfg, "f2fs", MS_NOATIME, NULL)) { -+ err = mount_extroot(cfg); -+ umount2(cfg, MNT_DETACH); -+ } -+ if (err < 0) -+ rmdir("/tmp/overlay"); -+ rmdir(cfg); -+ return err; -+ } -+ } -+ } -+ - /* As a last resort look for /etc/config/fstab on "rootfs" partition */ - return mount_extroot(NULL); - } ---- /dev/null -+++ b/libfstools/fstype.h -@@ -0,0 +1,13 @@ -+#ifndef _FS_TYPE_H__ -+#define _FS_TYPE_H__ -+enum { -+ FS_NONE, -+ FS_SNAPSHOT, -+ FS_JFFS2, -+ FS_DEADCODE, -+ FS_UBIFS, -+ FS_F2FS, -+ FS_EXT4, -+ FS_TARGZ, -+}; -+#endif -\ No newline at end of file ---- a/libfstools/libfstools.h -+++ b/libfstools/libfstools.h -@@ -18,20 +18,10 @@ - #include - #include - #include -+#include "fstype.h" - - struct volume; - --enum { -- FS_NONE, -- FS_SNAPSHOT, -- FS_JFFS2, -- FS_DEADCODE, -- FS_UBIFS, -- FS_F2FS, -- FS_EXT4, -- FS_TARGZ, --}; -- - enum fs_state { - FS_STATE_UNKNOWN, - FS_STATE_PENDING, diff --git a/lede/package/utils/fitblk/Makefile b/lede/package/utils/fitblk/Makefile new file mode 100644 index 0000000000..4da4dc46f1 --- /dev/null +++ b/lede/package/utils/fitblk/Makefile @@ -0,0 +1,41 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=fitblk +PKG_RELEASE:=1 +PKG_LICENSE:=GPL-2.0-only +PKG_MAINTAINER:=Daniel Golle + +PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) + +PKG_FLAGS:=nonshared + +include $(INCLUDE_DIR)/package.mk + +define Package/fitblk + HIDDEN:=1 + SECTION:=base + CATEGORY:=Base system + TITLE:=fitblk firmware release tool + DEPENDS:=@!LINUX_5_15 +endef + +define Package/fitblk/description +Release uImage.FIT block devices using ioctl. +endef + +define Build/Configure +endef + +define Build/Compile + $(MAKE) -C $(PKG_BUILD_DIR) \ + CC="$(TARGET_CC)" \ + CFLAGS="$(TARGET_CFLAGS) -Wall -Werror" \ + LDFLAGS="$(TARGET_LDFLAGS)" +endef + +define Package/fitblk/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_BUILD_DIR)/fitblk $(1)/usr/sbin/ +endef + +$(eval $(call BuildPackage,fitblk)) diff --git a/lede/package/utils/fitblk/src/Makefile b/lede/package/utils/fitblk/src/Makefile new file mode 100644 index 0000000000..064764c17d --- /dev/null +++ b/lede/package/utils/fitblk/src/Makefile @@ -0,0 +1,7 @@ +all: fitblk + +fitblk: + $(CC) $(CFLAGS) -o $@ fitblk.c $(LDFLAGS) + +clean: + rm -f fitblk diff --git a/lede/package/utils/fitblk/src/fitblk.c b/lede/package/utils/fitblk/src/fitblk.c new file mode 100644 index 0000000000..059ba6098c --- /dev/null +++ b/lede/package/utils/fitblk/src/fitblk.c @@ -0,0 +1,45 @@ +// SPDX-License-Identifier: GPL-2.0-only +#include +#include +#include +#include +#include +#include +#include + +static int fitblk_release(char *device) +{ + int fd, ret; + + fd = open(device, O_RDONLY); + if (fd == -1) + return errno; + + ret = ioctl(fd, FITBLK_RELEASE, NULL); + close(fd); + + if (ret == -1) + return errno; + + return 0; +} + +int main(int argc, char *argp[]) +{ + int ret; + + if (argc != 2) { + fprintf(stderr, "Release uImage.FIT sub-image block device\n"); + fprintf(stderr, "Syntax: %s /dev/fitXXX\n", argp[0]); + return -EINVAL; + } + + ret = fitblk_release(argp[1]); + if (ret) + fprintf(stderr, "fitblk: error releasing %s: %s\n", argp[1], + strerror(ret)); + else + fprintf(stderr, "fitblk: %s released\n", argp[1]); + + return ret; +} diff --git a/lede/target/linux/generic/config-6.6 b/lede/target/linux/generic/config-6.6 index 6ae27dbadd..20fe98099f 100644 --- a/lede/target/linux/generic/config-6.6 +++ b/lede/target/linux/generic/config-6.6 @@ -1,13 +1,11 @@ # CONFIG_104_QUAD_8 is not set CONFIG_32BIT=y -CONFIG_64BIT_TIME=y # CONFIG_6LOWPAN is not set # CONFIG_6LOWPAN_DEBUGFS is not set # CONFIG_6PACK is not set # CONFIG_8139CP is not set # CONFIG_8139TOO is not set # CONFIG_9P_FS is not set -# CONFIG_AB3100_CORE is not set # CONFIG_AB8500_CORE is not set # CONFIG_ABP060MG is not set # CONFIG_ABX500_CORE is not set @@ -60,7 +58,6 @@ CONFIG_64BIT_TIME=y # CONFIG_AD7091R5 is not set # CONFIG_AD7124 is not set # CONFIG_AD7150 is not set -# CONFIG_AD7152 is not set # CONFIG_AD7192 is not set # CONFIG_AD7266 is not set # CONFIG_AD7280 is not set @@ -94,7 +91,6 @@ CONFIG_64BIT_TIME=y # CONFIG_AD9834 is not set # CONFIG_ADA4250 is not set # CONFIG_ADAPTEC_STARFIRE is not set -# CONFIG_ADE7854 is not set # CONFIG_ADF4350 is not set # CONFIG_ADF4371 is not set # CONFIG_ADF4377 is not set @@ -161,6 +157,7 @@ CONFIG_AF_UNIX_OOB=y CONFIG_AIO=y # CONFIG_AIRO is not set # CONFIG_AIRO_CS is not set +# CONFIG_AIR_EN8811H_PHY is not set # CONFIG_AIX_PARTITION is not set # CONFIG_AK09911 is not set # CONFIG_AK8974 is not set @@ -187,9 +184,7 @@ CONFIG_ALLOW_DEV_COREDUMP=y # CONFIG_AMILO_RFKILL is not set # CONFIG_AMPERE_ERRATUM_AC03_CPU_38 is not set # CONFIG_AMT is not set -# CONFIG_ANDROID is not set # CONFIG_ANDROID_BINDER_IPC is not set -CONFIG_ANON_INODES=y # CONFIG_ANON_VMA_NAME is not set # CONFIG_APDS9300 is not set # CONFIG_APDS9802ALS is not set @@ -207,7 +202,6 @@ CONFIG_ANON_INODES=y # CONFIG_AR8216_PHY is not set # CONFIG_AR8216_PHY_LEDS is not set # CONFIG_ARCH_ACTIONS is not set -# CONFIG_ARCH_AGILEX is not set # CONFIG_ARCH_AIROHA is not set # CONFIG_ARCH_ALPINE is not set # CONFIG_ARCH_APPLE is not set @@ -217,14 +211,12 @@ CONFIG_ANON_INODES=y # CONFIG_ARCH_AXXIA is not set # CONFIG_ARCH_BCM is not set # CONFIG_ARCH_BCM2835 is not set -# CONFIG_ARCH_BCM4908 is not set # CONFIG_ARCH_BCMBCA is not set # CONFIG_ARCH_BCM_21664 is not set # CONFIG_ARCH_BCM_23550 is not set # CONFIG_ARCH_BCM_281XX is not set # CONFIG_ARCH_BCM_5301X is not set # CONFIG_ARCH_BCM_53573 is not set -# CONFIG_ARCH_BCM_63XX is not set # CONFIG_ARCH_BCM_CYGNUS is not set # CONFIG_ARCH_BCM_HR2 is not set # CONFIG_ARCH_BCM_IPROC is not set @@ -234,12 +226,10 @@ CONFIG_ARCH_BINFMT_ELF_STATE=y # CONFIG_ARCH_BITMAIN is not set # CONFIG_ARCH_BRCMSTB is not set # CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CNS3XXX is not set # CONFIG_ARCH_DAVINCI is not set # CONFIG_ARCH_DIGICOLOR is not set # CONFIG_ARCH_DMA_ADDR_T_64BIT is not set # CONFIG_ARCH_DOVE is not set -# CONFIG_ARCH_EBSA110 is not set # CONFIG_ARCH_EP93XX is not set # CONFIG_ARCH_EXYNOS is not set CONFIG_ARCH_FLATMEM_ENABLE=y @@ -252,14 +242,10 @@ CONFIG_ARCH_FORCE_MAX_ORDER=11 # CONFIG_ARCH_HPE is not set # CONFIG_ARCH_INTEGRATOR is not set # CONFIG_ARCH_INTEL_SOCFPGA is not set -# CONFIG_ARCH_IOP13XX is not set -# CONFIG_ARCH_IOP32X is not set -# CONFIG_ARCH_IOP33X is not set # CONFIG_ARCH_IXP4XX is not set # CONFIG_ARCH_K3 is not set # CONFIG_ARCH_KEEMBAY is not set # CONFIG_ARCH_KEYSTONE is not set -# CONFIG_ARCH_KS8695 is not set # CONFIG_ARCH_LAYERSCAPE is not set # CONFIG_ARCH_LG1K is not set # CONFIG_ARCH_LPC32XX is not set @@ -282,7 +268,6 @@ CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=8 # CONFIG_ARCH_MXC is not set # CONFIG_ARCH_MXS is not set # CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED is not set -# CONFIG_ARCH_NETX is not set # CONFIG_ARCH_NOMADIK is not set # CONFIG_ARCH_NPCM is not set # CONFIG_ARCH_NSPIRE is not set @@ -294,12 +279,8 @@ CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=8 # CONFIG_ARCH_OMAP3 is not set # CONFIG_ARCH_OMAP4 is not set # CONFIG_ARCH_ORION5X is not set -# CONFIG_ARCH_OXNAS is not set -# CONFIG_ARCH_PICOXCELL is not set -# CONFIG_ARCH_PRIMA2 is not set # CONFIG_ARCH_PXA is not set # CONFIG_ARCH_QCOM is not set -# CONFIG_ARCH_RANDOM is not set # CONFIG_ARCH_RDA is not set # CONFIG_ARCH_REALTEK is not set # CONFIG_ARCH_REALVIEW is not set @@ -307,27 +288,21 @@ CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=8 # CONFIG_ARCH_ROCKCHIP is not set # CONFIG_ARCH_RPC is not set # CONFIG_ARCH_S32 is not set -# CONFIG_ARCH_S3C24XX is not set # CONFIG_ARCH_S3C64XX is not set # CONFIG_ARCH_S5PV210 is not set # CONFIG_ARCH_SA1100 is not set # CONFIG_ARCH_SEATTLE is not set # CONFIG_ARCH_SHMOBILE is not set -# CONFIG_ARCH_SIRF is not set -# CONFIG_ARCH_SOCFPGA is not set # CONFIG_ARCH_SPARX5 is not set # CONFIG_ARCH_SPRD is not set # CONFIG_ARCH_STI is not set # CONFIG_ARCH_STM32 is not set -# CONFIG_ARCH_STRATIX10 is not set # CONFIG_ARCH_SUNPLUS is not set # CONFIG_ARCH_SUNXI is not set # CONFIG_ARCH_SYNQUACER is not set -# CONFIG_ARCH_TANGO is not set # CONFIG_ARCH_TEGRA is not set # CONFIG_ARCH_THUNDER is not set # CONFIG_ARCH_THUNDER2 is not set -# CONFIG_ARCH_U300 is not set # CONFIG_ARCH_U8500 is not set # CONFIG_ARCH_UNIPHIER is not set # CONFIG_ARCH_VERSATILE is not set @@ -335,14 +310,11 @@ CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=8 # CONFIG_ARCH_VIRT is not set # CONFIG_ARCH_VISCONTI is not set # CONFIG_ARCH_VT8500 is not set -# CONFIG_ARCH_VULCAN is not set -# CONFIG_ARCH_W90X900 is not set # CONFIG_ARCH_WANTS_THP_SWAP is not set # CONFIG_ARCH_WM8505 is not set # CONFIG_ARCH_WM8750 is not set # CONFIG_ARCH_WM8850 is not set # CONFIG_ARCH_XGENE is not set -# CONFIG_ARCH_ZX is not set # CONFIG_ARCH_ZYNQ is not set # CONFIG_ARCH_ZYNQMP is not set # CONFIG_ARCNET is not set @@ -352,7 +324,6 @@ CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=8 # CONFIG_ARM64_64K_PAGES is not set # CONFIG_ARM64_AMU_EXTN is not set # CONFIG_ARM64_BTI is not set -# CONFIG_ARM64_CRYPTO is not set # CONFIG_ARM64_E0PD is not set # CONFIG_ARM64_ERRATUM_1024718 is not set # CONFIG_ARM64_ERRATUM_1165522 is not set @@ -385,37 +356,31 @@ CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=8 # CONFIG_ARM64_ERRATUM_858921 is not set # CONFIG_ARM64_HW_AFDBM is not set # CONFIG_ARM64_LSE_ATOMICS is not set -CONFIG_ARM64_MODULE_PLTS=y # CONFIG_ARM64_MTE is not set # CONFIG_ARM64_PAN is not set # CONFIG_ARM64_PMEM is not set # CONFIG_ARM64_PSEUDO_NMI is not set -# CONFIG_ARM64_PTDUMP_DEBUGFS is not set # CONFIG_ARM64_PTR_AUTH is not set -# CONFIG_ARM64_RANDOMIZE_TEXT_OFFSET is not set # CONFIG_ARM64_RAS_EXTN is not set # CONFIG_ARM64_RELOC_TEST is not set # CONFIG_ARM64_SME is not set # CONFIG_ARM64_SVE is not set CONFIG_ARM64_SW_TTBR0_PAN=y # CONFIG_ARM64_TLB_RANGE is not set -# CONFIG_ARM64_UAO is not set # CONFIG_ARM64_USE_LSE_ATOMICS is not set # CONFIG_ARM64_VA_BITS_48 is not set -# CONFIG_ARM64_VHE is not set # CONFIG_ARM_APPENDED_DTB is not set # CONFIG_ARM_ARCH_TIMER is not set # CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_EXTEND is not set -# CONFIG_ARM_BIG_LITTLE_CPUFREQ is not set # CONFIG_ARM_CCI is not set # CONFIG_ARM_CCI400_PMU is not set # CONFIG_ARM_CCI5xx_PMU is not set # CONFIG_ARM_CCI_PMU is not set # CONFIG_ARM_CCN is not set # CONFIG_ARM_CMN is not set +# CONFIG_ARM_CORESIGHT_PMU_ARCH_SYSTEM_PMU is not set # CONFIG_ARM_CPUIDLE is not set CONFIG_ARM_CPU_TOPOLOGY=y -# CONFIG_ARM_CRYPTO is not set CONFIG_ARM_DMA_MEM_BUFFERABLE=y # CONFIG_ARM_DSU_PMU is not set # CONFIG_ARM_ERRATA_326103 is not set @@ -464,6 +429,7 @@ CONFIG_ARM_MODULE_PLTS=y # CONFIG_ARM_SDE_INTERFACE is not set # CONFIG_ARM_SMCCC_SOC_ID is not set # CONFIG_ARM_SMC_WATCHDOG is not set +# CONFIG_ARM_SMMU_V3_PMU is not set # CONFIG_ARM_SP805_WATCHDOG is not set # CONFIG_ARM_SPE_PMU is not set # CONFIG_ARM_THUMBEE is not set @@ -516,7 +482,6 @@ CONFIG_ATA_SFF=y # CONFIG_ATMEL is not set # CONFIG_ATMEL_PIT is not set # CONFIG_ATMEL_SSC is not set -# CONFIG_ATM_AMBASSADOR is not set # CONFIG_ATM_BR2684 is not set CONFIG_ATM_BR2684_IPFILTER=y # CONFIG_ATM_CLIP is not set @@ -524,10 +489,8 @@ CONFIG_ATM_CLIP_NO_ICMP=y # CONFIG_ATM_DRIVERS is not set # CONFIG_ATM_DUMMY is not set # CONFIG_ATM_ENI is not set -# CONFIG_ATM_FIRESTREAM is not set # CONFIG_ATM_FORE200E is not set # CONFIG_ATM_HE is not set -# CONFIG_ATM_HORIZON is not set # CONFIG_ATM_IA is not set # CONFIG_ATM_IDT77252 is not set # CONFIG_ATM_LANAI is not set @@ -536,13 +499,10 @@ CONFIG_ATM_CLIP_NO_ICMP=y # CONFIG_ATM_NICSTAR is not set # CONFIG_ATM_SOLOS is not set # CONFIG_ATM_TCP is not set -# CONFIG_ATM_ZATM is not set # CONFIG_ATOMIC64_SELFTEST is not set # CONFIG_ATP is not set # CONFIG_AUDIT is not set # CONFIG_AUDIT_ARCH_COMPAT_GENERIC is not set -# CONFIG_AURORA_NB8800 is not set -# CONFIG_AUTOFS4_FS is not set # CONFIG_AUTOFS_FS is not set # CONFIG_AUTO_ZRELADDR is not set # CONFIG_AUXDISPLAY is not set @@ -569,21 +529,17 @@ CONFIG_ATM_CLIP_NO_ICMP=y # CONFIG_BACKLIGHT_ARCXCNN is not set # CONFIG_BACKLIGHT_BD6107 is not set # CONFIG_BACKLIGHT_CLASS_DEVICE is not set -# CONFIG_BACKLIGHT_GENERIC is not set # CONFIG_BACKLIGHT_GPIO is not set # CONFIG_BACKLIGHT_KTD253 is not set # CONFIG_BACKLIGHT_KTZ8866 is not set -# CONFIG_BACKLIGHT_LCD_SUPPORT is not set # CONFIG_BACKLIGHT_LED is not set # CONFIG_BACKLIGHT_LM3630A is not set # CONFIG_BACKLIGHT_LM3639 is not set # CONFIG_BACKLIGHT_LP855X is not set # CONFIG_BACKLIGHT_LV5207LP is not set # CONFIG_BACKLIGHT_PANDORA is not set -# CONFIG_BACKLIGHT_PM8941_WLED is not set # CONFIG_BACKLIGHT_PWM is not set # CONFIG_BACKLIGHT_QCOM_WLED is not set -# CONFIG_BACKLIGHT_RPI is not set # CONFIG_BACKLIGHT_SAHARA is not set # CONFIG_BACKTRACE_SELF_TEST is not set # CONFIG_BACKTRACE_VERBOSE is not set @@ -613,7 +569,6 @@ CONFIG_BASE_SMALL=0 # CONFIG_BAYCOM_SER_FDX is not set # CONFIG_BAYCOM_SER_HDX is not set # CONFIG_BCACHE is not set -# CONFIG_BCM2712_MIP is not set # CONFIG_BCM47XX is not set # CONFIG_BCM54140_PHY is not set # CONFIG_BCM63XX is not set @@ -643,7 +598,6 @@ CONFIG_BCMA_POSSIBLE=y # CONFIG_BIG_KEYS is not set # CONFIG_BIG_LITTLE is not set CONFIG_BINARY_PRINTF=y -# CONFIG_BINFMT_AOUT is not set CONFIG_BINFMT_ELF=y # CONFIG_BINFMT_ELF_FDPIC is not set # CONFIG_BINFMT_FLAT is not set @@ -653,92 +607,35 @@ CONFIG_BITREVERSE=y # CONFIG_BLK_CGROUP_IOCOST is not set # CONFIG_BLK_CGROUP_IOLATENCY is not set # CONFIG_BLK_CGROUP_IOPRIO is not set -# CONFIG_BLK_CMDLINE_PARSER is not set # CONFIG_BLK_DEBUG_FS is not set CONFIG_BLK_DEV=y # CONFIG_BLK_DEV_3W_XXXX_RAID is not set -# CONFIG_BLK_DEV_4DRIVES is not set -# CONFIG_BLK_DEV_AEC62XX is not set -# CONFIG_BLK_DEV_ALI14XX is not set -# CONFIG_BLK_DEV_ALI15X3 is not set -# CONFIG_BLK_DEV_AMD74XX is not set -# CONFIG_BLK_DEV_ATIIXP is not set # CONFIG_BLK_DEV_BSG is not set # CONFIG_BLK_DEV_BSGLIB is not set -# CONFIG_BLK_DEV_CMD640 is not set -# CONFIG_BLK_DEV_CMD64X is not set # CONFIG_BLK_DEV_COW_COMMON is not set -# CONFIG_BLK_DEV_CRYPTOLOOP is not set -# CONFIG_BLK_DEV_CS5520 is not set -# CONFIG_BLK_DEV_CS5530 is not set -# CONFIG_BLK_DEV_CS5535 is not set -# CONFIG_BLK_DEV_CS5536 is not set -# CONFIG_BLK_DEV_CY82C693 is not set -# CONFIG_BLK_DEV_DAC960 is not set -# CONFIG_BLK_DEV_DELKIN is not set # CONFIG_BLK_DEV_DM is not set # CONFIG_BLK_DEV_DRBD is not set -# CONFIG_BLK_DEV_DTC2278 is not set # CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_GENERIC is not set -# CONFIG_BLK_DEV_HPT366 is not set -# CONFIG_BLK_DEV_HT6560B is not set -# CONFIG_BLK_DEV_IDEACPI is not set -# CONFIG_BLK_DEV_IDECD is not set -# CONFIG_BLK_DEV_IDECS is not set -# CONFIG_BLK_DEV_IDEPCI is not set -# CONFIG_BLK_DEV_IDEPNP is not set -# CONFIG_BLK_DEV_IDETAPE is not set -# CONFIG_BLK_DEV_IDE_AU1XXX is not set -# CONFIG_BLK_DEV_IDE_SATA is not set CONFIG_BLK_DEV_INITRD=y # CONFIG_BLK_DEV_INTEGRITY is not set # CONFIG_BLK_DEV_IO_TRACE is not set -# CONFIG_BLK_DEV_IT8172 is not set -# CONFIG_BLK_DEV_IT8213 is not set -# CONFIG_BLK_DEV_IT821X is not set -# CONFIG_BLK_DEV_JMICRON is not set # CONFIG_BLK_DEV_LOOP is not set CONFIG_BLK_DEV_LOOP_MIN_COUNT=8 # CONFIG_BLK_DEV_MD is not set # CONFIG_BLK_DEV_NBD is not set -# CONFIG_BLK_DEV_NS87415 is not set # CONFIG_BLK_DEV_NULL_BLK is not set # CONFIG_BLK_DEV_NVME is not set -# CONFIG_BLK_DEV_OFFBOARD is not set -# CONFIG_BLK_DEV_OPTI621 is not set # CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set -# CONFIG_BLK_DEV_PDC202XX_NEW is not set -# CONFIG_BLK_DEV_PDC202XX_OLD is not set -# CONFIG_BLK_DEV_PIIX is not set -# CONFIG_BLK_DEV_PLATFORM is not set # CONFIG_BLK_DEV_PMEM is not set -# CONFIG_BLK_DEV_QD65XX is not set # CONFIG_BLK_DEV_RAM is not set # CONFIG_BLK_DEV_RBD is not set -# CONFIG_BLK_DEV_RSXX is not set -# CONFIG_BLK_DEV_RZ1000 is not set -# CONFIG_BLK_DEV_SC1200 is not set # CONFIG_BLK_DEV_SD is not set -# CONFIG_BLK_DEV_SIIMAGE is not set -# CONFIG_BLK_DEV_SIS5513 is not set -# CONFIG_BLK_DEV_SKD is not set -# CONFIG_BLK_DEV_SL82C105 is not set -# CONFIG_BLK_DEV_SLC90E66 is not set # CONFIG_BLK_DEV_SR is not set -# CONFIG_BLK_DEV_SVWKS is not set -# CONFIG_BLK_DEV_SX8 is not set -# CONFIG_BLK_DEV_TC86C001 is not set # CONFIG_BLK_DEV_THROTTLING is not set -# CONFIG_BLK_DEV_TRIFLEX is not set -# CONFIG_BLK_DEV_TRM290 is not set # CONFIG_BLK_DEV_UBLK is not set -# CONFIG_BLK_DEV_UMC8672 is not set -# CONFIG_BLK_DEV_UMEM is not set -# CONFIG_BLK_DEV_VIA82CXXX is not set # CONFIG_BLK_DEV_ZONED is not set # CONFIG_BLK_INLINE_ENCRYPTION is not set -# CONFIG_BLK_NVMEM is not set +# CONFIG_BLOCK_NOTIFIERS is not set # CONFIG_BLK_SED_OPAL is not set # CONFIG_BLK_WBT is not set CONFIG_BLOCK=y @@ -864,7 +761,6 @@ CONFIG_BT_HCIUART_H4=y # CONFIG_BT_HCIUART_RTL is not set # CONFIG_BT_HCIVHCI is not set # CONFIG_BT_HIDP is not set -# CONFIG_BT_HS is not set # CONFIG_BT_LE is not set # CONFIG_BT_LEDS is not set CONFIG_BT_LE_L2CAP_ECRED=y @@ -879,9 +775,7 @@ CONFIG_BT_RFCOMM_TTY=y # CONFIG_BT_VIRTIO is not set CONFIG_BUG=y # CONFIG_BUG_ON_DATA_CORRUPTION is not set -CONFIG_BUILDTIME_EXTABLE_SORT=y CONFIG_BUILDTIME_TABLE_SORT=y -# CONFIG_BUILD_BIN2C is not set CONFIG_BUILD_SALT="" # CONFIG_C2PORT is not set # CONFIG_CACHESTAT_SYSCALL is not set @@ -918,12 +812,8 @@ CONFIG_CACHE_L2X0_PMU=y # CONFIG_CAN_UCAN is not set # CONFIG_CAN_VCAN is not set # CONFIG_CAN_VXCAN is not set -# CONFIG_CAPI_AVM is not set -# CONFIG_CAPI_EICON is not set # CONFIG_CAPI_TRACE is not set CONFIG_CARDBUS=y -# CONFIG_CARDMAN_4000 is not set -# CONFIG_CARDMAN_4040 is not set # CONFIG_CARL9170 is not set # CONFIG_CASSINI is not set # CONFIG_CAVIUM_CPT is not set @@ -966,7 +856,6 @@ CONFIG_CFG80211_HEADERS=y # CONFIG_CHARGER_ISP1704 is not set # CONFIG_CHARGER_LP8727 is not set # CONFIG_CHARGER_LT3651 is not set -# CONFIG_CHARGER_LTC3651 is not set # CONFIG_CHARGER_LTC4162L is not set # CONFIG_CHARGER_MANAGER is not set # CONFIG_CHARGER_MAX77976 is not set @@ -980,35 +869,27 @@ CONFIG_CFG80211_HEADERS=y # CONFIG_CHARGER_SMB347 is not set # CONFIG_CHARGER_TWL4030 is not set # CONFIG_CHARGER_UCS1002 is not set -# CONFIG_CHASH_SELFTEST is not set -# CONFIG_CHASH_STATS is not set # CONFIG_CHECKPOINT_RESTORE is not set # CONFIG_CHELSIO_T1 is not set # CONFIG_CHELSIO_T3 is not set # CONFIG_CHELSIO_T4 is not set # CONFIG_CHELSIO_T4VF is not set # CONFIG_CHROME_PLATFORMS is not set -# CONFIG_CHR_DEV_OSST is not set # CONFIG_CHR_DEV_SCH is not set # CONFIG_CHR_DEV_SG is not set # CONFIG_CHR_DEV_ST is not set # CONFIG_CICADA_PHY is not set # CONFIG_CIFS is not set -# CONFIG_CIFS_ACL is not set CONFIG_CIFS_ALLOW_INSECURE_LEGACY=y # CONFIG_CIFS_DEBUG is not set # CONFIG_CIFS_DEBUG2 is not set # CONFIG_CIFS_FSCACHE is not set # CONFIG_CIFS_NFSD_EXPORT is not set CONFIG_CIFS_POSIX=y -# CONFIG_CIFS_SMB2 is not set -# CONFIG_CIFS_STATS is not set # CONFIG_CIFS_STATS2 is not set # CONFIG_CIFS_SWN_UPCALL is not set -# CONFIG_CIFS_WEAK_PW_HASH is not set CONFIG_CIFS_XATTR=y # CONFIG_CIO_DAC is not set -# CONFIG_CLEANCACHE is not set # CONFIG_CLKSRC_PISTACHIO is not set # CONFIG_CLKSRC_VERSATILE is not set # CONFIG_CLK_GFM_LPASS_SM8250 is not set @@ -1016,7 +897,6 @@ CONFIG_CIFS_XATTR=y # CONFIG_CLK_ICST is not set # CONFIG_CLK_QORIQ is not set # CONFIG_CLK_SP810 is not set -# CONFIG_CLOCK_THERMAL is not set CONFIG_CLS_U32_MARK=y # CONFIG_CLS_U32_PERF is not set # CONFIG_CM32181 is not set @@ -1059,8 +939,6 @@ CONFIG_CMDLINE="" # CONFIG_COMMON_CLK_PWM is not set # CONFIG_COMMON_CLK_PXA is not set # CONFIG_COMMON_CLK_QCOM is not set -# CONFIG_COMMON_CLK_RP1 is not set -# CONFIG_COMMON_CLK_RP1_SDIO is not set # CONFIG_COMMON_CLK_RS9_PCIE is not set # CONFIG_COMMON_CLK_SI514 is not set # CONFIG_COMMON_CLK_SI521XX is not set @@ -1104,7 +982,6 @@ CONFIG_CONSTRUCTORS=y # CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL is not set # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set # CONFIG_CPU_FREQ_GOV_SCHEDUTIL is not set -# CONFIG_CPU_FREQ_STAT_DETAILS is not set # CONFIG_CPU_FREQ_THERMAL is not set # CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set # CONFIG_CPU_ICACHE_DISABLE is not set @@ -1138,7 +1015,7 @@ CONFIG_CRC32_SARWATE=y # CONFIG_CRC_CCITT is not set # CONFIG_CRC_ITU_T is not set # CONFIG_CRC_T10DIF is not set -CONFIG_CROSS_COMPILE="" +# CONFIG_CROS_HPS_I2C is not set # CONFIG_CROSS_MEMORY_ATTACH is not set CONFIG_CRYPTO=y # CONFIG_CRYPTO_842 is not set @@ -1147,13 +1024,8 @@ CONFIG_CRYPTO_ACOMP2=y CONFIG_CRYPTO_AEAD=y CONFIG_CRYPTO_AEAD2=y # CONFIG_CRYPTO_AEGIS128 is not set -# CONFIG_CRYPTO_AEGIS128L is not set -# CONFIG_CRYPTO_AEGIS128L_AESNI_SSE2 is not set # CONFIG_CRYPTO_AEGIS128_AESNI_SSE2 is not set -# CONFIG_CRYPTO_AEGIS256 is not set -# CONFIG_CRYPTO_AEGIS256_AESNI_SSE2 is not set CONFIG_CRYPTO_AES=y -# CONFIG_CRYPTO_AES_586 is not set # CONFIG_CRYPTO_AES_ARM is not set # CONFIG_CRYPTO_AES_ARM64 is not set # CONFIG_CRYPTO_AES_ARM64_BS is not set @@ -1219,14 +1091,14 @@ CONFIG_CRYPTO_CTR=y # CONFIG_CRYPTO_DEV_CCREE is not set # CONFIG_CRYPTO_DEV_FSL_CAAM is not set # CONFIG_CRYPTO_DEV_FSL_CAAM_CRYPTO_API_DESC is not set +# CONFIG_CRYPTO_DEV_FSL_CAAM_DEBUG is not set +# CONFIG_CRYPTO_DEV_FSL_CAAM_INTC is not set +# CONFIG_CRYPTO_DEV_FSL_CAAM_RNG_TEST is not set # CONFIG_CRYPTO_DEV_HIFN_795X is not set # CONFIG_CRYPTO_DEV_HISI_SEC is not set # CONFIG_CRYPTO_DEV_HISI_ZIP is not set # CONFIG_CRYPTO_DEV_IMGTEC_HASH is not set # CONFIG_CRYPTO_DEV_MARVELL_CESA is not set -# CONFIG_CRYPTO_DEV_MEDIATEK is not set -# CONFIG_CRYPTO_DEV_MV_CESA is not set -# CONFIG_CRYPTO_DEV_MXC_SCC is not set # CONFIG_CRYPTO_DEV_MXS_DCP is not set # CONFIG_CRYPTO_DEV_NITROX_CNN55XX is not set # CONFIG_CRYPTO_DEV_OCTEONTX_CPT is not set @@ -1257,7 +1129,6 @@ CONFIG_CRYPTO_CTR=y # CONFIG_CRYPTO_FCRYPT is not set # CONFIG_CRYPTO_FIPS is not set CONFIG_CRYPTO_GCM=y -CONFIG_CRYPTO_GF128MUL=y CONFIG_CRYPTO_GHASH=y # CONFIG_CRYPTO_GHASH_ARM64_CE is not set # CONFIG_CRYPTO_GHASH_ARM_CE is not set @@ -1288,22 +1159,14 @@ CONFIG_CRYPTO_LIB_POLY1305_RSIZE=9 CONFIG_CRYPTO_MANAGER=y CONFIG_CRYPTO_MANAGER2=y CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y -# CONFIG_CRYPTO_MCRYPTD is not set # CONFIG_CRYPTO_MD4 is not set # CONFIG_CRYPTO_MD5 is not set # CONFIG_CRYPTO_MICHAEL_MIC is not set -# CONFIG_CRYPTO_MORUS1280 is not set -# CONFIG_CRYPTO_MORUS1280_AVX2 is not set -# CONFIG_CRYPTO_MORUS1280_SSE2 is not set -# CONFIG_CRYPTO_MORUS640 is not set -# CONFIG_CRYPTO_MORUS640_SSE2 is not set # CONFIG_CRYPTO_NHPOLY1305_NEON is not set CONFIG_CRYPTO_NULL=y CONFIG_CRYPTO_NULL2=y # CONFIG_CRYPTO_OFB is not set # CONFIG_CRYPTO_PCBC is not set -# CONFIG_CRYPTO_PCOMP is not set -# CONFIG_CRYPTO_PCOMP2 is not set CONFIG_CRYPTO_PCRYPT=y # CONFIG_CRYPTO_POLY1305 is not set # CONFIG_CRYPTO_POLY1305_ARM is not set @@ -1348,7 +1211,6 @@ CONFIG_CRYPTO_SKCIPHER2=y # CONFIG_CRYPTO_SM4_ARM64_CE_GCM is not set # CONFIG_CRYPTO_SM4_ARM64_NEON_BLK is not set # CONFIG_CRYPTO_SM4_GENERIC is not set -# CONFIG_CRYPTO_SPECK is not set # CONFIG_CRYPTO_STATS is not set # CONFIG_CRYPTO_STREEBOG is not set # CONFIG_CRYPTO_TEA is not set @@ -1368,7 +1230,6 @@ CONFIG_CRYPTO_SKCIPHER2=y # CONFIG_CRYPTO_XCBC is not set # CONFIG_CRYPTO_XTS is not set # CONFIG_CRYPTO_XXHASH is not set -# CONFIG_CRYPTO_ZLIB is not set # CONFIG_CRYPTO_ZSTD is not set # CONFIG_CS5535_MFGPT is not set # CONFIG_CS89x0 is not set @@ -1377,12 +1238,8 @@ CONFIG_CRYPTO_SKCIPHER2=y # CONFIG_CUSE is not set # CONFIG_CW1200 is not set # CONFIG_CXD2880_SPI_DRV is not set -# CONFIG_CXL_AFU_DRIVER_OPS is not set # CONFIG_CXL_BASE is not set # CONFIG_CXL_BUS is not set -# CONFIG_CXL_EEH is not set -# CONFIG_CXL_KERNEL_API is not set -# CONFIG_CXL_LIB is not set # CONFIG_CYPRESS_FIRMWARE is not set # CONFIG_DA280 is not set # CONFIG_DA311 is not set @@ -1393,14 +1250,11 @@ CONFIG_CRYPTO_SKCIPHER2=y # CONFIG_DDR is not set # CONFIG_DEBUG_ALIGN_RODATA is not set # CONFIG_DEBUG_ATOMIC_SLEEP is not set -# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set # CONFIG_DEBUG_BUGVERBOSE is not set # CONFIG_DEBUG_CGROUP_REF is not set -# CONFIG_DEBUG_CREDENTIALS is not set # CONFIG_DEBUG_DEVRES is not set # CONFIG_DEBUG_DRIVER is not set # CONFIG_DEBUG_EFI is not set -# CONFIG_DEBUG_FORCE_FUNCTION_ALIGN_32B is not set # CONFIG_DEBUG_FORCE_FUNCTION_ALIGN_64B is not set # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set CONFIG_DEBUG_FS=y @@ -1440,14 +1294,12 @@ CONFIG_DEBUG_KERNEL=y # CONFIG_DEBUG_MUTEXES is not set # CONFIG_DEBUG_NET is not set # CONFIG_DEBUG_NOTIFIERS is not set -# CONFIG_DEBUG_NX_TEST is not set # CONFIG_DEBUG_OBJECTS is not set # CONFIG_DEBUG_PAGEALLOC is not set # CONFIG_DEBUG_PAGE_REF is not set # CONFIG_DEBUG_PERF_USE_VMALLOC is not set # CONFIG_DEBUG_PER_CPU_MAPS is not set # CONFIG_DEBUG_PINCTRL is not set -# CONFIG_DEBUG_PI_LIST is not set # CONFIG_DEBUG_PLIST is not set # CONFIG_DEBUG_PREEMPT is not set # CONFIG_DEBUG_RODATA_TEST is not set @@ -1462,12 +1314,10 @@ CONFIG_DEBUG_KERNEL=y # CONFIG_DEBUG_SPINLOCK is not set # CONFIG_DEBUG_STACKOVERFLOW is not set # CONFIG_DEBUG_STACK_USAGE is not set -# CONFIG_DEBUG_STRICT_USER_COPY_CHECKS is not set # CONFIG_DEBUG_TEST_DRIVER_REMOVE is not set # CONFIG_DEBUG_TIMEKEEPING is not set # CONFIG_DEBUG_UART_8250_PALMCHIP is not set # CONFIG_DEBUG_UART_8250_WORD is not set -# CONFIG_DEBUG_UART_BCM63XX is not set # CONFIG_DEBUG_UART_FLOW_CONTROL is not set # CONFIG_DEBUG_USER is not set # CONFIG_DEBUG_VIRTUAL is not set @@ -1476,15 +1326,12 @@ CONFIG_DEBUG_KERNEL=y # CONFIG_DEBUG_VM_PGFLAGS is not set # CONFIG_DEBUG_VM_PGTABLE is not set # CONFIG_DEBUG_VM_RB is not set -# CONFIG_DEBUG_VM_VMACACHE is not set # CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set # CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set # CONFIG_DEBUG_WX is not set # CONFIG_DEBUG_ZBOOT is not set -# CONFIG_DECNET is not set # CONFIG_DEFAULT_CODEL is not set CONFIG_DEFAULT_CUBIC=y -CONFIG_DEFAULT_DEADLINE=y # CONFIG_DEFAULT_FQ is not set CONFIG_DEFAULT_FQ_CODEL=y # CONFIG_DEFAULT_FQ_PIE is not set @@ -1493,15 +1340,12 @@ CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120 CONFIG_DEFAULT_INIT="" CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 CONFIG_DEFAULT_NET_SCH="fq_codel" -# CONFIG_DEFAULT_NOOP is not set # CONFIG_DEFAULT_PFIFO_FAST is not set # CONFIG_DEFAULT_RENO is not set -CONFIG_DEFAULT_SECURITY="" CONFIG_DEFAULT_SECURITY_DAC=y # CONFIG_DEFAULT_SECURITY_SELINUX is not set # CONFIG_DEFAULT_SFQ is not set CONFIG_DEFAULT_TCP_CONG="cubic" -CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" # CONFIG_DEFERRED_STRUCT_PAGE_INIT is not set # CONFIG_DELL_LAPTOP is not set # CONFIG_DELL_RBTN is not set @@ -1509,27 +1353,13 @@ CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" # CONFIG_DELL_SMO8800 is not set # CONFIG_DEPRECATED_PARAM_STRUCT is not set # CONFIG_DETECT_HUNG_TASK is not set -# CONFIG_DEVKMEM is not set # CONFIG_DEVMEM is not set CONFIG_DEVPORT=y -# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set # CONFIG_DEVTMPFS is not set # CONFIG_DEVTMPFS_MOUNT is not set # CONFIG_DEVTMPFS_SAFE is not set # CONFIG_DEV_DAX is not set -# CONFIG_DGAP is not set -# CONFIG_DGNC is not set # CONFIG_DHT11 is not set -# CONFIG_DISCONTIGMEM_MANUAL is not set -# CONFIG_DISPLAY_CONNECTOR_ANALOG_TV is not set -# CONFIG_DISPLAY_CONNECTOR_DVI is not set -# CONFIG_DISPLAY_CONNECTOR_HDMI is not set -# CONFIG_DISPLAY_ENCODER_TFP410 is not set -# CONFIG_DISPLAY_ENCODER_TPD12S015 is not set -# CONFIG_DISPLAY_PANEL_DPI is not set -# CONFIG_DISPLAY_PANEL_LGPHILIPS_LB035Q02 is not set -# CONFIG_DISPLAY_PANEL_TPO_TD028TTEC1 is not set -# CONFIG_DISPLAY_PANEL_TPO_TD043MTEA1 is not set # CONFIG_DL2K is not set # CONFIG_DLHL60D is not set # CONFIG_DLM is not set @@ -1546,7 +1376,6 @@ CONFIG_DEVPORT=y # CONFIG_DMARD06 is not set # CONFIG_DMARD09 is not set # CONFIG_DMARD10 is not set -# CONFIG_DMASCC is not set # CONFIG_DMATEST is not set # CONFIG_DMA_API_DEBUG is not set CONFIG_DMA_COHERENT_POOL=y @@ -1556,11 +1385,8 @@ CONFIG_DMA_DECLARE_COHERENT=y # CONFIG_DMA_JZ4780 is not set # CONFIG_DMA_MAP_BENCHMARK is not set CONFIG_DMA_NONCOHERENT_MMAP=y -# CONFIG_DMA_NOOP_OPS is not set -# CONFIG_DMA_PERNUMA_CMA is not set # CONFIG_DMA_RESTRICTED_POOL is not set # CONFIG_DMA_SHARED_BUFFER is not set -# CONFIG_DMA_VIRT_OPS is not set # CONFIG_DM_CACHE is not set # CONFIG_DM_CLONE is not set # CONFIG_DM_DEBUG is not set @@ -1572,7 +1398,6 @@ CONFIG_DMA_NONCOHERENT_MMAP=y # CONFIG_DM_INTEGRITY is not set # CONFIG_DM_LOG_USERSPACE is not set # CONFIG_DM_LOG_WRITES is not set -# CONFIG_DM_MQ_DEFAULT is not set # CONFIG_DM_MULTIPATH is not set # CONFIG_DM_RAID is not set # CONFIG_DM_SWITCH is not set @@ -1586,7 +1411,6 @@ CONFIG_DMA_NONCOHERENT_MMAP=y # CONFIG_DNET is not set # CONFIG_DNOTIFY is not set # CONFIG_DNS_RESOLVER is not set -CONFIG_DOUBLEFAULT=y # CONFIG_DP83640_PHY is not set # CONFIG_DP83822_PHY is not set # CONFIG_DP83848_PHY is not set @@ -1603,14 +1427,10 @@ CONFIG_DQL=y # CONFIG_DRM_ACCEL is not set # CONFIG_DRM_AMDGPU is not set # CONFIG_DRM_AMDGPU_CIK is not set -# CONFIG_DRM_AMDGPU_GART_DEBUGFS is not set # CONFIG_DRM_AMDGPU_SI is not set # CONFIG_DRM_AMDGPU_USERPTR is not set # CONFIG_DRM_AMDGPU_WERROR is not set # CONFIG_DRM_AMD_ACP is not set -# CONFIG_DRM_AMD_DC_DCN2_0 is not set -# CONFIG_DRM_AMD_DC_DCN3_0 is not set -# CONFIG_DRM_AMD_DC_HDCP is not set # CONFIG_DRM_AMD_DC_SI is not set # CONFIG_DRM_AMD_SECURE_DISPLAY is not set # CONFIG_DRM_ANALOGIX_ANX6345 is not set @@ -1629,11 +1449,9 @@ CONFIG_DQL=y # CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS is not set # CONFIG_DRM_DEBUG_MM is not set # CONFIG_DRM_DEBUG_MODESET_LOCK is not set -# CONFIG_DRM_DEBUG_SELFTEST is not set # CONFIG_DRM_DISPLAY_CONNECTOR is not set # CONFIG_DRM_DP_AUX_CHARDEV is not set # CONFIG_DRM_DP_CEC is not set -# CONFIG_DRM_DUMB_VGA_DAC is not set # CONFIG_DRM_DW_HDMI_CEC is not set # CONFIG_DRM_ETNAVIV is not set # CONFIG_DRM_EXYNOS is not set @@ -1667,7 +1485,6 @@ CONFIG_DQL=y # CONFIG_DRM_LONTIUM_LT9611UXC is not set # CONFIG_DRM_LOONGSON is not set # CONFIG_DRM_LVDS_CODEC is not set -# CONFIG_DRM_LVDS_ENCODER is not set # CONFIG_DRM_MALI_DISPLAY is not set # CONFIG_DRM_MCDE is not set # CONFIG_DRM_MEGACHIPS_STDPXXXX_GE_B850V3_FW is not set @@ -1693,7 +1510,6 @@ CONFIG_DQL=y # CONFIG_DRM_PANEL_HIMAX_HX8394 is not set # CONFIG_DRM_PANEL_ILITEK_IL9322 is not set # CONFIG_DRM_PANEL_ILITEK_ILI9341 is not set -# CONFIG_DRM_PANEL_ILITEK_ILI9806E is not set # CONFIG_DRM_PANEL_ILITEK_ILI9881C is not set # CONFIG_DRM_PANEL_INNOLUX_EJ030NA is not set # CONFIG_DRM_PANEL_INNOLUX_P079ZCA is not set @@ -1727,7 +1543,6 @@ CONFIG_DQL=y # CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN is not set # CONFIG_DRM_PANEL_RAYDIUM_RM67191 is not set # CONFIG_DRM_PANEL_RAYDIUM_RM68200 is not set -# CONFIG_DRM_PANEL_ROCKTECH_JH057N00900 is not set # CONFIG_DRM_PANEL_RONBO_RB070D30 is not set # CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set # CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set @@ -1750,7 +1565,6 @@ CONFIG_DQL=y # CONFIG_DRM_PANEL_SITRONIX_ST7701 is not set # CONFIG_DRM_PANEL_SITRONIX_ST7703 is not set # CONFIG_DRM_PANEL_SITRONIX_ST7789V is not set -# CONFIG_DRM_PANEL_SONY_ACX424AKP is not set # CONFIG_DRM_PANEL_SONY_ACX565AKM is not set # CONFIG_DRM_PANEL_SONY_TD4353_JDI is not set # CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521 is not set @@ -1759,12 +1573,10 @@ CONFIG_DQL=y # CONFIG_DRM_PANEL_TPO_TD028TTEC1 is not set # CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set # CONFIG_DRM_PANEL_TPO_TPG110 is not set -# CONFIG_DRM_PANEL_TPO_Y17P is not set # CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA is not set # CONFIG_DRM_PANEL_VISIONOX_R66451 is not set # CONFIG_DRM_PANEL_VISIONOX_RM69299 is not set # CONFIG_DRM_PANEL_VISIONOX_VTDR6130 is not set -# CONFIG_DRM_PANEL_WAVESHARE_TOUCHSCREEN is not set # CONFIG_DRM_PANEL_WIDECHIPS_WS2401 is not set # CONFIG_DRM_PANEL_XINPENG_XPP055C272 is not set # CONFIG_DRM_PANFROST is not set @@ -1779,9 +1591,6 @@ CONFIG_DQL=y # CONFIG_DRM_RCAR_USE_LVDS is not set # CONFIG_DRM_RCAR_USE_MIPI_DSI is not set # CONFIG_DRM_ROCKCHIP is not set -# CONFIG_DRM_RP1_DPI is not set -# CONFIG_DRM_RP1_DSI is not set -# CONFIG_DRM_RP1_VEC is not set # CONFIG_DRM_SAMSUNG_DSIM is not set # CONFIG_DRM_SII902X is not set # CONFIG_DRM_SII9234 is not set @@ -1795,7 +1604,6 @@ CONFIG_DQL=y # CONFIG_DRM_THINE_THC63LVD1024 is not set # CONFIG_DRM_TIDSS is not set # CONFIG_DRM_TILCDC is not set -# CONFIG_DRM_TINYDRM is not set # CONFIG_DRM_TI_DLPC3433 is not set # CONFIG_DRM_TI_SN65DSI83 is not set # CONFIG_DRM_TI_SN65DSI86 is not set @@ -2010,9 +1818,7 @@ CONFIG_EFI_PARTITION=y CONFIG_ELFCORE=y # CONFIG_ELF_CORE is not set # CONFIG_EMAC_ROCKCHIP is not set -CONFIG_EMBEDDED=y # CONFIG_EM_TIMER_STI is not set -CONFIG_ENABLE_WARN_DEPRECATED=y # CONFIG_ENA_ETHERNET is not set # CONFIG_ENC28J60 is not set # CONFIG_ENCLOSURE_SERVICES is not set @@ -2040,14 +1846,12 @@ CONFIG_EXPORTFS=y CONFIG_EXT2_FS_XATTR=y # CONFIG_EXT3_FS is not set # CONFIG_EXT4_DEBUG is not set -# CONFIG_EXT4_ENCRYPTION is not set # CONFIG_EXT4_FS is not set # CONFIG_EXT4_FS_POSIX_ACL is not set # CONFIG_EXT4_FS_SECURITY is not set CONFIG_EXT4_USE_FOR_EXT2=y # CONFIG_EXTCON is not set # CONFIG_EXTCON_ADC_JACK is not set -# CONFIG_EXTCON_ARIZONA is not set # CONFIG_EXTCON_AXP288 is not set # CONFIG_EXTCON_FSA9480 is not set # CONFIG_EXTCON_GPIO is not set @@ -2062,19 +1866,16 @@ CONFIG_EXT4_USE_FOR_EXT2=y CONFIG_EXTRA_FIRMWARE="" CONFIG_EXTRA_TARGETS="" # CONFIG_EXYNOS_ADC is not set -# CONFIG_EXYNOS_VIDEO is not set # CONFIG_EZCHIP_NPS_MANAGEMENT_ENET is not set # CONFIG_EZX_PCAP is not set # CONFIG_F2FS_CHECK_FS is not set # CONFIG_F2FS_FAULT_INJECTION is not set # CONFIG_F2FS_FS is not set # CONFIG_F2FS_FS_COMPRESSION is not set -# CONFIG_F2FS_FS_ENCRYPTION is not set # CONFIG_F2FS_FS_POSIX_ACL is not set # CONFIG_F2FS_FS_SECURITY is not set CONFIG_F2FS_FS_XATTR=y # CONFIG_F2FS_IOSTAT is not set -# CONFIG_F2FS_IO_TRACE is not set CONFIG_F2FS_STAT_FS=y # CONFIG_F2FS_UNFAIR_RWSEM is not set # CONFIG_FAILOVER is not set @@ -2095,10 +1896,8 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" # CONFIG_FB_ATMEL is not set # CONFIG_FB_ATY is not set # CONFIG_FB_ATY128 is not set -# CONFIG_FB_AUO_K190X is not set # CONFIG_FB_BACKLIGHT is not set # CONFIG_FB_BIG_ENDIAN is not set -# CONFIG_FB_BOOT_VESA_SUPPORT is not set # CONFIG_FB_BOTH_ENDIAN is not set # CONFIG_FB_BROADSHEET is not set # CONFIG_FB_CARMINE is not set @@ -2111,7 +1910,6 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" # CONFIG_FB_DA8XX is not set # CONFIG_FB_DDC is not set # CONFIG_FB_DEVICE is not set -# CONFIG_FB_FLEX is not set # CONFIG_FB_FOREIGN_ENDIAN is not set # CONFIG_FB_FSL_DIU is not set # CONFIG_FB_GEODE is not set @@ -2129,7 +1927,6 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" # CONFIG_FB_MB862XX is not set # CONFIG_FB_METRONOME is not set # CONFIG_FB_MODE_HELPERS is not set -# CONFIG_FB_MXS is not set # CONFIG_FB_N411 is not set # CONFIG_FB_NEOMAGIC is not set CONFIG_FB_NOTIFY=y @@ -2143,7 +1940,6 @@ CONFIG_FB_NOTIFY=y # CONFIG_FB_PXA is not set # CONFIG_FB_RADEON is not set # CONFIG_FB_RIVA is not set -# CONFIG_FB_RPISENSE is not set # CONFIG_FB_S1D13XXX is not set # CONFIG_FB_S3 is not set # CONFIG_FB_SAVAGE is not set @@ -2161,7 +1957,6 @@ CONFIG_FB_NOTIFY=y # CONFIG_FB_TFT is not set # CONFIG_FB_TFT_AGM1264K_FL is not set # CONFIG_FB_TFT_BD663474 is not set -# CONFIG_FB_TFT_FBTFT_DEVICE is not set # CONFIG_FB_TFT_HX8340BN is not set # CONFIG_FB_TFT_HX8347D is not set # CONFIG_FB_TFT_HX8353D is not set @@ -2182,7 +1977,6 @@ CONFIG_FB_NOTIFY=y # CONFIG_FB_TFT_SSD1289 is not set # CONFIG_FB_TFT_SSD1305 is not set # CONFIG_FB_TFT_SSD1306 is not set -# CONFIG_FB_TFT_SSD1325 is not set # CONFIG_FB_TFT_SSD1331 is not set # CONFIG_FB_TFT_SSD1351 is not set # CONFIG_FB_TFT_ST7735R is not set @@ -2192,9 +1986,7 @@ CONFIG_FB_NOTIFY=y # CONFIG_FB_TFT_UC1611 is not set # CONFIG_FB_TFT_UC1701 is not set # CONFIG_FB_TFT_UPD161704 is not set -# CONFIG_FB_TFT_WATTEROTT is not set # CONFIG_FB_TILEBLITTING is not set -# CONFIG_FB_TMIO is not set # CONFIG_FB_TRIDENT is not set # CONFIG_FB_UDL is not set # CONFIG_FB_UVESA is not set @@ -2203,12 +1995,10 @@ CONFIG_FB_NOTIFY=y # CONFIG_FB_VIRTUAL is not set # CONFIG_FB_VOODOO1 is not set # CONFIG_FB_VT8623 is not set -# CONFIG_FB_XGI is not set # CONFIG_FCOE is not set # CONFIG_FCOE_FNIC is not set # CONFIG_FDDI is not set # CONFIG_FEALNX is not set -# CONFIG_FENCE_TRACE is not set # CONFIG_FHANDLE is not set CONFIG_FIB_RULES=y # CONFIG_FIELDBUS_DEV is not set @@ -2216,16 +2006,12 @@ CONFIG_FILE_LOCKING=y # CONFIG_FIND_BIT_BENCHMARK is not set # CONFIG_FIREWIRE is not set # CONFIG_FIREWIRE_NOSY is not set -# CONFIG_FIREWIRE_SERIAL is not set # CONFIG_FIRMWARE_EDID is not set -# CONFIG_FIRMWARE_IN_KERNEL is not set # CONFIG_FIRMWARE_MEMMAP is not set # CONFIG_FIXED_PHY is not set CONFIG_FLATMEM=y CONFIG_FLATMEM_MANUAL=y -CONFIG_FLAT_NODE_MEM_MAP=y # CONFIG_FM10K is not set -# CONFIG_FMC is not set # CONFIG_FONTS is not set # CONFIG_FONT_6x8 is not set # CONFIG_FONT_TER16x32 is not set @@ -2239,7 +2025,6 @@ CONFIG_FORTIFY_SOURCE=y # CONFIG_FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION is not set # CONFIG_FRAME_POINTER is not set # CONFIG_FREEZER is not set -# CONFIG_FRONTSWAP is not set # CONFIG_FSCACHE is not set # CONFIG_FSI is not set # CONFIG_FSL_DPAA2_SWITCH is not set @@ -2299,7 +2084,6 @@ CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y CONFIG_GACT_PROB=y # CONFIG_GADGET_UAC1 is not set # CONFIG_GAMEPORT is not set -# CONFIG_GATEWORKS_GW16083 is not set # CONFIG_GCC_PLUGINS is not set # CONFIG_GCOV is not set # CONFIG_GCOV_KERNEL is not set @@ -2320,9 +2104,6 @@ CONFIG_GENERIC_VDSO_TIME_NS=y # CONFIG_GENEVE is not set # CONFIG_GENWQE is not set # CONFIG_GFS2_FS is not set -# CONFIG_GIGASET_CAPI is not set -# CONFIG_GIGASET_DEBUG is not set -# CONFIG_GIGASET_DUMMYLL is not set # CONFIG_GLOB_SELFTEST is not set # CONFIG_GNSS is not set # CONFIG_GOLDFISH is not set @@ -2342,7 +2123,6 @@ CONFIG_GPIOLIB_FASTPATH_LIMIT=512 # CONFIG_GPIO_74X164 is not set # CONFIG_GPIO_74XX_MMIO is not set # CONFIG_GPIO_ADNP is not set -# CONFIG_GPIO_ADP5588 is not set # CONFIG_GPIO_AGGREGATOR is not set # CONFIG_GPIO_ALTERA is not set # CONFIG_GPIO_AMD8111 is not set @@ -2373,7 +2153,6 @@ CONFIG_GPIOLIB_FASTPATH_LIMIT=512 # CONFIG_GPIO_IT87 is not set # CONFIG_GPIO_LATCH is not set # CONFIG_GPIO_LOGICVC is not set -# CONFIG_GPIO_LYNXPOINT is not set # CONFIG_GPIO_MAX3191X is not set # CONFIG_GPIO_MAX7300 is not set # CONFIG_GPIO_MAX7301 is not set @@ -2392,7 +2171,6 @@ CONFIG_GPIOLIB_FASTPATH_LIMIT=512 # CONFIG_GPIO_PCI_IDIO_16 is not set # CONFIG_GPIO_PISOSR is not set # CONFIG_GPIO_PL061 is not set -# CONFIG_GPIO_PWM is not set # CONFIG_GPIO_RCAR is not set # CONFIG_GPIO_RDC321X is not set # CONFIG_GPIO_SAMA5D2_PIOBU is not set @@ -2400,7 +2178,6 @@ CONFIG_GPIOLIB_FASTPATH_LIMIT=512 # CONFIG_GPIO_SCH311X is not set # CONFIG_GPIO_SIFIVE is not set # CONFIG_GPIO_SIM is not set -# CONFIG_GPIO_SX150X is not set # CONFIG_GPIO_SYSCON is not set CONFIG_GPIO_SYSFS=y # CONFIG_GPIO_TPIC2810 is not set @@ -2415,24 +2192,17 @@ CONFIG_GPIO_SYSFS=y # CONFIG_GPIO_XILINX is not set # CONFIG_GPIO_XRA1403 is not set # CONFIG_GPIO_ZEVIO is not set -# CONFIG_GPIO_ZX is not set # CONFIG_GP_PCI1XXXX is not set # CONFIG_GREENASIA_FF is not set # CONFIG_GREYBUS is not set -# CONFIG_GS_FPGABOOT is not set # CONFIG_GTP is not set -# CONFIG_GUP_BENCHMARK is not set # CONFIG_GUP_TEST is not set # CONFIG_GVE is not set -# CONFIG_HABANA_AI is not set # CONFIG_HAMACHI is not set # CONFIG_HAMRADIO is not set # CONFIG_HAPPYMEAL is not set CONFIG_HARDENED_USERCOPY=y -# CONFIG_HARDENED_USERCOPY_FALLBACK is not set -# CONFIG_HARDENED_USERCOPY_PAGESPAN is not set CONFIG_HARDEN_BRANCH_HISTORY=y -CONFIG_HARDEN_EL2_VECTORS=y # CONFIG_HARDLOCKUP_DETECTOR is not set # CONFIG_HAVE_ARM_ARCH_TIMER is not set # CONFIG_HCALL_STATS is not set @@ -2446,14 +2216,10 @@ CONFIG_HARDEN_EL2_VECTORS=y # CONFIG_HDLC_RAW_ETH is not set # CONFIG_HDMI_LPE_AUDIO is not set # CONFIG_HDQ_MASTER_OMAP is not set -# CONFIG_HEADERS_CHECK is not set # CONFIG_HEADERS_INSTALL is not set -# CONFIG_HEADER_TEST is not set # CONFIG_HERMES is not set # CONFIG_HFSPLUS_FS is not set -# CONFIG_HFSPLUS_FS_POSIX_ACL is not set # CONFIG_HFS_FS is not set -# CONFIG_HFS_FS_POSIX_ACL is not set # CONFIG_HI6421V600_IRQ is not set # CONFIG_HI8435 is not set # CONFIG_HIBERNATION is not set @@ -2600,19 +2366,15 @@ CONFIG_HIGH_RES_TIMERS=y # CONFIG_HOTPLUG_CPU is not set # CONFIG_HOTPLUG_PCI is not set # CONFIG_HP03 is not set -# CONFIG_HP100 is not set # CONFIG_HP206C is not set CONFIG_HPET_MMAP_DEFAULT=y # CONFIG_HPFS_FS is not set # CONFIG_HP_ILO is not set # CONFIG_HP_WATCHDOG is not set -# CONFIG_HP_WIRELESS is not set # CONFIG_HSA_AMD is not set # CONFIG_HSI is not set # CONFIG_HSR is not set # CONFIG_HTC_EGPIO is not set -# CONFIG_HTC_I2CPLD is not set -# CONFIG_HTC_PASIC3 is not set # CONFIG_HTE is not set # CONFIG_HTS221 is not set # CONFIG_HTU21 is not set @@ -2652,8 +2414,6 @@ CONFIG_HW_RANDOM_TPM=y # CONFIG_HW_RANDOM_XIPHERA is not set # CONFIG_HX711 is not set # CONFIG_HYPERV is not set -# CONFIG_HYPERV_TSCPAGE is not set -# CONFIG_HYSDN is not set CONFIG_HZ=100 CONFIG_HZ_100=y # CONFIG_HZ_1000 is not set @@ -2730,7 +2490,6 @@ CONFIG_HZ_100=y # CONFIG_I2C_OCORES is not set # CONFIG_I2C_OCTEON is not set # CONFIG_I2C_PARPORT is not set -# CONFIG_I2C_PARPORT_LIGHT is not set # CONFIG_I2C_PCA_ISA is not set # CONFIG_I2C_PCA_PLATFORM is not set # CONFIG_I2C_PCI1XXXX is not set @@ -2779,12 +2538,7 @@ CONFIG_HZ_100=y # CONFIG_ICP10100 is not set # CONFIG_ICPLUS_PHY is not set # CONFIG_ICS932S401 is not set -# CONFIG_ICST is not set -# CONFIG_IDE is not set # CONFIG_IDEAPAD_LAPTOP is not set -# CONFIG_IDE_GD is not set -# CONFIG_IDE_PROC_FS is not set -# CONFIG_IDE_TASK_IOCTL is not set # CONFIG_IDLE_PAGE_TRACKING is not set # CONFIG_IEEE802154 is not set # CONFIG_IEEE802154_ADF7242 is not set @@ -2801,7 +2555,6 @@ CONFIG_HZ_100=y # CONFIG_IIO_BUFFER_CB is not set # CONFIG_IIO_BUFFER_DMA is not set # CONFIG_IIO_BUFFER_DMAENGINE is not set -# CONFIG_IIO_BUFFER_HDC2010 is not set # CONFIG_IIO_BUFFER_HW_CONSUMER is not set # CONFIG_IIO_CONFIGFS is not set CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 @@ -2810,7 +2563,6 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 # CONFIG_IIO_KX022A_I2C is not set # CONFIG_IIO_KX022A_SPI is not set # CONFIG_IIO_MUX is not set -# CONFIG_IIO_PERIODIC_RTC_TRIGGER is not set # CONFIG_IIO_RESCALE is not set # CONFIG_IIO_SIMPLE_DUMMY is not set # CONFIG_IIO_SSP_SENSORHUB is not set @@ -2829,11 +2581,11 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 # CONFIG_IKCONFIG_PROC is not set # CONFIG_IKHEADERS is not set # CONFIG_IMA is not set -# CONFIG_IMAGE_CMDLINE_HACK is not set # CONFIG_IMGPDC_WDT is not set # CONFIG_IMG_MDC_DMA is not set # CONFIG_IMX7D_ADC is not set # CONFIG_IMX8QXP_ADC is not set +# CONFIG_IMX93_ADC is not set # CONFIG_IMX_IPUV3_CORE is not set # CONFIG_IMX_THERMAL is not set # CONFIG_INA2XX_ADC is not set @@ -2850,7 +2602,6 @@ CONFIG_INET=y # CONFIG_INET_ESP is not set # CONFIG_INET_ESPINTCP is not set # CONFIG_INET_IPCOMP is not set -# CONFIG_INET_LRO is not set CONFIG_INET_TABLE_PERTURB_ORDER=16 # CONFIG_INET_TCP_DIAG is not set # CONFIG_INET_TUNNEL is not set @@ -2899,11 +2650,9 @@ CONFIG_INOTIFY_USER=y # CONFIG_INPUT_EVBUG is not set # CONFIG_INPUT_EVDEV is not set # CONFIG_INPUT_FF_MEMLESS is not set -# CONFIG_INPUT_GP2A is not set # CONFIG_INPUT_GPIO_BEEPER is not set # CONFIG_INPUT_GPIO_DECODER is not set # CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set -# CONFIG_INPUT_GPIO_TILT_POLLED is not set # CONFIG_INPUT_GPIO_VIBRA is not set # CONFIG_INPUT_IBM_PANEL is not set # CONFIG_INPUT_IDEAPAD_SLIDEBAR is not set @@ -2923,18 +2672,14 @@ CONFIG_INPUT_MISC=y # CONFIG_INPUT_MMA8450 is not set # CONFIG_INPUT_MOUSE is not set # CONFIG_INPUT_MOUSEDEV is not set -# CONFIG_INPUT_MPU3050 is not set -# CONFIG_INPUT_MSM_VIBRATOR is not set # CONFIG_INPUT_PALMAS_PWRBUTTON is not set # CONFIG_INPUT_PCF8574 is not set # CONFIG_INPUT_PCSPKR is not set # CONFIG_INPUT_PM8941_PWRKEY is not set # CONFIG_INPUT_PM8XXX_VIBRATOR is not set -# CONFIG_INPUT_POLLDEV is not set # CONFIG_INPUT_POWERMATE is not set # CONFIG_INPUT_PWM_BEEPER is not set # CONFIG_INPUT_PWM_VIBRA is not set -# CONFIG_INPUT_RASPBERRYPI_BUTTON is not set # CONFIG_INPUT_REGULATOR_HAPTIC is not set # CONFIG_INPUT_SOC_BUTTON_ARRAY is not set # CONFIG_INPUT_SPARSEKMAP is not set @@ -2953,7 +2698,6 @@ CONFIG_INPUT_MISC=y # CONFIG_INTEGRITY_SIGNATURE is not set # CONFIG_INTEL_ATOMISP2_LED is not set # CONFIG_INTEL_ATOMISP2_PM is not set -# CONFIG_INTEL_CHT_INT33FE is not set # CONFIG_INTEL_HID_EVENT is not set # CONFIG_INTEL_IDLE is not set # CONFIG_INTEL_IDMA64 is not set @@ -2963,9 +2707,6 @@ CONFIG_INPUT_MISC=y # CONFIG_INTEL_MEI is not set # CONFIG_INTEL_MEI_ME is not set # CONFIG_INTEL_MEI_TXE is not set -# CONFIG_INTEL_MIC_CARD is not set -# CONFIG_INTEL_MIC_HOST is not set -# CONFIG_INTEL_MID_PTI is not set # CONFIG_INTEL_OAKTRAIL is not set # CONFIG_INTEL_PMC_CORE is not set # CONFIG_INTEL_PUNIT_IPC is not set @@ -3050,7 +2791,6 @@ CONFIG_IPW2200_MONITOR=y # CONFIG_IPW2200_QOS is not set # CONFIG_IPW2200_RADIOTAP is not set # CONFIG_IPWIRELESS is not set -# CONFIG_IPX is not set CONFIG_IP_ADVANCED_ROUTER=y # CONFIG_IP_DCCP is not set # CONFIG_IP_FIB_TRIE_STATS is not set @@ -3070,7 +2810,6 @@ CONFIG_IP_MULTIPLE_TABLES=y # CONFIG_IP_NF_MATCH_TTL is not set # CONFIG_IP_NF_RAW is not set # CONFIG_IP_NF_SECURITY is not set -# CONFIG_IP_NF_TARGET_CLUSTERIP is not set # CONFIG_IP_NF_TARGET_ECN is not set # CONFIG_IP_NF_TARGET_MASQUERADE is not set # CONFIG_IP_NF_TARGET_NETMAP is not set @@ -3090,10 +2829,8 @@ CONFIG_IP_ROUTE_VERBOSE=y # CONFIG_IP_VS_MH is not set CONFIG_IP_VS_MH_TAB_INDEX=10 # CONFIG_IP_VS_TWOS is not set -# CONFIG_IRDA is not set # CONFIG_IRQSOFF_TRACER is not set # CONFIG_IRQ_ALL_CPUS is not set -# CONFIG_IRQ_DOMAIN_DEBUG is not set # CONFIG_IRQ_POLL is not set # CONFIG_IRQ_TIME_ACCOUNTING is not set # CONFIG_IRSD200 is not set @@ -3105,14 +2842,12 @@ CONFIG_IP_VS_MH_TAB_INDEX=10 # CONFIG_IR_IMON is not set # CONFIG_IR_IMON_RAW is not set # CONFIG_IR_JVC_DECODER is not set -# CONFIG_IR_LIRC_CODEC is not set # CONFIG_IR_MCEUSB is not set # CONFIG_IR_NEC_DECODER is not set # CONFIG_IR_RC5_DECODER is not set # CONFIG_IR_RC6_DECODER is not set # CONFIG_IR_REDRAT3 is not set # CONFIG_IR_SERIAL is not set -# CONFIG_IR_SIR is not set # CONFIG_IR_SONY_DECODER is not set # CONFIG_IR_STREAMZAP is not set # CONFIG_IR_TOY is not set @@ -3122,18 +2857,7 @@ CONFIG_IP_VS_MH_TAB_INDEX=10 # CONFIG_ISCSI_BOOT_SYSFS is not set # CONFIG_ISCSI_TCP is not set CONFIG_ISDN=y -# CONFIG_ISDN_AUDIO is not set # CONFIG_ISDN_CAPI is not set -# CONFIG_ISDN_CAPI_CAPIDRV is not set -# CONFIG_ISDN_DIVERSION is not set -# CONFIG_ISDN_DRV_ACT2000 is not set -# CONFIG_ISDN_DRV_GIGASET is not set -# CONFIG_ISDN_DRV_HISAX is not set -# CONFIG_ISDN_DRV_ICN is not set -# CONFIG_ISDN_DRV_LOOP is not set -# CONFIG_ISDN_DRV_PCBIT is not set -# CONFIG_ISDN_DRV_SC is not set -# CONFIG_ISDN_I4L is not set # CONFIG_ISL29003 is not set # CONFIG_ISL29020 is not set # CONFIG_ISL29125 is not set @@ -3143,7 +2867,6 @@ CONFIG_ISDN=y # CONFIG_ITG3200 is not set # CONFIG_IWL3945 is not set # CONFIG_IWLWIFI is not set -# CONFIG_IXGB is not set # CONFIG_IXGBE is not set # CONFIG_IXGBEVF is not set # CONFIG_JAILHOUSE_GUEST is not set @@ -3176,7 +2899,6 @@ CONFIG_JOLIET=y # CONFIG_JSA1212 is not set # CONFIG_JUMP_LABEL is not set # CONFIG_JZ4740_WDT is not set -# CONFIG_JZ4770_PHY is not set # CONFIG_KALLSYMS is not set # CONFIG_KALLSYMS_ABSOLUTE_PERCPU is not set # CONFIG_KALLSYMS_ALL is not set @@ -3192,7 +2914,6 @@ CONFIG_KASAN_STACK=y CONFIG_KCOV_IRQ_AREA_SIZE=0x40000 # CONFIG_KCSAN is not set # CONFIG_KERNEL_BZIP2 is not set -# CONFIG_KERNEL_CAT is not set # CONFIG_KERNEL_GZIP is not set # CONFIG_KERNEL_LZ4 is not set # CONFIG_KERNEL_LZMA is not set @@ -3248,9 +2969,7 @@ CONFIG_KERNFS=y # CONFIG_KEY_DH_OPERATIONS is not set # CONFIG_KFENCE is not set # CONFIG_KGDB is not set -# CONFIG_KMEMCHECK is not set # CONFIG_KMX61 is not set -# CONFIG_KPC2000 is not set # CONFIG_KPROBES is not set # CONFIG_KPROBES_SANITY_TEST is not set # CONFIG_KPROBE_EVENTS_ON_NOTRACE is not set @@ -3277,25 +2996,20 @@ CONFIG_KUSER_HELPERS=y # CONFIG_L2TP_V3 is not set # CONFIG_LAN743X is not set # CONFIG_LAN966X_SWITCH is not set -# CONFIG_LANMEDIA is not set # CONFIG_LANTIQ is not set # CONFIG_LAPB is not set -# CONFIG_LASAT is not set # CONFIG_LATENCYTOP is not set # CONFIG_LATTICE_ECP3_CONFIG is not set -CONFIG_LBDAF=y # CONFIG_LCD_AMS369FG06 is not set # CONFIG_LCD_CLASS_DEVICE is not set # CONFIG_LCD_HX8357 is not set # CONFIG_LCD_ILI922X is not set # CONFIG_LCD_ILI9320 is not set # CONFIG_LCD_L4F00242T03 is not set -# CONFIG_LCD_LD9040 is not set # CONFIG_LCD_LMS283GF05 is not set # CONFIG_LCD_LMS501KF03 is not set # CONFIG_LCD_LTV350QV is not set # CONFIG_LCD_OTM3225A is not set -# CONFIG_LCD_S6E63M0 is not set # CONFIG_LCD_TDO24M is not set # CONFIG_LCD_VGG2432A4 is not set CONFIG_LDISC_AUTOLOAD=y @@ -3379,7 +3093,6 @@ CONFIG_LEDS_TRIGGER_TIMER=y # CONFIG_LED_TRIGGER_PHY is not set # CONFIG_LEGACY_PTYS is not set # CONFIG_LEGACY_TIOCSTI is not set -# CONFIG_LGUEST is not set # CONFIG_LIB80211 is not set # CONFIG_LIB80211_CRYPT_CCMP is not set # CONFIG_LIB80211_CRYPT_TKIP is not set @@ -3393,13 +3106,11 @@ CONFIG_LEDS_TRIGGER_TIMER=y # CONFIG_LIBFCOE is not set # CONFIG_LIBIPW_DEBUG is not set # CONFIG_LIBNVDIMM is not set -CONFIG_LIB_MEMNEQ=y # CONFIG_LIDAR_LITE_V2 is not set CONFIG_LINEAR_RANGES=y # CONFIG_LIQUIDIO is not set # CONFIG_LIQUIDIO_VF is not set # CONFIG_LIRC is not set -# CONFIG_LIS3L02DQ is not set # CONFIG_LIST_HARDENED is not set # CONFIG_LITEX_LITEETH is not set # CONFIG_LITEX_SOC_CONTROLLER is not set @@ -3409,7 +3120,6 @@ CONFIG_LLC=y # CONFIG_LLC2 is not set # CONFIG_LMK04832 is not set # CONFIG_LMP91000 is not set -# CONFIG_LNET is not set CONFIG_LOCALVERSION="" # CONFIG_LOCALVERSION_AUTO is not set # CONFIG_LOCKD is not set @@ -3425,7 +3135,6 @@ CONFIG_LOCKD_V4=y CONFIG_LOCK_MM_AND_FIND_VMA=y # CONFIG_LOCK_STAT is not set # CONFIG_LOCK_TORTURE_TEST is not set -# CONFIG_LOGFS is not set # CONFIG_LOGIG940_FF is not set # CONFIG_LOGIRUMBLEPAD2_FF is not set # CONFIG_LOGITECH_FF is not set @@ -3453,10 +3162,8 @@ CONFIG_LSM_MMAP_MIN_ADDR=65536 # CONFIG_LTC2983 is not set # CONFIG_LTE_GDM724X is not set CONFIG_LTO_NONE=y -# CONFIG_LTPC is not set # CONFIG_LTR501 is not set # CONFIG_LTRF216A is not set -# CONFIG_LUSTRE_FS is not set # CONFIG_LV0104CS is not set # CONFIG_LWTUNNEL is not set # CONFIG_LXT_PHY is not set @@ -3483,12 +3190,8 @@ CONFIG_MAC80211_STA_HASH_MAX_SIZE=0 # CONFIG_MACH_LOONGSON64 is not set # CONFIG_MACH_NINTENDO64 is not set # CONFIG_MACH_PIC32 is not set -# CONFIG_MACH_PISTACHIO is not set # CONFIG_MACH_REALTEK_RTL is not set -# CONFIG_MACH_TX39XX is not set # CONFIG_MACH_TX49XX is not set -# CONFIG_MACH_VR41XX is not set -# CONFIG_MACH_XILFPGA is not set # CONFIG_MACINTOSH_DRIVERS is not set # CONFIG_MACSEC is not set # CONFIG_MACVLAN is not set @@ -3502,7 +3205,6 @@ CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1 CONFIG_MAGIC_SYSRQ_SERIAL_SEQUENCE="" # CONFIG_MAILBOX is not set # CONFIG_MANAGER_SBS is not set -# CONFIG_MANDATORY_FILE_LOCKING is not set # CONFIG_MANGLE_BOOTARGS is not set # CONFIG_MARVELL_10G_PHY is not set # CONFIG_MARVELL_88Q2XXX_PHY is not set @@ -3534,7 +3236,6 @@ CONFIG_MAGIC_SYSRQ_SERIAL_SEQUENCE="" # CONFIG_MAXIM_THERMOCOUPLE is not set # CONFIG_MAXLINEAR_GPHY is not set CONFIG_MAX_SKB_FRAGS=17 -CONFIG_MAY_USE_DEVLINK=y # CONFIG_MB1232 is not set # CONFIG_MC3230 is not set # CONFIG_MCB is not set @@ -3565,7 +3266,6 @@ CONFIG_MAY_USE_DEVLINK=y # CONFIG_MDIO_MVUSB is not set # CONFIG_MDIO_OCTEON is not set # CONFIG_MDIO_THUNDER is not set -# CONFIG_MDIO_XPCS is not set # CONFIG_MDM_GCC_9607 is not set # CONFIG_MD_BITMAP_FILE is not set # CONFIG_MD_FAULTY is not set @@ -3582,7 +3282,6 @@ CONFIG_MAY_USE_DEVLINK=y # CONFIG_MEDIA_PLATFORM_DRIVERS is not set # CONFIG_MEDIA_PLATFORM_SUPPORT is not set # CONFIG_MEDIA_RADIO_SUPPORT is not set -# CONFIG_MEDIA_RC_SUPPORT is not set # CONFIG_MEDIA_SDR_SUPPORT is not set # CONFIG_MEDIA_SUBDRV_AUTOSELECT is not set # CONFIG_MEDIA_SUPPORT is not set @@ -3650,7 +3349,6 @@ CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 # CONFIG_MFD_ARIZONA_SPI is not set # CONFIG_MFD_AS3711 is not set # CONFIG_MFD_AS3722 is not set -# CONFIG_MFD_ASIC3 is not set # CONFIG_MFD_ATC260X_I2C is not set # CONFIG_MFD_ATMEL_FLEXCOM is not set # CONFIG_MFD_ATMEL_HLCDC is not set @@ -3660,7 +3358,6 @@ CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 # CONFIG_MFD_BD9571MWV is not set # CONFIG_MFD_CORE is not set # CONFIG_MFD_CPCAP is not set -# CONFIG_MFD_CROS_EC is not set # CONFIG_MFD_CS42L43_I2C is not set # CONFIG_MFD_CS5535 is not set # CONFIG_MFD_DA9052_I2C is not set @@ -3674,7 +3371,6 @@ CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 # CONFIG_MFD_GATEWORKS_GSC is not set # CONFIG_MFD_HI6421_PMIC is not set # CONFIG_MFD_INTEL_M10_BMC_SPI is not set -# CONFIG_MFD_INTEL_PMT is not set # CONFIG_MFD_INTEL_QUARK_I2C_GPIO is not set # CONFIG_MFD_IQS62X is not set # CONFIG_MFD_JANZ_CMODIO is not set @@ -3710,52 +3406,39 @@ CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 # CONFIG_MFD_OMAP_USB_HOST is not set # CONFIG_MFD_PALMAS is not set # CONFIG_MFD_PCF50633 is not set -# CONFIG_MFD_PM8921_CORE is not set # CONFIG_MFD_PM8XXX is not set # CONFIG_MFD_QCOM_PM8008 is not set -# CONFIG_MFD_RASPBERRYPI_POE_HAT is not set # CONFIG_MFD_RC5T583 is not set # CONFIG_MFD_RDC321X is not set # CONFIG_MFD_RETU is not set -# CONFIG_MFD_RK808 is not set # CONFIG_MFD_RK8XX_I2C is not set # CONFIG_MFD_RK8XX_SPI is not set # CONFIG_MFD_RN5T618 is not set -# CONFIG_MFD_ROHM_BD70528 is not set # CONFIG_MFD_ROHM_BD71828 is not set # CONFIG_MFD_ROHM_BD718XX is not set # CONFIG_MFD_ROHM_BD957XMUF is not set -# CONFIG_MFD_RP1 is not set -# CONFIG_MFD_RPISENSE_CORE is not set # CONFIG_MFD_RSMU_I2C is not set # CONFIG_MFD_RSMU_SPI is not set # CONFIG_MFD_RT4831 is not set # CONFIG_MFD_RT5033 is not set # CONFIG_MFD_RT5120 is not set -# CONFIG_MFD_RTSX_PCI is not set -# CONFIG_MFD_RTSX_USB is not set # CONFIG_MFD_SEC_CORE is not set # CONFIG_MFD_SI476X_CORE is not set # CONFIG_MFD_SKY81452 is not set # CONFIG_MFD_SL28CPLD is not set # CONFIG_MFD_SM501 is not set # CONFIG_MFD_SMPRO is not set -# CONFIG_MFD_SMSC is not set # CONFIG_MFD_STMFX is not set # CONFIG_MFD_STMPE is not set # CONFIG_MFD_STPMIC1 is not set # CONFIG_MFD_SY7636A is not set # CONFIG_MFD_SYSCON is not set -# CONFIG_MFD_T7L66XB is not set # CONFIG_MFD_TC3589X is not set -# CONFIG_MFD_TC6387XB is not set -# CONFIG_MFD_TC6393XB is not set # CONFIG_MFD_TIMBERDALE is not set # CONFIG_MFD_TI_AM335X_TSCADC is not set # CONFIG_MFD_TI_LMU is not set # CONFIG_MFD_TI_LP873X is not set # CONFIG_MFD_TI_LP87565 is not set -# CONFIG_MFD_TMIO is not set # CONFIG_MFD_TPS65086 is not set # CONFIG_MFD_TPS65090 is not set # CONFIG_MFD_TPS65217 is not set @@ -3768,8 +3451,6 @@ CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 # CONFIG_MFD_TPS65912_SPI is not set # CONFIG_MFD_TPS6594_I2C is not set # CONFIG_MFD_TPS6594_SPI is not set -# CONFIG_MFD_TPS68470 is not set -# CONFIG_MFD_TPS80031 is not set # CONFIG_MFD_TQMX86 is not set # CONFIG_MFD_VIPERBOARD is not set # CONFIG_MFD_VX855 is not set @@ -3780,7 +3461,6 @@ CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 # CONFIG_MFD_WM8350_I2C is not set # CONFIG_MFD_WM8400 is not set # CONFIG_MFD_WM8994 is not set -# CONFIG_MG_DISK is not set # CONFIG_MHI_BUS is not set # CONFIG_MHI_BUS_DEBUG is not set # CONFIG_MHI_BUS_EP is not set @@ -3790,7 +3470,6 @@ CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 # CONFIG_MHI_WWAN_MBIM is not set # CONFIG_MICREL_KS8995MA is not set # CONFIG_MICREL_PHY is not set -# CONFIG_MICROCHIP_KSZ is not set # CONFIG_MICROCHIP_PHY is not set # CONFIG_MICROCHIP_PIT64B is not set # CONFIG_MICROCHIP_T1S_PHY is not set @@ -3809,20 +3488,16 @@ CONFIG_MII=y # CONFIG_MIPS_CDMM is not set # CONFIG_MIPS_CMDLINE_DTB_EXTEND is not set # CONFIG_MIPS_CMDLINE_FROM_DTB is not set -# CONFIG_MIPS_CMP is not set # CONFIG_MIPS_COBALT is not set # CONFIG_MIPS_CPS is not set # CONFIG_MIPS_ELF_APPENDED_DTB is not set -# CONFIG_MIPS_FPU_EMULATOR is not set # CONFIG_MIPS_FP_SUPPORT is not set # CONFIG_MIPS_GENERIC is not set # CONFIG_MIPS_GENERIC_KERNEL is not set # CONFIG_MIPS_MALTA is not set # CONFIG_MIPS_O32_FP64_SUPPORT is not set -# CONFIG_MIPS_PARAVIRT is not set # CONFIG_MIPS_PLATFORM_DEVICES is not set # CONFIG_MIPS_RAW_APPENDED_DTB is not set -# CONFIG_MIPS_SEAD3 is not set # CONFIG_MIPS_VA_BITS_48 is not set # CONFIG_MIPS_VPE_LOADER is not set # CONFIG_MISC_ALCOR_PCI is not set @@ -3842,7 +3517,6 @@ CONFIG_MITIGATE_SPECTRE_BRANCH_HISTORY=y # CONFIG_MLX4_CORE is not set # CONFIG_MLX4_EN is not set # CONFIG_MLX5_CORE is not set -# CONFIG_MLX5_EN_MACSEC is not set # CONFIG_MLX5_MACSEC is not set # CONFIG_MLX5_SF is not set # CONFIG_MLX5_VFIO_PCI is not set @@ -3850,7 +3524,6 @@ CONFIG_MITIGATE_SPECTRE_BRANCH_HISTORY=y # CONFIG_MLX90632 is not set # CONFIG_MLXFW is not set # CONFIG_MLXSW_CORE is not set -# CONFIG_MLX_CPLD_PLATFORM is not set # CONFIG_MLX_PLATFORM is not set # CONFIG_MMA7455_I2C is not set # CONFIG_MMA7455_SPI is not set @@ -3863,7 +3536,6 @@ CONFIG_MITIGATE_SPECTRE_BRANCH_HISTORY=y # CONFIG_MMC_ARMMMCI is not set # CONFIG_MMC_AU1X is not set # CONFIG_MMC_BLOCK is not set -CONFIG_MMC_BLOCK_BOUNCE=y CONFIG_MMC_BLOCK_MINORS=8 # CONFIG_MMC_CAVIUM_THUNDERX is not set # CONFIG_MMC_CB710 is not set @@ -3874,7 +3546,6 @@ CONFIG_MMC_BLOCK_MINORS=8 # CONFIG_MMC_JZ4740 is not set # CONFIG_MMC_MTK is not set # CONFIG_MMC_MVSDIO is not set -# CONFIG_MMC_S3C is not set # CONFIG_MMC_SDHCI is not set # CONFIG_MMC_SDHCI_ACPI is not set # CONFIG_MMC_SDHCI_AM654 is not set @@ -3913,7 +3584,6 @@ CONFIG_MMU_GATHER_TABLE_FREE=y CONFIG_MODPROBE_PATH="/sbin/modprobe" CONFIG_MODULES=y # CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS is not set -# CONFIG_MODULE_COMPRESS is not set # CONFIG_MODULE_COMPRESS_GZIP is not set CONFIG_MODULE_COMPRESS_NONE=y # CONFIG_MODULE_COMPRESS_XZ is not set @@ -3989,15 +3659,12 @@ CONFIG_MTD_COMPLEX_MAPPINGS=y # CONFIG_MTD_DATAFLASH is not set # CONFIG_MTD_DOCG3 is not set CONFIG_MTD_GEN_PROBE=y -# CONFIG_MTD_GPIO_ADDR is not set # CONFIG_MTD_HYPERBUS is not set # CONFIG_MTD_IMPA7 is not set # CONFIG_MTD_INTEL_VR_NOR is not set # CONFIG_MTD_JEDECPROBE is not set -# CONFIG_MTD_LATCH_ADDR is not set # CONFIG_MTD_LPDDR is not set # CONFIG_MTD_LPDDR2_NVM is not set -# CONFIG_MTD_M25P80 is not set CONFIG_MTD_MAP_BANK_WIDTH_1=y # CONFIG_MTD_MAP_BANK_WIDTH_16 is not set CONFIG_MTD_MAP_BANK_WIDTH_2=y @@ -4006,18 +3673,12 @@ CONFIG_MTD_MAP_BANK_WIDTH_4=y # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set # CONFIG_MTD_MCHP23K256 is not set # CONFIG_MTD_MCHP48L640 is not set -# CONFIG_MTD_MT81xx_NOR is not set # CONFIG_MTD_MTDRAM is not set # CONFIG_MTD_MYLOADER_PARTS is not set -# CONFIG_MTD_NAND is not set # CONFIG_MTD_NAND_AMS_DELTA is not set -# CONFIG_MTD_NAND_AR934X is not set -# CONFIG_MTD_NAND_AR934X_HW_ECC is not set # CONFIG_MTD_NAND_ARASAN is not set # CONFIG_MTD_NAND_ATMEL is not set # CONFIG_MTD_NAND_AU1550 is not set -# CONFIG_MTD_NAND_BCH is not set -# CONFIG_MTD_NAND_BF5XX is not set # CONFIG_MTD_NAND_BRCMNAND is not set # CONFIG_MTD_NAND_BRCMNAND_BCM63XX is not set # CONFIG_MTD_NAND_BRCMNAND_BCMBCA is not set @@ -4025,19 +3686,14 @@ CONFIG_MTD_MAP_BANK_WIDTH_4=y # CONFIG_MTD_NAND_BRCMNAND_IPROC is not set # CONFIG_MTD_NAND_CADENCE is not set # CONFIG_MTD_NAND_CAFE is not set -# CONFIG_MTD_NAND_CM_X270 is not set # CONFIG_MTD_NAND_CS553X is not set # CONFIG_MTD_NAND_DAVINCI is not set # CONFIG_MTD_NAND_DENALI is not set # CONFIG_MTD_NAND_DENALI_DT is not set # CONFIG_MTD_NAND_DENALI_PCI is not set -CONFIG_MTD_NAND_DENALI_SCRATCH_REG_ADDR=0xff108018 # CONFIG_MTD_NAND_DISKONCHIP is not set -# CONFIG_MTD_NAND_DOCG4 is not set # CONFIG_MTD_NAND_ECC is not set -# CONFIG_MTD_NAND_ECC_BCH is not set # CONFIG_MTD_NAND_ECC_MXIC is not set -# CONFIG_MTD_NAND_ECC_SMC is not set # CONFIG_MTD_NAND_ECC_SW_BCH is not set # CONFIG_MTD_NAND_ECC_SW_HAMMING is not set # CONFIG_MTD_NAND_ECC_SW_HAMMING_SMC is not set @@ -4048,9 +3704,7 @@ CONFIG_MTD_NAND_DENALI_SCRATCH_REG_ADDR=0xff108018 # CONFIG_MTD_NAND_GPIO is not set # CONFIG_MTD_NAND_GPMI_NAND is not set # CONFIG_MTD_NAND_HISI504 is not set -CONFIG_MTD_NAND_IDS=y # CONFIG_MTD_NAND_INTEL_LGM is not set -# CONFIG_MTD_NAND_JZ4740 is not set # CONFIG_MTD_NAND_MPC5121_NFC is not set # CONFIG_MTD_NAND_MTK is not set # CONFIG_MTD_NAND_MTK_BMT is not set @@ -4058,22 +3712,16 @@ CONFIG_MTD_NAND_IDS=y # CONFIG_MTD_NAND_MXIC is not set # CONFIG_MTD_NAND_NANDSIM is not set # CONFIG_MTD_NAND_NDFC is not set -# CONFIG_MTD_NAND_NUC900 is not set # CONFIG_MTD_NAND_OMAP2 is not set # CONFIG_MTD_NAND_OMAP_BCH_BUILD is not set # CONFIG_MTD_NAND_ORION is not set # CONFIG_MTD_NAND_PASEMI is not set # CONFIG_MTD_NAND_PLATFORM is not set -# CONFIG_MTD_NAND_PXA3xx is not set -# CONFIG_MTD_NAND_RB4XX is not set -# CONFIG_MTD_NAND_RB750 is not set -# CONFIG_MTD_NAND_RB91X is not set # CONFIG_MTD_NAND_RICOH is not set # CONFIG_MTD_NAND_S3C2410 is not set # CONFIG_MTD_NAND_SHARPSL is not set # CONFIG_MTD_NAND_SH_FLCTL is not set # CONFIG_MTD_NAND_SOCRATES is not set -# CONFIG_MTD_NAND_TMIO is not set # CONFIG_MTD_NAND_TXX9NDFMC is not set CONFIG_MTD_OF_PARTS=y # CONFIG_MTD_ONENAND is not set @@ -4090,8 +3738,6 @@ CONFIG_MTD_OF_PARTS=y # CONFIG_MTD_PHYSMAP_GPIO_ADDR is not set # CONFIG_MTD_PHYSMAP_IXP4XX is not set CONFIG_MTD_PHYSMAP_OF=y -# CONFIG_MTD_PHYSMAP_OF_GEMINI is not set -# CONFIG_MTD_PHYSMAP_OF_VERSATILE is not set # CONFIG_MTD_PHYSMAP_VERSATILE is not set # CONFIG_MTD_PLATRAM is not set # CONFIG_MTD_PMC551 is not set @@ -4107,7 +3753,6 @@ CONFIG_MTD_ROOTFS_ROOT_DEV=y # CONFIG_MTD_SERCOMM_PARTS is not set # CONFIG_MTD_SLRAM is not set # CONFIG_MTD_SM_COMMON is not set -# CONFIG_MTD_SPINAND_MT29F is not set # CONFIG_MTD_SPI_NAND is not set # CONFIG_MTD_SPI_NOR is not set # CONFIG_MTD_SPI_NOR_SWP_DISABLE is not set @@ -4143,10 +3788,8 @@ CONFIG_MTD_SPLIT_SUPPORT=y # CONFIG_MTD_UBI_FASTMAP is not set # CONFIG_MTD_UBI_GLUEBI is not set # CONFIG_MTD_UBI_NVMEM is not set -# CONFIG_MTD_UIMAGE_SPLIT is not set # CONFIG_MTD_VIRT_CONCAT is not set # CONFIG_MTK_DEVAPC is not set -# CONFIG_MTK_MMC is not set # CONFIG_MTK_MMSYS is not set # CONFIG_MTK_T7XX is not set # CONFIG_MTK_THERMAL is not set @@ -4160,7 +3803,6 @@ CONFIG_MULTIUSER=y # CONFIG_MV643XX_ETH is not set # CONFIG_MVMDIO is not set # CONFIG_MVNETA_BM is not set -# CONFIG_MVSW61XX_PHY is not set # CONFIG_MV_XOR_V2 is not set # CONFIG_MWAVE is not set # CONFIG_MWL8K is not set @@ -4173,10 +3815,8 @@ CONFIG_MULTIUSER=y # CONFIG_NAU7802 is not set # CONFIG_NBPFAXI_DMA is not set # CONFIG_NCN26000_PHY is not set -# CONFIG_NCP_FS is not set # CONFIG_NE2000 is not set # CONFIG_NE2K_PCI is not set -# CONFIG_NEC_MARKEINS is not set CONFIG_NET=y # CONFIG_NETCONSOLE is not set # CONFIG_NETCONSOLE_EXTENDED_LOG is not set @@ -4184,7 +3824,6 @@ CONFIG_NETDEVICES=y # CONFIG_NETDEVSIM is not set # CONFIG_NETFILTER is not set # CONFIG_NETFILTER_ADVANCED is not set -# CONFIG_NETFILTER_DEBUG is not set # CONFIG_NETFILTER_EGRESS is not set # CONFIG_NETFILTER_INGRESS is not set # CONFIG_NETFILTER_NETLINK is not set @@ -4270,7 +3909,6 @@ CONFIG_NETDEVICES=y # CONFIG_NETFS_STATS is not set # CONFIG_NETLABEL is not set # CONFIG_NETLINK_DIAG is not set -# CONFIG_NETLINK_MMAP is not set # CONFIG_NETPOLL is not set # CONFIG_NETROM is not set CONFIG_NETWORK_FILESYSTEMS=y @@ -4296,7 +3934,6 @@ CONFIG_NETWORK_FILESYSTEMS=y # CONFIG_NET_ACT_SKBMOD is not set # CONFIG_NET_ACT_TUNNEL_KEY is not set # CONFIG_NET_ACT_VLAN is not set -CONFIG_NET_CADENCE=y # CONFIG_NET_CALXEDA_XGMAC is not set CONFIG_NET_CLS=y # CONFIG_NET_CLS_ACT is not set @@ -4305,11 +3942,8 @@ CONFIG_NET_CLS=y # CONFIG_NET_CLS_FLOW is not set # CONFIG_NET_CLS_FLOWER is not set # CONFIG_NET_CLS_FW is not set -CONFIG_NET_CLS_IND=y # CONFIG_NET_CLS_MATCHALL is not set # CONFIG_NET_CLS_ROUTE4 is not set -# CONFIG_NET_CLS_RSVP is not set -# CONFIG_NET_CLS_RSVP6 is not set # CONFIG_NET_CLS_U32 is not set CONFIG_NET_CORE=y # CONFIG_NET_DEVLINK is not set @@ -4319,22 +3953,14 @@ CONFIG_NET_CORE=y # CONFIG_NET_DSA_AR9331 is not set # CONFIG_NET_DSA_BCM_SF2 is not set # CONFIG_NET_DSA_LANTIQ_GSWIP is not set -# CONFIG_NET_DSA_LEGACY is not set # CONFIG_NET_DSA_LOOP is not set -# CONFIG_NET_DSA_MICROCHIP_KSZ8795 is not set -# CONFIG_NET_DSA_MICROCHIP_KSZ9477 is not set # CONFIG_NET_DSA_MICROCHIP_KSZ_COMMON is not set # CONFIG_NET_DSA_MSCC_FELIX is not set # CONFIG_NET_DSA_MSCC_OCELOT_EXT is not set # CONFIG_NET_DSA_MSCC_SEVILLE is not set # CONFIG_NET_DSA_MT7530 is not set # CONFIG_NET_DSA_MV88E6060 is not set -# CONFIG_NET_DSA_MV88E6123_61_65 is not set -# CONFIG_NET_DSA_MV88E6131 is not set -# CONFIG_NET_DSA_MV88E6171 is not set -# CONFIG_NET_DSA_MV88E6352 is not set # CONFIG_NET_DSA_MV88E6XXX is not set -# CONFIG_NET_DSA_MV88E6XXX_NEED_PPU is not set # CONFIG_NET_DSA_MV88E6XXX_PTP is not set # CONFIG_NET_DSA_QCA8K is not set # CONFIG_NET_DSA_QCA8K_LEDS_SUPPORT is not set @@ -4343,7 +3969,6 @@ CONFIG_NET_CORE=y # CONFIG_NET_DSA_SJA1105 is not set # CONFIG_NET_DSA_SMSC_LAN9303_I2C is not set # CONFIG_NET_DSA_SMSC_LAN9303_MDIO is not set -# CONFIG_NET_DSA_TAG_8021Q is not set # CONFIG_NET_DSA_TAG_AR9331 is not set # CONFIG_NET_DSA_TAG_BRCM is not set # CONFIG_NET_DSA_TAG_BRCM_LEGACY is not set @@ -4398,7 +4023,6 @@ CONFIG_NET_IPGRE_BROADCAST=y # CONFIG_NET_NCSI is not set # CONFIG_NET_NSH is not set # CONFIG_NET_NS_REFCNT_TRACKER is not set -# CONFIG_NET_PACKET_ENGINE is not set # CONFIG_NET_PKTGEN is not set # CONFIG_NET_POLL_CONTROLLER is not set # CONFIG_NET_PTP_CLASSIFY is not set @@ -4436,11 +4060,9 @@ CONFIG_NET_SCH_FQ_CODEL=y # CONFIG_NET_SCH_TAPRIO is not set # CONFIG_NET_SCH_TBF is not set # CONFIG_NET_SCH_TEQL is not set -# CONFIG_NET_SCTPPROBE is not set # CONFIG_NET_SELFTESTS is not set CONFIG_NET_SOCK_MSG=y # CONFIG_NET_SWITCHDEV is not set -# CONFIG_NET_TCPPROBE is not set # CONFIG_NET_TC_SKB_EXT is not set # CONFIG_NET_TEAM is not set # CONFIG_NET_TULIP is not set @@ -4458,7 +4080,6 @@ CONFIG_NET_VENDOR_AQUANTIA=y CONFIG_NET_VENDOR_ARC=y # CONFIG_NET_VENDOR_ASIX is not set CONFIG_NET_VENDOR_ATHEROS=y -CONFIG_NET_VENDOR_AURORA=y CONFIG_NET_VENDOR_BROADCOM=y CONFIG_NET_VENDOR_BROCADE=y CONFIG_NET_VENDOR_CADENCE=y @@ -4472,7 +4093,6 @@ CONFIG_NET_VENDOR_DEC=y CONFIG_NET_VENDOR_DLINK=y CONFIG_NET_VENDOR_EMULEX=y # CONFIG_NET_VENDOR_ENGLEDER is not set -CONFIG_NET_VENDOR_EXAR=y CONFIG_NET_VENDOR_EZCHIP=y CONFIG_NET_VENDOR_FARADAY=y CONFIG_NET_VENDOR_FREESCALE=y @@ -4480,7 +4100,6 @@ CONFIG_NET_VENDOR_FUJITSU=y # CONFIG_NET_VENDOR_FUNGIBLE is not set CONFIG_NET_VENDOR_GOOGLE=y CONFIG_NET_VENDOR_HISILICON=y -CONFIG_NET_VENDOR_HP=y CONFIG_NET_VENDOR_HUAWEI=y CONFIG_NET_VENDOR_I825XX=y CONFIG_NET_VENDOR_IBM=y @@ -4534,7 +4153,6 @@ CONFIG_NEW_LEDS=y # CONFIG_NFSD is not set # CONFIG_NFSD_V2 is not set # CONFIG_NFSD_V2_ACL is not set -CONFIG_NFSD_V3=y # CONFIG_NFSD_V3_ACL is not set # CONFIG_NFSD_V4 is not set # CONFIG_NFS_ACL_SUPPORT is not set @@ -4558,11 +4176,8 @@ CONFIG_NFS_V3=y # CONFIG_NFT_FIB_IPV6 is not set # CONFIG_NFT_FIB_NETDEV is not set # CONFIG_NFT_FLOW_OFFLOAD is not set -# CONFIG_NFT_OBJREF is not set # CONFIG_NFT_OSF is not set # CONFIG_NFT_REJECT_NETDEV is not set -# CONFIG_NFT_RT is not set -# CONFIG_NFT_SET_BITMAP is not set # CONFIG_NFT_SOCKET is not set # CONFIG_NFT_SYNPROXY is not set # CONFIG_NFT_TPROXY is not set @@ -4580,7 +4195,6 @@ CONFIG_NFS_V3=y # CONFIG_NF_CONNTRACK_NETBIOS_NS is not set # CONFIG_NF_CONNTRACK_PPTP is not set CONFIG_NF_CONNTRACK_PROCFS=y -# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set # CONFIG_NF_CONNTRACK_SANE is not set # CONFIG_NF_CONNTRACK_SECMARK is not set # CONFIG_NF_CONNTRACK_SIP is not set @@ -4602,18 +4216,14 @@ CONFIG_NF_CONNTRACK_PROCFS=y # CONFIG_NF_FLOW_TABLE is not set # CONFIG_NF_FLOW_TABLE_PROCFS is not set # CONFIG_NF_LOG_ARP is not set -# CONFIG_NF_LOG_BRIDGE is not set # CONFIG_NF_LOG_IPV4 is not set -# CONFIG_NF_LOG_NETDEV is not set # CONFIG_NF_LOG_SYSLOG is not set # CONFIG_NF_NAT is not set # CONFIG_NF_NAT_AMANDA is not set # CONFIG_NF_NAT_FTP is not set # CONFIG_NF_NAT_H323 is not set # CONFIG_NF_NAT_IRC is not set -# CONFIG_NF_NAT_NEEDED is not set # CONFIG_NF_NAT_PPTP is not set -# CONFIG_NF_NAT_PROTO_GRE is not set # CONFIG_NF_NAT_SIP is not set # CONFIG_NF_NAT_SNMP_BASIC is not set # CONFIG_NF_NAT_TFTP is not set @@ -4628,11 +4238,9 @@ CONFIG_NF_TABLES_INET=y CONFIG_NF_TABLES_IPV4=y CONFIG_NF_TABLES_IPV6=y CONFIG_NF_TABLES_NETDEV=y -# CONFIG_NF_TABLES_SET is not set # CONFIG_NF_TPROXY_IPV4 is not set # CONFIG_NF_TPROXY_IPV6 is not set # CONFIG_NGBE is not set -# CONFIG_NI65 is not set # CONFIG_NI903X_WDT is not set # CONFIG_NIC7018_WDT is not set # CONFIG_NILFS2_FS is not set @@ -4640,8 +4248,6 @@ CONFIG_NF_TABLES_NETDEV=y # CONFIG_NI_XGE_MANAGEMENT_ENET is not set CONFIG_NLATTR=y # CONFIG_NLMON is not set -# CONFIG_NLM_XLP_BOARD is not set -# CONFIG_NLM_XLR_BOARD is not set # CONFIG_NLS is not set # CONFIG_NLS_ASCII is not set # CONFIG_NLS_CODEPAGE_1250 is not set @@ -4694,14 +4300,11 @@ CONFIG_NLS_DEFAULT="iso8859-1" # CONFIG_NLS_MAC_TURKISH is not set # CONFIG_NLS_UCS2_UTILS is not set # CONFIG_NLS_UTF8 is not set -CONFIG_NMI_LOG_BUF_SHIFT=13 # CONFIG_NOA1305 is not set # CONFIG_NOP_USB_XCEIV is not set # CONFIG_NORTEL_HERMES is not set # CONFIG_NOTIFIER_ERROR_INJECTION is not set -# CONFIG_NOUVEAU_LEGACY_CTX_SUPPORT is not set # CONFIG_NOZOMI is not set -# CONFIG_NO_BOOTMEM is not set # CONFIG_NO_HZ is not set # CONFIG_NO_HZ_FULL is not set # CONFIG_NO_HZ_IDLE is not set @@ -4718,9 +4321,9 @@ CONFIG_NMI_LOG_BUF_SHIFT=13 # CONFIG_NULL_TTY is not set # CONFIG_NUMA is not set # CONFIG_NVIDIA_CARMEL_CNP_ERRATUM is not set -# CONFIG_NVM is not set # CONFIG_NVMEM is not set # CONFIG_NVMEM_BCM_OCOTP is not set +# CONFIG_NVMEM_BLOCK is not set # CONFIG_NVMEM_IMX_OCOTP is not set # CONFIG_NVMEM_LAYOUT_ONIE_TLV is not set # CONFIG_NVMEM_LAYOUT_SL28_VPD is not set @@ -4737,8 +4340,6 @@ CONFIG_NMI_LOG_BUF_SHIFT=13 # CONFIG_NV_TCO is not set # CONFIG_NXP_C45_TJA11XX_PHY is not set # CONFIG_NXP_CBTX_PHY is not set -# CONFIG_NXP_STB220 is not set -# CONFIG_NXP_STB225 is not set # CONFIG_NXP_TJA11XX_PHY is not set # CONFIG_N_GSM is not set # CONFIG_OABI_COMPAT is not set @@ -4759,11 +4360,8 @@ CONFIG_OF_RESERVED_MEM=y # CONFIG_OMFS_FS is not set # CONFIG_OPENVSWITCH is not set # CONFIG_OPEN_DICE is not set -# CONFIG_OPROFILE is not set -# CONFIG_OPROFILE_EVENT_MULTIPLEX is not set # CONFIG_OPT3001 is not set # CONFIG_OPT4001 is not set -CONFIG_OPTIMIZE_INLINING=y # CONFIG_ORANGEFS_FS is not set # CONFIG_ORION_WATCHDOG is not set # CONFIG_OSF_PARTITION is not set @@ -4775,7 +4373,6 @@ CONFIG_OVERLAY_FS=y CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y # CONFIG_OVERLAY_FS_REDIRECT_DIR is not set CONFIG_OVERLAY_FS_XINO_AUTO=y -# CONFIG_OWL_LOADER is not set # CONFIG_P54_COMMON is not set # CONFIG_PA12203001 is not set CONFIG_PACKET=y @@ -4804,7 +4401,6 @@ CONFIG_PANIC_TIMEOUT=1 # CONFIG_PARAVIRT_TIME_ACCOUNTING is not set # CONFIG_PARPORT is not set # CONFIG_PARPORT_1284 is not set -# CONFIG_PARPORT_AX88796 is not set # CONFIG_PARPORT_GSC is not set # CONFIG_PARPORT_PC is not set CONFIG_PARTITION_ADVANCED=y @@ -4883,7 +4479,6 @@ CONFIG_PCIE_BUS_DEFAULT=y # CONFIG_PCIE_BUS_PERFORMANCE is not set # CONFIG_PCIE_BUS_SAFE is not set # CONFIG_PCIE_BUS_TUNE_OFF is not set -# CONFIG_PCIE_BW is not set # CONFIG_PCIE_CADENCE_HOST is not set # CONFIG_PCIE_CADENCE_PLAT_HOST is not set # CONFIG_PCIE_DPC is not set @@ -4954,7 +4549,6 @@ CONFIG_PCI_SYSCALL=y # CONFIG_PCS_MTK_USXGMII is not set # CONFIG_PCS_XPCS is not set # CONFIG_PD6729 is not set -# CONFIG_PDA_POWER is not set # CONFIG_PDC_ADMA is not set # CONFIG_PDS_CORE is not set # CONFIG_PECI is not set @@ -4970,7 +4564,6 @@ CONFIG_PCI_SYSCALL=y # CONFIG_PHYLIB_LEDS is not set # CONFIG_PHYS_ADDR_T_64BIT is not set # CONFIG_PHY_BRCM_USB is not set -# CONFIG_PHY_CADENCE_DP is not set # CONFIG_PHY_CADENCE_DPHY is not set # CONFIG_PHY_CADENCE_DPHY_RX is not set # CONFIG_PHY_CADENCE_SALVO is not set @@ -4994,7 +4587,6 @@ CONFIG_PCI_SYSCALL=y # CONFIG_PHY_PISTACHIO_USB is not set # CONFIG_PHY_PXA_28NM_HSIC is not set # CONFIG_PHY_PXA_28NM_USB2 is not set -# CONFIG_PHY_QCOM_DWC3 is not set # CONFIG_PHY_QCOM_USB_HS is not set # CONFIG_PHY_QCOM_USB_HSIC is not set # CONFIG_PHY_SAMSUNG_USB2 is not set @@ -5007,11 +4599,9 @@ CONFIG_PINCONF=y # CONFIG_PINCTRL is not set # CONFIG_PINCTRL_AMD is not set # CONFIG_PINCTRL_AXP209 is not set -# CONFIG_PINCTRL_BCM2712 is not set # CONFIG_PINCTRL_CEDARFORK is not set # CONFIG_PINCTRL_CY8C95X0 is not set # CONFIG_PINCTRL_EXYNOS is not set -# CONFIG_PINCTRL_EXYNOS5440 is not set # CONFIG_PINCTRL_ICELAKE is not set # CONFIG_PINCTRL_INGENIC is not set # CONFIG_PINCTRL_LPASS_LPI is not set @@ -5028,7 +4618,6 @@ CONFIG_PINCONF=y # CONFIG_PINCTRL_MTK_V2 is not set # CONFIG_PINCTRL_OCELOT is not set # CONFIG_PINCTRL_PISTACHIO is not set -# CONFIG_PINCTRL_RP1 is not set # CONFIG_PINCTRL_SC7280 is not set # CONFIG_PINCTRL_SC8180X is not set # CONFIG_PINCTRL_SDX55 is not set @@ -5054,7 +4643,6 @@ CONFIG_PINMUX=y # CONFIG_PLX_HERMES is not set # CONFIG_PM is not set # CONFIG_PMBUS is not set -# CONFIG_PMC_MSP is not set # CONFIG_PMIC_ADP5520 is not set # CONFIG_PMIC_DA903X is not set # CONFIG_PMS7003 is not set @@ -5066,7 +4654,6 @@ CONFIG_PINMUX=y # CONFIG_POSIX_MQUEUE is not set CONFIG_POSIX_TIMERS=y # CONFIG_POWERCAP is not set -# CONFIG_POWER_AVS is not set # CONFIG_POWER_RESET is not set # CONFIG_POWER_RESET_BRCMKONA is not set # CONFIG_POWER_RESET_BRCMSTB is not set @@ -5118,7 +4705,6 @@ CONFIG_PPP_MULTILINK=y # CONFIG_PPTP is not set # CONFIG_PREEMPT is not set # CONFIG_PREEMPTIRQ_DELAY_TEST is not set -# CONFIG_PREEMPTIRQ_EVENTS is not set # CONFIG_PREEMPT_DYNAMIC is not set CONFIG_PREEMPT_NONE=y # CONFIG_PREEMPT_TRACER is not set @@ -5129,12 +4715,9 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y CONFIG_PRINTK=y # CONFIG_PRINTK_CALLER is not set # CONFIG_PRINTK_INDEX is not set -CONFIG_PRINTK_NMI=y -CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT=13 # CONFIG_PRINTK_TIME is not set CONFIG_PRINT_STACK_DEPTH=64 # CONFIG_PRISM2_USB is not set -# CONFIG_PRISM54 is not set # CONFIG_PROC_CHILDREN is not set CONFIG_PROC_FS=y # CONFIG_PROC_KCORE is not set @@ -5149,26 +4732,18 @@ CONFIG_PROC_SYSCTL=y # CONFIG_PROVE_RAW_LOCK_NESTING is not set # CONFIG_PROVE_RCU is not set # CONFIG_PROVE_RCU_LIST is not set -# CONFIG_PROVE_RCU_REPEATEDLY is not set # CONFIG_PSAMPLE is not set # CONFIG_PSB6970_PHY is not set # CONFIG_PSE_CONTROLLER is not set # CONFIG_PSI is not set # CONFIG_PSTORE is not set -# CONFIG_PSTORE_842_COMPRESS is not set # CONFIG_PSTORE_BLK is not set # CONFIG_PSTORE_COMPRESS is not set # CONFIG_PSTORE_CONSOLE is not set CONFIG_PSTORE_DEFAULT_KMSG_BYTES=10240 -# CONFIG_PSTORE_DEFLATE_COMPRESS is not set -# CONFIG_PSTORE_DEFLATE_COMPRESS_DEFAULT is not set # CONFIG_PSTORE_FTRACE is not set -# CONFIG_PSTORE_LZ4HC_COMPRESS is not set -# CONFIG_PSTORE_LZ4_COMPRESS is not set -# CONFIG_PSTORE_LZO_COMPRESS is not set # CONFIG_PSTORE_PMSG is not set # CONFIG_PSTORE_RAM is not set -# CONFIG_PSTORE_ZSTD_COMPRESS is not set # CONFIG_PTDUMP_DEBUGFS is not set # CONFIG_PTP_1588_CLOCK is not set # CONFIG_PTP_1588_CLOCK_IDT82P33 is not set @@ -5179,7 +4754,6 @@ CONFIG_PSTORE_DEFAULT_KMSG_BYTES=10240 # CONFIG_PTP_1588_CLOCK_OCP is not set # CONFIG_PTP_1588_CLOCK_PCH is not set # CONFIG_PTP_1588_CLOCK_VMW is not set -# CONFIG_PUBLIC_KEY_ALGO_RSA is not set # CONFIG_PVPANIC is not set # CONFIG_PWM is not set # CONFIG_PWM_ATMEL_TCB is not set @@ -5192,7 +4766,6 @@ CONFIG_PSTORE_DEFAULT_KMSG_BYTES=10240 # CONFIG_PWM_MEDIATEK is not set # CONFIG_PWM_PCA9685 is not set # CONFIG_PWM_RASPBERRYPI_POE is not set -# CONFIG_PWM_RP1 is not set # CONFIG_PWM_XILINX is not set CONFIG_PWRSEQ_EMMC=y # CONFIG_PWRSEQ_SD8787 is not set @@ -5233,18 +4806,15 @@ CONFIG_PWRSEQ_SIMPLE=y # CONFIG_QRTR_MHI is not set # CONFIG_QRTR_TUN is not set # CONFIG_QSEMI_PHY is not set -# CONFIG_QUEUED_LOCK_STAT is not set # CONFIG_QUICC_ENGINE is not set # CONFIG_QUOTA is not set # CONFIG_QUOTACTL is not set # CONFIG_QUOTA_DEBUG is not set # CONFIG_QUOTA_NETLINK_INTERFACE is not set -# CONFIG_R3964 is not set # CONFIG_R6040 is not set # CONFIG_R8169 is not set -# CONFIG_R8188EU is not set +# CONFIG_R8169_LEDS is not set # CONFIG_R8712U is not set -# CONFIG_R8723AU is not set # CONFIG_RADIO_ADAPTERS is not set # CONFIG_RADIO_AZTECH is not set # CONFIG_RADIO_CADET is not set @@ -5266,29 +4836,22 @@ CONFIG_PWRSEQ_SIMPLE=y CONFIG_RANDOMIZE_KSTACK_OFFSET=y # CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT is not set # CONFIG_RANDOM_KMALLOC_CACHES is not set -CONFIG_RANDOM_TRUST_BOOTLOADER=y -CONFIG_RANDOM_TRUST_CPU=y # CONFIG_RANDSTRUCT_NONE is not set # CONFIG_RAPIDIO is not set # CONFIG_RAS is not set -# CONFIG_RASPBERRYPI_GPIOMEM is not set # CONFIG_RBTREE_TEST is not set # CONFIG_RCU_BOOST is not set # CONFIG_RCU_CPU_STALL_CPUTIME is not set CONFIG_RCU_CPU_STALL_TIMEOUT=60 # CONFIG_RCU_EQS_DEBUG is not set -# CONFIG_RCU_EXPEDITE_BOOT is not set # CONFIG_RCU_EXPERT is not set CONFIG_RCU_EXP_CPU_STALL_TIMEOUT=0 -CONFIG_RCU_KTHREAD_PRIO=0 CONFIG_RCU_NEED_SEGCBLIST=y -# CONFIG_RCU_PERF_TEST is not set # CONFIG_RCU_REF_SCALE_TEST is not set # CONFIG_RCU_SCALE_TEST is not set CONFIG_RCU_STALL_COMMON=y # CONFIG_RCU_STRICT_GRACE_PERIOD is not set # CONFIG_RCU_TORTURE_TEST is not set -CONFIG_RCU_TORTURE_TEST_SLOW_INIT_DELAY=3 # CONFIG_RCU_TRACE is not set # CONFIG_RC_ATI_REMOTE is not set # CONFIG_RC_CORE is not set @@ -5367,7 +4930,6 @@ CONFIG_RCU_TORTURE_TEST_SLOW_INIT_DELAY=3 # CONFIG_REGULATOR_QCOM_REFGEN is not set # CONFIG_REGULATOR_RAA215300 is not set # CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_ATTINY is not set -# CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_V2 is not set # CONFIG_REGULATOR_RT4801 is not set # CONFIG_REGULATOR_RT4803 is not set # CONFIG_REGULATOR_RT5190A is not set @@ -5419,7 +4981,6 @@ CONFIG_REISERFS_FS_XATTR=y # CONFIG_RESET_PISTACHIO is not set # CONFIG_RESET_SIMPLE is not set # CONFIG_RESET_SOCFPGA is not set -# CONFIG_RESET_STM32 is not set # CONFIG_RESET_SUNXI is not set # CONFIG_RESET_TEGRA_BPMP is not set # CONFIG_RESET_TI_SYSCON is not set @@ -5432,7 +4993,6 @@ CONFIG_RFKILL=y # CONFIG_RFKILL_GPIO is not set # CONFIG_RFKILL_INPUT is not set # CONFIG_RFKILL_LEDS is not set -# CONFIG_RFKILL_REGULATOR is not set # CONFIG_RICHTEK_RTQ6056 is not set # CONFIG_RING_BUFFER_BENCHMARK is not set # CONFIG_RING_BUFFER_STARTUP_TEST is not set @@ -5475,7 +5035,6 @@ CONFIG_RTC_DRV_CMOS=y # CONFIG_RTC_DRV_DS1305 is not set # CONFIG_RTC_DRV_DS1307 is not set # CONFIG_RTC_DRV_DS1307_CENTURY is not set -# CONFIG_RTC_DRV_DS1307_HWMON is not set # CONFIG_RTC_DRV_DS1343 is not set # CONFIG_RTC_DRV_DS1347 is not set # CONFIG_RTC_DRV_DS1374 is not set @@ -5487,7 +5046,6 @@ CONFIG_RTC_DRV_CMOS=y # CONFIG_RTC_DRV_DS1742 is not set # CONFIG_RTC_DRV_DS2404 is not set # CONFIG_RTC_DRV_DS3232 is not set -# CONFIG_RTC_DRV_DS3234 is not set # CONFIG_RTC_DRV_EM3027 is not set # CONFIG_RTC_DRV_EP93XX is not set # CONFIG_RTC_DRV_FM3130 is not set @@ -5498,7 +5056,6 @@ CONFIG_RTC_DRV_CMOS=y # CONFIG_RTC_DRV_HYM8563 is not set # CONFIG_RTC_DRV_ISL12022 is not set # CONFIG_RTC_DRV_ISL12026 is not set -# CONFIG_RTC_DRV_ISL12057 is not set # CONFIG_RTC_DRV_ISL1208 is not set # CONFIG_RTC_DRV_JZ4740 is not set # CONFIG_RTC_DRV_M41T80 is not set @@ -5528,13 +5085,11 @@ CONFIG_RTC_DRV_CMOS=y # CONFIG_RTC_DRV_PL030 is not set # CONFIG_RTC_DRV_PL031 is not set # CONFIG_RTC_DRV_PS3 is not set -# CONFIG_RTC_DRV_PT7C4338 is not set # CONFIG_RTC_DRV_R7301 is not set # CONFIG_RTC_DRV_R9701 is not set # CONFIG_RTC_DRV_RP5C01 is not set # CONFIG_RTC_DRV_RS5C348 is not set # CONFIG_RTC_DRV_RS5C372 is not set -# CONFIG_RTC_DRV_RTC7301 is not set # CONFIG_RTC_DRV_RV3028 is not set # CONFIG_RTC_DRV_RV3029C2 is not set # CONFIG_RTC_DRV_RV3032 is not set @@ -5551,7 +5106,6 @@ CONFIG_RTC_DRV_CMOS=y # CONFIG_RTC_DRV_SUN6I is not set # CONFIG_RTC_DRV_TEGRA is not set # CONFIG_RTC_DRV_TEST is not set -# CONFIG_RTC_DRV_V3020 is not set # CONFIG_RTC_DRV_X1205 is not set # CONFIG_RTC_DRV_XGENE is not set # CONFIG_RTC_DRV_ZYNQMP is not set @@ -5580,10 +5134,8 @@ CONFIG_RTC_SYSTOHC_DEVICE="rtc0" # CONFIG_RTL_CARDS is not set # CONFIG_RTS5208 is not set CONFIG_RT_MUTEXES=y -# CONFIG_RUNTIME_DEBUG is not set CONFIG_RUNTIME_TESTING_MENU=y # CONFIG_RV is not set -CONFIG_RWSEM_GENERIC_SPINLOCK=y CONFIG_RXKAD=y # CONFIG_RXPERF is not set # CONFIG_S2IO is not set @@ -5633,11 +5185,9 @@ CONFIG_SCHED_OMIT_FRAME_POINTER=y # CONFIG_SCHED_SMT is not set CONFIG_SCHED_STACK_END_CHECK=y # CONFIG_SCHED_TRACER is not set -# CONFIG_SCR24X is not set # CONFIG_SCSI is not set # CONFIG_SCSI_3W_9XXX is not set # CONFIG_SCSI_3W_SAS is not set -# CONFIG_SCSI_7000FASST is not set # CONFIG_SCSI_AACRAID is not set # CONFIG_SCSI_ACARD is not set # CONFIG_SCSI_ADVANSYS is not set @@ -5661,20 +5211,13 @@ CONFIG_SCHED_STACK_END_CHECK=y # CONFIG_SCSI_DH is not set CONFIG_SCSI_DMA=y # CONFIG_SCSI_DMX3191D is not set -# CONFIG_SCSI_DPT_I2O is not set -# CONFIG_SCSI_DTC3280 is not set -# CONFIG_SCSI_EATA is not set # CONFIG_SCSI_ESAS2R is not set # CONFIG_SCSI_FC_ATTRS is not set # CONFIG_SCSI_FDOMAIN_PCI is not set -# CONFIG_SCSI_FUTURE_DOMAIN is not set -# CONFIG_SCSI_GDTH is not set # CONFIG_SCSI_GENERIC_NCR5380 is not set -# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set # CONFIG_SCSI_HISI_SAS is not set # CONFIG_SCSI_HPSA is not set # CONFIG_SCSI_HPTIOP is not set -# CONFIG_SCSI_IN2000 is not set # CONFIG_SCSI_INIA100 is not set # CONFIG_SCSI_INITIO is not set # CONFIG_SCSI_IPR is not set @@ -5689,17 +5232,13 @@ CONFIG_SCSI_MOD=y # CONFIG_SCSI_MPI3MR is not set # CONFIG_SCSI_MPT2SAS is not set # CONFIG_SCSI_MPT3SAS is not set -# CONFIG_SCSI_MQ_DEFAULT is not set # CONFIG_SCSI_MVSAS is not set # CONFIG_SCSI_MVSAS_DEBUG is not set # CONFIG_SCSI_MVUMI is not set # CONFIG_SCSI_MYRB is not set # CONFIG_SCSI_MYRS is not set -# CONFIG_SCSI_NCR53C406A is not set # CONFIG_SCSI_NETLINK is not set # CONFIG_SCSI_NSP32 is not set -# CONFIG_SCSI_OSD_INITIATOR is not set -# CONFIG_SCSI_PAS16 is not set # CONFIG_SCSI_PM8001 is not set # CONFIG_SCSI_PMCRAID is not set CONFIG_SCSI_PROC_FS=y @@ -5715,12 +5254,8 @@ CONFIG_SCSI_PROC_FS=y # CONFIG_SCSI_SPI_ATTRS is not set # CONFIG_SCSI_SRP_ATTRS is not set # CONFIG_SCSI_STEX is not set -# CONFIG_SCSI_SYM53C416 is not set # CONFIG_SCSI_SYM53C8XX_2 is not set -# CONFIG_SCSI_T128 is not set -# CONFIG_SCSI_U14_34F is not set # CONFIG_SCSI_UFSHCD is not set -# CONFIG_SCSI_ULTRASTOR is not set # CONFIG_SCSI_VIRTIO is not set # CONFIG_SCSI_WD719X is not set # CONFIG_SC_CAMCC_7180 is not set @@ -5754,10 +5289,8 @@ CONFIG_SECURITY_DMESG_RESTRICT=y # CONFIG_SECURITY_SAFESETID is not set # CONFIG_SECURITY_SELINUX_AVC_STATS is not set # CONFIG_SECURITY_SELINUX_BOOTPARAM is not set -CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=0 # CONFIG_SECURITY_SELINUX_DEBUG is not set # CONFIG_SECURITY_SELINUX_DEVELOP is not set -# CONFIG_SECURITY_SELINUX_DISABLE is not set # CONFIG_SECURITY_SMACK is not set # CONFIG_SECURITY_TOMOYO is not set # CONFIG_SECURITY_YAMA is not set @@ -5783,7 +5316,6 @@ CONFIG_SELECT_MEMORY_MODEL=y # CONFIG_SENSORS_ADM1266 is not set # CONFIG_SENSORS_ADM1275 is not set # CONFIG_SENSORS_ADM9240 is not set -# CONFIG_SENSORS_ADS1015 is not set # CONFIG_SENSORS_ADS7828 is not set # CONFIG_SENSORS_ADS7871 is not set # CONFIG_SENSORS_ADT7310 is not set @@ -5806,7 +5338,6 @@ CONFIG_SELECT_MEMORY_MODEL=y # CONFIG_SENSORS_AXI_FAN_CONTROL is not set # CONFIG_SENSORS_BEL_PFE is not set # CONFIG_SENSORS_BH1770 is not set -# CONFIG_SENSORS_BH1780 is not set # CONFIG_SENSORS_BPA_RS600 is not set # CONFIG_SENSORS_CORETEMP is not set # CONFIG_SENSORS_CORSAIR_CPRO is not set @@ -5841,7 +5372,6 @@ CONFIG_SELECT_MEMORY_MODEL=y # CONFIG_SENSORS_HMC5843_I2C is not set # CONFIG_SENSORS_HMC5843_SPI is not set # CONFIG_SENSORS_HS3001 is not set -# CONFIG_SENSORS_HTU21 is not set # CONFIG_SENSORS_I5500 is not set # CONFIG_SENSORS_I5K_AMB is not set # CONFIG_SENSORS_IBM_CFFPS is not set @@ -5953,7 +5483,6 @@ CONFIG_SELECT_MEMORY_MODEL=y # CONFIG_SENSORS_Q54SJ108A2 is not set # CONFIG_SENSORS_RM3100_I2C is not set # CONFIG_SENSORS_RM3100_SPI is not set -# CONFIG_SENSORS_RP1_ADC is not set # CONFIG_SENSORS_SBRMI is not set # CONFIG_SENSORS_SBTSI is not set # CONFIG_SENSORS_SCH5627 is not set @@ -5965,7 +5494,6 @@ CONFIG_SELECT_MEMORY_MODEL=y # CONFIG_SENSORS_SHT4x is not set # CONFIG_SENSORS_SHTC1 is not set # CONFIG_SENSORS_SIS5595 is not set -# CONFIG_SENSORS_SMM665 is not set # CONFIG_SENSORS_SMSC47B397 is not set # CONFIG_SENSORS_SMSC47M1 is not set # CONFIG_SENSORS_SMSC47M192 is not set @@ -6031,7 +5559,6 @@ CONFIG_SERIAL_8250_DMA=y # CONFIG_SERIAL_8250_LPSS is not set # CONFIG_SERIAL_8250_MANY_PORTS is not set # CONFIG_SERIAL_8250_MID is not set -# CONFIG_SERIAL_8250_MOXA is not set CONFIG_SERIAL_8250_NR_UARTS=2 # CONFIG_SERIAL_8250_PCI is not set # CONFIG_SERIAL_8250_PCI1XXXX is not set @@ -6054,13 +5581,11 @@ CONFIG_SERIAL_EARLYCON=y # CONFIG_SERIAL_FSL_LINFLEXUART is not set # CONFIG_SERIAL_FSL_LPUART is not set # CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set -# CONFIG_SERIAL_IFX6X60 is not set # CONFIG_SERIAL_JSM is not set # CONFIG_SERIAL_MAX3100 is not set # CONFIG_SERIAL_MAX310X is not set # CONFIG_SERIAL_NONSTANDARD is not set # CONFIG_SERIAL_OF_PLATFORM is not set -# CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL is not set # CONFIG_SERIAL_PCH_UART is not set # CONFIG_SERIAL_RP2 is not set # CONFIG_SERIAL_SC16IS7XX is not set @@ -6091,11 +5616,9 @@ CONFIG_SERIAL_EARLYCON=y # CONFIG_SFC is not set # CONFIG_SFC_FALCON is not set # CONFIG_SFC_SIENA is not set -# CONFIG_SFI is not set # CONFIG_SFP is not set # CONFIG_SF_PDMA is not set # CONFIG_SGETMASK_SYSCALL is not set -# CONFIG_SGI_IOC4 is not set # CONFIG_SGI_IP22 is not set # CONFIG_SGI_IP27 is not set # CONFIG_SGI_IP28 is not set @@ -6107,7 +5630,6 @@ CONFIG_SERIAL_EARLYCON=y # CONFIG_SG_SPLIT is not set # CONFIG_SHADOW_CALL_STACK is not set CONFIG_SHMEM=y -# CONFIG_SHORTCUT_FE is not set # CONFIG_SHRINKER_DEBUG is not set # CONFIG_SHUFFLE_PAGE_ALLOCATOR is not set # CONFIG_SH_ETH is not set @@ -6119,8 +5641,6 @@ CONFIG_SHMEM=y # CONFIG_SI7005 is not set # CONFIG_SI7020 is not set # CONFIG_SIBYTE_BIGSUR is not set -# CONFIG_SIBYTE_CARMEL is not set -# CONFIG_SIBYTE_CRHINE is not set # CONFIG_SIBYTE_CRHONE is not set # CONFIG_SIBYTE_LITTLESUR is not set # CONFIG_SIBYTE_RHONE is not set @@ -6128,15 +5648,12 @@ CONFIG_SHMEM=y # CONFIG_SIBYTE_SWARM is not set CONFIG_SIGNALFD=y # CONFIG_SIGNED_PE_FILE_VERIFICATION is not set -# CONFIG_SIMPLE_GPIO is not set -# CONFIG_SIMPLE_PM_BUS is not set # CONFIG_SIOX is not set # CONFIG_SIS190 is not set # CONFIG_SIS900 is not set # CONFIG_SKGE is not set # CONFIG_SKY2 is not set # CONFIG_SKY2_DEBUG is not set -CONFIG_SLABINFO=y # CONFIG_SLAB_DEPRECATED is not set CONFIG_SLAB_FREELIST_HARDENED=y CONFIG_SLAB_FREELIST_RANDOM=y @@ -6145,17 +5662,14 @@ CONFIG_SLAB_MERGE_DEFAULT=y # CONFIG_SLICOSS is not set # CONFIG_SLIMBUS is not set # CONFIG_SLIP is not set -# CONFIG_SLOB is not set CONFIG_SLUB=y CONFIG_SLUB_CPU_PARTIAL=y # CONFIG_SLUB_DEBUG is not set # CONFIG_SLUB_DEBUG_ON is not set -# CONFIG_SLUB_MEMCG_SYSFS_ON is not set # CONFIG_SLUB_STATS is not set # CONFIG_SLUB_TINY is not set # CONFIG_SMARTJOYPLUS_FF is not set # CONFIG_SMB_SERVER is not set -# CONFIG_SMC911X is not set # CONFIG_SMC9194 is not set # CONFIG_SMC91X is not set # CONFIG_SMP is not set @@ -6194,7 +5708,6 @@ CONFIG_SLUB_CPU_PARTIAL=y # CONFIG_SND_AU8830 is not set # CONFIG_SND_AUDIO_GRAPH_CARD is not set # CONFIG_SND_AUDIO_GRAPH_CARD2 is not set -# CONFIG_SND_AUDIO_GRAPH_SCU_CARD is not set # CONFIG_SND_AW2 is not set # CONFIG_SND_AZT2320 is not set # CONFIG_SND_AZT3328 is not set @@ -6222,7 +5735,6 @@ CONFIG_SND_DRIVERS=y # CONFIG_SND_DUMMY is not set # CONFIG_SND_DYNAMIC_MINORS is not set # CONFIG_SND_ECHO3G is not set -# CONFIG_SND_EDMA_SOC is not set # CONFIG_SND_EMU10K1 is not set # CONFIG_SND_EMU10K1X is not set # CONFIG_SND_EMU10K1_SEQ is not set @@ -6241,7 +5753,6 @@ CONFIG_SND_DRIVERS=y # CONFIG_SND_GUSMAX is not set # CONFIG_SND_HDA_CODEC_CS8409 is not set # CONFIG_SND_HDA_INTEL is not set -# CONFIG_SND_HDA_INTEL_DETECT_DMIC is not set # CONFIG_SND_HDA_INTEL_HDMI_SILENT_STREAM is not set CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0 CONFIG_SND_HDA_PREALLOC_SIZE=64 @@ -6306,12 +5817,10 @@ CONFIG_SND_PCM_OSS_PLUGINS=y # CONFIG_SND_PPC is not set CONFIG_SND_PROC_FS=y # CONFIG_SND_RAWMIDI is not set -# CONFIG_SND_RAWMIDI_SEQ is not set # CONFIG_SND_RIPTIDE is not set # CONFIG_SND_RME32 is not set # CONFIG_SND_RME96 is not set # CONFIG_SND_RME9652 is not set -# CONFIG_SND_RTCTIMER is not set # CONFIG_SND_SB16 is not set # CONFIG_SND_SB8 is not set # CONFIG_SND_SBAWE is not set @@ -6322,7 +5831,6 @@ CONFIG_SND_PROC_FS=y # CONFIG_SND_SERIAL_GENERIC is not set # CONFIG_SND_SERIAL_U16550 is not set # CONFIG_SND_SIMPLE_CARD is not set -# CONFIG_SND_SIMPLE_SCU_CARD is not set # CONFIG_SND_SIS7019 is not set # CONFIG_SND_SOC is not set # CONFIG_SND_SOC_AC97_CODEC is not set @@ -6391,7 +5899,6 @@ CONFIG_SND_PROC_FS=y # CONFIG_SND_SOC_CS53L30 is not set # CONFIG_SND_SOC_CX2072X is not set # CONFIG_SND_SOC_DA7213 is not set -# CONFIG_SND_SOC_DIO2125 is not set # CONFIG_SND_SOC_DMIC is not set # CONFIG_SND_SOC_ES7134 is not set # CONFIG_SND_SOC_ES7241 is not set @@ -6424,10 +5931,8 @@ CONFIG_SND_PROC_FS=y # CONFIG_SND_SOC_IMX_HDMI is not set # CONFIG_SND_SOC_IMX_RPMSG is not set # CONFIG_SND_SOC_IMX_SPDIF is not set -# CONFIG_SND_SOC_IMX_WM8962 is not set # CONFIG_SND_SOC_INNO_RK3036 is not set # CONFIG_SND_SOC_INTEL_APL is not set -# CONFIG_SND_SOC_INTEL_BAYTRAIL is not set # CONFIG_SND_SOC_INTEL_BDW_RT5677_MACH is not set # CONFIG_SND_SOC_INTEL_BXT_DA7219_MAX98357A_MACH is not set # CONFIG_SND_SOC_INTEL_BXT_RT298_MACH is not set @@ -6436,8 +5941,6 @@ CONFIG_SND_PROC_FS=y # CONFIG_SND_SOC_INTEL_BYT_CHT_DA7213_MACH is not set # CONFIG_SND_SOC_INTEL_BYT_CHT_ES8316_MACH is not set # CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH is not set -# CONFIG_SND_SOC_INTEL_BYT_MAX98090_MACH is not set -# CONFIG_SND_SOC_INTEL_BYT_RT5640_MACH is not set # CONFIG_SND_SOC_INTEL_CATPT is not set # CONFIG_SND_SOC_INTEL_CFL is not set # CONFIG_SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH is not set @@ -6470,7 +5973,6 @@ CONFIG_SND_SOC_INTEL_SST_TOPLEVEL=y # CONFIG_SND_SOC_LPASS_TX_MACRO is not set # CONFIG_SND_SOC_LPASS_VA_MACRO is not set # CONFIG_SND_SOC_LPASS_WSA_MACRO is not set -# CONFIG_SND_SOC_MA120X0P is not set # CONFIG_SND_SOC_MAX9759 is not set # CONFIG_SND_SOC_MAX98088 is not set # CONFIG_SND_SOC_MAX98090 is not set @@ -6512,7 +6014,6 @@ CONFIG_SND_SOC_INTEL_SST_TOPLEVEL=y # CONFIG_SND_SOC_NAU8824 is not set # CONFIG_SND_SOC_PCM1681 is not set # CONFIG_SND_SOC_PCM1789_I2C is not set -# CONFIG_SND_SOC_PCM1792A is not set # CONFIG_SND_SOC_PCM179X_I2C is not set # CONFIG_SND_SOC_PCM179X_SPI is not set # CONFIG_SND_SOC_PCM186X_I2C is not set @@ -6538,7 +6039,6 @@ CONFIG_SND_SOC_INTEL_SST_TOPLEVEL=y # CONFIG_SND_SOC_SGTL5000 is not set # CONFIG_SND_SOC_SIMPLE_AMPLIFIER is not set # CONFIG_SND_SOC_SIMPLE_MUX is not set -# CONFIG_SND_SOC_SIRF_AUDIO_CODEC is not set # CONFIG_SND_SOC_SMA1303 is not set # CONFIG_SND_SOC_SOF_TOPLEVEL is not set # CONFIG_SND_SOC_SPDIF is not set @@ -6613,7 +6113,6 @@ CONFIG_SND_SOC_INTEL_SST_TOPLEVEL=y # CONFIG_SND_SOC_XILINX_SPDIF is not set # CONFIG_SND_SOC_XTFPGA_I2S is not set # CONFIG_SND_SOC_ZL38060 is not set -# CONFIG_SND_SOC_ZX_AUD96P22 is not set # CONFIG_SND_SONICVIBES is not set # CONFIG_SND_SPI is not set # CONFIG_SND_SSCAPE is not set @@ -6655,7 +6154,6 @@ CONFIG_SND_X86=y # CONFIG_SOC_AM33XX is not set # CONFIG_SOC_AM43XX is not set # CONFIG_SOC_BRCMSTB is not set -# CONFIG_SOC_CAMERA is not set # CONFIG_SOC_DRA7XX is not set # CONFIG_SOC_HAS_OMAP2_SDRC is not set # CONFIG_SOC_OMAP5 is not set @@ -6669,13 +6167,11 @@ CONFIG_SND_X86=y # CONFIG_SOUNDWIRE is not set # CONFIG_SOUND_OSS_CORE is not set # CONFIG_SOUND_OSS_CORE_PRECLAIM is not set -# CONFIG_SOUND_PRIME is not set # CONFIG_SP5100_TCO is not set # CONFIG_SPARSEMEM_MANUAL is not set # CONFIG_SPARSEMEM_STATIC is not set # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set # CONFIG_SPARSE_IRQ is not set -# CONFIG_SPARSE_RCU_POINTER is not set # CONFIG_SPEAKUP is not set # CONFIG_SPI is not set # CONFIG_SPINLOCK_TEST is not set @@ -6687,6 +6183,7 @@ CONFIG_SND_X86=y # CONFIG_SPI_BCM2835 is not set # CONFIG_SPI_BCM63XX_HSSPI is not set # CONFIG_SPI_BCM_QSPI is not set +# CONFIG_SPI_BCMBCA_HSSPI is not set # CONFIG_SPI_BITBANG is not set # CONFIG_SPI_BUTTERFLY is not set # CONFIG_SPI_CADENCE is not set @@ -6698,7 +6195,6 @@ CONFIG_SND_X86=y # CONFIG_SPI_FSL_ESPI is not set # CONFIG_SPI_FSL_SPI is not set # CONFIG_SPI_GPIO is not set -# CONFIG_SPI_GPIO_OLD is not set # CONFIG_SPI_IMG_SPFI is not set # CONFIG_SPI_LANTIQ_SSC is not set # CONFIG_SPI_LM70_LLP is not set @@ -6709,7 +6205,6 @@ CONFIG_SND_X86=y # CONFIG_SPI_MICROCHIP_CORE_QSPI is not set # CONFIG_SPI_MPC52xx is not set # CONFIG_SPI_MPC52xx_PSC is not set -# CONFIG_SPI_MTK_QUADSPI is not set # CONFIG_SPI_MUX is not set # CONFIG_SPI_MXIC is not set # CONFIG_SPI_NXP_FLEXSPI is not set @@ -6735,7 +6230,6 @@ CONFIG_SND_X86=y # CONFIG_SPI_TOPCLIFF_PCH is not set # CONFIG_SPI_XCOMM is not set # CONFIG_SPI_XILINX is not set -# CONFIG_SPI_XWAY is not set # CONFIG_SPI_ZYNQMP_GQSPI is not set CONFIG_SPLIT_PTLOCK_CPUS=4 # CONFIG_SPMI is not set @@ -6762,13 +6256,11 @@ CONFIG_SQUASHFS_XZ=y # CONFIG_SRF04 is not set # CONFIG_SRF08 is not set # CONFIG_SSB is not set -# CONFIG_SSB_DEBUG is not set # CONFIG_SSB_DRIVER_GPIO is not set # CONFIG_SSB_HOST_SOC is not set # CONFIG_SSB_PCMCIAHOST is not set CONFIG_SSB_POSSIBLE=y # CONFIG_SSB_SDIOHOST is not set -# CONFIG_SSB_SILENT is not set # CONFIG_SSFDC is not set # CONFIG_SSIF_IPMI_BMC is not set # CONFIG_STACKPROTECTOR is not set @@ -6777,19 +6269,15 @@ CONFIG_SSB_POSSIBLE=y # CONFIG_STACKTRACE is not set # CONFIG_STACKTRACE_BUILD_ID is not set CONFIG_STACKTRACE_SUPPORT=y -CONFIG_STACK_HASH_ORDER=20 # CONFIG_STACK_TRACER is not set # CONFIG_STACK_VALIDATION is not set CONFIG_STAGING=y # CONFIG_STAGING_BOARD is not set -# CONFIG_STAGING_GASKET_FRAMEWORK is not set # CONFIG_STAGING_MEDIA is not set CONFIG_STANDALONE=y # CONFIG_STATIC_KEYS_SELFTEST is not set # CONFIG_STATIC_USERMODEHELPER is not set -CONFIG_STDBINUTILS=y # CONFIG_STE10XP is not set -# CONFIG_STE_MODEM_RPROC is not set # CONFIG_STK3310 is not set # CONFIG_STK8312 is not set # CONFIG_STK8BA50 is not set @@ -6817,18 +6305,15 @@ CONFIG_STRIP_ASM_SYMS=y # CONFIG_SUNGEM is not set # CONFIG_SUNRPC is not set # CONFIG_SUNRPC_DEBUG is not set -CONFIG_SUNRPC_DISABLE_INSECURE_ENCTYPES=y # CONFIG_SUNRPC_GSS is not set # CONFIG_SUNXI_SRAM is not set # CONFIG_SUN_PARTITION is not set -# CONFIG_SURFACE_3_BUTTON is not set # CONFIG_SURFACE_PLATFORMS is not set # CONFIG_SUSPEND is not set # CONFIG_SUSPEND_SKIP_SYNC is not set CONFIG_SWAP=y # CONFIG_SWCONFIG is not set # CONFIG_SWCONFIG_B53 is not set -# CONFIG_SWCONFIG_B53_MDIO_DRIVER is not set # CONFIG_SWCONFIG_B53_MMAP_DRIVER is not set # CONFIG_SWCONFIG_B53_SPI_DRIVER is not set # CONFIG_SWCONFIG_B53_SRAB_DRIVER is not set @@ -6842,18 +6327,13 @@ CONFIG_SWAP=y # CONFIG_SX9500 is not set # CONFIG_SXGBE_ETH is not set CONFIG_SYMBOLIC_ERRNAME=y -# CONFIG_SYNCLINK_CS is not set # CONFIG_SYNC_FILE is not set -# CONFIG_SYNOPSYS_DWC_ETH_QOS is not set # CONFIG_SYNTH_EVENTS is not set # CONFIG_SYNTH_EVENT_GEN_TEST is not set CONFIG_SYN_COOKIES=y # CONFIG_SYSCON_REBOOT_MODE is not set CONFIG_SYSCTL=y -# CONFIG_SYSCTL_SYSCALL is not set CONFIG_SYSFS=y -# CONFIG_SYSFS_DEPRECATED is not set -# CONFIG_SYSFS_DEPRECATED_V2 is not set # CONFIG_SYSFS_SYSCALL is not set # CONFIG_SYSTEMPORT is not set # CONFIG_SYSTEM_BLACKLIST_KEYRING is not set @@ -6876,7 +6356,6 @@ CONFIG_SYSVIPC_SYSCTL=y # CONFIG_TCG_FTPM_TEE is not set # CONFIG_TCG_INFINEON is not set # CONFIG_TCG_NSC is not set -# CONFIG_TCG_ST33_I2C is not set # CONFIG_TCG_TIS is not set # CONFIG_TCG_TIS_I2C is not set # CONFIG_TCG_TIS_I2C_ATMEL is not set @@ -6916,7 +6395,6 @@ CONFIG_TCP_CONG_CUBIC=y # CONFIG_TEHUTI is not set # CONFIG_TERANETICS_PHY is not set # CONFIG_TEST_ASYNC_DRIVER_PROBE is not set -# CONFIG_TEST_BITFIELD is not set # CONFIG_TEST_BITMAP is not set # CONFIG_TEST_BITOPS is not set # CONFIG_TEST_BLACKHOLE_DEV is not set @@ -6928,10 +6406,8 @@ CONFIG_TCP_CONG_CUBIC=y # CONFIG_TEST_DYNAMIC_DEBUG is not set # CONFIG_TEST_FIRMWARE is not set # CONFIG_TEST_FREE_PAGES is not set -# CONFIG_TEST_HASH is not set # CONFIG_TEST_HEXDUMP is not set # CONFIG_TEST_IDA is not set -# CONFIG_TEST_KASAN_MODULE is not set # CONFIG_TEST_KMOD is not set # CONFIG_TEST_KSTRTOX is not set # CONFIG_TEST_LIST_SORT is not set @@ -6941,18 +6417,14 @@ CONFIG_TCP_CONG_CUBIC=y # CONFIG_TEST_MEMCAT_P is not set # CONFIG_TEST_MEMINIT is not set # CONFIG_TEST_MIN_HEAP is not set -# CONFIG_TEST_OVERFLOW is not set # CONFIG_TEST_POWER is not set # CONFIG_TEST_PRINTF is not set # CONFIG_TEST_REF_TRACKER is not set # CONFIG_TEST_RHASHTABLE is not set # CONFIG_TEST_SCANF is not set -# CONFIG_TEST_SIPHASH is not set # CONFIG_TEST_SORT is not set -# CONFIG_TEST_STACKINIT is not set # CONFIG_TEST_STATIC_KEYS is not set # CONFIG_TEST_STRING_HELPERS is not set -# CONFIG_TEST_STRSCPY is not set # CONFIG_TEST_SYSCTL is not set # CONFIG_TEST_UBSAN is not set # CONFIG_TEST_UDELAY is not set @@ -6980,10 +6452,8 @@ CONFIG_TEXTSEARCH=y # CONFIG_THERMAL_STATISTICS is not set # CONFIG_THERMAL_WRITABLE_TRIPS is not set # CONFIG_THINKPAD_ACPI is not set -CONFIG_THIN_ARCHIVES=y # CONFIG_THRUSTMASTER_FF is not set # CONFIG_THUMB2_KERNEL is not set -# CONFIG_THUNDERBOLT is not set # CONFIG_THUNDER_NIC_BGX is not set # CONFIG_THUNDER_NIC_PF is not set # CONFIG_THUNDER_NIC_RGX is not set @@ -6995,7 +6465,6 @@ CONFIG_TICK_ONESHOT=y # CONFIG_TIMB_DMA is not set CONFIG_TIMERFD=y # CONFIG_TIMERLAT_TRACER is not set -# CONFIG_TIMER_STATS is not set # CONFIG_TIME_NS is not set # CONFIG_TINYDRM_HX8357D is not set # CONFIG_TINYDRM_ILI9163 is not set @@ -7025,19 +6494,15 @@ CONFIG_TINY_RCU=y # CONFIG_TI_ADS8688 is not set # CONFIG_TI_AM335X_ADC is not set # CONFIG_TI_CPSW is not set -# CONFIG_TI_CPSW_ALE is not set # CONFIG_TI_CPSW_PHY_SEL is not set # CONFIG_TI_CPTS is not set # CONFIG_TI_DAC082S085 is not set # CONFIG_TI_DAC5571 is not set # CONFIG_TI_DAC7311 is not set -# CONFIG_TI_DAC7512 is not set # CONFIG_TI_DAC7612 is not set -# CONFIG_TI_DAVINCI_CPDMA is not set # CONFIG_TI_DAVINCI_MDIO is not set # CONFIG_TI_LMP92064 is not set # CONFIG_TI_ST is not set -# CONFIG_TI_SYSCON_RESET is not set # CONFIG_TI_TLC4541 is not set # CONFIG_TI_TMAG5273 is not set # CONFIG_TI_TSC2046 is not set @@ -7129,12 +6594,9 @@ CONFIG_TMPFS_XATTR=y # CONFIG_TOUCHSCREEN_PCAP is not set # CONFIG_TOUCHSCREEN_PENMOUNT is not set # CONFIG_TOUCHSCREEN_PIXCIR is not set -# CONFIG_TOUCHSCREEN_PROPERTIES is not set # CONFIG_TOUCHSCREEN_RASPBERRYPI_FW is not set # CONFIG_TOUCHSCREEN_RM_TS is not set # CONFIG_TOUCHSCREEN_ROHM_BU21023 is not set -# CONFIG_TOUCHSCREEN_RPI_FT5406 is not set -# CONFIG_TOUCHSCREEN_S3C2410 is not set # CONFIG_TOUCHSCREEN_S6SY761 is not set # CONFIG_TOUCHSCREEN_SILEAD is not set # CONFIG_TOUCHSCREEN_SIS_I2C is not set @@ -7157,7 +6619,6 @@ CONFIG_TMPFS_XATTR=y # CONFIG_TOUCHSCREEN_TSC2007_IIO is not set # CONFIG_TOUCHSCREEN_TSC200X_CORE is not set # CONFIG_TOUCHSCREEN_TSC_SERIO is not set -# CONFIG_TOUCHSCREEN_UCB1400 is not set # CONFIG_TOUCHSCREEN_USB_3M is not set # CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set # CONFIG_TOUCHSCREEN_USB_DMC_TSC10 is not set @@ -7177,7 +6638,6 @@ CONFIG_TMPFS_XATTR=y # CONFIG_TOUCHSCREEN_USB_NEXIO is not set # CONFIG_TOUCHSCREEN_USB_PANJIT is not set # CONFIG_TOUCHSCREEN_USB_ZYTRONIC is not set -# CONFIG_TOUCHSCREEN_W90X900 is not set # CONFIG_TOUCHSCREEN_WACOM_I2C is not set # CONFIG_TOUCHSCREEN_WACOM_W8001 is not set # CONFIG_TOUCHSCREEN_WDT87XX_I2C is not set @@ -7187,7 +6647,6 @@ CONFIG_TMPFS_XATTR=y # CONFIG_TOUCHSCREEN_WM9713 is not set # CONFIG_TOUCHSCREEN_WM97XX is not set # CONFIG_TOUCHSCREEN_WM97XX_MAINSTONE is not set -# CONFIG_TOUCHSCREEN_WM97XX_ZYLONITE is not set # CONFIG_TOUCHSCREEN_ZET6223 is not set # CONFIG_TOUCHSCREEN_ZFORCE is not set # CONFIG_TOUCHSCREEN_ZINITIX is not set @@ -7203,13 +6662,10 @@ CONFIG_TMPFS_XATTR=y # CONFIG_TRACE_EVENT_INJECT is not set CONFIG_TRACE_IRQFLAGS_SUPPORT=y # CONFIG_TRACE_MMIO_ACCESS is not set -# CONFIG_TRACE_SINK is not set -# CONFIG_TRACING_EVENTS_GPIO is not set CONFIG_TRACING_SUPPORT=y CONFIG_TRAD_SIGNALS=y # CONFIG_TRANSPARENT_HUGEPAGE is not set # CONFIG_TREE_RCU is not set -# CONFIG_TREE_RCU_TRACE is not set # CONFIG_TRIM_UNUSED_KSYMS is not set # CONFIG_TRUSTED_FOUNDATIONS is not set # CONFIG_TRUSTED_KEYS is not set @@ -7219,7 +6675,6 @@ CONFIG_TRAD_SIGNALS=y # CONFIG_TSL2583 is not set # CONFIG_TSL2591 is not set # CONFIG_TSL2772 is not set -# CONFIG_TSL2x7x is not set # CONFIG_TSL4531 is not set # CONFIG_TSNEP is not set # CONFIG_TSYS01 is not set @@ -7244,7 +6699,6 @@ CONFIG_TTY=y # CONFIG_UBIFS_ATIME_SUPPORT is not set # CONFIG_UBIFS_FS_ADVANCED_COMPR is not set # CONFIG_UBIFS_FS_AUTHENTICATION is not set -# CONFIG_UBIFS_FS_ENCRYPTION is not set CONFIG_UBIFS_FS_LZO=y # CONFIG_UBIFS_FS_SECURITY is not set CONFIG_UBIFS_FS_XATTR=y @@ -7255,11 +6709,8 @@ CONFIG_UBSAN_ALIGNMENT=y CONFIG_UBSAN_BOOL=y # CONFIG_UBSAN_DIV_ZERO is not set CONFIG_UBSAN_ENUM=y -# CONFIG_UBSAN_MISC is not set CONFIG_UBSAN_SHIFT=y # CONFIG_UBSAN_UNREACHABLE is not set -# CONFIG_UCB1400_CORE is not set -# CONFIG_UCSI is not set # CONFIG_UDF_FS is not set # CONFIG_UDMABUF is not set CONFIG_UEVENT_HELPER=y @@ -7272,15 +6723,11 @@ CONFIG_UID16=y # CONFIG_ULTRA is not set # CONFIG_ULTRIX_PARTITION is not set # CONFIG_UNICODE is not set -# CONFIG_UNISYSSPAR is not set -# CONFIG_UNISYS_VISORBUS is not set CONFIG_UNIX=y CONFIG_UNIX98_PTYS=y # CONFIG_UNIXWARE_DISKLABEL is not set # CONFIG_UNIX_DIAG is not set CONFIG_UNIX_SCM=y -# CONFIG_UNUSED_BOARD_FILES is not set -# CONFIG_UNUSED_SYMBOLS is not set # CONFIG_UNWINDER_FRAME_POINTER is not set # CONFIG_UPROBES is not set # CONFIG_UPROBE_EVENTS is not set @@ -7313,8 +6760,8 @@ CONFIG_USB_BELKIN=y # CONFIG_USB_CDNS3 is not set # CONFIG_USB_CDNS3_IMX is not set # CONFIG_USB_CDNS3_PCI_WRAP is not set -# CONFIG_USB_CDNSP_PCI is not set # CONFIG_USB_CDNS_SUPPORT is not set +# CONFIG_USB_CDNSP_PCI is not set # CONFIG_USB_CHAOSKEY is not set # CONFIG_USB_CHIPIDEA is not set # CONFIG_USB_CHIPIDEA_GENERIC is not set @@ -7346,13 +6793,11 @@ CONFIG_USB_DEFAULT_PERSIST=y # CONFIG_USB_DWC3_ULPI is not set # CONFIG_USB_DYNAMIC_MINORS is not set # CONFIG_USB_EG20T is not set -# CONFIG_USB_EHCI_ATH79 is not set # CONFIG_USB_EHCI_FSL is not set # CONFIG_USB_EHCI_HCD is not set # CONFIG_USB_EHCI_HCD_AT91 is not set # CONFIG_USB_EHCI_HCD_OMAP is not set # CONFIG_USB_EHCI_HCD_PPC_OF is not set -# CONFIG_USB_EHCI_MSM is not set # CONFIG_USB_EHCI_MV is not set CONFIG_USB_EHCI_ROOT_HUB_TT=y CONFIG_USB_EHCI_TT_NEWSCHED=y @@ -7366,7 +6811,6 @@ CONFIG_USB_EHCI_TT_NEWSCHED=y # CONFIG_USB_FOTG210_HCD is not set # CONFIG_USB_FOTG210_UDC is not set # CONFIG_USB_FSL_USB2 is not set -# CONFIG_USB_FTDI_ELAN is not set # CONFIG_USB_FUNCTIONFS is not set # CONFIG_USB_FUSB300 is not set # CONFIG_USB_GADGET is not set @@ -7445,9 +6889,7 @@ CONFIG_USB_GADGET_VBUS_DRAW=2 # CONFIG_USB_HSIC_USB4604 is not set # CONFIG_USB_HSO is not set # CONFIG_USB_HUB_USB251XB is not set -# CONFIG_USB_HWA_HCD is not set # CONFIG_USB_IDMOUSE is not set -# CONFIG_USB_IMX21_HCD is not set # CONFIG_USB_IOWARRIOR is not set # CONFIG_USB_IPHETH is not set # CONFIG_USB_ISIGHTFW is not set @@ -7462,7 +6904,6 @@ CONFIG_USB_GADGET_VBUS_DRAW=2 # CONFIG_USB_LAN78XX is not set # CONFIG_USB_LCD is not set # CONFIG_USB_LD is not set -# CONFIG_USB_LED is not set # CONFIG_USB_LEDS_TRIGGER_USBPORT is not set # CONFIG_USB_LED_TRIG is not set # CONFIG_USB_LEGOTOWER is not set @@ -7479,7 +6920,6 @@ CONFIG_USB_GADGET_VBUS_DRAW=2 # CONFIG_USB_MON is not set # CONFIG_USB_MOUSE is not set # CONFIG_USB_MSI2500 is not set -# CONFIG_USB_MSM_OTG is not set # CONFIG_USB_MTU3 is not set # CONFIG_USB_MUSB_GADGET is not set # CONFIG_USB_MUSB_HDRC is not set @@ -7525,11 +6965,9 @@ CONFIG_USB_GADGET_VBUS_DRAW=2 CONFIG_USB_OHCI_LITTLE_ENDIAN=y # CONFIG_USB_ONBOARD_HUB is not set # CONFIG_USB_OTG is not set -# CONFIG_USB_OTG_BLACKLIST_HUB is not set # CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB is not set # CONFIG_USB_OTG_FSM is not set # CONFIG_USB_OTG_PRODUCTLIST is not set -# CONFIG_USB_OTG_WHITELIST is not set # CONFIG_USB_OXU210HP_HCD is not set # CONFIG_USB_PCI is not set # CONFIG_USB_PEGASUS is not set @@ -7541,9 +6979,7 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y # CONFIG_USB_R8A66597 is not set # CONFIG_USB_R8A66597_HCD is not set # CONFIG_USB_RAW_GADGET is not set -# CONFIG_USB_RCAR_PHY is not set # CONFIG_USB_RENESAS_USBHS is not set -# CONFIG_USB_RIO500 is not set # CONFIG_USB_ROLES_INTEL_XHCI is not set # CONFIG_USB_ROLE_SWITCH is not set # CONFIG_USB_RTL8150 is not set @@ -7573,19 +7009,7 @@ CONFIG_USB_SERIAL_GENERIC=y # CONFIG_USB_SERIAL_IR is not set # CONFIG_USB_SERIAL_IUU is not set # CONFIG_USB_SERIAL_KEYSPAN is not set -CONFIG_USB_SERIAL_KEYSPAN_MPR=y # CONFIG_USB_SERIAL_KEYSPAN_PDA is not set -CONFIG_USB_SERIAL_KEYSPAN_USA18X=y -CONFIG_USB_SERIAL_KEYSPAN_USA19=y -CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y -CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y -CONFIG_USB_SERIAL_KEYSPAN_USA19W=y -CONFIG_USB_SERIAL_KEYSPAN_USA28=y -CONFIG_USB_SERIAL_KEYSPAN_USA28X=y -CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y -CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y -CONFIG_USB_SERIAL_KEYSPAN_USA49W=y -CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y # CONFIG_USB_SERIAL_KLSI is not set # CONFIG_USB_SERIAL_KOBIL_SCT is not set # CONFIG_USB_SERIAL_MCT_U232 is not set @@ -7615,7 +7039,6 @@ CONFIG_USB_SERIAL_SAFE_PADDED=y # CONFIG_USB_SERIAL_VISOR is not set # CONFIG_USB_SERIAL_WHITEHEAT is not set # CONFIG_USB_SERIAL_WISHBONE is not set -# CONFIG_USB_SERIAL_XIRCOM is not set # CONFIG_USB_SERIAL_XR is not set # CONFIG_USB_SERIAL_XSENS_MT is not set # CONFIG_USB_SEVSEG is not set @@ -7624,7 +7047,6 @@ CONFIG_USB_SERIAL_SAFE_PADDED=y # CONFIG_USB_SL811_HCD is not set # CONFIG_USB_SNP_UDC_PLAT is not set # CONFIG_USB_SPEEDTOUCH is not set -# CONFIG_USB_STKWEBCAM is not set # CONFIG_USB_STORAGE is not set # CONFIG_USB_STORAGE_ALAUDA is not set # CONFIG_USB_STORAGE_CYPRESS_ATACB is not set @@ -7642,7 +7064,6 @@ CONFIG_USB_SERIAL_SAFE_PADDED=y # CONFIG_USB_STORAGE_USBAT is not set # CONFIG_USB_STV06XX is not set # CONFIG_USB_SUPPORT is not set -# CONFIG_USB_SWITCH_FSA9480 is not set # CONFIG_USB_TEST is not set # CONFIG_USB_TMC is not set # CONFIG_USB_TRANCEVIBRATOR is not set @@ -7656,9 +7077,6 @@ CONFIG_USB_SERIAL_SAFE_PADDED=y CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y # CONFIG_USB_VL600 is not set # CONFIG_USB_WDM is not set -# CONFIG_USB_WHCI_HCD is not set -# CONFIG_USB_WUSB is not set -# CONFIG_USB_WUSB_CBAF is not set # CONFIG_USB_XEN_HCD is not set # CONFIG_USB_XHCI_DBGCAP is not set # CONFIG_USB_XHCI_HCD is not set @@ -7668,7 +7086,6 @@ CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y # CONFIG_USB_YUREX is not set # CONFIG_USB_ZD1201 is not set # CONFIG_USB_ZERO is not set -# CONFIG_USB_ZR364XX is not set # CONFIG_USELIB is not set # CONFIG_USERFAULTFD is not set # CONFIG_USERIO is not set @@ -7676,7 +7093,6 @@ CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y # CONFIG_USER_EVENTS is not set # CONFIG_USE_OF is not set # CONFIG_UTS_NS is not set -# CONFIG_UWB is not set # CONFIG_U_SERIAL_CONSOLE is not set # CONFIG_V4L_MEM2MEM_DRIVERS is not set # CONFIG_V4L_PLATFORM_DRIVERS is not set @@ -7710,9 +7126,7 @@ CONFIG_VHOST_MENU=y # CONFIG_VHOST_VSOCK is not set # CONFIG_VIA_RHINE is not set # CONFIG_VIA_VELOCITY is not set -# CONFIG_VIDEO_AD5398 is not set # CONFIG_VIDEO_AD5820 is not set -# CONFIG_VIDEO_AD9389B is not set # CONFIG_VIDEO_ADP1653 is not set # CONFIG_VIDEO_ADV7170 is not set # CONFIG_VIDEO_ADV7175 is not set @@ -7729,20 +7143,15 @@ CONFIG_VHOST_MENU=y # CONFIG_VIDEO_AK881X is not set # CONFIG_VIDEO_AM437X_VPFE is not set # CONFIG_VIDEO_AR0521 is not set -# CONFIG_VIDEO_ARDUCAM_64MP is not set -# CONFIG_VIDEO_ARDUCAM_PIVARIETY is not set # CONFIG_VIDEO_ASPEED is not set # CONFIG_VIDEO_ATMEL_ISC is not set # CONFIG_VIDEO_ATMEL_ISI is not set # CONFIG_VIDEO_AU0828 is not set # CONFIG_VIDEO_BCM2835 is not set -# CONFIG_VIDEO_BCM2835_UNICAM is not set # CONFIG_VIDEO_BT819 is not set # CONFIG_VIDEO_BT848 is not set # CONFIG_VIDEO_BT856 is not set # CONFIG_VIDEO_BT866 is not set -# CONFIG_VIDEO_BU64754 is not set -# CONFIG_VIDEO_CADENCE is not set # CONFIG_VIDEO_CADENCE_CSI2RX is not set # CONFIG_VIDEO_CADENCE_CSI2TX is not set # CONFIG_VIDEO_CAFE_CCIC is not set @@ -7750,7 +7159,6 @@ CONFIG_VHOST_MENU=y # CONFIG_VIDEO_CCS is not set # CONFIG_VIDEO_COBALT is not set # CONFIG_VIDEO_CODA is not set -# CONFIG_VIDEO_CODEC_BCM2835 is not set # CONFIG_VIDEO_CS3308 is not set # CONFIG_VIDEO_CS5345 is not set # CONFIG_VIDEO_CS53L32A is not set @@ -7760,7 +7168,6 @@ CONFIG_VHOST_MENU=y # CONFIG_VIDEO_CX25840 is not set # CONFIG_VIDEO_CX88 is not set # CONFIG_VIDEO_DEV is not set -# CONFIG_VIDEO_DM6446_CCDC is not set # CONFIG_VIDEO_DS90UB913 is not set # CONFIG_VIDEO_DS90UB953 is not set # CONFIG_VIDEO_DS90UB960 is not set @@ -7793,45 +7200,38 @@ CONFIG_VHOST_MENU=y # CONFIG_VIDEO_IMX335 is not set # CONFIG_VIDEO_IMX355 is not set # CONFIG_VIDEO_IMX412 is not set -# CONFIG_VIDEO_IMX477 is not set -# CONFIG_VIDEO_IMX519 is not set -# CONFIG_VIDEO_IMX708 is not set +# CONFIG_VIDEO_IMX7_CSI is not set +# CONFIG_VIDEO_IMX8MQ_MIPI_CSI2 is not set +# CONFIG_VIDEO_IMX8_ISI is not set # CONFIG_VIDEO_IMX8_JPEG is not set # CONFIG_VIDEO_IMX_MIPI_CSIS is not set # CONFIG_VIDEO_IMX_PXP is not set -# CONFIG_VIDEO_IRS1125 is not set # CONFIG_VIDEO_IR_I2C is not set # CONFIG_VIDEO_ISL7998X is not set -# CONFIG_VIDEO_ISP_BCM2835 is not set # CONFIG_VIDEO_IVTV is not set # CONFIG_VIDEO_KS0127 is not set # CONFIG_VIDEO_LM3560 is not set # CONFIG_VIDEO_LM3646 is not set # CONFIG_VIDEO_M52790 is not set -# CONFIG_VIDEO_M5MOLS is not set # CONFIG_VIDEO_MAX9286 is not set # CONFIG_VIDEO_MEM2MEM_DEINTERLACE is not set # CONFIG_VIDEO_ML86V7667 is not set # CONFIG_VIDEO_MSP3400 is not set # CONFIG_VIDEO_MT9M001 is not set -# CONFIG_VIDEO_MT9M032 is not set # CONFIG_VIDEO_MT9M111 is not set # CONFIG_VIDEO_MT9P031 is not set -# CONFIG_VIDEO_MT9T001 is not set # CONFIG_VIDEO_MT9T112 is not set # CONFIG_VIDEO_MT9V011 is not set # CONFIG_VIDEO_MT9V032 is not set # CONFIG_VIDEO_MT9V111 is not set # CONFIG_VIDEO_MUX is not set # CONFIG_VIDEO_MXB is not set -# CONFIG_VIDEO_NOON010PC30 is not set # CONFIG_VIDEO_OG01A1B is not set # CONFIG_VIDEO_OMAP2_VOUT is not set # CONFIG_VIDEO_OV02A10 is not set # CONFIG_VIDEO_OV08D10 is not set # CONFIG_VIDEO_OV13858 is not set # CONFIG_VIDEO_OV13B10 is not set -# CONFIG_VIDEO_OV2311 is not set # CONFIG_VIDEO_OV2640 is not set # CONFIG_VIDEO_OV2659 is not set # CONFIG_VIDEO_OV2680 is not set @@ -7845,7 +7245,6 @@ CONFIG_VHOST_MENU=y # CONFIG_VIDEO_OV5675 is not set # CONFIG_VIDEO_OV5693 is not set # CONFIG_VIDEO_OV5695 is not set -# CONFIG_VIDEO_OV64A40 is not set # CONFIG_VIDEO_OV6650 is not set # CONFIG_VIDEO_OV7251 is not set # CONFIG_VIDEO_OV7640 is not set @@ -7854,13 +7253,11 @@ CONFIG_VHOST_MENU=y # CONFIG_VIDEO_OV7740 is not set # CONFIG_VIDEO_OV8856 is not set # CONFIG_VIDEO_OV8865 is not set -# CONFIG_VIDEO_OV9281 is not set # CONFIG_VIDEO_OV9282 is not set # CONFIG_VIDEO_OV9640 is not set # CONFIG_VIDEO_OV9650 is not set # CONFIG_VIDEO_OV9734 is not set # CONFIG_VIDEO_PVRUSB2 is not set -# CONFIG_VIDEO_RASPBERRYPI_PISP_BE is not set # CONFIG_VIDEO_RCAR_CSI2 is not set # CONFIG_VIDEO_RCAR_ISP is not set # CONFIG_VIDEO_RCAR_VIN is not set @@ -7868,12 +7265,9 @@ CONFIG_VHOST_MENU=y # CONFIG_VIDEO_RDACM21 is not set # CONFIG_VIDEO_RJ54N1 is not set # CONFIG_VIDEO_ROCKCHIP_ISP1 is not set -# CONFIG_VIDEO_RP1_CFE is not set # CONFIG_VIDEO_S5C73M3 is not set -# CONFIG_VIDEO_S5K4ECGX is not set # CONFIG_VIDEO_S5K5BAF is not set # CONFIG_VIDEO_S5K6A3 is not set -# CONFIG_VIDEO_S5K6AA is not set # CONFIG_VIDEO_SAA6588 is not set # CONFIG_VIDEO_SAA6752HS is not set # CONFIG_VIDEO_SAA7110 is not set @@ -7883,13 +7277,9 @@ CONFIG_VHOST_MENU=y # CONFIG_VIDEO_SAA7164 is not set # CONFIG_VIDEO_SAA717X is not set # CONFIG_VIDEO_SAA7185 is not set -# CONFIG_VIDEO_SH_MOBILE_CEU is not set -# CONFIG_VIDEO_SMIAPP is not set # CONFIG_VIDEO_SOLO6X10 is not set # CONFIG_VIDEO_SONY_BTF_MPX is not set -# CONFIG_VIDEO_SR030PC30 is not set # CONFIG_VIDEO_STK1160 is not set -# CONFIG_VIDEO_STK1160_COMMON is not set # CONFIG_VIDEO_ST_MIPID02 is not set # CONFIG_VIDEO_SUN4I_CSI is not set # CONFIG_VIDEO_SUN6I_CSI is not set @@ -7903,9 +7293,7 @@ CONFIG_VHOST_MENU=y # CONFIG_VIDEO_TEA6420 is not set # CONFIG_VIDEO_THS7303 is not set # CONFIG_VIDEO_THS8200 is not set -# CONFIG_VIDEO_TIMBERDALE is not set # CONFIG_VIDEO_TLV320AIC23B is not set -# CONFIG_VIDEO_TM6000 is not set # CONFIG_VIDEO_TVAUDIO is not set # CONFIG_VIDEO_TVP514X is not set # CONFIG_VIDEO_TVP5150 is not set @@ -7920,17 +7308,13 @@ CONFIG_VHOST_MENU=y # CONFIG_VIDEO_UPD64031A is not set # CONFIG_VIDEO_UPD64083 is not set # CONFIG_VIDEO_USBTV is not set -# CONFIG_VIDEO_USBVISION is not set -# CONFIG_VIDEO_V4L2 is not set # CONFIG_VIDEO_VP27SMPX is not set # CONFIG_VIDEO_VPX3220 is not set -# CONFIG_VIDEO_VS6624 is not set # CONFIG_VIDEO_WM8739 is not set # CONFIG_VIDEO_WM8775 is not set # CONFIG_VIDEO_XILINX is not set # CONFIG_VIDEO_ZORAN is not set # CONFIG_VIRTIO_BALLOON is not set -# CONFIG_VIRTIO_BLK_SCSI is not set # CONFIG_VIRTIO_CONSOLE is not set # CONFIG_VIRTIO_FS is not set # CONFIG_VIRTIO_INPUT is not set @@ -7941,7 +7325,6 @@ CONFIG_VIRTIO_MENU=y # CONFIG_VIRTUALIZATION is not set # CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set # CONFIG_VIRT_DRIVERS is not set -CONFIG_VIRT_TO_BUS=y # CONFIG_VITESSE_PHY is not set # CONFIG_VL53L0X_I2C is not set # CONFIG_VL6180 is not set @@ -7960,7 +7343,6 @@ CONFIG_VMSPLIT_3G=y # CONFIG_VMWARE_VMCI is not set # CONFIG_VMXNET3 is not set # CONFIG_VM_EVENT_COUNTERS is not set -# CONFIG_VOP_BUS is not set # CONFIG_VORTEX is not set # CONFIG_VSOCKETS is not set # CONFIG_VSOCKETS_DIAG is not set @@ -7968,12 +7350,10 @@ CONFIG_VMSPLIT_3G=y # CONFIG_VT6655 is not set # CONFIG_VT6656 is not set # CONFIG_VXFS_FS is not set -# CONFIG_VXGE is not set # CONFIG_VXLAN is not set # CONFIG_VZ89X is not set # CONFIG_W1 is not set # CONFIG_W1_CON is not set -# CONFIG_W1_MASTER_DS1WM is not set # CONFIG_W1_MASTER_DS2482 is not set # CONFIG_W1_MASTER_DS2490 is not set # CONFIG_W1_MASTER_GPIO is not set @@ -8015,16 +7395,13 @@ CONFIG_WATCHDOG_OPEN_TIMEOUT=0 # CONFIG_WDAT_WDT is not set # CONFIG_WDTPCI is not set # CONFIG_WERROR is not set -CONFIG_WEXT_CORE=y -CONFIG_WEXT_PRIV=y -CONFIG_WEXT_PROC=y -CONFIG_WEXT_SPY=y -CONFIG_WILINK_PLATFORM_DATA=y -# CONFIG_WIMAX is not set +# CONFIG_WEXT_CORE is not set +# CONFIG_WEXT_PRIV is not set +# CONFIG_WEXT_PROC is not set +# CONFIG_WEXT_SPY is not set # CONFIG_WIREGUARD is not set CONFIG_WIRELESS=y -CONFIG_WIRELESS_EXT=y -# CONFIG_WIRELESS_WDS is not set +# CONFIG_WIRELESS_EXT is not set # CONFIG_WIZNET_W5100 is not set # CONFIG_WIZNET_W5300 is not set # CONFIG_WL1251 is not set @@ -8061,7 +7438,6 @@ CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y # CONFIG_X25 is not set # CONFIG_X509_CERTIFICATE_PARSER is not set # CONFIG_X86_PKG_TEMP_THERMAL is not set -CONFIG_X86_SYSFB=y # CONFIG_X9250 is not set # CONFIG_XDP_SOCKETS is not set # CONFIG_XEN is not set @@ -8146,4 +7522,3 @@ CONFIG_ZONE_DMA=y # CONFIG_ZSMALLOC is not set CONFIG_ZSMALLOC_CHAIN_SIZE=8 # CONFIG_ZSWAP is not set -# CONFIG_ZX_TDM is not set diff --git a/lede/target/linux/generic/files/drivers/mtd/mtdsplit/Kconfig b/lede/target/linux/generic/files/drivers/mtd/mtdsplit/Kconfig index 794a39f2c3..17d590890d 100644 --- a/lede/target/linux/generic/files/drivers/mtd/mtdsplit/Kconfig +++ b/lede/target/linux/generic/files/drivers/mtd/mtdsplit/Kconfig @@ -12,7 +12,6 @@ config MTD_SPLIT_SQUASHFS_ROOT bool "Squashfs based root partition parser" depends on MTD_SPLIT_SUPPORT select MTD_SPLIT - default n help This provides a parsing function which allows to detect the offset and size of the unused portion of a rootfs partition @@ -32,7 +31,7 @@ config MTD_SPLIT_BCM_WFI_FW config MTD_SPLIT_CFE_BOOTFS bool "Parser finding rootfs appended to the CFE bootfs" - depends on MTD_SPLIT_SUPPORT && ARCH_BCM4908 + depends on MTD_SPLIT_SUPPORT && (ARCH_BCM4908 || ARCH_BCMBCA) select MTD_SPLIT help cferom on BCM4908 (and bcm63xx) uses JFFS2 bootfs partition @@ -101,3 +100,13 @@ config MTD_SPLIT_ELF_FW bool "ELF loader firmware partition parser" depends on MTD_SPLIT_SUPPORT select MTD_SPLIT + +config MTD_SPLIT_H3C_VFS + bool "Parser finding rootfs appended to H3C VFS" + depends on MTD_SPLIT_SUPPORT + select MTD_SPLIT + +config MTD_SPLIT_SEIL_FW + bool "IIJ SEIL firmware parser" + depends on MTD_SPLIT_SUPPORT + select MTD_SPLIT diff --git a/lede/target/linux/generic/files/drivers/mtd/mtdsplit/Makefile b/lede/target/linux/generic/files/drivers/mtd/mtdsplit/Makefile index 1461099b7c..e9d63c8332 100644 --- a/lede/target/linux/generic/files/drivers/mtd/mtdsplit/Makefile +++ b/lede/target/linux/generic/files/drivers/mtd/mtdsplit/Makefile @@ -3,6 +3,7 @@ obj-$(CONFIG_MTD_SPLIT_BCM63XX_FW) += mtdsplit_bcm63xx.o obj-$(CONFIG_MTD_SPLIT_BCM_WFI_FW) += mtdsplit_bcm_wfi.o obj-$(CONFIG_MTD_SPLIT_CFE_BOOTFS) += mtdsplit_cfe_bootfs.o obj-$(CONFIG_MTD_SPLIT_SEAMA_FW) += mtdsplit_seama.o +obj-$(CONFIG_MTD_SPLIT_SEIL_FW) += mtdsplit_seil.o obj-$(CONFIG_MTD_SPLIT_SQUASHFS_ROOT) += mtdsplit_squashfs.o obj-$(CONFIG_MTD_SPLIT_UIMAGE_FW) += mtdsplit_uimage.o obj-$(CONFIG_MTD_SPLIT_FIT_FW) += mtdsplit_fit.o @@ -15,3 +16,4 @@ obj-$(CONFIG_MTD_SPLIT_WRGG_FW) += mtdsplit_wrgg.o obj-$(CONFIG_MTD_SPLIT_MINOR_FW) += mtdsplit_minor.o obj-$(CONFIG_MTD_SPLIT_JIMAGE_FW) += mtdsplit_jimage.o obj-$(CONFIG_MTD_SPLIT_ELF_FW) += mtdsplit_elf.o +obj-$(CONFIG_MTD_SPLIT_H3C_VFS) += mtdsplit_h3c_vfs.o diff --git a/lede/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_bcm_wfi.c b/lede/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_bcm_wfi.c index 1ddcf6745f..1cafc91fde 100644 --- a/lede/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_bcm_wfi.c +++ b/lede/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_bcm_wfi.c @@ -31,6 +31,7 @@ #define CFERAM_NAME "cferam" #define CFERAM_NAME_LEN (sizeof(CFERAM_NAME) - 1) +#define CFERAM_NAME_MAX_LEN 32 #define KERNEL_NAME "vmlinux.lz" #define KERNEL_NAME_LEN (sizeof(KERNEL_NAME) - 1) #define OPENWRT_NAME "1-openwrt" @@ -157,17 +158,28 @@ static int parse_bcm_wfi(struct mtd_info *master, const struct mtd_partition **pparts, uint8_t *buf, loff_t off, loff_t size, bool cfe_part) { + struct device_node *mtd_node; struct mtd_partition *parts; loff_t cfe_off, kernel_off, rootfs_off; unsigned int num_parts = BCM_WFI_PARTS, cur_part = 0; + const char *cferam_name = CFERAM_NAME; + size_t cferam_name_len; int ret; + mtd_node = mtd_get_of_node(master); + if (mtd_node) + of_property_read_string(mtd_node, "brcm,cferam", &cferam_name); + + cferam_name_len = strnlen(cferam_name, CFERAM_NAME_MAX_LEN); + if (cferam_name_len > 0) + cferam_name_len--; + if (cfe_part) { num_parts++; cfe_off = off; - ret = jffs2_find_file(master, buf, CFERAM_NAME, - CFERAM_NAME_LEN, &cfe_off, + ret = jffs2_find_file(master, buf, cferam_name, + cferam_name_len, &cfe_off, size - (cfe_off - off), NULL, NULL); if (ret) return ret; diff --git a/lede/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_fit.c b/lede/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_fit.c index 3230d859b0..3b71597d23 100644 --- a/lede/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_fit.c +++ b/lede/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_fit.c @@ -199,6 +199,7 @@ mtdsplit_fit_parse(struct mtd_info *mtd, struct fdt_header hdr; size_t hdr_len, retlen; size_t offset; + u32 offset_start = 0; size_t fit_offset, fit_size; size_t rootfs_offset, rootfs_size; size_t data_size, img_total, max_size = 0; @@ -211,11 +212,13 @@ mtdsplit_fit_parse(struct mtd_info *mtd, if (cmdline_match && !strstr(saved_command_line, cmdline_match)) return -ENODEV; + of_property_read_u32(np, "openwrt,fit-offset", &offset_start); + hdr_len = sizeof(struct fdt_header); /* Parse the MTD device & search for the FIT image location */ for(offset = 0; offset + hdr_len <= mtd->size; offset += mtd->erasesize) { - ret = mtd_read(mtd, offset, hdr_len, &retlen, (void*) &hdr); + ret = mtd_read(mtd, offset + offset_start, hdr_len, &retlen, (void*) &hdr); if (ret) { pr_err("read error in \"%s\" at offset 0x%llx\n", mtd->name, (unsigned long long) offset); @@ -256,9 +259,11 @@ mtdsplit_fit_parse(struct mtd_info *mtd, * last external data refernced. */ if (fit_size > 0x1000) { + enum mtdsplit_part_type type; + /* Search for the rootfs partition after the FIT image */ - ret = mtd_find_rootfs_from(mtd, fit_offset + fit_size, mtd->size, - &rootfs_offset, NULL); + ret = mtd_find_rootfs_from(mtd, fit_offset + fit_size + offset_start, mtd->size, + &rootfs_offset, &type); if (ret) { pr_info("no rootfs found after FIT image in \"%s\"\n", mtd->name); @@ -273,9 +278,12 @@ mtdsplit_fit_parse(struct mtd_info *mtd, parts[0].name = KERNEL_PART_NAME; parts[0].offset = fit_offset; - parts[0].size = mtd_rounddown_to_eb(fit_size, mtd) + mtd->erasesize; + parts[0].size = mtd_rounddown_to_eb(fit_size + offset_start, mtd) + mtd->erasesize; - parts[1].name = ROOTFS_PART_NAME; + if (type == MTDSPLIT_PART_TYPE_UBI) + parts[1].name = UBI_PART_NAME; + else + parts[1].name = ROOTFS_PART_NAME; parts[1].offset = rootfs_offset; parts[1].size = rootfs_size; @@ -285,7 +293,7 @@ mtdsplit_fit_parse(struct mtd_info *mtd, } else { /* Search for rootfs_data after FIT external data */ fit = kzalloc(fit_size, GFP_KERNEL); - ret = mtd_read(mtd, offset, fit_size, &retlen, fit); + ret = mtd_read(mtd, offset, fit_size + offset_start, &retlen, fit); if (ret) { pr_err("read error in \"%s\" at offset 0x%llx\n", mtd->name, (unsigned long long) offset); diff --git a/lede/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_h3c_vfs.c b/lede/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_h3c_vfs.c new file mode 100644 index 0000000000..f264233dbd --- /dev/null +++ b/lede/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_h3c_vfs.c @@ -0,0 +1,170 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Some devices made by H3C use a "VFS" filesystem to store firmware images. + * This parses the start of the filesystem to read the length of the first + * file (the kernel image). It then searches for the rootfs after the end of + * the file data. This driver assumes that the filesystem was generated by + * mkh3cvfs, and only works if the filesystem matches the expected layout, + * which includes the file name of the kernel image. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "mtdsplit.h" + +#define VFS_ERASEBLOCK_SIZE 0x10000 +#define VFS_BLOCK_SIZE 0x400 +#define VFS_BLOCKS_PER_ERASEBLOCK (VFS_ERASEBLOCK_SIZE / VFS_BLOCK_SIZE) + +#define FORMAT_FLAG_OFFSET 0x0 + +#define FORMAT_FLAG (VFS_ERASEBLOCK_SIZE << 12 | VFS_BLOCK_SIZE) + +#define FILE_ENTRY_OFFSET 0x800 + +#define FILE_ENTRY_FLAGS 0x3f +#define FILE_ENTRY_PARENT_BLOCK 0 +#define FILE_ENTRY_PARENT_INDEX 0 +#define FILE_ENTRY_DATA_BLOCK 2 +#define FILE_ENTRY_NAME "openwrt-kernel.bin" + +#define NR_PARTS 2 + +struct file_entry { + uint8_t flags; + + uint8_t res0[5]; + + uint16_t year; + uint8_t month; + uint8_t day; + uint8_t hour; + uint8_t minute; + uint8_t second; + + uint8_t res1[3]; + + uint32_t length; + + uint32_t parent_block; + uint16_t parent_index; + + uint8_t res2[2]; + + uint32_t data_block; + + char name[96]; +} __attribute__ ((packed)); + +static inline size_t block_offset(int block) +{ + return VFS_ERASEBLOCK_SIZE * (block / (VFS_BLOCKS_PER_ERASEBLOCK-1)) + + VFS_BLOCK_SIZE * (1 + (block % (VFS_BLOCKS_PER_ERASEBLOCK-1))); +} + +static inline int block_count(size_t size) +{ + return (size + VFS_BLOCK_SIZE - 1) / VFS_BLOCK_SIZE; +} + +static int mtdsplit_h3c_vfs_parse(struct mtd_info *mtd, + const struct mtd_partition **pparts, + struct mtd_part_parser_data *data) +{ + struct mtd_partition *parts; + uint32_t format_flag; + struct file_entry file_entry; + size_t retlen; + int err; + size_t kernel_size; + size_t expected_offset; + size_t rootfs_offset; + + if (mtd->erasesize != VFS_ERASEBLOCK_SIZE) + return -EINVAL; + + /* Check format flag */ + err = mtd_read(mtd, FORMAT_FLAG_OFFSET, sizeof(format_flag), &retlen, + (void *) &format_flag); + if (err) + return err; + + if (retlen != sizeof(format_flag)) + return -EIO; + + if (format_flag != FORMAT_FLAG) + return -EINVAL; + + /* Check file entry */ + err = mtd_read(mtd, FILE_ENTRY_OFFSET, sizeof(file_entry), &retlen, + (void *) &file_entry); + if (err) + return err; + + if (retlen != sizeof(file_entry)) + return -EIO; + + if (file_entry.flags != FILE_ENTRY_FLAGS) + return -EINVAL; + + if (file_entry.parent_block != FILE_ENTRY_PARENT_BLOCK) + return -EINVAL; + + if (file_entry.parent_index != FILE_ENTRY_PARENT_INDEX) + return -EINVAL; + + if (file_entry.data_block != FILE_ENTRY_DATA_BLOCK) + return -EINVAL; + + if (strncmp(file_entry.name, FILE_ENTRY_NAME, sizeof(file_entry.name)) != 0) + return -EINVAL; + + /* Find rootfs offset */ + kernel_size = block_offset(file_entry.data_block + + block_count(file_entry.length) - 1) + + VFS_BLOCK_SIZE; + + expected_offset = mtd_roundup_to_eb(kernel_size, mtd); + + err = mtd_find_rootfs_from(mtd, expected_offset, mtd->size, + &rootfs_offset, NULL); + if (err) + return err; + + parts = kzalloc(NR_PARTS * sizeof(*parts), GFP_KERNEL); + if (!parts) + return -ENOMEM; + + parts[0].name = KERNEL_PART_NAME; + parts[0].offset = 0; + parts[0].size = rootfs_offset; + + parts[1].name = ROOTFS_PART_NAME; + parts[1].offset = rootfs_offset; + parts[1].size = mtd->size - rootfs_offset; + + *pparts = parts; + return NR_PARTS; +} + +static const struct of_device_id mtdsplit_h3c_vfs_of_match_table[] = { + { .compatible = "h3c,vfs-firmware" }, + {}, +}; +MODULE_DEVICE_TABLE(of, mtdsplit_h3c_vfs_of_match_table); + +static struct mtd_part_parser mtdsplit_h3c_vfs_parser = { + .owner = THIS_MODULE, + .name = "h3c-vfs", + .of_match_table = mtdsplit_h3c_vfs_of_match_table, + .parse_fn = mtdsplit_h3c_vfs_parse, + .type = MTD_PARSER_TYPE_FIRMWARE, +}; + +module_mtd_part_parser(mtdsplit_h3c_vfs_parser); diff --git a/lede/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_seil.c b/lede/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_seil.c new file mode 100644 index 0000000000..e58bb49b23 --- /dev/null +++ b/lede/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_seil.c @@ -0,0 +1,191 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* a mtdsplit driver for IIJ SEIL devices */ + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "mtdsplit.h" + +#define NR_PARTS 2 +#define SEIL_VFMT 1 +#define LDR_ENV_PART_NAME "bootloader-env" +#define LDR_ENV_KEY_BOOTDEV "BOOTDEV" + +struct seil_header { + uint64_t id; /* Identifier */ + uint8_t copy[80]; /* Copyright */ + uint32_t dcrc; /* Data CRC Checksum */ + uint32_t vfmt; /* Image Version Format */ + uint32_t vmjr; /* Image Version Major */ + uint32_t vmnr; /* Image Version Minor */ + uint8_t vrel[32]; /* Image Version Release */ + uint32_t dxor; /* xor value for Data? */ + uint32_t dlen; /* Data Length */ +}; + +/* + * check whether the current mtd device is active or not + * + * example of BOOTDEV value (IIJ SA-W2): + * - "flash" : primary image on flash + * - "rescue" : secondary image on flash + * - "usb" : usb storage + * - "lan0/1" : network + */ +static bool seil_bootdev_is_active(struct device_node *np) +{ + struct mtd_info *env_mtd; + char *buf, *var, *value, *eq; + const char *devnm; + size_t rdlen; + int ret; + + /* + * read bootdev name of the partition + * if doesn't exist, return true and skip checking of active device + */ + ret = of_property_read_string(np, "iij,bootdev-name", &devnm); + if (ret == -EINVAL) + return true; + else if (ret < 0) + return false; + + env_mtd = get_mtd_device_nm(LDR_ENV_PART_NAME); + if (IS_ERR(env_mtd)) { + pr_err("failed to get mtd device \"%s\"", LDR_ENV_PART_NAME); + return false; + } + + buf = vmalloc(env_mtd->size); + if (!buf) + return false; + + ret = mtd_read(env_mtd, 0, env_mtd->size, &rdlen, buf); + if (ret || rdlen != env_mtd->size) { + pr_err("failed to read from mtd (%d)\n", ret); + ret = 0; + goto exit_vfree; + } + + for (var = buf, ret = false; + var < buf + env_mtd->size && *var; + var = value + strlen(value) + 1) { + eq = strchr(var, '='); + if (!eq) + break; + *eq = '\0'; + value = eq + 1; + + pr_debug("ENV: %s=%s\n", var, value); + if (!strcmp(var, LDR_ENV_KEY_BOOTDEV)) { + ret = !strcmp(devnm, value); + break; + } + } + +exit_vfree: + vfree(buf); + + return ret; +} + +static int mtdsplit_parse_seil_fw(struct mtd_info *master, + const struct mtd_partition **pparts, + struct mtd_part_parser_data *data) +{ + struct device_node *np = mtd_get_of_node(master); + struct mtd_partition *parts; + struct seil_header header; + size_t image_size = 0; + size_t rootfs_offset; + size_t hdrlen = sizeof(header); + size_t retlen; + int ret; + u64 id; + + if (!seil_bootdev_is_active(np)) + return -ENODEV; + + ret = of_property_read_u64(np, "iij,seil-id", &id); + if (ret) { + pr_err("failed to get iij,seil-id from dt\n"); + return ret; + } + pr_debug("got seil-id=0x%016llx from dt\n", id); + + parts = kcalloc(NR_PARTS, sizeof(*parts), GFP_KERNEL); + if (!parts) + return -ENOMEM; + + ret = mtd_read(master, 0, hdrlen, &retlen, (void *)&header); + if (ret) + goto err_free_parts; + + if (retlen != hdrlen) { + ret = -EIO; + goto err_free_parts; + } + + if (be64_to_cpu(header.id) != id || + be32_to_cpu(header.vfmt) != SEIL_VFMT) { + pr_debug("no valid seil image found in \"%s\"\n", master->name); + ret = -ENODEV; + goto err_free_parts; + } + + image_size = hdrlen + be32_to_cpu(header.dlen); + if (image_size > master->size) { + pr_err("seil image exceeds MTD device \"%s\"\n", master->name); + ret = -EINVAL; + goto err_free_parts; + } + + /* find the roots after the seil image */ + ret = mtd_find_rootfs_from(master, image_size, + master->size, &rootfs_offset, NULL); + if (ret || (master->size - rootfs_offset) == 0) { + pr_debug("no rootfs after seil image in \"%s\"\n", + master->name); + ret = -ENODEV; + goto err_free_parts; + } + + parts[0].name = KERNEL_PART_NAME; + parts[0].offset = 0; + parts[0].size = rootfs_offset; + + parts[1].name = ROOTFS_PART_NAME; + parts[1].offset = rootfs_offset; + parts[1].size = master->size - rootfs_offset; + + *pparts = parts; + return NR_PARTS; + +err_free_parts: + kfree(parts); + return ret; +} + +static const struct of_device_id mtdsplit_seil_fw_of_match_table[] = { + { .compatible = "iij,seil-firmware" }, + {}, +}; +MODULE_DEVICE_TABLE(of, mtdsplit_seil_fw_of_match_table); + +static struct mtd_part_parser mtdsplit_seil_fw_parser = { + .owner = THIS_MODULE, + .name = "seil-fw", + .of_match_table = mtdsplit_seil_fw_of_match_table, + .parse_fn = mtdsplit_parse_seil_fw, + .type = MTD_PARSER_TYPE_FIRMWARE, +}; + +module_mtd_part_parser(mtdsplit_seil_fw_parser); diff --git a/lede/target/linux/generic/files/drivers/mtd/nand/mtk_bmt.h b/lede/target/linux/generic/files/drivers/mtd/nand/mtk_bmt.h index dff1f28c81..517ff7414f 100644 --- a/lede/target/linux/generic/files/drivers/mtd/nand/mtk_bmt.h +++ b/lede/target/linux/generic/files/drivers/mtd/nand/mtk_bmt.h @@ -95,8 +95,14 @@ bbt_nand_read(u32 page, unsigned char *dat, int dat_len, .datbuf = dat, .len = dat_len, }; + int ret; - return bmtd._read_oob(bmtd.mtd, page << bmtd.pg_shift, &ops); + ret = bmtd._read_oob(bmtd.mtd, page << bmtd.pg_shift, &ops); + if (ret < 0) + return ret; + if (ret) + pr_info("%s: %d bitflips\n", __func__, ret); + return 0; } static inline int bbt_nand_erase(u16 block) diff --git a/lede/target/linux/generic/files/drivers/mtd/nand/mtk_bmt_v2.c b/lede/target/linux/generic/files/drivers/mtd/nand/mtk_bmt_v2.c index 2770376e98..6b06948c0f 100644 --- a/lede/target/linux/generic/files/drivers/mtd/nand/mtk_bmt_v2.c +++ b/lede/target/linux/generic/files/drivers/mtd/nand/mtk_bmt_v2.c @@ -191,36 +191,6 @@ static u16 get_bmt_index(struct bbmt *bmt) return 0; } -static int -read_bmt(u16 block, unsigned char *dat, unsigned char *fdm, int fdm_len) -{ - u32 len = bmtd.bmt_pgs << bmtd.pg_shift; - - return bbt_nand_read(blk_pg(block), dat, len, fdm, fdm_len); -} - -static struct bbbt *scan_bmt(u16 block) -{ - u8 fdm[4]; - - if (block < bmtd.pool_lba) - return NULL; - - if (read_bmt(block, bmtd.bbt_buf, fdm, sizeof(fdm))) - return scan_bmt(block - 1); - - if (is_valid_bmt(bmtd.bbt_buf, fdm)) { - bmtd.bmt_blk_idx = get_bmt_index(bmt_tbl((struct bbbt *)bmtd.bbt_buf)); - if (bmtd.bmt_blk_idx == 0) { - pr_info("[BBT] FATAL ERR: bmt block index is wrong!\n"); - return NULL; - } - pr_info("[BBT] BMT.v2 is found at 0x%x\n", block); - return (struct bbbt *)bmtd.bbt_buf; - } else - return scan_bmt(block - 1); -} - /* Write the Burner Bad Block Table to Nand Flash * n - write BMT to bmt_tbl[n] */ @@ -472,7 +442,30 @@ static int mtk_bmt_init_v2(struct device_node *np) /* Scanning start from the first page of the last block * of whole flash */ - bmtd.bbt = scan_bmt(bmtd.total_blks - 1); + bmtd.bbt = NULL; + for (u16 block = bmtd.total_blks - 1; !bmtd.bbt && block >= bmtd.pool_lba; block--) { + u8 fdm[4]; + + if (bbt_nand_read(blk_pg(block), bmtd.bbt_buf, bufsz, fdm, sizeof(fdm))) { + /* Read failed, try the previous block */ + continue; + } + + if (!is_valid_bmt(bmtd.bbt_buf, fdm)) { + /* No valid BMT found, try the previous block */ + continue; + } + + bmtd.bmt_blk_idx = get_bmt_index(bmt_tbl((struct bbbt *)bmtd.bbt_buf)); + if (bmtd.bmt_blk_idx == 0) { + pr_info("[BBT] FATAL ERR: bmt block index is wrong!\n"); + break; + } + + pr_info("[BBT] BMT.v2 is found at 0x%x\n", block); + bmtd.bbt = (struct bbbt *)bmtd.bbt_buf; + } + if (!bmtd.bbt) { /* BMT not found */ if (bmtd.total_blks > BB_TABLE_MAX + BMT_TABLE_MAX) { diff --git a/lede/target/linux/generic/files/drivers/mtd/parsers/routerbootpart.c b/lede/target/linux/generic/files/drivers/mtd/parsers/routerbootpart.c index f9bba0f3ba..aa786cd895 100644 --- a/lede/target/linux/generic/files/drivers/mtd/parsers/routerbootpart.c +++ b/lede/target/linux/generic/files/drivers/mtd/parsers/routerbootpart.c @@ -167,7 +167,7 @@ static void routerboot_find_dynparts(struct mtd_info *master) while (offset < master->size) { err = mtd_read(master, offset, sizeof(buf), &bytes_read, (u8 *)&buf); if (err) { - pr_err("%s: mtd_read error while parsing (offset: 0x%X): %d\n", + pr_err("%s: mtd_read error while parsing (offset: 0x%zX): %d\n", master->name, offset, err); continue; } diff --git a/lede/target/linux/generic/files/drivers/net/phy/ar8216.c b/lede/target/linux/generic/files/drivers/net/phy/ar8216.c index 11cb18e4f3..850bcefb74 100644 --- a/lede/target/linux/generic/files/drivers/net/phy/ar8216.c +++ b/lede/target/linux/generic/files/drivers/net/phy/ar8216.c @@ -891,11 +891,7 @@ ar8216_phy_write(struct ar8xxx_priv *priv, int addr, int regnum, u16 val) static int ar8229_hw_init(struct ar8xxx_priv *priv) { -#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 5, 0) phy_interface_t phy_if_mode; -#else - int phy_if_mode; -#endif if (priv->initialized) return 0; @@ -903,11 +899,7 @@ ar8229_hw_init(struct ar8xxx_priv *priv) ar8xxx_write(priv, AR8216_REG_CTRL, AR8216_CTRL_RESET); ar8xxx_reg_wait(priv, AR8216_REG_CTRL, AR8216_CTRL_RESET, 0, 1000); -#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 5, 0) of_get_phy_mode(priv->pdev->of_node, &phy_if_mode); -#else - phy_if_mode = of_get_phy_mode(priv->pdev->of_node); -#endif if (phy_if_mode == PHY_INTERFACE_MODE_GMII) { ar8xxx_write(priv, AR8229_REG_OPER_MODE0, @@ -1427,8 +1419,7 @@ ar8xxx_sw_reset_switch(struct switch_dev *dev) int i; mutex_lock(&priv->reg_mutex); - memset(&priv->vlan, 0, sizeof(struct ar8xxx_priv) - - offsetof(struct ar8xxx_priv, vlan)); + memset(&priv->ar8xxx_priv_volatile, 0, sizeof(priv->ar8xxx_priv_volatile)); for (i = 0; i < dev->vlans; i++) priv->vlan_id[i] = i; @@ -2433,7 +2424,9 @@ static int ar8xxx_phy_config_init(struct phy_device *phydev) { struct ar8xxx_priv *priv = phydev->priv; +#ifdef CONFIG_ETHERNET_PACKET_MANGLE struct net_device *dev = phydev->attached_dev; +#endif int ret; if (WARN_ON(!priv)) @@ -2465,7 +2458,11 @@ ar8xxx_phy_config_init(struct phy_device *phydev) /* VID fixup only needed on ar8216 */ if (chip_is_ar8216(priv)) { dev->phy_ptr = priv; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,1,0) dev->priv_flags |= IFF_NO_IP_ALIGN; +#else + dev->extra_priv_flags |= IFF_NO_IP_ALIGN; +#endif dev->eth_mangle_rx = ar8216_mangle_rx; dev->eth_mangle_tx = ar8216_mangle_tx; } @@ -2700,7 +2697,11 @@ ar8xxx_phy_detach(struct phy_device *phydev) #ifdef CONFIG_ETHERNET_PACKET_MANGLE dev->phy_ptr = NULL; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,1,0) dev->priv_flags &= ~IFF_NO_IP_ALIGN; +#else + dev->extra_priv_flags &= ~IFF_NO_IP_ALIGN; +#endif dev->eth_mangle_rx = NULL; dev->eth_mangle_tx = NULL; #endif diff --git a/lede/target/linux/generic/files/drivers/net/phy/ar8216.h b/lede/target/linux/generic/files/drivers/net/phy/ar8216.h index d62cf60f57..f046b35f43 100644 --- a/lede/target/linux/generic/files/drivers/net/phy/ar8216.h +++ b/lede/target/linux/generic/files/drivers/net/phy/ar8216.h @@ -506,20 +506,22 @@ struct ar8xxx_priv { unsigned int use_count; /* all fields below are cleared on reset */ - bool vlan; + struct_group(ar8xxx_priv_volatile, + bool vlan; - u16 vlan_id[AR8XXX_MAX_VLANS]; - u8 vlan_table[AR8XXX_MAX_VLANS]; - u8 vlan_tagged; - u16 pvid[AR8X16_MAX_PORTS]; - int arl_age_time; + u16 vlan_id[AR8XXX_MAX_VLANS]; + u8 vlan_table[AR8XXX_MAX_VLANS]; + u8 vlan_tagged; + u16 pvid[AR8X16_MAX_PORTS]; + int arl_age_time; - /* mirroring */ - bool mirror_rx; - bool mirror_tx; - int source_port; - int monitor_port; - u8 port_vlan_prio[AR8X16_MAX_PORTS]; + /* mirroring */ + bool mirror_rx; + bool mirror_tx; + int source_port; + int monitor_port; + u8 port_vlan_prio[AR8X16_MAX_PORTS]; + ); }; u32 diff --git a/lede/target/linux/generic/files/drivers/net/phy/ar8327.c b/lede/target/linux/generic/files/drivers/net/phy/ar8327.c index dce52ce0e4..3313149559 100644 --- a/lede/target/linux/generic/files/drivers/net/phy/ar8327.c +++ b/lede/target/linux/generic/files/drivers/net/phy/ar8327.c @@ -183,7 +183,7 @@ ar8327_phy_fixup(struct ar8xxx_priv *priv, int phy) case 2: ar8xxx_phy_mmd_write(priv, phy, 0x7, 0x3c, 0x0); - /* fallthrough */ + fallthrough; case 4: ar8xxx_phy_mmd_write(priv, phy, 0x3, 0x800d, 0x803f); ar8xxx_phy_dbg_write(priv, phy, 0x3d, 0x6860); diff --git a/lede/target/linux/generic/files/drivers/net/phy/b53/b53_common.c b/lede/target/linux/generic/files/drivers/net/phy/b53/b53_common.c index a6dab255cc..d5f9bfc2f0 100644 --- a/lede/target/linux/generic/files/drivers/net/phy/b53/b53_common.c +++ b/lede/target/linux/generic/files/drivers/net/phy/b53/b53_common.c @@ -506,15 +506,9 @@ static int b53_configure_ports_of(struct b53_device *dev) if (fixed_link) { u32 spd; u8 po = GMII_PO_LINK; -#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 5, 0) phy_interface_t mode; -#else - int mode = of_get_phy_mode(pn); -#endif -#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 5, 0) of_get_phy_mode(pn, &mode); -#endif if (!of_property_read_u32(fixed_link, "speed", &spd)) { switch (spd) { @@ -529,7 +523,7 @@ static int b53_configure_ports_of(struct b53_device *dev) po |= PORT_OVERRIDE_SPEED_2000M; else po |= GMII_PO_SPEED_2000M; - __attribute__((__fallthrough__)); + fallthrough; case 1000: po |= GMII_PO_SPEED_1000M; break; @@ -1617,8 +1611,8 @@ static int b53_switch_init(struct b53_device *dev) return b53_switch_reset(dev); } -struct b53_device *b53_switch_alloc(struct device *base, struct b53_io_ops *ops, - void *priv) +struct b53_device *b53_swconfig_switch_alloc(struct device *base, struct b53_io_ops *ops, + void *priv) { struct b53_device *dev; @@ -1633,9 +1627,9 @@ struct b53_device *b53_switch_alloc(struct device *base, struct b53_io_ops *ops, return dev; } -EXPORT_SYMBOL(b53_switch_alloc); +EXPORT_SYMBOL(b53_swconfig_switch_alloc); -int b53_switch_detect(struct b53_device *dev) +int b53_swconfig_switch_detect(struct b53_device *dev) { u32 id32; u16 tmp; @@ -1700,9 +1694,9 @@ int b53_switch_detect(struct b53_device *dev) return b53_read8(dev, B53_MGMT_PAGE, B53_REV_ID, &dev->core_rev); } -EXPORT_SYMBOL(b53_switch_detect); +EXPORT_SYMBOL(b53_swconfig_switch_detect); -int b53_switch_register(struct b53_device *dev) +int b53_swconfig_switch_register(struct b53_device *dev) { int ret; @@ -1712,7 +1706,7 @@ int b53_switch_register(struct b53_device *dev) dev->sw_dev.alias = dev->pdata->alias; } - if (!dev->chip_id && b53_switch_detect(dev)) + if (!dev->chip_id && b53_swconfig_switch_detect(dev)) return -EINVAL; ret = b53_switch_init(dev); @@ -1723,7 +1717,7 @@ int b53_switch_register(struct b53_device *dev) return register_switch(&dev->sw_dev, NULL); } -EXPORT_SYMBOL(b53_switch_register); +EXPORT_SYMBOL(b53_swconfig_switch_register); MODULE_AUTHOR("Jonas Gorski "); MODULE_DESCRIPTION("B53 switch library"); diff --git a/lede/target/linux/generic/files/drivers/net/phy/b53/b53_mdio.c b/lede/target/linux/generic/files/drivers/net/phy/b53/b53_mdio.c index 98cdbffe73..c85df1f305 100644 --- a/lede/target/linux/generic/files/drivers/net/phy/b53/b53_mdio.c +++ b/lede/target/linux/generic/files/drivers/net/phy/b53/b53_mdio.c @@ -280,7 +280,7 @@ static int b53_phy_probe(struct phy_device *phydev) if (phydev->mdio.addr != B53_PSEUDO_PHY && phydev->mdio.addr != 0) return -ENODEV; - dev = b53_switch_alloc(&phydev->mdio.dev, &b53_mdio_ops, phydev->mdio.bus); + dev = b53_swconfig_switch_alloc(&phydev->mdio.dev, &b53_mdio_ops, phydev->mdio.bus); if (!dev) return -ENOMEM; @@ -290,7 +290,7 @@ static int b53_phy_probe(struct phy_device *phydev) dev->pdata = NULL; mutex_init(&dev->reg_mutex); - ret = b53_switch_detect(dev); + ret = b53_swconfig_switch_detect(dev); if (ret) return ret; @@ -302,7 +302,7 @@ static int b53_phy_probe(struct phy_device *phydev) linkmode_copy(phydev->advertising, phydev->supported); - ret = b53_switch_register(dev); + ret = b53_swconfig_switch_register(dev); if (ret) { dev_err(dev->dev, "failed to register switch: %i\n", ret); return ret; @@ -361,26 +361,6 @@ static int b53_phy_read_status(struct phy_device *phydev) return 0; } -static const struct of_device_id b53_of_match_1[] = { - { .compatible = "brcm,bcm5325" }, - { .compatible = "brcm,bcm5395" }, - { .compatible = "brcm,bcm5397" }, - { .compatible = "brcm,bcm5398" }, - { /* sentinel */ }, -}; - -static const struct of_device_id b53_of_match_2[] = { - { .compatible = "brcm,bcm53115" }, - { .compatible = "brcm,bcm53125" }, - { .compatible = "brcm,bcm53128" }, - { /* sentinel */ }, -}; - -static const struct of_device_id b53_of_match_3[] = { - { .compatible = "brcm,bcm5365" }, - { /* sentinel */ }, -}; - /* BCM5325, BCM539x */ static struct phy_driver b53_phy_driver_id1 = { .phy_id = 0x0143bc00, @@ -392,10 +372,6 @@ static struct phy_driver b53_phy_driver_id1 = { .config_aneg = b53_phy_config_aneg, .config_init = b53_phy_config_init, .read_status = b53_phy_read_status, - .mdiodrv.driver = { - .name = "bcm539x", - .of_match_table = b53_of_match_1, - }, }; /* BCM53125, BCM53128 */ @@ -409,10 +385,6 @@ static struct phy_driver b53_phy_driver_id2 = { .config_aneg = b53_phy_config_aneg, .config_init = b53_phy_config_init, .read_status = b53_phy_read_status, - .mdiodrv.driver = { - .name = "bcm531xx", - .of_match_table = b53_of_match_2, - }, }; /* BCM5365 */ @@ -426,10 +398,6 @@ static struct phy_driver b53_phy_driver_id3 = { .config_aneg = b53_phy_config_aneg, .config_init = b53_phy_config_init, .read_status = b53_phy_read_status, - .mdiodrv.driver = { - .name = "bcm5365", - .of_match_table = b53_of_match_3, - }, }; int __init b53_phy_driver_register(void) diff --git a/lede/target/linux/generic/files/drivers/net/phy/b53/b53_mmap.c b/lede/target/linux/generic/files/drivers/net/phy/b53/b53_mmap.c index ab1895e9b5..0a21ff1de5 100644 --- a/lede/target/linux/generic/files/drivers/net/phy/b53/b53_mmap.c +++ b/lede/target/linux/generic/files/drivers/net/phy/b53/b53_mmap.c @@ -205,7 +205,7 @@ static int b53_mmap_probe(struct platform_device *pdev) if (!pdata) return -EINVAL; - dev = b53_switch_alloc(&pdev->dev, &b53_mmap_ops, pdata->regs); + dev = b53_swconfig_switch_alloc(&pdev->dev, &b53_mmap_ops, pdata->regs); if (!dev) return -ENOMEM; @@ -214,7 +214,7 @@ static int b53_mmap_probe(struct platform_device *pdev) platform_set_drvdata(pdev, dev); - return b53_switch_register(dev); + return b53_swconfig_switch_register(dev); } static int b53_mmap_remove(struct platform_device *pdev) diff --git a/lede/target/linux/generic/files/drivers/net/phy/b53/b53_priv.h b/lede/target/linux/generic/files/drivers/net/phy/b53/b53_priv.h index 37c17aeb25..e455c755bf 100644 --- a/lede/target/linux/generic/files/drivers/net/phy/b53/b53_priv.h +++ b/lede/target/linux/generic/files/drivers/net/phy/b53/b53_priv.h @@ -183,12 +183,12 @@ static inline struct b53_device *sw_to_b53(struct switch_dev *sw) return container_of(sw, struct b53_device, sw_dev); } -struct b53_device *b53_switch_alloc(struct device *base, struct b53_io_ops *ops, - void *priv); +struct b53_device *b53_swconfig_switch_alloc(struct device *base, struct b53_io_ops *ops, + void *priv); -int b53_switch_detect(struct b53_device *dev); +int b53_swconfig_switch_detect(struct b53_device *dev); -int b53_switch_register(struct b53_device *dev); +int b53_swconfig_switch_register(struct b53_device *dev); static inline void b53_switch_remove(struct b53_device *dev) { diff --git a/lede/target/linux/generic/files/drivers/net/phy/b53/b53_spi.c b/lede/target/linux/generic/files/drivers/net/phy/b53/b53_spi.c index efc8f7ee89..400454df18 100644 --- a/lede/target/linux/generic/files/drivers/net/phy/b53/b53_spi.c +++ b/lede/target/linux/generic/files/drivers/net/phy/b53/b53_spi.c @@ -288,14 +288,14 @@ static int b53_spi_probe(struct spi_device *spi) struct b53_device *dev; int ret; - dev = b53_switch_alloc(&spi->dev, &b53_spi_ops, spi); + dev = b53_swconfig_switch_alloc(&spi->dev, &b53_spi_ops, spi); if (!dev) return -ENOMEM; if (spi->dev.platform_data) dev->pdata = spi->dev.platform_data; - ret = b53_switch_register(dev); + ret = b53_swconfig_switch_register(dev); if (ret) return ret; diff --git a/lede/target/linux/generic/files/drivers/net/phy/b53/b53_srab.c b/lede/target/linux/generic/files/drivers/net/phy/b53/b53_srab.c index 012daa3a51..ead5209cf0 100644 --- a/lede/target/linux/generic/files/drivers/net/phy/b53/b53_srab.c +++ b/lede/target/linux/generic/files/drivers/net/phy/b53/b53_srab.c @@ -342,7 +342,7 @@ static int b53_srab_probe(struct platform_device *pdev) if (!pdata) return -EINVAL; - dev = b53_switch_alloc(&pdev->dev, &b53_srab_ops, pdata->regs); + dev = b53_swconfig_switch_alloc(&pdev->dev, &b53_srab_ops, pdata->regs); if (!dev) return -ENOMEM; @@ -351,7 +351,7 @@ static int b53_srab_probe(struct platform_device *pdev) platform_set_drvdata(pdev, dev); - return b53_switch_register(dev); + return b53_swconfig_switch_register(dev); } static int b53_srab_remove(struct platform_device *pdev) diff --git a/lede/target/linux/generic/files/drivers/net/phy/mvswitch.c b/lede/target/linux/generic/files/drivers/net/phy/mvswitch.c deleted file mode 100644 index bd3b9e1ad1..0000000000 --- a/lede/target/linux/generic/files/drivers/net/phy/mvswitch.c +++ /dev/null @@ -1,446 +0,0 @@ -/* - * Marvell 88E6060 switch driver - * Copyright (c) 2008 Felix Fietkau - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License v2 as published by the - * Free Software Foundation - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include "mvswitch.h" - -/* Undefine this to use trailer mode instead. - * I don't know if header mode works with all chips */ -#define HEADER_MODE 1 - -MODULE_DESCRIPTION("Marvell 88E6060 Switch driver"); -MODULE_AUTHOR("Felix Fietkau"); -MODULE_LICENSE("GPL"); - -#define MVSWITCH_MAGIC 0x88E6060 - -struct mvswitch_priv { - netdev_features_t orig_features; - u8 vlans[16]; -}; - -#define to_mvsw(_phy) ((struct mvswitch_priv *) (_phy)->priv) - -static inline u16 -r16(struct phy_device *phydev, int addr, int reg) -{ - struct mii_bus *bus = phydev->mdio.bus; - - return bus->read(bus, addr, reg); -} - -static inline void -w16(struct phy_device *phydev, int addr, int reg, u16 val) -{ - struct mii_bus *bus = phydev->mdio.bus; - - bus->write(bus, addr, reg, val); -} - - -static struct sk_buff * -mvswitch_mangle_tx(struct net_device *dev, struct sk_buff *skb) -{ - struct mvswitch_priv *priv; - char *buf = NULL; - u16 vid; - - priv = dev->phy_ptr; - if (unlikely(!priv)) - goto error; - - if (unlikely(skb->len < 16)) - goto error; - -#ifdef HEADER_MODE - if (__vlan_hwaccel_get_tag(skb, &vid)) - goto error; - - if (skb_cloned(skb) || (skb->len <= 62) || (skb_headroom(skb) < MV_HEADER_SIZE)) { - if (pskb_expand_head(skb, MV_HEADER_SIZE, (skb->len < 62 ? 62 - skb->len : 0), GFP_ATOMIC)) - goto error_expand; - if (skb->len < 62) - skb->len = 62; - } - buf = skb_push(skb, MV_HEADER_SIZE); -#else - if (__vlan_get_tag(skb, &vid)) - goto error; - - if (unlikely((vid > 15 || !priv->vlans[vid]))) - goto error; - - if (skb->len <= 64) { - if (pskb_expand_head(skb, 0, 64 + MV_TRAILER_SIZE - skb->len, GFP_ATOMIC)) - goto error_expand; - - buf = skb->data + 64; - skb->len = 64 + MV_TRAILER_SIZE; - } else { - if (skb_cloned(skb) || unlikely(skb_tailroom(skb) < 4)) { - if (pskb_expand_head(skb, 0, 4, GFP_ATOMIC)) - goto error_expand; - } - buf = skb_put(skb, 4); - } - - /* move the ethernet header 4 bytes forward, overwriting the vlan tag */ - memmove(skb->data + 4, skb->data, 12); - skb->data += 4; - skb->len -= 4; - skb->mac_header += 4; -#endif - - if (!buf) - goto error; - - -#ifdef HEADER_MODE - /* prepend the tag */ - *((__be16 *) buf) = cpu_to_be16( - ((vid << MV_HEADER_VLAN_S) & MV_HEADER_VLAN_M) | - ((priv->vlans[vid] << MV_HEADER_PORTS_S) & MV_HEADER_PORTS_M) - ); -#else - /* append the tag */ - *((__be32 *) buf) = cpu_to_be32(( - (MV_TRAILER_OVERRIDE << MV_TRAILER_FLAGS_S) | - ((priv->vlans[vid] & MV_TRAILER_PORTS_M) << MV_TRAILER_PORTS_S) - )); -#endif - - return skb; - -error_expand: - if (net_ratelimit()) - printk("%s: failed to expand/update skb for the switch\n", dev->name); - -error: - /* any errors? drop the packet! */ - dev_kfree_skb_any(skb); - return NULL; -} - -static void -mvswitch_mangle_rx(struct net_device *dev, struct sk_buff *skb) -{ - struct mvswitch_priv *priv; - unsigned char *buf; - int vlan = -1; - int i; - - priv = dev->phy_ptr; - if (WARN_ON_ONCE(!priv)) - return; - -#ifdef HEADER_MODE - buf = skb->data; - skb_pull(skb, MV_HEADER_SIZE); -#else - buf = skb->data + skb->len - MV_TRAILER_SIZE; - if (buf[0] != 0x80) - return; -#endif - - /* look for the vlan matching the incoming port */ - for (i = 0; i < ARRAY_SIZE(priv->vlans); i++) { - if ((1 << buf[1]) & priv->vlans[i]) - vlan = i; - } - - if (vlan == -1) - return; - - __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), vlan); -} - - -static int -mvswitch_wait_mask(struct phy_device *pdev, int addr, int reg, u16 mask, u16 val) -{ - int i = 100; - u16 r; - - do { - r = r16(pdev, addr, reg) & mask; - if (r == val) - return 0; - } while(--i > 0); - return -ETIMEDOUT; -} - -static int -mvswitch_config_init(struct phy_device *pdev) -{ - struct mvswitch_priv *priv = to_mvsw(pdev); - struct net_device *dev = pdev->attached_dev; - u8 vlmap = 0; - int i; - - if (!dev) - return -EINVAL; - - printk("%s: Marvell 88E6060 PHY driver attached.\n", dev->name); - linkmode_zero(pdev->supported); - linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT, pdev->supported); - linkmode_copy(pdev->advertising, pdev->supported); - dev->phy_ptr = priv; - pdev->irq = PHY_POLL; -#ifdef HEADER_MODE - dev->flags |= IFF_PROMISC; -#endif - - /* initialize default vlans */ - for (i = 0; i < MV_PORTS; i++) - priv->vlans[(i == MV_WANPORT ? 2 : 1)] |= (1 << i); - - /* before entering reset, disable all ports */ - for (i = 0; i < MV_PORTS; i++) - w16(pdev, MV_PORTREG(CONTROL, i), 0x00); - - msleep(2); /* wait for the status change to settle in */ - - /* put the ATU in reset */ - w16(pdev, MV_SWITCHREG(ATU_CTRL), MV_ATUCTL_RESET); - - i = mvswitch_wait_mask(pdev, MV_SWITCHREG(ATU_CTRL), MV_ATUCTL_RESET, 0); - if (i < 0) { - printk("%s: Timeout waiting for the switch to reset.\n", dev->name); - return i; - } - - /* set the ATU flags */ - w16(pdev, MV_SWITCHREG(ATU_CTRL), - MV_ATUCTL_NO_LEARN | - MV_ATUCTL_ATU_1K | - MV_ATUCTL_AGETIME(MV_ATUCTL_AGETIME_MIN) /* minimum without disabling ageing */ - ); - - /* initialize the cpu port */ - w16(pdev, MV_PORTREG(CONTROL, MV_CPUPORT), -#ifdef HEADER_MODE - MV_PORTCTRL_HEADER | -#else - MV_PORTCTRL_RXTR | - MV_PORTCTRL_TXTR | -#endif - MV_PORTCTRL_ENABLED - ); - /* wait for the phy change to settle in */ - msleep(2); - for (i = 0; i < MV_PORTS; i++) { - u8 pvid = 0; - int j; - - vlmap = 0; - - /* look for the matching vlan */ - for (j = 0; j < ARRAY_SIZE(priv->vlans); j++) { - if (priv->vlans[j] & (1 << i)) { - vlmap = priv->vlans[j]; - pvid = j; - } - } - /* leave port unconfigured if it's not part of a vlan */ - if (!vlmap) - continue; - - /* add the cpu port to the allowed destinations list */ - vlmap |= (1 << MV_CPUPORT); - - /* take port out of its own vlan destination map */ - vlmap &= ~(1 << i); - - /* apply vlan settings */ - w16(pdev, MV_PORTREG(VLANMAP, i), - MV_PORTVLAN_PORTS(vlmap) | - MV_PORTVLAN_ID(i) - ); - - /* re-enable port */ - w16(pdev, MV_PORTREG(CONTROL, i), - MV_PORTCTRL_ENABLED - ); - } - - w16(pdev, MV_PORTREG(VLANMAP, MV_CPUPORT), - MV_PORTVLAN_ID(MV_CPUPORT) - ); - - /* set the port association vector */ - for (i = 0; i <= MV_PORTS; i++) { - w16(pdev, MV_PORTREG(ASSOC, i), - MV_PORTASSOC_PORTS(1 << i) - ); - } - - /* init switch control */ - w16(pdev, MV_SWITCHREG(CTRL), - MV_SWITCHCTL_MSIZE | - MV_SWITCHCTL_DROP - ); - - dev->eth_mangle_rx = mvswitch_mangle_rx; - dev->eth_mangle_tx = mvswitch_mangle_tx; - priv->orig_features = dev->features; - -#ifdef HEADER_MODE - dev->priv_flags |= IFF_NO_IP_ALIGN; - dev->features |= NETIF_F_HW_VLAN_CTAG_RX | NETIF_F_HW_VLAN_CTAG_TX; -#else - dev->features |= NETIF_F_HW_VLAN_CTAG_RX; -#endif - - return 0; -} - -static int -mvswitch_read_status(struct phy_device *pdev) -{ - pdev->speed = SPEED_100; - pdev->duplex = DUPLEX_FULL; - pdev->link = 1; - - /* XXX ugly workaround: we can't force the switch - * to gracefully handle hosts moving from one port to another, - * so we have to regularly clear the ATU database */ - - /* wait for the ATU to become available */ - mvswitch_wait_mask(pdev, MV_SWITCHREG(ATU_OP), MV_ATUOP_INPROGRESS, 0); - - /* flush the ATU */ - w16(pdev, MV_SWITCHREG(ATU_OP), - MV_ATUOP_INPROGRESS | - MV_ATUOP_FLUSH_ALL - ); - - /* wait for operation to complete */ - mvswitch_wait_mask(pdev, MV_SWITCHREG(ATU_OP), MV_ATUOP_INPROGRESS, 0); - - return 0; -} - -static int -mvswitch_aneg_done(struct phy_device *phydev) -{ - return 1; /* Return any positive value */ -} - -static int -mvswitch_config_aneg(struct phy_device *phydev) -{ - return 0; -} - -static void -mvswitch_detach(struct phy_device *pdev) -{ - struct mvswitch_priv *priv = to_mvsw(pdev); - struct net_device *dev = pdev->attached_dev; - - if (!dev) - return; - - dev->phy_ptr = NULL; - dev->eth_mangle_rx = NULL; - dev->eth_mangle_tx = NULL; - dev->features = priv->orig_features; - dev->priv_flags &= ~IFF_NO_IP_ALIGN; -} - -static void -mvswitch_remove(struct phy_device *pdev) -{ - struct mvswitch_priv *priv = to_mvsw(pdev); - - kfree(priv); -} - -static int -mvswitch_probe(struct phy_device *pdev) -{ - struct mvswitch_priv *priv; - - priv = kzalloc(sizeof(struct mvswitch_priv), GFP_KERNEL); - if (priv == NULL) - return -ENOMEM; - - pdev->priv = priv; - - return 0; -} - -static int -mvswitch_fixup(struct phy_device *dev) -{ - struct mii_bus *bus = dev->mdio.bus; - u16 reg; - - if (dev->mdio.addr != 0x10) - return 0; - - reg = bus->read(bus, MV_PORTREG(IDENT, 0)) & MV_IDENT_MASK; - if (reg != MV_IDENT_VALUE) - return 0; - - dev->phy_id = MVSWITCH_MAGIC; - return 0; -} - - -static struct phy_driver mvswitch_driver = { - .name = "Marvell 88E6060", - .phy_id = MVSWITCH_MAGIC, - .phy_id_mask = 0xffffffff, - .features = PHY_BASIC_FEATURES, - .probe = &mvswitch_probe, - .remove = &mvswitch_remove, - .detach = &mvswitch_detach, - .config_init = &mvswitch_config_init, - .config_aneg = &mvswitch_config_aneg, - .aneg_done = &mvswitch_aneg_done, - .read_status = &mvswitch_read_status, -}; - -static int __init -mvswitch_init(void) -{ - phy_register_fixup_for_id(PHY_ANY_ID, mvswitch_fixup); - return phy_driver_register(&mvswitch_driver, THIS_MODULE); -} - -static void __exit -mvswitch_exit(void) -{ - phy_driver_unregister(&mvswitch_driver); -} - -module_init(mvswitch_init); -module_exit(mvswitch_exit); diff --git a/lede/target/linux/generic/files/drivers/net/phy/mvswitch.h b/lede/target/linux/generic/files/drivers/net/phy/mvswitch.h deleted file mode 100644 index ab2a1a126e..0000000000 --- a/lede/target/linux/generic/files/drivers/net/phy/mvswitch.h +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Marvell 88E6060 switch driver - * Copyright (c) 2008 Felix Fietkau - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License v2 as published by the - * Free Software Foundation - */ -#ifndef __MVSWITCH_H -#define __MVSWITCH_H - -#define MV_HEADER_SIZE 2 -#define MV_HEADER_PORTS_M 0x001f -#define MV_HEADER_PORTS_S 0 -#define MV_HEADER_VLAN_M 0xf000 -#define MV_HEADER_VLAN_S 12 - -#define MV_TRAILER_SIZE 4 -#define MV_TRAILER_PORTS_M 0x1f -#define MV_TRAILER_PORTS_S 16 -#define MV_TRAILER_FLAGS_S 24 -#define MV_TRAILER_OVERRIDE 0x80 - - -#define MV_PORTS 5 -#define MV_WANPORT 4 -#define MV_CPUPORT 5 - -#define MV_BASE 0x10 - -#define MV_PHYPORT_BASE (MV_BASE + 0x0) -#define MV_PHYPORT(_n) (MV_PHYPORT_BASE + (_n)) -#define MV_SWITCHPORT_BASE (MV_BASE + 0x8) -#define MV_SWITCHPORT(_n) (MV_SWITCHPORT_BASE + (_n)) -#define MV_SWITCHREGS (MV_BASE + 0xf) - -enum { - MV_PHY_CONTROL = 0x00, - MV_PHY_STATUS = 0x01, - MV_PHY_IDENT0 = 0x02, - MV_PHY_IDENT1 = 0x03, - MV_PHY_ANEG = 0x04, - MV_PHY_LINK_ABILITY = 0x05, - MV_PHY_ANEG_EXPAND = 0x06, - MV_PHY_XMIT_NEXTP = 0x07, - MV_PHY_LINK_NEXTP = 0x08, - MV_PHY_CONTROL1 = 0x10, - MV_PHY_STATUS1 = 0x11, - MV_PHY_INTR_EN = 0x12, - MV_PHY_INTR_STATUS = 0x13, - MV_PHY_INTR_PORT = 0x14, - MV_PHY_RECV_COUNTER = 0x16, - MV_PHY_LED_PARALLEL = 0x16, - MV_PHY_LED_STREAM = 0x17, - MV_PHY_LED_CTRL = 0x18, - MV_PHY_LED_OVERRIDE = 0x19, - MV_PHY_VCT_CTRL = 0x1a, - MV_PHY_VCT_STATUS = 0x1b, - MV_PHY_CONTROL2 = 0x1e -}; -#define MV_PHYREG(_type, _port) MV_PHYPORT(_port), MV_PHY_##_type - -enum { - MV_PORT_STATUS = 0x00, - MV_PORT_IDENT = 0x03, - MV_PORT_CONTROL = 0x04, - MV_PORT_VLANMAP = 0x06, - MV_PORT_ASSOC = 0x0b, - MV_PORT_RXCOUNT = 0x10, - MV_PORT_TXCOUNT = 0x11, -}; -#define MV_PORTREG(_type, _port) MV_SWITCHPORT(_port), MV_PORT_##_type - -enum { - MV_PORTCTRL_BLOCK = (1 << 0), - MV_PORTCTRL_LEARN = (2 << 0), - MV_PORTCTRL_ENABLED = (3 << 0), - MV_PORTCTRL_VLANTUN = (1 << 7), /* Enforce VLANs on packets */ - MV_PORTCTRL_RXTR = (1 << 8), /* Enable Marvell packet trailer for ingress */ - MV_PORTCTRL_HEADER = (1 << 11), /* Enable Marvell packet header mode for port */ - MV_PORTCTRL_TXTR = (1 << 14), /* Enable Marvell packet trailer for egress */ - MV_PORTCTRL_FORCEFL = (1 << 15), /* force flow control */ -}; - -#define MV_PORTVLAN_ID(_n) (((_n) & 0xf) << 12) -#define MV_PORTVLAN_PORTS(_n) ((_n) & 0x3f) - -#define MV_PORTASSOC_PORTS(_n) ((_n) & 0x1f) -#define MV_PORTASSOC_MONITOR (1 << 15) - -enum { - MV_SWITCH_MAC0 = 0x01, - MV_SWITCH_MAC1 = 0x02, - MV_SWITCH_MAC2 = 0x03, - MV_SWITCH_CTRL = 0x04, - MV_SWITCH_ATU_CTRL = 0x0a, - MV_SWITCH_ATU_OP = 0x0b, - MV_SWITCH_ATU_DATA = 0x0c, - MV_SWITCH_ATU_MAC0 = 0x0d, - MV_SWITCH_ATU_MAC1 = 0x0e, - MV_SWITCH_ATU_MAC2 = 0x0f, -}; -#define MV_SWITCHREG(_type) MV_SWITCHREGS, MV_SWITCH_##_type - -enum { - MV_SWITCHCTL_EEIE = (1 << 0), /* EEPROM interrupt enable */ - MV_SWITCHCTL_PHYIE = (1 << 1), /* PHY interrupt enable */ - MV_SWITCHCTL_ATUDONE= (1 << 2), /* ATU done interrupt enable */ - MV_SWITCHCTL_ATUIE = (1 << 3), /* ATU interrupt enable */ - MV_SWITCHCTL_CTRMODE= (1 << 8), /* statistics for rx and tx errors */ - MV_SWITCHCTL_RELOAD = (1 << 9), /* reload registers from eeprom */ - MV_SWITCHCTL_MSIZE = (1 << 10), /* increase maximum frame size */ - MV_SWITCHCTL_DROP = (1 << 13), /* discard frames with excessive collisions */ -}; - -enum { -#define MV_ATUCTL_AGETIME_MIN 16 -#define MV_ATUCTL_AGETIME_MAX 4080 -#define MV_ATUCTL_AGETIME(_n) ((((_n) / 16) & 0xff) << 4) - MV_ATUCTL_ATU_256 = (0 << 12), - MV_ATUCTL_ATU_512 = (1 << 12), - MV_ATUCTL_ATU_1K = (2 << 12), - MV_ATUCTL_ATUMASK = (3 << 12), - MV_ATUCTL_NO_LEARN = (1 << 14), - MV_ATUCTL_RESET = (1 << 15), -}; - -enum { -#define MV_ATUOP_DBNUM(_n) ((_n) & 0x0f) - - MV_ATUOP_NOOP = (0 << 12), - MV_ATUOP_FLUSH_ALL = (1 << 12), - MV_ATUOP_FLUSH_U = (2 << 12), - MV_ATUOP_LOAD_DB = (3 << 12), - MV_ATUOP_GET_NEXT = (4 << 12), - MV_ATUOP_FLUSH_DB = (5 << 12), - MV_ATUOP_FLUSH_DB_UU= (6 << 12), - - MV_ATUOP_INPROGRESS = (1 << 15), -}; - -#define MV_IDENT_MASK 0xfff0 -#define MV_IDENT_VALUE 0x0600 - -#endif diff --git a/lede/target/linux/generic/files/drivers/net/phy/psb6970.c b/lede/target/linux/generic/files/drivers/net/phy/psb6970.c index fb6ed0e204..2587b99913 100644 --- a/lede/target/linux/generic/files/drivers/net/phy/psb6970.c +++ b/lede/target/linux/generic/files/drivers/net/phy/psb6970.c @@ -60,11 +60,13 @@ struct psb6970_priv { struct mutex reg_mutex; /* all fields below are cleared on reset */ - bool vlan; - u16 vlan_id[PSB6970_MAX_VLANS]; - u8 vlan_table[PSB6970_MAX_VLANS]; - u8 vlan_tagged; - u16 pvid[PSB6970_NUM_PORTS]; + struct_group(psb6970_priv_volatile, + bool vlan; + u16 vlan_id[PSB6970_MAX_VLANS]; + u8 vlan_table[PSB6970_MAX_VLANS]; + u8 vlan_tagged; + u16 pvid[PSB6970_NUM_PORTS]; + ); }; #define to_psb6970(_dev) container_of(_dev, struct psb6970_priv, dev) @@ -272,8 +274,8 @@ static int psb6970_reset_switch(struct switch_dev *dev) mutex_lock(&priv->reg_mutex); - memset(&priv->vlan, 0, sizeof(struct psb6970_priv) - - offsetof(struct psb6970_priv, vlan)); + memset(&priv->psb6970_priv_volatile, 0, + sizeof(priv->psb6970_priv_volatile)); for (i = 0; i < PSB6970_MAX_VLANS; i++) priv->vlan_id[i] = i; @@ -307,7 +309,6 @@ static const struct switch_dev_ops psb6970_ops = { static int psb6970_config_init(struct phy_device *pdev) { struct psb6970_priv *priv; - struct net_device *dev = pdev->attached_dev; struct switch_dev *swdev; int ret; diff --git a/lede/target/linux/generic/files/drivers/net/phy/rtl8366_smi.c b/lede/target/linux/generic/files/drivers/net/phy/rtl8366_smi.c index e8375e5147..a26fd204cb 100644 --- a/lede/target/linux/generic/files/drivers/net/phy/rtl8366_smi.c +++ b/lede/target/linux/generic/files/drivers/net/phy/rtl8366_smi.c @@ -256,7 +256,7 @@ static int __rtl8366_smi_read_reg(struct rtl8366_smi *smi, u32 addr, u32 *data) int __rtl8366_mdio_read_reg(struct rtl8366_smi *smi, u32 addr, u32 *data) { - u32 phy_id = MDC_REALTEK_PHY_ADDR; + u32 phy_id = smi->phy_id; struct mii_bus *mbus = smi->ext_mbus; BUG_ON(in_interrupt()); @@ -293,7 +293,7 @@ int __rtl8366_mdio_read_reg(struct rtl8366_smi *smi, u32 addr, u32 *data) static int __rtl8366_mdio_write_reg(struct rtl8366_smi *smi, u32 addr, u32 data) { - u32 phy_id = MDC_REALTEK_PHY_ADDR; + u32 phy_id = smi->phy_id; struct mii_bus *mbus = smi->ext_mbus; BUG_ON(in_interrupt()); @@ -590,7 +590,7 @@ static int rtl8366_set_pvid(struct rtl8366_smi *smi, unsigned port, return -ENOSPC; } -int rtl8366_enable_vlan(struct rtl8366_smi *smi, int enable) +static int rtl8366_smi_enable_vlan(struct rtl8366_smi *smi, int enable) { int err; @@ -607,9 +607,8 @@ int rtl8366_enable_vlan(struct rtl8366_smi *smi, int enable) return err; } -EXPORT_SYMBOL_GPL(rtl8366_enable_vlan); -static int rtl8366_enable_vlan4k(struct rtl8366_smi *smi, int enable) +static int rtl8366_smi_enable_vlan4k(struct rtl8366_smi *smi, int enable) { int err; @@ -629,7 +628,7 @@ static int rtl8366_enable_vlan4k(struct rtl8366_smi *smi, int enable) return 0; } -int rtl8366_enable_all_ports(struct rtl8366_smi *smi, int enable) +static int rtl8366_smi_enable_all_ports(struct rtl8366_smi *smi, int enable) { int port; int err; @@ -642,16 +641,15 @@ int rtl8366_enable_all_ports(struct rtl8366_smi *smi, int enable) return 0; } -EXPORT_SYMBOL_GPL(rtl8366_enable_all_ports); -int rtl8366_reset_vlan(struct rtl8366_smi *smi) +static int rtl8366_smi_reset_vlan(struct rtl8366_smi *smi) { struct rtl8366_vlan_mc vlanmc; int err; int i; - rtl8366_enable_vlan(smi, 0); - rtl8366_enable_vlan4k(smi, 0); + rtl8366_smi_enable_vlan(smi, 0); + rtl8366_smi_enable_vlan4k(smi, 0); /* clear VLAN member configurations */ vlanmc.vid = 0; @@ -667,14 +665,13 @@ int rtl8366_reset_vlan(struct rtl8366_smi *smi) return 0; } -EXPORT_SYMBOL_GPL(rtl8366_reset_vlan); static int rtl8366_init_vlan(struct rtl8366_smi *smi) { int port; int err; - err = rtl8366_reset_vlan(smi); + err = rtl8366_smi_reset_vlan(smi); if (err) return err; @@ -695,7 +692,7 @@ static int rtl8366_init_vlan(struct rtl8366_smi *smi) return err; } - return rtl8366_enable_vlan(smi, 1); + return rtl8366_smi_enable_vlan(smi, 1); } #ifdef CONFIG_RTL8366_SMI_DEBUG_FS @@ -1073,15 +1070,15 @@ int rtl8366_sw_reset_switch(struct switch_dev *dev) if (err) return err; - err = rtl8366_reset_vlan(smi); + err = rtl8366_smi_reset_vlan(smi); if (err) return err; - err = rtl8366_enable_vlan(smi, 1); + err = rtl8366_smi_enable_vlan(smi, 1); if (err) return err; - return rtl8366_enable_all_ports(smi, 1); + return rtl8366_smi_enable_all_ports(smi, 1); } EXPORT_SYMBOL_GPL(rtl8366_sw_reset_switch); @@ -1343,9 +1340,9 @@ int rtl8366_sw_set_vlan_enable(struct switch_dev *dev, return -EINVAL; if (attr->ofs == 1) - err = rtl8366_enable_vlan(smi, val->value.i); + err = rtl8366_smi_enable_vlan(smi, val->value.i); else - err = rtl8366_enable_vlan4k(smi, val->value.i); + err = rtl8366_smi_enable_vlan4k(smi, val->value.i); return err; } @@ -1494,7 +1491,7 @@ int rtl8366_smi_init(struct rtl8366_smi *smi) goto err_free_sck; } - err = rtl8366_enable_all_ports(smi, 1); + err = rtl8366_smi_enable_all_ports(smi, 1); if (err) goto err_free_sck; @@ -1550,6 +1547,9 @@ int rtl8366_smi_probe_of(struct platform_device *pdev, struct rtl8366_smi *smi) goto try_gpio; } + if (of_property_read_u32(np, "phy-id", &smi->phy_id)) + smi->phy_id = MDC_REALTEK_PHY_ADDR; + return 0; try_gpio: @@ -1589,6 +1589,7 @@ int rtl8366_smi_probe_plat(struct platform_device *pdev, struct rtl8366_smi *smi smi->gpio_sda = pdata->gpio_sda; smi->gpio_sck = pdata->gpio_sck; smi->hw_reset = pdata->hw_reset; + smi->phy_id = MDC_REALTEK_PHY_ADDR; return 0; } diff --git a/lede/target/linux/generic/files/drivers/net/phy/rtl8366_smi.h b/lede/target/linux/generic/files/drivers/net/phy/rtl8366_smi.h index d1d988a372..3fcae81fa4 100644 --- a/lede/target/linux/generic/files/drivers/net/phy/rtl8366_smi.h +++ b/lede/target/linux/generic/files/drivers/net/phy/rtl8366_smi.h @@ -63,6 +63,7 @@ struct rtl8366_smi { u16 dbg_reg; u8 dbg_vlan_4k_page; #endif + u32 phy_id; struct mii_bus *ext_mbus; }; @@ -115,10 +116,6 @@ int rtl8366_smi_write_reg_noack(struct rtl8366_smi *smi, u32 addr, u32 data); int rtl8366_smi_read_reg(struct rtl8366_smi *smi, u32 addr, u32 *data); int rtl8366_smi_rmwr(struct rtl8366_smi *smi, u32 addr, u32 mask, u32 data); -int rtl8366_reset_vlan(struct rtl8366_smi *smi); -int rtl8366_enable_vlan(struct rtl8366_smi *smi, int enable); -int rtl8366_enable_all_ports(struct rtl8366_smi *smi, int enable); - #ifdef CONFIG_RTL8366_SMI_DEBUG_FS int rtl8366_debugfs_open(struct inode *inode, struct file *file); #endif diff --git a/lede/target/linux/generic/files/drivers/net/phy/rtl8367.c b/lede/target/linux/generic/files/drivers/net/phy/rtl8367.c index 7f0569d038..b14b63e036 100644 --- a/lede/target/linux/generic/files/drivers/net/phy/rtl8367.c +++ b/lede/target/linux/generic/files/drivers/net/phy/rtl8367.c @@ -1641,7 +1641,7 @@ static int rtl8367_switch_init(struct rtl8366_smi *smi) int err; dev->name = "RTL8367"; - dev->cpu_port = RTL8367_CPU_PORT_NUM; + dev->cpu_port = smi->cpu_port; dev->ports = RTL8367_NUM_PORTS; dev->vlans = RTL8367_NUM_VIDS; dev->ops = &rtl8367_sw_ops; @@ -1722,6 +1722,11 @@ static int rtl8367_detect(struct rtl8366_smi *smi) dev_info(smi->parent, "RTL%s ver. %u chip found\n", chip_name, rtl_ver & RTL8367_RTL_VER_MASK); + if (of_property_present(smi->parent->of_node, "realtek,extif1")) + smi->cpu_port = RTL8367_CPU_PORT_NUM - 1; + + dev_info(smi->parent, "CPU port: %u\n", smi->cpu_port); + return 0; } diff --git a/lede/target/linux/generic/files/drivers/net/phy/rtl8367b.c b/lede/target/linux/generic/files/drivers/net/phy/rtl8367b.c index cd0d58cbfa..04c790e924 100644 --- a/lede/target/linux/generic/files/drivers/net/phy/rtl8367b.c +++ b/lede/target/linux/generic/files/drivers/net/phy/rtl8367b.c @@ -1583,6 +1583,13 @@ static int rtl8367b_detect(struct rtl8366_smi *smi) dev_info(smi->parent, "RTL%s chip found\n", chip_name); + if (of_property_present(smi->parent->of_node, "realtek,extif2")) + smi->cpu_port = RTL8367B_CPU_PORT_NUM + 2; + else if (of_property_present(smi->parent->of_node, "realtek,extif1") && (chip_ver != 0x1010)) /* for the RTL8367R-VB chip, extif1 corresponds to cpu_port 5 */ + smi->cpu_port = RTL8367B_CPU_PORT_NUM + 1; + + dev_info(smi->parent, "CPU port: %u\n", smi->cpu_port); + return 0; } @@ -1621,9 +1628,7 @@ static int rtl8367b_probe(struct platform_device *pdev) smi->cmd_write = 0xb8; smi->ops = &rtl8367b_smi_ops; smi->num_ports = RTL8367B_NUM_PORTS; - if (of_property_read_u32(pdev->dev.of_node, "cpu_port", &smi->cpu_port) - || smi->cpu_port >= smi->num_ports) - smi->cpu_port = RTL8367B_CPU_PORT_NUM; + smi->cpu_port = RTL8367B_CPU_PORT_NUM; smi->num_vlan_mc = RTL8367B_NUM_VLANS; smi->mib_counters = rtl8367b_mib_counters; smi->num_mib_counters = ARRAY_SIZE(rtl8367b_mib_counters); diff --git a/lede/target/linux/generic/files/drivers/net/phy/swconfig.c b/lede/target/linux/generic/files/drivers/net/phy/swconfig.c index a734e57608..5fa2b147c6 100644 --- a/lede/target/linux/generic/files/drivers/net/phy/swconfig.c +++ b/lede/target/linux/generic/files/drivers/net/phy/swconfig.c @@ -1054,6 +1054,9 @@ static struct genl_family switch_fam = { .module = THIS_MODULE, .ops = swconfig_ops, .n_ops = ARRAY_SIZE(swconfig_ops), +#if LINUX_VERSION_CODE > KERNEL_VERSION(6,0,0) + .resv_start_op = SWITCH_CMD_SET_VLAN + 1, +#endif }; #ifdef CONFIG_OF diff --git a/lede/target/linux/generic/files/drivers/net/phy/swconfig_leds.c b/lede/target/linux/generic/files/drivers/net/phy/swconfig_leds.c index 767d9221b4..1d309c046c 100644 --- a/lede/target/linux/generic/files/drivers/net/phy/swconfig_leds.c +++ b/lede/target/linux/generic/files/drivers/net/phy/swconfig_leds.c @@ -85,7 +85,7 @@ swconfig_trig_update_port_mask(struct led_trigger *trigger) sw_trig = (void *) trigger; port_mask = 0; -#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0) +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,16,0) spin_lock(&trigger->leddev_list_lock); #else read_lock(&trigger->leddev_list_lock); @@ -102,11 +102,12 @@ swconfig_trig_update_port_mask(struct led_trigger *trigger) read_unlock(&trig_data->lock); } } -#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0) +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,16,0) spin_unlock(&trigger->leddev_list_lock); #else read_unlock(&trigger->leddev_list_lock); #endif + sw_trig->port_mask = port_mask; if (port_mask) @@ -425,7 +426,7 @@ swconfig_trig_update_leds(struct switch_led_trigger *sw_trig) struct led_trigger *trigger; trigger = &sw_trig->trig; -#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0) +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,16,0) spin_lock(&trigger->leddev_list_lock); #else read_lock(&trigger->leddev_list_lock); @@ -436,7 +437,7 @@ swconfig_trig_update_leds(struct switch_led_trigger *sw_trig) led_cdev = list_entry(entry, struct led_classdev, trig_list); swconfig_trig_led_event(sw_trig, led_cdev); } -#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0) +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,16,0) spin_unlock(&trigger->leddev_list_lock); #else read_unlock(&trigger->leddev_list_lock); diff --git a/lede/target/linux/generic/files/drivers/platform/mikrotik/Kconfig b/lede/target/linux/generic/files/drivers/platform/mikrotik/Kconfig index 7499ba1e1c..32ef8f29de 100644 --- a/lede/target/linux/generic/files/drivers/platform/mikrotik/Kconfig +++ b/lede/target/linux/generic/files/drivers/platform/mikrotik/Kconfig @@ -1,6 +1,5 @@ menuconfig MIKROTIK bool "Platform support for MikroTik RouterBoard virtual devices" - default n help Say Y here to get to see options for the MikroTik RouterBoard platform. This option alone does not add any kernel code. @@ -16,4 +15,10 @@ config MIKROTIK_RB_SYSFS help This driver exposes RouterBoot configuration in sysfs. +config NVMEM_LAYOUT_MIKROTIK + tristate "RouterBoot NVMEM layout support" + depends on NVMEM_LAYOUTS + help + This driver exposes MikroTik hard_config via NVMEM layout. + endif # MIKROTIK diff --git a/lede/target/linux/generic/files/drivers/platform/mikrotik/Makefile b/lede/target/linux/generic/files/drivers/platform/mikrotik/Makefile index a232e1a9e8..164b23b701 100644 --- a/lede/target/linux/generic/files/drivers/platform/mikrotik/Makefile +++ b/lede/target/linux/generic/files/drivers/platform/mikrotik/Makefile @@ -2,3 +2,4 @@ # Makefile for MikroTik RouterBoard platform specific drivers # obj-$(CONFIG_MIKROTIK_RB_SYSFS) += routerboot.o rb_hardconfig.o rb_softconfig.o +obj-$(CONFIG_NVMEM_LAYOUT_MIKROTIK) += rb_nvmem.o diff --git a/lede/target/linux/generic/files/drivers/platform/mikrotik/rb_hardconfig.c b/lede/target/linux/generic/files/drivers/platform/mikrotik/rb_hardconfig.c index e6a6928896..78e39a7f94 100644 --- a/lede/target/linux/generic/files/drivers/platform/mikrotik/rb_hardconfig.c +++ b/lede/target/linux/generic/files/drivers/platform/mikrotik/rb_hardconfig.c @@ -37,29 +37,12 @@ #include #include +#include "rb_hardconfig.h" #include "routerboot.h" -#define RB_HARDCONFIG_VER "0.06" +#define RB_HARDCONFIG_VER "0.07" #define RB_HC_PR_PFX "[rb_hardconfig] " -/* ID values for hardware settings */ -#define RB_ID_FLASH_INFO 0x03 -#define RB_ID_MAC_ADDRESS_PACK 0x04 -#define RB_ID_BOARD_PRODUCT_CODE 0x05 -#define RB_ID_BIOS_VERSION 0x06 -#define RB_ID_SDRAM_TIMINGS 0x08 -#define RB_ID_DEVICE_TIMINGS 0x09 -#define RB_ID_SOFTWARE_ID 0x0A -#define RB_ID_SERIAL_NUMBER 0x0B -#define RB_ID_MEMORY_SIZE 0x0D -#define RB_ID_MAC_ADDRESS_COUNT 0x0E -#define RB_ID_HW_OPTIONS 0x15 -#define RB_ID_WLAN_DATA 0x16 -#define RB_ID_BOARD_IDENTIFIER 0x17 -#define RB_ID_PRODUCT_NAME 0x21 -#define RB_ID_DEFCONF 0x26 -#define RB_ID_BOARD_REVISION 0x27 - /* Bit definitions for hardware options */ #define RB_HW_OPT_NO_UART BIT(0) #define RB_HW_OPT_HAS_VOLTAGE BIT(1) @@ -676,10 +659,9 @@ static ssize_t hc_wlan_data_bin_read(struct file *filp, struct kobject *kobj, return count; } -int __init rb_hardconfig_init(struct kobject *rb_kobj) +int rb_hardconfig_init(struct kobject *rb_kobj, struct mtd_info *mtd) { struct kobject *hc_wlan_kobj; - struct mtd_info *mtd; size_t bytes_read, buflen, outlen; const u8 *buf; void *outbuf; @@ -690,20 +672,19 @@ int __init rb_hardconfig_init(struct kobject *rb_kobj) hc_kobj = NULL; hc_wlan_kobj = NULL; - // TODO allow override - mtd = get_mtd_device_nm(RB_MTD_HARD_CONFIG); - if (IS_ERR(mtd)) + ret = __get_mtd_device(mtd); + if (ret) return -ENODEV; hc_buflen = mtd->size; hc_buf = kmalloc(hc_buflen, GFP_KERNEL); if (!hc_buf) { - put_mtd_device(mtd); + __put_mtd_device(mtd); return -ENOMEM; } ret = mtd_read(mtd, 0, hc_buflen, &bytes_read, hc_buf); - put_mtd_device(mtd); + __put_mtd_device(mtd); if (ret) goto fail; @@ -818,8 +799,10 @@ fail: return ret; } -void __exit rb_hardconfig_exit(void) +void rb_hardconfig_exit(void) { kobject_put(hc_kobj); + hc_kobj = NULL; kfree(hc_buf); + hc_buf = NULL; } diff --git a/lede/target/linux/generic/files/drivers/platform/mikrotik/rb_hardconfig.h b/lede/target/linux/generic/files/drivers/platform/mikrotik/rb_hardconfig.h new file mode 100644 index 0000000000..328f4fe3c3 --- /dev/null +++ b/lede/target/linux/generic/files/drivers/platform/mikrotik/rb_hardconfig.h @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Common definitions for MikroTik RouterBoot hard config data. + * + * Copyright (C) 2020 Thibaut VARÈNE + * + * Some constant defines extracted from routerboot.{c,h} by Gabor Juhos + * + */ + +#ifndef _ROUTERBOOT_HARD_CONFIG_H_ +#define _ROUTERBOOT_HARD_CONFIG_H_ + +/* ID values for hardware settings */ +#define RB_ID_FLASH_INFO 0x03 +#define RB_ID_MAC_ADDRESS_PACK 0x04 +#define RB_ID_BOARD_PRODUCT_CODE 0x05 +#define RB_ID_BIOS_VERSION 0x06 +#define RB_ID_SDRAM_TIMINGS 0x08 +#define RB_ID_DEVICE_TIMINGS 0x09 +#define RB_ID_SOFTWARE_ID 0x0A +#define RB_ID_SERIAL_NUMBER 0x0B +#define RB_ID_MEMORY_SIZE 0x0D +#define RB_ID_MAC_ADDRESS_COUNT 0x0E +#define RB_ID_HW_OPTIONS 0x15 +#define RB_ID_WLAN_DATA 0x16 +#define RB_ID_BOARD_IDENTIFIER 0x17 +#define RB_ID_PRODUCT_NAME 0x21 +#define RB_ID_DEFCONF 0x26 +#define RB_ID_BOARD_REVISION 0x27 + +#endif /* _ROUTERBOOT_HARD_CONFIG_H_ */ diff --git a/lede/target/linux/generic/files/drivers/platform/mikrotik/rb_nvmem.c b/lede/target/linux/generic/files/drivers/platform/mikrotik/rb_nvmem.c new file mode 100644 index 0000000000..6f785ce7d1 --- /dev/null +++ b/lede/target/linux/generic/files/drivers/platform/mikrotik/rb_nvmem.c @@ -0,0 +1,230 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * NVMEM layout driver for MikroTik Routerboard hard config cells + * + * Copyright (C) 2024 Robert Marko + * Based on the sysfs hard config driver by Thibaut VARÈNE + * Comments documenting the format carried over from routerboot.c + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "rb_hardconfig.h" +#include "routerboot.h" + +#define TLV_TAG_MASK GENMASK(15, 0) +#define TLV_LEN_MASK GENMASK(31, 16) + +static const char *rb_tlv_cell_name(u16 tag) +{ + switch (tag) { + case RB_ID_FLASH_INFO: + return "flash-info"; + case RB_ID_MAC_ADDRESS_PACK: + return "base-mac-address"; + case RB_ID_BOARD_PRODUCT_CODE: + return "board-product-code"; + case RB_ID_BIOS_VERSION: + return "booter-version"; + case RB_ID_SERIAL_NUMBER: + return "board-serial"; + case RB_ID_MEMORY_SIZE: + return "mem-size"; + case RB_ID_MAC_ADDRESS_COUNT: + return "mac-count"; + case RB_ID_HW_OPTIONS: + return "hw-options"; + case RB_ID_WLAN_DATA: + return "wlan-data"; + case RB_ID_BOARD_IDENTIFIER: + return "board-identifier"; + case RB_ID_PRODUCT_NAME: + return "product-name"; + case RB_ID_DEFCONF: + return "defconf"; + case RB_ID_BOARD_REVISION: + return "board-revision"; + default: + break; + } + + return NULL; +} + +static int rb_tlv_mac_read_cb(void *priv, const char *id, int index, + unsigned int offset, void *buf, + size_t bytes) +{ + if (index < 0) + return -EINVAL; + + if (!is_valid_ether_addr(buf)) + return -EINVAL; + + eth_addr_add(buf, index); + + return 0; +} + +static nvmem_cell_post_process_t rb_tlv_read_cb(u16 tag) +{ + switch (tag) { + case RB_ID_MAC_ADDRESS_PACK: + return &rb_tlv_mac_read_cb; + default: + break; + } + + return NULL; +} + +static int rb_add_cells(struct device *dev, struct nvmem_device *nvmem, + const size_t data_len, u8 *data) +{ + u32 node, offset = sizeof(RB_MAGIC_HARD); + struct nvmem_cell_info cell = {}; + struct device_node *layout; + u16 tlv_tag, tlv_len; + int ret; + + layout = of_nvmem_layout_get_container(nvmem); + if (!layout) + return -ENOENT; + + /* + * Routerboot tag nodes are u32 values: + * - The low nibble is the tag identification number, + * - The high nibble is the tag payload length (node excluded) in bytes. + * Tag nodes are CPU-endian. + * Tag nodes are 32bit-aligned. + * + * The payload immediately follows the tag node. + * Payload offset will always be aligned. while length may not end on 32bit + * boundary (the only known case is when parsing ERD data). + * The payload is CPU-endian when applicable. + * Tag nodes are not ordered (by ID) on flash. + */ + while ((offset + sizeof(node)) <= data_len) { + node = *((const u32 *) (data + offset)); + /* Tag list ends with null node */ + if (!node) + break; + + tlv_tag = FIELD_GET(TLV_TAG_MASK, node); + tlv_len = FIELD_GET(TLV_LEN_MASK, node); + + offset += sizeof(node); + if (offset + tlv_len > data_len) { + dev_err(dev, "Out of bounds field (0x%x bytes at 0x%x)\n", + tlv_len, offset); + break; + } + + cell.name = rb_tlv_cell_name(tlv_tag); + if (!cell.name) + goto skip; + + cell.offset = offset; + /* + * MikroTik stores MAC-s with length of 8 bytes, + * but kernel expects it to be ETH_ALEN (6 bytes), + * so we need to make sure that is the case. + */ + if (tlv_tag == RB_ID_MAC_ADDRESS_PACK) + cell.bytes = ETH_ALEN; + else + cell.bytes = tlv_len; + cell.np = of_get_child_by_name(layout, cell.name); + cell.read_post_process = rb_tlv_read_cb(tlv_tag); + + ret = nvmem_add_one_cell(nvmem, &cell); + if (ret) { + of_node_put(layout); + return ret; + } + + /* + * The only known situation where len may not end on 32bit + * boundary is within ERD data. Since we're only extracting + * one tag (the first and only one) from that data, we should + * never need to forcefully ALIGN(). Do it anyway, this is not a + * performance path. + */ +skip: + offset += ALIGN(tlv_len, sizeof(offset)); + } + + of_node_put(layout); + + return 0; +} + +static int rb_parse_table(struct nvmem_layout *layout) +{ + struct nvmem_device *nvmem = layout->nvmem; + struct device *dev = &layout->dev; + size_t mtd_size; + u8 *data; + u32 hdr; + int ret; + + ret = nvmem_device_read(nvmem, 0, sizeof(hdr), &hdr); + if (ret < 0) + return ret; + + if (hdr != RB_MAGIC_HARD) { + dev_err(dev, "Invalid header\n"); + return -EINVAL; + } + + mtd_size = nvmem_dev_size(nvmem); + + data = devm_kmalloc(dev, mtd_size, GFP_KERNEL); + if (!data) + return -ENOMEM; + + ret = nvmem_device_read(nvmem, 0, mtd_size, data); + if (ret != mtd_size) + return ret; + + return rb_add_cells(dev, nvmem, mtd_size, data); +} + +static int rb_nvmem_probe(struct nvmem_layout *layout) +{ + layout->add_cells = rb_parse_table; + + return nvmem_layout_register(layout); +} + +static void rb_nvmem_remove(struct nvmem_layout *layout) +{ + nvmem_layout_unregister(layout); +} + +static const struct of_device_id rb_nvmem_of_match_table[] = { + { .compatible = "mikrotik,routerboot-nvmem", }, + {}, +}; +MODULE_DEVICE_TABLE(of, rb_nvmem_of_match_table); + +static struct nvmem_layout_driver rb_nvmem_layout = { + .probe = rb_nvmem_probe, + .remove = rb_nvmem_remove, + .driver = { + .owner = THIS_MODULE, + .name = "rb_nvmem", + .of_match_table = rb_nvmem_of_match_table, + }, +}; +module_nvmem_layout_driver(rb_nvmem_layout); + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Robert Marko "); +MODULE_DESCRIPTION("NVMEM layout driver for MikroTik Routerboard hard config cells"); diff --git a/lede/target/linux/generic/files/drivers/platform/mikrotik/rb_softconfig.c b/lede/target/linux/generic/files/drivers/platform/mikrotik/rb_softconfig.c index 070bd32d5a..5acff6aa91 100644 --- a/lede/target/linux/generic/files/drivers/platform/mikrotik/rb_softconfig.c +++ b/lede/target/linux/generic/files/drivers/platform/mikrotik/rb_softconfig.c @@ -56,23 +56,12 @@ #include "routerboot.h" -#define RB_SOFTCONFIG_VER "0.03" +#define RB_SOFTCONFIG_VER "0.05" #define RB_SC_PR_PFX "[rb_softconfig] " -/* - * mtd operations before 4.17 are asynchronous, not handled by this code - * Also make the driver act read-only if 4K_SECTORS are not enabled, since they - * are require to handle partial erasing of the small soft_config partition. - */ -#if defined(CONFIG_MTD_SPI_NOR_USE_4K_SECTORS) - #define RB_SC_HAS_WRITE_SUPPORT true - #define RB_SC_WMODE S_IWUSR - #define RB_SC_RMODE S_IRUSR -#else - #define RB_SC_HAS_WRITE_SUPPORT false - #define RB_SC_WMODE 0 - #define RB_SC_RMODE S_IRUSR -#endif +#define RB_SC_HAS_WRITE_SUPPORT true +#define RB_SC_WMODE S_IWUSR +#define RB_SC_RMODE S_IRUSR /* ID values for software settings */ #define RB_SCID_UART_SPEED 0x01 // u32*1 @@ -705,9 +694,8 @@ mtdfail: static struct kobj_attribute sc_kattrcommit = __ATTR(commit, RB_SC_RMODE|RB_SC_WMODE, sc_commit_show, sc_commit_store); -int __init rb_softconfig_init(struct kobject *rb_kobj) +int rb_softconfig_init(struct kobject *rb_kobj, struct mtd_info *mtd) { - struct mtd_info *mtd; size_t bytes_read, buflen; const u8 *buf; int i, ret; @@ -716,20 +704,19 @@ int __init rb_softconfig_init(struct kobject *rb_kobj) sc_buf = NULL; sc_kobj = NULL; - // TODO allow override - mtd = get_mtd_device_nm(RB_MTD_SOFT_CONFIG); - if (IS_ERR(mtd)) + ret = __get_mtd_device(mtd); + if (ret) return -ENODEV; sc_buflen = mtd->size; sc_buf = kmalloc(sc_buflen, GFP_KERNEL); if (!sc_buf) { - put_mtd_device(mtd); + __put_mtd_device(mtd); return -ENOMEM; } ret = mtd_read(mtd, 0, sc_buflen, &bytes_read, sc_buf); - put_mtd_device(mtd); + __put_mtd_device(mtd); if (ret) goto fail; @@ -799,8 +786,10 @@ fail: return ret; } -void __exit rb_softconfig_exit(void) +void rb_softconfig_exit(void) { kobject_put(sc_kobj); + sc_kobj = NULL; kfree(sc_buf); + sc_buf = NULL; } diff --git a/lede/target/linux/generic/files/drivers/platform/mikrotik/routerboot.c b/lede/target/linux/generic/files/drivers/platform/mikrotik/routerboot.c index 4c8c0bfac5..96f2460916 100644 --- a/lede/target/linux/generic/files/drivers/platform/mikrotik/routerboot.c +++ b/lede/target/linux/generic/files/drivers/platform/mikrotik/routerboot.c @@ -13,6 +13,7 @@ #include #include #include +#include #include "routerboot.h" @@ -160,25 +161,57 @@ fail: return ret; } +static void routerboot_mtd_notifier_add(struct mtd_info *mtd) +{ + /* Currently routerboot is only known to live on NOR flash */ + if (mtd->type != MTD_NORFLASH) + return; + + /* + * We ignore the following return values and always register. + * These init() routines are designed so that their failed state is + * always manageable by the corresponding exit() calls. + * Notifier is called with MTD mutex held: use __get/__put variants. + * TODO: allow partition names override + */ + if (!strcmp(mtd->name, RB_MTD_HARD_CONFIG)) + rb_hardconfig_init(rb_kobj, mtd); + else if (!strcmp(mtd->name, RB_MTD_SOFT_CONFIG)) + rb_softconfig_init(rb_kobj, mtd); +} + +static void routerboot_mtd_notifier_remove(struct mtd_info *mtd) +{ + if (mtd->type != MTD_NORFLASH) + return; + + if (!strcmp(mtd->name, RB_MTD_HARD_CONFIG)) + rb_hardconfig_exit(); + else if (!strcmp(mtd->name, RB_MTD_SOFT_CONFIG)) + rb_softconfig_exit(); +} + +/* Note: using a notifier prevents qualifying init()/exit() functions with __init/__exit */ +static struct mtd_notifier routerboot_mtd_notifier = { + .add = routerboot_mtd_notifier_add, + .remove = routerboot_mtd_notifier_remove, +}; + static int __init routerboot_init(void) { rb_kobj = kobject_create_and_add("mikrotik", firmware_kobj); if (!rb_kobj) return -ENOMEM; - /* - * We ignore the following return values and always register. - * These init() routines are designed so that their failed state is - * always manageable by the corresponding exit() calls. - */ - rb_hardconfig_init(rb_kobj); - rb_softconfig_init(rb_kobj); + register_mtd_user(&routerboot_mtd_notifier); return 0; } static void __exit routerboot_exit(void) { + unregister_mtd_user(&routerboot_mtd_notifier); + /* Exit routines are idempotent */ rb_softconfig_exit(); rb_hardconfig_exit(); kobject_put(rb_kobj); // recursive afaict diff --git a/lede/target/linux/generic/files/drivers/platform/mikrotik/routerboot.h b/lede/target/linux/generic/files/drivers/platform/mikrotik/routerboot.h index 67d89808d5..e858a524af 100644 --- a/lede/target/linux/generic/files/drivers/platform/mikrotik/routerboot.h +++ b/lede/target/linux/generic/files/drivers/platform/mikrotik/routerboot.h @@ -25,11 +25,11 @@ int routerboot_tag_find(const u8 *bufhead, const size_t buflen, const u16 tag_id, u16 *pld_ofs, u16 *pld_len); int routerboot_rle_decode(const u8 *in, size_t inlen, u8 *out, size_t *outlen); -int __init rb_hardconfig_init(struct kobject *rb_kobj); -void __exit rb_hardconfig_exit(void); +int rb_hardconfig_init(struct kobject *rb_kobj, struct mtd_info *mtd); +void rb_hardconfig_exit(void); -int __init rb_softconfig_init(struct kobject *rb_kobj); -void __exit rb_softconfig_exit(void); +int rb_softconfig_init(struct kobject *rb_kobj, struct mtd_info *mtd); +void rb_softconfig_exit(void); ssize_t routerboot_tag_show_string(const u8 *pld, u16 pld_len, char *buf); ssize_t routerboot_tag_show_u32s(const u8 *pld, u16 pld_len, char *buf); diff --git a/lede/target/linux/mediatek/Makefile b/lede/target/linux/mediatek/Makefile index 0175e62c17..b60b94de69 100644 --- a/lede/target/linux/mediatek/Makefile +++ b/lede/target/linux/mediatek/Makefile @@ -8,8 +8,8 @@ BOARDNAME:=MediaTek Ralink ARM SUBTARGETS:=mt7622 mt7623 mt7629 filogic FEATURES:=dt-overlay emmc fpu gpio nand pci pcie rootfs-part separate_ramdisk squashfs usb -KERNEL_PATCHVER:=6.1 -KERNEL_TESTING_PATCHVER:=6.6 +KERNEL_PATCHVER:=6.6 +KERNEL_TESTING_PATCHVER:=6.1 include $(INCLUDE_DIR)/target.mk DEFAULT_PACKAGES += \ diff --git a/lede/target/linux/mediatek/base-files/etc/uci-defaults/99_fwenv-store-ethaddr.sh b/lede/target/linux/mediatek/base-files/etc/uci-defaults/99_fwenv-store-ethaddr.sh index 5dec158a93..e9cb4f921d 100644 --- a/lede/target/linux/mediatek/base-files/etc/uci-defaults/99_fwenv-store-ethaddr.sh +++ b/lede/target/linux/mediatek/base-files/etc/uci-defaults/99_fwenv-store-ethaddr.sh @@ -9,7 +9,10 @@ unielec,u7623-02) [ -z "$(fw_printenv -n ethaddr 2>/dev/null)" ] && fw_setenv ethaddr "$(cat /sys/class/net/eth0/address)" ;; -bananapi,bpi-r3) +bananapi,bpi-r3|\ +bananapi,bpi-r3-mini|\ +bananapi,bpi-r4|\ +bananapi,bpi-r4-poe) [ -z "$(fw_printenv -n ethaddr 2>/dev/null)" ] && fw_setenv ethaddr "$(cat /sys/class/net/eth0/address)" [ -z "$(fw_printenv -n eth1addr 2>/dev/null)" ] && diff --git a/lede/target/linux/mediatek/dts/mt7986a-hf-m7986r1-emmc.dts b/lede/target/linux/mediatek/dts/mt7986a-hf-m7986r1-emmc.dts new file mode 100644 index 0000000000..eeeb632417 --- /dev/null +++ b/lede/target/linux/mediatek/dts/mt7986a-hf-m7986r1-emmc.dts @@ -0,0 +1,100 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT + +/dts-v1/; +#include "mt7986a-hf-m7986r1.dtsi" + +/ { + model = "HF-M7986R1 eMMC version"; + compatible = "hf,m7986r1-emmc", "mediatek,mt7986a"; + + chosen { + bootargs = "root=PARTLABEL=rootfs rootwait rootfstype=squashfs,f2fs"; + }; + + reg_1p8v: regulator-1p8v { + compatible = "regulator-fixed"; + regulator-name = "fixed-1.8V"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-boot-on; + regulator-always-on; + }; +}; + +&mmc0 { + bus-width = <8>; + cap-mmc-highspeed; + hs400-ds-delay = <0x14014>; + max-frequency = <200000000>; + mmc-hs200-1_8v; + mmc-hs400-1_8v; + no-sd; + no-sdio; + non-removable; + pinctrl-names = "default", "state_uhs"; + pinctrl-0 = <&mmc0_pins_default>; + pinctrl-1 = <&mmc0_pins_uhs>; + vmmc-supply = <®_3p3v>; + vqmmc-supply = <®_1p8v>; + status = "okay"; +}; + +&pio { + mmc0_pins_default: mmc0-pins-default { + mux { + function = "emmc"; + groups = "emmc_51"; + }; + conf-cmd-dat { + pins = "EMMC_DATA_0", "EMMC_DATA_1", "EMMC_DATA_2", + "EMMC_DATA_3", "EMMC_DATA_4", "EMMC_DATA_5", + "EMMC_DATA_6", "EMMC_DATA_7", "EMMC_CMD"; + input-enable; + drive-strength = <4>; + mediatek,pull-up-adv = <1>; + }; + conf-clk { + pins = "EMMC_CK"; + drive-strength = <6>; + mediatek,pull-down-adv = <2>; + }; + conf-ds { + pins = "EMMC_DSL"; + mediatek,pull-down-adv = <2>; + }; + conf-rst { + pins = "EMMC_RSTB"; + drive-strength = <4>; + mediatek,pull-up-adv = <1>; + }; + }; + + mmc0_pins_uhs: mmc0-uhs-pins { + mux { + function = "emmc"; + groups = "emmc_51"; + }; + conf-cmd-dat { + pins = "EMMC_DATA_0", "EMMC_DATA_1", "EMMC_DATA_2", + "EMMC_DATA_3", "EMMC_DATA_4", "EMMC_DATA_5", + "EMMC_DATA_6", "EMMC_DATA_7", "EMMC_CMD"; + input-enable; + drive-strength = <4>; + mediatek,pull-up-adv = <1>; + }; + conf-clk { + pins = "EMMC_CK"; + drive-strength = <6>; + mediatek,pull-down-adv = <2>; + }; + conf-ds { + pins = "EMMC_DSL"; + mediatek,pull-down-adv = <2>; + }; + conf-rst { + pins = "EMMC_RSTB"; + drive-strength = <4>; + mediatek,pull-up-adv = <1>; + }; + }; +}; diff --git a/lede/target/linux/mediatek/dts/mt7986a-hf-m7986r1-nand.dts b/lede/target/linux/mediatek/dts/mt7986a-hf-m7986r1-nand.dts new file mode 100644 index 0000000000..7427ec2fa8 --- /dev/null +++ b/lede/target/linux/mediatek/dts/mt7986a-hf-m7986r1-nand.dts @@ -0,0 +1,76 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT + +/dts-v1/; +#include "mt7986a-hf-m7986r1.dtsi" + +/ { + model = "HF-M7986R1 NAND version"; + compatible = "hf,m7986r1-nand", "mediatek,mt7986a"; +}; + +&pio { + spi_flash_pins: spi-flash-pins { + mux { + function = "spi"; + groups = "spi0", "spi0_wp_hold"; + }; + conf-pu { + pins = "SPI2_CS", "SPI2_HOLD", "SPI2_WP"; + drive-strength = <8>; + mediatek,pull-up-adv = <0>; + }; + conf-pd { + pins = "SPI2_CLK", "SPI2_MOSI", "SPI2_MISO"; + drive-strength = <8>; + mediatek,pull-down-adv = <0>; + }; + }; +}; + +&spi0 { + pinctrl-names = "default"; + pinctrl-0 = <&spi_flash_pins>; + status = "okay"; + + flash@0 { + compatible = "spi-nand"; + #address-cells = <1>; + #size-cells = <1>; + reg = <0>; + + spi-max-frequency = <20000000>; + spi-tx-bus-width = <4>; + spi-rx-bus-width = <4>; + + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + partition@0 { + label = "bl2"; + reg = <0x00000 0x100000>; + }; + + partition@100000 { + label = "u-boot-env"; + reg = <0x100000 0x80000>; + }; + + partition@180000 { + label = "factory"; + reg = <0x180000 0x200000>; + }; + + partition@380000 { + label = "fip"; + reg = <0x380000 0x200000>; + }; + + partition@580000 { + label = "ubi"; + reg = <0x580000 0x7a80000>; + }; + }; + }; +}; diff --git a/lede/target/linux/mediatek/dts/mt7986a-hf-m7986r1.dtsi b/lede/target/linux/mediatek/dts/mt7986a-hf-m7986r1.dtsi new file mode 100644 index 0000000000..f4c58812ce --- /dev/null +++ b/lede/target/linux/mediatek/dts/mt7986a-hf-m7986r1.dtsi @@ -0,0 +1,251 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT + +/dts-v1/; +#include +#include +#include + +#include "mt7986a.dtsi" + +/ { + aliases { + serial0 = &uart0; + led-boot = &sys_led; + led-failsafe = &sys_led; + led-running = &sys_led; + led-upgrade = &sys_led; + }; + + chosen { + stdout-path = "serial0:115200n8"; + }; + + memory@40000000 { + reg = <0 0x40000000 0 0x40000000>; + }; + + gpio-keys { + compatible = "gpio-keys"; + + // seems to conflict with pcie_clk, needs investigate + button-reset { + label = "reset"; + linux,code = ; + gpios = <&pio 9 GPIO_ACTIVE_LOW>; + }; + }; + + gpio-leds { + compatible = "gpio-leds"; + + sys_led: led-0 { + label = "hf:sys"; + gpios = <&pio 15 GPIO_ACTIVE_LOW>; + }; + + led-1 { + label = "led-1"; + gpios = <&pio 16 GPIO_ACTIVE_LOW>; + }; + + led-2 { + label = "led-2"; + gpios = <&pio 17 GPIO_ACTIVE_LOW>; + }; + + led-3 { + label = "led-3"; + gpios = <&pio 18 GPIO_ACTIVE_LOW>; + }; + + led-4 { + label = "led-4"; + gpios = <&pio 19 GPIO_ACTIVE_LOW>; + }; + + led-5 { + label = "led-5"; + gpios = <&pio 20 GPIO_ACTIVE_LOW>; + }; + }; + + reg_3p3v: regulator-3p3v { + compatible = "regulator-fixed"; + regulator-name = "fixed-3.3V"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + regulator-boot-on; + regulator-always-on; + }; + + reg_5v: regulator-5v { + compatible = "regulator-fixed"; + regulator-name = "fixed-5V"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + regulator-boot-on; + regulator-always-on; + }; +}; + +&crypto { + status = "okay"; +}; + +ð { + status = "okay"; + + gmac0: mac@0 { + compatible = "mediatek,eth-mac"; + reg = <0>; + phy-mode = "2500base-x"; + + fixed-link { + speed = <2500>; + full-duplex; + pause; + }; + }; + + mdio: mdio-bus { + #address-cells = <1>; + #size-cells = <0>; + }; +}; + +&mdio { + switch: switch@1f { + compatible = "mediatek,mt7531"; + reg = <31>; + reset-gpios = <&pio 5 GPIO_ACTIVE_HIGH>; + interrupt-controller; + #interrupt-cells = <1>; + interrupt-parent = <&pio>; + interrupts = <66 IRQ_TYPE_LEVEL_HIGH>; + }; +}; + +&pcie { + pinctrl-names = "default"; + pinctrl-0 = <&pcie_pins>; + status = "okay"; + + pcie@0,0 { + reg = <0x0000 0 0 0 0>; + + wifi@0,0 { + compatible = "mediatek,mt76"; + reg = <0x0000 0 0 0 0>; + }; + }; +}; + +&pcie_phy { + status = "okay"; +}; + +&pio { + pcie_pins: pcie-pins { + power-pcie { + pins = "GPIO_7"; + drive-strength = <8>; + mediatek,pull-up-adv = <1>; + }; + + reset-pcie { + pins = "GPIO_9"; + drive-strength = <8>; + mediatek,pull-down-adv = <1>; + output-low; + }; + + mux { + function = "pcie"; + groups = "pcie_clk", "pcie_wake", "pcie_pereset"; + }; + }; + + usb_pins: usb-pins { + reset-sata { + pins = "GPIO_1"; + drive-strength = <8>; + mediatek,pull-up-adv = <1>; + }; + + power-m2 { + pins = "GPIO_6"; + drive-strength = <8>; + mediatek,pull-up-adv = <1>; + }; + + reset-m2 { + pins = "GPIO_8"; + drive-strength = <8>; + mediatek,pull-down-adv = <1>; + output-low; + }; + }; +}; + +&ssusb { + pinctrl-names = "default"; + pinctrl-0 = <&usb_pins>; + vusb33-supply = <®_3p3v>; + vbus-supply = <®_5v>; + status = "okay"; +}; + +&switch { + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + label = "lan1"; + }; + + port@1 { + reg = <1>; + label = "lan2"; + }; + + port@2 { + reg = <2>; + label = "lan3"; + }; + + port@3 { + reg = <3>; + label = "lan4"; + }; + + port@6 { + reg = <6>; + ethernet = <&gmac0>; + phy-mode = "2500base-x"; + + fixed-link { + speed = <2500>; + full-duplex; + pause; + }; + }; + }; +}; + +&trng { + status = "okay"; +}; + +&uart0 { + status = "okay"; +}; + +&usb_phy { + status = "okay"; +}; + +&watchdog { + status = "okay"; +}; diff --git a/lede/target/linux/generic/files/block/partitions/fit.c b/lede/target/linux/mediatek/files/block/partitions/fit.c similarity index 96% rename from lede/target/linux/generic/files/block/partitions/fit.c rename to lede/target/linux/mediatek/files/block/partitions/fit.c index 553d25ec7a..463cd4e9ab 100644 --- a/lede/target/linux/generic/files/block/partitions/fit.c +++ b/lede/target/linux/mediatek/files/block/partitions/fit.c @@ -73,11 +73,7 @@ int parse_fit_partitions(struct parsed_partitions *state, u64 fit_start_sector, u64 sectors, int *slot, int add_remain) { -#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 11, 0) struct block_device *bdev = state->disk->part0; -#else - struct block_device *bdev = state->bdev; -#endif struct address_space *mapping = bdev->bd_inode->i_mapping; struct page *page; void *fit, *init_fit; @@ -104,8 +100,11 @@ int parse_fit_partitions(struct parsed_partitions *state, u64 fit_start_sector, return -ERANGE; page = read_mapping_page(mapping, fit_start_sector >> (PAGE_SHIFT - SECTOR_SHIFT), NULL); - if (!page) - return -ENOMEM; + if (IS_ERR(page)) + return -EFAULT; + + if (PageError(page)) + return -EFAULT; init_fit = page_address(page); @@ -145,6 +144,10 @@ int parse_fit_partitions(struct parsed_partitions *state, u64 fit_start_sector, np = of_find_node_by_path("/chosen"); if (np) { + /* new fitblk driver should take over if /chosen/rootdisk is defined */ + if (of_get_property(np, "rootdisk", NULL)) + return 0; + bootconf_c = of_get_property(np, "u-boot,bootconf", &bootconf_len); if (bootconf_c && bootconf_len) bootconf = kmemdup_nul(bootconf_c, bootconf_len, GFP_KERNEL); @@ -220,8 +223,8 @@ int parse_fit_partitions(struct parsed_partitions *state, u64 fit_start_sector, image_description = fdt_getprop(fit, node, FIT_DESC_PROP, &image_description_len); - printk(KERN_DEBUG "FIT: %16s sub-image 0x%08x - 0x%08x \"%s\" %s%s%s\n", - image_type, image_pos, image_pos + image_len, image_name, + printk(KERN_DEBUG "FIT: %16s sub-image 0x%08x..0x%08x \"%s\" %s%s%s\n", + image_type, image_pos, image_pos + image_len - 1, image_name, image_description?"(":"", image_description?:"", image_description?") ":""); if (strcmp(image_type, FIT_FILESYSTEM_PROP)) diff --git a/lede/target/linux/mediatek/filogic/base-files/etc/board.d/01_leds b/lede/target/linux/mediatek/filogic/base-files/etc/board.d/01_leds index 7830a83837..52d7618052 100644 --- a/lede/target/linux/mediatek/filogic/base-files/etc/board.d/01_leds +++ b/lede/target/linux/mediatek/filogic/base-files/etc/board.d/01_leds @@ -9,6 +9,19 @@ case $board in abt,asr3000) ucidef_set_led_netdev "wan" "WAN" "green:wan" "eth1" ;; +bananapi,bpi-r4) + ucidef_set_led_netdev "wan" "wan" "mt7530-0:00:green:lan" "wan" "link tx rx" + ucidef_set_led_netdev "lan1" "lan1" "mt7530-0:01:green:lan" "lan1" "link tx rx" + ucidef_set_led_netdev "lan2" "lan2" "mt7530-0:02:green:lan" "lan2" "link tx rx" + ucidef_set_led_netdev "lan3" "lan3" "mt7530-0:03:green:lan" "lan3" "link tx rx" + ;; +hf,m7986r1*) + ucidef_set_led_netdev "led-1" "LAN1" "led-1" "lan1" + ucidef_set_led_netdev "led-2" "LAN2" "led-2" "lan2" + ucidef_set_led_netdev "led-3" "LAN3" "led-3" "lan3" + ucidef_set_led_netdev "led-4" "LAN4" "led-4" "lan4" + ucidef_set_led_netdev "led-5" "WWAN" "led-5" "usb0" + ;; imou,lc-hx3001|\ nokia,ea0326gmp) ucidef_set_led_netdev "lan" "LAN" "green:lan" "br-lan" diff --git a/lede/target/linux/mediatek/filogic/base-files/etc/board.d/02_network b/lede/target/linux/mediatek/filogic/base-files/etc/board.d/02_network index 35d568f125..5586a6a8b3 100644 --- a/lede/target/linux/mediatek/filogic/base-files/etc/board.d/02_network +++ b/lede/target/linux/mediatek/filogic/base-files/etc/board.d/02_network @@ -24,12 +24,18 @@ mediatek_setup_interfaces() bananapi,bpi-r3) ucidef_set_interfaces_lan_wan "lan1 lan2 lan3 lan4 sfp2" "eth1 wan" ;; + bananapi,bpi-r4) + ucidef_set_interfaces_lan_wan "lan1 lan2 lan3 eth1" "wan eth2" + ;; cetron,ct3003*|\ fzs,5gcpe-p3|\ jcg,q30-pro|\ qihoo,360t7) ucidef_set_interfaces_lan_wan "lan1 lan2 lan3" wan ;; + hf,m7986r1*) + ucidef_set_interfaces_lan_wan "lan2 lan3 lan4" lan1 + ;; glinet,gl-mt2500|\ glinet,gl-mt3000) ucidef_set_interfaces_lan_wan eth1 eth0 @@ -75,7 +81,9 @@ mediatek_setup_macs() wan_mac="${addr}" lan_mac="${addr}" ;; - bananapi,bpi-r3) + bananapi,bpi-r3|\ + bananapi,bpi-r3-mini|\ + bananapi,bpi-r4) wan_mac=$(macaddr_add $(cat /sys/class/net/eth0/address) 1) ;; cmcc,rax3000m-emmc) diff --git a/lede/target/linux/mediatek/filogic/base-files/etc/hotplug.d/ieee80211/11_fix_wifi_mac b/lede/target/linux/mediatek/filogic/base-files/etc/hotplug.d/ieee80211/11_fix_wifi_mac index 39acbafd58..a1e86697fd 100644 --- a/lede/target/linux/mediatek/filogic/base-files/etc/hotplug.d/ieee80211/11_fix_wifi_mac +++ b/lede/target/linux/mediatek/filogic/base-files/etc/hotplug.d/ieee80211/11_fix_wifi_mac @@ -29,6 +29,12 @@ case "$board" in [ "$PHYNBR" = "0" ] && macaddr_add $addr 2 > /sys${DEVPATH}/macaddress [ "$PHYNBR" = "1" ] && macaddr_add $addr 3 > /sys${DEVPATH}/macaddress ;; + bananapi,bpi-r4) + addr=$(cat /sys/class/net/eth0/address) + [ "$PHYNBR" = "0" ] && macaddr_add $addr 2 > /sys${DEVPATH}/macaddress + [ "$PHYNBR" = "1" ] && macaddr_add $addr 3 > /sys${DEVPATH}/macaddress + [ "$PHYNBR" = "2" ] && macaddr_add $addr 4 > /sys${DEVPATH}/macaddress + ;; cetron,ct3003*) addr=$(mtd_get_mac_binary "art" 0) [ "$PHYNBR" = "0" ] && macaddr_add $addr 1 > /sys${DEVPATH}/macaddress diff --git a/lede/target/linux/mediatek/filogic/base-files/lib/upgrade/platform.sh b/lede/target/linux/mediatek/filogic/base-files/lib/upgrade/platform.sh index 6642318f80..218d16406b 100755 --- a/lede/target/linux/mediatek/filogic/base-files/lib/upgrade/platform.sh +++ b/lede/target/linux/mediatek/filogic/base-files/lib/upgrade/platform.sh @@ -1,4 +1,5 @@ REQUIRE_IMAGE_METADATA=1 +RAMFS_COPY_BIN='fitblk' asus_initial_setup() { @@ -11,6 +12,21 @@ asus_initial_setup() ubimkvol /dev/ubi0 -N jffs2 -s 0x3e000 } +platform_get_bootdev() { + local rootdisk="$(cat /sys/firmware/devicetree/base/chosen/rootdisk)" + local handle bootdev + for handle in /sys/class/block/*/of_node/phandle /sys/class/block/*/device/of_node/phandle; do + [ ! -e "$handle" ] && continue + if [ "$rootdisk" = "$(cat $handle)" ]; then + bootdev="${handle%/of_node/phandle}" + bootdev="${bootdev%/device}" + bootdev="${bootdev#/sys/class/block/}" + echo "$bootdev" + break + fi + done +} + platform_do_upgrade() { local board=$(board_name) @@ -40,6 +56,21 @@ platform_do_upgrade() { ;; esac ;; + bananapi,bpi-r4) + [ -e /dev/fit0 ] && fitblk /dev/fit0 + [ -e /dev/fitrw ] && fitblk /dev/fitrw + bootdev="$(platform_get_bootdev)" + case "$bootdev" in + mmcblk*) + EMMC_KERN_DEV="/dev/$bootdev" + emmc_do_upgrade "$1" + ;; + ubiblock*) + CI_KERNPART="fit" + nand_do_upgrade "$1" + ;; + esac + ;; cmcc,rax3000m-emmc|\ glinet,gl-mt2500|\ glinet,gl-mt6000|\ @@ -63,7 +94,8 @@ platform_check_image() { [ "$#" -gt 1 ] && return 1 case "$board" in - bananapi,bpi-r3) + bananapi,bpi-r3|\ + bananapi,bpi-r4) [ "$magic" != "d00dfeed" ] && { echo "Invalid image type." return 1 @@ -88,6 +120,13 @@ platform_copy_config() { ;; esac ;; + bananapi,bpi-r4) + case "$(platform_get_bootdev)" in + mmcblk*) + emmc_copy_config + ;; + esac + ;; cmcc,rax3000m-emmc|\ glinet,gl-mt2500|\ glinet,gl-mt6000|\ diff --git a/lede/target/linux/mediatek/filogic/config-6.6 b/lede/target/linux/mediatek/filogic/config-6.6 index 6d9d42853b..f6c8ec6d9a 100644 --- a/lede/target/linux/mediatek/filogic/config-6.6 +++ b/lede/target/linux/mediatek/filogic/config-6.6 @@ -48,6 +48,7 @@ CONFIG_AUDIT_ARCH_COMPAT_GENERIC=y CONFIG_BLK_DEV_LOOP=y CONFIG_BLK_DEV_SD=y CONFIG_BLK_MQ_PCI=y +CONFIG_BLK_NVMEM=y CONFIG_BLK_PM=y CONFIG_BLOCK_NOTIFIERS=y CONFIG_BSD_PROCESS_ACCT=y diff --git a/lede/target/linux/mediatek/filogic/target.mk b/lede/target/linux/mediatek/filogic/target.mk index 4e5cde3d6b..1c4843a98c 100644 --- a/lede/target/linux/mediatek/filogic/target.mk +++ b/lede/target/linux/mediatek/filogic/target.mk @@ -2,7 +2,7 @@ ARCH:=aarch64 SUBTARGET:=filogic BOARDNAME:=Filogic 8x0 (MT798x) CPU_TYPE:=cortex-a53 -DEFAULT_PACKAGES += kmod-crypto-hw-safexcel kmod-mt7915e wpad-openssl uboot-envtools +DEFAULT_PACKAGES += fitblk kmod-crypto-hw-safexcel kmod-mt7915e wpad-openssl uboot-envtools KERNELNAME:=Image dtbs define Target/Description diff --git a/lede/target/linux/mediatek/image/filogic.mk b/lede/target/linux/mediatek/image/filogic.mk index b9f43f5ef4..d5eb8b8114 100644 --- a/lede/target/linux/mediatek/image/filogic.mk +++ b/lede/target/linux/mediatek/image/filogic.mk @@ -30,7 +30,7 @@ define Build/mt7988-bl31-uboot cat $(STAGING_DIR_IMAGE)/mt7988_$1-u-boot.fip >> $@ endef -define Build/mt7986-gpt +define Build/mt798x-gpt cp $@ $@.tmp 2>/dev/null || true ptgen -g -o $@.tmp -a 1 -l 1024 \ $(if $(findstring sdmmc,$1), \ @@ -147,6 +147,55 @@ define Device/bananapi_bpi-r3 endef TARGET_DEVICES += bananapi_bpi-r3 +define Device/bananapi_bpi-r4-common + DEVICE_VENDOR := Bananapi + DEVICE_DTS_DIR := $(DTS_DIR)/ + DEVICE_DTS_LOADADDR := 0x45f00000 + DEVICE_DTS_OVERLAY:= mt7988a-bananapi-bpi-r4-emmc mt7988a-bananapi-bpi-r4-rtc mt7988a-bananapi-bpi-r4-sd mt7988a-bananapi-bpi-r4-wifi-mt7996a + DEVICE_DTC_FLAGS := --pad 4096 + DEVICE_PACKAGES := kmod-hwmon-pwmfan kmod-i2c-mux-pca954x kmod-eeprom-at24 kmod-mt7996-firmware \ + kmod-rtc-pcf8563 kmod-sfp kmod-usb3 e2fsprogs f2fsck mkf2fs + IMAGES := sysupgrade.itb + KERNEL_LOADADDR := 0x46000000 + KERNEL_INITRAMFS_SUFFIX := -recovery.itb + ARTIFACTS := \ + emmc-preloader.bin emmc-bl31-uboot.fip \ + sdcard.img.gz \ + snand-preloader.bin snand-bl31-uboot.fip + ARTIFACT/emmc-preloader.bin := mt7988-bl2 emmc-comb + ARTIFACT/emmc-bl31-uboot.fip := mt7988-bl31-uboot $$(DEVICE_NAME)-emmc + ARTIFACT/snand-preloader.bin := mt7988-bl2 spim-nand-ubi-comb + ARTIFACT/snand-bl31-uboot.fip := mt7988-bl31-uboot $$(DEVICE_NAME)-snand + ARTIFACT/sdcard.img.gz := mt798x-gpt sdmmc |\ + pad-to 17k | mt7988-bl2 sdmmc-comb |\ + pad-to 6656k | mt7988-bl31-uboot $$(DEVICE_NAME)-sdmmc |\ + $(if $(CONFIG_TARGET_ROOTFS_INITRAMFS),\ + pad-to 12M | append-image-stage initramfs-recovery.itb | check-size 44m |\ + ) \ + pad-to 44M | mt7988-bl2 spim-nand-ubi-comb |\ + pad-to 45M | mt7988-bl31-uboot $$(DEVICE_NAME)-snand |\ + pad-to 51M | mt7988-bl2 emmc-comb |\ + pad-to 52M | mt7988-bl31-uboot $$(DEVICE_NAME)-emmc |\ + pad-to 56M | mt798x-gpt emmc |\ + $(if $(CONFIG_TARGET_ROOTFS_SQUASHFS),\ + pad-to 64M | append-image squashfs-sysupgrade.itb | check-size |\ + ) \ + gzip + IMAGE_SIZE := $$(shell expr 64 + $$(CONFIG_TARGET_ROOTFS_PARTSIZE))m + KERNEL := kernel-bin | gzip + KERNEL_INITRAMFS := kernel-bin | lzma | \ + fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb with-initrd | pad-to 64k + IMAGE/sysupgrade.itb := append-kernel | fit gzip $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb external-with-rootfs | pad-rootfs | append-metadata +endef + +define Device/bananapi_bpi-r4 + DEVICE_MODEL := BPi-R4 + DEVICE_DTS := mt7988a-bananapi-bpi-r4 + DEVICE_DTS_CONFIG := config-mt7988a-bananapi-bpi-r4 + $(call Device/bananapi_bpi-r4-common) +endef +TARGET_DEVICES += bananapi_bpi-r4 + define Device/cetron_ct3003 DEVICE_VENDOR := Cetron DEVICE_MODEL := CT3003 @@ -421,6 +470,22 @@ define Device/mediatek_mt7988a-rfb endef TARGET_DEVICES += mediatek_mt7988a-rfb +define Device/hf_m7986r1-nand + DEVICE_VENDOR := HF + DEVICE_MODEL := M7986R1 + DEVICE_DTS := mt7986a-hf-m7986r1-nand + DEVICE_DTS_DIR := ../dts + UBINIZE_OPTS := -E 5 + BLOCKSIZE := 128k + PAGESIZE := 2048 + IMAGE_SIZE := 116736k + KERNEL_IN_UBI := 1 + DEVICE_PACKAGES := kmod-usb3 kmod-mt7921e kmod-usb-serial-option kmod-usb-net-rndis + SUPPORTED_DEVICES += HF-M7986R1 + IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata +endef +TARGET_DEVICES +=hf_m7986r1-nand + define Device/netcore_n60 DEVICE_VENDOR := Netcore DEVICE_MODEL := N60 diff --git a/lede/target/linux/mediatek/patches-6.6/734-net-phy-add-Airoha-EN8801SC-PHY.patch b/lede/target/linux/mediatek/patches-6.6/734-net-phy-add-Airoha-EN8801SC-PHY.patch index 940d6b5fc5..90c030fb89 100644 --- a/lede/target/linux/mediatek/patches-6.6/734-net-phy-add-Airoha-EN8801SC-PHY.patch +++ b/lede/target/linux/mediatek/patches-6.6/734-net-phy-add-Airoha-EN8801SC-PHY.patch @@ -14,25 +14,25 @@ Signed-off-by: Robert Marko --- a/drivers/net/phy/Kconfig +++ b/drivers/net/phy/Kconfig -@@ -140,6 +140,11 @@ +@@ -142,6 +142,11 @@ endif # RTL8366_SMI - endif # RTL8366_SMI + comment "MII PHY device drivers" +config AIROHA_EN8801SC_PHY + tristate "Airoha EN8801SC Gigabit PHY" + help + Currently supports the Airoha EN8801SC PHY. + - comment "MII PHY device drivers" - - config AMD_PHY + config AIR_EN8811H_PHY + tristate "Airoha EN8811H 2.5 Gigabit PHY" + help --- a/drivers/net/phy/Makefile +++ b/drivers/net/phy/Makefile -@@ -49,6 +49,7 @@ +@@ -49,6 +49,7 @@ obj-y += $(sfp-obj-y) $(sfp-obj-m) obj-$(CONFIG_ADIN_PHY) += adin.o obj-$(CONFIG_ADIN1100_PHY) += adin1100.o +obj-$(CONFIG_AIROHA_EN8801SC_PHY) += en8801sc.o + obj-$(CONFIG_AIR_EN8811H_PHY) += air_en8811h.o obj-$(CONFIG_AMD_PHY) += amd.o obj-$(CONFIG_AQUANTIA_PHY) += aquantia/ - obj-$(CONFIG_AX88796B_PHY) += ax88796b.o diff --git a/lede/target/linux/mediatek/patches-6.6/942-net-ethernet-mtk_wed-move-cpuboot-in-a-dedicated-dts.patch b/lede/target/linux/mediatek/patches-6.6/942-net-ethernet-mtk_wed-move-cpuboot-in-a-dedicated-dts.patch index b4bea2087b..43014c5d12 100644 --- a/lede/target/linux/mediatek/patches-6.6/942-net-ethernet-mtk_wed-move-cpuboot-in-a-dedicated-dts.patch +++ b/lede/target/linux/mediatek/patches-6.6/942-net-ethernet-mtk_wed-move-cpuboot-in-a-dedicated-dts.patch @@ -23,9 +23,12 @@ Signed-off-by: Lorenzo Bianconi --- a/drivers/net/ethernet/mediatek/mtk_wed_mcu.c +++ b/drivers/net/ethernet/mediatek/mtk_wed_mcu.c -@@ -34,12 +34,23 @@ static struct mtk_wed_wo_memory_region m +@@ -32,14 +32,25 @@ static struct mtk_wed_wo_memory_region m + }, + }; - static u32 wo_r32(struct mtk_wed_wo *wo, u32 reg) +-static u32 wo_r32(u32 reg) ++static u32 wo_r32(struct mtk_wed_wo *wo, u32 reg) { - return readl(mem_region[MTK_WED_WO_REGION_BOOT].addr + reg); + u32 val; @@ -39,7 +42,8 @@ Signed-off-by: Lorenzo Bianconi + return val; } - static void wo_w32(struct mtk_wed_wo *wo, u32 reg, u32 val) +-static void wo_w32(u32 reg, u32 val) ++static void wo_w32(struct mtk_wed_wo *wo, u32 reg, u32 val) { - writel(val, mem_region[MTK_WED_WO_REGION_BOOT].addr + reg); + if (wo->boot_regmap) @@ -49,7 +53,7 @@ Signed-off-by: Lorenzo Bianconi } static struct sk_buff * -@@ -313,6 +324,9 @@ mtk_wed_mcu_load_firmware(struct mtk_wed +@@ -317,6 +328,9 @@ mtk_wed_mcu_load_firmware(struct mtk_wed u32 val, boot_cr; int ret, i; @@ -59,7 +63,7 @@ Signed-off-by: Lorenzo Bianconi /* load firmware region metadata */ for (i = 0; i < ARRAY_SIZE(mem_region); i++) { int index = of_property_match_string(wo->hw->node, -@@ -321,6 +335,9 @@ mtk_wed_mcu_load_firmware(struct mtk_wed +@@ -325,6 +339,9 @@ mtk_wed_mcu_load_firmware(struct mtk_wed if (index < 0) continue; @@ -69,6 +73,24 @@ Signed-off-by: Lorenzo Bianconi ret = mtk_wed_get_reserved_memory_region(wo->hw, index, &mem_region[i]); if (ret) return ret; +@@ -373,13 +390,13 @@ mtk_wed_mcu_load_firmware(struct mtk_wed + boot_cr = MTK_WO_MCU_CFG_LS_WA_BOOT_ADDR_ADDR; + else + boot_cr = MTK_WO_MCU_CFG_LS_WM_BOOT_ADDR_ADDR; +- wo_w32(boot_cr, mem_region[MTK_WED_WO_REGION_EMI].phy_addr >> 16); ++ wo_w32(wo, boot_cr, mem_region[MTK_WED_WO_REGION_EMI].phy_addr >> 16); + /* wo firmware reset */ +- wo_w32(MTK_WO_MCU_CFG_LS_WF_MCCR_CLR_ADDR, 0xc00); ++ wo_w32(wo, MTK_WO_MCU_CFG_LS_WF_MCCR_CLR_ADDR, 0xc00); + +- val = wo_r32(MTK_WO_MCU_CFG_LS_WF_MCU_CFG_WM_WA_ADDR) | ++ val = wo_r32(wo, MTK_WO_MCU_CFG_LS_WF_MCU_CFG_WM_WA_ADDR) | + MTK_WO_MCU_CFG_LS_WF_WM_WA_WM_CPU_RSTB_MASK; +- wo_w32(MTK_WO_MCU_CFG_LS_WF_MCU_CFG_WM_WA_ADDR, val); ++ wo_w32(wo, MTK_WO_MCU_CFG_LS_WF_MCU_CFG_WM_WA_ADDR, val); + out: + release_firmware(fw); + --- a/drivers/net/ethernet/mediatek/mtk_wed_wo.h +++ b/drivers/net/ethernet/mediatek/mtk_wed_wo.h @@ -231,6 +231,7 @@ struct mtk_wed_wo_queue { diff --git a/small/gn/Makefile b/small/gn/Makefile index 38391082fb..229bfe9b30 100644 --- a/small/gn/Makefile +++ b/small/gn/Makefile @@ -9,9 +9,9 @@ PKG_RELEASE:=1 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=https://gn.googlesource.com/gn.git -PKG_SOURCE_DATE:=2024-04-23 -PKG_SOURCE_VERSION:=f284b6b47039a2d7edfcbfc51f52664f82b5a789 -PKG_MIRROR_HASH:=17157e20619d31ba99894045691a68aa583a78feb9771dcddb01376edb222e17 +PKG_SOURCE_DATE:=2024-06-10 +PKG_SOURCE_VERSION:=b2afae122eeb6ce09c52d63f67dc53fc517dbdc8 +PKG_MIRROR_HASH:=825ead46982a44cc2e82fb8bf88d17efea5810a555601c329ac3eef21ecabef7 PKG_LICENSE:=BSD 3-Clause PKG_LICENSE_FILES:=LICENSE diff --git a/small/gn/src/out/last_commit_position.h b/small/gn/src/out/last_commit_position.h index e78fa6fbb4..fe29b438c4 100644 --- a/small/gn/src/out/last_commit_position.h +++ b/small/gn/src/out/last_commit_position.h @@ -3,7 +3,7 @@ #ifndef OUT_LAST_COMMIT_POSITION_H_ #define OUT_LAST_COMMIT_POSITION_H_ -#define LAST_COMMIT_POSITION_NUM 2166 -#define LAST_COMMIT_POSITION "2166 (f284b6b47039)" +#define LAST_COMMIT_POSITION_NUM 2176 +#define LAST_COMMIT_POSITION "2176 (b2afae122eeb)" #endif // OUT_LAST_COMMIT_POSITION_H_ diff --git a/small/redsocks2/Makefile b/small/redsocks2/Makefile index 88b8a752f2..b5a61d33d9 100644 --- a/small/redsocks2/Makefile +++ b/small/redsocks2/Makefile @@ -10,9 +10,9 @@ PKG_RELEASE:=1 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=https://github.com/semigodking/redsocks.git -PKG_SOURCE_DATE:=2024-05-28 -PKG_SOURCE_VERSION:=c8e1e6c4c1d623b2e540528ac9efd06dde952006 -PKG_MIRROR_HASH:=b1e64e3af162ed91976eec9fa07ccd569ee8369f896bb2a19b8507eb01f4f769 +PKG_SOURCE_DATE:=2024-06-29 +PKG_SOURCE_VERSION:=82fa9502894057c0df629df419763469b3c193ab +PKG_MIRROR_HASH:=0981bf49cb8a6e7f81912808987727bf6a2454ad0a3cf744f1a64bfc1969b088 PKG_MAINTAINER:=semigodking PKG_LICENSE:=Apache-2.0 diff --git a/v2rayn/v2rayN/v2rayN/Resx/ResUI.Designer.cs b/v2rayn/v2rayN/v2rayN/Resx/ResUI.Designer.cs index 3ae54b093e..76436a3617 100644 --- a/v2rayn/v2rayN/v2rayN/Resx/ResUI.Designer.cs +++ b/v2rayn/v2rayN/v2rayN/Resx/ResUI.Designer.cs @@ -3032,7 +3032,7 @@ namespace v2rayN.Resx { } /// - /// 查找类似 HTTP port=SOCKS port+1;Pac port=SOCKS port+4;API port=SOCKS port+5; 的本地化字符串。 + /// 查找类似 http port = +1; Pac port = +4; *ray API port = +5; mihomo API port = +6; 的本地化字符串。 /// public static string TbSettingsSocksPortTip { get { diff --git a/v2rayn/v2rayN/v2rayN/Resx/ResUI.resx b/v2rayn/v2rayN/v2rayN/Resx/ResUI.resx index bdd0ea8eaf..3639698730 100644 --- a/v2rayn/v2rayN/v2rayN/Resx/ResUI.resx +++ b/v2rayn/v2rayN/v2rayN/Resx/ResUI.resx @@ -1037,7 +1037,7 @@ Copy the font TTF/TTC file to the directory guiFonts, restart the settings - HTTP port=SOCKS port+1;Pac port=SOCKS port+4;API port=SOCKS port+5; + http port = +1; Pac port = +4; *ray API port = +5; mihomo API port = +6; Set this with admin privileges, get admin privileges after startup diff --git a/v2rayn/v2rayN/v2rayN/Resx/ResUI.ru.resx b/v2rayn/v2rayN/v2rayN/Resx/ResUI.ru.resx index 46c3ddba86..e383e9fa2d 100644 --- a/v2rayn/v2rayN/v2rayN/Resx/ResUI.ru.resx +++ b/v2rayn/v2rayN/v2rayN/Resx/ResUI.ru.resx @@ -1042,9 +1042,6 @@ Скопируйте файл шрифта TTF/TTC в каталог guiFonts, перезапустите настройки - - HTTP port=socks port+1 - Установите это с правами администратора diff --git a/v2rayn/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx b/v2rayn/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx index efcd4f01b2..9a2e824ad5 100644 --- a/v2rayn/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx +++ b/v2rayn/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx @@ -1037,7 +1037,7 @@ 拷贝字体TTF/TTC文件到目录guiFonts,重启设置 - http端口=socks端口+1;Pac端口=socks端口+4;API端口=socks端口+5; + http端口= +1;Pac端口= +4;*ray API端口= +5;mihomo API端口= +6; 以管理员权限设置此项,在启动后获得管理员权限 diff --git a/v2rayn/v2rayN/v2rayN/Resx/ResUI.zh-Hant.resx b/v2rayn/v2rayN/v2rayN/Resx/ResUI.zh-Hant.resx index df684d88ee..c5bd6d5b3f 100644 --- a/v2rayn/v2rayN/v2rayN/Resx/ResUI.zh-Hant.resx +++ b/v2rayn/v2rayN/v2rayN/Resx/ResUI.zh-Hant.resx @@ -1037,7 +1037,7 @@ 複製字型TTF/TTC文件到目錄guiFonts,重啟設定 - HTTP埠=SOCKS埠+1 + http端口= +1;Pac端口= +4;*ray API端口= +5;mihomo API端口= +6; 以管理員權限設定此項,在啟動後獲得管理員權限 diff --git a/v2rayn/v2rayN/v2rayN/ViewModels/ClashConnectionsViewModel.cs b/v2rayn/v2rayN/v2rayN/ViewModels/ClashConnectionsViewModel.cs index 78697400fb..36d14771a1 100644 --- a/v2rayn/v2rayN/v2rayN/ViewModels/ClashConnectionsViewModel.cs +++ b/v2rayn/v2rayN/v2rayN/ViewModels/ClashConnectionsViewModel.cs @@ -2,7 +2,6 @@ using DynamicData; using DynamicData.Binding; using ReactiveUI; using ReactiveUI.Fody.Helpers; -using Splat; using System.Reactive; using System.Reactive.Linq; using System.Windows; @@ -15,11 +14,6 @@ namespace v2rayN.ViewModels { private static Config _config; - static ClashConnectionsViewModel() - { - _config = LazyConfig.Instance.GetConfig(); - } - private IObservableCollection _connectionItems = new ObservableCollectionExtended(); public IObservableCollection ConnectionItems => _connectionItems; @@ -38,6 +32,7 @@ namespace v2rayN.ViewModels public ClashConnectionsViewModel() { + _config = LazyConfig.Instance.GetConfig(); SortingSelected = _config.clashUIItem.connectionsSorting; AutoRefresh = _config.clashUIItem.connectionsAutoRefresh; diff --git a/v2rayu/Build/v2ray-core/geoip.dat b/v2rayu/Build/v2ray-core/geoip.dat index 46b4138dc9..d6bc61f201 100644 Binary files a/v2rayu/Build/v2ray-core/geoip.dat and b/v2rayu/Build/v2ray-core/geoip.dat differ diff --git a/v2rayu/Build/v2ray-core/geosite.dat b/v2rayu/Build/v2ray-core/geosite.dat index 0aa718f197..7144a9d222 100644 --- a/v2rayu/Build/v2ray-core/geosite.dat +++ b/v2rayu/Build/v2ray-core/geosite.dat @@ -13,9 +13,9 @@ ; 17ZUOYE 17zuoye.cn 17zuoye.com 17zuoye.net - -18COMIC -18comic.cc18comic.company 18comic.org 18comic.vip + +18COMIC18comic-god.cc18comic-god.club18comic-god.xyz +18comic.cc18comic.company 18comic.org 18comic.vip jmcomic.ltd jmcomic.me jmcomic.mobi jmcomic.moe jmcomic1.city jmcomic1.me jmcomic1.mobi jmcomic2.moe Q 2KGAMES @@ -40,6 +40,9 @@ yxhhdl.com 4CHAN 4cdn.org  4chan.org 4channel.org  4PARADIGM 4paradigm.com +' +4PLEBS  4pcdn.org +4plebs.org h 51JOB  51job.com 51jobcdn.comyingjiesheng.comyingjiesheng.netzhiding.com.cn  @@ -105,8 +108,11 @@ C ADDTHIS addthis.comaddthiscdn.comaddthisedge.com  ADDTOANY addtoany.com -X -ADGUARDadguard-dns.comadguard-dns.ioadguard-vpn.com adguard.com + +ADGUARD adguard.app adguard.com adguard.info +adguard.io adguard.org +adtidy.net +adtidy.org agrd.ioadguard-dns.comadguard-dns.ioadguardvpn.comadguard-vpn.comadguard-vpn.online  ADIDAS  adidas.at  adidas.be  adidas.ch adidas.co.in adidas.co.uk adidas.com adidas.com.cn @@ -180,14 +186,22 @@ airwick.si airwick.sk airwick.tv airwick.usairwickarabia.com vipoo.es + +AISIKU 1tyy.cn bbdc.cn beingfine.cnbeingfine.com.cn bubei.com.cn +coolab.top +is-cool.cnis-cool.com.cn langeasy.cnlangeasy.com.cnlearnywhere.cnlearnywhere.com.cn +qlisten.cn qtyy.cn - AIXCODER aixcoder.com nnthink.com - -AKAMAI ak1.net + +AKAMAI accdn.com.cn +cn ak1.net aka-ai.com aka-ai.net akacrypto.net akadeem.net akadns.com -akadns.net akadns6.net +akadns.net akadns6.net akadns88.net +cn akadns99.net +cn akaeai.com akafms.net akagtm.org akahost.net @@ -195,27 +209,40 @@ akaint.net akam.net akamaa.com akamah.com akamak.com -akamam.comakamai-access.comakamai-access.netakamai-cdn.com akamai-platform-internal.netakamai-platform-staging.comakamai-platform.netakamai-regression.netakamai-staging.netakamai-sucks.netakamai-thailand.comakamai-thailand.netakamai-trials.com akamai.co.kr -akamai.com +akamam.comakamai-access.comakamai-access.netakamai-cdn.com akamai-platform-internal.netakamai-platform-staging.comakamai-platform.netakamai-regression.netakamai-staging.netakamai-sucks.netakamai-thailand.comakamai-thailand.netakamai-trials.com akamai.co.kr +akamai.com +cn akamai.netakamaiedge.netakamaientrypoint.netakamaietpcnctest.com#akamaietpcompromisedcnctest.com'#akamaietpcompromisedmalwaretest.comakamaietpmalwaretest.comakamaietpphishingtest.comakamaihd-staging.net akamaihd.com akamaihd.netakamaimagicmath.netakamainewzealand.comakamaiphillipines.comakamaiphillipines.netakamaitech.comakamaitech.netakamaitechnologies.comakamaitechnologies.netakamaisingapore.netakamaistream.netakamaized-staging.net akamaized.netakamaizercentral.com akamci.com  akami.com  akami.net akamii.com akamqi.com akastream.com akastream.net -akatns.net iamakamai.com iamakamai.netsoasta-dswb.com +akatns.net akcdn.com.cn +cn aptdn.net +cn edgekey.net edgekey88.net +cn edgesuite.net iamakamai.com iamakamai.net janrain.biz +cnjanrainservices.com +cn skycdn.com.cn +cnsoasta-dswb.com srtcdn.net  ALI213 ali213.net -> +B ALIBABA alibaba alipay taobao tmall a.alimama.cn adsacjs.aliyun.com +ads!adash-c.m.taobao.com +ads"adash-c.ut.taobao.com +ads0#adash-emas.cn-hangzhou.aliyuncs.com adsadash.m.taobao.com +ads#adash.man.aliyuncs.com ads!adashbc.m.taobao.com ads"adashbc.ut.taobao.com -ads"adash-c.ut.taobao.com ads adashx.m.taobao.com +adsadashx.ut.amap.com +adsadashx.ut.ele.me +ads adashx.ut.youku.com ads$adashx4ae.ut.taobao.com ads#adashx4yt.m.taobao.com ads#adashxgc.ut.taobao.com @@ -226,20 +253,17 @@ ali213.net ads#agoodm.wapa.taobao.com ads alipaylog.com adsamdc.alipay.com -adsamdc.m.taobao.com ads api.wapa.taobao.com ads#api.waptest.taobao.com adsapoll.m.taobao.com -ads#appdownload.alicdn.com adsatanx.alicdn.com adsatanx2.alicdn.com +ads!c-adash.m.taobao.com adscdn0.mobmore.com adsclick.aliyun.com ads&click.mz.simba.taobao.com adscm.ipinyou.com -ads cm.mlt01.com ads!dsp.simba.taobao.com -adserr.taobao.com adsex.mobmore.com ads ex.puata.info ads!fav.simba.taobao.com @@ -254,6 +278,10 @@ g.tbcdn.cn adsgtms02.alicdn.com adsgtms03.alicdn.com adsgtms04.alicdn.com +adsh-adashx.ut.ele.me +ads#h-adashx.ut.taobao.com +ads"h-adashx.ut.youku.com +ads&h-adashx4yt.ut.taobao.com adshydra.alibaba.com ads'hz.pre.tbusergw.taobao.net ads#hz.tbusergw.taobao.net @@ -263,6 +291,7 @@ g.tbcdn.cn ads$intl.waptest.taobao.com ads"jxlog.istreamsche.com adslog.umtrack.com +ads!m-adash.m.taobao.com adsm.intl.taobao.com adsm.simba.taobao.com adsmatch.p4p.1688.com @@ -281,7 +310,6 @@ g.tbcdn.cn adsrj.m.taobao.co adsrj.m.taobao.com adssdkinit.taobao.com -adsshow.re.taobao.com adssimaba.taobao.com adssimba.m.taobao.com ads!srd.simba.taobao.com @@ -295,6 +323,10 @@ g.tbcdn.cn ads tvupgrade.yunos.com adstyh.taobao.com adsuserimg.qunar.com +ads"v6-adashx.ut.amap.com +ads%v6-adashx.ut.cainiao.com +ads v6-adashx.ut.ele.me +ads$v6-adashx.ut.taobao.com adsw.m.taobao.com adsyiliao.hupan.com adsalibabacloud.co.inalibabacloud.comalibabacloud.com.aualibabacloud.com.hkalibabacloud.com.myalibabacloud.com.sgalibabacloud.com.tw alicloud.comalibabadns.com @@ -315,8 +347,9 @@ aliyun.com aliyuncdn.com cdngslb.com hichina.comica-allianc !cn'oss-me-east-1.aliyuncs.com !cn'oss-us-east-1.aliyuncs.com !cn'oss-us-west-1.aliyuncs.com -!cn ddurl.to dingding.xin dingtalk.cn dingtalk.com dingtalk.netdingtalkapps.com laiwang.com lwurl.to -ele.me elemecdn.com eleme.cnteambition.comteambition.netteambitionapis.com uc.cn  ucweb.com mobmore.com  umeng.comumengcloud.com  umsns.com umtrack.com +!cn ddurl.to dingding.xin dingtalk.cn dingtalk.com dingtalk.netdingtalkapps.com laiwang.com lwurl.to doservice.com +ele.me +ele.to eleme.cn eleme.io elemecdn.cn elemecdn.com  elenet.meteambition.comteambition.netteambitionapis.com uc.cn  ucweb.com mobmore.com  umeng.comumengcloud.com  umsns.com umtrack.com uyunad.comwhalecloud.comalog.umeng.com ads alog.umengcloud.com ads @@ -342,7 +375,8 @@ lazada.comliangxinyao.com m-now.cn maitix.com  mdeer.com mei.commiaostreet.com  mshare.cc nic.xinphilanthropy.xin phpwind.com phpwind.netqingtingtrip.com  rexpos.cn saee.org.cn shenjing.com  shuqi.comshuqireader.com sparenode.com  supet.com  ttpod.com wandoujia.com xin.xinxinlingshou.cn yowhale.com yunos-inc.com  yunos.comyushanfang.com zuodao.comaliexpress.com aliexpress.rualipayplus.com alipay.hk !cn alipaymo.com -!cnalicloudccp.comaliyundrive.comaliyundrive.net cainiao.comcainiao.com.cncainiao-inc.com freshhema.com hemamax.com +!cnalicloudccp.com +alipan.comaliyundrive.comaliyundrive.net cainiao.comcainiao.com.cncainiao-inc.com freshhema.com hemamax.com hemaos.com hemashare.cn shyhhema.comantfortune.com fund123.cn antfin.com antgroup.comantgroup-inc.cn sm.cn 1688.com etao.com juhuasuan.comlingshoujia.com @@ -351,16 +385,23 @@ taobao.com taobao.org taobaocdn.comtaobizhong.comtaopiaopiao.com tb.cn tbcache.com tburl.in  tmall.com tmall.ru tmalltv.com tmjl.ai quark.cn alitrip.com  feizhu.cn feizhu.com fliggy.com  fliggy.hk -iuynfg.com amap.com amapauto.com autonavi.com  gaode.com  xiami.com xiami.fm  xiami.net -koubei.com zhisheng.com npmmirror.com - +iuynfg.com a-map.cn a-map.co +a-map.link  a-map.vipacloudrender.com amap.com amapauto.com anav.com autonavi.com  gaode.com  xiami.com xiami.fm  xiami.net +koubei.com zhisheng.com npmmirror.com goofish.com + ALIBABA-ADS a.alimama.cn adsacjs.aliyun.com +ads!adash-c.m.taobao.com +ads"adash-c.ut.taobao.com +ads0#adash-emas.cn-hangzhou.aliyuncs.com adsadash.m.taobao.com +ads#adash.man.aliyuncs.com ads!adashbc.m.taobao.com ads"adashbc.ut.taobao.com -ads"adash-c.ut.taobao.com ads adashx.m.taobao.com +adsadashx.ut.amap.com +adsadashx.ut.ele.me +ads adashx.ut.youku.com ads$adashx4ae.ut.taobao.com ads#adashx4yt.m.taobao.com ads#adashxgc.ut.taobao.com @@ -371,20 +412,17 @@ koubei.com zhisheng.com npmmirror.com ads#agoodm.wapa.taobao.com ads alipaylog.com adsamdc.alipay.com -adsamdc.m.taobao.com ads api.wapa.taobao.com ads#api.waptest.taobao.com adsapoll.m.taobao.com -ads#appdownload.alicdn.com adsatanx.alicdn.com adsatanx2.alicdn.com +ads!c-adash.m.taobao.com adscdn0.mobmore.com adsclick.aliyun.com ads&click.mz.simba.taobao.com adscm.ipinyou.com -ads cm.mlt01.com ads!dsp.simba.taobao.com -adserr.taobao.com adsex.mobmore.com ads ex.puata.info ads!fav.simba.taobao.com @@ -399,6 +437,10 @@ g.tbcdn.cn adsgtms02.alicdn.com adsgtms03.alicdn.com adsgtms04.alicdn.com +adsh-adashx.ut.ele.me +ads#h-adashx.ut.taobao.com +ads"h-adashx.ut.youku.com +ads&h-adashx4yt.ut.taobao.com adshydra.alibaba.com ads'hz.pre.tbusergw.taobao.net ads#hz.tbusergw.taobao.net @@ -408,6 +450,7 @@ g.tbcdn.cn ads$intl.waptest.taobao.com ads"jxlog.istreamsche.com adslog.umtrack.com +ads!m-adash.m.taobao.com adsm.intl.taobao.com adsm.simba.taobao.com adsmatch.p4p.1688.com @@ -426,7 +469,6 @@ g.tbcdn.cn adsrj.m.taobao.co adsrj.m.taobao.com adssdkinit.taobao.com -adsshow.re.taobao.com adssimaba.taobao.com adssimba.m.taobao.com ads!srd.simba.taobao.com @@ -440,6 +482,10 @@ g.tbcdn.cn ads tvupgrade.yunos.com adstyh.taobao.com adsuserimg.qunar.com +ads"v6-adashx.ut.amap.com +ads%v6-adashx.ut.cainiao.com +ads v6-adashx.ut.ele.me +ads$v6-adashx.ut.taobao.com adsw.m.taobao.com adsyiliao.hupan.com ads @@ -468,7 +514,10 @@ aliyun.com aliyuncdn.com cdngslb.com hichina.comica-allianc  ALJAZEERA ajplus.net aljazeera.com aljazeera.netpalestineremix.comsarajevopodopsadom.comsrebrenica360.com syhacked.com -& + +AMAP a-map.cn a-map.co +a-map.link  a-map.vipacloudrender.com amap.com amapauto.com anav.com autonavi.com  gaode.com +% AMAZON amazon-adsystem.com adsserving-sys.com adsamazontrust.com awstrust.com @@ -497,7 +546,7 @@ nwcddns.cn cn route53.cn cnsagemaker.com.cn -cn".+\.awsdns-cn-[0-9][0-9]\.biz$$ .+\.awsdns-cn-[0-9][a-e0-9]\.cn$".+\.awsdns-cn-[0-9][0-9]\.com$".+\.awsdns-cn-[0-9][0-9]\.net$".+\.awsdns-cn-[0-9][0-9]\.top$awsacmvalidations.comacmvalidationsaws.comaesworkshops.comamazonaws-china.comamazonaws.co.uk amazonaws.com amazonaws.tv amazonses.comamazonworkdocs.comamplifyapp.comamplifyframework.comaws-iot-hackathon.comawsautopilot.comawsautoscaling.com awsbraket.comawscommandlineinterface.comawsedstart.comawseducate.comawseducate.netawseducate.orgawsglobalaccelerator.comawsloft-johannesburg.comawsloft-stockholm.comawssecworkshops.com awsstatic.comawsthinkbox.com awstrack.mecdkworkshop.comcloudfront.comcloudfront.netcontainersonaws.comelasticbeanstalk.comthinkboxsoftware.com".+\.awsdns-[0-9][0-9]\.co\.uk$.+\.awsdns-[0-9][0-9]\.com$.+\.awsdns-[0-9][0-9]\.net$.+\.awsdns-[0-9][0-9]\.org$imdbboxofficemojo.com imdb.com imdb.tomedia-imdb.com +cn0,.+\.awsdns-cn-[0-9][0-9]\.(biz|com|net|top)$$ .+\.awsdns-cn-[0-9][a-e0-9]\.cn$awsacmvalidations.comacmvalidationsaws.comaesworkshops.comamazonaws-china.comamazonaws.co.uk amazonaws.com amazonaws.tv amazonses.comamazonworkdocs.comamplifyapp.comamplifyframework.comaws-iot-hackathon.comawsautopilot.comawsautoscaling.com awsbraket.comawscommandlineinterface.comawsedstart.comawseducate.comawseducate.netawseducate.orgawsglobalaccelerator.comawsloft-johannesburg.comawsloft-stockholm.comawssecworkshops.com awsstatic.comawsthinkbox.com awstrack.mecdkworkshop.comcloudfront.comcloudfront.netcontainersonaws.comelasticbeanstalk.comthinkboxsoftware.com0,.+\.awsdns-[0-9][0-9]\.(co\.uk|com|net|org)$imdbboxofficemojo.com imdb.com imdb.tomedia-imdb.com kindle kindle.cn cn kindle.co.jp kindle.co.uk kindle.com  kindle.de  kindle.es  kindle.fr  kindle.in  kindle.it  kindle.jpkindleoasis.cn @@ -543,6 +592,8 @@ AMAZON-ADS amazon-adsystem.com @ AMAZONTRUSTamazontrust.com awstrust.com ss2.us + +AMC amc.com amcn.comamcnetworks.com amcplus.comrne5a6ae085b6c43020dea230eb0c0ecc33a188227507da97b8ecc05eb8beace6.us-east-1.prod.service.minerva.devices.a2z.com ` AMD amd.com amd.com.cnamdfanstore.com @@ -557,10 +608,11 @@ P ANANDTECH anandtech.com . ANDROID android.comandroidify.com - + ANIME  9anime.cz  9anime.id  9anime.to  9anime.wsanimedao-tv.comcrunchyroll.comfunimation.com gogo-load.com gogoanime.vcgogoanime.wiki gogocdn.net hidive.com -vrv.co +vrv.co +age.tv  agedm.org ( ANON-V anon-v.com @@ -586,11 +638,12 @@ apifox.com APKCOMBO apkcombo.com  APKMIRROR apkmirror.com -L -APKPURE apkpure.com cdnpure.com pureapk.com +] +APKPURE apkpure.com apkpure.net cdnpure.com pureapk.com winudf.com - -APPLEiadsdk.apple.com + +APPLE%api-adservices.apple.com +adsiadsdk.apple.com ads iad.apple.com ads qwapi.com adscalendarserver.orgapple-cloudkit.com cups.orgdeveloper.apple.comdevimages-cdn.apple.comdevstreaming-cdn.apple.comfoundationdb.orgmacosforge.org macruby.com macruby.net macruby.orgapple-mapkit.complaygrounds-cdn.apple.com carekit.orgresearchandcare.orgresearchkit.cn @@ -740,7 +793,10 @@ newton.com next.com overapple.com powerbook.eupullstring.ne touchid.tv touchid.wangtracking-location.comtruedepth3d.com tryrating.comwebobjects.co.uk webobjects.de webobjects.euwebobjects.net wuxiapple.com wwapple.netwww-sms-apple.com wwwapple.com wwwapple.net wwwlapple.com xn--czrs0t4phtr3a.cn cnxn--fiqs8sxootzz.cn cn xn--fiqs8sxootzz.xn--hxt814e!xn--gtvq61aiijy0b.xn--hxt814exn--gtvz22d.wangxn--gtvz22d.xn--hxt814exn--hxtr4rozx.xn--czr694b xn--kput3imi374g.xn--hxt814e#xn--ohq11k7pl25iyo8a.cn -cn xn--ruq8a011kt6y.xn--hxt814eapple.com.akadns.net%!courier-push-apple.com.akadns.netpush-apple.com.akadns.net."amp-api-search-edge.apps.apple.com +cn xn--ruq8a011kt6y.xn--hxt814eapple.com.akadns.net%!courier-push-apple.com.akadns.netpush-apple.com.akadns.net:.amp-api-edge-lb-cn.itunes-apple.com.akadns.net +cn7+amp-api-edge-lb.itunes-apple.com.akadns.net +cn'amp-api-edge.apps.apple.com +cn."amp-api-search-edge.apps.apple.com cn"amp-api.apps.apple.com cn aod.itunes.apple.com cn#api-edge.apps.apple.com @@ -756,7 +812,12 @@ touchid.tv touchid.wangtracking-location.comtruedepth3d.com cn(gspe11-2-cn-ssl.ls.apple.com cn&gspe12-cn-ssl.ls.apple.com cn&gspe85-cn-ssl.ls.apple.com +cn5)inappcheck-cn.itunes-apple.com.akadns.net +cn5)inappcheck-lb.itunes-apple.com.akadns.net +cn'inappcheck.itunes.apple.com cn!init.itunes.apple.com +cn+init.gc-lb.apple.com.akadns.net +cninit.gc.apple.com cn$iosapps.itunes.apple.com cn"js-cdn.music.apple.com cn km.support.apple.com @@ -786,6 +847,10 @@ touchid.tv touchid.wangtracking-location.comtruedepth3d.com cna5.mzstatic.com cn, adcdownload.apple.com.akadns.net cn!adcdownload.apple.com +cn#amp-api.media.apple.com +cn&api-p-ap-c.smoot.apple.com +cn&api-p-ap-d.smoot.apple.com +cn&api-p-ap-e.smoot.apple.com cn."app-site-association.cdn-apple.com cnappldnld.apple.com cn"appldnld.g.aaplimg.com @@ -817,44 +882,54 @@ touchid.tv touchid.wangtracking-location.comtruedepth3d.com cn cl5.apple.com cn+clientflow.apple.com.akadns.net cn clientflow.apple.com +cn, cn-smp-paymentservices.apple.com cn."configuration.apple.com.akadns.net cn#configuration.apple.com cncstat.apple.com cncstat.cdn-apple.com cn."dd-cdn.origin-apple.com.akadns.net +cndejavu.apple.com cn(download.developer.apple.com +cn!experiments.apple.com cngs-loc-cn.apple.com cngs-loc.apple.com cn%gsp10-ssl-cn.ls.apple.com +cn!gsp12-cn.ls.apple.com cn!gsp13-cn.ls.apple.com cnC7gsp4-cn.ls.apple.com.edgekey.net.globalredir.akadns.net cn, gsp4-cn.ls.apple.com.edgekey.net cn gsp4-cn.ls.apple.com cn gsp5-cn.ls.apple.com cn%gsp85-cn-ssl.ls.apple.com +cn(gspe19-2-cn-ssl.ls.apple.com cn&gspe19-cn-ssl.ls.apple.com cn-!gspe19-cn.ls-apple.com.akadns.net cn"gspe19-cn.ls.apple.com cn#gspe21-ssl.ls.apple.com cngspe21.ls.apple.com cn#gspe35-ssl.ls.apple.com +cn&gspe79-cn-ssl.ls.apple.com cn+guzzoni-apple-com.v.aaplimg.com cnguzzoni.apple.com +cn#guzzoni.smoot.apple.com cniadsdk.apple.com cn, icloud-cdn.icloud.com.akadns.net cn icloud.cdn-apple.com cn'images.apple.com.akadns.net cn?3images.apple.com.edgekey.net.globalredir.akadns.net cnimages.apple.com +cninit-kt.apple.com cn3'init-p01md-lb.push-apple.com.akadns.net cn init-p01md.apple.com cn3'init-p01st-lb.push-apple.com.akadns.net cn%init-p01st.push.apple.com cn3'init-s01st-lb.push-apple.com.akadns.net cn%init-s01st.push.apple.com +cninit.ess.apple.com cn(iosapps.itunes.g.aaplimg.com cnipcdn.apple.com cniphone-ld.apple.com +cn1%iphone-ld.origin-apple.com.akadns.net cn is1-ssl.mzstatic.com cnis1.mzstatic.com cn is2-ssl.mzstatic.com @@ -871,19 +946,30 @@ touchid.tv touchid.wangtracking-location.comtruedepth3d.com cn)mesu-cdn.apple.com.akadns.net cn+mesu-china.apple.com.akadns.net cnmesu.apple.com +cnml.cdn-apple.com cnmusic.apple.com cn(ocsp-lb.apple.com.akadns.net cnocsp.apple.com cnocsp2.apple.com cnoscdn.apple.com cn-!oscdn.origin-apple.com.akadns.net +cn(osxapps.itunes.g.aaplimg.com cnpancake.apple.com cn, pancake.cdn-apple.com.akadns.net +cnpba0.apple.com +cn probe.siri.apple.com cn1%prod-support.apple-support.akadns.net cn&publicassets.cdn-apple.com cn#reserve-prime.apple.com cns.mzstatic.com +cn'seed-sequoia.siri.apple.com +cn'seed-swallow.siri.apple.com +cnseed.siri.apple.com +cnsequoia.apple.com +cn(sh-pod2-smp-device.apple.com +cn)shazam-insights.cdn-apple.com cn(smp-device-content.apple.com +cnstatic.gc.apple.com cn4(stocks-sparkline-lb.apple.com.akadns.net cn&stocks-sparkline.apple.com cn>2store.apple.com.edgekey.net.globalredir.akadns.net @@ -893,6 +979,7 @@ touchid.tv touchid.wangtracking-location.comtruedepth3d.com cn+store.storeimages.cdn-apple.com cn2&support-china.apple-support.akadns.net cnsupport.apple.com +cn+swallow-apple-com.v.aaplimg.com cnswallow.apple.com cn."swcatalog-cdn.apple.com.akadns.net cnswcatalog.apple.com @@ -902,19 +989,26 @@ touchid.tv touchid.wangtracking-location.comtruedepth3d.com cnswdist.apple.com cn+swscan-cdn.apple.com.akadns.net cnswscan.apple.com +cnsylvan.apple.com +cn(tj-pod1-smp-device.apple.com cn1%updates-http.cdn-apple.com.akadns.net cn&updates-http.cdn-apple.com cn!updates.cdn-apple.com cnvalid.apple.com cn-!valid.origin-apple.com.akadns.net +cn-!weather-data.apple.com.akadns.net cn"weather-data.apple.com +cn!weather-map.apple.com +cn"weather-map2.apple.com +cn weatherkit.apple.com cn<0www.apple.com.edgekey.net.globalredir.akadns.net cn%www.apple.com.edgekey.net cn www.apple.com cn xp.apple.com cn -^ - APPLE-ADSiadsdk.apple.com + + APPLE-ADS%api-adservices.apple.com +adsiadsdk.apple.com ads iad.apple.com ads qwapi.com ads @@ -951,8 +1045,10 @@ applvn.com APPLYSQUAREapplysquare.comapplysquare.net  APTOIDE aptoide.com -C -ARCHIVE archive.orgarchive-it.orgopenlibrary.org + +ARCHIVE  4pcdn.org +4plebs.orgarchive-it.org archive.org +archive.ph archive.todayopenlibrary.org i ARCHIVEOFOUROWN ao3.orgarchiveofourown.orgarchiveofourown.comarchiveofourown.net 4 @@ -1001,15 +1097,29 @@ ATTWATCHTV att.tv atttvnow.comattwatchtv.com directv.com  dtvce.comnettyinternet.com  AUTHY  authy.com - -AUTODESK autodesk.com +d +AUTODESK 123dapp.com123dappipad.com123dartisan.com 123dcatch.com123dcircuits.com123dcreature.com123dcreaturenews.com123ddesign.com123ddoodler.com 123dmake.com 123dnews.com 123dpro.com 123dpro.net123dsculpt.com20yearsoffea.com360autodesk.com 360nexus.com 360nexus.net +360plm.com360trailers.com3d-december.com3ddecember.com 3december.com3decemberonline.com 3drules.com 3dstudio.com  3dtin.com  3dtin.net 5-d.com 51tuqiang.com5axis-machining.com +acdocs.com +adinst.com adskcloud.com adskcloud.net adskeng.netadskengineering.net adskengpp.net adskengpr.net  adtcc.comaecexcellence.comaerospace-cadcam.comaerospace-design.comairgunstudio.com  alias.comaliasadvantage.comaliasimaginationsengine.com aliasple.comaliasshowcase.comaliassketchbook.comaliassketchbookpro.comaliassystems.com aliasvisualizationstudio.comaliaswavefront.comarchitectural-cadcam.comarnoldrenderer.com +artcam.comartcamexpress.comartcaminsignia.comartcamjewelsmith.com artcampro.comassemblesystems.comautocad-schulungen.com autocad.comautocad360.com autocad3d.comautocadarchitecturecc.comautocadexpert.comautocadformac.comautocadfreestyle.com autocadlt.comautocadltbg.comautocadmac.comautocadmobile.comautocadsucks.comautocadsucks.net autocadws.com autocadws.netautodesk-aia-me.comautodesk-events.comautodesk-kickoff.comautodesk-mm.comautodesk-news.comautodesk-online.comautodesk-service.comautodesk-services.comautodesk-support.comautodesk-university.comautodesk-usability.com autodesk.com autodesk.dev autodesk.netautodesk123d.comautodesk123dnews.comautodesk360.comautodesk360access.comautodesk360beta.comautodesk360bim.comautodesk360express.comautodesk360forbim.comautodesk360forplm.comautodesk360nexus.comautodesk360nexus.netautodesk360plm.comautodesk360pro.com!autodesk360solutionforbim.com!autodesk360solutionforplm.comautodesk360vault.comautodeskaecfeed.comautodeskandcitrix.comautodeskarcade.comautodeskautocadlt.comautodeskautomotive.comautodeskbim360.comautodeskbookrequest.comautodeskbuild.comautodeskbuildingops.comautodeskbuildspc.comautodeskcave.comautodeskchronicle.comautodeskcommunications.comautodeskcompetitions.com!autodeskdesigncompetition.com"autodeskdesigncompetitions.comautodeskdiscussions.comautodeskdocandmedia.com#autodeskdocandmediaamericas.comautodeskdocandmediaasia.comautodeskdocandmediaemea.com!autodeskdocandmediaeurope.comautodeskegitimleri.comautodeskenterprise.comautodeskevents.comautodeskfashionstyler.comautodeskforgames.comautodeskforge.comautodeskformit.comautodeskfoundation.comautodeskfusionlifecycle.comautodeskgovernment.net#autodeskgreenbuildingstudio.comautodeskhelp.comautodeskicpcouncil.comautodeskimpression.comautodeskinform.comautodeskinstant.comautodeskjournal.comautodesklearning.comautodesklistens.comautodesklivedesign.comautodesklms.com$ autodeskmanufacturingacademy.com%!autodeskmayaformotiongraphics.comautodeskmedbookrequest.comautodeskmedia.comautodeskmediarequest.comautodeskmeetings.comautodeskmfg.com%!autodeskmotiongraphicsandmore.comautodesknews.comautodeskonline.comautodeskpartner.comautodeskplm.comautodeskplm360.comautodeskplm360.netautodeskproductreviews.comautodeskprofiles.comautodeskprograms.comautodeskresearch.comautodeskrevit.comautodeskrevit.netautodeskrevitsucks.comautodeskrevitsucks.netautodeskseek.comautodesksketchbook.com"autodesksketchbookdesigner.comautodeskstylebook.comautodesksubscription.comautodesksucks.comautodesksucks.netautodesktechdays.comautodesktechx.comautodesktinkerbox.comautodesktravel.comautodeskturkiye.comautodeskuniversity.comautodeskuniversity2013.comautodeskvasari.comautodeskvasari.netautodeskvietnam.comautodeskviewer.comautodeskworkshop.comautodeskworkshop.netautomotive-cadcam.comautosketch.com auxdubai.com avatara.combehindthescreenz.com best4bim.com bestbim.com betterbim.combetterwithautodesk.com bim-360.com +bim360.com +bim360.netbim360field.combim360glue.com bim360ops.combim3dcontent.com bimadsk.com bimglue.combimlibrary.com bimseeker.com bimsource.com bimworld.com bridgebim.com brni.combuilding3dcontent.com cad-mep.comcadcamsystemsinc.com cadduct.com +cadmep.comcadoverlay.com +cadren.com  caice.com cam-duct.com camduct.comceramics-cadcam.com +cfd-tv.com cfdesign.comchina-autodesk.comcitrixandautodesk.com civil3d.com civilcc.comcivilsoftware.netclimate-server.comcompass-system.comcompass-systems.comconstructware.comcontechacademy.comcrankplayer.comcreatewhatsnext.comcreativepass.comcreatwhatsnext.comdarwindimensions.comdelcam-ams.comdelcam-electrode.com delcam-na.comdelcam-robotics.comdelcam-services.com +delcam.comdelcamconsulting.comdelcamforsolidworks.com delcamna.com delcamtv.comdelcamuniversity.com delcamusa.comdesign-ledrev.comdesign-ledrevolution.comdesignledrevolution.comdesignsformovement.com designxml.com designxml.netdestinationbim.comdigitalprototyping.com discreet.com dodv.com drainage.com drnastran.com dwg.comdwgtrueconvert.comdwgtrueview.comdynamobuilds.comdynamopackages.comdynamoreach.com ecotect.com ecotect.net +ecscad.comecspublisher.comeducation-cadcam.com ember3dp.comemberprinter.comemergingsolutions.comenergystarbuildings.comeraofconnection.com esopworld.com#eueuropeansustainabledesign.neteurocodesoftware.com!europeansustainabledesign.com!europeansustainabledesign.net($europeansustainabledesigncouncil.com($europeansustainabledesigncouncil.netevalviewer.com evolver.com evolver3d.comevolverpro.comextensions4revit.comfakeorfoto.comfakeorphoto.comfeanonlinear.comfeaturecam.com +five-d.comflameunleashed.com flowfront.com flowfront.netfluidfxapp.com fmdesktop.comfollowpype.comfootwear-cadcam.com formit360.comformitfactory.com freefbx.comfusionlifecycle.comfusionproductionapps.com$ futureofbritishmanufacturing.comfutureofmaktingthings.com  gbxml.netgeneticconstructor.comgeospatialimaging.comgeospatialinfo.comgetbuzzsaw.comgivemebuzzsaw.com gobuildx.netgovernmentengineer.comgreenbuildingstudio.com hmsxpress.comhomestylerapp.comhomestylernews.comhorizontal-llc.comhorizontal-systems.comhorizontalglue.comhorizontalsystems.com hsm-works.comhsm-xpress.comhsmexpress.com hsmworks.com hsmxpress.comidea-server.comimagemodeler.comimaginationsengine.comimpactdesignhub.cominfraworks.cominstallbuzzsaw.comintelisolve.cominventor-certified.cominventorfusion.cominventorseries.comistorytell.comizmirautodeskegitimleri.com jasa3dmax.comjasaautocad.com kaydara.comkeepyourcad.com kynogon.comlasersawapp.comlicenseparser.comlivesketchshare.comlrfdsoftware.comlunchwithpype.commachine-dna.commadewithmaya.commadewithstudiotools.com magestic.commakeanything.commakeitrealcontest.commakingstartshere.commap-software.com mapguide.commappingonline.commarinecadcam.commarkingmenus.commatchmover.commaxillofacial-cadcam.commayacomplete.commayaconductors.commayafluideffects.commayaformotiongraphics.com mayagames.commayamasters.commayamentor.netmayamentors.commayamentors.netmayaonlinux.com mayaonmac.com mayaonosx.commayapressbooks.com mayasucks.commayaunlimited.com mayauser.com mayauser.netmayavisualization.commedicalimplants-cadcam.com meshmixer.commeshmixerforum.commimistudio.commimistyler.com mmmanual.com moldflow.commoldflowexpress.commoleculardesigntoolkit.com molecularsimulationtools.commolecularviewer.com molviewer.commorewithautodesk.commotiongraphicsandmore.com mudbox3d.commy1stflame.com myautocad.commyautodeskbenefits.commyfirstflame.commymapportal.comnastranincad.com nastrannx.comnastrantraining.comnastranworldwide.comnavisworks.comnavisworks.net +neicad.comneiexplicit.com +neifea.com neimotion.comneinastranincad.comneisoftware.comneisolutions.com neiworks.com nenastran.comnetzerobuildings.comnetzerobuildingstudio.com new2fea.com newtofea.comnextgenerationcam.comnonlinearnastran.com objectarx.comoneteamconference.comopenreality.com opticore.comorthopaedic-cadcam.comorthotics-cadcam.compackaging-cadcam.compackagingcadcam.com partmaker.com  pi-vr.compixlr-o-matic.compixlromatic.complansondemand.complasticlabs.complastics-cadcam.com plug-into.comportfoliowall.compoweranimator.compowerinspect.com powermill.compowermillna.compowershape-e.compowershape.comprofilemaster.comprojectpoint.comprojectpoint.netprojectshoreline.comprojectvasari.comps-exchange.comrapidprototyping-cadcam.comreality-computing.comrealpeople-realprojects.comrealpeoplerealprojects.com realviz.com retimer.com  revit.com revitcc.comrevitsucks.net robobat.comrobotoffice.comsavoycomputing.com scaleform.com  scpic.net sculpoly.comshotgridsoftware.comshotgridstudio.comshotguncloud.com shotgunfx.comshotgunlocalhost.comshotgunsoftware.comshotgunsoftware.netshotgunstudio-test.comshotgunstudio.comshotgunvfx.com simsquad.comsimulationsquad.comsketchbookdesigner.comsketchbookmobile.comsketchbooknews.comsketchbookpro.com skymatter.com smartfea.comsmartnastran.com socailcam.com socialcam.comsocialcammail.com socialkam.com squ1.comsquidplatform.com ssttest.netstingrayengine.comstudiopaint.comstudiosucks.comsubmittal-log.com!sustainablebuildingstudio.com sustainabledesigncouncil.com sustainabledesigncouncil.net suxiebu.comswiss-machining.comswiss-turn.com t-splines.com the-area.com the123d.comthedesignworkshop.com thedesk.comtheinventionworks.comtheinventionworks.net timefxapp.comtinkerboxapp.com tinkercad.comtinkerentertainment.comtinkerplay.nettire-cadcam.comtoolmaking-cadcam.com topobase.comtoy-cadcam.com toycadcam.com truebim.com truedwg.com trunest.comtrusted-dwg.comtrusteddwg.com tryalias.com trydesign.com tspline.com tsplines.comtweakadmin.comtweakfilms.comtweaksoftware.comtyre-cadcam.comtyrecadcam.comupfrontcfd.comupfrontfea.comvelaserver.comvelastaging.com velasync.comvelasystems.com velatest.com viriondb.comvortexmachining.comvred-essentials.comvredessentials.comvredprofessional.com vrnastran.comxn--74q434dwff.comxn--74q434dwff.net r AVAXHOME avxhm.se  avh.world  avxde.org avxhm.is avxlive.icu  xsava.xyz zavat.pw 6 AVMOO avmoo.click  avmoo.com  tellme.pw f AWEMPIRE awempire.com dditsadn.com dditscdn.com docleradn.com doclercdn.com - + AWS a2z.org.cn cn amazonaws.cn @@ -1035,8 +1145,8 @@ nwcddns.cn cn route53.cn cnsagemaker.com.cn -cn".+\.awsdns-cn-[0-9][0-9]\.biz$$ .+\.awsdns-cn-[0-9][a-e0-9]\.cn$".+\.awsdns-cn-[0-9][0-9]\.com$".+\.awsdns-cn-[0-9][0-9]\.net$".+\.awsdns-cn-[0-9][0-9]\.top$awsacmvalidations.comacmvalidationsaws.comaesworkshops.comamazonaws-china.comamazonaws.co.uk amazonaws.com amazonaws.tv amazonses.comamazonworkdocs.comamplifyapp.comamplifyframework.comaws-iot-hackathon.comawsautopilot.comawsautoscaling.com awsbraket.comawscommandlineinterface.comawsedstart.comawseducate.comawseducate.netawseducate.orgawsglobalaccelerator.comawsloft-johannesburg.comawsloft-stockholm.comawssecworkshops.com awsstatic.comawsthinkbox.com awstrack.mecdkworkshop.comcloudfront.comcloudfront.netcontainersonaws.comelasticbeanstalk.comthinkboxsoftware.com".+\.awsdns-[0-9][0-9]\.co\.uk$.+\.awsdns-[0-9][0-9]\.com$.+\.awsdns-[0-9][0-9]\.net$.+\.awsdns-[0-9][0-9]\.org$ - +cn0,.+\.awsdns-cn-[0-9][0-9]\.(biz|com|net|top)$$ .+\.awsdns-cn-[0-9][a-e0-9]\.cn$awsacmvalidations.comacmvalidationsaws.comaesworkshops.comamazonaws-china.comamazonaws.co.uk amazonaws.com amazonaws.tv amazonses.comamazonworkdocs.comamplifyapp.comamplifyframework.comaws-iot-hackathon.comawsautopilot.comawsautoscaling.com awsbraket.comawscommandlineinterface.comawsedstart.comawseducate.comawseducate.netawseducate.orgawsglobalaccelerator.comawsloft-johannesburg.comawsloft-stockholm.comawssecworkshops.com awsstatic.comawsthinkbox.com awstrack.mecdkworkshop.comcloudfront.comcloudfront.netcontainersonaws.comelasticbeanstalk.comthinkboxsoftware.com0,.+\.awsdns-[0-9][0-9]\.(co\.uk|com|net|org)$ + AWS-CN a2z.org.cn cn amazonaws.cn @@ -1062,7 +1172,7 @@ nwcddns.cn cn route53.cn cnsagemaker.com.cn -cn".+\.awsdns-cn-[0-9][0-9]\.biz$$ .+\.awsdns-cn-[0-9][a-e0-9]\.cn$".+\.awsdns-cn-[0-9][0-9]\.com$".+\.awsdns-cn-[0-9][0-9]\.net$".+\.awsdns-cn-[0-9][0-9]\.top$ +cn0,.+\.awsdns-cn-[0-9][0-9]\.(biz|com|net|top)$$ .+\.awsdns-cn-[0-9][a-e0-9]\.cn$  AZURE azure 21vbc.com cn21vbluecloud.com @@ -1129,7 +1239,7 @@ b3itech.cn B3LOG  b3log.org  BAHAMUTbahamut.akamaized.netbahamut.com.tw gamer.com.twgamer2-cds.cdn.hinet.netgamer-cds.cdn.hinet.net -* +( BAIDU a.baidu.com ads ad.duapps.com ads ad.player.baidu.com @@ -1148,9 +1258,7 @@ b3itech.cn adsbaidutv.baidu.com adsbanlv.baidu.com ads bar.baidu.com -ads"bdimg.share.baidu.com adsbdplus.baidu.com -ads bj.bcebos.com adsbtlaunch.baidu.com ads c.baidu.com ads cb.baidu.com @@ -1158,11 +1266,8 @@ b3itech.cn adscjhq.baidu.com adscleaner.baidu.com ads click.bes.baidu.com -adsclick.hm.baidu.com adsclick.qianqian.com -ads"cm.baichuan.baidu.com ads cm.baidu.com -adscm.pos.baidu.com ads cpro.baidu.cn adscpro.baidu.com ads!cpro.baidustatic.com @@ -1200,7 +1305,6 @@ b3itech.cn ads#fc-feed.cdn.bcebos.com adsfclick.baidu.com adsfeed.baidu.com -adsfexclick.baidu.com ads g.baidu.com adsgimg.baidu.com adsguanjia.baidu.com @@ -1239,13 +1343,11 @@ b3itech.cn ads rj.baidu.com adsrplog.baidu.com ads s.baidu.com -adss.cpro.baidu.com ads!sa.tuisong.baidu.com adssclick.baidu.com adssestat.baidu.com adsshadu.baidu.com adsshare.baidu.com -ads"snippet.pos.baidu.com adssobar.baidu.com adssobartop.baidu.com adsspcode.baidu.com @@ -1277,7 +1379,6 @@ b3itech.cn ads$wenku-cms.bj.bcebos.com ads%wisepush.video.baidu.com ads wm.baidu.com -adswn.pos.baidu.com adsznsv.baidu.com adszz.bdstatic.com adszzy1.quyaoya.com @@ -1296,7 +1397,7 @@ hao222.com haokan.com jomocdn.net jomodns.com mipcdn.com  nuomi.com quyaoya.com shifen.com smartapps.cn  tieba.com tiebaimg.com xianfae.com xiaodutv.com -% +" BAIDU-ADS a.baidu.com ads ad.duapps.com ads ad.player.baidu.com @@ -1315,9 +1416,7 @@ shifen.com smartapps.cn  tieba.com tiebaimg.com xianfae.com adsbaidutv.baidu.com adsbanlv.baidu.com ads bar.baidu.com -ads"bdimg.share.baidu.com adsbdplus.baidu.com -ads bj.bcebos.com adsbtlaunch.baidu.com ads c.baidu.com ads cb.baidu.com @@ -1325,11 +1424,8 @@ shifen.com smartapps.cn  tieba.com tiebaimg.com xianfae.com adscjhq.baidu.com adscleaner.baidu.com ads click.bes.baidu.com -adsclick.hm.baidu.com adsclick.qianqian.com -ads"cm.baichuan.baidu.com ads cm.baidu.com -adscm.pos.baidu.com ads cpro.baidu.cn adscpro.baidu.com ads!cpro.baidustatic.com @@ -1367,7 +1463,6 @@ shifen.com smartapps.cn  tieba.com tiebaimg.com xianfae.com ads#fc-feed.cdn.bcebos.com adsfclick.baidu.com adsfeed.baidu.com -adsfexclick.baidu.com ads g.baidu.com adsgimg.baidu.com adsguanjia.baidu.com @@ -1406,13 +1501,11 @@ shifen.com smartapps.cn  tieba.com tiebaimg.com xianfae.com ads rj.baidu.com adsrplog.baidu.com ads s.baidu.com -adss.cpro.baidu.com ads!sa.tuisong.baidu.com adssclick.baidu.com adssestat.baidu.com adsshadu.baidu.com adsshare.baidu.com -ads"snippet.pos.baidu.com adssobar.baidu.com adssobartop.baidu.com adsspcode.baidu.com @@ -1444,7 +1537,6 @@ shifen.com smartapps.cn  tieba.com tiebaimg.com xianfae.com ads$wenku-cms.bj.bcebos.com ads%wisepush.video.baidu.com ads wm.baidu.com -adswn.pos.baidu.com adsznsv.baidu.com adszz.bdstatic.com adszzy1.quyaoya.com @@ -1462,9 +1554,9 @@ o BANDWAGONHOSTbandwagonhost.com bwh1.net bwh8.net  bwh81.net  bwh88.net  bwh89.net d BARRONSbarrons-advisor.combarrons-conferences.com barrons.comwsjbarrons.com - + BBCbbcbbc-reporting-api.app  bbc.co.uk bbc.com -bbc.in +bbc.inbbc.mp-pxcdn.com bbc.net.ukbbcfmt.s.llnwi.net bbci.co.ukbbcmedia.co.ukbbcpersian.combbcverticals.com bidi.net.uk!aod-pod-uk-live.akamaized.net!as-dash-uk-live.akamaized.net as-hls-uk-live.akamaized.net!ve-dash-uk-live.akamaized.net%!ve-uhd-push-uk-live.akamaized.net"vod-dash-uk-live.akamaized.net"vod-dash-ww-live.akamaized.net!vod-hls-uk-live.akamaized.net!vod-sub-uk-live.akamaized.net#vod-thumb-uk-live.akamaized.net#vod-thumb-ww-live.akamaized.net&"vs-cmaf-push-uk-live.akamaized.net'#vs-cmaf-pushb-ww-live.akamaized.net%!vs-hls-push-uk-live.akamaized.net&"vs-hls-pushb-uk-live.akamaized.net B @@ -1514,19 +1606,19 @@ gsccdn.com  gslink.usonlinegeeksquad.comrocketfishproducts.com beth.games bethesda.netbethesdagamestudios.com bethsoft.com doom.comelderscrolls.com * BETTEREXPLAINEDbetterexplained.com - + BILIBILIbilibiligame.cn cnbilibiligame.co cnbilibiligame.net cn biligame.co cn biligame.com cn biligame.net -cnbilicomics.commanga.bilibili.com +cn bilicomic.combilicomics.commanga.bilibili.com acg.tv acgvideo.comanimetamashi.cnanimetamashi.com anitama.cn anitama.net b23.tv  bigfun.cn bigfunapp.cn  bili22.cn bili2233.cn  bili23.cn  bili33.cn biliapi.com biliapi.net bilibili.cc bilibili.cn bilibili.com bilibili.net bilibili.tv !cnbilibilipay.cnbilibilipay.com bilicdn1.com bilicdn2.com bilicdn3.com bilicdn4.com bilicdn5.com -biligo.com biliintl.com +biligo.com biliimg.com biliintl.com !cn bilivideo.cn bilivideo.com bilivideo.net dreamcast.hk  hdslb.com  hdslb.org im9.com maoercdn.com mincdn.com yo9.com$ upos-hz-mirrorakam.akamaized.net  @@ -1539,17 +1631,18 @@ mincdn.com yo9.com$ upos-hz-mirrorakam.akamaized.net cn e BILIBILI2 bili2.cc bili888.com bili999.com($(^|\.)bilibili3(0[1-9]|1[0-2])\.xyz$ - + BINANCE binance.ccbinance.charity binance.cloud binance.co binance.com binance.info binance.me binance.net binance.org -binance.usbinance.vision binancezh.be binancezh.biz binancezh.cc binancezh.co binancezh.combinancezh.info binancezh.ink binancezh.kimbinancezh.linkbinancezh.livebinancezh.mobi binancezh.net binancezh.pro binancezh.sh binancezh.topbinanceapi.com bnbstatic.com - +binance.usbinance.visionbinancecnt.com binancezh.be binancezh.biz binancezh.cc binancezh.co binancezh.combinancezh.info binancezh.ink binancezh.kimbinancezh.linkbinancezh.livebinancezh.mobi binancezh.net binancezh.pro binancezh.sh binancezh.topbinanceapi.com bnbstatic.com saasexch.com saasexch.ioappsflayer.com + BINGbing bing.com bing.com.cn -cn bing.net bingads.combingagencyawards.com bingapis.combingapistatistics.combingsandbox.combingvisualsearch.com bingworld.combluehatnights.com -dictate.msflipwithsurface.commasalladeloslimites.commicrosoft-give.commicrosoftcloudsummit.commicrosoftdiplomados.commicrosoftlatamholiday.commicrosoftmxfilantropia.com!microsoftpartnersolutions.commsunlimitedcloudsummit.comoffice365love.comoffice365tw.comrenovacionoffice.comsprinklesapp.com cn.bing.com +cn bing.net bing123.com bingads.combingagencyawards.com bingapis.combingapistatistics.combingparachute.combingsandbox.combingvisualsearch.com bingworld.combluehatnights.com +dictate.msflipwithsurface.commasalladeloslimites.commicrosoft-give.commicrosoftcloudsummit.commicrosoftdiplomados.commicrosoftlatamholiday.commicrosoftmxfilantropia.com!microsoftpartnersolutions.commsunlimitedcloudsummit.comoffice365love.comoffice365tw.comrenovacionoffice.comsprinklesapp.comlocation.microsoft.com cn.bing.com cn cn.bing.net +cncn.mm.bing.net cn ditu.live.com cnbj1.api.bing.com cnemoi-cncdn.bing.com @@ -1563,8 +1656,8 @@ dictate.msflipwithsurface.commasalladeloslimites.commicrosoft- bit.ly  bitly.com bitly.is < BITSQUARE bisq.io bisq.network bitsquare.io - - BITWARDEN bitwarden.com +C + BITWARDEN bitwarden.com bitwarden.eu bitwarden.net K BJYOUTHbjyouth.gov.cn bjyouth.net sqqnh.cn  sqqnh.org H @@ -1579,9 +1672,18 @@ battle.netblizzard.nefficient.co.krblzddist1-a.akamaihd.netblz BLOOMBERG  bloomberg bbgevent.com bbhub.io bbthat.com bgov.com bloomberg.cnbloomberg.co.jpbloomberg.co.kr bloomberg.combloomberg.com.br bloomberg.fm bloomberg.tvbloombergapps.combloombergarcade.combloombergbeta.combloombergbna.combloombergbreakaway.combloombergbriefs.combloombergchina.combloombergenvironment.combloombergforeducation.combloomberggovernment.combloombergindices.combloombergindustry.combloomberglabs.combloomberglaw.combloomberglive.combloomberglp.combloombergmedia.combloombergnext.combloombergpolarlake.combloombergprep.combloombergquint.combloombergradio.combloombergsef.combloombergspace.combloombergstatus.combloombergsurvey.combloombergtax.combloombergtax1.combloombergtaxtech.com!bloombergtradingchallenge.combloombergtv.mnbloombergvault.combloombergview.comblpcareers.com blpevents.comblpprofessional.com bmia.org bnef.combusinessweek.combusinessweekmag.com bwbx.io citylab.com gotraffic.netlondonmithraeum.comneweconomyforum.comnewenergyfinance.comquicktake.videotechatbloomberg.com tictoc.video -- - BLUEARCHIVEbluearchive-cn.com +\ + BLUEARCHIVEbluearchive.jpbluearchive.nexon.combluearchive-cn.com cn +; +BLUEPOCH sl916.com +cn bluepoch.com +cn +' +BLUEPOCH-GAMES sl916.com +cn +: +BLUESKY bsky.app bsky.network bsky.social  BLURAMS blurams.com s @@ -1720,9 +1822,10 @@ alphera.my alphera.netalpherafinance.com.hkalpherafinancialserv M BOBOPORN boboporn.com boboporn.net bobovip.cc  sesez.com - + BOC -boc.cnbank-of-china.combankofchina.combocfullertonbank.combocamchina.combocaviation.com  boccfc.cc  boccfc.cn  bocgi.com bocgins.com  bochk.com bocichina.cn bocichina.combocichina.com.cn bocifunds.cn bocifunds.combocifunds.com.cn bocigroup.com  bocim.combocservices.com.cn +boc.cnbank-of-china.combankofchina.combocfullertonbank.combocamchina.combocaviation.com  boccfc.cc  boccfc.cn  bocgi.com bocgins.com bochk.com +!cn bocichina.cn bocichina.combocichina.com.cn bocifunds.cn bocifunds.combocifunds.com.cn bocigroup.com  bocim.combocservices.com.cn ? BONGACAMS bcicdn.com bcrncdn.com bongacams.com @@ -1783,9 +1886,32 @@ bttzyw.net BUYPASSbuypass-ssl.com buypass.com buypass.no buypass.se minid.no - + +BYBIT  bybit.com  bycsi.com +bytick.com +byapis.com  bycbe.com bymj.iobybit-exchange.github.iobybit.ada.support +o BYTEDANCE bcy.net -bcyimg.comlf-rc1.yhgfb-cn-static.com  juejin.cn  juejin.im xitu.iop1-juejin.byteimg.comp2-juejin.byteimg.comp3-juejin.byteimg.comp4-juejin.byteimg.comp5-juejin.byteimg.comp6-juejin.byteimg.comp7-juejin.byteimg.comp8-juejin.byteimg.comp9-juejin.byteimg.com larksuite.comlarksuitecdn.combyteoversea.com +bcyimg.comlf-rc1.yhgfb-cn-static.comactivity-zhendingtech.comchangdunovel.comfanqienovel.comfanqieopen.comfanqieopenpic.comfanqieopenstatic.comfanqieopenvod.com fanqiesdk.comfanqiesdkpic.comfanqiesdkstatic.comfanqiesdkvod.com fqnovel.com fqnovelim.comfqnovel-op.com fqnovelop.comfqnovelpic.comfqnovelstatic.comfqnovelvod.comihaohaoxuexi.com +muyewx.com novelfm.comnovelfmpic.comnovelfmstatic.comnovelfmvod.com qznovel.comqznovelpic.comqznovelstatic.comqznovelvod.comp3-novel.byteimg.comp6-novel.byteimg.com(ads3-normal-hl.zijieapi.com +ads(ads5-normal-hl.zijieapi.com +ads'log3-applog-hl.fqnovel.com +ads'log5-applog-hl.fqnovel.com +ads#p3-ad-sign.byteimg.com +ads#p6-ad-sign.byteimg.com +ads#p9-ad-sign.byteimg.com +ads)rtlog3-applog-hl.fqnovel.com +ads)rtlog5-applog-hl.fqnovel.com +ads  juejin.cn  juejin.im xitu.iop1-juejin.byteimg.comp2-juejin.byteimg.comp3-juejin.byteimg.comp4-juejin.byteimg.comp5-juejin.byteimg.comp6-juejin.byteimg.comp7-juejin.byteimg.comp8-juejin.byteimg.comp9-juejin.byteimg.com anycross.com  blmpb.combytedancehermestest.comfalconsending.com +fei-shu.cn!feishu-3rd-party-services.comfeishu-boe.netfeishu-customer.cn feishu-pre.cnfeishu-pre.net feishu-psc.cnfeishu-staging.cn  feishu.cn +feishu.netfeishuapp-cdn.net feishuapp.cn feishuapp.com feishucdn.com feishudoc.cn feishudoc.comfeishuhuiyi.cnfeishuhuiyi.comfeishuimg-boe.comfeishuimg-pre.com feishuimg.comfeishukacdn.comfeishumeetings.cnfeishumeetings.comfeishuoffice.cnfeishuoffice.com feishuopenplatformrecord.com feishupkg.comfeishustatus.cn feishuvc.cn feishuvc.com getfeishu.cn getfeishu.com +getsays.cn getsays.com  lackvc.cnsecurityfeishu.cn securityfs.cnstatusfeishu.cn%!frontier-lark-lb-v3.lf.bytelb.netlark-passport-qa-sg.net lark.cn larkcloud.com larkcloud.net +larkfn.comlarkmeetings.cnlarkmeetings.comlarkoffice.comlarkoffice.com.bytedns1.comlarkofficeapp-boe.comlarkofficeapp-pre.comlarkofficeapp.comlarkofficeboe.comlarkofficecdn.comlarkofficeimg.comlarkofficepkg.comlarkofficepre.com larkrooms.cn larkrooms.comlarksuite-pre.com larksuite.comlarksuite.com.ttdns1.comlarksuite.com.ttdns2.comlarksuitecdn.comlarksuiteimg-boe.comlarksuiteimg-pre.comlarksuiteimg.com +larkvc.comstatuslarkoffice.comthelarkcloud.combaseopendev.com bytecloud.com +byteoc.combytewebservice.com +bytexns.cn bytexns.com bytexns.net bytexopen.combytexservice.com meegobeta.comoceancloudapi.com +okr.cn okr.com +okr.com.cnvscenevideo.combyteoversea.com !cn muscdn.com !cn @@ -1793,35 +1919,107 @@ musical.ly !cntik-tokapi.com !cn tiktok.com +!cntiktokcdn-us.com +!cn tiktokcdn.com !cn tiktokd.net !cn tiktokd.org -!cn tiktokcdn.com !cn tiktokv.com +!cn +tiktokv.us +!cn +tiktokw.us +!cn ttwstatic.com !cn,p16-tiktokcdn-com.akamaized.net -!cn  amemv.com -bytecdn.cnbyted-static.com  byted.org bytedance.com bytedance.netbytedanceapi.com bytedapm.com bytedns.netbytednsdoc.com bytedns1.com bytefcdn.com bytegecko.com bytegoofy.com bytegslb.com bytehwm.com byteimg.com byteintl.net -bytelb.netbyteoversea.com -!cn bytescm.com bytetcc.com bytetos.combytexservice.com feelgood.cn huaxiong.com ibytedapm.com ibytedtos.com +!cnbds.snssdk.com +adsctobsnssdk.com +ads dig.bdurl.net +adsextlog.snssdk.com +ads i.snssdk.com +adsmcs.snssdk.com +ads'pangolin-dsp-toutiao-b.com +ads%pangolin-dsp-toutiao.com +ads'pangolin-sdk-toutiao-b.com +ads%pangolin-sdk-toutiao.com +ads&pangolin-sdk-toutiao1.com +ads pangolin.snssdk.com +ads&panplayable-toutiao-b.com +ads$panplayable-toutiao.com +ads%pglstatp-sdk-toutiao.com +ads(pglstatp-snssdk-toutiao.com +ads#pglstatp-toutiao-b.com +ads!pglstatp-toutiao.com +ads%sf3-ttcdn-tos.pstatp.com +adsaigc-cloud.com bdegnine.com +bplslb.com  bpltm.com byte-dns.com byte-dns.net bytehouse.cnbyteinspire.cnbyteinspire.combytevdn-boe.com bytevdn.comcache4ever.com cache666.comcloudendpoint.cndouyincloud.netdouyincloud.run dycloudbk.com dycloud.runemr-volces.com +feilian.cn iccvlog.com ifeilian.cn ifeilian.cominspirecloud.cninspirecloud.comisealsuite.com ivolces.com kfcbest.com  kych5.commultilingual-volc.comqingfuwuapi.cnqingfuwucdn.com qingfuwu.cn qingfuwu.com slbauto.com  sms18.comtoutiaopanapi.comtoutiaopan.com +ttgslb.com  ttgtm.com vecdnlb.comvecloudgame.com vedcdnlb.com vedsalb.com veefdev.comveew-alb-cn1.comveew-alb-cn2.comveew-alb-ts.com +vegalb.com +vegslb.com  vegtm.net veicplive.comve-imcloud.com vemarsdev.comvemarsstatic.com vemarsweb.com vertciot.com vestack.cloudve-trafficroute.comve-trafficroute.netvolcadocean.com volcadvc.com volcalb.comvolcautovod.com volcbiz.com  volcca.cn +volcca.com +volcca.net volccdn1.com volccdn2.com +volccdn.cn volccdn.comvolcddos001.com volcddos.com volcdem.comvolcdlspace.cn +volcdn.com volc-dns.com volcdns.com volc-dns.net volc-dns.pub volcdns.pub volceapi.comvolceapplog.com volcecr.com volcecw.comvolc-embed.comvolcenginapi.comvolcenginealb.comvolcengineapi.com volcengine.cnvolcengine.comvolcengine-dns.comvolcenginedns.comvolcengine-dns.netvolcenginedns.netvolcengine.netvolcenginepaas.com +volces.com volcfake.comvolcfcdnbyte.com volcfcdn.comvolcfcdndvs.comvolcfcdnplus.comvolcfcdnrd.comvolcfcdnsc.comvolcfxgjrtm.com volcgroup.com volcgslb.com volcgtm.com volciad.com volcimagex.cnvolcimagex.comvolcimagex.netvolcimagextest.comvolcmagicpage.com volcmcdn1.com volcmcdn2.com volcmcdn3.com volcmcdn4.com volcmgs.comvolcmusecdn.com volcocic.comvolcopjrtm.comvolcpartner.comvolcpartner.netvolcsiriusbd.comvolcsirius.comvolcspaceeduc.comvolctracer.com volctrack.comvolctraffic.comvolctranscdn.com volcvideo.comvolcvideos.com volcvms.com volcvod.comvolcwaf001.com volcwaf.comwritingo-editor.com writingo.net  ytxptd.cn  ytxptz.cn zebracdn.com  zjytxd.cn  zjytxp.cn zvip.cn 99uri.cn  99uri.comactivity01.comactivity02.comactivity03.comactivity04.comactivity05.comactivitybyte.comactivity-dy.comactivity-wbsj.com +aihst8.comali-api-test.netali-gtm-01.netali-gtm-pressure.comali-restore.net amemv.cn  amemv.com  amemv.net arco.designawemeughun.comawemeuglang.comawemeugsoul.comawemeugwave.com baikevod.combdactivity.com +bdgslb.com bdispatch.com bdispatch.netbdns-api-test.net bdns-boe.com bdns-boe.netbdns-gtm-01.netbdns-gtm-pressure.combdns-restore.net bdns-test.com bdns-test.net  bdppe.net bdsagslb.combdsagslbtest.combdxigualive.combdxiguavod.combdzjdsagslb.com betaband.net betadance.net betastar.cn bfcdnbf.com bfcdnrd.com bfcdnsc.com boxdouyin.com +bvfcdn.com bx0byte.com byte000.com byte008.com +byte00.com +byte00.net byte7bw.net +byteac.com byteacct.combyteacctimg.combyteactivity11.combyteactivity12.combyteactivity13.combyteactivity14.combyteactivity15.combyteactivity16.combyteactivity.combyteadverts.com byteapi.com +bytecdn.cn bytecdn.com bytecdn.net bytecdntp.com bytecimg.combytedanceapi.combytedance-boe.net bytedance.cn bytedance.com bytedance.net bytedance.org bytedapm.com bytedcdn.combyted-dast.com byted-edu.combytedeliver.combytedgames.com bytedns1.com bytedns2.com bytedns3.com bytedns4.com bytedns5.com bytedns6.com bytedns7.com bytedns.combytednsdoc.com bytedns.net  byted.orgbytedsocial.combyted-static.com byted-ug.com byte-edge.combyte-edgeworker.com bytefae.com bytefast.net bytefcdn.combytefcdnrd.com bytegecko.combytegeckoext.com bytegoofy.com bytegqpo.netbytegrowth.com byte-gslb.com bytegslb.com bytehwm.com byteics.com byteics.net byteimgc.com byteimg.com byteintl.net bytelb000.net +bytelb.com +bytelb.net bytemaimg.combytemastatic.com bytemedi.com bytenewst.com byteorg.com byteorge.combyteoversea.com +!cn byteq5k.com byteq8u.net bytescm.com bytesslb.net bytetcc.com bytetech.info byte-test.cn byte-test.com byte-test.net bytetos.combytetraffic.netbytetstatic.combytetstatic.net bytevalk.combytevcloudvod.combytexservice.com cdnbuild.com cdnbuild.net cdndns1.com cdndns2.com cookicut.com doubo03.com douyinact.com douyinact.net douyinfe.comdraftstatic.com  druid.vip duoshan.comfedlearner.net feelgood.cn gslbdns.com gslbdns.net huaxiong.comhuoshancdn.comhuoshangroup.comhuoshanimg.comhuoshanlive.comhuoshanparty.comhuoshante8.comhuoshanvideo.cnhuoshanvideo.nethuoshanvod.comhuoshanxiaoshipin.cnhuoshanxiaoshipin.nethuoshanzhibo.cnhuoshanzhibo.nethypercachenet.comibdxigualive.comibdxiguavod.com ibytedapm.com ibytedtos.com !cn ibyteimg.com !cn -pstatp.com -snssdk.com  wtturl.cn zijieapi.com zijiecdn.com zijiecdn.net  zjbyte.cn  zjcdn.com toutiao.comtoutiaoapi.comtoutiaocdn.comtoutiaocloud.comtoutiaocloud.nettoutiaohao.comtoutiaohao.net toutiaoimg.cntoutiaoimg.comtoutiaoimg.nettoutiaopage.comtoutiaostatic.comtoutiaovod.com -douyin.com douyincdn.comdouyinliving.com douyinpic.comdouyinstatic.com douyinvod.com huoshan.comhuoshanstatic.comhuoshanzhibo.com +icphoto.cnidouyinliving.comidouyinpic.comidouyinstatic.comidouyinvod.com iesdouyin.com iesdouyin.net ieshuodong.cnieshuodong.net  ihst8.comihuoshanimg.comihuoshanlive.comihuoshanstatic.comihuoshanvod.com iluckysf.netitmanager.clubitoutiaoliving.comjokecommunity.cnjokecommunity.comjokecommunity.net  jstti.com +jtamac.com  kesong.co kolbuyer.cnlivecdnstatic.comlocal-ip.online luckysf.net modernjs.cn +myimis.com  ndcpp.comneihancommunity.cnneihancommunity.comneihancommunity.net nextvid.netneyetwatcher.com oortgslb.com openbcs.com  openve.cnoriginalimg.comoriginalstatic.comoriginalvod.com pacmantwo.comppkankan01.com +pstatp.comqingfuwucdn.net  qishui.cn +qishui.com qishui.com.cnqishuimusic.cnqishuimusic.com.cnqualitycloud.top samasty.comsearchstatic.comsearchtoutiaolive.comshidianguji.com +sinflb.net sinf.net sinf-test.net +snssdk.comsupercachenet.comtekkenthree.com tetrisone.com tiapi.cn  tiapi.net +tlbapm.com +toscdn.com toutiao11.com toutiao12.com toutiao13.com toutiao14.com toutiao15.com toutiaocdn.cntoutiaocdn.nettoutiaocloud.cntoutiaojisu.comtoutiaolite1.comtoutiaolite2.comtoutiaolite.comtoutiaoliving.comtoutiaopic.com toutiaowap.cntoutiaowap.comtoutiaowap.nettr-test-ali.nettr-testboe.net tr-test.net  ttbyte.cn +ttbyte.com +ttbyte.net +ttjisu.com ttwebview.comugshare-img.com vcloudapi.comvcloud-byte.comvestack-beta.comvestack-cicd.comvestack-preview.comvestack-sandbox.com vfcdnrd.comvolcanicengine.comvolcdns-test.comvolcdns-test.net +voleai.comwoaihuoshan.com +wohst8.com  wtturl.cn xiguaapp.cn xiguaapp.comxiguashipin.cnxiguashipin.net xiguavideo.cnxiguavideo.net xsgtvacct.com zijieapi.cn zijieapi.com zijieapi.net zijiecdn.cn zijiecdn.com zijiecdn.net zijiedj.com zijieimg.cn zijieimg.com zijieimg.netzijietiaodong.com zijieurl.cn zijieurl.com zijieurl.net zijiewap.cn zijiewap.com zijiewap.net +zilrms.com +ziyrta.com  zjbyte.cn +zjbyte.com +zjbyte.net  zjcdn.com +zjfcdn.com +zjgslb.com toutiao.comtoutiaoapi.comtoutiaocdn.comtoutiaocloud.comtoutiaocloud.nettoutiaohao.comtoutiaohao.net toutiaoimg.cntoutiaoimg.comtoutiaoimg.nettoutiaopage.comtoutiaostatic.comtoutiaovod.com +douyin.com douyincdn.comdouyinliving.com douyinpic.comdouyinstatic.com douyinvod.com huoshan.comhuoshanstatic.comhuoshanzhibo.com +doubao.com +cncoze.cn +cncoze.com +!cn ixigua.comixiguavideo.com ixgvideo.combdxiguaimg.combdxiguastatic.com  baike.com  feishu.cn feishu.net feishucdn.com feishupkg.com wukong.comwukongwenda.cnwukongwenda.com dcarapi.com dcarimg.com dcarlive.comdcarstatic.com dcarvod.com -dcdapp.com dongchedi.comdongchediapp.com  365yg.comgogokid.com.cn gogokid.com  pipix.com -muyewx.comchangdunovel.com  faceu.com ulikecam.com - +dcdapp.com dongchedi.comdongchediapp.com  365yg.comgogokid.com.cn gogokid.com  pipix.com  faceu.com ulikecam.com +rsproxy.cn + BYTEDANCE-ADSbds.snssdk.com adsctobsnssdk.com ads dig.bdurl.net adsextlog.snssdk.com ads i.snssdk.com -ads is.snssdk.com adsmcs.snssdk.com -ads pangolin.snssdk.com +ads'pangolin-dsp-toutiao-b.com +ads%pangolin-dsp-toutiao.com +ads'pangolin-sdk-toutiao-b.com ads%pangolin-sdk-toutiao.com +ads&pangolin-sdk-toutiao1.com +ads pangolin.snssdk.com +ads&panplayable-toutiao-b.com +ads$panplayable-toutiao.com +ads%pglstatp-sdk-toutiao.com +ads(pglstatp-snssdk-toutiao.com +ads#pglstatp-toutiao-b.com ads!pglstatp-toutiao.com ads%sf3-ttcdn-tos.pstatp.com ads @@ -1842,8 +2040,8 @@ calgon.com calgon.com.tr  calgon.de  calgon.es  calgon.fr  CANON canon c-ij.com canon-cee.comcanon-cmos-sensors.com canon-cna.comcanon-ebm.com.hkcanon-emea.comcanon-emirates.aecanon-europa.comcanon-europe.com canon-me.com canon-ois.qacanon-se.com.tw canon.am canon.at canon.az canon.ba canon.be canon.bg canon.ca canon.chcanon.cn cn canon.co.il canon.co.uk canon.co.za  canon.com canon.com.al canon.com.au canon.com.by canon.com.cn cn canon.com.cy canon.com.hk canon.com.mk canon.com.mt canon.com.my canon.com.tr canon.com.tw canon.cz canon.de canon.dk canon.ee canon.es canon.fi canon.fr canon.ge canon.gr canon.hr canon.hu canon.ie canon.it canon.kz canon.lt canon.lu canon.lv canon.me  canon.net canon.nl canon.no canon.pl canon.pt canon.ro canon.rs canon.ru canon.se canon.si canon.sk canon.tj canon.ua canon.uzcanonfoundation.orgcanonproprinters.com - - CANONICAL launchpad.netlaunchpadlibrarian.comlaunchpadlibrarian.netlaunchpadlibrarian.org snapcraft.io snapstore.io + + CANONICAL launchpad.netlaunchpadcontent.netlaunchpadlibrarian.comlaunchpadlibrarian.netlaunchpadlibrarian.org snapcraft.io snapstore.io ubuntu.com ubuntu.netubuntuforums.orgubuntu-touch.io canonical.com ? @@ -1858,7 +2056,7 @@ csdl.ac.cn iscas.ac.cn  las.ac.cn  CATEGORY-ACGcolorfulstage.com crypton.co.jp lapriere.jpmagicalmirai.com mikuexpo.com piapro.net snowmiku.com bowlroll.net - + CATEGORY-ADS apilog-web.acfun.cn ads adcolony.com ads @@ -1867,11 +2065,17 @@ adjust.com ads tubemogul.com ads a.alimama.cn adsacjs.aliyun.com +ads!adash-c.m.taobao.com +ads"adash-c.ut.taobao.com +ads0#adash-emas.cn-hangzhou.aliyuncs.com adsadash.m.taobao.com +ads#adash.man.aliyuncs.com ads!adashbc.m.taobao.com ads"adashbc.ut.taobao.com -ads"adash-c.ut.taobao.com ads adashx.m.taobao.com +adsadashx.ut.amap.com +adsadashx.ut.ele.me +ads adashx.ut.youku.com ads$adashx4ae.ut.taobao.com ads#adashx4yt.m.taobao.com ads#adashxgc.ut.taobao.com @@ -1882,20 +2086,17 @@ adjust.com ads#agoodm.wapa.taobao.com ads alipaylog.com adsamdc.alipay.com -adsamdc.m.taobao.com ads api.wapa.taobao.com ads#api.waptest.taobao.com adsapoll.m.taobao.com -ads#appdownload.alicdn.com adsatanx.alicdn.com adsatanx2.alicdn.com +ads!c-adash.m.taobao.com adscdn0.mobmore.com adsclick.aliyun.com ads&click.mz.simba.taobao.com adscm.ipinyou.com -ads cm.mlt01.com ads!dsp.simba.taobao.com -adserr.taobao.com adsex.mobmore.com ads ex.puata.info ads!fav.simba.taobao.com @@ -1910,6 +2111,10 @@ g.tbcdn.cn adsgtms02.alicdn.com adsgtms03.alicdn.com adsgtms04.alicdn.com +adsh-adashx.ut.ele.me +ads#h-adashx.ut.taobao.com +ads"h-adashx.ut.youku.com +ads&h-adashx4yt.ut.taobao.com adshydra.alibaba.com ads'hz.pre.tbusergw.taobao.net ads#hz.tbusergw.taobao.net @@ -1919,6 +2124,7 @@ g.tbcdn.cn ads$intl.waptest.taobao.com ads"jxlog.istreamsche.com adslog.umtrack.com +ads!m-adash.m.taobao.com adsm.intl.taobao.com adsm.simba.taobao.com adsmatch.p4p.1688.com @@ -1937,7 +2143,6 @@ g.tbcdn.cn adsrj.m.taobao.co adsrj.m.taobao.com adssdkinit.taobao.com -adsshow.re.taobao.com adssimaba.taobao.com adssimba.m.taobao.com ads!srd.simba.taobao.com @@ -1951,10 +2156,15 @@ g.tbcdn.cn ads tvupgrade.yunos.com adstyh.taobao.com adsuserimg.qunar.com +ads"v6-adashx.ut.amap.com +ads%v6-adashx.ut.cainiao.com +ads v6-adashx.ut.ele.me +ads$v6-adashx.ut.taobao.com adsw.m.taobao.com adsyiliao.hupan.com ads amazon-adsystem.com adsserving-sys.com +ads%api-adservices.apple.com adsiadsdk.apple.com ads iad.apple.com ads qwapi.com @@ -1982,9 +2192,7 @@ applvn.com adsbaidutv.baidu.com adsbanlv.baidu.com ads bar.baidu.com -ads"bdimg.share.baidu.com adsbdplus.baidu.com -ads bj.bcebos.com adsbtlaunch.baidu.com ads c.baidu.com ads cb.baidu.com @@ -1992,11 +2200,8 @@ applvn.com adscjhq.baidu.com adscleaner.baidu.com ads click.bes.baidu.com -adsclick.hm.baidu.com adsclick.qianqian.com -ads"cm.baichuan.baidu.com ads cm.baidu.com -adscm.pos.baidu.com ads cpro.baidu.cn adscpro.baidu.com ads!cpro.baidustatic.com @@ -2034,7 +2239,6 @@ applvn.com ads#fc-feed.cdn.bcebos.com adsfclick.baidu.com adsfeed.baidu.com -adsfexclick.baidu.com ads g.baidu.com adsgimg.baidu.com adsguanjia.baidu.com @@ -2073,13 +2277,11 @@ applvn.com ads rj.baidu.com adsrplog.baidu.com ads s.baidu.com -adss.cpro.baidu.com ads!sa.tuisong.baidu.com adssclick.baidu.com adssestat.baidu.com adsshadu.baidu.com adsshare.baidu.com -ads"snippet.pos.baidu.com adssobar.baidu.com adssobartop.baidu.com adsspcode.baidu.com @@ -2111,7 +2313,6 @@ applvn.com ads$wenku-cms.bj.bcebos.com ads%wisepush.video.baidu.com ads wm.baidu.com -adswn.pos.baidu.com adsznsv.baidu.com adszz.bdstatic.com adszzy1.quyaoya.com @@ -2120,10 +2321,18 @@ applvn.com ads dig.bdurl.net adsextlog.snssdk.com ads i.snssdk.com -ads is.snssdk.com adsmcs.snssdk.com -ads pangolin.snssdk.com +ads'pangolin-dsp-toutiao-b.com +ads%pangolin-dsp-toutiao.com +ads'pangolin-sdk-toutiao-b.com ads%pangolin-sdk-toutiao.com +ads&pangolin-sdk-toutiao1.com +ads pangolin.snssdk.com +ads&panplayable-toutiao-b.com +ads$panplayable-toutiao.com +ads%pglstatp-sdk-toutiao.com +ads(pglstatp-snssdk-toutiao.com +ads#pglstatp-toutiao-b.com ads!pglstatp-toutiao.com ads%sf3-ttcdn-tos.pstatp.com ads adivery.com @@ -2141,9 +2350,14 @@ tapsell.ir yektanet.comx.clearbitjs.com ads microad.jp ads socdm.com +ads!ads-api.duolingo.com +ads!metrics.duolingo.com +ads'analytics.vpc.duolingo.com ads emogi.com adsdata.flurry.com +ads 2mdn-cn.net ads2mdn.net +ads admob-cn.com ads admob.com adsads.youtube.com ads adsense.com @@ -2155,19 +2369,32 @@ microad.jp ads"adwords-community.com ads adwords.com adsadwordsexpress.com +ads#app-measurement-cn.com ads app-measurement.com -ads&clickserver.googleads.com +adsdoubleclick-cn.net +adsdoubleclick.cn adsdoubleclick.com adsdoubleclick.net +ads$google-analytics-cn.com ads!google-analytics.com adsgoogleadapis.com +adsgoogleads-cn.com +ads googleads.com +ads$googleadservices-cn.com ads!googleadservices.com +ads googleadsserving.cn ads googleanalytics.com +ads"googleoptimize-cn.com adsgoogleoptimize.com +ads%googlesyndication-cn.com ads"googlesyndication.com +ads$googletagmanager-cn.com ads!googletagmanager.com +ads%googletagservices-cn.com ads"googletagservices.com +ads*googletraveladservices-cn.com ads'googletraveladservices.com +adsgooglevads-cn.com ads)marketingplatform.google.com ads urchin.com @@ -2183,7 +2410,6 @@ urchin.com adslog.hunantv.com adslog.v2.hunantv.com adsres.hunantv.com -adsv2.log.hunantv.com adsinner-active.mobi adsa.ckm.iqiyi.com adsad.m.iqiyi.com @@ -2218,14 +2444,12 @@ jzt.jd.com ads#api.game.letvstore.com ads ark.letv.com ads dc.letv.com -adsdev.dc.letv.com ads fz.letv.com ads g3.letv.com adsletv.allyes.com adsminisite.letv.com adsmsg.m.letv.com adsn.mark.letv.com -adsplog.dc.letv.com adspro.hoye.letv.com ads pro.letv.com ads stat.letv.com @@ -2244,6 +2468,11 @@ presage.io adsogury.co ads onesignal.com adsOB^speed\.(coe|open)\.ad\.[a-z]{2,6}\.prod\.hosts\.ooklaserver\.net$ +ads openx.net +ads openxadexchange.com +ads openxcdn.net +ads openxenterprise.com +adsopenxmarket.asia ads cdn.pocoiq.cn ads oct.pocoiq.cn adsads.pubmatic.com @@ -2264,11 +2493,8 @@ presage.io ads atm.sina.com adsbeacon.sina.com.cn ads biz.weibo.com -adsc.biz.weibo.com -ads!c.wcpt.biz.weibo.com ads%click.uve.mobile.sina.cn ads click.uve.weibo.com -adscm.dmp.sina.cn ads0#contentrecommend-out.mobile.sina.cn ads$count.video.sina.com.cn ads counter.sina.com.cn @@ -2283,17 +2509,11 @@ presage.io adsgame.weibo.com ads"gw5.push.mcp.weibo.cn ads"gw6.push.mcp.weibo.cn -ads"img.adbox.sina.com.cn -ads#img.amp.ad.sina.com.cn ads"int.dpool.sina.com.cn ads%interest.mix.sina.com.cn -ads)log.interest.mix.sina.com.cn ads log.mix.sina.com.cn ads log.sina.cn -ads!m.beacon.sina.com.cn -adsm.game.weibo.cn ads!mg.games.sina.com.cn -ads!motu.p4p.sina.com.cn adsnewspush.sinajs.cn ads oascentral.sina.com ads#oascentral.sina.com.hk @@ -2303,10 +2523,8 @@ presage.io adspfp.sina.com.cn adspfpip.sina.com ads!promote.biz.weibo.cn -ads r.dmp.sina.cn adsrm.sina.com.cn ads rs.sinajs.cn -adss.alitui.weibo.com ads"s.img.mix.sina.com.cn ads sapi.sina.cn ads sax.sina.cn @@ -2330,7 +2548,6 @@ presage.io ads$wbpctips.mobile.sina.cn adswidget.weibo.com ads woocall.sina.com.cn -adszc.biz.weibo.com adszymo.mps.weibo.com adsadnet.sohu.com ads ads.sohu.com @@ -2362,6 +2579,19 @@ ssacdn.com ads g1.tagtic.cn adsxy-log.tagtic.cn adsssp.api.tappx.com +ads ad.hpplay.cn +adsadeng.hpplay.cn +ads#ads-uo.api.leiniao.com +ads#ads-ut.api.leiniao.com +adsads.api.my7v.com +ads ads.huan.tv +adsads.huantest.com +adsadvapi.joyplus.tv +ads advapikj.joyplus.tv +ads$euads-o.api.leiniao.com +ads!hwads-t.api.my7v.com +ads kuyun.com +ads!testads.api.my7v.com ads ad.qq.com ads ad.qun.qq.com ads!adfilter.imtt.qq.com @@ -2393,10 +2623,15 @@ ssacdn.com ads w.cnzz.com adsz.gds.cnzz.com +adsads.unitychina.cn +ads$splash-ads.cdn.unity.cn +ads%splash-ads.unitychina.cn +adsunityads.unity.cn ads!unityads.unity3d.com ads#unityads.unitychina.cn ads ads.wteam.xyz ads#collector.xhamster.com +ads a.market.xiaomi.com adsad.intl.xiaomi.com ads ad.mi.com ads ad.xiaomi.com @@ -2406,12 +2641,11 @@ w.cnzz.com adsadv.sec.miui.com ads"misc.in.duokanbox.com adsmistat.xiaomi.com +adssentry.d.mi.com +ads sentry.d.xiaomi.net ads tjqonline.cn +ads"tracker.ai.xiaomi.com adstracking.miui.com -ads ad.hpplay.cn -adsadeng.hpplay.cn -ads kuyun.com -ads umeng.com ads$adbehavior.ximalaya.com ads"adse.wsa.ximalaya.com adsadse.ximalaya.com @@ -2434,8 +2668,6 @@ w.cnzz.com adse.stat.ykimg.com ads#gamex.mobile.youku.com ads!guanggaoad.youku.com -ads hudong.pl.youku.com -ads!huodong.pl.youku.com ads"huodong.vip.youku.com ads hz.youku.com adsiyes.youku.com @@ -2458,7 +2690,6 @@ w.cnzz.com ads&store.xl.api.3g.youku.com adstdrec.youku.com adstest.ott.youku.com -ads!test.sdk.m.youku.com ads v.l.youku.com adsval.api.youku.com ads wan.youku.com @@ -2471,9 +2702,10 @@ aaxads.com ad-srv.netad.api.moji.comad.wang502.com adbutter.netaddthisedge.comads.trafficjunky.net adtechus.com adtrue.com adxprtz.comcdn.advertserve.comcdn.banclip.comcfts1tifqr.comcontentabc.com cretgate.comero-advertising.comeroadvertising.com exoclick.com exosrv.com -go2.globalimg-bss.csdn.net imglnkc.com imglnkd.com innovid.comja2.gamersky.com jads.co jl3.yjaxa.top juicyads.comkepler-37b.com -lqc006.com moat.com moatads.com realsrv.coms4yxaqyq95.comshhs-ydd8x2.yjrmss.cnstatic.javhd.comtm-banners.gamingadult.comtrafficfactory.biztsyndicate.com adx.36kr.comclick.ali213.netpbmp.ali213.net^pinggai\d\.caixin\.com$adq.chinaso.comstat.chinaso.com toboads.comdn-growing.qbox.me ad.unimhk.comdas-rpt-log.ucloud.cn -ġ +go2.global gozendata.com  gzads.com gz-data.comimg-bss.csdn.net imglnkc.com imglnkd.com innovid.comja2.gamersky.com jads.co jl3.yjaxa.top juicyads.comkepler-37b.com +lqc006.com moat.com moatads.com mobwithad.com realsrv.coms4yxaqyq95.comshhs-ydd8x2.yjrmss.cnstatic.javhd.comtm-banners.gamingadult.comtrafficfactory.biztsyndicate.com wwads.cn adx.36kr.comhubcloud.com.cn  beizi.bizclick.ali213.netpbmp.ali213.net^pinggai\d\.caixin\.com$adq.chinaso.comstat.chinaso.com toboads.comdn-growing.qbox.me ad.unimhk.comdas-rpt-log.ucloud.cn telecome.cn unioncom.cc +shuzilm.cn + CATEGORY-ADS-ALL7box.vip adsad-delivery.net ads adinplay.com @@ -2491,7 +2723,6 @@ demdex.net ads mfadsrvr.com adsmgid.com adsns1p.net -ads openx.net ads pubmatic.com ads snapads.com adsspotxchange.com @@ -2506,11 +2737,17 @@ adjust.com ads tubemogul.com ads a.alimama.cn adsacjs.aliyun.com +ads!adash-c.m.taobao.com +ads"adash-c.ut.taobao.com +ads0#adash-emas.cn-hangzhou.aliyuncs.com adsadash.m.taobao.com +ads#adash.man.aliyuncs.com ads!adashbc.m.taobao.com ads"adashbc.ut.taobao.com -ads"adash-c.ut.taobao.com ads adashx.m.taobao.com +adsadashx.ut.amap.com +adsadashx.ut.ele.me +ads adashx.ut.youku.com ads$adashx4ae.ut.taobao.com ads#adashx4yt.m.taobao.com ads#adashxgc.ut.taobao.com @@ -2521,20 +2758,17 @@ adjust.com ads#agoodm.wapa.taobao.com ads alipaylog.com adsamdc.alipay.com -adsamdc.m.taobao.com ads api.wapa.taobao.com ads#api.waptest.taobao.com adsapoll.m.taobao.com -ads#appdownload.alicdn.com adsatanx.alicdn.com adsatanx2.alicdn.com +ads!c-adash.m.taobao.com adscdn0.mobmore.com adsclick.aliyun.com ads&click.mz.simba.taobao.com adscm.ipinyou.com -ads cm.mlt01.com ads!dsp.simba.taobao.com -adserr.taobao.com adsex.mobmore.com ads ex.puata.info ads!fav.simba.taobao.com @@ -2549,6 +2783,10 @@ g.tbcdn.cn adsgtms02.alicdn.com adsgtms03.alicdn.com adsgtms04.alicdn.com +adsh-adashx.ut.ele.me +ads#h-adashx.ut.taobao.com +ads"h-adashx.ut.youku.com +ads&h-adashx4yt.ut.taobao.com adshydra.alibaba.com ads'hz.pre.tbusergw.taobao.net ads#hz.tbusergw.taobao.net @@ -2558,6 +2796,7 @@ g.tbcdn.cn ads$intl.waptest.taobao.com ads"jxlog.istreamsche.com adslog.umtrack.com +ads!m-adash.m.taobao.com adsm.intl.taobao.com adsm.simba.taobao.com adsmatch.p4p.1688.com @@ -2576,7 +2815,6 @@ g.tbcdn.cn adsrj.m.taobao.co adsrj.m.taobao.com adssdkinit.taobao.com -adsshow.re.taobao.com adssimaba.taobao.com adssimba.m.taobao.com ads!srd.simba.taobao.com @@ -2590,10 +2828,15 @@ g.tbcdn.cn ads tvupgrade.yunos.com adstyh.taobao.com adsuserimg.qunar.com +ads"v6-adashx.ut.amap.com +ads%v6-adashx.ut.cainiao.com +ads v6-adashx.ut.ele.me +ads$v6-adashx.ut.taobao.com adsw.m.taobao.com adsyiliao.hupan.com ads amazon-adsystem.com adsserving-sys.com +ads%api-adservices.apple.com adsiadsdk.apple.com ads iad.apple.com ads qwapi.com @@ -2621,9 +2864,7 @@ applvn.com adsbaidutv.baidu.com adsbanlv.baidu.com ads bar.baidu.com -ads"bdimg.share.baidu.com adsbdplus.baidu.com -ads bj.bcebos.com adsbtlaunch.baidu.com ads c.baidu.com ads cb.baidu.com @@ -2631,11 +2872,8 @@ applvn.com adscjhq.baidu.com adscleaner.baidu.com ads click.bes.baidu.com -adsclick.hm.baidu.com adsclick.qianqian.com -ads"cm.baichuan.baidu.com ads cm.baidu.com -adscm.pos.baidu.com ads cpro.baidu.cn adscpro.baidu.com ads!cpro.baidustatic.com @@ -2673,7 +2911,6 @@ applvn.com ads#fc-feed.cdn.bcebos.com adsfclick.baidu.com adsfeed.baidu.com -adsfexclick.baidu.com ads g.baidu.com adsgimg.baidu.com adsguanjia.baidu.com @@ -2712,13 +2949,11 @@ applvn.com ads rj.baidu.com adsrplog.baidu.com ads s.baidu.com -adss.cpro.baidu.com ads!sa.tuisong.baidu.com adssclick.baidu.com adssestat.baidu.com adsshadu.baidu.com adsshare.baidu.com -ads"snippet.pos.baidu.com adssobar.baidu.com adssobartop.baidu.com adsspcode.baidu.com @@ -2750,7 +2985,6 @@ applvn.com ads$wenku-cms.bj.bcebos.com ads%wisepush.video.baidu.com ads wm.baidu.com -adswn.pos.baidu.com adsznsv.baidu.com adszz.bdstatic.com adszzy1.quyaoya.com @@ -2759,10 +2993,18 @@ applvn.com ads dig.bdurl.net adsextlog.snssdk.com ads i.snssdk.com -ads is.snssdk.com adsmcs.snssdk.com -ads pangolin.snssdk.com +ads'pangolin-dsp-toutiao-b.com +ads%pangolin-dsp-toutiao.com +ads'pangolin-sdk-toutiao-b.com ads%pangolin-sdk-toutiao.com +ads&pangolin-sdk-toutiao1.com +ads pangolin.snssdk.com +ads&panplayable-toutiao-b.com +ads$panplayable-toutiao.com +ads%pglstatp-sdk-toutiao.com +ads(pglstatp-snssdk-toutiao.com +ads#pglstatp-toutiao-b.com ads!pglstatp-toutiao.com ads%sf3-ttcdn-tos.pstatp.com ads adivery.com @@ -2780,9 +3022,14 @@ tapsell.ir yektanet.comx.clearbitjs.com ads microad.jp ads socdm.com +ads!ads-api.duolingo.com +ads!metrics.duolingo.com +ads'analytics.vpc.duolingo.com ads emogi.com adsdata.flurry.com +ads 2mdn-cn.net ads2mdn.net +ads admob-cn.com ads admob.com adsads.youtube.com ads adsense.com @@ -2794,19 +3041,32 @@ microad.jp ads"adwords-community.com ads adwords.com adsadwordsexpress.com +ads#app-measurement-cn.com ads app-measurement.com -ads&clickserver.googleads.com +adsdoubleclick-cn.net +adsdoubleclick.cn adsdoubleclick.com adsdoubleclick.net +ads$google-analytics-cn.com ads!google-analytics.com adsgoogleadapis.com +adsgoogleads-cn.com +ads googleads.com +ads$googleadservices-cn.com ads!googleadservices.com +ads googleadsserving.cn ads googleanalytics.com +ads"googleoptimize-cn.com adsgoogleoptimize.com +ads%googlesyndication-cn.com ads"googlesyndication.com +ads$googletagmanager-cn.com ads!googletagmanager.com +ads%googletagservices-cn.com ads"googletagservices.com +ads*googletraveladservices-cn.com ads'googletraveladservices.com +adsgooglevads-cn.com ads)marketingplatform.google.com ads urchin.com @@ -2822,7 +3082,6 @@ urchin.com adslog.hunantv.com adslog.v2.hunantv.com adsres.hunantv.com -adsv2.log.hunantv.com adsinner-active.mobi adsa.ckm.iqiyi.com adsad.m.iqiyi.com @@ -2857,14 +3116,12 @@ jzt.jd.com ads#api.game.letvstore.com ads ark.letv.com ads dc.letv.com -adsdev.dc.letv.com ads fz.letv.com ads g3.letv.com adsletv.allyes.com adsminisite.letv.com adsmsg.m.letv.com adsn.mark.letv.com -adsplog.dc.letv.com adspro.hoye.letv.com ads pro.letv.com ads stat.letv.com @@ -2883,6 +3140,11 @@ presage.io adsogury.co ads onesignal.com adsOB^speed\.(coe|open)\.ad\.[a-z]{2,6}\.prod\.hosts\.ooklaserver\.net$ +ads openx.net +ads openxadexchange.com +ads openxcdn.net +ads openxenterprise.com +adsopenxmarket.asia ads cdn.pocoiq.cn ads oct.pocoiq.cn adsads.pubmatic.com @@ -2903,11 +3165,8 @@ presage.io ads atm.sina.com adsbeacon.sina.com.cn ads biz.weibo.com -adsc.biz.weibo.com -ads!c.wcpt.biz.weibo.com ads%click.uve.mobile.sina.cn ads click.uve.weibo.com -adscm.dmp.sina.cn ads0#contentrecommend-out.mobile.sina.cn ads$count.video.sina.com.cn ads counter.sina.com.cn @@ -2922,17 +3181,11 @@ presage.io adsgame.weibo.com ads"gw5.push.mcp.weibo.cn ads"gw6.push.mcp.weibo.cn -ads"img.adbox.sina.com.cn -ads#img.amp.ad.sina.com.cn ads"int.dpool.sina.com.cn ads%interest.mix.sina.com.cn -ads)log.interest.mix.sina.com.cn ads log.mix.sina.com.cn ads log.sina.cn -ads!m.beacon.sina.com.cn -adsm.game.weibo.cn ads!mg.games.sina.com.cn -ads!motu.p4p.sina.com.cn adsnewspush.sinajs.cn ads oascentral.sina.com ads#oascentral.sina.com.hk @@ -2942,10 +3195,8 @@ presage.io adspfp.sina.com.cn adspfpip.sina.com ads!promote.biz.weibo.cn -ads r.dmp.sina.cn adsrm.sina.com.cn ads rs.sinajs.cn -adss.alitui.weibo.com ads"s.img.mix.sina.com.cn ads sapi.sina.cn ads sax.sina.cn @@ -2969,7 +3220,6 @@ presage.io ads$wbpctips.mobile.sina.cn adswidget.weibo.com ads woocall.sina.com.cn -adszc.biz.weibo.com adszymo.mps.weibo.com adsadnet.sohu.com ads ads.sohu.com @@ -3001,6 +3251,19 @@ ssacdn.com ads g1.tagtic.cn adsxy-log.tagtic.cn adsssp.api.tappx.com +ads ad.hpplay.cn +adsadeng.hpplay.cn +ads#ads-uo.api.leiniao.com +ads#ads-ut.api.leiniao.com +adsads.api.my7v.com +ads ads.huan.tv +adsads.huantest.com +adsadvapi.joyplus.tv +ads advapikj.joyplus.tv +ads$euads-o.api.leiniao.com +ads!hwads-t.api.my7v.com +ads kuyun.com +ads!testads.api.my7v.com ads ad.qq.com ads ad.qun.qq.com ads!adfilter.imtt.qq.com @@ -3032,10 +3295,15 @@ ssacdn.com ads w.cnzz.com adsz.gds.cnzz.com +adsads.unitychina.cn +ads$splash-ads.cdn.unity.cn +ads%splash-ads.unitychina.cn +adsunityads.unity.cn ads!unityads.unity3d.com ads#unityads.unitychina.cn ads ads.wteam.xyz ads#collector.xhamster.com +ads a.market.xiaomi.com adsad.intl.xiaomi.com ads ad.mi.com ads ad.xiaomi.com @@ -3045,12 +3313,11 @@ w.cnzz.com adsadv.sec.miui.com ads"misc.in.duokanbox.com adsmistat.xiaomi.com +adssentry.d.mi.com +ads sentry.d.xiaomi.net ads tjqonline.cn +ads"tracker.ai.xiaomi.com adstracking.miui.com -ads ad.hpplay.cn -adsadeng.hpplay.cn -ads kuyun.com -ads umeng.com ads$adbehavior.ximalaya.com ads"adse.wsa.ximalaya.com adsadse.ximalaya.com @@ -3073,8 +3340,6 @@ w.cnzz.com adse.stat.ykimg.com ads#gamex.mobile.youku.com ads!guanggaoad.youku.com -ads hudong.pl.youku.com -ads!huodong.pl.youku.com ads"huodong.vip.youku.com ads hz.youku.com adsiyes.youku.com @@ -3097,7 +3362,6 @@ w.cnzz.com ads&store.xl.api.3g.youku.com adstdrec.youku.com adstest.ott.youku.com -ads!test.sdk.m.youku.com ads v.l.youku.com adsval.api.youku.com ads wan.youku.com @@ -3110,50 +3374,104 @@ aaxads.com ad-srv.netad.api.moji.comad.wang502.com adbutter.netaddthisedge.comads.trafficjunky.net adtechus.com adtrue.com adxprtz.comcdn.advertserve.comcdn.banclip.comcfts1tifqr.comcontentabc.com cretgate.comero-advertising.comeroadvertising.com exoclick.com exosrv.com -go2.globalimg-bss.csdn.net imglnkc.com imglnkd.com innovid.comja2.gamersky.com jads.co jl3.yjaxa.top juicyads.comkepler-37b.com -lqc006.com moat.com moatads.com realsrv.coms4yxaqyq95.comshhs-ydd8x2.yjrmss.cnstatic.javhd.comtm-banners.gamingadult.comtrafficfactory.biztsyndicate.com adx.36kr.comclick.ali213.netpbmp.ali213.net^pinggai\d\.caixin\.com$adq.chinaso.comstat.chinaso.com toboads.comdn-growing.qbox.me ad.unimhk.comdas-rpt-log.ucloud.cn +go2.global gozendata.com  gzads.com gz-data.comimg-bss.csdn.net imglnkc.com imglnkd.com innovid.comja2.gamersky.com jads.co jl3.yjaxa.top juicyads.comkepler-37b.com +lqc006.com moat.com moatads.com mobwithad.com realsrv.coms4yxaqyq95.comshhs-ydd8x2.yjrmss.cnstatic.javhd.comtm-banners.gamingadult.comtrafficfactory.biztsyndicate.com wwads.cn adx.36kr.comhubcloud.com.cn  beizi.bizclick.ali213.netpbmp.ali213.net^pinggai\d\.caixin\.com$adq.chinaso.comstat.chinaso.com toboads.comdn-growing.qbox.me ad.unimhk.comdas-rpt-log.ucloud.cn telecome.cn unioncom.cc +shuzilm.cn  CATEGORY-ADS-IR adivery.com adivery.ir kaprila.com  najva.comsabavision.com tapsell.ir yektanet.com - -CATEGORY-ANDROID-APP-DOWNLOAD apkcombo.com apkmirror.com apkpure.com cdnpure.com pureapk.com + +CATEGORY-ANDROID-APP-DOWNLOAD apkcombo.com apkmirror.com apkpure.com apkpure.net cdnpure.com pureapk.com winudf.com - -CATEGORY-ANTICENSORSHIP citizenlab.cacitizenlab.orgapplecensorship.comfreebrowser.orgfreewechat.com freeweibo.com freezhihu.org greatfire.org pao-pao.netwikiunblocked.orghaveibeenpwned.compwnedpasswords.comgetlantern.org -lantern.io softether.orgsoftether-download.com  v2ray.com + +CATEGORY-ANTICENSORSHIP cf-ipfs.comcloudflare-ipfs.com 4everland.io c4rex.cocrustwebsites.net  dweb.linkgateway.pinata.cloudipfs-gateway.cloudipfs.anonymize.comipfs.best-practice.seipfs.eternum.ioipfs.eth.aragon.network ipfs.fleek.co ipfs.io ipfs.lain.laipfs.runfission.com  ipfs.tech ipns.co jorropo.netnftstorage.link via0.com censorship.no citizenlab.cacitizenlab.orgepicbrowser.comapplecensorship.comfreebrowser.orgfreewechat.com freeweibo.com freezhihu.org greatfire.org pao-pao.netwikiunblocked.orghaveibeenpwned.compwnedpasswords.comgetlantern.org +lantern.iopaskoocheh.com softether.orgsoftether-download.comtorproject.org  v2ray.com v2ray.cool  v2fly.org opengw.net -vpngate.jp vpngate.net ahmia.fi akasha.worldbrowserleaks.combypasscensorship.org censorship.aidat.foundationdemocracy.earth eff.orgepicbrowser.com ffprofile.comfreenetproject.org fteproxy.org +vpngate.jp vpngate.net ahmia.fi akasha.worldbrowserleaks.combypasscensorship.org censorship.aidat.foundationdemocracy.earth eff.org ffprofile.comfreenetproject.org fteproxy.org geti2p.netgetoutline.org -gfw.reportguardianproject.info ipfs.io  jitsi.org lokinet.org  ntc.partyonionshare.org ooni.org openvpn.netprivacytools.io psiphon3.com sagernet.orgshadowsocks.org sspanel.net stunnel.org telex.cctorproject.org tribler.org tunsafe.comtwister.net.co +gfw.reportguardianproject.info hiddify.com  jitsi.org lokinet.org  ntc.partyonionshare.org ooni.org openvpn.netprivacytools.io +psiphon.ca psiphon3.com sagernet.orgshadowsocks.org sspanel.net stunnel.org telex.cc tribler.org tunsafe.comturkeyblocks.orgtwister.net.co uproxy.org vuvuzela.io whonix.org wikileaks.org wireguard.com zeronet.io - + CATEGORY-BANK-CN -boc.cnbank-of-china.combankofchina.combocfullertonbank.combocamchina.combocaviation.com  boccfc.cc  boccfc.cn  bocgi.com bocgins.com  bochk.com bocichina.cn bocichina.combocichina.com.cn bocifunds.cn bocifunds.combocifunds.com.cn bocigroup.com  bocim.combocservices.com.cnccb-life.com.cn +boc.cnbank-of-china.combankofchina.combocfullertonbank.combocamchina.combocaviation.com  boccfc.cc  boccfc.cn  bocgi.com bocgins.com bochk.com +!cn bocichina.cn bocichina.combocichina.com.cn bocifunds.cn bocifunds.combocifunds.com.cn bocigroup.com  bocim.combocservices.com.cnccb-life.com.cn ccb.cn ccb.com ccb.com.cn ccbcos.com ccbfund.cn ccbfund.comccbfund.com.cn ccbfutures.cnccbfutures.comccbintl.com.hkccbleasing.comccblife-test.com.cn ccbseoul.comccbtrust.com.cn  ccbxt.com 8008205555.cn8008205555.comcignacmb-ipmi.com cignacmb.comcignacmbamc.comcmb-leasing.com cmbchina.biz cmbchina.cn cmbchina.com cmbi.com.hk  cmbimg.cn cmbimg.com cmbt.cn cmbuat.com  cmburl.cncmbwinglungbank.com cmf.biz cmf.ltd cmfchina.com -cmfunds.cntest-cignacmb.comicbc  95588.com 95588.com.cn dccnet.com.cn icbc-at.com icbc-cz.com icbc-ltd.com icbc-uk.com icbc-us.com icbc.ae icbc.be -icbc.co.id -icbc.co.jp -icbc.co.kr -icbc.co.nl icbc.com.au icbc.com.cn icbc.com.es icbc.com.kh icbc.com.kw icbc.com.la icbc.com.mm icbc.com.mo icbc.com.mx icbc.com.pe icbc.com.pk icbc.com.qa icbc.com.sg icbc.com.vn icbc.de icbc.eu icbc.lu icbcalmaty.kz icbcasia.com icbcbr.com.br icbccs.com.cnicbccstz.com.cn icbci.com.hk icbcina.com icbcindia.com -icbcit.comicbclondon.comicbcmanila.com.cn  icbcme.ae icbcmoscow.ru -icbcmy.com -icbcnz.comicbcpanama.com icbcparis.fr -icbcpl.comicbcstandard.comicbcstandardbank.comicbcstandardresources.comicbcstandardsecurities.com icbcswiss.com icbcthai.com -icbkfs.com -icbkus.com  95516.com  95516.netchinaunionpay.comchinaunionpay.com.cnchinaunionpay.net +cmfunds.cntest-cignacmb.comicbc  95588.com 95588.com.cn dccnet.com.cn icbc-at.com +!cn icbc-cz.com +!cn icbc-ltd.com +!cn icbc-uk.com +!cn icbc-us.com +!cnicbc.ae +!cnicbc.be +!cn +icbc.co.id +!cn +icbc.co.jp +!cn +icbc.co.kr +!cn +icbc.co.nl +!cn icbc.com.au +!cn icbc.com.cn icbc.com.es +!cn icbc.com.kh +!cn icbc.com.kw +!cn icbc.com.la +!cn icbc.com.mm +!cn icbc.com.mo +!cn icbc.com.mx +!cn icbc.com.pe +!cn icbc.com.pk +!cn icbc.com.qa +!cn icbc.com.sg +!cn icbc.com.vn +!cnicbc.de +!cnicbc.eu +!cnicbc.lu +!cn icbcalmaty.kz +!cn icbcasia.com +!cn icbcbr.com.br +!cn icbccs.com.cnicbccstz.com.cn icbci.com.hk +!cn icbcina.com icbcindia.com +!cn +icbcit.com +!cnicbclondon.com +!cnicbcmanila.com.cn icbcme.ae +!cn icbcmoscow.ru +!cn +icbcmy.com +!cn +icbcnz.com +!cnicbcpanama.com +!cn icbcparis.fr +!cn +icbcpl.com +!cnicbcstandard.comicbcstandardbank.comicbcstandardresources.comicbcstandardsecurities.com icbcswiss.com +!cn icbcthai.com +!cn +icbkfs.com +!cn +icbkus.com +!cn  95516.com  95516.netchinaunionpay.comchinaunionpay.com.cnchinaunionpay.net cup.com.cn cup62.cn unionpay.com unionpay.netunionpaysecure.comunionpayintl.cnunionpayintl.com abchina.com bankcomm.combankofbeijing.com.cn bosc.cn bsb.com.cn ccb.comcgbchina.com.cn cib.com.cncitibank.com.cn cmbc.com.cn hsbc.com.cn -hxb.com.cn njcb.com.cn psbc.com spdb.com.cn  whccb.com +hxb.com.cn njcb.com.cn psbc.com spdb.com.cn  whccb.com kcbebank.com shrbank.com  mybank.cn +ms-bank.cn +webank.com webankcdn.net csxbank.com  fbank.com +xwbank.com zgcbank.comyillionbank.com +z-bank.comonebank.com.cn wegobank.cnsuningbank.com +kshbank.cn xa-bank.com newupbank.com +ymbank.com wxsbank.com  CATEGORY-BANK-IR agri-bank.com ansarbank.combank-maskan.ir bankmellat.ir banksepah.ir bim.ir blubank.com @@ -3164,19 +3482,20 @@ hxb.com.cn njcb.com.cn psbc.com spdb.com.cn  whccb.com qmb.ir rb24.ir refah-bank.ir  rqbank.ir sb24.com sbank.ir shahr-bank.ir shaparak.ir sinabank.irtejaratbank.ir & CATEGORY-BLOG-CNhuangyuhui.net - + CATEGORY-BOURSE-IR arman-ati.combourseiness.com codal.ir farasahm.ir ifb.ir  ime.co.ir  irenex.ir sukuk.irtalarebourse.com tse.ir  tsetmc.irabanbroker.combahmanbroker.combkisecurities.com bmibourse.com bt-broker.comdanabroker.com -emofid.cometminansahm.comhafezbourse.com irfarabi.com kmsco.irmaskanbourse.commellatbroker.comnovinbourse.com oibroker.com omidsahm.com +emofid.commofidonline.cometminansahm.comhafezbourse.com irfarabi.com kmsco.irmaskanbourse.commellatbroker.comnovinbourse.com oibroker.com omidsahm.com rbc.irsaderatbourse.comsahandbroker.comsamanbourse.com sdbhouse.comsepahbourse.com tadbirgar.comabantether.com bit24.cash  bitpin.ir exir.iofarhad-exchange.com jibitex.com nobitex.ir ok-ex.io ompfinex.com ramzinex.com tabdeal.orgtetherland.com  wallex.ir - -CATEGORY-BROWSER-!CN firefox.comfirefoxusercontent.com + +CATEGORY-BROWSER-!CN censorship.noepicbrowser.com firefox.comfirefoxusercontent.comtorproject.org chrome -chrome.com chromium.org  brave.com bromite.org  opera.com vivaldi.com waterfox.net -; +chrome.com chromium.orgbasilisk-browser.org  brave.com bromite.orgbrowser.kagi.com cromite.org decentr.net  dothq.org +floorp.appiridiumbrowser.dekiwibrowser.comkmeleonbrowser.org librewolf.netminbrowser.orgnetsurf-browser.org  opera.com palemoon.orgpulsebrowser.appqutebrowser.org vivaldi.com waterfox.net +< CATEGORY-CAS actalis.com actalis.itamazontrust.com awstrust.com ss2.us)certs-lb.apple.com.akadns.net @@ -3195,18 +3514,22 @@ comodo.net comodoca.com comodoca2.com comodoca3.com comodoca cndigicert-cn.comdigicert-validation.com digicert.cn cn digicert.comdigitalcertvalidation.com freessl.com geotrust.com rapidssl.com thawte.com  thawte.de  thawte.frquovadisglobal.compublic-trust.com entrust.netentrustdatacard.comaffirmtrust.com atos.net -myatos.netcertificat2.comtrendmicro.com  gandi.net alphassl.comglobalsign-media.com globalsign.be globalsign.chglobalsign.co.ukglobalsign.comglobalsign.com.auglobalsign.com.hkglobalsign.com.sg globalsign.es globalsign.eu globalsign.frglobalsign.net globalsign.nlcrl2.alphassl.com -cnocsp.globalsign.com -cn ocsp2.globalsign.com -cn!secure.globalsign.com -cn secure2.alphassl.com +myatos.netcertificat2.comtrendmicro.com  gandi.net alphassl.com +cneasy-signing.com +cnglobalsign-media.com globalsign.be globalsign.chglobalsign.cloud globalsign.cn +cnglobalsign.co.ukglobalsign.com +cnglobalsign.com.auglobalsign.com.brglobalsign.com.hkglobalsign.com.sg globalsign.es globalsign.eu globalsign.frglobalsign.net globalsign.nlglobalsigncdn.com +cn4(cdn.globalsigncdn.com.cdn.cloudflare.net cn godaddy.comx.co godaddy pki.googclients1.google.compki.google.com crl.pki.goog +cn crls.pki.goog cn ocsp.pki.goog cn!pki-goog.l.google.com cn eca.hinet.netgtlsca.nat.gov.twhongkongpost.gov.hk ecert.gov.hk identrust.comidentrust.co.uk identrust.net  lencr.orgletsencrypt.comletsencrypt.org msocsp.comcrl.microsoft.commscrl.microsoft.comocsp.microsoft.comoneocsp.microsoft.comwww.microsoft.com cn secom.co.jpsecomtrust.netcybertrust.co.jpcybertrust.ne.jpmanagedpki.ne.jpenterprisessl.comhackerguardian.cominstantssl.com oemssl.cn +cn(oemssl.cn.cdn.cloudflare.net cnoptimumssl.compositivessl.com sectigo.comsectigochina.com +cn/#sectigochina.com.cdn.cloudflare.net cntrust-provider.cn cntrust-provider.com usertrust.com aoc.cat catcert.catincommon-rsa.org netsolssl.com ssl.com sslcom.cn cnstarfieldtech.com digital-id.ch digitalid.chmanaged-pki.chmanaged-pki.de pki-post.ch pki-posta.ch pki-poste.chroot-signing.chrootsigning.comssl-certificate.ch @@ -3221,7 +3544,7 @@ flickr.netstaticflickr.com ads.yahoo.com ads yahoo yahoo.ae yahoo.am yahoo.as yahoo.at yahoo.az yahoo.ba yahoo.be yahoo.bg yahoo.bi yahoo.bs yahoo.bt yahoo.by yahoo.ca  yahoo.cat yahoo.cd yahoo.cg yahoo.ch yahoo.cl yahoo.cmyahoo.cn cn yahoo.co.ao yahoo.co.bw yahoo.co.ck yahoo.co.cr yahoo.co.id yahoo.co.il yahoo.co.in yahoo.co.jp yahoo.co.kr yahoo.co.mz yahoo.co.nz yahoo.co.th yahoo.co.tz yahoo.co.uk yahoo.co.uz yahoo.co.ve yahoo.co.vi yahoo.co.za  yahoo.com yahoo.com.af yahoo.com.ag yahoo.com.ai yahoo.com.ar yahoo.com.au yahoo.com.bd yahoo.com.bo yahoo.com.br yahoo.com.bz yahoo.com.cn cn yahoo.com.co yahoo.com.do yahoo.com.ec yahoo.com.eg yahoo.com.es yahoo.com.fj yahoo.com.gi yahoo.com.gt yahoo.com.hk yahoo.com.kw yahoo.com.lb yahoo.com.ly yahoo.com.mt yahoo.com.mx yahoo.com.my yahoo.com.na yahoo.com.nf yahoo.com.om yahoo.com.pa yahoo.com.pe yahoo.com.ph yahoo.com.pk yahoo.com.pr yahoo.com.py yahoo.com.sa yahoo.com.sb yahoo.com.sg yahoo.com.sv yahoo.com.tj yahoo.com.tr yahoo.com.tw yahoo.com.ua yahoo.com.uy yahoo.com.vc yahoo.com.vn yahoo.cz yahoo.de yahoo.dj yahoo.dk yahoo.dm yahoo.ee yahoo.es yahoo.fi yahoo.fm yahoo.fr yahoo.ge yahoo.gg yahoo.gl yahoo.gm yahoo.gp yahoo.gr yahoo.gy yahoo.hk yahoo.hr yahoo.hu yahoo.ie yahoo.im yahoo.in yahoo.is yahoo.it yahoo.je yahoo.jo yahoo.la yahoo.lt yahoo.lu yahoo.lv yahoo.md yahoo.me yahoo.mk yahoo.mw yahoo.mx  yahoo.net yahoo.nl yahoo.no yahoo.nu yahoo.ph yahoo.pl yahoo.pn yahoo.ps yahoo.pt yahoo.ro yahoo.ru yahoo.rw yahoo.se yahoo.sg yahoo.sh yahoo.si yahoo.sk yahoo.sm yahoo.sn yahoo.so yahoo.sr yahoo.st yahoo.tg yahoo.tk yahoo.tl yahoo.tm yahoo.tn yahoo.vg yahoo.ws maktoob.com -myguide.hktechcrunch.comyahoo-news.com.hk yahooapis.com yahoodns.netyahoofinance.comyahoohealth.comyahoomusic.comyahoosandbox.comyahoosportsbook.com yho.com yimg.com yimg.jp  ymail.comyusercontent.com +myguide.hktechcrunch.comyahoo-news.com.hk yahooapis.com yahoodns.netyahoofinance.comyahoohealth.comyahoomusic.comyahoosandbox.comyahoosportsbook.com yho.com yimg.com yimg.jp  ymail.comyusercontent.com cdn.js7k.com oath.cloud oath.com ouroath.comstatic-verizon.com uplynk.com verizon.com verizon.netverizonbusinessfios.comverizondigitalmedia.comverizonenterprise.comverizonfios.comverizonmedia.comverizonwireless.com vzw.com xo.com omniroot.commyvodafone.com.aumyvodafone.com.wsvodafone.co.uk vodafone.comvodafone.com.auvodafone.com.tr vodafone.de vodafone.it wisecoin.com @@ -3229,11 +3552,12 @@ wiseid.com wisekey.comwisekey.com.hk accv.escamerfirma.com netlock.hu trustcor.ca trustcor.comtrustisfps.com 6 CATEGORY-COLLABORATE-CN shimo.im  yuque.com - + CATEGORY-COMMUNICATION clubhouse.comclubhouseapi.comjoinclubhouse.com dis.gd discord.co discord.comdiscord.design discord.dev -discord.gg discord.gift discord.gifts discord.media discord.new discord.store discord.toolsdiscord-activities.comdiscordactivities.comdiscordapp.comdiscordapp.netdiscordmerch.comdiscordpartygames.comdiscordsays.comdiscordstatus.comairhorn.solutionsairhornbot.combigbeans.solutionswatchanimeattheoffice.com discordapp.iodiscordcdn.com#hammerandchisel.ssl.zendesk.com freenode.net intercom.com intercom.iointercomassets.comintercomcdn.com gcld-line.com +discord.gg discord.gift discord.gifts discord.media discord.new discord.store discord.toolsdiscord-activities.comdiscordactivities.comdiscordapp.comdiscordapp.netdiscordmerch.comdiscordpartygames.comdiscordsays.comdiscordstatus.comairhorn.solutionsairhornbot.combigbeans.solutionswatchanimeattheoffice.com discordapp.iodiscordcdn.com#hammerandchisel.ssl.zendesk.com freenode.net intercom.com intercom.iointercomassets.comintercomcdn.com +keybase.iokeybaseapi.com gcld-line.com lin.eeline-apps-beta.comline-apps-rc.com line-apps.com line-beta.me line-cdn.net line-scdn.net line.biz line.me line.naver.jp linecorp.comlinefriends.comlinefriends.com.tw linegame.jplinemobile.comlinemyshop.comlineshoppingseller.com  linetv.tw nhncorp.jparewereadyyet.com element.io @@ -3242,12 +3566,14 @@ modular.im riot.im  vector.imfbmessenger.comm.me messe nbabot.net signal.art signal.orgsignalusers.orgwhispersystems.orgslack-core.comslack-edge.comslack-files.comslack-imgs.comslack-msgs.comslack-redir.net  slack.com -slackb.comslackcertified.com slackdemo.com slackhq.com comments.app contest.com  graph.orgquiz.directoryt.me tdesktop.com +slackb.comslackcertified.com slackdemo.com slackhq.comcdn-telegram.org comments.app contest.com fragment.com  graph.orgquiz.directoryt.me tdesktop.com telega.one telegra.phtelegram-cdn.org telegram.dog telegram.me telegram.orgtelegram.space telesco.pe -tg.dev tx.meusercontent.dev wa.mewhatsapp-plus.infowhatsapp-plus.mewhatsapp-plus.net whatsapp.cc whatsapp.com whatsapp.info whatsapp.net whatsapp.org whatsapp.tvwhatsappbrand.com - +tg.dev tx.meusercontent.devgraph.whatsapp.com +adsgraph.whatsapp.net +ads wa.mewhatsapp-plus.infowhatsapp-plus.mewhatsapp-plus.net whatsapp.cc whatsapp.com whatsapp.info whatsapp.net whatsapp.org whatsapp.tvwhatsappbrand.com + CATEGORY-COMPANIESacer-group.com acer.com acer.com.cn cn3dns-1.adobe.com3dns-2.adobe.com3dns-3.adobe.com3dns-4.adobe.com3dns-5.adobe.com3dns.adobe.comactivate-sea.adobe.comactivate-sjc0.adobe.comactivate.adobe.comactivate.wip1.adobe.comactivate.wip2.adobe.comactivate.wip3.adobe.comactivate.wip4.adobe.comadobe-dns-1.adobe.comadobe-dns-2.adobe.comadobe-dns-3.adobe.comadobe-dns-4.adobe.comadobe-dns.adobe.com adobeereg.comcrl.versign.netereg.adobe.comereg.wip.adobe.comereg.wip1.adobe.comereg.wip2.adobe.comereg.wip3.adobe.comereg.wip4.adobe.comhl2rcv.adobe.comhlrcv.stage.adobe.comlm.licenses.adobe.comlmlicenses.wip4.adobe.comna1r.services.adobe.comood.opsource.netpractivate.adobepractivate.adobe.compractivate.adobe.ipppractivate.adobe.newoapractivate.adobe.ntp wip.adobe.comwip1.adobe.comwip2.adobe.comwip3.adobe.comwip4.adobe.comwwis-dubc1-vip100.adobe.comwwis-dubc1-vip101.adobe.comwwis-dubc1-vip102.adobe.comwwis-dubc1-vip103.adobe.comwwis-dubc1-vip104.adobe.comwwis-dubc1-vip105.adobe.comwwis-dubc1-vip106.adobe.comwwis-dubc1-vip107.adobe.comwwis-dubc1-vip108.adobe.comwwis-dubc1-vip109.adobe.comwwis-dubc1-vip110.adobe.comwwis-dubc1-vip111.adobe.comwwis-dubc1-vip112.adobe.comwwis-dubc1-vip113.adobe.comwwis-dubc1-vip114.adobe.comwwis-dubc1-vip115.adobe.comwwis-dubc1-vip116.adobe.comwwis-dubc1-vip117.adobe.comwwis-dubc1-vip118.adobe.comwwis-dubc1-vip119.adobe.comwwis-dubc1-vip120.adobe.comwwis-dubc1-vip121.adobe.comwwis-dubc1-vip122.adobe.comwwis-dubc1-vip123.adobe.comwwis-dubc1-vip124.adobe.comwwis-dubc1-vip125.adobe.comwwis-dubc1-vip30.adobe.comwwis-dubc1-vip31.adobe.comwwis-dubc1-vip32.adobe.comwwis-dubc1-vip33.adobe.comwwis-dubc1-vip34.adobe.comwwis-dubc1-vip35.adobe.comwwis-dubc1-vip36.adobe.comwwis-dubc1-vip37.adobe.comwwis-dubc1-vip38.adobe.comwwis-dubc1-vip39.adobe.comwwis-dubc1-vip40.adobe.comwwis-dubc1-vip41.adobe.comwwis-dubc1-vip42.adobe.comwwis-dubc1-vip43.adobe.comwwis-dubc1-vip44.adobe.comwwis-dubc1-vip45.adobe.comwwis-dubc1-vip46.adobe.comwwis-dubc1-vip47.adobe.comwwis-dubc1-vip48.adobe.comwwis-dubc1-vip49.adobe.comwwis-dubc1-vip50.adobe.comwwis-dubc1-vip51.adobe.comwwis-dubc1-vip52.adobe.comwwis-dubc1-vip53.adobe.comwwis-dubc1-vip54.adobe.comwwis-dubc1-vip55.adobe.comwwis-dubc1-vip56.adobe.comwwis-dubc1-vip57.adobe.comwwis-dubc1-vip58.adobe.comwwis-dubc1-vip59.adobe.comwwis-dubc1-vip60.adobe.comwwis-dubc1-vip61.adobe.comwwis-dubc1-vip62.adobe.comwwis-dubc1-vip63.adobe.comwwis-dubc1-vip64.adobe.comwwis-dubc1-vip65.adobe.comwwis-dubc1-vip66.adobe.comwwis-dubc1-vip67.adobe.comwwis-dubc1-vip68.adobe.comwwis-dubc1-vip69.adobe.comwwis-dubc1-vip70.adobe.comwwis-dubc1-vip71.adobe.comwwis-dubc1-vip72.adobe.comwwis-dubc1-vip73.adobe.comwwis-dubc1-vip74.adobe.comwwis-dubc1-vip75.adobe.comwwis-dubc1-vip76.adobe.comwwis-dubc1-vip77.adobe.comwwis-dubc1-vip78.adobe.comwwis-dubc1-vip79.adobe.comwwis-dubc1-vip80.adobe.comwwis-dubc1-vip81.adobe.comwwis-dubc1-vip82.adobe.comwwis-dubc1-vip83.adobe.comwwis-dubc1-vip84.adobe.comwwis-dubc1-vip85.adobe.comwwis-dubc1-vip86.adobe.comwwis-dubc1-vip87.adobe.comwwis-dubc1-vip88.adobe.comwwis-dubc1-vip89.adobe.comwwis-dubc1-vip90.adobe.comwwis-dubc1-vip91.adobe.comwwis-dubc1-vip92.adobe.comwwis-dubc1-vip93.adobe.comwwis-dubc1-vip94.adobe.comwwis-dubc1-vip95.adobe.comwwis-dubc1-vip96.adobe.comwwis-dubc1-vip97.adobe.comwwis-dubc1-vip98.adobe.comwwis-dubc1-vip99.adobe.com"advertising.adobe.com ads tubemogul.com @@ -3288,7 +3614,7 @@ nwcddns.cn cn route53.cn cnsagemaker.com.cn -cn".+\.awsdns-cn-[0-9][0-9]\.biz$$ .+\.awsdns-cn-[0-9][a-e0-9]\.cn$".+\.awsdns-cn-[0-9][0-9]\.com$".+\.awsdns-cn-[0-9][0-9]\.net$".+\.awsdns-cn-[0-9][0-9]\.top$awsacmvalidations.comacmvalidationsaws.comaesworkshops.comamazonaws-china.comamazonaws.co.uk amazonaws.com amazonaws.tv amazonses.comamazonworkdocs.comamplifyapp.comamplifyframework.comaws-iot-hackathon.comawsautopilot.comawsautoscaling.com awsbraket.comawscommandlineinterface.comawsedstart.comawseducate.comawseducate.netawseducate.orgawsglobalaccelerator.comawsloft-johannesburg.comawsloft-stockholm.comawssecworkshops.com awsstatic.comawsthinkbox.com awstrack.mecdkworkshop.comcloudfront.comcloudfront.netcontainersonaws.comelasticbeanstalk.comthinkboxsoftware.com".+\.awsdns-[0-9][0-9]\.co\.uk$.+\.awsdns-[0-9][0-9]\.com$.+\.awsdns-[0-9][0-9]\.net$.+\.awsdns-[0-9][0-9]\.org$imdbboxofficemojo.com imdb.com imdb.tomedia-imdb.com +cn0,.+\.awsdns-cn-[0-9][0-9]\.(biz|com|net|top)$$ .+\.awsdns-cn-[0-9][a-e0-9]\.cn$awsacmvalidations.comacmvalidationsaws.comaesworkshops.comamazonaws-china.comamazonaws.co.uk amazonaws.com amazonaws.tv amazonses.comamazonworkdocs.comamplifyapp.comamplifyframework.comaws-iot-hackathon.comawsautopilot.comawsautoscaling.com awsbraket.comawscommandlineinterface.comawsedstart.comawseducate.comawseducate.netawseducate.orgawsglobalaccelerator.comawsloft-johannesburg.comawsloft-stockholm.comawssecworkshops.com awsstatic.comawsthinkbox.com awstrack.mecdkworkshop.comcloudfront.comcloudfront.netcontainersonaws.comelasticbeanstalk.comthinkboxsoftware.com0,.+\.awsdns-[0-9][0-9]\.(co\.uk|com|net|org)$imdbboxofficemojo.com imdb.com imdb.tomedia-imdb.com kindle kindle.cn cn kindle.co.jp kindle.co.uk kindle.com  kindle.de  kindle.es  kindle.fr  kindle.in  kindle.it  kindle.jpkindleoasis.cn @@ -3328,7 +3654,8 @@ yamaxun.cn cn amd.com amd.com.cnamdfanstore.com radeon.com www.amd.com -cniadsdk.apple.com +cn%api-adservices.apple.com +adsiadsdk.apple.com ads iad.apple.com ads qwapi.com adscalendarserver.orgapple-cloudkit.com cups.orgdeveloper.apple.comdevimages-cdn.apple.comdevstreaming-cdn.apple.comfoundationdb.orgmacosforge.org macruby.com macruby.net macruby.orgapple-mapkit.complaygrounds-cdn.apple.com carekit.orgresearchandcare.orgresearchkit.cn @@ -3478,7 +3805,10 @@ newton.com next.com overapple.com powerbook.eupullstring.ne touchid.tv touchid.wangtracking-location.comtruedepth3d.com tryrating.comwebobjects.co.uk webobjects.de webobjects.euwebobjects.net wuxiapple.com wwapple.netwww-sms-apple.com wwwapple.com wwwapple.net wwwlapple.com xn--czrs0t4phtr3a.cn cnxn--fiqs8sxootzz.cn cn xn--fiqs8sxootzz.xn--hxt814e!xn--gtvq61aiijy0b.xn--hxt814exn--gtvz22d.wangxn--gtvz22d.xn--hxt814exn--hxtr4rozx.xn--czr694b xn--kput3imi374g.xn--hxt814e#xn--ohq11k7pl25iyo8a.cn -cn xn--ruq8a011kt6y.xn--hxt814eapple.com.akadns.net%!courier-push-apple.com.akadns.netpush-apple.com.akadns.net."amp-api-search-edge.apps.apple.com +cn xn--ruq8a011kt6y.xn--hxt814eapple.com.akadns.net%!courier-push-apple.com.akadns.netpush-apple.com.akadns.net:.amp-api-edge-lb-cn.itunes-apple.com.akadns.net +cn7+amp-api-edge-lb.itunes-apple.com.akadns.net +cn'amp-api-edge.apps.apple.com +cn."amp-api-search-edge.apps.apple.com cn"amp-api.apps.apple.com cn aod.itunes.apple.com cn#api-edge.apps.apple.com @@ -3494,7 +3824,12 @@ touchid.tv touchid.wangtracking-location.comtruedepth3d.com cn(gspe11-2-cn-ssl.ls.apple.com cn&gspe12-cn-ssl.ls.apple.com cn&gspe85-cn-ssl.ls.apple.com +cn5)inappcheck-cn.itunes-apple.com.akadns.net +cn5)inappcheck-lb.itunes-apple.com.akadns.net +cn'inappcheck.itunes.apple.com cn!init.itunes.apple.com +cn+init.gc-lb.apple.com.akadns.net +cninit.gc.apple.com cn$iosapps.itunes.apple.com cn"js-cdn.music.apple.com cn km.support.apple.com @@ -3524,6 +3859,10 @@ touchid.tv touchid.wangtracking-location.comtruedepth3d.com cna5.mzstatic.com cn, adcdownload.apple.com.akadns.net cn!adcdownload.apple.com +cn#amp-api.media.apple.com +cn&api-p-ap-c.smoot.apple.com +cn&api-p-ap-d.smoot.apple.com +cn&api-p-ap-e.smoot.apple.com cn."app-site-association.cdn-apple.com cnappldnld.apple.com cn"appldnld.g.aaplimg.com @@ -3555,44 +3894,54 @@ touchid.tv touchid.wangtracking-location.comtruedepth3d.com cn cl5.apple.com cn+clientflow.apple.com.akadns.net cn clientflow.apple.com +cn, cn-smp-paymentservices.apple.com cn."configuration.apple.com.akadns.net cn#configuration.apple.com cncstat.apple.com cncstat.cdn-apple.com cn."dd-cdn.origin-apple.com.akadns.net +cndejavu.apple.com cn(download.developer.apple.com +cn!experiments.apple.com cngs-loc-cn.apple.com cngs-loc.apple.com cn%gsp10-ssl-cn.ls.apple.com +cn!gsp12-cn.ls.apple.com cn!gsp13-cn.ls.apple.com cnC7gsp4-cn.ls.apple.com.edgekey.net.globalredir.akadns.net cn, gsp4-cn.ls.apple.com.edgekey.net cn gsp4-cn.ls.apple.com cn gsp5-cn.ls.apple.com cn%gsp85-cn-ssl.ls.apple.com +cn(gspe19-2-cn-ssl.ls.apple.com cn&gspe19-cn-ssl.ls.apple.com cn-!gspe19-cn.ls-apple.com.akadns.net cn"gspe19-cn.ls.apple.com cn#gspe21-ssl.ls.apple.com cngspe21.ls.apple.com cn#gspe35-ssl.ls.apple.com +cn&gspe79-cn-ssl.ls.apple.com cn+guzzoni-apple-com.v.aaplimg.com cnguzzoni.apple.com +cn#guzzoni.smoot.apple.com cniadsdk.apple.com cn, icloud-cdn.icloud.com.akadns.net cn icloud.cdn-apple.com cn'images.apple.com.akadns.net cn?3images.apple.com.edgekey.net.globalredir.akadns.net cnimages.apple.com +cninit-kt.apple.com cn3'init-p01md-lb.push-apple.com.akadns.net cn init-p01md.apple.com cn3'init-p01st-lb.push-apple.com.akadns.net cn%init-p01st.push.apple.com cn3'init-s01st-lb.push-apple.com.akadns.net cn%init-s01st.push.apple.com +cninit.ess.apple.com cn(iosapps.itunes.g.aaplimg.com cnipcdn.apple.com cniphone-ld.apple.com +cn1%iphone-ld.origin-apple.com.akadns.net cn is1-ssl.mzstatic.com cnis1.mzstatic.com cn is2-ssl.mzstatic.com @@ -3609,19 +3958,30 @@ touchid.tv touchid.wangtracking-location.comtruedepth3d.com cn)mesu-cdn.apple.com.akadns.net cn+mesu-china.apple.com.akadns.net cnmesu.apple.com +cnml.cdn-apple.com cnmusic.apple.com cn(ocsp-lb.apple.com.akadns.net cnocsp.apple.com cnocsp2.apple.com cnoscdn.apple.com cn-!oscdn.origin-apple.com.akadns.net +cn(osxapps.itunes.g.aaplimg.com cnpancake.apple.com cn, pancake.cdn-apple.com.akadns.net +cnpba0.apple.com +cn probe.siri.apple.com cn1%prod-support.apple-support.akadns.net cn&publicassets.cdn-apple.com cn#reserve-prime.apple.com cns.mzstatic.com +cn'seed-sequoia.siri.apple.com +cn'seed-swallow.siri.apple.com +cnseed.siri.apple.com +cnsequoia.apple.com +cn(sh-pod2-smp-device.apple.com +cn)shazam-insights.cdn-apple.com cn(smp-device-content.apple.com +cnstatic.gc.apple.com cn4(stocks-sparkline-lb.apple.com.akadns.net cn&stocks-sparkline.apple.com cn>2store.apple.com.edgekey.net.globalredir.akadns.net @@ -3631,6 +3991,7 @@ touchid.tv touchid.wangtracking-location.comtruedepth3d.com cn+store.storeimages.cdn-apple.com cn2&support-china.apple-support.akadns.net cnsupport.apple.com +cn+swallow-apple-com.v.aaplimg.com cnswallow.apple.com cn."swcatalog-cdn.apple.com.akadns.net cnswcatalog.apple.com @@ -3640,12 +4001,18 @@ touchid.tv touchid.wangtracking-location.comtruedepth3d.com cnswdist.apple.com cn+swscan-cdn.apple.com.akadns.net cnswscan.apple.com +cnsylvan.apple.com +cn(tj-pod1-smp-device.apple.com cn1%updates-http.cdn-apple.com.akadns.net cn&updates-http.cdn-apple.com cn!updates.cdn-apple.com cnvalid.apple.com cn-!valid.origin-apple.com.akadns.net +cn-!weather-data.apple.com.akadns.net cn"weather-data.apple.com +cn!weather-map.apple.com +cn"weather-map2.apple.com +cn weatherkit.apple.com cn<0www.apple.com.edgekey.net.globalredir.akadns.net cn%www.apple.com.edgekey.net cn www.apple.com @@ -3666,7 +4033,21 @@ uverse.comwebhosting.com att-idns.net attdns.com attdns.netna-att-idns.netaudiencenetwork.comaudiencenetwork.tvcabletvdirectv.com dierectv.com dirctv.com direcpath.com direcpath.netdirecttv-deals.tvdirecttv-dish.com dkrecttv.com directtv.netdirecttvdeals.tvdirecttvreviews.comdirectv-4-you.comdirectv-newyork.com directv.comdirectvadsales.comdirectvatlantaga.comdirectvboston.comdirectvbundles.comdirectvbusiness.comdirectvcincinnatioh.comdirectvcinema.comdirectvconnect.comdirectvcookevilletn.comdirectvcrossvilletn.comdirectvdealer.comdirectvdeals.comdirectvdealsnow.com directvdsl.tvdirectvforhotels.comdirectvgrandslam.comdirectvhouston.comdirectvinternet.comdirectvkentucky.comdirectvlebanontn.comdirectvlosangeles.comdirectvmetropolisil.comdirectvmonitoring.comdirectvmurfreesborotn.comdirectvnewhampshire.comdirectvnow.comdirectvoffercodes.comdirectvonline.comdirectvplans.comdirectvpomise.comdirectvpromise.comdirectvpromotions.comdirectvrebate.comdirectvrichmond.comdirectvsavings.comdirectvsports.comdirectvsundayticket.com direectv.com -diretv.comdtv2009offers.comfreedirecttvspecial.com getdirect.tv hddirectv.com le-direct.tvmydirectgroove.commydirectvchannels.comredzonechannel.com txdirectv.com  xandr.com autodesk.combandwagonhost.com bwh1.net bwh8.net  bwh81.net  bwh88.net  bwh89.net blurams.com canon c-ij.com canon-cee.comcanon-cmos-sensors.com canon-cna.comcanon-ebm.com.hkcanon-emea.comcanon-emirates.aecanon-europa.comcanon-europe.com canon-me.com canon-ois.qacanon-se.com.tw canon.am canon.at canon.az canon.ba canon.be canon.bg canon.ca canon.chcanon.cn +diretv.comdtv2009offers.comfreedirecttvspecial.com getdirect.tv hddirectv.com le-direct.tvmydirectgroove.commydirectvchannels.comredzonechannel.com txdirectv.com  xandr.com 123dapp.com123dappipad.com123dartisan.com 123dcatch.com123dcircuits.com123dcreature.com123dcreaturenews.com123ddesign.com123ddoodler.com 123dmake.com 123dnews.com 123dpro.com 123dpro.net123dsculpt.com20yearsoffea.com360autodesk.com 360nexus.com 360nexus.net +360plm.com360trailers.com3d-december.com3ddecember.com 3december.com3decemberonline.com 3drules.com 3dstudio.com  3dtin.com  3dtin.net 5-d.com 51tuqiang.com5axis-machining.com +acdocs.com +adinst.com adskcloud.com adskcloud.net adskeng.netadskengineering.net adskengpp.net adskengpr.net  adtcc.comaecexcellence.comaerospace-cadcam.comaerospace-design.comairgunstudio.com  alias.comaliasadvantage.comaliasimaginationsengine.com aliasple.comaliasshowcase.comaliassketchbook.comaliassketchbookpro.comaliassystems.com aliasvisualizationstudio.comaliaswavefront.comarchitectural-cadcam.comarnoldrenderer.com +artcam.comartcamexpress.comartcaminsignia.comartcamjewelsmith.com artcampro.comassemblesystems.comautocad-schulungen.com autocad.comautocad360.com autocad3d.comautocadarchitecturecc.comautocadexpert.comautocadformac.comautocadfreestyle.com autocadlt.comautocadltbg.comautocadmac.comautocadmobile.comautocadsucks.comautocadsucks.net autocadws.com autocadws.netautodesk-aia-me.comautodesk-events.comautodesk-kickoff.comautodesk-mm.comautodesk-news.comautodesk-online.comautodesk-service.comautodesk-services.comautodesk-support.comautodesk-university.comautodesk-usability.com autodesk.com autodesk.dev autodesk.netautodesk123d.comautodesk123dnews.comautodesk360.comautodesk360access.comautodesk360beta.comautodesk360bim.comautodesk360express.comautodesk360forbim.comautodesk360forplm.comautodesk360nexus.comautodesk360nexus.netautodesk360plm.comautodesk360pro.com!autodesk360solutionforbim.com!autodesk360solutionforplm.comautodesk360vault.comautodeskaecfeed.comautodeskandcitrix.comautodeskarcade.comautodeskautocadlt.comautodeskautomotive.comautodeskbim360.comautodeskbookrequest.comautodeskbuild.comautodeskbuildingops.comautodeskbuildspc.comautodeskcave.comautodeskchronicle.comautodeskcommunications.comautodeskcompetitions.com!autodeskdesigncompetition.com"autodeskdesigncompetitions.comautodeskdiscussions.comautodeskdocandmedia.com#autodeskdocandmediaamericas.comautodeskdocandmediaasia.comautodeskdocandmediaemea.com!autodeskdocandmediaeurope.comautodeskegitimleri.comautodeskenterprise.comautodeskevents.comautodeskfashionstyler.comautodeskforgames.comautodeskforge.comautodeskformit.comautodeskfoundation.comautodeskfusionlifecycle.comautodeskgovernment.net#autodeskgreenbuildingstudio.comautodeskhelp.comautodeskicpcouncil.comautodeskimpression.comautodeskinform.comautodeskinstant.comautodeskjournal.comautodesklearning.comautodesklistens.comautodesklivedesign.comautodesklms.com$ autodeskmanufacturingacademy.com%!autodeskmayaformotiongraphics.comautodeskmedbookrequest.comautodeskmedia.comautodeskmediarequest.comautodeskmeetings.comautodeskmfg.com%!autodeskmotiongraphicsandmore.comautodesknews.comautodeskonline.comautodeskpartner.comautodeskplm.comautodeskplm360.comautodeskplm360.netautodeskproductreviews.comautodeskprofiles.comautodeskprograms.comautodeskresearch.comautodeskrevit.comautodeskrevit.netautodeskrevitsucks.comautodeskrevitsucks.netautodeskseek.comautodesksketchbook.com"autodesksketchbookdesigner.comautodeskstylebook.comautodesksubscription.comautodesksucks.comautodesksucks.netautodesktechdays.comautodesktechx.comautodesktinkerbox.comautodesktravel.comautodeskturkiye.comautodeskuniversity.comautodeskuniversity2013.comautodeskvasari.comautodeskvasari.netautodeskvietnam.comautodeskviewer.comautodeskworkshop.comautodeskworkshop.netautomotive-cadcam.comautosketch.com auxdubai.com avatara.combehindthescreenz.com best4bim.com bestbim.com betterbim.combetterwithautodesk.com bim-360.com +bim360.com +bim360.netbim360field.combim360glue.com bim360ops.combim3dcontent.com bimadsk.com bimglue.combimlibrary.com bimseeker.com bimsource.com bimworld.com bridgebim.com brni.combuilding3dcontent.com cad-mep.comcadcamsystemsinc.com cadduct.com +cadmep.comcadoverlay.com +cadren.com  caice.com cam-duct.com camduct.comceramics-cadcam.com +cfd-tv.com cfdesign.comchina-autodesk.comcitrixandautodesk.com civil3d.com civilcc.comcivilsoftware.netclimate-server.comcompass-system.comcompass-systems.comconstructware.comcontechacademy.comcrankplayer.comcreatewhatsnext.comcreativepass.comcreatwhatsnext.comdarwindimensions.comdelcam-ams.comdelcam-electrode.com delcam-na.comdelcam-robotics.comdelcam-services.com +delcam.comdelcamconsulting.comdelcamforsolidworks.com delcamna.com delcamtv.comdelcamuniversity.com delcamusa.comdesign-ledrev.comdesign-ledrevolution.comdesignledrevolution.comdesignsformovement.com designxml.com designxml.netdestinationbim.comdigitalprototyping.com discreet.com dodv.com drainage.com drnastran.com dwg.comdwgtrueconvert.comdwgtrueview.comdynamobuilds.comdynamopackages.comdynamoreach.com ecotect.com ecotect.net +ecscad.comecspublisher.comeducation-cadcam.com ember3dp.comemberprinter.comemergingsolutions.comenergystarbuildings.comeraofconnection.com esopworld.com#eueuropeansustainabledesign.neteurocodesoftware.com!europeansustainabledesign.com!europeansustainabledesign.net($europeansustainabledesigncouncil.com($europeansustainabledesigncouncil.netevalviewer.com evolver.com evolver3d.comevolverpro.comextensions4revit.comfakeorfoto.comfakeorphoto.comfeanonlinear.comfeaturecam.com +five-d.comflameunleashed.com flowfront.com flowfront.netfluidfxapp.com fmdesktop.comfollowpype.comfootwear-cadcam.com formit360.comformitfactory.com freefbx.comfusionlifecycle.comfusionproductionapps.com$ futureofbritishmanufacturing.comfutureofmaktingthings.com  gbxml.netgeneticconstructor.comgeospatialimaging.comgeospatialinfo.comgetbuzzsaw.comgivemebuzzsaw.com gobuildx.netgovernmentengineer.comgreenbuildingstudio.com hmsxpress.comhomestylerapp.comhomestylernews.comhorizontal-llc.comhorizontal-systems.comhorizontalglue.comhorizontalsystems.com hsm-works.comhsm-xpress.comhsmexpress.com hsmworks.com hsmxpress.comidea-server.comimagemodeler.comimaginationsengine.comimpactdesignhub.cominfraworks.cominstallbuzzsaw.comintelisolve.cominventor-certified.cominventorfusion.cominventorseries.comistorytell.comizmirautodeskegitimleri.com jasa3dmax.comjasaautocad.com kaydara.comkeepyourcad.com kynogon.comlasersawapp.comlicenseparser.comlivesketchshare.comlrfdsoftware.comlunchwithpype.commachine-dna.commadewithmaya.commadewithstudiotools.com magestic.commakeanything.commakeitrealcontest.commakingstartshere.commap-software.com mapguide.commappingonline.commarinecadcam.commarkingmenus.commatchmover.commaxillofacial-cadcam.commayacomplete.commayaconductors.commayafluideffects.commayaformotiongraphics.com mayagames.commayamasters.commayamentor.netmayamentors.commayamentors.netmayaonlinux.com mayaonmac.com mayaonosx.commayapressbooks.com mayasucks.commayaunlimited.com mayauser.com mayauser.netmayavisualization.commedicalimplants-cadcam.com meshmixer.commeshmixerforum.commimistudio.commimistyler.com mmmanual.com moldflow.commoldflowexpress.commoleculardesigntoolkit.com molecularsimulationtools.commolecularviewer.com molviewer.commorewithautodesk.commotiongraphicsandmore.com mudbox3d.commy1stflame.com myautocad.commyautodeskbenefits.commyfirstflame.commymapportal.comnastranincad.com nastrannx.comnastrantraining.comnastranworldwide.comnavisworks.comnavisworks.net +neicad.comneiexplicit.com +neifea.com neimotion.comneinastranincad.comneisoftware.comneisolutions.com neiworks.com nenastran.comnetzerobuildings.comnetzerobuildingstudio.com new2fea.com newtofea.comnextgenerationcam.comnonlinearnastran.com objectarx.comoneteamconference.comopenreality.com opticore.comorthopaedic-cadcam.comorthotics-cadcam.compackaging-cadcam.compackagingcadcam.com partmaker.com  pi-vr.compixlr-o-matic.compixlromatic.complansondemand.complasticlabs.complastics-cadcam.com plug-into.comportfoliowall.compoweranimator.compowerinspect.com powermill.compowermillna.compowershape-e.compowershape.comprofilemaster.comprojectpoint.comprojectpoint.netprojectshoreline.comprojectvasari.comps-exchange.comrapidprototyping-cadcam.comreality-computing.comrealpeople-realprojects.comrealpeoplerealprojects.com realviz.com retimer.com  revit.com revitcc.comrevitsucks.net robobat.comrobotoffice.comsavoycomputing.com scaleform.com  scpic.net sculpoly.comshotgridsoftware.comshotgridstudio.comshotguncloud.com shotgunfx.comshotgunlocalhost.comshotgunsoftware.comshotgunsoftware.netshotgunstudio-test.comshotgunstudio.comshotgunvfx.com simsquad.comsimulationsquad.comsketchbookdesigner.comsketchbookmobile.comsketchbooknews.comsketchbookpro.com skymatter.com smartfea.comsmartnastran.com socailcam.com socialcam.comsocialcammail.com socialkam.com squ1.comsquidplatform.com ssttest.netstingrayengine.comstudiopaint.comstudiosucks.comsubmittal-log.com!sustainablebuildingstudio.com sustainabledesigncouncil.com sustainabledesigncouncil.net suxiebu.comswiss-machining.comswiss-turn.com t-splines.com the-area.com the123d.comthedesignworkshop.com thedesk.comtheinventionworks.comtheinventionworks.net timefxapp.comtinkerboxapp.com tinkercad.comtinkerentertainment.comtinkerplay.nettire-cadcam.comtoolmaking-cadcam.com topobase.comtoy-cadcam.com toycadcam.com truebim.com truedwg.com trunest.comtrusted-dwg.comtrusteddwg.com tryalias.com trydesign.com tspline.com tsplines.comtweakadmin.comtweakfilms.comtweaksoftware.comtyre-cadcam.comtyrecadcam.comupfrontcfd.comupfrontfea.comvelaserver.comvelastaging.com velasync.comvelasystems.com velatest.com viriondb.comvortexmachining.comvred-essentials.comvredessentials.comvredprofessional.com vrnastran.comxn--74q434dwff.comxn--74q434dwff.netbandwagonhost.com bwh1.net bwh8.net  bwh81.net  bwh88.net  bwh89.net blurams.com canon c-ij.com canon-cee.comcanon-cmos-sensors.com canon-cna.comcanon-ebm.com.hkcanon-emea.comcanon-emirates.aecanon-europa.comcanon-europe.com canon-me.com canon-ois.qacanon-se.com.tw canon.am canon.at canon.az canon.ba canon.be canon.bg canon.ca canon.chcanon.cn cn canon.co.il canon.co.uk canon.co.za  canon.com canon.com.al canon.com.au canon.com.by canon.com.cn cn canon.com.cy canon.com.hk canon.com.mk canon.com.mt canon.com.my canon.com.tr canon.com.tw canon.cz canon.de canon.dk canon.ee canon.es canon.fi canon.fr canon.ge canon.gr canon.hr canon.hu canon.ie canon.it canon.kz canon.lt canon.lu canon.lv canon.me  canon.net canon.nl canon.no canon.pl canon.pt canon.ro canon.rs canon.ru canon.se canon.si canon.sk canon.tj canon.ua canon.uzcanonfoundation.orgcanonproprinters.com  chegg.com cheggcdn.com webex.ca webex.co.in webex.co.it webex.co.jp webex.co.kr webex.co.nz webex.co.uk  webex.com webex.com.au webex.com.br webex.com.cn cn webex.com.hk webex.com.mx webex.de webex.es webex.fr ciscoacademynetriders.comcciernslabs.comcciesecuritylabs.comccievoicelabs.com  ccna5.netcisco-returns.comcisco-warrantyfinder.comcisco.cn @@ -3694,14 +4075,20 @@ badaas.com bitnami.combitnamiapp.combitnamistudio.comdock nyansa.com velocloud.com gopivotal.com heptio.cn cn heptio.com aliveipc.com aliveitsm.comaliveprofiler.com alivercm.comaliverewind.com alivertsm.com alivevm.com alivevmax.com alivevue.com vsphere.com vsphere.net air-watch.comairwatchexpress.comairwatchqa.com -getws1.com getwsone.comwhatisairwatch.comwhatisworkspaceone.comworkspaceone.comvmware.tt.omtrdc.netdelldell-brand.com dell.com dellcdn.comdigitalocean.comdigitaloceanspaces.com do.conginxconfig.io duolingo.com duolingo.cn -cnclickedu.co.ukdeepfreeze.co.ukdeepfreeze.comdeepfreeze.com.br deepfreeze.eudeepfreeze.netdeepfreeze.tech faronics.cafaronics.co.uk faronics.comfaronics.com.aufaronics.com.sg faronics.eu faronics.techfaronicslabs.comfaronicswise.co.ukfaronicswise.comfaronics.kayako.com  aorus.com aoruszone.cn +getws1.com getwsone.comwhatisairwatch.comwhatisworkspaceone.comworkspaceone.comvmware.tt.omtrdc.netdelldell-brand.com dell.com dellcdn.comdigitalocean.comdigitaloceanspaces.com do.conginxconfig.io drweb.by drweb.cn drweb.co.jp  drweb.com drweb.fr drweb.kz drweb.uz drweb-av.de drweb-av.es drweb-av.it drweb-av.pl!ads-api.duolingo.com +ads!metrics.duolingo.com +ads'analytics.vpc.duolingo.com +ads duolingo.com duolingo.cn +cnclickedu.co.ukdeepfreeze.co.ukdeepfreeze.comdeepfreeze.com.br deepfreeze.eudeepfreeze.netdeepfreeze.tech faronics.cafaronics.co.uk faronics.comfaronics.com.aufaronics.com.sg faronics.eu faronics.techfaronicslabs.comfaronicswise.co.ukfaronicswise.comfaronics.kayako.com giffgaff.comgiffgaff.design  aorus.com aoruszone.cn cn gigabyte.cn -cn gigabyte.comgigabyte2.azureedge.netsa78gs.wpc.edgecastcdn.net"sni1dcb6gl.wpc.edgecastcdn.net godaddy.comx.co godaddy android.comandroidify.com blogger.com blogblog.com blogspot.ae blogspot.al blogspot.am blogspot.ba blogspot.be blogspot.bg blogspot.bj blogspot.ca blogspot.cf blogspot.ch blogspot.clblogspot.co.atblogspot.co.idblogspot.co.ilblogspot.co.keblogspot.co.nzblogspot.co.ukblogspot.co.za blogspot.comblogspot.com.arblogspot.com.aublogspot.com.brblogspot.com.byblogspot.com.coblogspot.com.cyblogspot.com.eeblogspot.com.egblogspot.com.esblogspot.com.mtblogspot.com.ngblogspot.com.trblogspot.com.uy blogspot.cv blogspot.cz blogspot.de blogspot.dk blogspot.fi blogspot.fr blogspot.gr blogspot.hk blogspot.hr blogspot.hu blogspot.ie blogspot.in blogspot.is blogspot.it blogspot.jp blogspot.kr blogspot.li blogspot.lt blogspot.lu blogspot.md blogspot.mk blogspot.mx blogspot.my blogspot.nl blogspot.no blogspot.pe blogspot.pt blogspot.qa blogspot.re blogspot.ro blogspot.rs blogspot.ru blogspot.se blogspot.sg blogspot.si blogspot.sk blogspot.sn blogspot.td blogspot.tw blogspot.ug blogspot.vn dart.dev dartlang.org dartpad.dev fastlane.cifastlane.tools flutter.devflutterapp.com go-lang.com go-lang.net go-lang.org +cn gigabyte.comgigabyte2.azureedge.netsa78gs.wpc.edgecastcdn.net"sni1dcb6gl.wpc.edgecastcdn.net godaddy.comx.co godaddy android.comandroidify.com blogger.com blogblog.com blogspot.ae blogspot.al blogspot.am blogspot.ba blogspot.be blogspot.bg blogspot.bj blogspot.ca blogspot.cf blogspot.ch blogspot.clblogspot.co.atblogspot.co.idblogspot.co.ilblogspot.co.keblogspot.co.nzblogspot.co.ukblogspot.co.za blogspot.comblogspot.com.arblogspot.com.aublogspot.com.brblogspot.com.byblogspot.com.coblogspot.com.cyblogspot.com.eeblogspot.com.egblogspot.com.esblogspot.com.mtblogspot.com.ngblogspot.com.trblogspot.com.uy blogspot.cv blogspot.cz blogspot.de blogspot.dk blogspot.fi blogspot.fr blogspot.gr blogspot.hk blogspot.hr blogspot.hu blogspot.ie blogspot.in blogspot.is blogspot.it blogspot.jp blogspot.kr blogspot.li blogspot.lt blogspot.lu blogspot.md blogspot.mk blogspot.mx blogspot.my blogspot.nl blogspot.no blogspot.pe blogspot.pt blogspot.qa blogspot.re blogspot.ro blogspot.rs blogspot.ru blogspot.se blogspot.sg blogspot.si blogspot.sk blogspot.sn blogspot.td blogspot.tw blogspot.ug blogspot.vn dart.dev dartlang.org dartpad.dev fastlane.cifastlane.tools firebase.com firebase.iofirebaseapp.comfirebaseio.com-!firebase-settings.crashlytics.com +cnfirebase.google.comfirebase.googleapis.com#firebaseappcheck.googleapis.com,(firebasedynamiclinks-ipv4.googleapis.com,(firebasedynamiclinks-ipv6.googleapis.com'#firebasedynamiclinks.googleapis.com)%firebaseinappmessaging.googleapis.com($firebaseinstallations.googleapis.com%!firebaselogging-pa.googleapis.com"firebaselogging.googleapis.com+'firebaseperusertopics-pa.googleapis.com'#firebaseremoteconfig.googleapis.com flutter.devflutterapp.com pub.dev go-lang.com go-lang.net go-lang.org go.dev  godoc.org golang.com golang.net -golang.org2mdn.net +golang.org 2mdn-cn.net +ads2mdn.net +ads admob-cn.com ads admob.com adsads.youtube.com ads adsense.com @@ -3713,25 +4100,39 @@ golang.org2mdn.net ads"adwords-community.com ads adwords.com adsadwordsexpress.com +ads#app-measurement-cn.com ads app-measurement.com -ads&clickserver.googleads.com +adsdoubleclick-cn.net +adsdoubleclick.cn adsdoubleclick.com adsdoubleclick.net +ads$google-analytics-cn.com ads!google-analytics.com adsgoogleadapis.com +adsgoogleads-cn.com +ads googleads.com +ads$googleadservices-cn.com ads!googleadservices.com +ads googleadsserving.cn ads googleanalytics.com +ads"googleoptimize-cn.com adsgoogleoptimize.com +ads%googlesyndication-cn.com ads"googlesyndication.com +ads$googletagmanager-cn.com ads!googletagmanager.com +ads%googletagservices-cn.com ads"googletagservices.com +ads*googletraveladservices-cn.com ads'googletraveladservices.com +adsgooglevads-cn.com ads)marketingplatform.google.com ads urchin.com ads!analytics.google.com ads>1^adservice\.google\.([a-z]{2}|com?)(\.[a-z]{2})?$ adscharlestonroadregistry.com crr.comregistry.google get.app get.dev get.how get.new get.page get.rsvp hey.boo iam.soy new.dayxn--p8j9a0d9c9a.xn--q9jyb4cscholar.google.aescholar.google.atscholar.google.bescholar.google.bgscholar.google.cascholar.google.catscholar.google.chscholar.google.clscholar.google.cnscholar.google.co.crscholar.google.co.idscholar.google.co.ilscholar.google.co.inscholar.google.co.jpscholar.google.co.krscholar.google.co.nzscholar.google.co.thscholar.google.co.ukscholar.google.co.vescholar.google.co.zascholar.google.comscholar.google.com.arscholar.google.com.auscholar.google.com.boscholar.google.com.brscholar.google.com.coscholar.google.com.cuscholar.google.com.doscholar.google.com.ecscholar.google.com.egscholar.google.com.gtscholar.google.com.hkscholar.google.com.lyscholar.google.com.mxscholar.google.com.myscholar.google.com.nischolar.google.com.pascholar.google.com.pescholar.google.com.phscholar.google.com.pkscholar.google.com.prscholar.google.com.pyscholar.google.com.sgscholar.google.com.svscholar.google.com.trscholar.google.com.twscholar.google.com.uascholar.google.com.uyscholar.google.com.vnscholar.google.czscholar.google.descholar.google.dkscholar.google.esscholar.google.fischolar.google.frscholar.google.grscholar.google.hnscholar.google.hrscholar.google.huscholar.google.isscholar.google.itscholar.google.lischolar.google.ltscholar.google.luscholar.google.lvscholar.google.nlscholar.google.noscholar.google.plscholar.google.ptscholar.google.roscholar.google.ruscholar.google.sescholar.google.sischolar.google.sk!scholar.googleusercontent.comscholar.l.google.com pki.googclients1.google.compki.google.com crl.pki.goog +cn crls.pki.goog cn ocsp.pki.goog cn!pki-goog.l.google.com cnalt1-mtalk.google.comalt2-mtalk.google.comalt3-mtalk.google.comalt4-mtalk.google.comalt5-mtalk.google.comalt6-mtalk.google.comalt7-mtalk.google.comalt8-mtalk.google.commtalk.google.com @@ -3822,8 +4223,7 @@ youtube.vnyoutubeeducation.com($youtubeembeddedplayer.googleapis.com googleguge hangout nexus xn--flw351e xn--qcka1pmc  google.ad  google.ae  google.al  google.am  google.as  google.at  google.az  google.ba  google.be  google.bf  google.bg  google.bi  google.bj  google.bs  google.bt  google.by  google.ca google.cat  google.cd  google.cf  google.cg  google.ch  google.ci  google.cl  google.cm google.cn cn  google.co google.co.ao google.co.bw google.co.ck google.co.cr google.co.id google.co.il google.co.in google.co.jp google.co.ke google.co.kr google.co.ls google.co.ma google.co.mz google.co.nz google.co.th google.co.tz google.co.ug google.co.uk google.co.uz google.co.ve google.co.vi google.co.za google.co.zm google.co.zw -google.com google.com.af google.com.ag google.com.ai google.com.ar google.com.au google.com.bd google.com.bh google.com.bn google.com.bo google.com.br google.com.bz google.com.co google.com.cu google.com.cy google.com.do google.com.ec google.com.eg google.com.et google.com.fj google.com.gh google.com.gi google.com.gt google.com.hk google.com.jm google.com.kh google.com.kw google.com.lb google.com.ly google.com.mm google.com.mt google.com.mx google.com.my google.com.na google.com.ng google.com.ni google.com.np google.com.om google.com.pa google.com.pe google.com.pg google.com.ph google.com.pk google.com.pr google.com.py google.com.qa google.com.sa google.com.sb google.com.sg google.com.sl google.com.sv google.com.tj google.com.tr google.com.tw google.com.ua google.com.uy google.com.vc google.com.vn  google.cv  google.cz  google.de  google.dj  google.dk  google.dm  google.dz  google.ee  google.es  google.fi  google.fm  google.fr  google.ga  google.ge  google.gg  google.gl  google.gm  google.gr  google.gy  google.hn  google.hr  google.ht  google.hu  google.ie  google.im  google.iq  google.is  google.it  google.je  google.jo  google.kg  google.ki  google.kz  google.la  google.li  google.lk  google.lt  google.lu  google.lv  google.md  google.me  google.mg  google.mk  google.ml  google.mn  google.ms  google.mu  google.mv  google.mw  google.ne  google.nl  google.no  google.nr  google.nu  google.pl  google.pn  google.ps  google.pt  google.ro  google.rs  google.ru  google.rw  google.sc  google.se  google.sh  google.si  google.sk  google.sm  google.sn  google.so  google.sr  google.st  google.td  google.tg  google.tl  google.tm  google.tn  google.to  google.tt  google.vg  google.vu  google.ws firebase.com firebase.iofirebaseapp.comfirebaseio.com-!firebase-settings.crashlytics.com -cnfirebase.google.comfirebase.googleapis.com#firebaseappcheck.googleapis.com,(firebasedynamiclinks-ipv4.googleapis.com,(firebasedynamiclinks-ipv6.googleapis.com'#firebasedynamiclinks.googleapis.com)%firebaseinappmessaging.googleapis.com($firebaseinstallations.googleapis.com%!firebaselogging-pa.googleapis.com"firebaselogging.googleapis.com+'firebaseperusertopics-pa.googleapis.com'#firebaseremoteconfig.googleapis.com 0emm.com  1e100.net  1ucrs.com +google.com google.com.af google.com.ag google.com.ai google.com.ar google.com.au google.com.bd google.com.bh google.com.bn google.com.bo google.com.br google.com.bz google.com.co google.com.cu google.com.cy google.com.do google.com.ec google.com.eg google.com.et google.com.fj google.com.gh google.com.gi google.com.gt google.com.hk google.com.jm google.com.kh google.com.kw google.com.lb google.com.ly google.com.mm google.com.mt google.com.mx google.com.my google.com.na google.com.ng google.com.ni google.com.np google.com.om google.com.pa google.com.pe google.com.pg google.com.ph google.com.pk google.com.pr google.com.py google.com.qa google.com.sa google.com.sb google.com.sg google.com.sl google.com.sv google.com.tj google.com.tr google.com.tw google.com.ua google.com.uy google.com.vc google.com.vn  google.cv  google.cz  google.de  google.dj  google.dk  google.dm  google.dz  google.ee  google.es  google.fi  google.fm  google.fr  google.ga  google.ge  google.gg  google.gl  google.gm  google.gr  google.gy  google.hn  google.hr  google.ht  google.hu  google.ie  google.im  google.iq  google.is  google.it  google.je  google.jo  google.kg  google.ki  google.kz  google.la  google.li  google.lk  google.lt  google.lu  google.lv  google.md  google.me  google.mg  google.mk  google.ml  google.mn  google.ms  google.mu  google.mv  google.mw  google.ne  google.nl  google.no  google.nr  google.nu  google.pl  google.pn  google.ps  google.pt  google.ro  google.rs  google.ru  google.rw  google.sc  google.se  google.sh  google.si  google.sk  google.sm  google.sn  google.so  google.sr  google.st  google.td  google.tg  google.tl  google.tm  google.tn  google.to  google.tt  google.vg  google.vu  google.ws 0emm.com  1e100.net  1ucrs.com 466453.com abc.xyz adgoogle.net admeld.comangulardart.org api.ai @@ -3845,8 +4245,7 @@ googel.com googil.com  googl.comgoogle-access.netgoogle-syndication.com google.berlin google.dev google.net -google.orggoogle.ventures"googleacquisitionmigration.com googleapis.cn -cngoogleapis.comgoogleapps.comgooglearth.comgoogleblog.com googlebot.comgooglecapital.comgooglecert.netgooglecnapps.cn +google.orggoogle.ventures"googleacquisitionmigration.com googleapis.cngoogleapis.comgoogleapps.comgooglearth.comgoogleblog.com googlebot.comgooglecapital.comgooglecert.netgooglecnapps.cn cngooglecode.comgooglecommerce.comgooglecompare.co.ukgoogledanmark.comgoogledomains.comgoogledrive.com googlee.comgoogleearth.comgooglefiber.comgooglefiber.netgooglefinland.comgooglemail.comgooglemaps.comgooglepagecreator.comgooglephotos.comgoogleplay.comgoogleplus.comgooglesource.comgooglestore.comgooglesverige.comgoogleusercontent.comgoogleventures.com googlezip.net googlr.com goolge.com gooogle.com gridaware.app gsrc.io @@ -3870,9 +4269,6 @@ webrtc.orgweltweitwachsen.dewhatbrowser.org widevine.comw cn265.com cn 2mdn-cn.net cn2mdn.net -cn!accounts.googlers.com -cn$accounts.xn--9trs65b.com -cn&accounts.xn--ggle-55da.com cn admob-cn.com cn adservice.google.com cn ai.ytimg.com @@ -3898,9 +4294,8 @@ webrtc.orgweltweitwachsen.dewhatbrowser.org widevine.comw cn)cnappinstall.googleadapis.com cn)connectivitycheck.gstatic.com cn$content.googleadapis.com -cncorp.google.com -cncorp.googleapis.com cn0$crashlyticsreports-pa.googleapis.com +cn crl.pki.goog cncsi.gstatic.com cndartsearch-cn.net cn$dg-meta.video.google.com @@ -3917,6 +4312,7 @@ webrtc.orgweltweitwachsen.dewhatbrowser.org widevine.comw cndownload.qpdp1.net cn*download.tensorflow.google.com cn+emmapplecodevice.googleapis.com +cn-!firebase-settings.crashlytics.com cn&fontfiles.googleadapis.com cn$fontfiles.googleapis.com cn"fonts.googleadapis.com @@ -3926,7 +4322,6 @@ webrtc.orgweltweitwachsen.dewhatbrowser.org widevine.comw cng1.gstatic.com cng2.gstatic.com cng3.gstatic.com -cn gcpnode.com cngonglchuangl.net cngongyichuangyi.net cn#google-analytics-cn.com @@ -3959,8 +4354,10 @@ webrtc.orgweltweitwachsen.dewhatbrowser.org widevine.comw cn monitoring.qatp1.net cn monitoring.qcpp1.net cn monitoring.qpdp1.net +cn ocsp.pki.goog cn, pagead-googlehosted.l.google.com cn0$performanceparameters.googleapis.com +cn!pki-goog.l.google.com cnplay.1ucrs.com cn'prod-controlbe.floonet.goog cn$prod-databe.floonet.goog @@ -3979,10 +4376,9 @@ webrtc.orgweltweitwachsen.dewhatbrowser.org widevine.comw cn!qualysguard.qcpp1.net cn!qualysguard.qpdp1.net cn recaptcha.net +cnrecaptcha-cn.net cnredirector.bdn.dev cn(redirector.c.chat.google.com -cn(redirector.c.docs.google.com -cn)redirector.c.drive.google.com cn(redirector.c.mail.google.com cn(redirector.c.pack.google.com cn(redirector.c.play.google.com @@ -4011,8 +4407,6 @@ webrtc.orgweltweitwachsen.dewhatbrowser.org widevine.comw cn&test.gbugs-qa.chromium.org cntools.google.com cntools.l.google.com -cn up.corp.goog -cnup.gcp.googlers.com cn"update.crashlytics.com cn!update.googleapis.com cnwear.googleapis.com @@ -4024,6 +4418,44 @@ webrtc.orgweltweitwachsen.dewhatbrowser.org widevine.comw cn www.pxcc.com cn xn--9kr7l.com cnxn--flw351e.com +cn$applemdm.corp.google.com +cndns.corp.google.com +cn!g3doc.corp.google.com +cn(gmskiosk-ssl.corp.google.com +cngo.corp.google.com +cn!gorom.corp.google.com +cn goto.corp.google.com +cn(l2-uberproxy.corp.google.com +cn"logger.corp.google.com +cn&logger-dev.corp.google.com +cn!login.corp.google.com +cn'proxyconfig.corp.google.com +cn, rapture-autopush.corp.google.com +cn#rapture.corp.google.com +cn(rapture-prod.corp.google.com +cn(rapture-test.corp.google.com +cn"r.cert.corp.google.com +cn%ssh-relay.corp.google.com +cn'sslredirect.corp.google.com +cn/#streaming-uberproxy.corp.google.com +cn8,streaming-uberproxy-rotation.corp.google.com +cnsup.corp.google.com +cn)supportcenter.corp.google.com +cn*sup-ssh-relay2.corp.google.com +cn)sup-ssh-relay.corp.google.com +cn$techstop.corp.google.com +cn&uberproxy4.corp.google.com +cn&uberproxy6.corp.google.com +cn%uberproxy.corp.google.com +cn, uberproxy-debug4.corp.google.com +cn+uberproxy-debug.corp.google.com +cn2&uberproxy-pen-redirect.corp.google.com +cn vext.corp.google.com +cnsup.l.google.com +cn*uberproxy-with-cn.l.google.com +cn+uberproxy-with-cn4.l.google.com +cn+uberproxy-with-cn6.l.google.com +cn qiao-cn.com cn hetzner.cloud hetzner.com hetzner.deyour-server.de eca.hinet.netgtlsca.nat.gov.tw cht.com.tw chtf.org.tw  emome.net  hinet.net  xuite.net csifund.org hkbn.com.hk hkbn.net @@ -4043,7 +4475,7 @@ hpshop.com hpshoping.com hpshopping.hk hpsignage.com hpsmart hpstore.cn cn hpstore.comhpstorethailand.com hpsupport.comhpsuresupply.comhptechventures.com hpto.net hptouch.comhptouchpointmanager.comhptrainingcenter.com  hpuae.comhpuniversity.infohpusertraining.com hpveer.comhpvirtualthin.com hpwallart.comhpwellnesscentral.com  hpwsn.com i-123-hp.com inkchoice.cominstantink.comleavinghpinc.comlife-global.orgmyhpsupport.com printeron.comprintersetupsupport.comprintspots.comprintspots.netserviceshp.comthecompaqstore.comtouchsmartpc.comtouchsmartpc.nettouchsmartpc.orgworkstations.tv www8-hp.comxn--6eup7j.comxn--6eup7j.nethpstore.corpmerchandise.comhubblephone.com -tsi.aiibmweatherchannel weatherappdomain.cloud bluemix.com bluemix.net ibm.com +tsi.ai  consul.io hashicorp.comnomadproject.io  packer.io terraform.iovagrantcloud.com vagrantup.comvaultproject.ioibmweatherchannel weatherappdomain.cloud bluemix.com bluemix.net ibm.com ibm.eu ibm.net ibm.us s-bluemix.net s81c.com  inshot.cc inshot.com inshotapp.com @@ -4063,7 +4495,8 @@ omnitek.tv openamt.comopendroneid.orgoptanedifference.com pc.com pentium.com pentium.net pintool.compoweredbyintel.comreconinstruments.com reconjet.comresearchintel.comsaffrontech.comsensorynetworks.com siport.comsmart-edge.comtheintelstore.comthunderbolttechnology.nettrustedanalytics.comtrustedanalytics.net vokevr.com vpro.com vpro.net xeon.comxn--ztsq84g.cn -xscale.combarefootnetworks.com  kakao.com kakaocdn.net kakaocorp.com kakaotalk.jp +xscale.combarefootnetworks.com daum.net daumcdn.net daumkakao.io  kakao.com kakao.co.kr kakaocdn.net kakaocorp.com kakaotalk.jp  kgslb.com onkakao.net kakao.vckakaobrain.comkakaoinvestment.comkakaomobility.comkakaopiccoma.com kakaobank.com kakaobank.iokakaobankcontent.comkakaoenterprise.comkakaocloud.comkakaoilaas.com  1thek.com antenna.co.krawesomeent.co.kr bhent.co.krdolphiners.com gleline.com istent.co.kr jwide.co.kr kakaoent.comkrosspictures.comlogosfilm.co.kr megamon.co.kr  melon.com msoopent.comootbstudio.co.kr shownote.comstarship-ent.comstuidok110.com vastenm.com zipcine.comdaumpcbang.comkakaogamescorp.com kakaovx.comlionhearts.co.kr metabora.io +sena.co.krkakaohealthcare.com karechat.aipastahealth.com kakaopay.comkakaopaysec.comkpinsurances.comfashionbykakao.comkakaostyle.com posty.kr  zigzag.kr lg.com lgappstv.com  lge.co.kr lge.comlgecareers.com lghvac.comlghvacstory.comlgrecyclingprogram.comlgsalesportal.comlgelectronics.122.2o7.net logi.comlogicool.co.jp logicoolg.com logitech.biz logitech.comlogitech.com.cn logitech.fr logitech.io logitechg.comlogitechg.com.cn logitechg.frlogitechio.com.cnworldsfastestgamer.net imgsmail.ru mail.ru mycdn.meaboutfacebook.com accessfacebookfromschool.com acebooik.com acebook.comadvancediddetection.comaskfacebook.netaskfacebook.org atdmt2.com atlasdmt.comatlasonepoint.combuyingfacebooklikes.comcareersatfb.comcelebgramme.comchina-facebook.com click-url.comcomo-hackearfacebook.comcrowdtangle.com dacebook.comdlfacebook.comdotfacebook.comdotfacebook.netexpresswifi.com faacebok.com faacebook.com faasbook.com facbebook.com facbeok.com @@ -4079,9 +4512,13 @@ redkix.com workplace.comworkplaceusecases.comfbcdn-a.akamaihd.n buck.build buckbuild.comcomponentkit.org draftjs.org f8.comfacebookappcenter.infofacebookappcenter.netfacebookappcenter.orgfacebookconnect.comfacebookdevelopergarage.comfaciometrics.com fasttext.cc fbf8.com fbinfer.com fblitho.com fbredex.com fbrell.com flow.dev flow.org flowtype.org frescolib.org hacklang.org hhvm.commakeitopen.com mcrouter.net mcrouter.orgmessengerdevelopers.com -ogp.meopengraphprotocol.comopengraphprotocol.org  parse.com pyrobot.org  react.com reactjs.com reactjs.org recoiljs.org rocksdb.com rocksdb.net rocksdb.orgyogalayout.comdevelopers.facebook.com!achat-followers-instagram.com#acheter-followers-instagram.com$ acheterdesfollowersinstagram.com!acheterfollowersinstagram.combookstagram.comcarstagram.comcdninstagram.comchickstagram.com ig.me  igcdn.com igsonar.com igtv.com imstagram.com imtagram.cominstaadder.cominstachecker.cominstafallow.cominstafollower.cominstagainer.com instagda.com instagify.cominstagmania.com instagor.cominstagram-brand.cominstagram-engineering.cominstagram-help.cominstagram-press.cominstagram-press.net instagram.cominstagramci.cominstagramcn.cominstagramdi.cominstagramhashtags.netinstagramhilecim.cominstagramhilesi.orginstagramium.cominstagramizlenme.cominstagramkusu.cominstagramlogin.cominstagramm.cominstagramn.cominstagrampartners.cominstagramphoto.cominstagramq.cominstagramsepeti.cominstagramtakipcisatinal.netinstagramtakiphilesi.cominstagramtips.cominstagramtr.com instagran.cominstagranm.com instagrem.com instagrm.cominstagtram.com instagy.cominstamgram.cominstangram.cominstanttelegram.cominstaplayer.net instastyle.tv instgram.com intagram.com intagrm.com intgram.comkingstagram.comlnstagram-help.comtheinstagramhack.comoninstagram.comonline-instagram.comonlineinstagram.comweb-instagram.netwwwinstagram.comfbmessenger.comm.me messenger.com +ogp.meopengraphprotocol.comopengraphprotocol.org  parse.com pyrobot.org  react.com reactjs.com reactjs.org recoiljs.org rocksdb.com rocksdb.net rocksdb.orgyogalayout.comdevelopers.facebook.com graph.instagram.com +ads)graph-fallback.instagram.com +ads!achat-followers-instagram.com#acheter-followers-instagram.com$ acheterdesfollowersinstagram.com!acheterfollowersinstagram.combookstagram.comcarstagram.comcdninstagram.comchickstagram.com ig.me  igcdn.com igsonar.com igtv.com imstagram.com imtagram.cominstaadder.cominstachecker.cominstafallow.cominstafollower.cominstagainer.com instagda.com instagify.cominstagmania.com instagor.cominstagram-brand.cominstagram-engineering.cominstagram-help.cominstagram-press.cominstagram-press.net instagram.cominstagramci.cominstagramcn.cominstagramdi.cominstagramhashtags.netinstagramhilecim.cominstagramhilesi.orginstagramium.cominstagramizlenme.cominstagramkusu.cominstagramlogin.cominstagramm.cominstagramn.cominstagrampartners.cominstagramphoto.cominstagramq.cominstagramsepeti.cominstagramtakipcisatinal.netinstagramtakiphilesi.cominstagramtips.cominstagramtr.com instagran.cominstagranm.com instagrem.com instagrm.cominstagtram.com instagy.cominstamgram.cominstangram.cominstanttelegram.cominstaplayer.net instastyle.tv instgram.com intagram.com intagrm.com intgram.comkingstagram.comlnstagram-help.comtheinstagramhack.comoninstagram.comonline-instagram.comonlineinstagram.comweb-instagram.netwwwinstagram.comfbmessenger.comm.me messenger.com nbabot.net binoculus.com buyoculus.com ocul.usoculus-china.com -oculus.comoculus2014.com oculus3d.comoculusblog.comoculusbrand.comoculuscasino.net oculuscdn.comoculusconnect.comoculusdiving.comoculusforbusiness.comoculusrift.com oculusvr.compowersunitedvr.com threads.net wa.mewhatsapp-plus.infowhatsapp-plus.mewhatsapp-plus.net whatsapp.cc whatsapp.com whatsapp.info whatsapp.net whatsapp.org whatsapp.tvwhatsappbrand.com meta.com azure 21vbc.com +oculus.comoculus2014.com oculus3d.comoculusblog.comoculusbrand.comoculuscasino.net oculuscdn.comoculusconnect.comoculusdiving.comoculusforbusiness.comoculusrift.com oculusvr.compowersunitedvr.com threads.netgraph.whatsapp.com +adsgraph.whatsapp.net +ads wa.mewhatsapp-plus.infowhatsapp-plus.mewhatsapp-plus.net whatsapp.cc whatsapp.com whatsapp.info whatsapp.net whatsapp.org whatsapp.tvwhatsappbrand.com meta.ai meta.com azure 21vbc.com cn21vbluecloud.com cn21vbluecloud.net cnaadrm.cn @@ -4142,16 +4579,17 @@ b3itech.cn cnazure.microsoft.com"azuremarketplace.microsoft.com azure-dns.cn cn azure-dns.comazure-dns.info azure-dns.net azure-dns.org).+\.azure-dns-([1-9]|10)\.cn$ cnbing bing.com bing.com.cn -cn bing.net bingads.combingagencyawards.com bingapis.combingapistatistics.combingsandbox.combingvisualsearch.com bingworld.combluehatnights.com -dictate.msflipwithsurface.commasalladeloslimites.commicrosoft-give.commicrosoftcloudsummit.commicrosoftdiplomados.commicrosoftlatamholiday.commicrosoftmxfilantropia.com!microsoftpartnersolutions.commsunlimitedcloudsummit.comoffice365love.comoffice365tw.comrenovacionoffice.comsprinklesapp.com cn.bing.com +cn bing.net bing123.com bingads.combingagencyawards.com bingapis.combingapistatistics.combingparachute.combingsandbox.combingvisualsearch.com bingworld.combluehatnights.com +dictate.msflipwithsurface.commasalladeloslimites.commicrosoft-give.commicrosoftcloudsummit.commicrosoftdiplomados.commicrosoftlatamholiday.commicrosoftmxfilantropia.com!microsoftpartnersolutions.commsunlimitedcloudsummit.comoffice365love.comoffice365tw.comrenovacionoffice.comsprinklesapp.comlocation.microsoft.com cn.bing.com cn cn.bing.net +cncn.mm.bing.net cn ditu.live.com cnbj1.api.bing.com cnemoi-cncdn.bing.com cn npm.community  npmjs.com  npmjs.org atom.iodependabot.com ghcr.io git.io github.blog github.comgithub.community -github.dev  github.io githubapp.comgithubassets.comgithubhackathon.comgithubpreview.devgithubstatus.comgithubuniverse.comgithubusercontent.com myoctocat.comopensource.guide repo.newthegithubshop.com!github-cloud.s3.amazonaws.comFBgithub-production-release-asset-[0-9a-za-z]{6}\.s3\.amazonaws\.comadaptivecards.ioapi-extractor.com +github.dev  github.io githubapp.comgithubassets.comgithubhackathon.comgithubnext.comgithubpreview.devgithubstatus.comgithubuniverse.comgithubusercontent.com myoctocat.comopensource.guide repo.newthegithubshop.comblob.core.windows.net!github-cloud.s3.amazonaws.comHD^github-production-release-asset-[0-9a-za-z]{6}\.s3\.amazonaws\.com$adaptivecards.ioapi-extractor.com apisof.net appcenter.ms blazor.netbotframework.comcodethemicrobit.comdevopsassessment.net dot.netgamesstack.comgraphengine.ioinsiderdevtour.com jwt.ms microbit.orgmicrosoftadc.commicrosoftgamestack.commicrosoftiotinsiderlabs.commicrosoftreactor.cn @@ -4163,7 +4601,7 @@ vscode.devvscode-cdn.netvscode-unpkg.net xamarin.comaz764 msocsp.comcrl.microsoft.commscrl.microsoft.comocsp.microsoft.comoneocsp.microsoft.comwww.microsoft.com cnmicrosoftnews.ccmicrosoftnews.cn cnmicrosoftnews.commicrosoftnews.netmicrosoftnews.orgmicrosoftnewsforkids.commicrosoftnewsforkids.netmicrosoftnewsforkids.orgmicrosoftnewskids.commicrosoftnewskids.netmicrosoftnewskids.orgmsn.cn -cn msn.commsnewskids.commsnewskids.netmsnewskids.org msnkids.com 1drv.com 1drv.mslivefilestore.com onedrive.coonedrive.co.uk onedrive.com onedrive.eu onedrive.net onedrive.orgonedrive.live.comstorage.live.com +cn msn.commsnewskids.commsnewskids.netmsnewskids.org msnkids.commicrosoftstart.com  start.com 1drv.com 1drv.mslivefilestore.com onedrive.coonedrive.co.uk onedrive.com onedrive.eu onedrive.net onedrive.orgonedrive.live.comstorage.live.com beth.games bethesda.netbethesdagamestudios.com bethsoft.com doom.comelderscrolls.comcallersbane.com minecraft.netminecraftshop.com mojang.comxboxforzamotorsport.netforzaracingchampionship.com forzarc.com gamepass.comorithegame.comrenovacionxboxlive.comtellmewhygame.com xbox.co xbox.com xbox.eu xbox.org xbox360.co xbox360.com @@ -4174,10 +4612,11 @@ xboxone.co xboxone.com xboxone.euxboxplayanywhere.comxboxservices.comxboxstudios.com xbx.lv  microsoft hotmail office skype windows microsoft.az microsoft.be microsoft.by microsoft.ca microsoft.cat microsoft.ch microsoft.cl microsoft.com microsoft.cz microsoft.de microsoft.dk microsoft.ee microsoft.es microsoft.eu microsoft.fi microsoft.ge microsoft.hu microsoft.io microsoft.is microsoft.it microsoft.jp microsoft.lt microsoft.lu microsoft.lv microsoft.md microsoft.net microsoft.pl microsoft.pt microsoft.red microsoft.ro microsoft.rs microsoft.ru microsoft.se microsoft.si microsoft.tv microsoft.ua microsoft.uz microsoft.vnfemalefounderscomp.com -m12.vc +m12.vc a-msedge.net aka.msankarazirvesi2018.comapplicationinsights.ioapplicationinsights.net aria.ms asp.net aspnetcdn.com binads.com bluehatil.com  boswp.combrazilpartneruniversity.com breakdown.mecentralvalidation.com -ch9.mscharticulator.com cloudapp.netcloudappsecurity.comcortanaanalytics.comcortanaskills.comcrmdynint-gcc.com crmdynint.comcrossborderexpansion.com docs.com dynamics.cn +ch9.mscharticulator.com cloudapp.netcloudappsecurity.comcortanaanalytics.comcortanaskills.comcrmdynint-gcc.com crmdynint.comcrossborderexpansion.comdcg.microsoft.com +cn docs.com dynamics.cn cn dynamics.com edgesuite.net efproject.net engkoo.com cnfasttrackreadysupport.comfluidpreview.comfootprintdns.comgameuxmasterguide.com @@ -4228,7 +4667,7 @@ pixapp.net powerapps.cn cnpowerautomate.com powerbi.cn cn powerbi.compowershellgallery.comprojectmurphy.netprojectsangam.com -pxt.ios-microsoft.com +pxt.ios-dc-msedge.nets-microsoft.com s-msedge.net s-msft.com  s-msn.com sfbassets.com sfbassets.net sfx.ms sharepoint.cn cnsharepoint.comsharepointonline.com  skype.com  skype.netskypeassets.comskypeassets.net staffhub.mssuccesswithteams.com surface.com @@ -4241,29 +4680,44 @@ winhec.com winhec.net yammer.com&"edge-skype-com.s-0001.s-msedge.netskype-edf.akadns.netskypedata.akadns.net(dl.delivery.mp.microsoft.com cn&download.windowsupdate.com +cn#b.c2r.ts.cdn.office.net cn'bg.v4.a.dl.ws.microsoft.com cn(bg4.v4.a.dl.ws.microsoft.com +cnbuild.microsoft.com cn2&cdn.marketplaceimages.windowsphone.com cn cn.windowssearch.com cn#ctldl.windowsupdate.com +cn"devblogs.microsoft.com cn#developer.microsoft.com cndocs.microsoft.com cn"download.microsoft.com cn/#download.visualstudio.microsoft.com +cn#f.c2r.ts.cdn.office.net cnfs.microsoft.com +cnlearn.microsoft.com cn(msgr.dlservice.microsoft.com cn, msgruser.dlservice.microsoft.com +cn, myvs.download.prss.microsoft.com +cn."oemsoc.download.prss.microsoft.com cn#officecdn.microsoft.com cn&qh.dlservice.microsoft.com +cn res-1.cdn.office.net +cnres.cdn.office.net cnsdx.microsoft.com +cn shell.cdn.office.net cn/#silverlight.dlservice.microsoft.com cn, slupdate.dlservice.microsoft.com +cn0$software.download.prss.microsoft.com +cn(statics.teams.cdn.office.net cn, storeedgefd.dsx.mp.microsoft.com +cn0$surface.downloads.prss.microsoft.com +cn."vscode.download.prss.microsoft.com +cn*vz.download.prss.microsoft.com cn&wl.dlservice.microsoft.com cn&wscont1.apps.microsoft.com cn&wscont2.apps.microsoft.com cn&xb.dlservice.microsoft.com -cn/+img-prod-cms-rt-microsoft-com.akamaized.netimg-s-msn-com.akamaized.netmwf-service.akamaized.net)%officecdn-microsoft-com.akamaized.net3/statics-marketingsites-eas-ms-com.akamaized.net3/statics-marketingsites-eus-ms-com.akamaized.net40statics-marketingsites-wcus-ms-com.akamaized.net mikrotik.com mt.lvrouterboard.com brazzer.com brazzers.com brazzers.xxxbrazzersnetwork.com  mofos.comdigitalplayground.com digitalplaygroundnetwork.commydirtyhobby.com +cn/+img-prod-cms-rt-microsoft-com.akamaized.netimg-s-msn-com.akamaized.netmwf-service.akamaized.net)%officecdn-microsoft-com.akamaized.net3/statics-marketingsites-eas-ms-com.akamaized.net3/statics-marketingsites-eus-ms-com.akamaized.net40statics-marketingsites-wcus-ms-com.akamaized.net mikrotik.com mt.lv mynetname.netrouterboard.com brazzer.com brazzers.com brazzers.xxxbrazzersnetwork.com  mofos.comdigitalplayground.com digitalplaygroundnetwork.commydirtyhobby.com mdhcdn.com nutaku.com nutaku.net gaytube.com @@ -4273,25 +4727,27 @@ rdtcdn.com  tube8.com tube8.frextremetube.comkeezmovies.com ypncdn.com  babes.com men.com porniq.com pornmd.com seancody.comthumbzilla.com twistys.com -webcams.tv whynotbi.com mindgeek.com firefox.comfirefoxusercontent.comdeveloper.allizom.orgdeveloper.mozilla.orgmdn.allizom.net mdn.devmdn.mozilla.netmdn.mozit.cloud mdnplay.dev mdnyalp.devmdn.mozillademos.org rust-lang.org  rustup.rs  crates.io docs.rs mozilla.commozilla.community mozilla.net mozilla.orgextensionworkshop.com bugzilla.org getpocket.comseamonkey-project.orgthunderbird.netmusixmatch.com +webcams.tv whynotbi.com mindgeek.com firefox.comfirefoxusercontent.comdeveloper.allizom.orgdeveloper.mozilla.orgmdn.allizom.net mdn.devmdn.mozilla.netmdn.mozit.cloud mdnplay.dev mdnyalp.devmdn.mozillademos.org rust-lang.org  rustup.rs  crates.io docs.rs +mozgcp.net mozilla.commozilla.community mozilla.net mozilla.orgextensionworkshop.com bugzilla.org getpocket.comseamonkey-project.orgthunderbird.netmusixmatch.com mxmcdn.net gcld-line.com lin.eeline-apps-beta.comline-apps-rc.com line-apps.com line-beta.me line-cdn.net line-scdn.net line.biz line.me line.naver.jp linecorp.comlinefriends.comlinefriends.com.tw linegame.jplinemobile.comlinemyshop.comlineshoppingseller.com  linetv.tw -nhncorp.jp grafolio.com  naver.com naver.jp  naver.net navercorp.com  plug.game pstatic.net webtoons.com neuralink.com +nhncorp.jp  naver.com naver.me  naver.netnaver.com.akadns.net navercorp.com  nheos.com pstatic.net clova.ainavercloudcorp.com naverncp.com +ncloud.comworksmobile.comnaverfincorp.com snow.me snowcorp.com vday.iostudiolico.comstudioncorp.com wattpad.com webtoons.comwebtoonscorp.com band.us grafolio.com modoo.at naver.jp naverads.comnaverads.com.akadns.net naverlabs.com  plug.game prismlive.com neuralink.com geforce.cn cn geforce.co.kr geforce.co.uk geforce.comgeforce.com.twgputechconf.cn cngputechconf.co.krgputechconf.comgputechconf.com.augputechconf.com.twgputechconf.eugputechconf.ingputechconf.jp nvidia.asia  nvidia.at  nvidia.be  nvidia.ch nvidia.cn cn nvidia.co.at nvidia.co.in nvidia.co.jp nvidia.co.kr nvidia.co.uk -nvidia.com nvidia.com.au nvidia.com.br nvidia.com.mx nvidia.com.pe nvidia.com.pl nvidia.com.tr nvidia.com.tw nvidia.com.ua nvidia.com.ve  nvidia.cz  nvidia.de  nvidia.dk  nvidia.es  nvidia.eu  nvidia.fi  nvidia.fr  nvidia.in  nvidia.it  nvidia.jp  nvidia.lu  nvidia.mx  nvidia.nl  nvidia.no  nvidia.pl  nvidia.ro  nvidia.ru  nvidia.se  nvidia.twnvidiaforhp.comnvidiagrid.netshotwithgeforce.com tegrazone.cotegrazone.co.kr tegrazone.com tegrazone.jp tegrazone.krnvidia.tt.omtrdc.net -openai.com&"chat.openai.com.cdn.cloudflare.net openaiapi-site.azureedge.net2.openaicom-api-bdcpf8c6d2e9atf6.z01.azurefd.net1-openaicomproductionae4b.blob.core.windows.net.*production-openaicom-storage.azureedge.net$o33249.ingest.sentry.io +nvidia.com nvidia.com.au nvidia.com.br nvidia.com.mx nvidia.com.pe nvidia.com.pl nvidia.com.tr nvidia.com.tw nvidia.com.ua nvidia.com.ve  nvidia.cz  nvidia.de  nvidia.dk  nvidia.es  nvidia.eu  nvidia.fi  nvidia.fr  nvidia.in  nvidia.it  nvidia.jp  nvidia.lu  nvidia.mx  nvidia.nl  nvidia.no  nvidia.pl  nvidia.ro  nvidia.ru  nvidia.se  nvidia.twnvidiaforhp.comnvidiagrid.netshotwithgeforce.com tegrazone.cotegrazone.co.kr tegrazone.com tegrazone.jp tegrazone.krnvidia.tt.omtrdc.net chatgpt.com oaistatic.comoaiusercontent.com +openai.com!openai.com.cdn.cloudflare.net openaiapi-site.azureedge.net2.openaicom-api-bdcpf8c6d2e9atf6.z01.azurefd.net1-openaicomproductionae4b.blob.core.windows.net.*production-openaicom-storage.azureedge.net@<^chatgpt-async-webps-prod-eastus-\d+\.webpubsub\.azure\.com$$o33249.ingest.sentry.io ads openaicom.imgix.net adsopenweather.co.ukopenweathermap.org -oracle -oracle.comoraclecloud.comoraclefoundation.org oracleimg.comoracleinfinity.ioateam-oracle.com -bronto.comcovid19-rx.org covid19rx.org sun.com addthis.comaddthiscdn.comaddthisedge.comjava java.com java.net  panasonic panasonic.cn +oracleateam-oracle.com +bronto.comcovid19-rx.org covid19rx.org +oracle.comoraclecloud.comoraclefoundation.org oracleimg.comoracleinfinity.io sun.comvirtualbox.org addthis.comaddthiscdn.comaddthisedge.comjava java.com java.net  panasonic panasonic.cn cn panasonic.com panasonic.jp technics.com 1010.com.hkesmarthealth.com  hkcsl.comhkt-enterprise.com hkt-eye.com hkt.comhkteducation.comhktpremier.com hktshop.comnetvigator.comtheclub.com.hk uhub.com now.com now.com.hk nowe.com nowe.hk now-tv.comnow-ashare.com -viu.tvapi.viu.now.com^ewcdn[0-9]{2}\.nowe\.com$ viu.com dfp6rglgjqszk.cloudfront.net!d1k2us671qcoau.cloudfront.net!d2anahhhmp1ffz.cloudfront.net pccw.compccwglobal.compccwsolutions.com moov.hkmyqnapcloud.com qlink.to qnap.commyqnapcloud.cn +viu.tvapi.viu.now.com^ewcdn[0-9]{2}\.nowe\.com$ viu.com dfp6rglgjqszk.cloudfront.net!d1k2us671qcoau.cloudfront.net!d2anahhhmp1ffz.cloudfront.net pccw.compccwglobal.compccwsolutions.com moov.hk perplexity.aimyqnapcloud.com qlink.to qnap.commyqnapcloud.cn cn qlinkto.cn cn qnap.com.cn @@ -4301,10 +4757,14 @@ iskoot.com izatcloud.net cnmeetsmartbook.compatenttruth.org pixtronix.com!qceventscenter.com.cn cnqctconnect.com qprize.comqualcomm-email.com qualcomm.cn +cn*qualcomm.cn.cdn.cloudflare.net cnqualcomm.co.idqualcomm.co.inqualcomm.co.jpqualcomm.co.krqualcomm.co.uk qualcomm.comqualcomm.com.brqualcomm.com.tw qualcomm.de qualcomm.frqualcommhalo.comqualcommlabs.comqualcommmea.comqualcommretail.comqualcommventures.cnqualcommventures.com qualphone.com quicinc.com snapdragon.cnsnapdragonbooth.com uplinq.com wipower.comwirelessreach.com xtracloud.cn cn -brewmp.comqualcomm.sc.omtrdc.net  qwant.com qwant.de qwant.fr qwant.it  razer.comrazersupport.com razerzone.com razerzone.jprespawnbyrazer.com appcloud.comappexchange.com attic.iobeyondcore.combuddymedia.com chatter.comcloudcraze.com cotweet.com data.comdemandware.com desk.comdocumentforce.comdreamforce.com einstein.comexacttarget.com  force.com govforce.comgravitytank.com heywire.com krux.commarketingcloud.com metamind.io +brewmp.comqualcomm.sc.omtrdc.net  qwant.com qwant.de qwant.fr qwant.it  razer.com razerapi.com +cnrazerofficial.comrazersynapse.com +cnrazersupport.com razerzone.com +cn razerzone.jprespawnbyrazer.com appcloud.comappexchange.com attic.iobeyondcore.combuddymedia.com chatter.comcloudcraze.com cotweet.com data.comdemandware.com desk.comdocumentforce.comdreamforce.com einstein.comexacttarget.com  force.com govforce.comgravitytank.com heywire.com krux.commarketingcloud.com metamind.io pardot.com quotable.com radian6.com relateiq.comsalesforce.comsalesforce.orgsalesforceiq.comsalesforceliveagent.com salesforcemarketingcloud.com sequence.comsfdcstatic.com sforce.com site.com social.comsteelbrick.com twinprime.comweinvoiceit.com samsung @@ -4323,7 +4783,10 @@ sony.co.nz sony.co.th sony.co.uk sony.com sony.com.ar sony.com.au sony.com.bo sony.com.br sony.com.co sony.com.do sony.com.ec sony.com.gt sony.com.hk sony.com.hn sony.com.mk sony.com.mx sony.com.my sony.com.ni sony.com.pa sony.com.pe sony.com.ph sony.com.sg sony.com.sv sony.com.tr sony.com.tw sony.com.vn sony.cz sony.de sony.dk sony.ee sony.es sony.eu sony.fi sony.fr sony.gr sony.hr sony.hu sony.ie sony.it sony.kz sony.lt sony.lu sony.lv sony.net sony.nl sony.no sony.pl sony.pt sony.ro sony.rs sony.ru sony.se sony.si sony.sk sony.ua sonybo.co.jp sonybsc.comsonybuilding.jpsonydesign.com sonydna.comsonyglobalsolutions.jp sonykigyo.jpsonylatvija.com sonypcl.jpsonyprotechnosupport.co.jpsonystoragemedia.co.jp sonytc.co.jp  sovec.net -spacex.comboringcompany.cominternetdownloadmanager.comregisteridm.com  tonec.comuber-assets.com uber.com ubereats.com +spacex.com spacemail.com spaceship.com +st.com%stmicroelectronics.com.cn +cn tailscale.com tailscale.io +ts.netboringcompany.cominternetdownloadmanager.comregisteridm.com  tonec.comuber-assets.com uber.com ubereats.com oath.cloud oath.com ouroath.comstatic-verizon.com uplynk.com verizon.com verizon.netverizonbusinessfios.comverizondigitalmedia.comverizonenterprise.comverizonfios.comverizonmedia.comverizonwireless.com vzw.com xo.com omniroot.com  vultr.comg-technology.com @@ -4349,38 +4812,45 @@ flickr.netstaticflickr.com ads.yahoo.com ads yahoo yahoo.ae yahoo.am yahoo.as yahoo.at yahoo.az yahoo.ba yahoo.be yahoo.bg yahoo.bi yahoo.bs yahoo.bt yahoo.by yahoo.ca  yahoo.cat yahoo.cd yahoo.cg yahoo.ch yahoo.cl yahoo.cmyahoo.cn cn yahoo.co.ao yahoo.co.bw yahoo.co.ck yahoo.co.cr yahoo.co.id yahoo.co.il yahoo.co.in yahoo.co.jp yahoo.co.kr yahoo.co.mz yahoo.co.nz yahoo.co.th yahoo.co.tz yahoo.co.uk yahoo.co.uz yahoo.co.ve yahoo.co.vi yahoo.co.za  yahoo.com yahoo.com.af yahoo.com.ag yahoo.com.ai yahoo.com.ar yahoo.com.au yahoo.com.bd yahoo.com.bo yahoo.com.br yahoo.com.bz yahoo.com.cn cn yahoo.com.co yahoo.com.do yahoo.com.ec yahoo.com.eg yahoo.com.es yahoo.com.fj yahoo.com.gi yahoo.com.gt yahoo.com.hk yahoo.com.kw yahoo.com.lb yahoo.com.ly yahoo.com.mt yahoo.com.mx yahoo.com.my yahoo.com.na yahoo.com.nf yahoo.com.om yahoo.com.pa yahoo.com.pe yahoo.com.ph yahoo.com.pk yahoo.com.pr yahoo.com.py yahoo.com.sa yahoo.com.sb yahoo.com.sg yahoo.com.sv yahoo.com.tj yahoo.com.tr yahoo.com.tw yahoo.com.ua yahoo.com.uy yahoo.com.vc yahoo.com.vn yahoo.cz yahoo.de yahoo.dj yahoo.dk yahoo.dm yahoo.ee yahoo.es yahoo.fi yahoo.fm yahoo.fr yahoo.ge yahoo.gg yahoo.gl yahoo.gm yahoo.gp yahoo.gr yahoo.gy yahoo.hk yahoo.hr yahoo.hu yahoo.ie yahoo.im yahoo.in yahoo.is yahoo.it yahoo.je yahoo.jo yahoo.la yahoo.lt yahoo.lu yahoo.lv yahoo.md yahoo.me yahoo.mk yahoo.mw yahoo.mx  yahoo.net yahoo.nl yahoo.no yahoo.nu yahoo.ph yahoo.pl yahoo.pn yahoo.ps yahoo.pt yahoo.ro yahoo.ru yahoo.rw yahoo.se yahoo.sg yahoo.sh yahoo.si yahoo.sk yahoo.sm yahoo.sn yahoo.so yahoo.sr yahoo.st yahoo.tg yahoo.tk yahoo.tl yahoo.tm yahoo.tn yahoo.vg yahoo.ws maktoob.com -myguide.hktechcrunch.comyahoo-news.com.hk yahooapis.com yahoodns.netyahoofinance.comyahoohealth.comyahoomusic.comyahoosandbox.comyahoosportsbook.com yho.com yimg.com yimg.jp  ymail.comyusercontent.com +myguide.hktechcrunch.comyahoo-news.com.hk yahooapis.com yahoodns.netyahoofinance.comyahoohealth.comyahoomusic.comyahoosandbox.comyahoosportsbook.com yho.com yimg.com yimg.jp  ymail.comyusercontent.com cdn.js7k.com yandexxn--d1acpjx3f.xn--p1ai dzen.ru ya.ru yandex.aero  yandex.az  yandex.by yandex.co.il yandex.com yandex.com.am yandex.com.ge yandex.com.ru yandex.com.tr yandex.com.ua  yandex.de  yandex.ee  yandex.eu  yandex.fi  yandex.fr yandex.jobs  yandex.kg  yandex.kz  yandex.lt  yandex.lv  yandex.md yandex.net yandex.org  yandex.pl  yandex.ru  yandex.st  yandex.sx  yandex.tj  yandex.tm  yandex.ua  yandex.uzyandexcloud.net yastatic.net teamviewer.cn -cnteamviewer.com teamviewer.us,(client-teamviewer-com.trafficmanager.net%!teamviewer.com.cdn.cloudflare.net anydesk.com nomachine.com rustdesk.com porkbun.com +cnteamviewer.com teamviewer.us,(client-teamviewer-com.trafficmanager.net%!teamviewer.com.cdn.cloudflare.net anydesk.com nomachine.com rustdesk.com  auth0.com civitai.com porkbun.com  CATEGORY-CONTAINER azurecr.io  docker.io ecr.aws gcr.io ghcr.iomcr.microsoft.com quay.ioregistry.gitlab.comregistry.k8s.io)%.+\.dkr\.ecr\.[^\.]+\.amazonaws\.com$ - + CATEGORY-CRYPTOCURRENCY asproex.comasproexapi.com binance.ccbinance.charity binance.cloud binance.co binance.com binance.info binance.me binance.net binance.org -binance.usbinance.vision binancezh.be binancezh.biz binancezh.cc binancezh.co binancezh.combinancezh.info binancezh.ink binancezh.kimbinancezh.linkbinancezh.livebinancezh.mobi binancezh.net binancezh.pro binancezh.sh binancezh.topbinanceapi.com bnbstatic.com bitflyer.com bitflyer.jp bisq.io bisq.network bitsquare.io coinone.co.krcoinonecore.comcoinonecorp.com -devcon.orgethereum.foundation ethereum.org etherscan.io +binance.usbinance.visionbinancecnt.com binancezh.be binancezh.biz binancezh.cc binancezh.co binancezh.combinancezh.info binancezh.ink binancezh.kimbinancezh.linkbinancezh.livebinancezh.mobi binancezh.net binancezh.pro binancezh.sh binancezh.topbinanceapi.com bnbstatic.com saasexch.com saasexch.ioappsflayer.com bitflyer.com bitflyer.jp bisq.io bisq.network bitsquare.io  bybit.com  bycsi.com +bytick.com +byapis.com  bycbe.com bymj.iobybit-exchange.github.iobybit.ada.support coinone.co.krcoinonecore.comcoinonecorp.com deribit.comderibit.cdn.prismic.io +devcon.orgethereum.foundation ethereum.org etherscan.io gate.io gatedata.org gateimg.com gateio.livegateio.services hbabit.com -hbfile.net  huobi.com huobi.me  huobi.pro huobi.sc huobiasia.viphuobigroup.comhuobitoken.comlocalbitcoins.comlocalbitcoinschain.com okex.com okx.com +hbfile.net  huobi.com huobi.me  huobi.pro huobi.sc huobiasia.viphuobigroup.comhuobitoken.comlocalbitcoins.comlocalbitcoinschain.com okex.com okx.com okx-dns.com okx-dns1.com okx-dns2.com oklink.com cnonekey-asset.com  onekey.so onekeycn.comonekey.zendesk.com wisecoin.com -wiseid.com wisekey.comwisekey.com.hk +wiseid.com wisekey.comwisekey.com.hk wyndlabs.ai wynd.network zb.app -zb.com zb.io zb.live +zb.com zb.io zb.live 1inch.io aave.com bitbank.cc bitcoin.org bitfinex.com -bitmex.com bitquick.co bitstamp.net bittrex.com btcbox.co.jp -cex.io coinbase.com coinglass.comcryptocompare.com curve.fi -debank.com dogecoin.com  infura.iomytokenapi.com +bitget.com +bitmex.com bitquick.co bitstamp.net bittrex.com blockfrost.io btcbox.co.jp +cex.ioclearpool.finance coinalyze.net coinbase.com coindesk.com coingecko.com coinglass.com coinmap.orgcoinmarketcap.com +crypto.comcryptocompare.com curve.fi +cyberx.com +debank.com dogecoin.com dydx.exchangefundingrates.xyz +gemini.com hashflow.com  infura.io  invity.io maple.financemetalpha.finance mexc.commexcsensors.commytokenapi.com kraken.com -opensea.io -paxful.com  truefi.io uniswap.org  zapper.fi -O +opensea.io osl.com +paxful.com +ripple.comsatoshilabs.com theblock.co  trezor.io  truefi.io  unisat.io uniswap.orgwalletconnect.comwintermute.com  zapper.fi +[ CATEGORY-DEVanaconda.cloud anaconda.com anaconda.org conda.io android.comandroidify.comappleswift.com  swift.org swiftui.cn cnswiftui.com.cn @@ -4388,7 +4858,7 @@ swiftui.cn cnresearchkit.com.cn cnresearchkit.hkresearchkit.netresearchkit.orgresearchkit.tvservicetalk.io webkit.org webkitgtk.org wpewebkit.orgwebobjects.com-)appleworldwidedeveloper.hb-api.omtrdc.net)%appleworldwidedeveloper.sc.omtrdc.net#p-events-delivery.akamaized.net archlinux.orgarchlinuxarm.orgbootstrapcdn.comgetbootstrap.combraventures.com braveux.com -compass.isfightforux.comforthebadge.comstockagainstphotography.com launchpad.netlaunchpadlibrarian.comlaunchpadlibrarian.netlaunchpadlibrarian.org snapcraft.io snapstore.io +compass.isfightforux.comforthebadge.comstockagainstphotography.com launchpad.netlaunchpadcontent.netlaunchpadlibrarian.comlaunchpadlibrarian.netlaunchpadlibrarian.org snapcraft.io snapstore.io ubuntu.com ubuntu.netubuntuforums.orgubuntu-touch.io canonical.com azurecr.io  docker.io ecr.aws @@ -4399,11 +4869,12 @@ docker.com  docker.io embed.ly embedly.com playerjs.ioa buck.build buckbuild.comcomponentkit.org draftjs.org f8.comfacebookappcenter.infofacebookappcenter.netfacebookappcenter.orgfacebookconnect.comfacebookdevelopergarage.comfaciometrics.com fasttext.cc fbf8.com fbinfer.com fblitho.com fbredex.com fbrell.com flow.dev flow.org flowtype.org frescolib.org hacklang.org hhvm.commakeitopen.com mcrouter.net mcrouter.orgmessengerdevelopers.com -ogp.meopengraphprotocol.comopengraphprotocol.org  parse.com pyrobot.org  react.com reactjs.com reactjs.org recoiljs.org rocksdb.com rocksdb.net rocksdb.orgyogalayout.comdevelopers.facebook.com fastlane.cifastlane.tools getfedora.orgfedoraforum.orgfedoraproject.orgfedoramagazine.org flathub.org flatpak.org flutter.devflutterapp.comfontawesome.comfortawesome.com  fury.blog fury.co fury.dev  fury.help fury.io gemfury.com gitbook.com +ogp.meopengraphprotocol.comopengraphprotocol.org  parse.com pyrobot.org  react.com reactjs.com reactjs.org recoiljs.org rocksdb.com rocksdb.net rocksdb.orgyogalayout.comdevelopers.facebook.com fastlane.cifastlane.tools getfedora.orgfedoraforum.orgfedorapeople.orgfedoraproject.orgfedoramagazine.org firebase.com firebase.iofirebaseapp.comfirebaseio.com-!firebase-settings.crashlytics.com +cnfirebase.google.comfirebase.googleapis.com#firebaseappcheck.googleapis.com,(firebasedynamiclinks-ipv4.googleapis.com,(firebasedynamiclinks-ipv6.googleapis.com'#firebasedynamiclinks.googleapis.com)%firebaseinappmessaging.googleapis.com($firebaseinstallations.googleapis.com%!firebaselogging-pa.googleapis.com"firebaselogging.googleapis.com+'firebaseperusertopics-pa.googleapis.com'#firebaseremoteconfig.googleapis.com flathub.org flatpak.org flutter.devflutterapp.com pub.devfontawesome.comfortawesome.com  fury.blog fury.co fury.dev  fury.help fury.io gemfury.com gitbook.com gitbook.io npm.community  npmjs.com  npmjs.org atom.iodependabot.com ghcr.io git.io github.blog github.comgithub.community -github.dev  github.io githubapp.comgithubassets.comgithubhackathon.comgithubpreview.devgithubstatus.comgithubuniverse.comgithubusercontent.com myoctocat.comopensource.guide repo.newthegithubshop.com!github-cloud.s3.amazonaws.comFBgithub-production-release-asset-[0-9a-za-z]{6}\.s3\.amazonaws\.com +github.dev  github.io githubapp.comgithubassets.comgithubhackathon.comgithubnext.comgithubpreview.devgithubstatus.comgithubuniverse.comgithubusercontent.com myoctocat.comopensource.guide repo.newthegithubshop.comblob.core.windows.net!github-cloud.s3.amazonaws.comHD^github-production-release-asset-[0-9a-za-z]{6}\.s3\.amazonaws\.com$ gitlab.com  gitlab.io gitlab.netgitlab-static.net.*gitlab-assets.oss-cn-hongkong.aliyuncs.com go-lang.com go-lang.net go-lang.org go.dev  godoc.org @@ -4441,7 +4912,9 @@ gneec7.com oneapi.comopenvinotoolkit.orgsnap-telemetry.io acpica.comclearlinux.org ospray.net -ospray.orgjava java.com java.net intellij.com intellij.net intellij.org jetbrains.com jetbrains.netjetbrains.spacejetbrains.team datalore.iokotlinlang.org  grazie.aigrazie.aws.intellij.net  jfrog.com  jfrog.org bintray.com!d29vzk4ow07wi7.cloudfront.net jsdelivr.com jsdelivr.net esm.runcdn.jsdelivr.net kubernetes.io +ospray.orgjava java.com java.net intellij.com intellij.net intellij.org jetbrains.com jetbrains.netjetbrains.spacejetbrains.team datalore.iokotlinlang.orgcdn.jetbrains.com +cn)download-cdn.jetbrains.com.cn +cn jb.gg  grazie.aigrazie.aws.intellij.net  jfrog.com  jfrog.org bintray.com!d29vzk4ow07wi7.cloudfront.net jsdelivr.com jsdelivr.net esm.runcdn.jsdelivr.net kubernetes.io k8s.ioadaptivecards.ioapi-extractor.com apisof.net appcenter.ms blazor.netbotframework.comcodethemicrobit.comdevopsassessment.net dot.netgamesstack.comgraphengine.ioinsiderdevtour.com @@ -4450,10 +4923,14 @@ blazor.netbotframework.comcodethemicrobit.comdevopsassessment. cnmicrosoftreactor.infomicrosoftreactor.netmicrosoftreactor.orgmicrosoftsilverlight.commicrosoftsilverlight.orgmicrosoftsilverlight.netmicrosoftsqlserver.com  mmdnn.commono-project.com msdn.commsinnovationchallenge.commspairlift.commsropendata.com  nuget.org nugettest.orgopentranslatorstothings.orgposhtestgallery.compwabuilder.comreactorms.com.cn cn sankie.netsqlserveronlinux.comtimelinestoryteller.comuwpcommunitytoolkit.comvisualstudio-staging.comvisualstudio.comvisualstudio.covisualstudio.co.ukvisualstudio.euvisualstudio.net vfsforgit.com vfsforgit.org vsassets.io -vscode.devvscode-cdn.netvscode-unpkg.net xamarin.comaz764295.vo.msecnd.net)%bingsettingssearch.trafficmanager.netdefault.exp-tas.comdeveloper.microsoft.com'#download.visualstudio.microsoft.comdtlgalleryint.cloudapp.net poshtestgallery.cloudapp.net"psg-int-centralus.cloudapp.netpsg-int-eastus.cloudapp.netrink.hockeyapp.net+'vscode-sync-insiders.trafficmanager.net"vscode-sync.trafficmanager.net vscode.blob.core.windows.netvscode.search.windows.net vsmarketplacebadge.apphb.com mongodb.com mongodb.org  nginx.com  nginx.org openwrt.orglede-project.org osdn.net perl.org cpan.org metacpan.orgpolymer-project.orgpolymerproject.org  pycon.org pypa.io pypi.io pypi.org +vscode.devvscode-cdn.netvscode-unpkg.net xamarin.comaz764295.vo.msecnd.net)%bingsettingssearch.trafficmanager.netdefault.exp-tas.comdeveloper.microsoft.com'#download.visualstudio.microsoft.comdtlgalleryint.cloudapp.net poshtestgallery.cloudapp.net"psg-int-centralus.cloudapp.netpsg-int-eastus.cloudapp.netrink.hockeyapp.net+'vscode-sync-insiders.trafficmanager.net"vscode-sync.trafficmanager.net vscode.blob.core.windows.netvscode.search.windows.net vsmarketplacebadge.apphb.com mongodb.com mongodb.org  nginx.com  nginx.org  nixos.org chatgpt.com oaistatic.comoaiusercontent.com +openai.com!openai.com.cdn.cloudflare.net openaiapi-site.azureedge.net2.openaicom-api-bdcpf8c6d2e9atf6.z01.azurefd.net1-openaicomproductionae4b.blob.core.windows.net.*production-openaicom-storage.azureedge.net@<^chatgpt-async-webps-prod-eastus-\d+\.webpubsub\.azure\.com$$o33249.ingest.sentry.io +ads openaicom.imgix.net +ads openwrt.orglede-project.org osdn.netperl.apache.org perl.org cpan.org metacpan.org +modperl.plpolymer-project.orgpolymerproject.org  pycon.org pypa.io pypi.io pypi.org python.orgpythonhosted.org piwheels.org qt.ioqt-project.orgreadthedocs-hosted.comreadthedocs.comreadthedocs.ioreadthedocs.org redis.io redislabs.com remirepo.net ruby-lang.org rubygems.org rust-lang.org  rustup.rs  crates.io docs.rs redhat.com -redhat.orgscala-lang.org scala-sbt.org askubuntu.comblogoverflow.comcodeforaliving.iomathoverflow.netserverfault.com sstatic.net stackapps.com stackauth.comstackexchange.com stackmod.blogstackoverflow.blogstackoverflow.costackoverflow.comstackoverflow.emailstackoverflowbusiness.comstackoverflowcareers.comstacksnippets.net superuser.com tex-talk.netthesffblog.commystrikingly.comstrikingly.comstrikinglycdn.com openmidas.com  qq.designqqgamedesign.comtencent.design tjstats.comwegamedeveloper.comweui.io +redhat.orgscala-lang.org scala-sbt.org sourcehut.org sr.ht askubuntu.comblogoverflow.comcodeforaliving.iomathoverflow.netserverfault.com sstatic.net stackapps.com stackauth.comstackexchange.com stackmod.blogstackoverflow.blogstackoverflow.costackoverflow.comstackoverflow.emailstackoverflowbusiness.comstackoverflowcareers.comstacksnippets.net superuser.com tex-talk.netthesffblog.commystrikingly.comstrikingly.comstrikinglycdn.com openmidas.com  qq.designqqgamedesign.comtencent.design tjstats.comwegamedeveloper.comweixinbridge.comweui.io cn termux.com termux.dev @@ -4461,10 +4938,14 @@ termux.org kernel.org  linux.org amp.devampproject.comampproject.netampproject.orgcdn.ampproject.org cnamp.akamaized.netelectronjs.org jquery.comjquerymobile.com jqueryui.com mochajs.org -nodejs.org openjsf.orglfai.foundationlinuxfoundation.org topcoder.com  unity.com unity3d.com!unityads.unity3d.com +nodejs.org openjsf.orglfai.foundationlinuxfoundation.org topcoder.com  unity.com unity3d.comads.unitychina.cn +ads$splash-ads.cdn.unity.cn +ads%splash-ads.unitychina.cn +adsunityads.unity.cn +ads!unityads.unity3d.com ads#unityads.unitychina.cn ads -v8.dev v8project.org vim.orgxda-developers.com xda-cdn.comadventofcode.comalpinelinux.org +v8.dev v8project.org vim.org xda-cdn.comxda-developers.com xdaforums.comadventofcode.comalpinelinux.org apache.orgartixlinux.org atom.io badgen.net bitvise.com  cdnjs.com centos.orgchocolatey.org clojure.org @@ -4480,12 +4961,10 @@ gentoo.orggetcomposer.org getzola.org git-scm.com gnu.org hexdocs.pm ius.io jenkins.io -js.org jupyter.org kali.orglinuxfromscratch.org linuxmint.com lua.org macports.org mariadb.org  mingw.org mobatek.net  mysql.com  nixos.orgnodesource.comnotepad-plus-plus.org -openai.com openresty.org openssl.org opensuse.org packagist.org pcre.org phantomjs.org php.net  putty.orgpostgresql.org r-project.orgraspberrypi.org raspbian.org regex101.com rpmfusion.orgscientificlinux.org scoop.shshellcheck.net +js.org jupyter.org kali.orglinuxfromscratch.org linuxmint.com lua.org macports.org mariadb.org  mingw.org mobatek.net  mysql.com  nixos.orgnodesource.comnotepad-plus-plus.org openresty.org openssl.org opensuse.org packagist.org pcre.org phantomjs.org php.net  putty.orgpostgresql.org r-project.orgraspberrypi.org raspbian.org regex101.com rpmfusion.orgscientificlinux.org scoop.shshellcheck.net shields.io -sqlite.orgsublimetext.com termius.com  unpkg.com videojs.com videolan.org wapm.io  wasmer.io wireshark.org x.org xposed.info yarnpkg.com zsh.org - - +sqlite.orgsublimetext.com termius.com  unpkg.com videojs.com videolan.org wapm.io  wasmer.io wireshark.org x.org xposed.info yarnpkg.com zsh.orghuggingface.co + CATEGORY-DEV-CN aixcoder.com nnthink.com  apifox.cn apifox.combaltamatica.com blogjava.net cnblogs.com cnitblog.com cnweblog.com cppblog.com phpweblog.net teachblog.net  coding.me coding.net codechina.net csdn.com csdn.net csdn.net.cn @@ -4499,11 +4978,13 @@ goproxy.cn goproxy.iojinrishici.com  juejin.cn  juejin.im xitu.iop1-juejin.byteimg.comp2-juejin.byteimg.comp3-juejin.byteimg.comp4-juejin.byteimg.comp5-juejin.byteimg.comp6-juejin.byteimg.comp7-juejin.byteimg.comp8-juejin.byteimg.comp9-juejin.byteimg.com dengguobi.comhouyicaiji.comjinglingbiaozhu.com oschina.net  pgyer.com tracup.com frontjs.comruby-china.orgrubyconfchina.orgsegmentfault.com  sifou.com mysxl.cn sxl.cn  sxlcdn.cn -tipdim.org openkylin.topubuntukylin.comxueyuanjun.com +tipdim.org openkylin.topubuntukylin.comxueyuanjun.com +asktug.com +pingcap.cn pingcap.com tidb.ai tidb.net tidbcloud.com tikv.org E CATEGORY-DOCUMENTS-CN  doc88.com  docin.com douding.cn - + CATEGORY-ECOMMERCE  adidas.at  adidas.be  adidas.ch adidas.co.in adidas.co.uk adidas.com adidas.com.cn cn adidas.com.sa adidas.com.tw  adidas.cz  adidas.de  adidas.dk  adidas.hu  adidas.ie  adidas.it  adidas.nl  adidas.pl  adidas.ru  adidas.se bby.combbycastatic.ca bbycloud.combbycontent.combbycontent.net bbyintl.com bbystatic.com  bbyurl.us bestbhy.combestbuy-audio.com"bestbuy-communityrelations.combestbuy-giftcard.infobestbuy-int.combestbuy-jobs.com @@ -4629,7 +5110,7 @@ idnike.cominikesneakers.com just-do-it.cn cn justdoit.uskicksnike1.comkidsnikeshoes.com mynike.comnike-air-max.comnike-dunksb.com nike-fr.com nike-org.com nike-shox.cn cn nike-uk.com nike-us.com nike-usa.com nike.cinike.cn -cn nike.com nike.com.br nike.com.hk nike.gy nike.hk  nike.shop nike.usnike.xn--hxt814e nike0594.com +cn nike.com nike.com.br nike.com.hk nike.gy nike.hk  nike.host  nike.shop nike.usnike.xn--hxt814e nike0594.com nike23.comnikeadidas.comnikeairhuarache.comnikeairmax.comnikeairmaxs.comnikeairmaxshoes.comnikeairrift.com nikeasia.comnikeaustralia.com nikeaw77.com  nikeb.com nikebbn.comnikebetrue.comnikebetterworld.cn cnnikebetterworld.com"nikebetterworld.com.cn cnnikebetterworld.infonikebetterworld.netnikebetterworld.org nikebiz.info nikebuy.com @@ -4681,8 +5162,11 @@ x-cloud.cc dgjy.net 91yunxiao.com aiyunxiao.com haofenshu.co CATEGORY-EDUCATION-IR faradars.org git.ir learnby.ir toplearn.com done.ir iranlms.orgwebinarplus.online - -CATEGORY-ENHANCE-GAMING playcover.ioplaycover.workers.devbluestacks.com lsplayer.com + +CATEGORY-ENHANCE-GAMING playcover.ioplaycover.workers.dev +fflogs.com rpglogs.com +rpglogs.cn +cnbluestacks.com lsplayer.com cn yeshen.com cn maa.plus  prts.plusheavenlywind.cc @@ -4690,10 +5174,11 @@ yeshen.com cn  %CATEGORY-ENTERPRISE-QUERY-PLATFORM-CNaiqicha.baidu.comhongdunwang.com.cn qcc.com qichacha.com qichamao.com  qixin.com qyyjt.cn jindidata.comtianyancha.com x315.com - -CATEGORY-ENTERTAINMENT abema.io abema.tv abema-tv.com  adx.promo ameba.jp amebame.com amebaownd.comamebaowndme.com  ameblo.jp bucketeer.jpdokusho-ojikan.jp hayabusa.dev hayabusa.iohayabusa.media winticket.jpabematv.akamaized.net#ds-linear-abematv.akamaized.net ds-vod-abematv.akamaized.net linear-abematv.akamaized.netvod-abematv.akamaized.net  9anime.cz  9anime.id  9anime.to  9anime.wsanimedao-tv.comcrunchyroll.comfunimation.com gogo-load.com gogoanime.vcgogoanime.wiki gogocdn.net + +CATEGORY-ENTERTAINMENT abema.io abema.tv abema-tv.com  adx.promo ameba.jp amebame.com amebaownd.comamebaowndme.com  ameblo.jp bucketeer.jpdokusho-ojikan.jp hayabusa.dev hayabusa.iohayabusa.media winticket.jpabematv.akamaized.net#ds-linear-abematv.akamaized.net ds-vod-abematv.akamaized.net linear-abematv.akamaized.netvod-abematv.akamaized.net amc.com amcn.comamcnetworks.com amcplus.comrne5a6ae085b6c43020dea230eb0c0ecc33a188227507da97b8ecc05eb8beace6.us-east-1.prod.service.minerva.devices.a2z.com  9anime.cz  9anime.id  9anime.to  9anime.wsanimedao-tv.comcrunchyroll.comfunimation.com gogo-load.com gogoanime.vcgogoanime.wiki gogocdn.net hidive.com -vrv.co ao3.orgarchiveofourown.orgarchiveofourown.comarchiveofourown.net +vrv.co +age.tv  agedm.org ao3.orgarchiveofourown.orgarchiveofourown.comarchiveofourown.net att.tv atttvnow.comattwatchtv.com directv.com  dtvce.comnettyinternet.combahamut.akamaized.netbahamut.com.tw gamer.com.twgamer2-cds.cdn.hinet.netgamer-cds.cdn.hinet.net bandcamp.com bcbits.com boomerang.com wbdnbo.net catchplay.comtra-ww000-cp.akamaized.net @@ -4704,7 +5189,8 @@ wbdnbo.net catchplay.comtra-ww000-cp.akamaized.net cn biligame.com cn biligame.net cn blizzard.comblizzardgearstore.comblz-contentstack.com -battle.netblizzard.nefficient.co.krblzddist1-a.akamaihd.netblzddistkr1-a.akamaihd.netbnetcmsus-a.akamaihd.netbnetproduct-a.akamaihd.netbnetshopus.akamaized.net diablo3.comdiabloimmortal.comfiresidegatherings.complayhearthstone.comheroesofthestorm.complayoverwatch.com starcraft.comstarcraft2.complaywarcraft3.comworldofwarcraft.comblizzcon-a.akamaihd.netblzmedia-a.akamaihd.netblznav.akamaized.netbluearchive-cn.com +battle.netblizzard.nefficient.co.krblzddist1-a.akamaihd.netblzddistkr1-a.akamaihd.netbnetcmsus-a.akamaihd.netbnetproduct-a.akamaihd.netbnetshopus.akamaized.net diablo3.comdiabloimmortal.comfiresidegatherings.complayhearthstone.comheroesofthestorm.complayoverwatch.com starcraft.comstarcraft2.complaywarcraft3.comworldofwarcraft.comblizzcon-a.akamaihd.netblzmedia-a.akamaihd.netblznav.akamaized.netbluearchive.jpbluearchive.nexon.combluearchive-cn.com +cn sl916.com cncurseforge.com forgecdn.net cygames.jp cygames.co.jpworldflipper.jpworldflipper.akamaized.netumamusume.akamaized.net dawngate.com eastore.comlordofultima.com origin.com  origin.tv#cloudsync-prod.s3.amazonaws.comorigin-a.akamaihd.netrtm.tnt-ea.comssl-lvlt.cdn.ea.comawayoutgame.combattlefieldbadcompany2.combattlefront2.combattlefrontii.combejewled-stars.combejeweledstars.comcapitalgames.com chillingo.comcommandandconquer.comconquerwithcharacter.com  crysis.jp dawngate.comdawngatechronicles.com @@ -4730,8 +5216,10 @@ garena.com garena.live  garena.my  garena.ph  garena.sg  ga cn."^cdn-akamai-.+\.gog-services\.com$ cn(^gog-cdn-.+\.footprint\.net$ cn, ^images(-\d)?\.gog-statics\.com$ -cnillusion.co.jp illusion.jp -lowiro.com100classicbooks.com +cnillusion.co.jp illusion.jp kurogames.com +cn aki-game.com +cn +lowiro.com nexon.co.jp  nexon.com nexon.ionexoncdn.co.kr nikke-de.com nikke-en.com nikke-fr.com nikke-jp.com nikke-kr.com nikke-sea.com100classicbooks.com amiibo.comayudanintendo.combowsersinsidestory.comexcitebots.comflipnotestudio.comgloryofheracles.comhackyourconsole.comkirbysuperstarultra.comkirbysepicyarn.comlegendofzelda.cn cn legendofzelda.com.cn cn miitomo.commiitomo.com.cn @@ -4747,8 +5235,9 @@ kyurem.com pokedex3d.compokemon-moon.compokemon-sun.compo cnmariokart.com.cn cnmariokart7.commariokart8.commariosupersluggers.comnewsupermariobrosu.comsupermario.comsupermario3dworld.com!supermariobros.com.cn cnsupermariogalaxy.comsupermariorun.comsuperpapermario.comnintendowii.com  wii-u.com -wiifit.com wiifitu.com wiipartyu.com wiisports.comwiisportsresort.comwiiugamepad.com  wiivc.net xenoblade.com op.ggopgg-static.akamaized.net -joyjoy.netpandanet-igs.com pinkcore.com pinkcore.netsekai.colorfulpalette.org playstationplaystation.complaystation.net sonyentertainmentnetwork.com"api-priconne-redive.cygames.jpomotenashi.cygames.jp%!prd-priconne-redive.akamaized.nethistoryofdota.comhistoryofdota.nethistoryofdota.orginstituteofwar.orgmolesports.com rgpub.ioriot-games.com riot.com riot.net riotcdn.netriotgames.co.kr riotgames.comriotgames.info riotgames.jp riotgames.net riotgames.tv riotpin.comriotpoints.com rstatic.net supremacy.com supremacy.net championshipseriesleague.com lcsmerch.comleaguehighschool.comleagueoflegends.caleagueoflegends.cn +wiifit.com wiifitu.com wiipartyu.com wiisports.comwiisportsresort.comwiiugamepad.com  wiivc.net xenoblade.com op.ggopgg-static.akamaized.net a.ppy.sh assets.ppy.sh c.ppy.sh +osu.ppy.sh  m1.ppy.sh lazer.ppy.sh notify.ppy.sh sentry.ppy.shspectator.ppy.sh +joyjoy.netpandanet-igs.com pinkcore.com pinkcore.net playstationplaystation.complaystation.net sonyentertainmentnetwork.comsekai.colorfulpalette.org"api-priconne-redive.cygames.jpomotenashi.cygames.jp%!prd-priconne-redive.akamaized.nethistoryofdota.comhistoryofdota.nethistoryofdota.orginstituteofwar.orgmolesports.com rgpub.ioriot-games.com riot.com riot.net riotcdn.netriotgames.co.kr riotgames.comriotgames.info riotgames.jp riotgames.net riotgames.tv riotpin.comriotpoints.com rstatic.net supremacy.com supremacy.net championshipseriesleague.com lcsmerch.comleaguehighschool.comleagueoflegends.caleagueoflegends.cn cnleagueoflegends.co.krleagueoflegends.comleagueoflegends.infoleagueoflegends.krleagueoflegends.netleagueoflegends.orgleagueoflegendsscripts.comleaguesharp.infoleaguoflegends.comlearnwithleague.comlol-europe.com lolclub.org lolespor.comlolesports.com lolfanart.net lolpcs.com lolshop.co.kr lolstatic.comlolusercontent.com lpl.com.cn @@ -4852,7 +5341,8 @@ wegame.com scescdn.cn cnscid.cn cn scsentry.cn -cn supercell.com!supercellcommunity.cn +cn supercell.com +!cn!supercellcommunity.cn cnsupercellsupport.cn cncodm.com cnbcfmglobal.com @@ -4871,13 +5361,13 @@ xboxab.comxboxgamepass.comxboxgamestudios.com xboxlive.cn cn xboxlive.com xboxone.co xboxone.com xboxone.euxboxplayanywhere.comxboxservices.comxboxstudios.com -xbx.lvynoproject.net fanatical.comhumblebundle.com loverslab.com modrinth.com nexusmods.com +xbx.lvynoproject.netdodi-repacks.downloaddodi-repacks.site fanatical.comfitgirl-repacks.sitegame-repack.sitehumblebundle.com loverslab.comminecraft.wiki modrinth.com nexusmods.com papermc.ioplanetminecraft.com protondb.com speedrun.com steamdb.info  ptzwx.comquanben-xiaoshuo.com quanben.iodailymotion.com dm-event.net  dmcdn.net dandanzan.cc  nunuyy.cc dazn-api.com dazn.com dazndn.com indazn.com indaznlab.comdeviantart.comdeviantart.net da-files.com*&content-ause1-ur-discovery1.uplynk.com disco-api.comdiscoveryplus.comabc-studios.com abc.com edgedatg.com bamgrid.comdmed.technology dtci.codtci.technology espn.co.uk espn.com espn.net espncdn.com -espnqa.com watchespn.comespn.api.edge.bamgrid.comespn.hb.omtrdc.netespndotcom.tt.omtrdc.net hotstar.comhotstar-cdn.nethotstar-labs.comhotstarext.comhsprepack.akamaized.net^hses[1-7]?.akamaized.net$ +espnqa.com watchespn.comespn.api.edge.bamgrid.comespn.hb.omtrdc.netespndotcom.tt.omtrdc.net hotstar.comhotstar-cdn.nethotstar-labs.comhotstarext.comhsprepack.akamaized.net ^hses[1-7]?\.akamaized\.net$ marvel.commarvel10thanniversary.commarveldimensionofheroes.commarvelparty.netmarvelpinball.commarvelsdoubleagent.commarvelspotlightplays.com marvelsuperheroseptember.commarvelsuperwar.comthemarvelexperiencetour.comnatgeomaps.comnationalgeographic.com"nationalgeographicpartners.com ngeo.com starott.com starplus.comstar.api.edge.bamgrid.com%!star.connections.edge.bamgrid.com!star.content.edge.bamgrid.com"star.playback.edge.bamgrid.com disney.asia  disney.be  disney.bg  disney.ca  disney.ch disney.co.il disney.co.jp disney.co.kr disney.co.th disney.co.uk disney.co.za disney.com disney.com.au disney.com.br disney.com.hk disney.com.tw  disney.cz  disney.de  disney.dk  disney.es  disney.fi  disney.fr  disney.gr  disney.hu  disney.id  disney.in  disney.io  disney.it  disney.my  disney.nl  disney.no  disney.ph  disney.pl  disney.pt  disney.ro  disney.ru  disney.se  disney.sg20thcenturystudios.com.au20thcenturystudios.com.br20thcenturystudios.jpadventuresbydisney.com babble.com babyzone.com bamgrid.com"beautyandthebeastmusical.co.uk @@ -4895,7 +5385,8 @@ huluqa.comhulurussia.com huluspain.comhulusports.comhulus hulutv.com huluusa.comjoinmaidez.com mushymush.tv myhulu.comoriginalhulu.com payhulu.comregisterhulu.comthehulubraintrust.comwwwhuluplus.com"hulu.playback.edge.bamgrid.comimdbboxofficemojo.com imdb.com imdb.tomedia-imdb.com iyf.tv dnvodcdn.mekingkong.com.twkingkongapp.com -kfs.io  kk.stream  kkbox.com kkbox.com.tw  kktix.com kktv.com.tw kktv.me kktv.com.tw kktv.metheater-kktv.cdn.hinet.net litv.tvlitvfreepc.akamaized.net manhuagui.comgenshinimpact.comhonkaiimpact3.comhonkaistarrail.com  hoyo.link hoyolab.com hoyoverse.comn0vadesktop.com mhyurl.cn +kfs.io  kk.stream  kkbox.com kkbox.com.tw  kktix.com kktv.com.tw kktv.me kktv.com.tw kktv.metheater-kktv.cdn.hinet.net last.fmlastfm.freetls.fastly.net litv.tvlitvfreepc.akamaized.net manhuagui.comgenshinimpact.comhonkaiimpact3.comhonkaistarrail.com  hoyo.link hoyolab.com hoyoverse.comn0vadesktop.com mhystatic.com +cn mhyurl.cn cn mihayo.com cn mihayou.com @@ -4915,7 +5406,7 @@ mihoyo.com nivodz.com vod360.net mytvsuper.com tvb.com fast.com netflix.ca netflix.com netflix.netnetflixinvestor.comnetflixtechblog.com nflxext.com nflximg.com nflximg.netnflxsearch.net -nflxso.net nflxvideo.netnetflixdnstest1.comnetflixdnstest2.comnetflixdnstest3.comnetflixdnstest4.comnetflixdnstest5.comnetflixdnstest6.comnetflixdnstest7.comnetflixdnstest8.comnetflixdnstest9.comnetflixdnstest10.com1-(^|\.)dualstack\.apiproxy-.+\.amazonaws\.com$40(^|\.)dualstack\.ichnaea-web-.+\.amazonaws\.com$netflix.com.edgesuite.netnico +nflxso.net nflxvideo.netnetflixdnstest0.comnetflixdnstest1.comnetflixdnstest2.comnetflixdnstest3.comnetflixdnstest4.comnetflixdnstest5.comnetflixdnstest6.comnetflixdnstest7.comnetflixdnstest8.comnetflixdnstest9.comnetflixdnstest10.com62(^|\.)apiproxy-device-prod-nlb-.+\.amazonaws\.com$73(^|\.)apiproxy-website-nlb-prod-.+\.amazonaws\.com$1-(^|\.)dualstack\.apiproxy-.+\.amazonaws\.com$40(^|\.)dualstack\.ichnaea-web-.+\.amazonaws\.com$netflix.com.edgesuite.netnico nicodic.jp nicomanga.jp niconico.com nicoseiga.jp nicovideo.jp nimg.jp simg.jp haiwaikan.com iole.tv  olehd.com olelive.com olevod.com  olevod.io  olevod.tv olevodtv.comolemovienews.com pbs.org ads-pixiv.net ads booth.pm  fanbox.cc  pixiv.net  pixiv.org pixiv.co.jp pixiv.me  pximg.net pluto.tv plutotv.net @@ -4924,7 +5415,7 @@ olevod.com  olevod.io  olevod.tv olevodtv.comolemovienews.com cnamazonprimevideos.comamazonvideo.ccamazonvideo.comprime-video.com primevideo.ccprimevideo.comprimevideo.infoprimevideo.org primevideo.tv fandango.com mgo.commgo-images.com ravm.tv roku.com rokutime.comshowtimeanytime.com showtime.com dishworld.comslinginternational.com  sling.commovenetworks.com movetv.comimageworks.commotionpictureser.com playshow.ioplayshowtv.comsonyclassics.comsonypictures.comsonypicturesanimation.comsonypicturesmuseum.comsonypicturesstudios.comsonypicturestelevision.com#sonypicturestelevisiongames.com wheelpop.com wwtbam.comyourfantasybeginsnow.comsoundcloud.com -sndcdn.com byspotify.com pscdn.co scdn.co spoti.fispotify-everywhere.com spotify.comspotify.designspotifycdn.comspotifycdn.netspotifycharts.comspotifycodes.comspotifyforbrands.comspotifyjobs.com&"audio-ak-spotify-com.akamaized.net'#audio4-ak-spotify-com.akamaized.net&"heads-ak-spotify-com.akamaized.net'#heads4-ak-spotify-com.akamaized.netspotify.com.edgesuite.netspotify.map.fastly.netspotify.map.fastlylb.net subscene.com i.jeded.com  tidal.com tidalhifi.com wimpmusic.combyteoversea.com +sndcdn.com byspotify.com pscdn.co scdn.co spoti.fispotify-everywhere.com spotify.comspotify.designspotifycdn.comspotifycdn.netspotifycharts.comspotifycodes.comspotifyforbrands.comspotifyjobs.com&"audio-ak-spotify-com.akamaized.net'#audio4-ak-spotify-com.akamaized.net+'cdn-spotify-experiments.conductrics.com&"heads-ak-spotify-com.akamaized.net'#heads4-ak-spotify-com.akamaized.netspotify.com.edgesuite.netspotify.map.fastly.netspotify.map.fastlylb.net subscene.com i.jeded.com  tidal.com tidalhifi.com wimpmusic.combyteoversea.com !cn muscdn.com !cn @@ -4932,10 +5423,16 @@ musical.ly !cntik-tokapi.com !cn tiktok.com +!cntiktokcdn-us.com +!cn tiktokcdn.com !cn tiktokd.net !cn tiktokd.org -!cn tiktokcdn.com !cn tiktokv.com +!cn +tiktokv.us +!cn +tiktokw.us +!cn ttwstatic.com !cn,p16-tiktokcdn-com.akamaized.net !cnthemoviedb.org tmdb.org thetvdb.com dogatch.jp gorin.jpscreens-lab.jp @@ -4947,7 +5444,7 @@ vhxqa3.com vhxqa4.com vhxqa6.comvimeo-staging.comvimeo-staging2.com  vimeo.com vimeo.frvimeobusiness.com vimeocdn.comvimeogoods.comvimeoondemand.comvimeostatus.comlivestream.com($^[0-9]+vod-adaptive\.akamaized\.net$ abow.jp angelbeats.jp anigema.jpcharlotte-anime.jpclannad-movie.jpheaven-burns-red.comkamisama-day.jpkamisama-maeda-lab.com koubaibu.jplitbus-anime.com product.co.jprewrite-anime.tvvisualarts.gr.jpvisual-arts.jp -viu.tvapi.viu.now.com^ewcdn[0-9]{2}\.nowe\.com$ viu.com dfp6rglgjqszk.cloudfront.net!d1k2us671qcoau.cloudfront.net!d2anahhhmp1ffz.cloudfront.net mox.moe vol.moe wwe.com wwe9.com youtubeggpht.cn +viu.tvapi.viu.now.com^ewcdn[0-9]{2}\.nowe\.com$ viu.com dfp6rglgjqszk.cloudfront.net!d1k2us671qcoau.cloudfront.net!d2anahhhmp1ffz.cloudfront.net mox.moe vol.moe webnovel.com wwe.com wwe9.com youtubeggpht.cn cn  ggpht.comgooglevideo.comwide-youtube.l.google.comwithyoutube.com youtu.beyoutube-nocookie.comyoutube-ui.l.google.com youtube.ae youtube.al @@ -5029,16 +5526,18 @@ youtube.ug youtube.uy youtube.vnyoutubeeducation.com($youtubeembeddedplayer.googleapis.comyoutubefanfest.comyoutubegaming.comyoutubego.co.idyoutubego.co.in youtubego.comyoutubego.com.br youtubego.id youtubego.inyoutubei.googleapis.comyoutubekids.comyoutubemobilesupport.com yt.be  ytimg.com z5.app -z5.com zee5.com zee5.in zee5.tvzeebioskop.com zeetv.co.uk  zeetv.com  zeeuk.com  777tv.net blubrry.combuzzsprout.com  castro.fm egta.com fireside.fminternationalsaimoe.com joox.com  linetv.tw litv.tv megaphone.fm moov.hk +z5.com zee5.com zee5.in zee5.tvzeebioskop.com zeetv.co.uk  zeetv.com  zeeuk.com  777tv.net blubrry.combuzzsprout.com  castro.fm egta.com fireside.fminternationalsaimoe.com joox.com  linetv.tw litv.tv megaphone.fm mikanani.me moov.hk odysee.com omobi.cc oranum.com overcast.fm syosetu.com thetvdb.com weverse.io yande.reamp-api.podcast.apple.combag.itunes.apple.combookeeper.itunes.apple.com -n -CATEGORY-FINANCEtransferwise.com wise.comfxcorporate.com mql5.comtradingview.com + +CATEGORY-FINANCE +fsmone.com fsmone.com.hk fsmone.com.myfundsupermart.comifastcapital.com.my ifastcorp.comifastfinancial.com.hkifastfinancial.co.in ifastgb.com ifastgp.comifastgp.com.hkifastnetwork.comifastps.com.cn +cn ifasttv.comlongbridge.cloudlongbridge.global longbridge.hk longbridge.sglongbridgeapp.comlongportapp.com  lbkrs.com  wbrks.comtransferwise.com wise.comfxcorporate.com mql5.comtradingview.com v CATEGORY-FOOD-CN 517lppz.com lppz.com lppzimg.com heytea.com 3songshu.com haidilao.com - + CATEGORY-FORUMS 4cdn.org  4chan.org 4channel.org 2ch.net 5ch.net  6park.com 6parkbbs.com 6parknews.com cool18.com  ck101.com  ckcdn.com ckck.fun dcard.cc dcard.io dcard.link dcard.twbroadbandreports.com dslr.netdslreports.com hkgolden.comhkgolden.media @@ -5047,8 +5546,9 @@ pixnet.net pixnet.pro  pixnet.tw pixplug.in ptt.cc ptt2.cc ptt3.cc poe.com -poecdn.net qr.ae  quora.com quoracdn.net -reddit.comredditstatic.comredditmail.comredditmedia.com redd.it  18p2p.com avsforum.com disp.cc  doom9.org eyny.com gab.comhydrogenaud.io mewe.com +poecdn.net qr.ae  quora.com quoracdn.net redd.itreddit.app.link +reddit.comreddithelp.comredditmail.comredditmedia.comredditstatic.com redd.itreddit.map.fastly.net +yamibo.com  18p2p.com avsforum.com disp.cc  doom9.org eyny.com gab.comhydrogenaud.io mewe.com parler.com pincong.rocks safechat.com sis001.com v2ex.com 1 @@ -5058,7 +5558,7 @@ sis001.com v2ex.com leigod.com tmjiasuqi.com uu.163.com xunyou.combohejiasuqi.comjiasu.bohe.com -| +́ CATEGORY-GAMES 2k.com2kcoretech.online 2kgames.comtake2games.combilibiligame.cn cnbilibiligame.co @@ -5067,7 +5567,8 @@ xunyou.combohejiasuqi.comjiasu.bohe.com cn biligame.com cn biligame.net cn blizzard.comblizzardgearstore.comblz-contentstack.com -battle.netblizzard.nefficient.co.krblzddist1-a.akamaihd.netblzddistkr1-a.akamaihd.netbnetcmsus-a.akamaihd.netbnetproduct-a.akamaihd.netbnetshopus.akamaized.net diablo3.comdiabloimmortal.comfiresidegatherings.complayhearthstone.comheroesofthestorm.complayoverwatch.com starcraft.comstarcraft2.complaywarcraft3.comworldofwarcraft.comblizzcon-a.akamaihd.netblzmedia-a.akamaihd.netblznav.akamaized.netbluearchive-cn.com +battle.netblizzard.nefficient.co.krblzddist1-a.akamaihd.netblzddistkr1-a.akamaihd.netbnetcmsus-a.akamaihd.netbnetproduct-a.akamaihd.netbnetshopus.akamaized.net diablo3.comdiabloimmortal.comfiresidegatherings.complayhearthstone.comheroesofthestorm.complayoverwatch.com starcraft.comstarcraft2.complaywarcraft3.comworldofwarcraft.comblizzcon-a.akamaihd.netblzmedia-a.akamaihd.netblznav.akamaized.netbluearchive.jpbluearchive.nexon.combluearchive-cn.com +cn sl916.com cncurseforge.com forgecdn.net cygames.jp cygames.co.jpworldflipper.jpworldflipper.akamaized.netumamusume.akamaized.net dawngate.com eastore.comlordofultima.com origin.com  origin.tv#cloudsync-prod.s3.amazonaws.comorigin-a.akamaihd.netrtm.tnt-ea.comssl-lvlt.cdn.ea.comawayoutgame.combattlefieldbadcompany2.combattlefront2.combattlefrontii.combejewled-stars.combejeweledstars.comcapitalgames.com chillingo.comcommandandconquer.comconquerwithcharacter.com  crysis.jp dawngate.comdawngatechronicles.com @@ -5093,8 +5594,11 @@ garena.com garena.live  garena.my  garena.ph  garena.sg  ga cn."^cdn-akamai-.+\.gog-services\.com$ cn(^gog-cdn-.+\.footprint\.net$ cn, ^images(-\d)?\.gog-statics\.com$ -cnillusion.co.jp illusion.jp -lowiro.comgenshinimpact.comhonkaiimpact3.comhonkaistarrail.com  hoyo.link hoyolab.com hoyoverse.comn0vadesktop.com mhyurl.cn +cnillusion.co.jp illusion.jp kurogames.com +cn aki-game.com +cn +lowiro.comgenshinimpact.comhonkaiimpact3.comhonkaistarrail.com  hoyo.link hoyolab.com hoyoverse.comn0vadesktop.com mhystatic.com +cn mhyurl.cn cn mihayo.com cn mihayou.com @@ -5110,7 +5614,7 @@ mihoyo.com cnthemisweeps.com cn yuanshen.com cn'^.+-mihayo\.akamaized\.net$ -cn100classicbooks.com +cn nexon.co.jp  nexon.com nexon.ionexoncdn.co.kr nikke-de.com nikke-en.com nikke-fr.com nikke-jp.com nikke-kr.com nikke-sea.com100classicbooks.com amiibo.comayudanintendo.combowsersinsidestory.comexcitebots.comflipnotestudio.comgloryofheracles.comhackyourconsole.comkirbysuperstarultra.comkirbysepicyarn.comlegendofzelda.cn cn legendofzelda.com.cn cn miitomo.commiitomo.com.cn @@ -5126,8 +5630,9 @@ kyurem.com pokedex3d.compokemon-moon.compokemon-sun.compo cnmariokart.com.cn cnmariokart7.commariokart8.commariosupersluggers.comnewsupermariobrosu.comsupermario.comsupermario3dworld.com!supermariobros.com.cn cnsupermariogalaxy.comsupermariorun.comsuperpapermario.comnintendowii.com  wii-u.com -wiifit.com wiifitu.com wiipartyu.com wiisports.comwiisportsresort.comwiiugamepad.com  wiivc.net xenoblade.com op.ggopgg-static.akamaized.net -joyjoy.netpandanet-igs.com pinkcore.com pinkcore.netsekai.colorfulpalette.org playstationplaystation.complaystation.net sonyentertainmentnetwork.com"api-priconne-redive.cygames.jpomotenashi.cygames.jp%!prd-priconne-redive.akamaized.nethistoryofdota.comhistoryofdota.nethistoryofdota.orginstituteofwar.orgmolesports.com rgpub.ioriot-games.com riot.com riot.net riotcdn.netriotgames.co.kr riotgames.comriotgames.info riotgames.jp riotgames.net riotgames.tv riotpin.comriotpoints.com rstatic.net supremacy.com supremacy.net championshipseriesleague.com lcsmerch.comleaguehighschool.comleagueoflegends.caleagueoflegends.cn +wiifit.com wiifitu.com wiipartyu.com wiisports.comwiisportsresort.comwiiugamepad.com  wiivc.net xenoblade.com op.ggopgg-static.akamaized.net a.ppy.sh assets.ppy.sh c.ppy.sh +osu.ppy.sh  m1.ppy.sh lazer.ppy.sh notify.ppy.sh sentry.ppy.shspectator.ppy.sh +joyjoy.netpandanet-igs.com pinkcore.com pinkcore.net playstationplaystation.complaystation.net sonyentertainmentnetwork.comsekai.colorfulpalette.org"api-priconne-redive.cygames.jpomotenashi.cygames.jp%!prd-priconne-redive.akamaized.nethistoryofdota.comhistoryofdota.nethistoryofdota.orginstituteofwar.orgmolesports.com rgpub.ioriot-games.com riot.com riot.net riotcdn.netriotgames.co.kr riotgames.comriotgames.info riotgames.jp riotgames.net riotgames.tv riotpin.comriotpoints.com rstatic.net supremacy.com supremacy.net championshipseriesleague.com lcsmerch.comleaguehighschool.comleagueoflegends.caleagueoflegends.cn cnleagueoflegends.co.krleagueoflegends.comleagueoflegends.infoleagueoflegends.krleagueoflegends.netleagueoflegends.orgleagueoflegendsscripts.comleaguesharp.infoleaguoflegends.comlearnwithleague.comlol-europe.com lolclub.org lolespor.comlolesports.com lolfanart.net lolpcs.com lolshop.co.kr lolstatic.comlolusercontent.com lpl.com.cn @@ -5231,7 +5736,8 @@ wegame.com scescdn.cn cnscid.cn cn scsentry.cn -cn supercell.com!supercellcommunity.cn +cn supercell.com +!cn!supercellcommunity.cn cnsupercellsupport.cn cncodm.com cnbcfmglobal.com @@ -5250,11 +5756,11 @@ xboxab.comxboxgamepass.comxboxgamestudios.com xboxlive.cn cn xboxlive.com xboxone.co xboxone.com xboxone.euxboxplayanywhere.comxboxservices.comxboxstudios.com -xbx.lvynoproject.net fanatical.comhumblebundle.com loverslab.com modrinth.com nexusmods.com +xbx.lvynoproject.netdodi-repacks.downloaddodi-repacks.site fanatical.comfitgirl-repacks.sitegame-repack.sitehumblebundle.com loverslab.comminecraft.wiki modrinth.com nexusmods.com papermc.ioplanetminecraft.com protondb.com speedrun.com steamdb.info - + CATEGORY-GOV-IR -adliran.ir +adliran.ir agrieng.org bazresi.irbia-judiciary.irbudget.imo.org.ir dadiran.ir dadsara.ir dadsetani.irdivan-edalat.ir @@ -5303,13 +5809,16 @@ vologda.ru voronezh.ru vrn.ru  vyatka.ru yaroslavl.ruyuzhno-sakhalinsk.ru chukotka.ru jamal.ru  surgut.ru yamal.ru q CATEGORY-HOSPITAL-CN  fuwai.com pkuh6.cn puh3.net.cnhospital.pku.edu.cnss.bjmu.edu.cn + +CATEGORY-HTTPDNS +dns.jd.com dns.weibo.cndns.weixin.qq.comdns.weixin.qq.com.cnhttpdns-api.aliyuncs.comhttpdns-sc.aliyuncs.comhttpdns.alicdn.comhttpdns.baidu.comhttpdns.baidubce.comhttpdns.bilivideo.comhttpdns.c.cdnhwc2.comhttpdns.meituan.comhttpdns.music.163.comhttpdns.n.netease.comhttpdns.push.oppomobile.comhttpdns.volcengineapi.comhttpsdns.baidu.comkuaishou.httpdns.prolofter.httpdns.c.163.commusic.httpdns.c.163.com  CATEGORY-INSURANCE-IRalborzinsurance.ir  bimeh.com bimehasia.combimeonline.comdana-insurance.com dayins.comhafezinsurance.ir ihio.gov.iriraninsurance.irkarafarin-insurance.irmellatinsurance.comnovininsurance.comomid-insurance.irparsianinsurance.irrazi-insurance.ir risc.irsinainsurance.com tamin.ir tins.ir - - CATEGORY-IPFS 4everland.io c4rex.co cf-ipfs.comcloudflare-ipfs.comcrustwebsites.net  dweb.linkgateway.pinata.cloudipfs-gateway.cloudipfs.anonymize.comipfs.best-practice.seipfs.eternum.ioipfs.eth.aragon.network ipfs.fleek.co ipfs.io ipfs.lain.laipfs.runfission.com ipns.co jorropo.netnftstorage.link via0.com -. - CATEGORY-IR agri-bank.com ansarbank.combank-maskan.ir bankmellat.ir banksepah.ir + + CATEGORY-IPFS cf-ipfs.comcloudflare-ipfs.com 4everland.io c4rex.cocrustwebsites.net  dweb.linkgateway.pinata.cloudipfs-gateway.cloudipfs.anonymize.comipfs.best-practice.seipfs.eternum.ioipfs.eth.aragon.network ipfs.fleek.co ipfs.io ipfs.lain.laipfs.runfission.com  ipfs.tech ipns.co jorropo.netnftstorage.link via0.com +0 + CATEGORY-IRirxn--mgba3a4f16axn--mgba3a4fra agri-bank.com ansarbank.combank-maskan.ir bankmellat.ir banksepah.ir bim.ir blubank.com bmi.ir bpi.ir @@ -5318,13 +5827,13 @@ dayins.comhafezinsurance.ir ihio.gov.iriraninsurance.irka qmb.ir rb24.ir refah-bank.ir  rqbank.ir sb24.com sbank.ir shahr-bank.ir shaparak.ir sinabank.irtejaratbank.ir arman-ati.combourseiness.com codal.ir farasahm.ir ifb.ir  ime.co.ir  irenex.ir sukuk.irtalarebourse.com tse.ir  tsetmc.irabanbroker.combahmanbroker.combkisecurities.com bmibourse.com bt-broker.comdanabroker.com -emofid.cometminansahm.comhafezbourse.com irfarabi.com kmsco.irmaskanbourse.commellatbroker.comnovinbourse.com oibroker.com omidsahm.com +emofid.commofidonline.cometminansahm.comhafezbourse.com irfarabi.com kmsco.irmaskanbourse.commellatbroker.comnovinbourse.com oibroker.com omidsahm.com rbc.irsaderatbourse.comsahandbroker.comsamanbourse.com sdbhouse.comsepahbourse.com tadbirgar.comabantether.com bit24.cash  bitpin.ir exir.iofarhad-exchange.com jibitex.com nobitex.ir ok-ex.io ompfinex.com ramzinex.com tabdeal.orgtetherland.com  wallex.ir faradars.org git.ir learnby.ir toplearn.com done.ir iranlms.orgwebinarplus.online quera.ir  quera.org -adliran.ir +adliran.ir agrieng.org bazresi.irbia-judiciary.irbudget.imo.org.ir dadiran.ir dadsara.ir dadsetani.irdivan-edalat.ir @@ -5355,11 +5864,12 @@ iranlms.ir jtt.ir sanjesh.org sharif.edu  sharif.ir  srttu.edu divar.cloud divar.ir divarcdn.com digi-kala.com  emalls.ir esam.ir janebi.com  janebi.ir sheypoor.com  torob.com  zanbil.ir digikala.comdigikalabusiness.comdigikalajet.com digistyle.com bale.ai  eitaa.com eitaa.ir -gap.im  mizito.ir niniban.com ninisite.com  rubika.ir splus.ir virasty.com afranet.comarvancloud.com arvancloud.ir asiatech.ir cafebazaar.ircafebazaar.org download.ir downloadly.ir hiweb.iripnumberia.com irancell.iriranserver.com -mci.irmihanwebhost.com mobinnet.ir myket.ir neshanmap.irp30download.comp30download.irparsonline.com picofile.com pishgaman.net -rightel.irsarzamindownload.com  shatel.ir  soft98.ir  sotoon.ir  taliya.ir +gap.imgaplication.com  mizito.ir niniban.com ninisite.com  rubika.ir splus.ir virasty.com  abrha.net afranet.comarvancloud.com arvancloud.ir arzex.io asiatech.ir cafebazaar.ircafebazaar.orgdatisnetwork.com download.ir downloadly.ir hiweb.iripnumberia.com irancell.iriranserver.com +mci.irmihanwebhost.com mobinnet.ir myket.ir neshanmap.irp30download.comp30download.irparsonline.com parspack.com picofile.com pishgaman.net +rightel.ir sarmayex.comsarzamindownload.com  shatel.irskyroom.onlinesmshooshmand.com  soft98.ir softgozar.com  sotoon.ir  taliya.ir tci.ir uplod.ir -uupload.ir  zoomit.ir +uupload.ir  yasdl.com +zhaket.com  zoomit.ir alibaba.ir flightio.com mrbilit.com tapsi.ircdnsnapptrip.com snapp-box.com  snapp.cab snapp.doctor snapp.express snapp.ir snapp.ninja snapp.site snapp.supply snapp.taxi @@ -5371,7 +5881,7 @@ isignal.ir tgju.org bama.ir jobinja.irjobinjacdn.com beytoote.com setare.com tebyan.net - + CATEGORY-MEDIA  6park.com 6parkbbs.com 6parknews.com cool18.com 9cdn.net9nation.com.au 9news.com.au 9now.com.aufreeviewplus.net.au mi9.com.au @@ -5381,7 +5891,7 @@ ajplus.net aljazeera.com aljazeera.netpalestineremix.comsa apnews.comappledaily.comappledaily.com.hkappledaily.com.tw appledaily.hkapplefruity.comapplehealth.com.hk atnext.combestmallawards.com deluxe.com.hk eracom.com.tw next.hknextdigital.com.hknextdigital.com.twnextfilm.com.hknextmag.com.tw nextmedia.comnextmedia.com.tw nextmgz.comnextplus.com.hk nexttv.com.twnextwork.com.hknextwork.com.tw nextwork.hk nextwork.tw nxtdig.com.hk nxtdig.com.tw omoplanet.com privilege.hk privilege.tw sharpdaily.tw tomonews.nettwnextdigital.com aiasahi.jp asagaku.com  asahi.com asahicom.jpasakonet.co.jpnikkansports.comasahishimbun.sc.omtrdc.netbbcbbc-reporting-api.app  bbc.co.uk bbc.com -bbc.in +bbc.inbbc.mp-pxcdn.com bbc.net.ukbbcfmt.s.llnwi.net bbci.co.ukbbcmedia.co.ukbbcpersian.combbcverticals.com bidi.net.uk!aod-pod-uk-live.akamaized.net!as-dash-uk-live.akamaized.net as-hls-uk-live.akamaized.net!ve-dash-uk-live.akamaized.net%!ve-uhd-push-uk-live.akamaized.net"vod-dash-uk-live.akamaized.net"vod-dash-ww-live.akamaized.net!vod-hls-uk-live.akamaized.net!vod-sub-uk-live.akamaized.net#vod-thumb-uk-live.akamaized.net#vod-thumb-ww-live.akamaized.net&"vs-cmaf-push-uk-live.akamaized.net'#vs-cmaf-pushb-ww-live.akamaized.net%!vs-hls-push-uk-live.akamaized.net&"vs-hls-pushb-uk-live.akamaized.net  bloomberg bbgevent.com bbhub.io bbthat.com bgov.com bloomberg.cnbloomberg.co.jpbloomberg.co.kr bloomberg.combloomberg.com.br bloomberg.fm bloomberg.tvbloombergapps.combloombergarcade.combloombergbeta.combloombergbna.combloombergbreakaway.combloombergbriefs.combloombergchina.combloombergenvironment.combloombergforeducation.combloomberggovernment.combloombergindices.combloombergindustry.combloomberglabs.combloomberglaw.combloomberglive.combloomberglp.combloombergmedia.combloombergnext.combloombergpolarlake.combloombergprep.combloombergquint.combloombergradio.combloombergsef.combloombergspace.combloombergstatus.combloombergsurvey.combloombergtax.combloombergtax1.combloombergtaxtech.com!bloombergtradingchallenge.combloombergtv.mnbloombergvault.combloombergview.comblpcareers.com blpevents.comblpprofessional.com bmia.org bnef.combusinessweek.combusinessweekmag.com bwbx.io citylab.com gotraffic.netlondonmithraeum.comneweconomyforum.comnewenergyfinance.comquicktake.videotechatbloomberg.com tictoc.video  boxun.combowenpress.com @@ -5392,15 +5902,16 @@ cbsimg.netcbsinteractive.comcbsistatic.com cbsivideo.com c viacbs.com viacom.com viacomcbs.comviacomcbspressexpress.com paramount.com amlg.iocbsaavideo.commtvnservices.comparamountplus.compplusstatic.comcbsi.live.ott.irdeto.com%!cbsplaylistserver.aws.syncbak.comcbsservice.aws.syncbak.comlink.theplatform.com cnbc.com cnbcfm.com -nbcuni.comnbcudigitaladops.com cnn.com +nbcuni.comnbcudigitaladops.com +cnbeta.com cnbeta.com.tw cnbetacdn.com cnn.com cnn.io cnn.it cnnarabic.com cnnlabs.com cnnmoney.ch cnnmoney.comcnnmoneystream.comcnnpolitics.com  anm.co.uk  dailym.aidailymail.co.uk dailymail.comdailymail.com.au dailymail.dkdailymailonline.comdmgmediaprivacy.co.ukmailhealth.commailonline.co.ukmailonline.commailonsunday.co.ukmailonsunday.ie metro.co.uk mol.imthisismoney.co.uk thismon.ee -dw.comdeutschewelle.h-cdn.com economist.comeconomistgroup.comeconomistgroupcareers.com eiu.com dajiyuan.com dajiyuan.eu edninfo.com epoch.cloud epoch.org.il epochbuy.com epochcar.com epochhk.com epochmall.comepochmediagroup.com epochshop.comepochstories.com epochtime.comepochtimes-bg.comepochtimes-romania.com epochtimes.bgepochtimes.co.ilepochtimes.co.krepochtimes.co.ukepochtimes.comepochtimes.com.auepochtimes.com.brepochtimes.com.sgepochtimes.com.twepochtimes.com.ua epochtimes.cz epochtimes.de epochtimes.eu epochtimes.fr epochtimes.it epochtimes.jp epochtimes.nl epochtimes.pl epochtimes.ru epochtimes.seepochtimeshk.orgepochtimestr.com epochweek.comepochweekly.com erabaru.net +dw.comdeutschewelle.h-cdn.com economist.comeconomistgroup.comeconomistgroupcareers.com eiu.com dajiyuan.com dajiyuan.eu edninfo.com epoch.cloud epoch.org.il epochbase.com epochbuy.com epochcar.com epochhk.com epochmall.comepochmediagroup.com epochshop.comepochstories.com epochtime.comepochtimes-bg.comepochtimes-romania.com epochtimes.bgepochtimes.co.ilepochtimes.co.krepochtimes.co.ukepochtimes.comepochtimes.com.auepochtimes.com.brepochtimes.com.sgepochtimes.com.twepochtimes.com.ua epochtimes.cz epochtimes.de epochtimes.eu epochtimes.fr epochtimes.it epochtimes.jp epochtimes.nl epochtimes.pl epochtimes.ru epochtimes.seepochtimeshk.orgepochtimestr.com epochweek.comepochweekly.com erabaru.net etviet.comlagranepoca.com minghui.org ntd.com ntd.tv  ntdca.com -ntdimg.com ntdtv.ca ntdtv.co.kr  ntdtv.com ntdtv.com.tw ntdtv.jp ntdtv.kr  ntdtv.org ntdtv.ru ntdtv-dc.com ntdtvla.com  ntdvn.compersianepochtimes.com renminbao.comtheepochtimes.comtheepochtimessubscribe.comvelkaepocha.cz +ntdimg.com ntdtv.ca ntdtv.co.kr  ntdtv.com ntdtv.com.tw ntdtv.jp ntdtv.kr  ntdtv.org ntdtv.ru ntdtv-dc.com ntdtvla.com  ntdvn.compersianepochtimes.com renminbao.comtheepochtimes.comtheepochtimessubscribe.comvelkaepocha.czes-visiontimes.comkannewyork.comkanzhongguo.comkanzhongguo.eusecretchina.com trithucvn.net trithucvn.org vct.newsvisiontimes.comvisiontimes.devisiontimes.frvisiontimes.itvisiontimes.netvisiontimesjp.com  vtvan.comwatchinese.com bayvoice.net ozvoice.org sohcradio.com sohfrance.orgsoundofhope.eusoundofhope.krsoundofhope.orgwanokokorosoh.comaboluowang.combannedbook.netbannedbook.orgbroadpressinc.comchinaaffairs.org dafahao.comdonatecarsoh.orgdongtaiwang.com falundafa.orgfalundafa.org.twfalundafamuseum.orgfalungong.club faluninfo.netfawanghuihui.orgfayuanbooks.com  fgmtv.org ganjing.com ganjing.worldganjingworld.com guangming.org mhradio.orgninecommentaries.com starp2p.comtiandixing.orgtiantibooks.org tuidang.orgupholdjustice.orgwujieliulan.com xinsheng.net yuanming.netyuming.qxbbs.org zhengjian.orgzhengwunet.org zhenxiang.bizzhuichaguoji.org shenyun.com shenyun.orgshenyuncreations.comshenyunperformingarts.org forbes.com forbesimg.comfoxfox-corporation.com fox-news.com fox.com fox.tv fox10.tv fox10news.comfox10phoenix.com  fox11.comfox13memphis.com fox13news.com  fox23.comfox23maine.com fox247.com  fox247.tv  fox26.comfox26houston.comfox28media.com  fox29.comfox2detroit.com fox2news.com  fox32.comfox32chicago.comfox35orlando.comfox38corpuschristi.com fox42kptm.com  fox46.comfox46charlotte.com  fox47.com fox49.tv fox4news.com fox51tns.netfox5atlanta.com @@ -5430,7 +5941,7 @@ ftv.com.twftvnews.com.twgannett-cdn.com gannett.comgannet gclubs.com  gettr.com gfashion.com  gnews.org gtv.org gtv1.orggtvmediagroupfairfund.com  guo.media  gwiki.net  gwins.orghimalaya.exchange hpayshop.com nfsc.global nfscdict.comnfscofficial.com rexcha.comrolfoundation.orgrolsociety.org!yiqiedoushiganggangkaishi.org!himalaya-exchange.zendesk.comapexprint.com.hk eprc.com.hk etbc.com.hk etnet.com.cn cn etnet.com.hketnetchina.com.cn -cnetpress.com.hkettrade.com.hk etwealth.com hket.com hketgroup.comulifestyle.com.hkumagazine.com.hk hkopentv.com fantv.hkhuffingtonpost.cahuffingtonpost.co.ukhuffingtonpost.co.zahuffingtonpost.comhuffingtonpost.com.auhuffingtonpost.com.mxhuffingtonpost.dehuffingtonpost.eshuffingtonpost.frhuffingtonpost.grhuffingtonpost.inhuffingtonpost.ithuffingtonpost.jphuffingtonpost.kr huffpost.comhuffpostarabi.comhuffpostbrasil.comhuffpostmaghreb.com banned.video infowars.cominfowarsmedia.combusinessinsider.co.zabusinessinsider.combusinessinsider.com.aubusinessinsider.com.plbusinessinsider.debusinessinsider.esbusinessinsider.frbusinessinsider.inbusinessinsider.jpbusinessinsider.mxbusinessinsider.mybusinessinsider.nlbusinessinsider.sginsider-intelligence.com insider.cominsiderintelligence.comes-visiontimes.comkannewyork.comkanzhongguo.comkanzhongguo.eusecretchina.com trithucvn.net trithucvn.org vct.newsvisiontimes.comvisiontimes.devisiontimes.frvisiontimes.itvisiontimes.netvisiontimesjp.com  vtvan.comwatchinese.com 47gyosei.jp  47news.jp kyodo-d.info +cnetpress.com.hkettrade.com.hk etwealth.com hket.com hketgroup.comulifestyle.com.hkumagazine.com.hk hkopentv.com fantv.hkhuffingtonpost.cahuffingtonpost.co.ukhuffingtonpost.co.zahuffingtonpost.comhuffingtonpost.com.auhuffingtonpost.com.mxhuffingtonpost.dehuffingtonpost.eshuffingtonpost.frhuffingtonpost.grhuffingtonpost.inhuffingtonpost.ithuffingtonpost.jphuffingtonpost.kr huffpost.comhuffpostarabi.comhuffpostbrasil.comhuffpostmaghreb.com banned.video infowars.cominfowarsmedia.combusinessinsider.co.zabusinessinsider.combusinessinsider.com.aubusinessinsider.com.plbusinessinsider.debusinessinsider.esbusinessinsider.frbusinessinsider.inbusinessinsider.jpbusinessinsider.mxbusinessinsider.mybusinessinsider.nlbusinessinsider.sginsider-intelligence.com insider.cominsiderintelligence.com 47gyosei.jp  47news.jp kyodo-d.info kyodo-d.jpkyodoimages.jp kyodonews.jp kyodonews.net newsmart.jp nna.jpfreedomplatform.tv londonreal.tv ltn.com.tw yes123.com.tw machigoto.jpmainichi-athletepartners.jp mainichi.jpmainichibooks.com meijinsen.jp mirailab.techmottainai.infonewsgawakaru.comsponichi.co.jpweekly-economist.commalayalamanorama.com manorama.commanoramanews.commanoramaonline.commanoramayearbook.inonmanorama.com radiomango.fm  theman.in @@ -5463,7 +5974,7 @@ sankei.com  sankei.jp sankeibiz.jp sankeishop.jp sanspo.comseasidestory.tokyoseiron-sankei.com tvnaviweb.jp zakzak.co.jp scmp.com i-scmp.com setn.com settv.com.twsingtaonewscorp.com sing68.com singtao.comsingtaobooks.com singtaola.comsingtaousa.comstheadline.comsingtaoopo.comhkheadline.comthestandard.com.hkeastweek.com.hkeasttouch.com.hkbastillepost.com -eduplus.hkheadlinejobs.hkjobmarket.com.hkmy-magazine.mepcmarket.com.hksky sky.com skyassets.comskyoceanrescue.comskyoceanrescue.deskyoceanrescue.it skysports.com skysports.fr skysports.ieskysportsonline.comskysportsracing.com bayvoice.net ozvoice.org sohcradio.com sohfrance.orgsoundofhope.eusoundofhope.krsoundofhope.orgwanokokorosoh.com theguardiandev-guardianapis.comdev-theguardian.com +eduplus.hkheadlinejobs.hkjobmarket.com.hkmy-magazine.mepcmarket.com.hksky sky.com skyassets.comskyoceanrescue.comskyoceanrescue.deskyoceanrescue.it skysports.com skysports.fr skysports.ieskysportsonline.comskysportsracing.com theguardiandev-guardianapis.comdev-theguardian.com gu-web.netguardianapis.comguardianapps.co.uk guim.co.ukguimcode.co.uktheguardian.comtheguardiandns.comtheinitium.com  init.shop thetype.cloud cn thetype.comtypeisbeautiful.com reut.rs reuters.com @@ -5488,7 +5999,6 @@ zaobao.com zaobao.com.sg  zaobao.sg bgr.inbollywoodlife.comcareerfundas.comcricketcountry.com dnai.in dnaindia.com earngeek.com ekhindi.com ind.sh  india.comindiancolleges.com itripto.com  oncars.in prepsure.comthehealthsite.com wionews.com yo1health.com zee.com zeebiz.comzeeentertainment.com zeenews.com"zeenews-fonts.s3.amazonaws.com -cnbeta.com cnbetacdn.com 881903.com am730.com.hkamericasvoice.newsappleinsider.com  axios.com bbgwatch.com bnext.com.tw breitbart.combusinessfocus.iobusinesstoday.com.twbusinessweekly.com.twcaijinglengyan.comchinadecoding.comchinadigitaltimes.netchinaeconomicreview.comcmmedia.com.tw cna.com.tw  cnyes.comcoolloud.org.tw cup.com.hk  cw.com.tw d100.net @@ -5503,7 +6013,7 @@ socrec.org storm.mgtaipeitimes.comtaiwannews.com.tw techne upmedia.mgvjmedia.com.hk warroom.orgwashingtonpost.com wealth.com.tw weiyuksj.com wenzhao.ca  wired.com ydn.com.twyibaochina.com youlucky.com zerohedge.com zoomingin.tv - + CATEGORY-MEDIA-CN36dianping.com 36kr.com 36krcdn.com 36krcnd.com cctv.cn cctv.com cctvpic.com chinaepg.cn chinalive.com citv.net.cn cnms.net.cn cntv.cn cntv.com.cn cctvlib.cncctvlibrary.cncctvlib.com.cncctvlibrary.com.cn cctvpro.cncctvpro.com.cn  cntvwb.cn gjgbdszt.cngjgbdszt.com.cngjgbdszt.net.cn  ipanda.cn @@ -5512,7 +6022,7 @@ ipanda.net livechina.cn livechina.comolympicchannelchina.cn  cns.com.cn ecns.cn  dgtle.com geekpark.nethoopchina.com.cn hupu.com hupucdn.com  shihuo.cn coolbuy.com  ifanr.com ifanr.inifanrusercontent.com ifanrx.com minapp.com jiemian.comjiemian.com.cn -lancdn.comlandiannews.com  wsoso.com landian.vip +lancdn.comlandiannews.com landian.vip landian.xyz ourl.co  wsoso.com fengcx.com  ifeng.com ifengimg.comphoenixcenter.cn fengedu.comifengweekly.com 6655.com cooldock.com ithome.com lapin365.com ruanmei.com saayaa.com win7china.com win8china.com sohu.com @@ -5540,15 +6050,17 @@ qurantv.ir radio.ir radioiran.ir radiojavan.irradiomaaref.i tv3.ir tv5.ir tv7.ir - + CATEGORY-MOOC-CNchinesemooc.org -cnmooc.orgicourse163.org icourses.cn mooc.cnopenlearning.com pmphmooc.commoocs.unipus.cnopencourse.pku.edu.cn study.163.com - +cnmooc.orgicourse163.org icourses.cn icve.com.cn mooc.cnopenlearning.com pmphmooc.commoocs.unipus.cnopencourse.pku.edu.cn study.163.com + CATEGORY-NETDISK-CN 123pan.com cloud.189.cn ctfile.com feimaoyun.com pan.baidu.com pan.quark.cn weiyun.com yun.139.com -yunpan.comaliyundrive.comyunpan.aliyun.com lanzoui.com lanzouw.com lanzoux.com +yunpan.comaliyundrive.comyunpan.aliyun.com baidupan.com ilanzou.com lanosso.com +lanzou.com lanzoub.com lanzouc.com lanzoue.com lanzouf.com lanzoug.com lanzouh.com lanzoui.com lanzouj.com lanzouk.com lanzoul.com lanzoum.com lanzouo.com lanzoup.com lanzouq.com lanzous.com lanzout.com lanzouu.com lanzouv.com lanzouw.com lanzoux.com lanzouy.com +lanzov.com woozooo.com h CATEGORY-NETWORK-SECURITY-CN cnmstl.net fofa.so t00ls.cc  t00ls.net @@ -5563,12 +6075,39 @@ saat24.com shabestan.ir shana.ir I CATEGORY-NOVEL  ptzwx.comquanben-xiaoshuo.com quanben.io - - CATEGORY-ORGS archive.orgarchive-it.orgopenlibrary.org ccstatic.orgcreativecommons.orgcreativecommons.engineeringlicensebuttons.net csis.orgcsis-prod.s3.amazonaws.comemojipedia.orgworldemojiawards.comworldemojiday.com xn--yt8h.la ieee.org ieee.tvtryengineering.org ieee-ccnc.org ieee-ecce.org ieeemce.orgstandardsuniversity.orgieee-region6.org ieee.ca ieeer10.org + + CATEGORY-NTP^time(.euro)?.apple.com$!^time([1-5])?\.facebook\.com$^time([1-4])?.google.com$^((((ut1-wwv)|(ntp\-(b|d|wwv))|(time(\-(([a-e]\-(g|b))|([a-e]\-wwv)))?))\.nist\.gov)|((ntp-c|ut1-time)|(utcnist(2|3)?))\.colorado\.edu)$ ^ntp[0-7]\.ntp-servers\.net$ clock.isc.org ntp.fiord.ru +ntp.nat.ms +ntp.nic.cz ntp.nict.jp ntp.ripe.net +ntp.se +ntp.ufe.cz pool.ntp.orgtime.cloudflare.com time.nrc.catime.windows.com&^ntp([1-7])?\.aliyun\.com$ +cn'^ntp([1-5])?\.tencent\.com$ +cncn.pool.ntp.org +cnntp.neu.edu.cn +cnntp.ntsc.ac.cn +cn +ntp.org.cn +cn + +CATEGORY-NTP-CN&^ntp([1-7])?\.aliyun\.com$ +cn'^ntp([1-5])?\.tencent\.com$ +cncn.pool.ntp.org +cnntp.neu.edu.cn +cnntp.ntsc.ac.cn +cn +ntp.org.cn +cn + + CATEGORY-ORGS  4pcdn.org +4plebs.orgarchive-it.org archive.org +archive.ph archive.todayopenlibrary.org ccstatic.orgcreativecommons.orgcreativecommons.engineeringlicensebuttons.net csis.orgcsis-prod.s3.amazonaws.comemojipedia.orgworldemojiawards.comworldemojiday.com xn--yt8h.la f-dro1d.org f-droid.com f-droid.org +fdroid.org ieee.org ieee.tvtryengineering.org ieee-ccnc.org ieee-ecce.org ieeemce.orgstandardsuniversity.orgieee-region6.org ieee.ca ieeer10.org ieeer5.org ieeer8.org ieeeusa.orgieeefoundation.orgieee-into-focus.org ieee-vics.org ieeeday.orgdatasheets360.comglobalspec.com ieee-isto.orgtechstreet.com computer.org -comsoc.org embs.org emcs.org grss-ieee.org ieee-aess.org ieee-cas.org ieee-ceda.orgieee-edusociety.org ieee-ies.org ieee-ims.org ieee-npss.org ieee-pels.org ieee-pes.org ieee-ras.orgieee-sensors.org ieee-tems.org ieee-uffc.org ieeeaps.org ieeecsc.org ieeecss.org ieeedeis.orgieeemagnetics.org ieeenano.org ieeeoes.org ieeesmc.orgieeesystemscouncil.org  itsoc.org mtt.orgphotonicssociety.orgsignalprocessingsociety.orgtechnologyandsociety.org vtsociety.org nist.gov time.gov openmaps.orgopenstreetmap.comopenstreetmap.netopenstreetmap.orgopenstreetmaps.org osm.orgosmfoundation.orgstateofthemap.comstateofthemap.orgrolfoundation.orgrolsociety.org aomedia.org  atypi.org -change.org f-droid.orgglobalsecurity.org iana.org ietf.org itu.int opte.org  smpte.org +comsoc.org embs.org emcs.org grss-ieee.org ieee-aess.org ieee-cas.org ieee-ceda.orgieee-edusociety.org ieee-ies.org ieee-ims.org ieee-npss.org ieee-pels.org ieee-pes.org ieee-ras.orgieee-sensors.org ieee-tems.org ieee-uffc.org ieeeaps.org ieeecsc.org ieeecss.org ieeedeis.orgieeemagnetics.org ieeenano.org ieeeoes.org ieeesmc.orgieeesystemscouncil.org  itsoc.org mtt.orgphotonicssociety.orgsignalprocessingsociety.orgtechnologyandsociety.org vtsociety.org nist.gov time.gov openmaps.orgopenstreetmap.comopenstreetmap.netopenstreetmap.orgopenstreetmaps.org osm.orgosmfoundation.orgstateofthemap.comstateofthemap.orgpaskoocheh.com a.ppy.sh assets.ppy.sh c.ppy.sh +osu.ppy.sh  m1.ppy.sh lazer.ppy.sh notify.ppy.sh sentry.ppy.shspectator.ppy.sh +ppy.shrolfoundation.orgrolsociety.org aomedia.org  atypi.org +change.orgglobalsecurity.org iana.org ietf.org itu.int opte.org  smpte.org un.org w3.org who.int wto.org  @@ -5577,9 +6116,9 @@ change.org f-droid.orgglobalsecurity.org iana.org ietf.org payping.ir pec.ir  pep.co.ir sadadpsp.ir sep.ir shaparak.irweswap.digital zarinpal.com - - CATEGORY-PORN -18comic.cc18comic.company 18comic.org 18comic.vip + + CATEGORY-PORN18comic-god.cc18comic-god.club18comic-god.xyz +18comic.cc18comic.company 18comic.org 18comic.vip jmcomic.ltd jmcomic.me jmcomic.mobi jmcomic.moe jmcomic1.city jmcomic1.me jmcomic1.mobi jmcomic2.moe 54647.global 54647.io 54647.online  54647.org anon-v.com anon-v.lol avmoo.click  avmoo.com  tellme.pw bdsm123.xyz bondagesm.xyz bili2.cc bili888.com bili999.com($(^|\.)bilibili3(0[1-9]|1[0-2])\.xyz$ boboporn.com boboporn.net @@ -5589,15 +6128,15 @@ boylove.cc boylove.live boylove1.cc boyloves.cc fuhouse.club btt804.com btt904.com bttzyw.com -bttzyw.net camwhores.tvcamwhores.video cavporn.comcavporn.github.io#(^|\.)cav1(0[2-9]|1[0-9])\.com$chatwhores.comchatwhores.netchatwhores.orgchatwhores.sex chatwhores.tv c4slive.comclips4sale.comvideos4sale.com  chobit.cc ci-en.jp  ci-en.net +bttzyw.net camwhores.tvcamwhores.video cavporn.comcavporn.github.io#(^|\.)cav1(0[2-9]|1[0-9])\.com$chatwhores.comchatwhores.netchatwhores.orgchatwhores.sex chatwhores.tv c4slive.comclips4sale.comvideos4sale.com cuinc.oen.tw cuinc.tw  chobit.cc ci-en.jp  ci-en.net dlsite.com dlsite.com.tw  dlsite.jpdlsitestudio.com nijiyome.jp triokini.com  dmm.co.jp dmmrex.com e-hentai.org ehgt.org ehtracker.org -ehwiki.org exhentai.org hath.networkhentaiathome.nethentaiverse.orgero-labs.cloud ero-labs.com ero-labs.netero-labs.online ero-labs.site erolabs.cloud erolabs.com erolabs.game erolabs.neterolabs.online  fansta.me-)misa-prod.s3.ap-northeast-1.amazonaws.com hentaivn.de hentaivn.la hentaivn.net htvncdn.net heydoga.com  heyzo.comcuntempire.com cuntwars.comdirtyleague.com faptitans.comhooligapps.comslotbitches.com smutstone.comtownofsins.comillusion.co.jp illusion.jp  acgcf.com  acgdg.com  acgdv.com acgfabu.com +ehwiki.org exhentai.org hath.networkhentaiathome.nethentaiverse.orgero-labs.cloud ero-labs.com ero-labs.netero-labs.online ero-labs.site erolabs.cloud erolabs.com erolabs.game erolabs.neterolabs.online  fans66.tw fansking.tw  fansta.me-)misa-prod.s3.ap-northeast-1.amazonaws.com2023aga.oen.tw aga-expo.comcosfans-tw.com hentaivn.de hentaivn.la hentaivn.net htvncdn.net heydoga.com  heyzo.comcuntempire.com cuntwars.comdirtyleague.com faptitans.comhooligapps.comslotbitches.com smutstone.comtownofsins.comillusion.co.jp illusion.jp  acgcf.com  acgdg.com  acgdv.com acgfabu.com acgfbw.com acgvipss.com  acgwr.com aishegw.com clincha.cnfabuyemian.comillusion111.comillusionas.comillusionchn.com illusionfb.cnillusiongw.com illusionh.com illusionl.comillusionn2.comillusionn3.comillusionn4.comillusionn5.comillusionxz.com illusiony.comillusionze.com illusnoi.com isgame365.cc isheppc.com lliusno.comnoisullifb.comwnoaissulli1.com yiqilai99.cn zzycdz.com cdnlab.live jable.tvmushroomtrack.com javbus.com javbus22.com  javcdn.cc javcc.cc  javcc.com  javdb.com jdbimgs.com jdbstatic.com x18r.co x18r.com z18r.co z18r.com javwide.com -javwide.tv +javwide.tv jkf.net jkface.net jkforum.net  jr24h.com jvid.com johren.games johren.net hkporn.net @@ -5614,91 +6153,36 @@ rdtcdn.com  tube8.com tube8.frextremetube.comkeezmovies.com ypncdn.com  babes.com men.com porniq.com pornmd.com seancody.comthumbzilla.com twistys.com -webcams.tv whynotbi.com moxing.mobi moxing.news netflav.com netflav1.com nudevista.com nudevista.es nudevista.net nudevista.vip  bikaa.xyz  bikac.xyz bikaios.xyzmanhuabika.com -picacn.xyz picacomic.com picacomic.xyz wikawika.xyz pornpros.compornprosnetwork.comshireyishunjian.comyingpianqu.com jhxl.orgxn--sgt856gbjl.cc porndude2.comporndudecasting.com pornsites.compornwebmasters.comtheporndude.cctheporndude.comtheporndude.vip18eighteen.com40somethingmag.com50plusmilfs.com60plusmilfs.com analqts.comashleysageellison.comautumn-jade.combeascoremodel.combigboobbundle.combigboobspov.combigtitangelawhite.combigtithitomi.combigtithooker.combigtitterrynova.combigtitvenera.comblackandstacked.combonedathome.combootyliciousmag.combustyangelique.combustyarianna.combustydanniashe.combustydustystash.combustyinescudna.combustykellykay.combustykerrymarie.combustylornamorgan.combustymerilyn.combustyoldsluts.combustysammieblack.comcherrybrady.comchloesworld.comchristymarks.comcock4stepmom.comcodivorexxx.comcreampieforgranny.comcrystalgunnsworld.comdaylenerio.comdesiraesworld.comdianepoppos.comeboobstore.comevanottyvideos.comfeedherfuckher.comflatandfuckedmilfs.comgetscorecash.comgrannygetsafacial.comgrannylovesbbc.comgrannylovesyoungcock.comhomealonemilfs.comibonedyourmom.comifuckedtheboss.comjessicaturner.comjoanabliss.comjuliamiles.comjuliamiles.comkarinahart.comkarlajames.comleannecrowvideos.com +webcams.tv whynotbi.com moxing.mobi moxing.news netflav.com netflav1.com netflav5.com nudevista.com nudevista.es nudevista.net nudevista.vip  bikaa.xyz  bikac.xyz bikaios.xyzmanhuabika.com picacgp.com picacgy.com +picacn.xyz picacomic.com picacomic.xyz wikawika.xyz playboy.complayboy.com.uk pornpros.compornprosnetwork.com sehuatang.net sehuatang.orgshireyishunjian.comyingpianqu.com jhxl.orgxn--sgt856gbjl.cc spankbang.comspankbang.party  sb-cd.com 5w.ag swag-live.co  swag.live porndude2.comporndudecasting.com pornsites.compornwebmasters.comtheporndude.cctheporndude.comtheporndude.vip18eighteen.com40somethingmag.com50plusmilfs.com60plusmilfs.com analqts.comashleysageellison.comautumn-jade.combeascoremodel.combigboobbundle.combigboobspov.combigtitangelawhite.combigtithitomi.combigtithooker.combigtitterrynova.combigtitvenera.comblackandstacked.combonedathome.combootyliciousmag.combustyangelique.combustyarianna.combustydanniashe.combustydustystash.combustyinescudna.combustykellykay.combustykerrymarie.combustylornamorgan.combustymerilyn.combustyoldsluts.combustysammieblack.comcherrybrady.comchloesworld.comchristymarks.comcock4stepmom.comcodivorexxx.comcreampieforgranny.comcrystalgunnsworld.comdaylenerio.comdesiraesworld.comdianepoppos.comeboobstore.comevanottyvideos.comfeedherfuckher.comflatandfuckedmilfs.comgetscorecash.comgrannygetsafacial.comgrannylovesbbc.comgrannylovesyoungcock.comhomealonemilfs.comibonedyourmom.comifuckedtheboss.comjessicaturner.comjoanabliss.comjuliamiles.comjuliamiles.comkarinahart.comkarlajames.comleannecrowvideos.com legsex.comlinseysworld.commegatitsminka.commickybells.commilfbundle.commilfthreesomes.com milftugs.commillymarks.commommystoytime.comnataliefiore.comnaughtyfootjobs.comnaughtymag.comnaughtytugs.comnicolepeters.comoldhornymilfs.compickinguppussy.com pornloser.compornmegaload.comreneerossvideos.comsarennasworld.comscoreclassics.comscoregroup.com scoreland.comscoreland2.com scorepass.com scoretv.tvscoreuniverse.comscorevideos.comsharizelvideos.comsilversluts.comstacyvandenbergboobs.comsusiewildin.comtawny-peaks.comtiffany-towers.comtitsandtugs.comtnatryouts.comvaloryirene.com xlgirls.comyourmomlovesanal.comyourmomsgotbigtits.comyourwifemymeat.comtokyo-tosho.nettokyotosho.info tokyotosho.setruyen-hentai.comtruyen-hentai.frtruyen-hentai.ru  uug22.com  uug23.com  uug25.com  uug26.com  uug27.com  uuk28.com  uun78.com  uun79.com  uun82.com  uun83.com  uun85.com  uun86.com  uun87.com  uun89.com  uun92.com  uun93.com  uun95.com  uun96.com  uun97.com  uun98.com  uun99.com  uux68.com#collector.xhamster.com ads xhamster.com xhamster.desi xhamster.xxxxhamster18.comxhamster18.desixhamsterlive.com  xhcdn.comwidgets.stripst.com avstar01.me avstar02.me avstar03.me avstar04.com avstar04.me avstar05.me avstar06.me avstar07.com avstar07.me avstar09.com avstar09.me avstar1.com avstar2.com avstar3.com avstar4.com avstar5.com avstar6.com avstar8.com avstar9.com xnxx-cdn.com xnxx.com xnxx.net xnxx.tv  xnxx3.comxvideos-cdn.com xvideos.comyjcontentdelivery.com youjizz.com  doure.net kuaipa.net miaopa.net yunlaopo.cc yunlaopo.com yunlaopo.net -168sex.top  a7sex.com ctotires.comferryclean.comzhimeishe888.com -dmthin.com -dmthus.com -dmtiny.com -dmtone.com -dmtoss.com -dmugly.com -dmunit.com -dmupon.com -dmurge.com -dmuser.com -dmvary.com -dmvast.com -dmvery.com -dmvote.com -dmwage.com -dmwait.com -dmwake.com -dmwant.com -dmwarm.com -dmwarn.com -dmwash.com -dmweak.com -dmwhat.com -dmwhom.com -dmwife.com -dmwild.com -dmwing.com -dmwipe.com -dmwish.com -dmword.com  ysact.com  ysage.com  ysaim.com  ysand.com  ysbad.com  ysbed.com -yshide.com -yshigh.com -yshill.com -yshole.com -ysholy.com -yshour.com -yshurt.com -ysinto.com -ysiron.com -ysjail.com -yslawn.com -ysleaf.com -ysleft.com -ysless.com -yslose.com -ysloss.com -yslost.com -ysloud.com -ysluck.com -yslung.com -ysmale.com -ysmany.com -ysmass.com -ysmeal.com -ysmeat.com -ysmeet.com -ysmelf.com -ysmere.com -ysmuch.com -ysmust.com  ysput.com  ysraw.com  ysrow.com  ysrub.com  ysset.com  yssir.com  ystry.com  ysvia.com  yswet.com adultporn 02weqj32.com -04647.club0cgdklr5sfwj.com 0dzn.com 0plkijj.vip 0xxx.ws100bucksbabes.com 100shmar.net101boyvideos.com101tubeporn.com -101xxx.xyz  10bet.com 10musume.com 110xnxx.com  114av.xyz  11jav.com +168sex.top  a7sex.com ctotires.comferryclean.comzhimeishe888.com adultporn 02weqj32.com +04647.club0cgdklr5sfwj.com 0plkijj.vip 0xxx.ws100bucksbabes.com101boyvideos.com101tubeporn.com +101xxx.xyz  10bet.com 10c10qoo.one 10musume.com 110xnxx.com1111mod-tube.buzz 1111mode.xyz1111modpo.info  114av.xyz +119474.xyz  11jav.com  123bin.cc 123sex.top 123videos.tv -128100.xyz  132288.cc141hongkong.com +126728.net +128100.xyz 13mei13.top +140033.xyz +141-hk.com141hongkong.com 141jav.com  141jj.com 159i.com -161sex.com 16885858.com 16fhgdty.xyz 16honeys.com  171xx.com 177picyy.com  179na.com 17mimei.club 17mimei.com18-teen-porn.com18-teen-xxx.com188channel.com 18acg.us18av.mm-cg.com 18av.pro  18avx.com 18commic.com 18doujin.com18doujinshi.xyz 18exgfs.com 18h.mm-cg.com18hmanga.click 18hmanga.com 18insta.com +161sex.com 16885858.com 16fhgdty.xyz 16honeys.com 170.icu  171xx.com 177picyy.com  179na.com 17lu.xyz 17mimei.club 17mimei.com 17supxxx.com18-teen-porn.com18-teen-xxx.com188channel.com 18acg.us18av.mm-cg.com 18av.pro  18avx.com 18commic.com 18doujin.com18doujinshi.xyz 18exgfs.com  18fby.com 18h.mm-cg.com +18h.tv18hmanga.click 18hmanga.com 18insta.com 18j.tv  18jms.com 18novel.xyz18porncomic.com -18porno.tv 18pornsex.com -18push.com 18qt.com18schoolgirlz.me  18sex.org -18tube.xxx -18yiren.tv 1bigclub.com1bokeponline.top1classtube.com -1jjdg2.vip -1jsa22.vip  1pondo.tv 1pornlist.com 1vwapi4d.xyz1watchmygf.com 1xbet.cm 1xbet.co.ke 2022.dev  21hub.com21naturals.com 2371tom.com  249dw7.cn +18porno.tv +18push.com 18qt.com  18sex.org +18tube.xxx  18ww.life +18yiren.tv 191porn.com +1992qq.xyz 1bigclub.com1bokeponline.top1classtube.com +1jjdg2.vip  1pondo.tv 1pornlist.com1watchmygf.com 1xbet.cm 1xbet.co.ke 2019baidu.xyz21heise360dh.cc  21hub.com21naturals.com 21vv.cc 2371tom.com  249dw7.cn 24hjav.com 24porn.com -24porn.pro 258porn.com 265sdwe3.com -2789av.com2adultflashgames.com 2beeg.me  2bit8.com +24porn.pro 265sdwe3.com +2789av.com 27mmwmmw.top2adultflashgames.com 2beeg.me  2bit8.com 2ch.hk  2chav.com  2dgen.com 2gayboys.com30plusgirls.com 32bm.cc 35s4.com 365buymy.com 36717.info 3789av.com 39group.info3animalsextube.com 3arabporn.com 3d-comics.com 3d-toon.com @@ -5709,202 +6193,214 @@ ysmust.com  ysput.com  ysraw.com  ysrow.com  ysrub.com  ysse 445gei.com 445jun.com 445nan.com 4550.fun  4club.com 4ertik.live -4ertik.one  4f1v1.top 4greedy.com +4ertik.one 4greedy.com 4hu.tv 4kporn.xxx 4ksex.me 4kup.net 4pig.com  4porn.com 4porn4.com  4tube.com 4tubefree.net 4u4c.com 500caocao.com 50dh.app  51cg1.com  51dh.site 51luoli.info 51mh.app 51pincha.cc 520aa.tv 520avtv.com 5278.cc 52av.be 52av.com 52av.one 52fuliji.cc 52hyse.com  531tr.com -55dndn.com  568xe.com +55dndn.com 567321.online  568xe.com 58avgo.com 592r.com 59mvmv.com 5fang.cc 5mb48g.com 5mo.fun 5q5zu9f1.me 6-ar.com 61jxbs42.xyz 62fh1bnj.me 634.tv -66wwmm.com 67id.com 67maoab.com69-sexgames.com  69bag.xyz 69femdom.com  69flv.com 69games.xxx69gayporno.com -69loli.com 69luolie.com 69story.com 69tubesex.com 69vj.com 69xporn.com 69xx.one 69xx560.xyz -6arabs.com6asianporn.com 6e8xr2gk.me6japaneseporn.com 6kea.com 6mature9.com  6neek.com 6sextube.com +66wwmm.com 67maoab.com69-sexgames.com 69av.one  69bag.xyz 69dys.pw 69femdom.com  69flv.com 69games.xxx69gayporno.com69hongdq6.buzz69hongdq7.buzz +69loli.com 69luolie.com 69re.net 69story.com 69tubesex.com 69vj.com 69xporn.com 69xx.one 69xx560.xyz +6arabs.com 6e8xr2gk.me6japaneseporn.com 6kea.com 6mature9.com  6neek.com 6sextube.com 6twseb.com6xxxvideos.com 720video.tv  721av.com  748av.com 75m.co 7719.me 777xporn.com 77maott.com 7mm.tv 7mmtv.sx 7mmtv.tv -7tb.cc  8111y.top 81jia.tv -82mvmv.com 85st.com +7tb.cc  8111y.top 81jia.tv 81tower.com +82mvmv.com 85tube.com 8664av.com -88gals.com  88kkn.com 88square.com -89.com  8949.voto 8kcosplay.com8kpornvids.com +88gals.com  88kkn.com 88manhua.top 88square.com +89.com 8kcosplay.com8kpornvids.com 8muses.com  8muses.io -8muses.xxx 8teenxxx.com8thstreetlatinas.com 8xxx.net90seconds.asia 91avfuli.com 91cy.app  91dy.club -91fans.org 91gay.me 91jinman.com 91md.me 91moxiong.com 91oo.xyz 91porn.best -91porn.com 91porn.work 91porny.com 91qk41rf.com 91rb.com 91rb.net 91se.fun 91sesex.xyz  91sew.xyz 91tv.tw 920share.com  921bb.com  922tp.com 941tube.com 9550.fun 97dounai.top 98916.tv  99quse.cc 99re.com 99thz.cc  99thz.com  9cao9.com 9ccms.me +8muses.xxx 8teenxxx.com8thstreetlatinas.com 8xxx.net90seconds.asia 91avfuli.com 91beiyong.com 91cy.app  91dy.club +91fans.org 91gay.me 91jinman.com 91md.me 91moxiong.com 91oo.xyz91pornplus.com 91porny.store 91qk41rf.com 91quanji.com 91rb.com 91rb.net 91se.fun 91sesex.xyz  91sew.xyz 91sew40.buzz 91vhome.com 920share.com  921bb.com  922tp.com  92hm.life 92hm.top 941tube.com +9527.rocks 9550.fun 978.life 97dounai.top  99quse.cc 99re.com 99thz.cc  99thz.com  9cao9.com 9hentai.ru -9hentai.to 9hentaiz.com 9xav.cc +9hentai.to 9hentaiz.com 9k6v4y.cyou 9tak-nav.buzz 9xav.cc 9xlove.xyz 9zipai.net a-hentai.tv a-teenz.com a1av.xyz -aa1141.com -aa1142.com -aaapp.cyou aabb1802.com aabb1803.com  aadmv.com aalah.me aavs.xyzabbywintersfree.com abclider.comabellalist.com abigass.comaboutporno.netabsoluporn.comabsolutewhores.com!acasadasbrasileirinhas.com.br acces-vod.comacgnmanhua.com -acgww.cyou acjj.net ad69.comadanaatikhaber.com  adbkm.comadorable-teens.net adorevids.com84adult-doujin-free-information-bureau.officialblog.jp adult-h.comadult-home-videos.comadult-list.comadult-sex-games.comadult-web-site.netadult.contents.fc2.comadult.toonsearch.netadult3dcomics.comadult3dfantasycomics.comadult3dporno.comadult3dtoons.comadult789.futoka.jp"adultartlinks.supertop-100.comadultartsites.com adultbay.orgadultblogranking.comadultblogtoplist.comadultcamslover.comadultdeepfakes.comadultdvdmarketplace.comadultdvdtalk.comadultempire.com adultepic.comadulterfree.com adulters.orgadultexpo.com.twadultfilmdatabase.comadultfreex.comadultfriendfinder.comadultgamereviews.comadultgames.games adultgames.meadultgames18.comadultgamesapk.comadultgamescollector.comadultgameson.comadultgamesportal.comadultgamestop.comadultgamingroom.com adultgeek.net adulti01.comadultinfojpn.com adultism.comadultlister.comadultmagazinespdf.com -adulto.vipadultpornvideos.netadultrental.comadultsexgame.bizadultsexgames.bizadultsextoys.com adulttime.comadulttoontube.comadultvideodump.comadultvideotop.comadultvirtualworlds.net aebn.comafappyending.comaffect3dstore.com aflamporn.com aflamsex.netaflamsexhd.com afriboyz.com aga-expo.com agag.tw  agzy1.com  ah-me.comahcathyxxx.com ahegao.online ahentaitv.comahorsecock.comahpornogratuit.comahpornotube.comahsexfilme.comahswingerporno.com +aa77kk.com +aaapp.cyou aabb1802.com aabb1803.com  aadmv.com aalah.me aavs.xyzabbywintersfree.com abclider.comabellalist.com abgsp1.buzz abigass.comaboutporno.netabsoluporn.comabsolutewhores.com!acasadasbrasileirinhas.com.br acces-vod.comacgnmanhua.com +acgww.cyou acjj.net ad69.comadanaatikhaber.com  adbkm.com adorevids.com  adporn.cc adpornu.xyz84adult-doujin-free-information-bureau.officialblog.jp adult-h.comadult-home-videos.comadult-list.comadult-sex-games.comadult-web-site.netadult.contents.fc2.comadult.toonsearch.netadult3dcomics.comadult3dfantasycomics.comadult3dporno.comadult3dtoons.comadult789.futoka.jp"adultartlinks.supertop-100.comadultartsites.com adultbay.orgadultblogranking.comadultblogtoplist.comadultcamslover.comadultclinic.jpadultdeepfakes.comadultdvdmarketplace.comadultdvdtalk.comadultempire.com adultepic.comadulterfree.com adulters.orgadultexpo.com.twadultfilmdatabase.comadultfreex.comadultfriendfinder.comadultgamereviews.comadultgames.games adultgames.meadultgames18.comadultgamesapk.comadultgamescollector.comadultgameson.comadultgamesportal.comadultgamestop.comadultgamingroom.com adultgeek.net adulti01.comadultinfojpn.com adultism.comadultlister.comadultmagazinespdf.com +adulto.vipadultpornvideos.netadultrental.comadultsexgame.bizadultsexgames.bizadultsextoys.com adulttime.comadulttoontube.comadultvideodump.comadultvideotop.comadultvirtualworlds.net aebn.comafappyending.comaffect3dstore.com +afkv28.com aflamporn.com aflamsex.netaflamsexhd.com afriboyz.com agag.tw  agzy1.com  ah-me.comahcathyxxx.com ahegao.online ahentaitv.com ahlxs-me.buzz ahlxsdh.sbsahorsecock.comahpornogratuit.comahpornotube.comahsexfilme.comahswingerporno.com ahtops.com ahtranny.comahvideosexe.com -ahxxx.club aibaobei.me aimei133.com aipa553.com airav.cc -airav.wikiairsextube.com aisejushi.com  ajsjx.comakiba-online.com akiba-web.com albagals.com albastudio.co  alhs.link alhs.xyzall-sex-links.comall3dsexpics.comalldrawingshere.com +ahxxx.club ai7995.site ai91porn.cc aimei133.com aipa553.com airav.cc +airav.wikiairsextube.com aisejushi.com aiwucm-us.sbs aixingge2.cc +aizyk.buzz  aizyk.xyz  ajsjx.comakiba-online.com akthelp.com albagals.com albastudio.co  alhs.link alhs.xyzall-sex-links.comall3dsexpics.comalldrawingshere.com allfet.netallfinegirls.com allhen.onlineallhorsesex.comalliancesages.comallinternal.comalljapanesepass.com allmomsex.com allover30.comallpasswords.comallporncomic.comallpornsites.netallpornsitespass.comallspyclips.comallswingersclubs.orgallthefallen.moe alohatube.com alotporn.comalphaporno.com alt.com altporn.net amabitch.com amakings.comamandalist.com -amanmi.comamapornofilme.comamateur-cougar.comamateur-exhibitionist.orgamateur-fetish.comamateur-gallery-post.comamateur-home-sex.comamateur-porn-clips.comamateur-porn-tube.netamateur-pussies.comamateur-threesomes.comamateuralbum.netamateuranalporn.comamateuranalvideos.comamateurarchiver.comamateurbdsmporn.comamateurblondegirls.comamateurblowjobporn.comamateurcool.comamateurcuckoldporn.comamateure-xtreme.comamateurest.comamateurgalore.netamateurgirlfriends.netamateurhomevids.comamateurhousewifefuck.comamateurmommymovies.comamateuroldsluts.comamateurpages.comamateurporn.photosamateurporndump.comamateurpornhouse.comamateurpornonly.comamateurpornsexvideos.comamateurs-fuck.comamateurs-gone-wild.comamateursecrets.netamateursexpussy.comamateursexstart.nlamateurslovesporn.comamateursvid.comamateurswingersmovies.comamateurthreesomeporn.comamateurwifefuck.comamateurwifetits.comamateurwifevideos.comamateurwivesvideos.com amateurxx.orgamatorialesesso.com amatporn.com amatura.comamazingcuckold.com amodoll.comamourangels.comamsterdamhotescort.comamsterdamluxescort.com anacams.comanal-pantyhose.com  anal.casa -anal.mediaanalamateursex.comanalcamshow.com analdin.comanalfuckvideo.comanalhomeporn.comanallivecams.comanalpornhouse.comanalpornonly.comanalpornosex.com analsaga.comanalscreen.com analtime.org analvids.comancensored.com andygod.com angelweb.jp anibooru.com -anilos.comanimal-hentai.comanimal-porn.netanimalforsex.comanimalincum.com animalporn.meanimalpornxxx.meanimalsporn.netanimalsporn.tvanimalzoosex.meanime-pictures.net anime-tube.pw animegal.netanimehentaihub.comanimeidhentai.comanimepornhd.com animesex.meanimesexhq.comanimestigma.comanimezilla.comanistreaming.xyz annamilk.comannualpelvicexam.comanonproxy.infoansin.erodayo.comantarvasnaclips.comantarvasnax.com anudetube.com anybunny.org anybunny.tv anyhentai.com anyporn.com anypornhd.comanypornsexxx.com +amanmi.comamapornofilme.comamateur-cougar.comamateur-exhibitionist.orgamateur-fetish.comamateur-gallery-post.comamateur-home-sex.comamateur-porn-clips.comamateur-porn-tube.netamateur-pussies.comamateur-threesomes.comamateuralbum.netamateuranalporn.comamateuranalvideos.comamateurarchiver.comamateurbdsmporn.comamateurblondegirls.comamateurblowjobporn.comamateurcool.comamateurcuckoldporn.comamateure-xtreme.comamateurest.comamateurgalore.netamateurgirlfriends.netamateurhomevids.comamateurhousewifefuck.comamateurmommymovies.comamateuroldsluts.comamateurpages.comamateurporn.photosamateurpornhouse.comamateurpornonly.comamateurpornsexvideos.comamateurs-fuck.comamateurs-gone-wild.comamateursecrets.netamateursexpussy.comamateursexstart.nlamateurslovesporn.comamateursvid.comamateurswingersmovies.comamateurthreesomeporn.comamateurwifefuck.comamateurwifetits.comamateurwifevideos.comamateurwivesvideos.com amateurxx.orgamatorialesesso.com amatporn.com amatura.comamazingcuckold.com amodoll.comamourangels.comamsterdamhotescort.comamsterdamluxescort.com anacams.com +anal-f.netanal-pantyhose.com  anal.casa +anal.mediaanalamateursex.comanalcamshow.com analdin.comanalfuckvideo.comanalhomeporn.comanallivecams.comanalpornhouse.comanalpornonly.comanalpornosex.com analsaga.comanalscreen.com analtime.org analvids.comancensored.com andygod.com angel-gto.com angelweb.jp anibooru.com +anilos.comanimal-hentai.comanimal-porn.netanimalforsex.comanimalincum.com animalporn.meanimalpornxxx.meanimalsporn.netanimalsporn.tvanimalzoosex.meanime-pictures.net anime-tube.pw animegal.netanimehentaihub.comanimeidhentai.comanimepornhd.com animesex.meanimesexhq.comanimestigma.comanimezilla.comanistreaming.xyz annamilk.comannualpelvicexam.comansin.erodayo.comantarvasnaclips.comantarvasnax.com anudetube.com anybunny.org anybunny.tv anyhentai.com anyporn.com anypornhd.comanypornsexxx.com anysex.comanyshemale.com  anyxxx.me anyxxx.proaoaou.iillii.net -aoxx69.net  apina.bizapornotube.net aporntv.comapornvideo.com  appyq.com apyarstorybooks.blogspot.com arabgirls.usarabianchicks.com arabnek.com +aoxx69.net  apina.bizapornotube.net aporntv.comapornvideo.com +app756.com  appyq.com apyarstorybooks.blogspot.com  aqdlt.netarabianchicks.com arabnek.com arabxn.com arabxnxx.org arabysexy.comarabysexy.mobiarcadewank.com -archivx.to  area51.toarirangmeari.com -armovs.comartnudegalleries.comartoferotica.info arzon.jp asexdoll.com asextube.netashemaletube.comashemaletv.com asiacrazy.xyzasiamoviepass.comasian-anal-sex.com asian-max.comasianboygay.comasiancamgirllive.comasiancamly.comasianfreeporn.netasiangfvideos.comasiangirlsnextdoor.com asianphd.comasianporn.restasianporn.sexyasianpornjav.comasianpornlabs.comasianpornmovies.comasianpornonly.comasianporntrends.comasianprivatetube.comasianscreens.com asiansex.sexyasiansexdiary.comasiansmaster.comasianthumbs.orgasianwifeporn.comasianxxxjoy.comasianxxxvideos.cc asknudes.com asmhentai.com asmr.gay asmrbuluo.com asredas.com ass4all.comassesphoto.comassistirhentai.com assoass.com assylum.com atasale.comatkgallery.com  atube.sex  atube.xxx -atubex.com auntymaza.com av-baron.comav-channel.com  av-th.net -av-top.com av01.tv av11.org  av1688.cc av234567.com  av369.net -av4.us av69.tv av69.us av6k.com +archivx.to  area51.to +armovs.comartnudegalleries.comartoferotica.info arzon.jp asexdoll.com asextube.netashemaletube.comashemaletv.com asiacrazy.xyzasiamoviepass.comasian-anal-sex.comasianboygay.comasiancamgirllive.comasiancamly.comasianfreeporn.netasiangfvideos.comasiangirlsnextdoor.com asianphd.comasianporn.restasianporn.sexyasianpornjav.comasianpornlabs.comasianpornmovies.comasianpornonly.comasianporntrends.comasianscreens.com asiansex.sexyasiansexdiary.comasiansmaster.comasianthumbs.orgasianwifeporn.comasianxxxvideos.cc asknudes.com asmhentai.com asmr.gay asmrbuluo.com asredas.com ass4all.comassesphoto.comassistirhentai.com assoass.com assylum.comatkgallery.com attackers.net  atube.sex  atube.xxx +atubex.com auntymaza.com av-baron.comav-channel.com av-movie.cc  av-th.net +av-top.com av01.tv av11.org  av1688.cc  av369.net +av4.us av69.tv av69.us av6k.com av6k.vip avbebe.com  avcar.vip -avcens.xyz  avcnn.com avcrempie.com avday.tv +avcens.xyz  avcnn.com avcrempie.com avday.tv avdby-up.buzz avdudu.top avdwang.xyz avelip.comaventertainments.com avfox.cc avgigi.com  avgle.com  avgle.net avgod.club  avhbo.com avhd101.com -avhome.one -avinin.com avizoon.site avizoone.com avjb.com avjoy.me  avlulu.cc avn.com avnana5.com -avpanda.cc avple.tv +avhome.one avhu.com +avinin.com avizoon.site avizoone.com avjb.com avjiasu.com avjoy.me avjzy67.xyzavking-mp4.sbs  avlulu.cc avn.com avnana5.comavnight-shipin.com +avpanda.cc avple.tv  avrila.cc +avrila2.ccavrila2023.top avrila23.cc avriri.top avsee01.tv avseesee.com  avstar.me -avwong.com  avwto.com awflapp.topaxbdoll.com.tw ayshdade.info ayshdee.xyz +avwong.com  avwto.com  avxxc.com awflapp.top awjq.cc +awwcn.buzz  awwcn.xyzaxbdoll.com.tw ayshdade.info ayshdee.xyz aziani.com aznude.com b-eroland.net -b3boos.com  b3bos.com  b6b33.combabecentrum.combabeimpact.com babepedia.com babes34.com babes34.probabesandbitches.netbabesandgirls.combabesandstars.combabesaround.com babesbang.combabesinporn.combabesmachine.combabesnetwork.combabesofindia.combabesource.com babestube.com babosas.com babushky.clubbabycondom.combabylongirls.co.uk babypink.tobackdoorlesbians.combackroomcastingcouch.com  bacon.combacsitinhyeu.vnbadasianpussy.com badjojo.com badoinkvr.combadsexygirl.combadteenspunished.com badvirtue.com baeb.comballbustingtube.com bamtoki.com banan.tvbanatal3arab.com banatfun.combang-movies.com bangbros.combangbrosnetwork.com bangher.netbangkokbangers.combangkokstreetwhores.combangyourwife.com baraero.com barelist.com bareporno.com barfuck.combarium-enema.com batsa.mebattleforcecomix.com bb33.net bbbaihu.vip bbc-anal.combbcpornonly.combbwmilftube.com  bcy01.com bdawnvr.xyz bdsm-mov.net bdsm.com bdsmboard.orgbdsmbunker.com bdsmcafe.com bdsmland.orgbdsmlibrary.com +b3boos.com  b6b33.combabecentrum.combabeimpact.com babepedia.com babes34.com babes34.probabesandbitches.netbabesandgirls.combabesandstars.combabesaround.com babesbang.combabesinporn.combabesmachine.combabesnetwork.combabesofindia.combabesource.com babestube.com babosas.com babushky.clubbabycondom.combabylongirls.co.uk babypink.tobackdoorlesbians.combackroomcastingcouch.com  bacon.combacsitinhyeu.vnbadasianpussy.com badjojo.com badoinkvr.combadsexygirl.combadteenspunished.com badvirtue.com baeb.com  bai29.xyzballbustingtube.com bamtoki.com banan.tv banatfun.combang-movies.com bangbros.combangbrosnetwork.com bangher.netbangkokstreetwhores.combangyourwife.com baraero.com barelist.com bareporno.com barfuck.combarium-enema.com barss1207.pro batsa.mebattleforcecomix.com bb33.net bbbaihu.vip bbc-anal.combbcpornonly.com  bbqm1.xyz bbw-yoyo.buzzbbwmilftube.com bbwyoyo.info  bcy01.com bdsm-mov.net bdsm.com bdsmboard.orgbdsmbunker.com bdsmcafe.com  bdsmhd.cc bdsmland.orgbdsmlibrary.com bdsmlr.combdsmpornonly.combdsmsexgame.combdsmstreak.combdsmtubexxx.com  bdsmtv.ccbeastiegals.combeastysexlinks.combeastythumbs.combeautifulandbusty.combeautyescortsamsterdam.combedstegratisporno.com beeg.com  beeg.rest beegfree.com  beejp.net befuck.com -befuck.net  bejav.netbekijkporno.nlbelamionline.combellebound.com -bellesa.co bellotube.com benaughty.funbengalisexvideos.comberlincompanions.combest-sex-games.combest3dhere.combestamateurcumshots.combestcamsites.netbesterpornos.combestescortgirls.nlbestfreecams.clubbestfreesexgames.combestfreetube.netbestfreetube.xxxbestgames-2022.combesthandjobporn.combesthentaitube.combestiality.gurubestialitysextaboo.combestialitytaboo.tvbestialityvideo.usbestjapanesepornsites.combestjavporn.combestjavporn.net bestkinky.combestlistofporn.com bestporn.subestpornclip.combestporncomix.combestporngames.combestpornsites.eubestpornsites.guidebestporntube.mebestpremiumpornsite.combestsexcam.combesttitstube.combesttube4you.combestxxxsites.combetterhdporn.combeurettesvideo.com bexjt5wz.xyz -bffshd.com +befuck.netbeiyongzhan1.com  bejav.netbekijkporno.nlbelamionline.combellebound.com +bellesa.co bellotube.com benaughty.funbengalisexvideos.comberlincompanions.combest-sex-games.combestcamsites.netbesterpornos.combestescortgirls.nlbestfreecams.clubbestfreesexgames.combestfreetube.netbestfreetube.xxxbestgames-2022.combesthandjobporn.combesthentaitube.combestiality.gurubestialitysextaboo.combestialitytaboo.tvbestialityvideo.usbestjapanesepornsites.combestjavporn.combestjavporn.net bestkinky.combestlistofporn.com bestporn.subestpornclip.combestporncomix.combestporngames.combestpornsites.eubestpornsites.guidebestporntube.mebestpremiumpornsite.combestsexcam.combesttitstube.combestxxxsites.com besuty99.combetterhdporn.combetween-legs.combeurettesvideo.com +bffshd.com  bhggn.xyz +bhzyk.buzz +bhzyw2.top biaoqs.xyz biaoqs1.xyz biaoqs2.xyz bidong25.com bidong9.com bigassporn.tvbigblackdicklover.combigboobsalert.combigboobsandhotsex.combigboobsonline.orgbigboobswives.com bigboss.video bigcocker.com bigdick.combigdickorgasm.combigindiansex.mobi bigporn.com  bigsex.tvbigtitsextapes.combigtitsgallery.netbigtitsmodelsdirectory.combigtitsthreesomes.combigtopsites.com  biguz.net bijukujo.club -bimbim.com bimbolive.com bioporno.com  biqle.org biqle.ru bisyoujyogyaruge.topaz.ne.jpbitchesgirls.combitchmomporn.com bitporno.combizarresexuality.com bkkdown.siteblackamateurfuck.comblackamateursvideos.com blacked.comblackhomeporn.comblackmonsterterror.comblackshemalevideo.comblacksonblondes.comblacktowhite.net -blaoshi.ccblog.descargasgay.combloggrowup.comblogterest.net blowjobit.comblowjobqueens.netbluffyporn.com bobs-tube.com bobvoyeur.com bodgirls.combodyfluids-jav.com  bokep.net bokepseks.org bokepvidz.combondagecomixxx.netbondagesex-xxx.com bongacams.com +bimbim.com bimbolive.com bioporno.com  biqle.org biqle.ru bisyoujyogyaruge.topaz.ne.jpbitchesgirls.combitchmomporn.com bitporno.combizarresexuality.com bjini.cc bkkdown.siteblackamateurfuck.comblackamateursvideos.com blacked.comblackhomeporn.comblackmonsterterror.comblackshemalevideo.comblacksonblondes.comblacktowhite.net +blaoshi.ccblog.descargasgay.combloggrowup.comblogterest.net blowjobit.comblowjobqueens.netbluffyporn.com +blylq.buzz bobs-tube.com bobvoyeur.com bocici.buzz bodgirls.combodyfluids-jav.com  bokep.net bokepseks.org bokepvidz.combondagecomixxx.netbondagesex-xxx.com bongacams.com bonyu.cyouboobieblog.com boobpedia.comboobsrealm.com boodigo.com boodigogo.com book18.org bookmark.xxx -booloo.com boomba.club  booru.orgbootysource.com +booloo.com boomba.club  booru.orgbootysource.com boqimod.com boqitube.cc borwap.com boshancy.combossagency.co.uk  boulx.com boundhub.combountyhunterporn.com  box57.one boy18tube.com boycall.comboyfriendtv.com boylabs.net boylove.com boypost.com boysfood.comboyspornpics.com -boyvid.com boyztube.combrandporno.combrasilincesto.combrasiltudoliberado.combravoerotica.com bravoporn.combravoteens.com bravotube.net bravotube.tvbrazzers-porno.onlinebrazzers-xxx.netbrazzersporn.mobi brazzfan.combrdteengal.combreasthealthinfo.combreath-takers.combritsexcash.combrliilantsdates.combrokenteens.com  bromo.com brourou.combrutalbdsmtube.combrutalfetish.com -bsersd.xyz bubbaporn.com buhidoh.netbukkake-jav.com bukkake.linkbululusexdoll.com bunnylust.comburningcamel.combustymomsvideo.combustynudebabes.com -buzzav.com bvfce6wz.xyz bwin.com byjav.me  byjhd.com  bzazi.com  c0930.com -cableav.tv cableav.xyz  caime.xyzcallabitch.org calvappd.me cam4.com  cam69.comcambaddies.com  cambb.xxx cambiaip.org  cambro.tv  camcam.cc camdolls.comcameraboys.com camfinder.com -camfox.comcamgirlfinder.netcamgirlstemple.comcamgirlvideos.org camgoddess.tv camonster.com camrabbit.com cams.com camsoda.com camsoda1.comcamstagestudio.com camster.com camstreams.tv camsvids.tv camvideos.org camvideos.tvcamvideoshub.comcamwhores-tv.comcamwhores.forum camwhores.tvcamwhoresbay.comcamwhoreshd.com camwhoria.comcandidforum-videos.comcandycumcity.comcandypleasure.comcaribbeancom.comcaribbeancompr.comcartoon-sex.tv cartoon18.comcartoon3thumbs.comcartoonporn.comcartoonporno.xxxcartoonpornonly.comcartoonpornvideos.comcartoonregistry.comcartoonscity.comcartoonsexfantazy.comcartoontube.comcartoonville.netcashback69.comcashvideotube.comcastingcouch-x.comcasualhomemadesex.comcatalinacruz.com catmiimi.com  cbart.net cc18.biz cc18.tv +boyvid.com boyztube.combrandporno.combrasilincesto.combrasiltudoliberado.combravoerotica.com bravoporn.combravoteens.com bravotube.net bravotube.tvbrazzers-porno.onlinebrazzers-xxx.netbrazzersporn.mobi brazzfan.combrdteengal.combreasthealthinfo.combreath-takers.combritsexcash.combrokenteens.com  bromo.com brourou.combrutalbdsmtube.combrutalfetish.com bsxm1213.pro bubbaporn.com buhidoh.netbukkake-jav.combululusexdoll.com bunnylust.comburningcamel.combustymomsvideo.combustynudebabes.com +buzzav.com bwin.combygpp1207.world byjav.me  byjhd.com  c0930.com +cableav.tv cableav.xyz  cai21.xyz  caime.xyzcallabitch.org cam4.com  cam69.comcambaddies.com  cambb.xxx  cambro.tv  camcam.cc camdolls.comcameraboys.com camfinder.com +camfox.comcamgirlfinder.netcamgirlstemple.com camgoddess.tv camonster.com camrabbit.com cams.com camsoda.com camsoda1.comcamstagestudio.com camster.com camstreams.tv camsvids.tv camvideos.org camvideos.tvcamvideoshub.comcamwhores-tv.comcamwhores.forum camwhores.tvcamwhoresbay.comcamwhoreshd.com camwhoria.comcandidforum-videos.comcandycumcity.comcandypleasure.comcaribbeancom.comcaribbeancompr.comcartoon-sex.tv cartoon18.comcartoon3thumbs.comcartoonporn.comcartoonporno.xxxcartoonpornonly.comcartoonpornvideos.comcartoonregistry.comcartoonscity.comcartoonsexfantazy.comcartoontube.comcartoonville.netcashback69.comcashvideotube.comcastingcouch-x.comcatalinacruz.com catmiimi.com +cavhot.com  cbart.net cc18.biz cc18.tv cc18tv.com ccav69.info  ccav69.meccav691api.com ccavb.tv celebforum.cocelebmasta.livecelebritygay.comcelebritynakeds.comcelebrityslips.comcelebritystorysite.comcelebsporno.comcelebsroulette.com cenkei.comcentervillage.co.jp -cerdas.comcervical-exam.com ceskeporno.cz  cfake.com cfwives.comcgkate.jinvod.comcharmescorts.com chatsex.xxxchatterbate.iochaturbate.com -chedteb.euchengjuanseo.comcherry-tale.comcherryasia.comcherrynudes.com cherrypai.comcherrypanpan.comcherrypimps.comcherrypornhd.comchickteases.com chikiporn.comchinese-porn-videos.comchinese-xnxx.comchinesespanking.comchinesexxxporn.net  chla3.com -chocam.comchubbypornonly.com chunja19.net chuporno.com chwr7s8u.com  chyoa.comcindymovies.comcinepornogratis.comcitas-para-mayoresde50.eccitasecuador.comcity-hentai.comcityheaven.netcityoflove.comcitytourgirls.com ciyuanjie.cc +cerdas.com ceskeporno.cz  cfake.com cfwives.comcharmescorts.comchatgptvideo.xyzchatgptvideob.buzz chatsex.xxxchatterbate.iochaturbate.comchengjuanseo.comchengrendouyin-app.comchengrenshipin-app.comcherry-tale.comcherryasia.comcherrynudes.com cherrypai.comcherrypanpan.comcherrypimps.comcherrypornhd.com chianxv.buzzchickteases.com chikiporn.comchinasex.com.eschinchuqi-av.latchinese-porn-videos.comchinese-xnxx.comchinesespanking.comchinesexxxporn.netchipmong13g.buzz  chla3.com +chocam.com chuangb15.xyzchubbypornonly.com +chuneo.xyz chunja19.net chuporno.com chutuno.fun +chuzs2.xyz chwr7s8u.com  chyoa.comcindymovies.comcinepornogratis.comcitas-para-mayoresde50.eccitasecuador.comcity-hentai.comcityheaven.netcityoflove.comcitytourgirls.com ciyuanjie.cc ckss98.comclaravenger.com clasporno.orgclassymomsex.comclimateone.blogspot.co.idclinical-videos.com -clip16.com clipcake.com cliphayho.comcliphunter.comclipsaoyai.com clipsbai.com clipseksi.com clipsex.asia clitgames.comcloudyzgirl.comclubseventeen.comclubsweethearts.com clubtubes.com cnnamador.comcockofhorse.comcocksuckersguide.comcocktailsandcocktalk.com cockyboys.comcoedcherry.comcoithienthai.comcoitustube.comcolegialasdeverdad.comcolegialasreales.comcoliriodemacho.com.brcollection-3d.comcollectionofbestporn.comcollegepornonly.comcollegesexgames.comcolliderporn.comcolombianas.webcamcomdotgame.com -comeav.com comicbox.xyzcomicscartoonporn.comcomicsporno.escomicunivers.comcomicuniverse.orgcomixzilla.com  conan.xxxcontactossexoecuador.comcool-comics.com +clip16.com clipcake.com cliphayho.comcliphunter.comclipsaoyai.com clipsbai.com clipseksi.com clipsex.asia clitgames.comcloudyzgirl.comclubseventeen.comclubsweethearts.com clubtubes.com  clzz2.xyz cnnamador.com  cnzjp.xyzcockofhorse.comcocksuckersguide.comcocktailsandcocktalk.com cockyboys.comcoedcherry.comcoithienthai.comcoitustube.comcolegialasdeverdad.comcolegialasreales.comcoliriodemacho.com.brcollection-3d.comcollectionofbestporn.comcollegepornonly.comcollegesexgames.comcolliderporn.comcolombianas.webcamcomdotgame.com +come29.xyz comicbox.xyzcomicscartoonporn.comcomicsporno.escomicunivers.comcomicuniverse.orgcomixzilla.com  conan.xxxcontactossexoecuador.comcool-comics.com cool18.com coolinet.netcoolsexnew.com copro.pw  coqnu.comcorbinfisher.comcosplay-jav.comcosplayeromania.jpcosplayporntube.comcosplayworld.netcougarsexmovies.comcouplecam.co.uk cp44.net -cpz.to crabporn.comcrazy-amateurs.com crazyav.xyz crazybook.xyz crazycloud.rucrazyfiction.xyzcrazylivecams.comcrazynovel.xyz crazyshit.comcrazyxxx3dworld.comcrazyxxx3dworld.netcrazyxxx3dworld.orgcrazyxxxworld.com creamasia.comcreamlemon.infocreampiehomevideos.com crocotube.comcruel-furies.comcrystalmiss.com csakporno.hu csgfnmdb.com -cshive.comcsnjcbnxdnb.comcuckfilmswifefuck.com cuckold69.comcuckoldfuck.comcuckoldingwifey.comcuckoldinterracialporn.comcuckoldinterracialwife.comcuckoldplacetube.comcuckoldporntube.comcuckoldvideos.xxxcuckoldwifesex.comcuckoldwifesexxx.comcuckoldwifetube.com cuckporn.comcuckvideos.comcuckwatchingwife.com cuckwimp.com -cuebic.bizcultoferotica.comcultura-kolomna.ru cum4k.cccumasianporn.com -cumfox.com cumlouder.comcumshotlist.comcumswappingsis.comcumteenporn.comcuntempire.comcurvybbwwives.comcurvyerotic.com -cwcams.com cy22.tv cyyeshb.com czechav.comczechbiporn.comczechcasting.comczechhunter.comczechlesbians.comczechmassage.comczechstreets.comczechvideo.org czechvr.comczechwifeswap.com  d-upp.comd2mrry2to5rg.com +cpz.to crabporn.comcrazy-amateurs.com crazyav.xyz crazybook.xyz crazycloud.rucrazyfiction.xyzcrazylivecams.comcrazynovel.xyz crazyshit.comcrazyxxx3dworld.comcrazyxxx3dworld.netcrazyxxx3dworld.orgcrazyxxxworld.com creamasia.comcreamlemon.info crocotube.com crtsgfb1.topcruel-furies.comcrystalmiss.com csakporno.hu +cshive.comcuckfilmswifefuck.com cuckold69.comcuckoldfuck.comcuckoldingwifey.comcuckoldinterracialporn.comcuckoldinterracialwife.comcuckoldplacetube.comcuckoldporntube.comcuckoldwifesex.comcuckoldwifesexxx.comcuckoldwifetube.com cuckporn.comcuckvideos.comcuckwatchingwife.com cuckwimp.com +cuebic.bizcultoferotica.comcultura-kolomna.ru cum4k.cccumasianporn.com cumlouder.comcumshotlist.comcumswappingsis.comcumteenporn.com cunhua.picscuntempire.comcurvybbwwives.comcurvyerotic.com +cwcams.com cy22.tv czechav.comczechbiporn.comczechcasting.comczechhunter.comczechlesbians.comczechmassage.comczechstreets.com czechvr.comczechwifeswap.com cztv117.shop  d-upp.comd2mrry2to5rg.com d2pass.com da3dsoul.dev daboja18.com -dachix.comdaddyslilangel.com daft.sex daftporn.comdaftpost.github.iodaftsex-hd.com daftsex.comdaftsex.github.io  dagfs.comdailybasis.comdailyporn.clubdaindianporn.com -damduc.org damnhotz.com damplips.comdanskpornofilm.comdansmovies.comdaretoku-eromanga.infodarkcategories.com darknaija.comdarknessporn.com darknun.comdarksidemagazine.comdastanhisexy.cc datawav.clubdate2night.xyz ddd-smart.net deasians.com dechamora.comdecorativemodels.com -deeper.comdeepfake-porn.comdeepfakeporn.netdefinebabe.comdefinefetish.comdeiightfuidates.net -demfhz.xyzderpibooru.org desihoes.com desiporn.tubedesipornfilms.comdesire-xx.supertop-100.comdesiresecrets.comdetentiongirls.comdeutsch-sexfilme.com!deutsche-pornos-kostenlos.xxx deutschepornos-kostenlos.netdeutschsex.comdeviantclip.comdevilsfilm.comdexterhorn.com dezyred.com -df-bet.com  dgaqp.com  dgwav.comdhlestudio.com.codiamantewebcam.comdiamondgirls.co.ukdiamondgirlstudio.com dianapost.com  diao.asiadiarrheafan.livedoor.blog dickeomas.comdickhardon.com didilist.comdigital-anime.comdigitaldesire.com dinotube.com dirty.gamesdirtyasiantube.comdirtydoglinks.comdirtyfarmer.com dirtyflix.comdirtyhomefuck.comdirtyleague.comdirtyonline.comdirtypornvids.com dirtyscat.orgdirtyshack.com dirtyship.comdiscountedporn.comdiscountporn.clubdisneyhentai.com divas.com.uydiyarbakirescort.com -dkcloud.cc  dkk37.com dldlinks.com dldshare.netdlsitenews.com  dnaav.com dobbyporn.comdoctor-videos.comdodgersexcartoons.com  doeda.comdogcumshot.net dogfart.comdogfartnetwork.com dogmovie.net dogofcum.com dogspics.net dojin-dl.com  dojin.com dojindb.netdojinmanga.netdojinwatch.com dollnight.com domywife.com donkparty.com  donmai.usdonpornogratis.comdonsnaughtymodels.com doodhwali.comdopaminegirl.comdoseofporn.comdotfreesex.comdoujin-eromanga.comdoujin-freee.comdoujin-info.netdoujin-night.comdoujincg.blog.jpdoujinfree.comdoujinland.infodoujinnomori.com doujins.com douyintt10.medouzinnsi-eromannga.comdownloadpass.comdragonhentai.netdrbdsmporn.com drbizzaro.comdreamamateurs.comdreammovies.com driverxxx.comdrivevideo.xyz drkogyi.comdrmgmggyi-mm.blogspot.com drtuber.com +dachix.comdaddyslilangel.comdafanhao-app.com daft.sex daftporn.comdaftsex-hd.com daftsex.com  dagfs.comdailybasis.comdailyporn.clubdaindianporn.com +damduc.org damplips.comdanskpornofilm.comdansmovies.comdaretoku-eromanga.infodarkcategories.com darknaija.comdarknessporn.com darknun.comdarksidemagazine.com dasaob.onlinedastanhisexy.cc datawav.clubdate2night.xyz ddd-smart.net +ddff66.com +ddff77.com deasians.com dechamora.comdecorativemodels.com +deeper.comdeepfake-porn.comdeepfakeporn.netdefinebabe.comdefinefetish.comderpibooru.org desihoes.com desiporn.tubedesipornfilms.comdesire-xx.supertop-100.comdesiresecrets.comdetentiongirls.comdeutsch-sexfilme.com!deutsche-pornos-kostenlos.xxx deutschepornos-kostenlos.netdeutschsex.comdeviantclip.comdevilsfilm.comdexterhorn.com dezyred.com  dgaqp.com  dgwav.com dh44.loldhlestudio.com.codiamantewebcam.comdiamondgirls.co.ukdiamondgirlstudio.com dianapost.comdiarrheafan.livedoor.blog dickeomas.comdickhardon.com didilist.comdigital-anime.comdigitaldesire.com dinotube.com dirty.gamesdirtyasiantube.comdirtydoglinks.comdirtyfarmer.com dirtyflix.comdirtyhomefuck.comdirtyleague.comdirtyonline.comdirtypornvids.com dirtyscat.orgdirtyshack.com dirtyship.comdiscountedporn.comdiscountporn.clubdisneyhentai.com divas.com.uydiyarbakirescort.com diyuser.buzz  djkav.mom +dkcloud.cc  dkk37.com dlap001.xyz dlap301.com dldlinks.com dldshare.netdlsitenews.com  dnaav.com dobbyporn.comdoctor-videos.comdodgersexcartoons.com  doeda.comdogcumshot.net dogfart.comdogfartnetwork.com dogmovie.net dogofcum.com dogspics.net dojin-dl.com  dojin.com dojindb.netdojinmanga.netdojinwatch.com domywife.com donkparty.com  donmai.usdonpornogratis.comdonsnaughtymodels.com doodhwali.comdopaminegirl.comdoseofporn.comdotfreesex.comdoufurufabu.xyzdoujin-eromanga.comdoujin-freee.comdoujin-info.netdoujin-night.comdoujincg.blog.jpdoujinfree.comdoujinland.infodoujinnomori.com doujins.com douyintt10.medouzinnsi-eromannga.comdownloadpass.comdragonhentai.netdrbdsmporn.com drbizzaro.comdreamamateurs.comdreammovies.com driverxxx.comdrivevideo.xyz drkogyi.comdrmgmggyi-mm.blogspot.com drtuber.com drunk6.comdrunkenstepfather.comdrunkentop.com dsex.to -dswz88.xyzdualeotruyen1s.comdubai-escort-list.comdubaihotties.org duckmovie.comdudethrill.com duga.jpdulceecuador.com dump.xxx dumps69.com dumpxxx.netduoweiweek.com -dutrai.comdvdtrailertube.com -dvh30n.vip  dx9527.cc dxyav.co -dykycl.com dyttapi.com dyttapis.com  e-cba.org -e-goods.ru e53w.com e621.neteadultgames.com earlyob.com eastbabes.comeasymatureporn.com easypic.comeasysexporn.com ebaka.ru ebalovo.com ebenporno.comebonyinlove.comebonywebcamhub.com  ecchi.xxxecchinohentai.ruechichimato.comecuatorianas.best ed21.cc edengay.netedgemeplease.com -efuckt.com  efukt.com egotastic.com +dswz88.xyzdualeotruyen1s.comdubai-escort-list.com duckmovie.comdudethrill.com duga.jpdulceecuador.com dump.xxx dumpxxx.netduolaapian126.xyzduolaapian127.xyzduoweiweek.com +dutrai.comdvdtrailertube.com  dx9527.cc dxyav.co dyfl1.pw +dykycl.com  e-cba.org +e-goods.ru e53w.com e621.neteadultgames.com eastbabes.com easypic.comeasysexporn.com ebalovo.com ebenporno.comebonyinlove.comebonywebcamhub.comecchinohentai.ruechichimato.comecuatorianas.best edengay.netedgemeplease.com  efukt.com egotastic.com ehv.cceighteen-store18x.jp eilieili.cc ekolojik.org el-ladies.com electbabe.comelephantlist.comelephanttube.comelephanttubenew.comelitebabes.comeliteindianporn.com -elitvip.ru elog-ch.com elog-ch.net elpadrote.comelpornoamateur.com#elpube-scat-movies.blogspot.com empflix.comempornium.site"encuentroscasualesoecuador.comenema-porn.comenema-videos.comenemabasics.comenemaexperiences.comenemahistory.comenemainformation.comenemanozzle.infoenemaporn.blogspot.comenemaprocedure.comenemarotica.comenemas4fun.comenemasexfetish.comenemasupplier.com enematube.com enf-cmnf.comenjoyasianporn.com enjoyfuck.com entensity.net epikporn.com eporner.com  erito.com ero-anime.netero-comic-hunter.net ero-kawa.comero-ma-nia.comero-manga-platinum.netero-mangalife.com  eroan.xyz erocurves.comerodou.tousatu.funerodouga.8sp.bizerodougazo.comerodoujinshi-world.com eroelog.com eroero69.work erofights.comerofullsets.net -erofus.com erogames.comerogazo-jp.neterogazo-ngo.comerogazopple.comerogazou-pinkline.comerogazoufactory.com erohentai.neteromanga-ace.comeromanga-cafe.comeromanga-hentai.comeromanga-mainichi.comeromanga-school.comeromangajukujo.com eromazofu.com  erome.com erome.iteropasture.com eropics.org +elitvip.ru elog-ch.com elog-ch.netelpornoamateur.com#elpube-scat-movies.blogspot.comempero-right.mom empflix.comempornium.site"encuentroscasualesoecuador.comenema-porn.comenema-videos.comenemabasics.comenemaexperiences.comenemahistory.comenemainformation.comenemaporn.blogspot.comenemarotica.comenemas4fun.comenemasexfetish.com enematube.com enf-cmnf.comenjoyasianporn.com enjoyfuck.com entensity.net epikporn.com eporner.com  erito.com ero-anime.netero-comic-hunter.net ero-kawa.comero-ma-nia.comero-manga-platinum.netero-mangalife.com  eroan.xyz erocurves.comerodou.tousatu.funerodouga.8sp.bizerodougazo.comerodoujinshi-world.com eroelog.com eroero69.work erofights.comerofullsets.net +erofus.com erogames.comerogazo-jp.neterogazo-ngo.comerogazopple.comerogazou-pinkline.comerogazoufactory.com erohentai.neteromanga-ace.comeromanga-cafe.comeromanga-kong.comeromanga-mainichi.comeromanga-school.comeromangajukujo.com eromazofu.com  erome.com erome.iteropasture.com eropics.org eropics.toeroprofile.com erosberry.com eroshiko.net erotelki.orgerotera.blogo.jp eroterest.net erothots.coerotic-artsites.comerotic-hentai.comerotic-photos.neteroticart-top100.comeroticbeauties.neteroticbeautyhub.comerotichdworld.com erotictube.me erotikaweb.hu erovizor.ru -eroxia.com eroyakuba.com ertk.net escobarvip.it escort.guide escort24h.netescortamsterdam1.comescortdude.comescortgirls.beescortrankings.ukeskimotube.com esmatube.comesperanzagomez.orgesposasymaridos.comestudio360.com.coestudiopenthouse.comethiosex2.wordpress.comeurobabeindex.comeurogirlsescort.comeuropornstar.comeurosexscene.com evaelfie.com evemodels.com everia.clubeverydayporn.coevgld7cg58l8.com evilangel.com evilx.su examroom.infoexgfvideos.xxxexgirlfriendmarket.com exiporn.com  exoav.comexotic-ghana.comexoticuganda.comexplicittube.comexploitedcollegegirls.comexploitedteensasia.comexplorespanking.comexporntoons.netexposedlatinas.com exs8fkw0.xyzextraasian.comextraindiansex.comextrajapaneseporn.comextreme-board.comextremepornfilms.com exxxtra.netexxxtrasmall.comexxxtrasmall1.com eyny.com  f6988.com +eroxia.com ertk.net escobarvip.it escort.guideescortamsterdam1.comescortdude.comescortgirls.beescortrankings.ukeskimotube.com esmatube.comesperanzagomez.orgesposasymaridos.comestudio360.com.coestudiopenthouse.comethiosex2.wordpress.comeurobabeindex.comeurogirlsescort.comeuropornstar.comeurosexscene.com evaelfie.com evemodels.com everia.clubeverydayporn.co evilangel.com evilx.suexgfvideos.xxxexgirlfriendmarket.com exiporn.com  exoav.comexotic-ghana.comexoticuganda.comexplicittube.comexploitedcollegegirls.comexploitedteensasia.comexplorespanking.comexporntoons.netexposedlatinas.comextraasian.comextraindiansex.comextrajapaneseporn.comextreme-board.comextremepornfilms.com exxxtra.netexxxtrasmall.comexxxtrasmall1.com eyny.com f5pf.com  f6988.com f95zone.to  faapy.comfabhairypussy.com fabuye.top fakehub.com faketaxi.com fakings.com  fakku.net faldgjalg.xyzfameregistry.com family-sex.mefamily-simulator.iofamilypies.net familyporn.tvfamilypornhd.comfamilysexsimulator.comfamilysimulator.comfamilysimulator.iofamilystrokes.comfamilyswap.xxxfamous-nudes.comfamousinternetgirls.com$ famousinternetgirlsgalleries.comfamousnudes.comfamouspornstars.com fanaken.com -fanfox.net fangsung.comfanhaodian.com fank.rufanleakstoday.comfanqianglu.com fans-here.com fansnudes.com fansteek.comfantasiasguatemala.com fantasti.ccfantasticyoungporn.com fap-xxx.com  fap18.net +fanfox.net fangsung.comfanhaodian.com fanhowab.buzz fank.rufanleakstoday.comfanqianglu.com fans-here.com +fans17.com fansnudes.com +fansone.co fansteek.comfantasiasguatemala.com fantasti.cc fap-xxx.com  fap18.net fap666.com fapality.com fapcat.com fapdude.com faperoni.com fapforfun.net faphdporn.com faphouse.com fapmovz.com fapnado.com fapopedia.netfappcelebs.comfappeningbook.comfappeningthots.com fappenist.com fapphub.com fapporn.mefaproulette.cofaproulette.online fapsafari.com fapster.xxxfapteencam.com -fapvid.com  fapxl.comfareastpornhub.comfastindianporn.com fatstube.com  fau11.comfavelaporno.comfavepornmovs.comfavepornvids.comfavjapaneseporn.com -fawgaf.xyz  fbjav.comfbooktaiwan.com  fc2ppv.tv fcw.xxx  fcww0.com  feet9.com +fapvid.comfareastpornhub.comfastindianporn.com fatstube.comfavelaporno.comfavepornmovs.comfavepornvids.comfavjapaneseporn.comfbiqiyiav.buzz  fbjav.comfbooktaiwan.com  fc2ppv.tv fcw.xxx  fcww0.com  feet9.com fei.ru feipang.linkfemalestars.com femdomcc.net -femjoy.com femscat.comferronetwork.comfestinhasbrasil.com fetish-bb.comfetishbank.netfetishdreamz.com fetishes.camfetishfishcams.comfetishpapa.comfetishpornfilms.comfetishpornonly.comfetishshrine.comfetishtown.net fetlife.com fffucked.com fgirl.ch fi11.cn fi11.com fi11av1.com fi11tv1.comfictionmania.tvfilesmonster.vip -filme2.xxxfilmeleporno.xxxfilmeporno.blogfilmeporno.xxxfilmesdesexo.blogfilmesporno.com.brfilmesporno.net.brfilmespornos.net filmporno.itfilmsexeporno.comfiltercams.comfimfiction.netfindasians.live findbare.com findcams.livefindhername.net findsav.com findtubes.comfindvrporn.comfine-art-nude.orgfineartteens.com finehub.com finevids.xxxfirstanalvideos.comfirstasianpussy.comfirstgynexam.comfirstpelvicexam.com fishmpegs.comfitnakedgirls.comfivestarpornsites.comfjlkajhgfa.top  fl310.comflagrasamadores.net  flaru.com flash-xxx.comflashtranny.com  flbjc.net fleshbot.com fleshlyx.com flexsig.com fli8.xyz flipfap.comflirt4free.com flirtmoms.comflirtyhoookup.com  fljmh.com -fljmh1.comfloppy-tits.com -flyflv.comflyingjizz.com -fm4.jp follasian.com footseen.comfootstockings.comforbiddenasian.comforbiddenmomsarchive.com forduck.cyouforhertube.comfotoscaserasx.com +femjoy.com femscat.comferronetwork.comfesery-com.sbsfestinhasbrasil.com fetish-bb.comfetishbank.netfetishdreamz.com fetishes.camfetishfishcams.comfetishpapa.comfetishpornonly.comfetishshrine.com fetlife.com fffucked.com fgirl.ch fi11.cn fi11.com fi11av1.com fi11tv1.comfictionmania.tvfilesmonster.vip +filme2.xxxfilmeleporno.xxxfilmeporno.blogfilmeporno.xxxfilmesdesexo.blogfilmesporno.com.brfilmesporno.net.brfilmespornos.net filmporno.itfilmsexeporno.comfiltercams.comfimfiction.netfindasians.live findbare.com findcams.livefindhername.net findsav.com findtubes.comfindvrporn.comfine-art-nude.orgfineartteens.com finevids.xxxfirstanalvideos.comfirstgynexam.comfirstpelvicexam.com fishmpegs.comfitnakedgirls.comfivestarpornsites.comfjlkajhgfa.top  fl310.comflagrasamadores.net  flaru.comflashtranny.com +fldz8.buzz fleshbot.com fleshlyx.com flexsig.com fli8.xyz flipfap.comflirt4free.com flirtmoms.comflirtyhoookup.com  fljmh.comfloppy-tits.com +flyflv.comflyingjizz.comflyyindh-cc.sbs +fm4.jp fmav.top +fmav51.icu follasian.com footseen.comfootstockings.comforbiddenasian.comforbiddenmomsarchive.com forduck.cyouforhertube.com forpojie.picsfotoscaserasx.com foxgay.com  foxhq.com foxporns.com foxtube.comfree-3d-porn.comfree-abbywinters.com free-avx.jpfree-erobooks.comfree-strip-games.comfree-wap-tube.comfree-xxx-porn.org free00.com -free18.netfree3dadultgames.com free64all.comfreeadultcomix.comfreeadultgames.tvfreeanimalporn.netfreearabsexx.com  freeav.tvfreebdsmxxx.orgfreebigmovies.comfreecamsfan.comfreecamstars.comfreecartoons.bizfreechatnow.comfreegaypornfinder.comfreegaypornhdtube.comfreegaysexgames.comfreehdinterracialporn.infreehdvideos.xxxfreehentaipic.comfreehentaistream.comfreehqtube.com freejavbt.comfreejavporn.mobifreelifetimefuckbook.comfreematuresgallery.com freeomovie.to freeones.com freeporn.comfreepornhdonlinegay.comfreepornhentaigames.comfreeporno.asiafreepornpreview.net freepornq.comfreepornvideos.lifefreesexalbum.comfreesexgames.gamesfreesexgames.wsfreesexvideos2k.comfreesexyindians.comfreesexyindians.orgfreesitexxx.comfreeteenporn.xxxfreeuseporn.comfreexvideos.org freexxx.best freexxx.winfreexxxporn.orgfreeyouporn.mobifreieporno.comfreshporno.net freshscat.com freudbox.com freyalist.com fritchy.com  frprn.comfruitycams.com ftop.ru  ftopx.com ftvgirls.com ftvmilfs.com fu62.vipfuck-xxx-movies.com fuck.com fuck.sc +free18.net free64all.comfreeadultcomix.comfreeadultgames.tvfreeanimalporn.netfreearabsexx.com  freeav.tvfreebdsmxxx.orgfreebigmovies.comfreecamsfan.comfreecartoons.bizfreechatnow.comfreegaypornhdtube.comfreegaysexgames.comfreehdinterracialporn.infreehdvideos.xxxfreehentaipic.comfreehentaistream.comfreehqtube.com freejavbt.comfreejavporn.mobifreelifetimefuckbook.comfreematuresgallery.com freeomovie.to freeones.com freeporn.comfreepornhdonlinegay.comfreepornhentaigames.comfreeporno.asiafreepornpreview.net freepornq.comfreepornvideos.lifefreesexalbum.comfreesexgames.gamesfreesexgames.wsfreesexvideos2k.comfreesexyindians.comfreesexyindians.orgfreeuseporn.comfreexvideos.org freexxx.best freexxx.winfreexxxporn.orgfreeyouporn.mobifreieporno.comfreshporno.net freshscat.com freudbox.com freyalist.com fritchy.com  frprn.comfruitycams.com ftop.ru  ftopx.com ftvgirls.com ftvmilfs.com fu62.vipfuck-xxx-movies.com fuck.com fuck.sc fuck55.net fuck6teen.comfuckableteens.netfuckbookecuador.com fuckcuck.com fuckgames.xxxfuckingawesome.comfuckingfreemovies.comfuckingmatures.comfuckingthreesome.comfuckmatureporn.comfuckmaturepussy.comfuckmeplease.net fuckmoral.comfuckmypakistanigf.comfucksexhub.comfuckteenvids.comfuckthathussy.com fucktube.com fuckup.xxxfuckvideos.biz -fujossy.jp  fukzr1.cc fulanax.com  fuli3.net fulib711.shopfuliba2021.comfuliba2023.netfullbookmm.blogspot.comfulldesisex.com fullfuli.com fullhdxxx.comfullpornnetwork.comfullsexmovs.com fulltaboo.tvfullxxxmovies.netfunshemale.com fuq.com  fuqqt.comfuraffinity.netfurrypornvideos.com +fujossy.jp  fukzr1.cc fulanax.comfuli-wangzhan.com  fuli3.net fulib711.shopfuliba2021.comfuliba2023.netfulipic.gumroad.comfullbookmm.blogspot.comfulldesisex.com fullfuli.com fullhdxxx.comfullpornnetwork.comfullsexmovs.com fulltaboo.tvfullxxxmovies.netfunshemale.com fuq.com  fuqqt.comfuraffinity.netfurrypornvideos.com furuke.com fuskator.com fusker.xxxfutanarihq.com fuxporn.com fuzokudx.com -fxporn.net fzdshare.net g-xxxhub.com g1d1goob.xyz  gaito.xyzgallery-dump.clubgalleryarchives.com gamboporn.com gamcore.com gamerotic.comgamesathletes.comgamesfuckgirls.comgamesofdesire.com gandhara.ru gao1.ccgarotaporno.comgarotoesperto.comgastrointestinalexam.com gate.ccgauleporno.xxx  gay.bingo gay0day.comgay1069sex.com gay4tube.com gayapatal.comgayasianamateurs.comgayasiantheater.comgayasianxxx.com gaybeeg.info  gaybf.comgayboystube.com gaybubble.comgaycamvideos.net gaycock4u.com gayforit.eugayfuckporn.com gayfuror.com gayharem.com gayheaven.orggaymaletube.comgaymenring.comgayonthenet.net -gaypad.netgaypinoyporn.com gayporn.com gayporn.progaypornforyou.comgaypornhdfree.comgaypornlinks.comgaypornlove.netgaypornmenu.com gayporno.fmgaypornonly.comgaypornsky.comgayrawclub.com gayroom.comgaysheaven.blogspot.comgaysitessearch.cc gaysonic.eugaystarnews.com gaystream.pwgaythebest.comgaytopcams.com gaytube.com  gayvl.net gazounabi.comgbluebooks.blogspot.com -gcolle.net gdsrx888.com geceguby.rugeilegratisporno.com geileomas.comgeinoueroch.com gelbooru.com gelbooru.megelbooru.wjcodes.comgenitourinaryexam.comgenkai-hounyo.comgenshin-porn.com genshinh.com getfappy.com -getporn.tvgetsexgames.com gfarchive.com -gfjizz.com gfleaks.com +fxporn.net fzdshare.net g-xxxhub.com  gaito.xyzgallery-dump.clubgalleryarchives.com gamboporn.com gamcore.com gamerotic.comgamesathletes.comgamesfuckgirls.comgamesofdesire.com gandhara.ru gao1.cc +gaofuwu.cc gaozs18.buzzgarotaporno.comgastrointestinalexam.com gate.ccgauleporno.xxx  gay.bingo gay0day.comgay1069sex.com gay4tube.com gayapatal.comgayasianamateurs.comgayasiantheater.com gaybeeg.info  gaybf.comgayboystube.com gaybubble.comgaycamvideos.net gaycock4u.com gayforit.eugayfuckporn.com gayfuror.com gayharem.com gayheaven.orggaymaletube.comgaymenring.comgayonthenet.net +gaypad.netgaypinoyporn.com gayporn.com gayporn.progaypornforyou.comgaypornhdfree.comgaypornlinks.comgaypornlove.netgaypornmenu.com gayporno.fmgaypornonly.comgaypornsky.comgayrawclub.com gayroom.comgaysheaven.blogspot.com gaysonic.eugaystarnews.com gaystream.pwgaythebest.comgaytopcams.com gaytube.com  gayvl.net gazounabi.comgbluebooks.blogspot.com +gcolle.net gdian-dh.mom gdsrx888.com geceguby.rugeilegratisporno.com geileomas.comgeinoueroch.com gelbooru.com gelbooru.megelbooru.wjcodes.com geng8cn.xyz gengba-av.mom  gengba.ccgenkai-hounyo.comgenshin-porn.com genshinh.com +getchu.com getfappy.com +getporn.tvgetsexgames.com gfarchive.com gfleaks.com gfpics.com gfpornbox.comgfpornmovies.comgfpornvideos.com gfrevenge.com gfysex.com -ggdiao.com  ggjav.comghettotube.com ghtv666.topgiantessbooru.com gifnuki.com gigantits.com gigaporn.orggigaxvideos.com -ginmoe.comgirl-secret.com girl7942.comgirlfriendgalleries.netgirlfriendhomeporn.comgirlfriendvideos.comgirlfriendvids.netgirlfuckshorse.net girlfur.com  girls.xyz girls2see.chgirlscanner.cc girlscv.comgirlsdelta.comgirlsfuck-tube.comgirlsheaven-job.netgirlsnudepic.comgirlsofdesire.orggirlsongirlstube.comgirlspoopingtube.comgirlssexxxx.comgirlstryanal.com girlsway.comgirlswelustfor.com girlsxxx.net gizmoxxx.com gladporn.com glam0ur.comglamourtits.com gloporn.comgloryholefucking.comgloryholeswallow.com gnom-cham.com gnzi.xyz  gnzi1.topgo-gaytube.com  go141.com  go2av.comgockhuatviet.com gofucker.comgofuckmenow.com gohentai.net gold-gay.com goldengate.hu -goldgay.tv goldjizz.comgoldsexvideos.comgoldteenporn.comgonzo-movies.com  gonzo.com good-gay.com goodporn.to goodporno.ccgoodsexporn.orggoporngate.com goragay.com gosexpod.comgoshemalecams.comgostosanovinha.com gotblop.comgotgayporn.com gothdporn.com gotporn.com  gouri.xyzgrabhentai.com grabpussy.comgradeuptube.com -graias.comgraiasmovies.comgrandepornogratis.comgrandfuckauto.xxxgrannylister.comgrannytube.netgratisvideokijken.nlgreatretroporn.comgreginhollywood.com -grooby.com groupfun.comguaranitermal.com  guifw.xyz -guifw2.topguochantube.com guochanw.lifeguruofporn.comguysnightlife.comgyakusimei.com gynoexam.info +ggdiao.com  ggjav.com  ggpds.comghettotube.comgiantessbooru.com gifnuki.com gigantits.com gigaporn.orggigaxvideos.com +ginmoe.comgirl-secret.com girl7942.comgirlfriendgalleries.netgirlfriendhomeporn.comgirlfriendvideos.comgirlfriendvids.netgirlfuckshorse.net girlfur.com  girls.xyz girls2see.chgirlscanner.cc girlscv.comgirlsdelta.comgirlsfuck-tube.comgirlsheaven-job.netgirlsnudepic.comgirlsofdesire.orggirlsongirlstube.comgirlspoopingtube.comgirlssexxxx.comgirlstryanal.com girlsway.comgirlswelustfor.com girlsxxx.net gizmoxxx.com gladporn.com glam0ur.comglamourtits.com gloporn.comgloryholeswallow.com gnai-dh.sbs gnailapp.sbs gnom-cham.com gnzi.xyz  gnzi1.topgo-gaytube.com  go141.com  go2av.comgockhuatviet.com gofucker.comgofuckmenow.com gohentai.net gold-gay.com goldengate.hu +goldgay.tv goldjizz.comgoldsexvideos.comgoldteenporn.com goldvip.cyougongkou-cc.sbsgonzo-movies.com  gonzo.com good-gay.com goodporn.to goodporno.ccgoodsexporn.orggoporngate.com goragay.com gosexpod.comgoshemalecams.comgossipfuli4511.xyzgossipfuli5522.xyzgossipfuli6883.xyzgostosanovinha.com gotblop.comgotgayporn.com gothdporn.com gotporn.com  gouri.xyz +gqzmnav.ccgrabhentai.com grabpussy.comgradeuptube.com +graias.comgraiasmovies.comgrandepornogratis.comgrandfuckauto.xxxgrannylister.comgrannytube.netgreatretroporn.comgreginhollywood.com +grooby.com groupfun.com  gt536.topguaranitermal.com  guifw.xyzguochantube.com guochanw.lifeguruofporn.comguysnightlife.comgyakusimei.com gynoexam.info gyutto.comh-doujinshi.xyz h-flash.comh-top.supertop-100.com h-webtoon.com  h0930.com h18ani1.vip -h2porn.com h528.com hadesex.com haha888.xyz haho.moehairy-amateurs.comhairy-beauty.comhairy-women-pussy.nethairyclassic.comhairydivas.comhairynature.comhairyolder.comhairypornsite.com haisetu.net haitenjp.comhamsterfucktube.comhamsterporn.tvhandjobcumvideos.comhandjobhub.comhandjobtube4free.com  hanime.me  hanime.tv +h2porn.com h528.com hadesex.com haha888.xyz haho.moe haijiao.comhairy-amateurs.comhairy-beauty.comhairy-women-pussy.nethairyclassic.comhairydivas.comhairynature.comhairyolder.comhairypornsite.com haisetu.net haitenjp.com hami-mod.buzzhamsterfucktube.comhamsterporn.tv hanbao-tv.lolhandjobhub.comhandjobtube4free.com  hanime.me  hanime.tv hanime.xxx -hanime1.me haori888.comhardanalfucking.comhardcore-sex-filme.comhardcoregayblog.com hardsex8.comhardsextube.com  hardx.com harvard.xxx hbox.jp hbrowse.com +hanime1.me hanr-bao.mom  hao21.xyz  hao62.xyz haori888.comhardcore-sex-filme.comhardcoregayblog.com hardsex8.comhardsextube.com  hardx.com hbox.jp hbrowse.com hcbdsm.com hclips.com hcomic.nethcomicbook.com hd-tubes.com -hd1999.top hdabla.net hdb1.app hdbigass.com hddgames.cchdfreeporn.net hdgaytube.xxx hdhole.comhdjavonline.com hdouban.com hdouban2.com hdouga.comhdporn1080.net hdporn92.comhdporncomics.comhdpornfree.xxx hdpornmax.net hdpornt.comhdpornvideo.xxx hdready.xxx hdreporn.com  hdsex.pro hdsexxx.net  hdtube.co hdtube1.comhdvideosporn.net -hdxnxx.xxx hdxx.tv  hdzog.comhealthcarecareeronline.comheartbreakers.galleryheartbreakers.infoheavenlyhentai.com heavy-r.comheavyfetish.com  hegre.com heijidi.lifehelixstudios.nethelloavgirls.com hellporno.com hellven.net hentai-ani.mehentai-archive.comhentai-books.comhentai-cosplays.comhentai-covers.sitehentai-eroanime.nethentai-for.nethentai-fun.comhentai-gamer.comhentai-gif-anime.comhentai-img.comhentai-moon.com!hentai-space.supertop-100.com"hentai-top100.supertop-100.comhentai-vostfr.net hentai.desi hentai.game  hentai.io hentai.name hentai.pink -hentai.pro hentai.toys  hentai.tv hentai0.com hentai01.com hentai2.nethentai2012.com hentai247.net hentai24h.org hentai24h.tvhentai2games.comhentai2read.com hentai2w.comhentai3dvideo.biz hentai44.comhentai4free.nethentai4manga.com hentai69.lifehentai69.online hentaia.nethentaiaction.nethentaiasmr.moehentaibaka.one hentaibar.comhentaiblue.comhentaibros.comhentaicity.comhentaicloud.comhentaiclub.nethentaicomic.ruhentaicomics.asiahentaicomics.lifehentaicore.nethentaicore.orghentaicovid.comhentaidirectory.orghentaidude.comhentaidude.xxxhentaienvy.com hentaiera.com hentaiero.net hentaifc.com hentaifox.com hentaifox.tvhentaifreak.orghentaifromhell.orghentaigamer.orghentaigamesplanet.comhentaigasm.comhentaihand.comhentaihaven.comhentaihaven.iohentaihaven.mehentaihaven.redhentaihaven.xxxhentaiheadlines.comhentaihere.comhentaiheroes.com hentaihub.xxx hentaikey.comhentaiknight.comhentailabs.comhentailegendado.com hentaimama.iohentaimangaporn.comhentaimovieplanet.comhentainanime.comhentainhaven.comhentainstream.comhentaipapa.com hentaipaw.comhentaiplay.nethentaiporn.comhentaipornonly.com hentaiprn.comhentaiprno.comhentaipros.comhentairank.supertop-100.comhentairead.comhentairead.infohentairead.vip hentairox.comhentairules.net hentais.tube hentaisea.comhentaiseason.comhentaispark.comhentaistream.comhentaistream.tvhentaistube.comhentaisub.infohentaitalk.com hentaitk.comhentaitube.onlinehentaivideos.net hentaivvz.comhentaiworld.euhentaiworld.tvhentaiworldporn.com +hdxnxx.xxx hdxx.tv  hdzog.comhealth026.clickhealthcarecareeronline.comheartbreakers.galleryheartbreakers.infoheavenlyhentai.com heavy-r.comheavyfetish.com  hegre.com heiguab.top heijidi.lifeheise360181.buzzheise360182.buzzhelixstudios.nethelloavgirls.com hellporno.com hellven.net hentai-ani.mehentai-archive.comhentai-books.comhentai-cosplays.comhentai-covers.sitehentai-eroanime.nethentai-for.nethentai-fun.comhentai-gamer.comhentai-gif-anime.comhentai-img.comhentai-moon.com!hentai-space.supertop-100.com"hentai-top100.supertop-100.comhentai-vostfr.net hentai.desi hentai.game  hentai.io hentai.name hentai.pink +hentai.pro hentai.toys  hentai.tv hentai0.com hentai01.com hentai2.nethentai2012.com hentai247.net hentai24h.org hentai24h.tvhentai2games.comhentai2read.com hentai2w.comhentai3dvideo.biz hentai44.comhentai4free.nethentai4manga.com hentai69.lifehentai69.online hentaia.nethentaiaction.nethentaiasmr.moehentaibaka.one hentaibar.comhentaiblue.comhentaibros.comhentaicity.comhentaicloud.comhentaiclub.nethentaicomic.ruhentaicomics.asiahentaicomics.lifehentaicore.nethentaicore.orghentaicovid.comhentaidirectory.orghentaidude.comhentaidude.xxxhentaienvy.com hentaiera.com hentaiero.net hentaifc.com hentaifox.com hentaifox.tvhentaifreak.orghentaifromhell.orghentaigamer.orghentaigamesplanet.comhentaigasm.comhentaihand.comhentaihaven.comhentaihaven.iohentaihaven.mehentaihaven.redhentaihaven.xxxhentaiheadlines.comhentaihere.comhentaiheroes.com hentaihub.xxx hentaikey.comhentaiknight.comhentailabs.comhentailegendado.com hentaimama.iohentaimangaporn.comhentaimovieplanet.comhentainanime.comhentainhaven.comhentainstream.comhentaipapa.com hentaipaw.comhentaiplay.nethentaiporn.comhentaipornonly.com hentaiprn.comhentaiprno.comhentaipros.comhentairank.supertop-100.comhentairead.comhentairead.infohentairead.vip hentairox.comhentairules.net hentais.tube hentaisea.comhentaiseason.comhentaispark.comhentaistream.comhentaistream.tvhentaistube.comhentaisub.infohentaitalk.com hentaitk.comhentaitokyo.comhentaitube.onlinehentaivideos.net hentaivvz.comhentaiworld.euhentaiworld.tvhentaiworldporn.com hentaix.me hentaixxx.viphentaixxxvids.com hentaiyes.com -hentaiz.cc -hentaiz.co hentaiz.mobi hentaiz.vip hentaizap.comhentaizilla.com hentaizz.nethenti-night.comhereistheporn.com herexxx.comhernudepics.com herodex.org heroero.comhexatronik.com heydouga.com -hgamer.pro -hgsacx.comhh-content.com hhtdq17.comhiddenvoyeurspy.com hidefporn.ws hifiporn.fun hifixxx.fun -hifuli.comhighcolonic.info highporn.nethilostripper.com -hiporn.nethippyhillscomix.comhiswifepussy.com hitbdsm.com  hitomi.la hitxhot.com hkbigman.net hlbelygl.com hmd.site hnalady.com hnext.jp hnntube.comhobonichielog.com hoes.com hoge.7jp.info holaporno.xxxholdemstripem.com holloporn.comhollyrandall.comhome-made-porn-movies.comhome-made-videos.comhome-sex-tapes.comhomefuckingmovies.comhomegrownfreaks.nethomemade-porn-video.comhomemadeamateur.comhomemadeanalporn.comhomemadefucktube.comhomemadepornclip.comhomemadeporntubes.comhomemadevids.nethomemoviestube.comhomepornbay.comhomepornking.comhomepornvideo.nethomesexmade.com homo.xxxhomofans.blogspot.comhonestpornreviews.com hongjie10.xyz hongjie11.xyzhongkongdoll.tvhongkongdollvideo.orghongmaodan100.comhoodamateurs.comhornybitches.org hornybutt.com hornychat.nethornyelephant.comhornygamer.comhornygfporn.comhornygirlsonline.org hornyjav.comhornysexgame.comhornywhores.net horse-cum.net horse4sex.comhorsecock.guruhorsecumshot.net horsedick.nethorsedicks.nethorsemecum.com horseporn.tvhot-arab-films.comhot-cartoon.comhot-gayporn.comhot-sex-photos.comhot-sex-tube.com hot-teens.com hot2048.comhotamateurblowjobs.comhotasianbabes.comhotcandyland.comhotcuckoldwife.comhotcumporn.comhotescortdusseldorf.com hotfiesta.comhotfucktube.comhotgaylist.com hotgirl.asiahotgirlsclips.com +hentaiz.co hentaiz.mobi hentaiz.vip hentaizap.comhentaizilla.com hentaizz.nethenti-night.comhereistheporn.com herexxx.comhernudepics.com heroero.comhexatronik.com heydouga.com hg.cool +hgamer.prohh-content.comhiddenvoyeurspy.com hidefporn.ws hifiporn.fun hifixxx.fun +hifuli.com highporn.net +hihigv.comhilostripper.com +hiporn.nethippyhillscomix.comhiswifepussy.com hitbdsm.com  hitomi.la hitxhot.com +hjb246.top +hjb7e9.top hkbigman.net hkf2023.lathkf202311.sitehkf202312.shop hlbelygl.com hlsp1.pw hmd.site  hmfby.com  hmfun.top hmovie-moe.us hnalady.com hnext.jp hnntube.comhobonichielog.com hoes.com hoge.7jp.info holaporno.xxxholdemstripem.com holloporn.comhollyrandall.comhome-made-porn-movies.comhome-made-videos.comhome-sex-tapes.com home-song.comhomefuckingmovies.comhomegrownfreaks.nethomemade-porn-video.comhomemadeamateur.comhomemadeanalporn.comhomemadefucktube.comhomemadepornclip.comhomemadeporntubes.comhomemadevids.nethomemoviestube.comhomepornbay.comhomepornking.comhomepornvideo.nethomesexmade.com homo.xxxhomofans.blogspot.comhonestpornreviews.com hongjie10.xyz hongjie11.xyzhongkongdoll.tvhongkongdollvideo.org +honnaka.jphoodamateurs.comhornybitches.org hornybutt.com hornychat.nethornyelephant.comhornygamer.comhornygfporn.comhornygirlsonline.org hornyjav.comhornywhores.net horse-cum.net horse4sex.comhorsecock.guruhorsecumshot.net horsedick.nethorsedicks.nethorsemecum.com horseporn.tvhot-arab-films.comhot-cartoon.comhot-gayporn.comhot-sex-photos.comhot-sex-tube.com hot-teens.com hot2048.comhotamateurblowjobs.comhotasianbabes.comhotcandyland.comhotcuckoldwife.comhotcumporn.comhotescortdusseldorf.com hotfiesta.comhotfucktube.comhotgaylist.com hotgirl.asiahotgirlsclips.com hotgoo.com hothdsex.xxxhothomemade.comhotindianbabe.comhotindianxxxsex.com  hotjav.tvhotladsworld.comhotladyhere.com hotmovies.com hotmovs.com hotntubes.comhotnudegirls.net hotporn.todayhotpornbible.comhotpornfile.orghotporntubes.com hotscope.tvhotsexvideo.mobihotsexydolls.comhotstunners.comhotteenfreecam.comhottestfilms.com hottystop.comhotwifemovies.com hotzxgirl.com howfuck.me hpjav.tv hptv.fun hq69.com hqbabes.com -hqbutt.com hqcollect.net hqdesexo.com hqporner.com +hqbutt.com hqdesexo.com hqporner.com hqseek.comhqtrannytube.com -hqtube.xxxhqxxxmovies.com hrecords.jp hsex.men hsex.tv hshsxkj.com hsxhr.cc -ht3200.tophtanime.epizy.com htyj-bj.com huangse.love huarenav.comhuarenporn.com huashundg.com huati.cchuaxin-lls.xyz hugedildo.com -hugesex.tv huj-pizda.comhuluhuluhuluhulu10.work humoron.comhungryclit.com hunk.ws huohaore.nethussiepass.com hustler.com  hxc10.vip +hqtube.xxxhqxxxmovies.com hrecords.jp hsex.men hsex.tv hshsxkj.com hsxsp1.buzz hsyy.viphtanime.epizy.com htyj-bj.com huabansp.comhuabansp7.club huangse.love huarenav.comhuarenporn.com huashundg.com huati.cchuaxin-lls.xyz huaxin80.com huaxinvip.top hugedildo.com +hugesex.tv huj-pizda.comhuluhuluhuluhulu10.work humoron.comhungryclit.com hunk.ws huohaore.nethussiepass.com hustler.com hxcsxs.pro hxdoll.com -hxxn12.tophycgm1324.shophyperdreams.com hypnohub.net hypnoporn.net hypnotube.comhypodermic-injection.com!hypodermicinjectiononline.com hyu2.com hzmn.net -i69.com.tw  i91av.org iafd.com iavnight.com ibradome.com  icegay.tv icegaytube.tv iceporn.comiceporncasting.comichigocandy.comichineseporn.comicuminside.comideal-teens.comidol-sagasukun.com iframejav.com ifuckedmy.mom igaychat.com igayporn.tvigetnaughty.com igkbroker.comigotpornpics.com  iijav.com +hxxn12.tophyperdreams.com hypnohub.net hypnoporn.net hypnotube.com hzmn.net +i69.com.tw  i91dz.com iafd.com iavnight.com ibradome.com  icegay.tv icegaytube.tv iceporn.comiceporncasting.comichigocandy.comichineseporn.comicuminside.com idarkdoll.comideal-teens.comideapocket.comidol-sagasukun.com iframejav.com ifuckedmy.mom igaychat.com igayporn.tvigetnaughty.com igkbroker.comigotpornpics.com ihsd-mp4.pics  ihsdav.cc  iijav.com iirmll.com -ijavhd.comiknowthatgirl.comilove-movies.comiloveinterracial.comiloveprettylolimm.com ilovexs.com imagefap.com imagepost.comimagetwist.com -imaypb.com img4.uk imhentai.xxx +ijavhd.comijavtorrent.com +ikanhm.xyz +ikanmh.xyziknowthatgirl.comilove-movies.comiloveinterracial.com ilovexs.com imagefap.com imagepost.comimagetwist.com +imaypb.com imhentai.xxx imilfs.com imlive.com -immoral.jp  immxd.comimperiodefamosas.com -imsrbx.xyz  imzog.com inaporn.com inasian.clubincestflix.comincesto.blog.brincestporn.xxxincestvidz.com -incezt.netindependentdubaiescorts.com indexxx.comindian-free-xnxx.comindian-pornstars.comindianfuck2.comindiangfvideos.comindiangirlsclub.comindianhiddencams.comindianpornfast.comindianporngirls.comindianpornvideo.orgindianpornvideos2.comindiansexmms2.comindiansexpussy.comindiansexstories.netindiansexstories2.netindienudes.comindonesiaporn.nameinfinitetoons.cominfinitetube.cominfluencersgonewild.comingyenszexvideo.topinhumanity.cominkedravens.com -inporn.com instabang.cominstantfap.cominstantfapgay.com instawank.cominteractivesex.xxxinternetexxxplorer.cominterracial-sites.com intescort.comintimateinvasions.com intporn.comintramuscularinjection.info inxporn.com iporntoo.com iporntv.netipostnaked.com iqq2.cc iqq3.cc  iqqtv.netiranianboobs.com iransextv.com  iranx.net iromod91.info irotv301.top isexlove.tw isexomega.tw isfocus.net +immoral.jp  immxd.comimperiodefamosas.com  imzog.com inaporn.com inasian.clubincestflix.comincesto.blog.brincestporn.xxxincestvidz.com +incezt.net indexxx.comindian-free-xnxx.comindianfuck2.comindiangfvideos.comindiangirlsclub.comindianhiddencams.comindianpornfast.comindianporngirls.comindianpornvideo.orgindianpornvideos2.comindiansexmms2.comindiansexpussy.comindiansexstories.netindiansexstories2.netindienudes.comindies-av.co.jpindonesiaporn.nameinfinitetoons.cominfinitetube.cominfluencersgonewild.com +inherd.mominhumanity.cominkedravens.com +inporn.com instabang.cominstantfap.cominstantfapgay.com instawank.com +insuyo.xyzinteractivesex.xxxinterracial-sites.com intescort.comintimateinvasions.com intporn.comintramuscularinjection.info inxporn.com  iooog.sbs iporntoo.com iporntv.netipostnaked.comiqiyiavlive.buzz iqq2.cc iqq3.cc  iqqtv.netiranianboobs.com iransextv.com  iranx.net irotv301.top isexlove.tw isfocus.net iss138.comissitedownrightnow.com istripper.com -ita-do.comitaeromanga.com ithaisex.com itsfuck.comivintageporn.com iw8j.cc iwank.tviwantavnow.comiwantgalleries.comiwantmature.com iwantporn.net iwara.tv iwyn138.com ixnxx.tv ixxx.com  iyalc.com iyottube.com jabcomix.com  jable.orgjade-net-home.com -jadult.net jafgrown.com jambotube.com +ita-do.comitaeromanga.com itsfuck.comivintageporn.com iwank.tviwantavnow.comiwantgalleries.comiwantmature.com iwantporn.net iwara.tv iwyn138.com ixnxx.tv ixxx.com  iyalc.com jabcomix.com  jable.orgjade-net-home.com +jadult.net jambotube.com janor6.netjapan-whores.comjapan18tube.comjapanbeast.comjapanese-scat.netjapaneseasmr.comjapanesebeauties.netjapanesebeauties.onejapanesegirlspictures.comjapaneselovelygirl.com japanfist.org japanporn.tvjapanxxxfilms.comjapon-girls.com japteenx.com japxtube.com -jasmin.com jav-1080.com jav-angel.netjav-legend.comjav-subtitles.com +jasmin.com jav-angel.netjav-subtitles.com jav-vr.net jav.dog jav.gallery jav.guru jav.la jav.land  jav.place jav.si jav.wine jav01.cc @@ -5913,113 +6409,127 @@ jav223.com  jav24.com jav2be.com jav321.com jav4you.org jav789.com -jav889.xyz jav9999.com javbabe.netjavbangers.com javbobo.com javbooks.com javbraze.com +jav889.xyz jav9999.com javbabe.netjavbangers.com +javbest.tv javbobo.com javbooks.com javbraze.com javbuz.com  javcl.com  javct.net -javcup.com  javday.tv javdisk.com javdock.com -javdoe.com  javdoe.to javdove.com javdove8.xyzjavextreme.net javfilms.com  javfor.mejavforme.ninja +javcup.comjavdatabase.com  javday.tv javdisk.com javdock.com  javdoe.to javdove.com javdove8.xyzjavextreme.net javfilms.com  javfor.mejavforme.ninja javfree.la javfree.me javfree.sh javfuck.net javfull.net  javfun.me  javfv.com  javgg.net javgrown.com javhard.net javhard.org javhaven.com javhay.net  javhd.com  javhd.icu  javhd.pro javhd.today javhd3x.com javhdfree.netjavhdhello.comjavhdonline.com javhdporn.com javhdporn.net javher.comjavheroine.com javhihi.com  javhub.me -javhub.net javidol.org javjack.comjavjunkies.com javkiki.com javlands.net javleak.comjavlibrary.com javlibrary.tv javmany.com javmenu.com  javmix.me  javmix.tvjavmobile.mobi javmodel.com javmost.com -javmost.cx javmost.xyz javmuch.com +javhub.net javidol.org javjack.comjavjunkies.com javlands.net javleak.comjavlibrary.com javlibrary.tv javmenu.com  javmix.me  javmix.tvjavmobile.mobi javmodel.com javmost.com +javmost.cx javmost.xyz javmuch.com javmulu.net javnew.net javopen.co  javout.cojavplatform.com javpop.com javpop.link javporn.tech javporn.ws javpost.net javprice.com javprime.net  javpub.me javpush.com  javqd.com javrank.com javrave.club javscat.netjavscatsex.comjavscatting.comjavscreens.com -javseen.tv javsex.asia  javsex.to  javsin.tv  javsky.tvjavspanking.com javstar.club javstore.net  javsx.com +javseen.tv javsex.asia  javsin.tv  javsky.tvjavspanking.com javstar.club javstore.net  javsx.com javtag.net javtasty.com -javteg.net javtiful.com javtorrent.me javtorrent.tkjavtrailers.com javtrust.com -javtube.cc javtube.com javtube.net javtv.to javvids.com javxspot.com  javxxx.me javynow.com jayspov.net jdavsp.asia  jdavsp.pw jdforum.net jennylist.xyz jenporno.cz jerk-porn.com -jerk24.com jerkdolls.com jerkdude.com jerkmate.com jerkmate.tvjerkmatelive.orgjerkofftocelebs.com  jgg18.xyz jiayoulu.com  jieav.com -jilhub.comjinmantiankong.com jinnaju.comjinsilubanzhao.com jiuse904.com jiuse905.comjiuzhouyihuo.com jiyou520.com jizzboom.comjizzbunker.com jizzhut.com -jizzle.comjizzonline.com jjaaxyz.com jjdong7.com jjgirls.com  jjsuo.sbs jm98.ccjodic-forum.orgjohnpersons.com joiasmr.com joinside.org jokerlu1.cc jokerlu1.info -joyclub.de joyhentai.comjoylovedolls.comjoyourself.com joysporn.com jpav.us jpavcom.com -jpbabe.com jpboy1069.net jpg4.biz  jpg4.info jpg4.pw +javteg.net javtiful.com javtorrent.mejavtrailers.com javtrust.com +javtube.cc javtube.com javtube.net javvids.com javxspot.com  javxxx.me javynow.com jayspov.net jb22.lol  jburl.top jdav-css.shop jdavsp.asia +jdavsp.com jdavsp.info  jdavsp.pw +jdavsp.top +jdavsp.xyz jdforum.net jennylist.xyz jenporno.cz jerk-porn.com +jerk24.com jerkdolls.com jerkdude.com jerkmate.com jerkmate.tvjerkmatelive.orgjerkofftocelebs.com  jgg18.xyz  jhzyw.xyzjiaochuanba25.buzzjiaochuanba26.buzz jiayoulu.com  jieav.com +jilhub.com jimeng22.com jiuse.ai  jiuse.icu jiuse.io jiuse.com.co jiuse821.com jiuse822.com jiuse823.com +jstv51.com +jstv52.com +jstv53.com jiyou520.com jizzboom.comjizzbunker.com jizzhut.com +jizzle.comjizzonline.com jjgirls.com  jjsuo.sbs +jkycjk.mom +jkzvz.shop  jkzw.shop jlb0011.site jm98.cc  jmvbt.comjodic-forum.orgjohnpersons.com joiasmr.com joinside.orgjokerlu-go.buzz jokerlu.asia jokerlu.world jokerlu1.cc jokerlu1.info +joyclub.dejoylovedolls.comjoyourself.com joysporn.com jpav.us jpavcom.com +jpbabe.com jpboy1069.net jpg4.biz jpg4.pw jpg4us.net -jpvhub.com  jsz91.com jtube.space judeporn.com juggsjoy.comjuicytwink.comjulesjordan.comjuliamovies.comjusmynote.wordpress.com just.xxxjustfamilyporn.comjustfullporn.org -justhd.xyzjustindianporn.mejustlesbianpussy.comjustnudepic.comjustpicsplease.com justporn.com justporn.link justporno.es justporno.sex justporno.tvjustswallows.comjustusboys.com juyangbee.xyz juyangto.info -juzige.xyz -jwkcgd.xyz +jpvhub.com  jsz91.com jtube.space judeporn.com juggsjoy.com juiceced.xyzjuicytwink.comjulesjordan.comjuliamovies.comjusmynote.wordpress.com just.xxxjustfamilyporn.comjustfullporn.org +justhd.xyzjustindianporn.mejustlesbianpussy.comjustnudepic.comjustpicsplease.com justporn.com justporn.link justporno.es justporno.sex justporno.tvjustswallows.comjustusboys.com juyangbee.xyz juyangto.info juzi-js.shop +juzige.xyz  jzydh.com k9vidz.com kaamuu.comkairakudoujin.net kaktuz.com -kama-nk.ru kamababa.comkampalaexclusiveescorts.com kanporno.com  kaob3.xyz karupsha.com karupspc.com katestube.com -kav.tw kbdxlesx.xyz +kama-nk.ru kamababa.comkampalaexclusiveescorts.com +kanav.info kanporno.com  kaob3.xyz karupsha.com karupspc.com katestube.comkawaiikawaii.jp kc3000.shop kcqsw-na.sbs +kdfuli.comkdy202312.shop keaiav.com kechtube.comkendralist.com kenxxx.com -kenya4.comkenyanporn.blogspot.com kenyaraha.netkenyasexparadise.comkeyporntube.comkhayannpyar.blogspot.comkhotruyentranhx.com kichikuou.com kickporn.com kikdirty.com  kimchi.tv kimogirl.cc kimosex.com kindgirls.comkindindianporn.comkindnudist.comkindteenporn.com kingcomix.com kingextre.mekingofpics.com kink.com kinkbook.com kinklive.com kinkoid.comkinkyfamily.comkinkypeepz.com kir2kos.net +kenya4.comkenyanporn.blogspot.com kenyaraha.netkeyporntube.comkhayannpyar.blogspot.comkhotruyentranhx.com kichikuou.com kickporn.com kikdirty.com  kimchi.tv kimogirl.cc kimosex.com kindgirls.comkindindianporn.comkindnudist.comkindteenporn.com kingcomix.com kingextre.me kingf-av.buzz kingf-av.lol kingf-av.mom kingf-av.sbs kingf-tv.buzz kingfav.sbskingofpics.com kinguno.xyz kink.com kinkbook.com kinklive.com kinkoid.comkinkyfamily.comkinkypeepz.com kir2kos.net kismia.com kisscos.net kissjav.com -kissjav.li kjj05.cn kkfcc03.com kkff2484.live -kmc-av.com +kissjav.li kkfcc03.com  kkiah.com kmdhyy.com kmff17.com koalaporn.comkobe-pastel.com -kompoz.com kompoz2.comkonachan.wjcodes.comkoreanpornmovie.comkorewaeroi.com koskade.comkostenlosepornoclips.com kphimsex.net krhentai.comkristenbjorn.com ksd235qw.comksescortclub.com  kslive.tv -ksyp10.com kuanrenxs.com kum.comkundun1069.comkusugurizanmai.comkutjeporno.com +kompoz.com kompoz2.comkonachan.wjcodes.comkoreanpornmovie.comkorewaeroi.comkostenlosepornoclips.com kouwobb.com kphimsex.net +kpht85.com kpptoto.info krhentai.comkristenbjorn.com ksd235qw.comksescortclub.com +ksyp10.com ku77.xyzkuaimao-app.com kuanrenxs.com kum.com  kun66.xyzkundun1069.comkusugurizanmai.comkutjeporno.com la-mama.ru lacomics.org -ladies.com ladybaba.netladyboygold.comladyboygold.euladyboypornonly.comlanasbigboobs.com langsuirs.comlaosijifuli9009.top laowang.vip laowang.viplargecamtube.comlargeporntube.comlatinaabuse.comlatintubeporn.com laxd.com lazymike.comlbfmaddiction.com -lbtube.com lcgirls.comleakedmeat.comleaksmodels.com leakxxx.comlelavement.com leliao1.com lemoncams.com lenkino.xxx lenporno.red leporno.orglepornochaud.comlepornofrais.com lesbian8.comlesbianpics.orglesbianpornvideos.comlesbiansubmission.comlesboerotica.net +ladies.com ladybaba.netladyboygold.comladyboygold.euladyboypornonly.comlanasbigboobs.com langsuirs.com +lanmdh.netlanniser-ylo.shoplaosijifuli9009.top laowang.viplargecamtube.comlargeporntube.comlatinaabuse.comlatintubeporn.com laxd.com lazymike.comlbfmaddiction.com +lbtube.com lcgirls.comleakedmeat.comleaksmodels.com leakxxx.com leliao1.com lemoncams.com lenkino.xxx lenporno.red leporno.orglepornochaud.comlepornofrais.com lesbian8.comlesbianpics.orglesbianpornvideos.comlesbiansubmission.comlesboerotica.net letfap.com letmejerk.com letmejerk.fun letsdoeit.comletsfuckme.net letsjerk.cclettherebeporn.com levelsex.com lewdthots.comlewdvrgames.com lewdweb.net lezpoo.com lgbtq.gameslianhonghong.com lianjiajr.netliboggirls.netlibraryofthumbs.comlifeselector.comlightxxxtube.com lihksnap.com likeseiyu.comliketruyen.net likuoo.videolilhumpers.com liliav.comlilith-soft.com limer.tw limertw.cclimeteensex.com lindylist.orglingeriepornonly.comlink-o-rama.comlink2galleries.com link69.comlinkjunkies.com linkshit.comliterotica.comlittleasians.comlittlesexdolls.comliuhefabu.clublivecamclips.comlivejasmin.comlivejasminbabes.net livemodels.coliveporngirls.comliveprivates.com livesex.comlivesexasian.com -livexxx.melizardporn.com llwht88.xyz +livexxx.melizardporn.comll82y2ifdd.top llbd10.shopllcaoxm-avi.sbs llwht88.xyz lmm167.shop lmmbtc.comlobstertube.comlocalxlist.orgloholidayhk.com lolhentai.net lolibus.cc lolibus.toplolislove.info -lolita.betlollipopescorts.comlondonhotescort.comlonestarnaughtygirls.com looporn.com  looti.netlostbetsgames.com lotcrap.comlove-sextoys.co.uk love4porn.com love6.tv  love7.xyzloveamateurfacials.comlovedolltorso.com lovegirls.camlovehomeporn.com lovejav.netloveloveskill.comlovemstudios.comlovepartners.lifelovesexbody.comlowergiseries.com lp99.pw lpsg.com lqh0bon3.xyz lrysgee.xyz lsawards.com  lsj2.shop  lsj40.xyzlsjfuli308.xyz lsnzxzy1.com -lspimg.com  lss55.com +lolita.betlollipopescorts.comlondonhotescort.comlonestarnaughtygirls.com looporn.com  looti.netlostbetsgames.com lotcrap.comlove-sextoys.co.uk love4porn.com love6.tv  love7.xyzloveamateurfacials.com loveavdh15.cc loveavdh21.cc loveavvip.comlovedolltorso.com lovegirls.camlovehomeporn.com lovejav.netloveloveskill.comlovepartners.lifelovesexbody.com +lovex.lifelowergiseries.com lp99.pw lpsg.com +lqpjw.cyou lrysgee.xyz lsawards.com  lsj2.shop  lsj40.xyzlsjfuli308.xyz +lspimg.com  lss55.com lthgav.buzz ltube.life lu2100.com lu2200.com lu23.com  lu2300.cc luanlunmv.cc lubetube.comlucahmelayu.clublucasentertainment.com lululu.one -luoli.info lupoporno.com luscious.netlushstories.com lustery.com lusthero.com lustteens.net lustylist.com luticlip.com +luoli.infoluotihg-tv.buzz +luotihg.cc lupoporno.com luscious.netlushstories.com lustery.com lusthero.com lustylist.com luticlip.comlutube2310.com luvmov.com luw666.xyz luw666cm.cc luxuretv.com luxuretv.fun -lxxlxx.com m5ir5np1.shopmachigle-sp.commachogaytube.commachosaonatural.com.br machotube.tv madamlive.tvmadchensex.commaddawgjav.netmadhomemadeporn.commadonna-av.com -madou.club madou.la madouav.onemadouzx.monster madouzx.top madpeople.net madthumbs.com madvagina.commafia-linkz.tomagicmovies.commahajantech.com maileoch.commalayporn.sitemalayporn.spacemalaypornhub.commallandrinhas.netmalvastudios.com mamacitaz.commanga-mill.com manga18.art mangahasu.semangahentai.me mangahome.com mangoporn.netmangotporn.com -manhub.com manhunt.netmanhuntdaily.com manhwa24h.commanhwahentai.me manporn.xxx mansurfer.commantochichi.commanurefetish.com manytoon.com manyvids.commarranazas.com masalabin.commasaladesi.commasalaseen.netmassagerepublic.commasterwanker.commasturbate2gether.com mat6tube.commature-amateur-sex.com mature-nl.eumature-porn-flix.commature-tube.sexy  mature.nlmatureclub.com maturefuck.ccmatureladiesxxx.commatureporner.commaturepornonly.commatures-loving-sex.commaturescam.commaturesexual.commaturesinhd.commaturetube.commaturewifeporn.ccmaturewomenanal.commaturexxxvideos.ccmaximumerotica.com  maya5.net mcstories.commd.hkgolden.com mdyy.de mdlf.xyz +lwwcn.buzz  lwwcn.xyz +lxxlxx.commachigle-sp.commachogaytube.commachosaonatural.com.br machotube.tv madamlive.tvmadchensex.commaddawgjav.netmadhomemadeporn.commadonna-av.com +madou.club madou.la madou.tv madouav.one madouqu.com madthumbs.com madvagina.commafia-linkz.tomagicmovies.commahajantech.com maileoch.commalayporn.sitemalayporn.spacemalaypornhub.commallandrinhas.netmalvastudios.com mamacitaz.commanga-mill.com manga18.art mangahasu.semangahentai.me mangahome.com mangoporn.netmangotporn.com +manhub.com manhunt.netmanhuntdaily.com manhwa24h.commanhwahentai.me manporn.xxx mansurfer.commantochichi.commanurefetish.com manytoon.com manyvids.commaomi-shipin.commarranazas.com masalabin.commasaladesi.commasalaseen.netmassage-in-taipei.commassagerepublic.commasterwanker.commasturbate2gether.com mat6tube.commature-amateur-sex.com mature-nl.eumature-porn-flix.commature-tube.sexy  mature.nlmatureclub.com maturefuck.ccmatureladiesxxx.commatureporner.commaturepornonly.commatures-loving-sex.commaturescam.commaturesexual.commaturesinhd.commaturetube.commaturewifeporn.ccmaturewomenanal.commaturexxxvideos.ccmaximumerotica.com  maya5.netmayijiejie.com mcstories.commd.hkgolden.com mdpj-mov.shop mdpjoin.buzz mdr-good.sbs mdr100ya.lat mdtt-tv.sbs mdyy.de me-gay.com mediasama.com medow.ru -meendo.commeetandfuck.gamesmeetandfuckgames.com megacamz.commegafilmporno.commegahdporno.netmegapornfreehd.commegaporno.com.brmegapornpics.com +meendo.commeetandfuck.gamesmeetandfuckgames.com megacamz.commegafilmporno.commegapornfreehd.commegaporno.com.brmegapornpics.com meguso.commeilleurpornos.com meitula.netmelonbooks.co.jpmelonstube.com meme111.com  men18.net menatplay.com mengnan.shop -menhdv.com mensheaven.jpmeoriental.com messytube.com met-nude.com metaporn.commetrotoons.com meuhentai.com mhhanman.xyz  mhqwe.xyz miaomwu.com midoushe.commiexnoviadesnuda.commilehighmedia.com +menhdv.com mensheaven.jpmeoriental.com messytube.com met-nude.com metaporn.commetrotoons.com meuhentai.com mhhanman.xyz  mhqwe.xyz miaomwu.com midoushe.commiexnoviadesnuda.commihomeone.infomilehighmedia.com +milfav.icu milfed.com milffox.commilfhunter.com milflove.livemilfmaturesex.net milfmovs.com milfnut.com milfporn.promilfpornonly.commilfpornpics.xxx milfprime.commilfs-gone-wild.com milfs-now.commilfsexstart.nlmilfslesbian.commilfsover30.com milftube.pro milfvr.com -milfzr.commilkmanbook.commilta1980.co.uk mimei.store -mimi22.top +milfzr.commilkmanbook.com mimei.storemimi-zhibo.com mimi2022.link +mimi22.top mimi222.topmimizy-go.buzz mingky.org mingkyaa.comminisexdoll.comminnano-av.com minuporno.com miohentai.com -missav.commisshotgirls.commistresskym.com  mitao.bar mitnaka.commixasiansex.commixmaturesex.commixvintagesex.com mjv-art.org  mm9841.cc mm9c63ae.xyz -mmaaxx.com  mmtv.life -moapi.site moapi1.club moapi1.onlinemobileporngames.commobilepornmovies.commobilevrxxx.commodelmediaus.commodeloswebcambogota.commodelsfreecams.com modeltv.commoeero-library.com +missav.commisshotgirls.commistresskym.com  mitao.bar mitnaka.commixasiansex.commixmaturesex.commixvintagesex.com mjv-art.org  mm-cg.com  mm9841.cc +mmaaxx.com mmgy.cc +mmscdh.one mmtongdao.xyz  mmtv.life mmwxl27.topmobileporngames.commobilepornmovies.commobilevrxxx.commodelmediaus.commodeloswebcambogota.commodelsfreecams.com modeltv.commoeero-library.com moefuns.co moeimg.net -moemax.net -moez-m.com  mofos.com mofosex.commofosnetwork.com mom-gfs.commom-sex-videos.com  mom50.commomami18.livedoor.blogmomfucktube.commomhomeporn.com momon-ga.com momoniji.commoms-sex-videos.commomsbangteens.commomsboysmovies.netmomsexypics.commomsfuckingboys.netmomsgiveass.commomshardcoreporn.commomsneversayno.com momsporn.sumomspornvideos.commomsteachsex.commomsteachsex.infomomsyoungboys.netmomtarts3d.com momtube.club -monaitv.memoneyswift.online -mono33.topmonstercockland.commonstersexporn.net moozporn.com morazzia.com mornporn.commostpopularpornsites.commotherless.commotherporn.ovhmovie-erog.com movie1000.xyz moviepost.commoviesarena.commoviesfree4u.xyzmoviesneek.com moystoys.commplstudios.com +moez-m.com  mofos.com mofosex.commofosnetwork.com mom-gfs.commom-sex-videos.com  mom50.commomami18.livedoor.blogmomesear-chs.buzzmomfucktube.commomhomeporn.com momon-ga.com momoniji.com +momotk.commoms-sex-videos.commomsbangteens.commomsboysmovies.netmomsexypics.commomsfuckingboys.netmomsgiveass.commomshardcoreporn.commomsneversayno.com momsporn.sumomspornvideos.commomsteachsex.commomsteachsex.infomomsyoungboys.netmomtarts3d.com momtube.club +monaitv.memonstercockland.commonstersexporn.net monthlyav.com moozporn.com morazzia.com mornporn.commostpopularpornsites.commotherless.commovie-erog.com movie1000.xyz moviepost.commoviesarena.commoviesfree4u.xyzmoviesneek.com moystoys.commplstudios.com mrbdsm.commrchewsasianbeaver.com mrcong.commrdeepfakes.com mrlivecam.com mrloli.com mrpinks.commrporngeek.commrpornlive.com mrssiren.com -mrskin.commrvideosdesexo.xxx  msflj.vip mtao.fun mu6bce1c.xyzmuchohentai.commuchomasporno.commulheresafoder.com -mult34.commultipornfor.me multporn.netmundomais.com.br muryouav.netmusclegirlflix.com muycerdas.xxx muyzorras.commvideoporno.xxx mwhentai.net my-enema.commy3dhentai.commyamateurgirls.netmyamateurtv.commyanmar-porn.com myavfun.com +mrskin.commrvideosdesexo.xxx mt0011.site mtao.funmuchohentai.commuchomasporno.commulheresafoder.com +mult34.com multporn.netmundomais.com.br muryouav.netmusclegirlflix.com muycerdas.xxx muyzorras.commvideoporno.xxx +mwcu00.com mwhentai.net +mxshm.site my-enema.commy3dhentai.commyamateurgirls.netmyamateurtv.com myav886.buzz myavfun.com myavok.com myavsuper.com myavxx.xyzmybabehotz.com myboylove.commybukkakeporn.com mycams.commycartoonsexgames.com mycdn.memyclitgames.commycomicsxxx.commyfappening.orgmyfavoritearcade.commyfistingporn.commyfreeblack.commyfreecams.commyfreepaysite.commyfreeporngames.commygaysites.commyhentaicomics.commyhentaigallery.commyhomemadesex.com myjkwd.com mylf.commylittlenieces.com mylust.commymasturbators.commyminisexdoll.commymusclevideo.com mypornads.commypornadviser.commypornbookmarks.com mypornfox.com myporngay.commypornhere.com -myporno.czmyporno.photosmypornolab.clickmypornstarbook.net mypornvid.fun mypornwap.funmyrimmingporn.commysexgames.com mysexygfs.commyteenwebcam.commytrannycams.com mytving.com  mywife.ccmywifecuckold.com myxvids.com myxxgirl.commyyoungmomisnude.commyyoungwifeisnude.com n15zev3w.shopnaaktevrouwenporno.comnaijauncut.comnailedhard.com naizitv.top nakadashi.tonaked-girls.me  naked.comnakedamateurmilf.comnakedasiansex.comnakedgirlpic.comnakedgirls.biznakedmodelsxxx.com nakednews.comnamethatporn.comnamethatpornad.com nan-net.com nanonamad.com naoconto.com napiszex.comnarumiya.xii.jp nasty.singles nastyvids.com naughty.comnaughtyamerica.comnaughtyblog.orgnaughtygamesource.comnaughtyhentai.biznaughtymachinima.comnaughtysophie.comnaughtywomenpics.comneedgayporn.comnekora.main.jp nekoxxx.com nenitas.clubneotokyo.supertop-100.com nerdnudes.com nesaporn.com nesaporn.mobi neswangy.net netarabic.com netfapx.comnetpornsex.comnetpornsex.netnetvideogirls.comneuerporno.com new-akiba.com new-jero.netnew-redtube.comnew3dcomics.comnewbienudes.com newbrazz.comnewgrounds.com newhentai.orgnewlineporn.comnewsensations.com newsextv.com newsexwap.com newsexxxx.com newxxx24.cc ngfiles.com nhentai.com +myporno.czmyporno.photosmypornolab.clickmypornstarbook.net mypornvid.fun mypornwap.funmyrimmingporn.commysexgames.com mysexygfs.commyteenwebcam.commytrannycams.com  mywife.ccmywifecuckold.com myxvids.com myxxgirl.commyyoungmomisnude.commyyoungwifeisnude.comnaaktevrouwenporno.com naihenda.shopnaihendauou.lolnaijauncut.comnailedhard.com naizitv.top nakadashi.tonaked-girls.me  naked.comnakedamateurmilf.comnakedasiansex.comnakedgirlpic.comnakedgirls.biznakedmodelsxxx.com nakednews.comnamethatporn.comnamethatpornad.com nan-net.com naoconto.com napiszex.comnarumiya.xii.jp nasty.singles nastyvids.com naughty.comnaughtyamerica.comnaughtyblog.orgnaughtygamesource.comnaughtyhentai.biznaughtymachinima.comnaughtysophie.comnaughtywomenpics.com nbdh15.buzz nee4you.comneedgayporn.comnekora.main.jp nekoxxx.com nenitas.clubneotokyo.supertop-100.com nerdnudes.com nesaporn.com nesaporn.mobi netarabic.com netfapx.comnetpornsex.comnetpornsex.netnetvideogirls.comneuerporno.com new-akiba.com new-jero.netnew-redtube.comnew3dcomics.comnewbienudes.com newbrazz.comnewgrounds.com newhentai.orgnewlineporn.comnewsensations.com newsextv.com newsexwap.com newsexxxx.com newxxx24.cc nhentai.com nhentai.io nhentai.net nhentai.to nhentai.xxxnhentaihaven.comnhentaihaven.orgniceanimegames.com niceporn.tvnichepornsite.comnichepornsites.comnickscipio.com  nicky.xxxnight.livedoor.biz nightclub.eu nights.fun nijiclamp.comnijidoujin.com -nijie.infonijieronavi.com nijifeti.comnijigen-daiaru.com nijinchu.com nijioma.blognineteentube.com -ninpu.cyou  niuc2.com niziero.info njav.tvnlsexfilmpjes.com nlt-media.comnoc.syosetu.com nonktube.comnonstopfap.comnoodlemagazine.com +nijie.info nijifeti.comnijigen-daiaru.com nijinchu.com nijioma.blognineteentube.com +ninpu.cyou  niuc2.com niziero.info njav.tvnlsexfilmpjes.com nlt-media.comnoc.syosetu.comnondh-room.mom nonktube.comnonstopfap.comnoodlemagazine.com norsk.mobinoveltrove.comnovinhabucetuda.comnovinhagostosa10.comnovinhasdozapzap.com novojoy.comnovostrong.com -nowjav.com  nozomi.la nsfw.xxx -nsfw247.to nsfwmemes.com +nowjav.com  nozomi.la nrdh99.buzz nrooms-dh.sbs nsfw.xxx +nsfw247.to nsfwmemes.com ntten-mg.buzz nu-bay.com nu36.vipnubilefilms.comnubiles-casting.comnubiles-porn.com nubiles.net nubileset.comnubilesunscripted.com nuddess.com nude-pics.orgnude-share.com nude.hunudeandhairy.comnudebeachpussy.com nudecams.camnudecelebforum.comnudedrawer.com nudedxxx.comnudeeroticteens.com nudefiles.netnudegfporn.com nudekenya.com nudelive.comnudematurewomenpics.comnudemilfporn.com -nudes7.com nudespree.com nudeteen.orgnudeteenboys.netnudeteenladies.comnudevietnam.comnudevista.bestnudevista.club nudevista.funnudevista.link nudevista.vipnudewifeporn.comnudewomenpics.netnudistbeachporn.com nudistic.com nudistlog.comnudistsexvideos.comnudistvoyeurbeach.com nudity911.comnudography.comnuespournous.com  nuita.net nukemanga.comnuki-dokoro.com  nurgay.tonurumassage.net nurxxx.mobi nushemale.com nuuporn.com  nuvid.com -nverxs.xyz  nwxs8.com nyahentai.reobutsumania.com  obutu.com ohentai.orgohgratisporrfilm.comohpornocasero.comohpornovideo.com ohsesso.com ohsexfilm.comohsexotube.comohyeah1080.com +nudes7.com nudespree.com nudeteen.orgnudeteenboys.netnudeteenladies.comnudevietnam.comnudevista.bestnudevista.club nudevista.funnudevista.link nudevista.vipnudewifeporn.comnudewomenpics.net nudify.onlinenudistbeachporn.com nudistic.com nudistlog.comnudistsexvideos.comnudistvoyeurbeach.com nudity911.comnudography.comnuespournous.com  nuita.net nukemanga.comnuki-dokoro.com  nurgay.tonurumassage.net nurxxx.mobi nushemale.com nuuporn.com  nuvid.com  nwxs8.com nyahentai.re  nym97.netobutsumania.com  obutu.com ohentai.orgohgratisporrfilm.comohpornocasero.comohpornovideo.com ohsesso.com ohsexfilm.comohsexotube.comohyeah1080.com oiobbs.com ok.xxxokazudouga.blog.jpokazudouga.tokyookkisokuho.comolder-women-movies.comolder-women-porn.com older.tube  oldje.comoli-school.com omafotze.com  omg.adult omg.blog omgteens.com omorashi.jp omorashi.orgonahodouga.comonani-daisuki.com @@ -6027,232 +6537,260 @@ one889.apponejapanese.com onejav.comonepornlist.comonesiterip.comonindiansex.comonlinefucktube.comonlineporn-vids.comonlineteenhub.comonlinexxxgames.comonly-xxx-porn.com only-xxx.com only3x.com onlyams.comonlycartoonsex.com onlydudes.comonlyfanspw.comonlyfreelatinaporn.comonlygayvideo.comonlyhdporn.comonlyhentaistuff.comonlyhomemadeanal.comonlyincestporn.comonlyindianporn.tvonlyindianporn2.com onlyleaks.me onlynudes.org onlyprime.ruonlysiterip.com onstream.cc onxxxtube.comonxxxvideo.com op7979.com opentgc.comoppai-doga.infooppainorakuen.com oreno3d.com -orgasm.comorgasmlist.comorgypornonly.comorgyxxxhub.comorientalasianporn.comoriginalindianporn.com orsm.net -orzqwq.comosakamotion.netosiri-suki-club.com otaku-168.com otaku18a.info otaku55.xyz otbm.comotokonokoland.com -oudoll.comoursexgames.com ourshdtv.comourshemales.comoutdoorpublicsex.comover18arcade.comoverthumbs.com  oxlife.co oxyporn.com oyeloca.com  ozeex.compacopacomama.compaerosnen.club -paheal.netpaidpornguide.compaidpornsites.compainfulpussytortures.com painnovel.com paipancon.compakistanporntube.net palcomix.com pali.ltdpancolle-movie.jppandamovies.pw pankwire.compantswalker.net papalah.comparadisehill.ccpasionmujeres.compassion-hd.com passion.com payserve.compaysitesreviews.net -pbabes.com -pctlwm.compeach-cherry.com peachy18.compeachyforum.com peekvids.compeepholecam.com pejyyah.compelvicexam.info penisbot.com penthouse.compeopledreamfunding.comperfectgirls.netperfectgonzo.comperfectjizz.comperfectnaked.comperfectsexnow.comperfectshemales.comperfecttitspics.compersiankitty.com +orgasm.comorgasmlist.comorgypornonly.comorgyxxxhub.comorientalasianporn.comoriginalindianporn.com orsm.netosakamotion.netosiri-suki-club.com otaku-168.com otaku18a.info otaku55.xyz otbm.comotokonokoland.com +oudoll.comoursexgames.com ourshdtv.comourshemales.comoutdoorpublicsex.comover18arcade.comoverthumbs.com  oxlife.co oyeloca.com  ozeex.compacopacomama.compaerosnen.club +paheal.netpaidpornguide.compaidpornsites.compainfulpussytortures.com painnovel.com paipancon.compakistanporntube.net palcomix.com pali.ltdpancolle-movie.jp panda30.shoppandamovies.pw pankwire.compantswalker.net  paon.site papalah.comparadisehill.ccpasionmujeres.compassion-hd.com passion.com payserve.compaysitesreviews.net +pbabes.com pbjar1205.pro +pctlwm.compeach-cherry.com peachy18.compeachyforum.com peekvids.compeepholecam.compelvicexam.info penisbot.com penthouse.compeopledreamfunding.comperfectgirls.netperfectgonzo.comperfectnaked.comperfectsexnow.comperfectshemales.comperfecttitspics.compersiankitty.com person.com pervclips.com perverse.sexperverttube.com petardas.com petardas.xxxpetardashd.com.ve petite.onepetiteamateurteen.competiteballerinasfucked.competitehdporn.com pgyy67.top pheonix.moneyphimsex47.clubphimsexhentai.mephimsexkhongche.cyouphimsexnhanh.clubphoto-image.monster photos18.com phun.orgphysicalexam.infopicacg2022.com pichunter.com picpost.com pics.vc -pictoa.com pictocum.com  pigav.compikabu.monster pinduck.com pinflix.com pingguotv.xyzpingxiangpuer.com pinkdino.com pinkporno.com pinkpussy.tv pinksporn.compinkteentube.netpinkvelvetvault.com pinkworld.compinyinxiang.compiratecams.com pirouvr.com pjgirls.complanetsuzy.orgplatinumlinks.org playbar.biz playboy.complayboyplus.complayforceone.com playmeow.com playnft.es.ht playno1.complayporngame.complayporngames.complaypornogames.complaysexgames.xxxplaysexygame.com playvids.complayyoungtube.compleasefuck.orgpleasurebabe.compleasuregirl.netpleasuremore.complumperpass.com plusone8.com plusporn.netpmatehunter.compoisontube.compojiefuli20033.xyzpojiefuli9113.xyzponyanimalsex.com poofetish.compoop-pee.onlinepoopee-puke.compoopeegirls.com  popjav.tv porcore.com poringa.net -porkahd.co  porm.clubporn-bokep.comporn-comic.comporn-discounts.comporn-discounts.xxxporn-gratis.infoporn-images-xxx.comporn-list.siteporn-portal.comporn-sex-video.meporn-stalker.fr porn-star.com porn.biz porn.com porn.to porn.xxxporn1videos.com porn2012.com porn2018.com porn300.comporn300.online  porn34.meporn3dgalleries.com porn4days.cc porn4fap.com porn555.com +pictoa.com pictocum.com  pigav.compikabu.monster pinduck.com pinflix.com pingguotv.xyzpingxiangpuer.com pinkdh-bb.sbs pinkdino.com pinkporno.com pinkpussy.tv pinksporn.compinkvelvetvault.com pinkworld.compiratecams.com pirouvr.com  pjbyj.top pjful-app.lol pjgirls.complanetsuzy.orgplatinumlinks.org play-bmm.shopplay-bmmer.buzz playbar.biz playboy.complayboyplus.complayforceone.com playmeow.com playno1.complayporngame.complayporngames.complaypornogames.complaysexgames.xxxplaysexygame.com playvids.complayyoungtube.compleasefuck.orgpleasurebabe.compleasuregirl.netpleasuremore.complumperpass.com plusone8.com plusporn.net  plzpf.compmatehunter.compoisontube.com +pojapp.cfdpojbayj1030.top +pojie7.compojiefuli20033.xyzpojiefuli9113.xyzponyanimalsex.com poofetish.compoop-pee.onlinepoopee-puke.compoopeegirls.com  popjav.tvpopporn-world.com porcore.com poringa.net +porkahd.co  porm.clubporn-bokep.comporn-comic.comporn-discounts.comporn-discounts.xxxporn-gratis.infoporn-images-xxx.comporn-list.siteporn-portal.comporn-sex-video.me porn-star.com porn.biz porn.com porn.to porn.xxx porn2012.com porn300.comporn300.online  porn34.meporn3dgalleries.com porn4days.cc porn4fap.com porn555.com porn5f.com porn62.com  porn7.net  porn7.xxx porn87.com porn91.org  porn93.cc pornachi.com pornacho.com pornadoo.com pornaf.compornaffected.compornandxxxvideos.com pornaroma.com  pornav.co pornaxo.com pornbest.org -pornbit.cc pornbozz.com pornbraze.com pornbrb.compornburger.com pornburst.xxx porncana.com porncoil.comporncomics.com porncomics.meporncomixonline.net porncore.net porncoven.com porncrash.comporndabster.com porndeals.comporndeepfake.net porndex.comporndiamond.com porndig.com porndigger.meporndiscount.orgporndiscounts.com porndish.com porndisk.com pornditos.com porndoe.comporndoepremium.com porndork.com -porndr.comporndroids.compornelephant.com pornenix.com  porner.tvpornerbros.compornexpress.net -pornez.netpornfactory.info pornfhd.compornfidelity.com pornfind.orgpornfinder.biz pornflip.compornfoolery.com  pornfu.tv pornfuck.net pornfuror.comporngames.club porngames.comporngames.games porngames.tvporngameshub.comporngamesverse.com porngeek.com porngem.com porngifs.xxxporngladiator.com +pornbit.cc +pornbl.com pornbozz.com pornbraze.compornburger.com pornburst.xxx porncana.com porncoil.comporncomics.com porncomics.meporncomixonline.net porncore.net porncoven.com porncrash.comporndabster.com porndeals.comporndeepfake.net porndex.comporndiamond.com porndig.com porndigger.meporndiscount.orgporndiscounts.com porndish.com porndisk.com pornditos.com porndoe.comporndoepremium.com porndork.com +porndr.comporndroids.compornelephant.com pornenix.com  porner.tvpornerbros.compornexpress.netpornfactory.info pornfhd.compornfidelity.com pornfind.orgpornfinder.biz pornflip.compornfoolery.com  pornfu.tv pornfuck.net pornfuror.comporngames.club porngames.comporngames.games porngames.tvporngameshub.comporngamesverse.com porngeek.com porngem.com porngifs.xxxporngladiator.com porngo.com porngo.tubeporngogo.supertop-100.comporngrabbz.compornguide.blog pornguz.com pornhail.com pornhat.com pornhat.one pornhat.tv -pornhd.com pornhd3x.tv pornhd8k.netpornhdfuck.com pornhdtube.tvpornhdvideos.tv pornheed.com pornheli.com pornhits.com pornhoho.com pornhost.compornhub-deutsch.infopornhub-german.compornhub-sexfilme.net pornhub00.compornhubdeutsch.netpornhubs.videopornhubselect.com pornhun.xyzpornhutdeutsch.com pornhuub.xyz pornicom.com -pornid.xxx pornimg.xyz pornirani.com pornjam.com pornjav.org pornjizz.co +pornhd.com pornhd3x.tv pornhd8k.netpornhdfuck.com pornhdtube.tvpornhdvideos.tv pornheed.com pornheli.com pornhits.com pornhoho.com pornhost.compornhub-deutsch.infopornhub-german.compornhub-sexfilme.net pornhub00.compornhubdeutsch.netpornhubs.videopornhubselect.com pornhun.xyzpornhutdeutsch.com pornicom.com +pornid.xxx pornimg.xyz pornirani.com pornjam.com pornjav.org pornjk.com pornkai.com pornkind.net pornking.fun pornkino.cc pornkro.com pornktube.com pornky.compornlaundry.compornlegendsclub.compornlist18.compornlistdude.com pornlulu.com pornluxme.com pornma.compornmadeathome.compornmagnet.org pornmaki.compornmaster.fun pornmate.compornmaturetube.com pornmemo.com pornmonde.compornmovies2.mepornmoviescave.com pornmz.com -pornmz.netpornnetworkdeals.com pornnut.comporno-erotica.com porno.org.in porno365.netporno365.website porno49.com porno800.com pornoaid.compornoamateurlatino.net pornobae.compornobengala.compornoboard.netpornoboliviaxxx.compornobom.com.br pornobox.netpornobrasil.blog.brpornobrasil.compornobrasil.orgpornobrasileiro.tvpornobrasileiro.xyz pornobuzz.netpornocarioca.compornocaserotube.com -pornocd.rupornocomic.netpornodanke.compornodebolivia.netpornodoido.com pornodrome.tvpornoecuadorxxx.compornoelena.net pornofiles.rupornofilmlist.com pornofint.com pornofrog.compornogayphy.com pornogids.net pornogram.xxxpornogramxxx.compornogratis.vlog.brpornogrund.com pornoh.info pornohd.blue pornohd.plus pornohd.pornpornohoo.com.mx pornohut.infopornohutdeutsch.net pornoid.compornoincreible.compornoingyen.hupornoirado.com pornoisy.compornoitaliano.com pornojefe.com pornojux.com pornoko.net pornokrol.com pornolab.netpornolaba.mobipornolandia.xxxpornomasse.compornomineiro.compornomovies.mobi pornone.compornoorzel.compornopantry.compornoprive.xxxpornoreino.com pornorips.com pornos.livepornoscanner.com pornosex.campornosfilmes.com pornoslon.mepornosphere.com pornotime.net pornotree.com pornotron.netpornotube.blog.brpornotube69.nlpornov1080.namepornovenezolano.com.vepornovenezolanox.com pornovesem.tvpornovideosfree.netpornovideoshub.compornovideow.com pornoweb.hu pornoweb.win pornoxo.com pornozona.tv pornpair.compornpander.com pornpaw.com -pornpen.ai pornper.com pornpics.com pornproxy.app -pornqd.compornrabbit.compornreactor.cc pornrips.cc pornrox.com pornscat.org pornscum.compornsearchengine.com pornsexer.com pornshare.biz pornsites.xxxpornsitesnow.compornsocket.compornsoldiers.com pornsos.com pornspark.compornstarbyface.compornstreams.tvpornstripgames.com porntea.compornteen123.com porntitan.com +pornmz.netpornnetworkdeals.com pornnut.comporno-erotica.com porno.org.in porno365.netporno365.website porno49.com pornoaid.compornoamateurlatino.net pornobae.compornobengala.compornoboard.netpornoboliviaxxx.compornobom.com.br pornobox.netpornobrasil.blog.brpornobrasil.compornobrasil.orgpornobrasileiro.tvpornobrasileiro.xyz pornobuzz.netpornocarioca.compornocaserotube.com +pornocd.rupornocomic.netpornodanke.compornodoido.com pornodrome.tvpornoecuadorxxx.compornoelena.net pornofiles.rupornofilmlist.com pornofint.com pornofrog.compornogayphy.com pornogids.net pornogram.xxxpornogramxxx.compornogratis.vlog.brpornogrund.com pornohd.blue pornohd.plus pornohd.pornpornohoo.com.mx pornohut.infopornohutdeutsch.net pornoid.compornoincreible.compornoingyen.hupornoirado.compornoitaliano.com pornojefe.com pornojux.com pornoko.net pornokrol.com pornolab.netpornolaba.mobipornolandia.xxxpornomasse.compornomineiro.compornomovies.mobi pornone.compornoorzel.compornoprive.xxxpornoreino.com pornorips.com pornos.livepornoscanner.com pornosex.campornosfilmes.com pornoslon.mepornosphere.com pornotime.net pornotree.com pornotron.netpornotube.blog.brpornotube69.nlpornov1080.namepornovenezolano.com.vepornovenezolanox.compornovideosfree.netpornovideoshub.compornovideow.com pornoweb.hu pornoweb.win pornoxo.com pornozona.tv pornpair.compornpander.com pornpaw.com +pornpen.ai pornper.com pornpics.com pornpost.net pornproxy.app +pornqd.compornrabbit.compornreactor.cc pornrips.cc pornrox.com pornscat.org pornscum.com pornsexer.com pornshare.biz pornsites.xxxpornsitesnow.compornsocket.compornsoldiers.com pornsos.com pornspark.compornstarbyface.compornstreams.tvpornstripgames.com porntea.compornteen123.com porntn.com porntop.comporntoplinks.com porntrex.com porntry.comporntsunami.com porntube.comporntubent.com porntv.com  pornuj.czpornultras.com  pornv.org pornve.com pornvibe.orgpornvideobb.compornvideos.casapornvideotop.compornvideotube.onlinepornvidhd.clubpornwatchers.compornwebmasters.com pornwhite.compornwhitelist.com pornwild.to pornworld.topornxnxxmovies.com pornxp.com pornxp.net pornxp.org -pornxs.compornxvideos.tvpornxvideos.win pornxxx.bidpornxxxmovies.ccpornxxxplace.compornxxxweb.com pornyeah.com pornyteen.com pornzog.com pornzone.comporstoporno.site  porzo.com porzo.tv postegro.itpostyourgirls.wspovpornonly.com povr.com pp6.info -ppe.lawyer  pplah.com ppp91.ccprastitutki.rupremiumbooty.com premiumhd.netpremiumpornlist.com  press.vinpretty-ass.xyzprettynubiles.comprettyvirgin.com pridetube.comprimecurves.comprimeindianporn.comprimematures.comprimemomsex.comprimepornlist.comprincesscum.com private.comprivatecasting-x.comprivateclassics.comprivatevoyeurvideos.comproctoscopeexam.comprofreeporno.comprojectjav.comprojectvoyeur.com  pron.gurupropertysex.com proporn.comprostate-exam-info.comprostoporno.net prothots.comproxyadult.org -prpops.com ptapjmp.com ptt.sex pu82.vippublic-sex-porn.compublicagentxxx.compublichealthdepartment.infopublicpornvideo.compublicsexhub.compunishbang.compunishworld.compurelyceleb.compurenudism.compuresexmovies.com puretaboo.com purextc.compuripuriunkomura.com -pururin.topussy-pics.netpussy3dporn.com pussyboy.netpussymomsex.compussyporntubes.compussysexgames.compussyshine.infopussyspace.compussyspace.net putinho.net pvt.sexy -pyhapp.comqatarescortsvip.com -qckprn.com qdiehzz7.meqdmomentum.com  qinav.comqingenporn.net -qingse.one qkjuyet.com qmov.com qmov.net qmttqg3k.me +pornxs.compornxvideos.tvpornxvideos.winpornxxxmovies.ccpornxxxplace.compornxxxweb.com pornyeah.com pornyteen.com pornzog.com pornzone.comporstoporno.site  porzo.com porzo.tv postegro.itpostyourgirls.wspovpornonly.com povr.com pp6.info ppb-mod.buzz +ppe.lawyer  pplah.com ppp91.ccprastitutki.rupremium-beauty.com premiumhd.netpremiumpornlist.com  press.vinpretty-ass.xyzprettynubiles.comprettyvirgin.com pridetube.comprimecurves.comprimeindianporn.comprimematures.comprimepornlist.comprincesscum.com private.comprivatecasting-x.comprivateclassics.comprivatevoyeurvideos.comproctoscopeexam.comprofreeporno.comprojectjav.comprojectvoyeur.com  pron.gurupropertysex.com proporn.comprostoporno.net prothots.comproxyadult.org +prpops.com ptapjmp.com ptt.sex pu82.vippublic-sex-porn.compublicagentxxx.compublicpornvideo.compublicsexhub.compunishbang.compunishworld.com purelov5.compurelyceleb.compurenudism.com puretaboo.com purextc.compuripuriunkomura.com +pururin.topussy-pics.netpussy3dporn.com pussyboy.netpussymomsex.compussyporntubes.compussysexgames.compussyshine.infopussyspace.compussyspace.net putinho.net pvt.sexypzforever.skinpzforever01.homespzhanfor.todayqatarescortsvip.com  qattdh.cc +qattdh.top +qattdh1.cc +qattdh2.cc qattdh6.topqbmengmei6.mom  qcmod.xyz qdiehzz7.me  qinav.com +qingse.one qise100.com qmov.com qmov.net qmttqg3k.me qombol.comqooqlevideo.com  qorno.com -qporno.xxxquickiepage.com qumingwz.com qzav.tvr-new-sale.blog.jpr18.clickme.net r18.com  r18av.com  r18lu.com r34porn.netrabbitscams.comrabbitscams.sexrabbitsreviews.com ragnaporn.com rajwaphq.com randyblue.com rapefilms.net rapetube.me rat.xxxratedgross.com +qporno.xxx  qqbs.asia  qqbs.workquickiepage.com qumingwz.com qysg.cc +qysg7.buzz +qysg8.buzz qzav.tvr-new-sale.blog.jpr18.clickme.net  r18av.comr18lu-avi.shop  r18lu.com r34porn.netrabbitscams.comrabbitscams.sexrabbitsreviews.com rajwaphq.com randyblue.com rapefilms.net rapetube.me rat.xxxratedgross.com rbc007.com rbe996.com -rbeopp.com re25.vip reachporn.comreaderswivesonline.comreal-homemade-movies.comreal-mature-porn.comreal-thaipussy.comrealcuckoldsex.com realdoll.comrealgfporn.comrealitykings.comreallesbianexposed.comrealmaturesfuck.comrealpornclip.comrealsexdoll.comrealteengirls.comrealzoomovies.comrecelebrity.comrectovaginalexam.comredamateurtube.comredfaptube.com redgifs.com redhdtube.xxxredlightcenter.comredmatureporn.com redporn.xxx redporno.czredpornpictures.com redsexhub.comredteenporn.comredtub3xxx.com redtube.blog redtube9.comredtubepremium.comredwap-xxx.com  redwap.me -redwap.pro  redxxx.ccredxxxvideo.tvredxxxvideos.com +rbeopp.com  rcl07.xyz rds-yes.buzz re25.vip reachporn.comreaderswivesonline.comreal-homemade-movies.comreal-mature-porn.comreal-thaipussy.comrealcuckoldsex.com realdoll.comrealgfporn.comrealitykings.comreallesbianexposed.comrealmaturesfuck.comrealpornclip.comrealsexdoll.comrealteengirls.comrealzoomovies.comrecelebrity.comredamateurtube.comredfaptube.com redgifs.com redhdtube.xxxredlightcenter.comredmatureporn.com redporn.xxx redporno.czredpornpictures.com redsexhub.comredteenporn.comredtub3xxx.com redtube.blog redtube9.comredtubepremium.comredwap-xxx.com  redwap.me +redwap.pro  redxxx.ccredxxxvideo.tv ree007.xyz reiporno.com renderos.com -repe21.com  resao.comretroclassicporn.comretrohomevideos.comretroxxxmovs.com  rexxx.org ricefever.com -rigums.xyz risextube.com +repe21.com  resao.comresoubanana.buzzresoubang.buzzretroclassicporn.comretrohomevideos.comretroxxxmovs.com  rexxx.org rhyw.me rhyw31.life ricefever.com +rigums.xyz rinvdh7.xyz risextube.com +rjgsp.buzz rjgsp1.buzz rlczdo.xyz -rm2029.com ro89.comrockettube.comrocksextube.com roloflix.com roloxxx.comromantic-sex-video.comrosemarydoll.com roshy.tv  rou.videoroughebonysex.com roughman.net royalcams.com -rplay.live rrs1.xyz -rssing.com rude.com rukoebxx.com rule34.asia  rule34.us rule34.world -rule34.xxx -rule34.xyz rule34h.comrule34pornvids.comrule34video.com ruleporn.com rumporn.com rundf665.cyou runporn.comrunwayescorts.comrushporn.online rushporn.xxxrussianrape.org ruvideos.net s-books.com s8ds5gfm.xyz sabuibo.net -sacduc.comsacredhentai.com saerock.com safebooru.orgsakuralive.comsambaporno.comsankakucomplex.com sanwapub.com saoni91.xyz saonidh01.ccsapphicerotica.comsapphicpornonly.com sarapbabe.com satan18av.com -satnym.comsavitabhabhi.comsavitabhabhi.vip savitahd.net sca-tolo.infoscandalplanet.com scanlover.comscat-enema.comscat-japan.com scat-shop.net  scat.gold scatfap.comscatfinder.com -scathd.com scatkings.comscatnetwork.comscatolo-guromania.com scatshop.com scatsite.com scatvids.club scatville.comscharferporno.com scifisex.net -scolle.netscorediscounts.clubscrew-my-wife.com scrolller.com seaporn.org -search.xxxsecret-flirt-hub.comsecretbabes.co.uksecretubes.com see.xxx seedmov18.comseehorsepenis.comseematureporn.comseemilfporn.com seemygf.com seemyporn.com sego8.cc sego8.co  sego8.xyz sehuatang.netseiroganmania.com -seksmet.nlsekswebsite.nlselectanescort.comselectyourgame.comselfloversworld.com seneporno.com seniortgp.comsenpaiheat.comsensualgirls.orgsensualmothers.com sensueel.net senzuritv.net -seqing.oneseqingwangzhan.pro seqingx.com ser7.ccserbiporno.netserviporno.com seselah.com sesenovel.comsessoamatorialeitaliano.comsevereporn.comsevgikurtulmaz.comsex-amateur-clips.com +rm2029.com ro89.comrockettube.comrocksextube.com roloflix.com roloxxx.comromantic-sex-video.comrosemarydoll.com roshy.tv  rou.video roudao6.buzz roudaosp.ccroughebonysex.com roughman.net royalcams.com +rplay.live +rrl28.buzz rrs1.xyz +rssing.com rude.com rukoebxx.comrulaisc-tv.buzz rule34h.comrule34pornvids.comrule34video.com ruleporn.com runporn.comrunwayescorts.comrushporn.online rushporn.xxxrussianrape.org ruvideos.net s-books.com +s1s1s1.com s8ds5gfm.xyz sabuibo.net +sacduc.comsacredhentai.com saerock.com safebooru.orgsakuralive.comsambaporno.comsankakucomplex.com saobjpg.com saoni91.xyz +saonia.xyzsaonidh-one.sbs saonidh.world saonidh01.ccsapphicerotica.comsapphicpornonly.com sarapbabe.com satan18av.com +satnym.com  satv01.mesavitabhabhi.comsavitabhabhi.vip savitahd.net sbgkstv.shop sca-tolo.infoscandalplanet.com scanlover.comscat-enema.comscat-japan.com scat-shop.net  scat.gold scatfap.comscatfinder.com +scathd.com scatkings.comscatnetwork.com scatshop.com scatsite.com scatvids.club scatville.comscharferporno.com scifisex.net +scolle.netscorediscounts.clubscrew-my-wife.com scrolller.com +sdnice.one sdnitube.buzz seaporn.org +search.xxxsecret-flirt-hub.comsecretbabes.co.uksecretubes.com see.xxx seedmov18.comseehorsepenis.comseematureporn.comseemilfporn.com seemygf.com seemyporn.com sego8.cc sego8.co  sego8.xyzseiroganmania.com sejie80.com +seksmet.nlsekswebsite.nlsekur1213.guruselectanescort.comselectyourgame.comselfloversworld.com seneporno.com seniortgp.comsenluocaituan.gumroad.comsenpaiheat.comsensualgirls.orgsensualmothers.com sensueel.net senzuritv.net +seqing.oneseqingwangzhan.pro seqingx.com ser7.ccserbiporno.net serlucap.lolserlutv258.xyzserviporno.com seselah.com sesenovel.comsessoamatorialeitaliano.comsevereporn.comsevgikurtulmaz.comsex-amateur-clips.com sex-av.com sex-douga.jpsex-for-work.com sex-gif.org sex-hay.prosex-hot-sites.com sex-ly.com sex-teen.net sex-young.com sex.cam sex.com sex.sex sex.xxx sex0098.com -sex021.net  sex3.mobisex4arabxxx.com sexalarab.comsexandsplash.comsexanimalvideos.com sexanime.net sexarea.org sexasia.netsexavidols.com sexbebin.com sexbomba.ru sexbombo.comsexbookecuador.com  sexbq.comsexcartoon.bizsexcelebrity.net sexcord.comsexdollpornhd.com sexdolls.comsexdollsshow.com -sexdug.comsexecherche.comsexedanslepre.net  sexei.netsexemulator.com sexfilm.al.rusexfilm4free.comsexfilmeporno.comsexfilmstube.com  sexfl.xyzsexflashgame.orgsexflexible.com sexgalaxy.net sexgame.comsexgamefun.com sexgames.cc sexgames.xxxsexgamesbox.comsexgamesclub.com sexguide.ro sexharlot.com  sexhd.fun +sex021.net  sex3.mobisex4arabxxx.com +sex588.net sex8.cc sexaidh.com sexalarab.comsexandsplash.comsexanimalvideos.com sexanime.net sexarea.org sexasia.netsexavidols.com sexbebin.com sexbomba.ru sexbombo.comsexbookecuador.com  sexbq.comsexcartoon.bizsexcelebrity.net sexcord.comsexdollpornhd.com sexdolls.comsexdollsshow.com +sexdug.comsexecherche.comsexedanslepre.net  sexei.netsexemulator.com sexfilm.al.rusexfilm4free.comsexfilmeporno.comsexfilmstube.com  sexfl.xyzsexflashgame.orgsexflexible.com sexgalaxy.net sexgame.comsexgamefun.com sexgames.cc sexgames.xxxsexgamesbox.comsexgamesclub.com sexguide.ro  sexhd.fun sexhd.pics sexhdmovs.comsexhotgames.com sexhub.red sexhubhd.com sexifilm.top sexiframe.com sexindians.cc sexinsex.netsexiranian.party  sexjk.com -sexjobs.it sexkorea.netsexlikereal.comsexmadeathome.comsexmature.club sexmerci.com +sexjobs.it sexkomix2.com sexkorea.netsexlikereal.comsexmadeathome.comsexmature.club sexmerci.com sexmex.xxx -sexmix.netsexmodel.wordpress.com sexmomsex.comsexmovies24.com sexmummy.com sexmutant.com sexnaweb.net sexnudo.com sexo123.net sexodama.comsexodeamor.comsexopornolive.comsexoquente.blogsexplustube.netsexpornimg.comsexpornpictures.comsexpornvideoasian.com sexsaoy.com sexsex1.com sexsexe1.com sexsiam.com +sexmix.netsexmodel.wordpress.com sexmomsex.comsexmovies24.com sexmummy.com sexmutant.com sexnaweb.net sexnudo.com sexo123.net sexodama.comsexodeamor.comsexopornolive.comsexoquente.blogsexpornimg.comsexpornpictures.comsexpornvideoasian.com sexsaoy.com sexsex1.com sexsiam.com sexsim.comsexsimulator.comsexsiteinc.comsexstoriespost.com  sextb.net sextime.tv sextop.net sextop1.net sextorso.comsextoystop.comsextreffen-portale.comsextreffensite.com sextube.desi sextube.fmsextube69free.netsextubebox.comsextubedot.comsextubehub.comsextubeset.comsextubespot.comsextubexxl.com sextubish.com -sextvx.com sexu.comsexualhentai.net sexuria.com +sextvx.com  sextw.net sexu.comsexualhentai.net sexuria.com sexvid.xxxsexvideo10.comsexvideo12com.prosexvideos.host sexvideos.telsexvideosxxx.mobi -sexvids.cc  sexvr.comsexwebvideo.comsexwithhorse.net  sexxhd.de  sexxx.cfd -sexxx8.xyz sexxxdoll.com sexxxhd.com sexxxtape.net sexxxx.rodeosexxxxfilms.comsexy-babe-pics.comsexy-beauties.comsexy-models.net sexy-more.comsexy-older-women.comsexy-photos.netsexy-torrents.comsexy3dtoon.comsexyandfunny.comsexyasiangirls.ccsexyavenue.comsexybabesz.comsexycandidgirls.com sexyculo.com sexyfeet.tvsexyfuckgames.comsexyfucking.rusexygirlfriendtube.comsexygirlspics.com sexygloz.comsexyhomewives.com sexyhub.comsexyhumorgames.comsexykittenporn.com sexyoung.mesexypornpictures.orgsexyseeker.comsexysexdoll.comsexysites.com.phsexyteenssite.com sexytuber.comsexywetpussy.com -sexzy4.comsfmcompile.club sg120.me sgp1.funsh-xuxingda.com sh83.xyz shadbase.comshadowslaves.com shahvani.com shahvani.siteshahvatsaraa.comshakethesnake.com shameless.comshapelcounset.xyzsharks-lagoon.frsharkyporn.com sharmota.com sheflix.com  shegg.com shegods.comshemale-porn-galls.comshemalebestlabel.com shemalehd.sexshemaleleaks.comshemalemodelstube.comshemaleporn.funshemaleporn.xxxshemalepornonly.comshemaleporntube.tvshemalespoiledwhore.comshemalestardb.comshemalestube.comshemaletrannypics.comshemaletube.proshemaletubevideos.com shemalez.com -shequ8.camshequdaohang.comshesfreaky.com sheshaft.comshianyuanfang.com shikorina.net shit-porn.net -shithd.com shitjav.comshittytube.comshockingmovies.comshooshtime.comshoptraivip.com  showup.tvshowybeauty.com shrkurl.comshufflesex.com  shyav.com shymysex.comshywifeswap.comsigmoidoscopeexam.com sikiswap.comsilkengirl.comsimilar-porn.funsimonsgirls.com simpcity.susimply-hentai.comsirenxxxstudios.com +sexvids.cc  sexvr.comsexwebvideo.comsexwenheav.shopsexwithhorse.net  sexxhd.de +sexxx8.xyz sexxxdoll.com sexxxtape.net sexxxx.rodeosexxxxfilms.comsexy-babe-pics.comsexy-beauties.comsexy-models.net sexy-more.comsexy-older-women.comsexy-photos.netsexy-torrents.comsexy3dtoon.comsexyandfunny.comsexyasiangirls.ccsexyavenue.comsexybabesz.comsexycandidgirls.com sexyculo.com sexyfeet.tvsexyfuckgames.comsexyfucking.rusexygirlfriendtube.comsexygirlspics.comsexyhomewives.com sexyhub.comsexyhumorgames.comsexykittenporn.com sexyoung.mesexypornpictures.orgsexyseeker.comsexysexdoll.comsexysites.com.phsexyteenssite.com sexytuber.comsexywetpussy.com +sexzy4.comsfmcompile.club sg120.me sgp1.fun sgspe.de +sgspt.buzzsh-xuxingda.com sh83.xyz shadbase.comshadowslaves.com shahvani.com shahvani.siteshakethesnake.com shameless.comshapelcounset.xyzsharks-lagoon.frsharkyporn.com sharmota.com shdd.ink sheflix.com  shegg.com shegods.comshemale-porn-galls.comshemalebestlabel.com shemalehd.sexshemaleleaks.comshemalemodelstube.comshemaleporn.funshemaleporn.xxxshemalepornonly.comshemaleporntube.tvshemalespoiledwhore.comshemalestardb.comshemalestube.comshemaletrannypics.comshemaletube.proshemaletubevideos.com shemalez.comshenshi-cha.com +shequ8.camshequdaohang.comshesfreaky.com sheshaft.comshibashuwu.net shikorina.netshiroutoav.netshishijump001.com shit-porn.net +shithd.com shitjav.comshittytube.comshockingmovies.comshooshtime.comshoptraivip.com  showup.tvshowybeauty.com shrkurl.com shsh201.comshuangmawei.xyzshufflesex.com shymysex.comshywifeswap.comsifangclub.comsigmoidoscopeexam.com sikiswap.comsilkengirl.comsimilar-porn.funsimonsgirls.com simpcity.susimply-hentai.com  sing4.latsirenxxxstudios.com sis.la sis001.com  sis001.us siscache.com sisisl.com siska.videosislovesme.comsissy-university.com sissy.eu.org -sissy.gamesissyporncrossdresser.com siterips.org siteripz.com siteripz.net situero.com sjcollect.com skebetter.com skinstrip.net -skokka.com sksarab.top skunkgirl.ccskyporn.online sldolls.comsleazyneasy.com slutclit.com slutdump.com slutload.com  sluts.xyz sluttyrat.comsmallteenpussy.com smashed.xxx smm99999.comsmokinmovies.com smplace.com smutcam.com smutcams.com smutindia.com -smutty.comsmuttymoms.com smyw.orgsnapwebcams.com snjulebu.comsocialmediagirls.comsociolotron.comsoftmodels.net -soirt4.fun -sokmil.comsomanylolies.comsonorousporn.com soolakhi.com  sora6.com sorairi.info  souka.xyzsouth-plus.net sp.coolspankandbang.com spankbang.comspankbang.partyspankbang1.com spanking.wikispankingstudio.comspankingtube.comspankmonster.comspankred3d.com spankwire.comspectraltube.comspermyporn.com spicebar.despicybigtits.comspicystory.net -spizoo.comspreadporn.org spring06.top spring13.top  srwwu.uno ss7.app  sshs.club sshs.pw sshs.xyz sss.xxx ssshuqian.xyz +sissy.gamesissyporncrossdresser.com siterips.org siteripz.com siteripz.net situero.com  six9dy.pw sjcollect.com sjhsp1.buzz skebetter.com skinstrip.net +skokka.com sksarab.top skunkgirl.ccskyporn.online sl99mod.buzz sldolls.comsleazyneasy.com slutload.com  sluts.xyz sluttyrat.comsmallteenpussy.com smashed.xxx  smmsp.xyzsmokinmovies.com smplace.com smutcam.com smutcams.com smutindia.com +smutty.comsmuttymoms.com smyw.orgsnapwebcams.com snjulebu.comsocialmediagirls.comsociolotron.comsoftmodels.net sogclub.com sojiy1124.top +sokmil.comsonorousporn.com soolakhi.comsoooyinfor.lol +soporn.com  sora6.com  sos44.com  souka.xyzsouth-plus.net soyinyj.top sp.coolspankandbang.comspankbang1.com spanking.wikispankingstudio.comspankingtube.comspankmonster.comspankred3d.com spankwire.comspectraltube.comspermyporn.com spicebar.despicybigtits.com +spizoo.com sqyzh-dh.sbs ss7.app  sshs.club sshs.pw sshs.xyz sss.xxx ssshuqian.xyz sssins.com sssjav.com sssuo1.xyz starsze.icu -staxus.comsteamofporn.comsteamygamer.comsteezylist.comstepdaughter.lovestepfamilyporn.comstepmaturesex.com stepmom.onestepsiblingscaught.comstickofjoy.comstileproject.comstimorolsex.com  stin31.rustocking-tease.comstockingfetishvideo.comstonefoxlingerie.comstonefoxproductions.comstoriesonline.netstraightpornstuds.comstream-mydirtyhobby.biz streamate.comstreamhentaimovies.comstreamingporn.xyzstreamlatina.com streamporn.cc streamporn.pw streamsex.com streamxxx.tvstreetmeatasia.comstrip-poker.xxxstripcamfun.com stripchat.comstripparadise.comstripselector.comstripskunk.com studiofow.comstudioluxus.com stufferdb.comstupidcams.com +staxus.comsteamofporn.comsteamygamer.comsteezylist.comstepdaughter.lovestepfamilyporn.comstepmaturesex.com stepmom.onestepsiblingscaught.comstickofjoy.comstileproject.comstimorolsex.com  stin31.rustocking-tease.comstockingfetishvideo.comstonefoxlingerie.comstonefoxproductions.comstoriesonline.netstraightpornstuds.comstream-mydirtyhobby.biz streamate.comstreamingporn.xyzstreamlatina.com streamporn.cc streamporn.pw streamsex.comstreetmeatasia.comstrip-poker.xxxstripcamfun.com stripchat.comstripparadise.comstripselector.comstripskunk.com studiofow.comstudioluxus.com stufferdb.comstupidcams.com sub147.comsublimedirectory.comsubmityourflicks.com sucksex.com sukafeti.jpsukebei.nyaa.sisukebelinks.com sumomo-ch.com sunporno.comsupadou.blogism.jpsupanimegames.comsuperadultgames.comsupergratisporno.comsuperhqporn.comsuperjapanesesex.comsupersexeamateur.com -supjav.com sureporn.com  suxib.comsvensksexfilm.comsvipshipin.storesvscomics.asia svscomics.com svsgames.org  swag.live swapsmut.comsweetadult-tube.com sweetmlif.net sweetsext.comsweetsinner.com swegold.comswingercuckoldporn.comswingerpornfun.comswingerporntube.com swingers-homemade-videos.comswingers.theadulthub.comswingersexorgy.comswingexpert.nlswpr.livedoor.blog +supjav.com sureporn.com  suxib.comsvensksexfilm.comsvipshipin.storesvscomics.asia svscomics.com svsgames.org swapsmut.comsweetadult-tube.com sweetsext.comsweetsinner.com swegold.comswingercuckoldporn.comswingerpornfun.comswingerporntube.com swingers-homemade-videos.comswingers.theadulthub.comswingersexorgy.comswingexpert.nlswpr.livedoor.blog sxarab.top sxshentai.com -sxyprn.com syzbj36.xyz szexvideo.top t66y.com tabooporn.tvtabooporns.com tabootube.xxxtabustudios.cotacamateurs.com  taiav.comtaiwanadultexpo.com taiwansex.tw  takens.tw -taknai.com takporn.comtaleofthenight.comtamilsexvideos.cc tanflix.com tantaly.com taose.tvtaradinhos.com +sxyprn.com +sybj91.one sybjav.online syfor.click syzbj36.xyz szexvideo.top t66y.com tabooporn.tvtabooporns.com tabootube.xxxtabustudios.cotacamateurs.com tachusz.xyz  taiav.comtaiolongdh.sbstaiwanadultexpo.com taiwansex.tw  takens.tw +taknai.com takporn.comtaleofthenight.comtamilsexvideos.cc tanflix.com tantaly.com taoil-cn.sbs taqunuhai.viptaradinhos.com tasexy.com tasexy.toptastyblacks.com tati-log.com -taxi69.comtaxidrivermovie.com tbib.org  tblop.comtbr.tangbr.net tctsx28d.xyzteacherfucksteens.comteachmyass.com teamskeet.comteatroporno.com teen-girl.netteen-lover.net teen-sexy.com teen3x.mobiteenagefucking.comteendreams.comteengirlfriendtube.comteenporngallery.netteenporntube.xxxteenpornvideo.xxx teenport.comteenpussypicture.comteenqueens.net teenrave.org -teensex.meteensloveanal.comteensloveporn.net teensnow.com teensnow.link teentube.proteenwebcamtube.com teeztube.comtelegram-porn.com terk.nlterrlficdates.comtettediferro.it +taxi69.comtaxidrivermovie.com tbib.orgtbr.tangbr.netteacherfucksteens.comteachmyass.com teamskeet.comteatroporno.com teen-girl.netteen-lover.net teen-sexy.com teen3x.mobiteenagefucking.comteendreams.comteengirlfriendtube.comteenporngallery.netteenporntube.xxxteenpornvideo.xxx teenport.comteenpussypicture.comteenqueens.net teenrave.org +teensex.meteensloveanal.comteensloveporn.net teensnow.com teensnow.link teentube.proteenwebcamtube.com teeztube.comtelegram-porn.com temetube.xyz terk.nltettediferro.it tferwq.comtgirlcentral.comtgirlpostop.com tgp6.com tgtube.com tgutube.com thai-xxx.com -thai69.comthaicherry.com thaichix.comthaicuties.com thaigirls.netthaigirls100.net theav.ccthebestfetishsites.comthebondagefiles.comthecamdude.comthecandidbay.comthecandidforum-voyeur.rutheclubprive.comtheclyster.comthecuckold.comthecuckoldporn.comthefappening.prothefappening.wikithefappeningblog.com +thai69.com thaichix.comthaicuties.com thaigirls.netthaigirls100.net thdh.cc theav.ccthebestfetishsites.comthebondagefiles.comthecamdude.comthecandidbay.comthecandidforum-voyeur.rutheclubprive.comthecuckold.comthecuckoldporn.comthefappening.prothefappening.wikithefappeningblog.com thegay.comthegayoffice.comthehabibshow.comthehentaiworld.com thehun.nettheindianleaks.com thekarups.comtheleakbay.comthelittleslush.comthemilfmovies.comthenewgirlspooping.comthenewporn.comthenipslip.com thepervs.com -theporn.ccthepornarea.comthepornbest.comthepornbet.comthepornbin.comthepornblender.comthepornguy.orgthepornlinks.comthepornlist.comthepornlist.netthepornlistdude.comthepornmap.comthepornscat.comtheporntoplist.comthesafeporn.comthesexbible.comtheteenhome.comthethothub.com thetranny.comthevirtualsexreview.com theyxxx.com -thisav.com -thisav.org thisvid.comthisvidscat.net thotbook.tv +theporn.ccthepornarea.comthepornbest.comthepornbet.comthepornbin.comthepornblender.comthepornguy.orgthepornlinks.comthepornlist.comthepornlist.netthepornlistdude.comthepornmap.comthepornscat.comtheporntoplist.com theporny.comthesafeporn.comthethothub.com thetranny.comthevirtualsexreview.com theyxxx.com +thisav.com thisvid.comthisvidscat.net thotbook.tv thothub.ru -thothub.to thottok.com thotvids.com thri.xxx thrixxx.com thtmod1.comthumbnailseries.com thz7.net thzu.cctianbiav10.comtiantang.today  tiava.com -tiava1.com  tiaz.sitetig-ol-bitties.live timi1.me  timo0.com tinhduc.org +thothub.to thottok.com thotvids.com thri.xxx thrixxx.com thtmod1.comthumbnailseries.com thz7.net thzu.cctiantang.today  tiava.com +tiava1.com  tiaz.sitetig-ol-bitties.live timi1.me  timo0.com +ting53.xyz tinhduc.org tiny4k.com tiohentai.com titsbox.comtitsintops.comtittykings.com -tjsbfj.com tkb008.xyz tkb2233.life tkbqf2.life -tktube.com tnaflix.comtokyomotion.comtokyomotion.nettokyoporns.comtomatespodres.com tomovie.nettonicmovies.comtoomadporn.pro toon-3d.comtoonsexblog.comtoosexyvaginas.com top100nl.nettop100sexgames.comtopadultgames.biz topanime.biztopartporn.comtopbabesblog.orgtopcartoonsites.comtopcelebnudes.com topchats.comtopchineseporn.comtopcuckolds.comtoperoticartsites.com topescort.nltopescortbabes.com topexhib.net topface.comtopfantasyart.comtopfreepornvideos.com  tophd.xxx tophdsex.com tophentai.biztophentaicomics.comtopless.com.ua topmanga.biztopnudemalecelebs.com -topporn.metoppornguide.comtoppornoduro.comtoppornsites.comtoppornsites.nettoprealvideos.com topsexart.comtopsexhdvideos.comtopsexygames.comtoptoonsites.com topvids.nettopxxxpornvids.comtopyoungporn.com toroporno.comtorrentkitty.tvtorrentleen.com totoleak.com tourporno.comtoutoupa1024.funtownofsins.comtpornstars.com tps138.info +tktube.comtmei-taoyuan.com tnaflix.com tokyo-hot.comtokyomotion.comtokyomotion.nettokyonightstyle.comtokyoporns.comtomatespodres.comtonicmovies.comtoomadporn.pro toon-3d.comtoonsexblog.com top100nl.nettop100sexgames.comtopadultgames.biz topanime.biztopartporn.comtopbabesblog.orgtopcartoonsites.comtopcelebnudes.com topchats.comtopchineseporn.comtopcuckolds.comtoperoticartsites.com topescort.nltopescortbabes.com topexhib.net topface.comtopfantasyart.comtopfreepornvideos.com  tophd.xxx tophdsex.com tophentai.biztophentaicomics.com topmanga.biztopnudemalecelebs.com +topporn.metoppornguide.comtoppornoduro.comtoppornsites.comtoppornsites.nettoprealvideos.com topsexart.comtopsexhdvideos.comtopsexygames.comtoptoonsites.com topvids.nettopxxxpornvids.comtopyoungporn.com toroporno.comtorrentkitty.tv totoleak.com tourporno.comtownofsins.com toxin-up.sbs toxinzoo.sbstpornstars.com tranny.one trannygem.com trannytube.tvtrannyvideosxxx.com trans500.comtransangels.comtransarmuito.comtranscamslive.comtranspornsites.comtravelgirls.comtrendyporn.com triballo.nettrikepatrol.comtrixhentai.comtropictube.comtrueamateurmodels.comtrueamateurs.com trueanal.comtruebeachporn.comtrustedpeach.comtruthordarepics.com truyen18.xyztruyengihay.nettruyenhentai.xyz truyenkk1.comtruyentranh86.com truyenwk.com tryboobs.comtrycuckold.comtryfuckmenow.com tryquinn.com tryst.linktsescortsdirectory.comtsmodelstube.com  tssp.best tsthai.com tsumino.com tsundora.comtsuradou.noonvob.com  tsyum.comtube-pornomovs.comtube-sex-videos.com tube.bz tube18.sex tube188.com tube2011.com tube2012.com tube2017.com tube4sex.comtube4world.com tube8zoo.com tubebdsm.comtubecaptain.com tubecop.com tubedna.com tubedupe.com tubeenema.comtubefuckme.nettubegalore.com tubegold.xxxtubelombia.net tubemature.tvtubemovies4k.comtubeorigin.comtubepatrol.orgtubepornclassic.comtubepornlist.comtubepornstars.comtubepornup.comtubesafari.com -tubesex.metubeshemales.com tubetop69.com tubetria.mobitubetubetube.com  tubev.pro  tubev.sextubevintageporn.com tubewolf.comtubexclips.com tubinge.com -tubous.com tubsexer.com tubxporn.com tubxporn.xxx tufos.com.br  tukif.comturbogvideos.com  tushy.com twavking.com twcomix.com twhentai.com twifuli.comtwinkboyfriends.tvtwinkspornos.comtwinktube.sexy twinkybf.comtwistedlinks.net twistys.com twitcomike.jp -twlegs.com twoo.com -tx5254.com tx5ptbp7.com txqzz34r.com +tubesex.metubeshemales.com tubetop69.com tubetria.mobitubetubetube.com  tubev.pro  tubev.sextubevintageporn.com tubewolf.comtubexclips.com tubinge.com tubsexer.com tubxporn.com tubxporn.xxx tufos.com.br  tukif.comturbogvideos.com  tushy.com  tw985.com twavking.com twcomix.com twhentai.com twidouga.net twifuli.comtwinkboyfriends.tvtwinkspornos.com twinkybf.comtwistedlinks.net twistys.com twitcomike.jp +twlegs.com twline5.com twoo.com +tx5254.com txqzz34r.com txvlog.com txxx.com  txxx1.comtyler-brown.com tyms2022.com tytng189.comtytporno.online u3c3.com u9a9.cc u9a9.com uaa.com  uflash.tvuguisupapa.net -uhairy.com  uhtube.me -uiporn.comujapanesesex.comuk-exhibitionist.comultradonkey.comultrayoungsex.com -uncams.comuncensoredhentai.xxxuncensoredsexparties.comunderhentai.netungrounded.netuninhibitedcomix.com unkoscene.comunusualporn.net up01.ccupdatetube.com upjav.ccuplay-istrip.com +uhairy.com +uiporn.comujapanesesex.com ujizzcn.comuk-exhibitionist.comultradonkey.com +uncams.comuncensoredhentai.xxxuncensoredsexparties.comunderhentai.netuninhibitedcomix.com unkoscene.comunusualporn.net up01.ccupdatetube.com upjav.ccuplay-istrip.com uplust.com upornia.com uporno.xxx ura-akiba.jp -urasma.comuriminzokkiri.comurlgalleries.net urukawa.comuselessjunk.com uusexdoll.com uusextoy.com uxxxporn.com v2ph.com  v7hds.comvagabundasdoorkut.net  vagina.nlvaginacontest.comvaginal-ultrasound.comvaginalultrasound.infovaginapics.pro vbejeyv.shop  vdoav.comvecchiescopate.casa venezporn.com -veporn.com vepornhd.club veporno.netvercomicsporno.xxx verhentai.tvverpeliculasporno.gratis vervesex.comveryladyboy.com vgg8.comviddeo-jav.net video-jav.net video-one.com video.fc2.com video01.orgvideodesexo.blog videoleak.me videos6.comvideosamadoresreais.comvideosdemadurasx.comvideosdepornografia.blog.brvideosdesexo.br.comvideosdesexo.com.brvideosection.comvideoshorny.comvideoskaseros.comvideosmadeathome.comvideosporno.com.brvideosporno.lifevideostravestis.xxxvideosxxxnicaragua.topvideoxxxporn.biz videozzz.com +urasma.comurlgalleries.net urukawa.comuselessjunk.com  uup76.com uusexdoll.com uusextoy.com v-av.com v2ph.com  v7hds.comvagabundasdoorkut.net  vagina.nlvaginacontest.comvaginal-ultrasound.comvaginalultrasound.infovaginapics.pro vbejeyv.shop  vdoav.comvecchiescopate.casa venezporn.com +veporn.com vepornhd.club veporno.netvercomicsporno.xxx verhentai.tvverpeliculasporno.gratis vervesex.comveryladyboy.com vgg8.com video-jav.net video-one.com video.fc2.com video01.orgvideodesexo.blog videoleak.mevideosamadoresreais.comvideosdemadurasx.comvideosdepornografia.blog.brvideosdesexo.br.comvideosdesexo.com.brvideosection.comvideoshorny.comvideoskaseros.comvideosmadeathome.comvideosporno.com.brvideosporno.lifevideostravestis.xxxvideoxxxporn.biz videozzz.com vidown.comvidspornoduro.com viet.sex viet69.dev viet69.link viet69.newsviewerswives.net viewgals.com vikiporn.comvintage-erotica-forum.comvintageamateurporn.comvintagehomemadesex.comvintagemedicalpictures.comvintagexxxfilms.com vipergirls.to vipissy.comvipmatureporn.comvipstudiocali.com viralcum.com viralporn.comvirginpornlinks.comvirtualpartyworld.comvirtualporn.comvirtualrealgay.comvirtualrealporn.comvirtualrealtrans.comvirtualtaboo.com vitukali.com vivaxnxx.com  vixen.com -vixvids.to vjav.com vl4x.net  vmwxw.com vnanchoi.cavomitkings.com voyeureye.com voyeurhit.comvoyeurhouse.comvoyeurmonkey.comvoyeurpapa.comvoyeurporntapes.comvoyeurstyle.com voyeurweb.com -vpejey.xyz  vporn.comvpornvideos.com -vrbgay.com  vrcams.io vrfdgswx.xyz vrfun18.com +vixvids.to vjav.com vl4x.net  vmwxw.com vnanchoi.cavomitkings.com voyeureye.com voyeurhit.comvoyeurhouse.comvoyeurmonkey.comvoyeurpapa.comvoyeurporntapes.comvoyeurstyle.com voyeurweb.com  vporn.comvpornvideos.com +vrbgay.com  vrcams.io vrfun18.com vrporn.com vrporncat.comvrpornjack.comvrpornmania.comvrpornranked.comvrsexgames.biz vrsmash.com vrsumo.com -vsezoo.comvuasanhrong.com vulgarx.com vxnbbrs.xyz vxxsred.xyz  w0512.com w6un.comwaittingfor001.weebly.com wankgames.com wankizer.com -wankoz.com  wankz.com wankzvr.comwantmywife.com +vsezoo.com vulgarx.com  w0512.com w6un.comwaisongcha.comwaittingfor001.weebly.com wana-tv.sbs wancctv.asiawandan-dh.buzz wanduww.buzz wankgames.com wankizer.com +wankoz.com  wankz.com wankzvr.com want520.comwantmywife.com waplog.com waranlov.com warddogs.com washa.tv waskucity.comwatch-my-gf.comwatch-porn.netwatchersweb.comwatchindianporn.netwatchjavonline.comwatchmyexgf.net watchmygf.me watchmygf.net watchmygf.towatchmygirlfriend.tvwatchteencam.comwater-and-power.comwaterdamagesandiego.org watersex.com wav.tv -wawatv.net -wbvm4s.comwearehairy.com weav.xyzwebcam-teen.netwebcamgirls.chatwebcamjackers.comwebcammedellin.cowebcamtubexxx.com webgata.netwebgirlsonline.net weimi180.comweknowporn.com welcomix.comwellfuckedwife.comwellmaturetube.comwet-ass-pussy.comwetandpuffy.com wetchicks.org wetnhorny.com wetplace.comwetpussygames.comwetsextube.comwhatboyswant.comwhengirlsplay.com whentai.com whichav.com whichav.videowhitexxxtube.comwholevideos.comwhoreasianporn.com whoreshub.com whoreslag.comwhoreteensex.comwhorevintagesex.com whvuxtub.com whynotbi.comwife-home-videos.comwifehomeporn.comwifeinlove.comwifeinterracialfuck.comwifeloversporn.comwifemovies.netwifesexorgy.comwifesharingpics.comwifevideos.netwifewantstoplay.com wikifeet.com wikiporn.tvwikisexguide.comwildcamporn.com wildfanny.comwildfreevideos.comwildxxxhardcore.com willyporn.com winning11.com wixipedia.net wiz-s.jp wldfnjh.com  wnacg.com -wnacg.link  wnacg.org wonporn.com wonporn.netwoodmancastingx.com world3d.bizworldescortindex.comworldpornvideos.com worldsex.com wowgirls.comwowindianporn.comwowpornlist.xyz wowstars.comwowyoungporn.com wtfpeople.com wumashe.com  wunvb.com wuso.me wuyefuli.org wvm0agb4.me +wbvm4s.comwearehairy.com weav.xyzwebcam-teen.netwebcamgirls.chatwebcamjackers.comwebcammedellin.cowebcamtubexxx.com webgata.netwebgirlsonline.net weimi180.comweknowporn.com welcomix.comwellfuckedwife.comwellmaturetube.com  wen21.xyzwet-ass-pussy.comwetandpuffy.com wetchicks.org wetnhorny.com wetplace.comwetpussygames.comwetsextube.com +whasil.xyzwhatboyswant.comwhengirlsplay.com whentai.comwhereiskpkuang.com whichav.com whichav.videowhitexxxtube.comwholevideos.comwhoreasianporn.com whoreshub.com whoreslag.comwhoreteensex.comwhorevintagesex.com whvuxtub.com whynotbi.comwife-home-videos.comwifehomeporn.comwifeinlove.comwifeinterracialfuck.comwifeloversporn.comwifemovies.netwifesexorgy.comwifesharingpics.comwifevideos.netwifewantstoplay.com wikifeet.com wikiporn.tvwikisexguide.comwildcamporn.com wildfanny.comwildfreevideos.comwildxxxhardcore.com willyporn.com winning11.com wixipedia.net wiz-s.jp wjny-one.sbs +wm18s.buzz  wnacg.com +wnacg.link  wnacg.orgwolfsex-me.sbs wonporn.com wonporn.netwoodmancastingx.com world3d.bizworldescortindex.comworldofslaves.ioworldpornvideos.com worldsex.com wowgirls.comwowindianporn.comwowpornlist.xyz wowstars.comwowyoungporn.com wtfpeople.com  wunvb.com wuso.me wuyefuli.org wvm0agb4.me ww9094.comwwwpornhub.pro  wxoyt.com wyqqdz.com -wzlthw.com  wzmyg.com  wztv8.com  x-art.comx-artvideo.net x-caprice.com x-fetish.org x18r.com x3guide.com  x3vid.com x6av.com  x99av.com -x9wang.com -xacmbq.xyzxanimeporn.com xanimeporn.tv xapplist.comxattractive.com xb18.me  xbabe.com -xbabe.mobi xbahis33.com xbahis44.com -xbanny.com xbeegtube.com  xbnat.com xbookcn.net xbooks.work +wzlthw.com  wzmyg.com  wztv8.com +wzzyw.buzz  x-art.comx-artvideo.net x-caprice.com x-fetish.org +x0rd38.xyz x18r.com x3guide.com  x3vid.com x6av.com  x99av.comxanimeporn.com xanimeporn.tv xapplist.comxattractive.com xaxy.xyz xb18.me  xbabe.com +xbabe.mobi +xbanny.com xbeegtube.comxbhuijiab.info  xbnat.com xbookcn.net xbooks.work xbooru.com xboyvids.comxbrasilporno.com  xcafe.com  xcams.com xcg123.com  xchina.co -xchina.fun xcity.jp xcum.com  xdaddy.in xdir.vip xdporner.com  xecce.com xemales.com  xero.porn xerotica.com xfantazy.comxfemaledom.com xfockers.com xfreehd.comxfuckonline.com xgames.zone xgaytube.com xgaytube.tv xgirls.webcam xgroovy.com xgsp.tv xh-porn.com xh.video xhamster2.com xhot.pro xhub.tv  xiaofu.me xiaogirls.com  xiaoou.io  xiaoou.tv xiaoyaoge.xyz  xie56.xyz -xinfhw.com xing66.lifexinmeitulu.com +xchina.fun xcity.jp xcum.com  xdaddy.in +xdh999.one xdir.vip xdporner.com  xecce.com xemales.com xerotica.com xfantazy.comxfemaledom.com xfockers.com xfreehd.comxfuckonline.com xgames.zone xgaytube.com xgaytube.tv xgirls.webcam xgroovy.com xgsp.tv  xgtd3.com +xgtdr.buzz xh-porn.com xh.video xhamster2.com xhot.pro xhub.tvxiangrikui-app.com +xianir.xyz  xiaofu.me xiaogirls.com  xiaoou.io  xiaoou.tvxiaoshuobb.life xiaoyaoge.xyz  xie56.xyz  xin21.xyzxinaia-av.buzz +xinfhw.com xing66.life xing840.info xinggan77.vip xinlan995.xyzxinmeitulu.com xiuren.org xjavporn.comxkeezmovies.com -xknoop.comxkontakt18.com xkorean.camxl-gaytube.com  xlecx.org  xlinkz.to xlovecam.com +xknoop.comxkontakt18.com xkorean.camxl-gaytube.com  xlecx.org  xlinkz.to xlovecam.com xlydh.cc xmalay.com -xmature.su  xmissy.nlxmoviesforyou.com xnalgas.com xnostars.com xnxvideos.org xnxx-com.cfdxnxx-sex-tube.comxnxx-sex-videos.comxnxx-teens.com xnxx-tv.net xnxx-xxx.win xnxx.health +xmature.su +xmav99.com +xmbsyj.topxmforever.rest  xmissy.nlxmoviesforyou.com xnalgas.com xnertv.shop xnostars.com xnxvideos.orgxnxx-sex-tube.comxnxx-sex-videos.comxnxx-teens.com xnxx-tv.net xnxx-xxx.win xnxx.health xnxx18.pro xnxx2.info xnxx2.it  xnxx2.org  xnxx2.pro xnxx4porn.com xnxxarab.ccxnxxarabsex.com xnxxcom.club xnxxcom.xyzxnxxcomvideos.com xnxxfap.infoxnxxhamster.net xnxxhd.biz  xnxxhd.tvxnxxmovies.com xnxxporn.de xnxxporn.funxnxxpornvid.comxnxxsexclips.comxnxxsexmovies.com xnxxtime.comxnxxvideos.rest xnxxx.cc  xo104.com -xogogo.com xoteens.comxoxoteiras.com xozilla.com  xpaja.net xpee.com xpoleuno.com xpornblog.comxpornplease.com xsela.cc xshaker.net xshr.online xsrxpwvg.com  xstas.biz  xsvod.xyz -xsz-av.com  xtapes.to  xtube.com xtubebdsm.com xtubezoo.com xu97.vip  xujan.com xv1.monster xvds.tv  xvedo.net xvideo-jp.com +xogogo.com +xomfsp.xyz xoteens.comxoxoteiras.com xozilla.com  xpaja.net xpee.com xpoleuno.com xpornblog.comxpornplease.com xqwherb.sbs xsela.cc xshaker.net xshr.online xsijishe.com +xslist.org  xstas.biz  xsvod.xyz +xsz-av.com  xtapes.to +xtegvk.xyz  xtube.com xtubebdsm.com xtubezoo.com xu97.vip  xujan.com xv1.monster xvds.tv  xvedo.net xvideo-jp.com xvideo.com xvideo.runxvideo.vlog.brxvideoporno.tvxvideos-dl.topxvideos-porn-video.comxvideos-xxxx.com xvideos.blog xvideos.co xvideos.la xvideos.red xvideos.tv.br xvideos2.com xvideos3.comxvideos5.com.brxvideosamadoras.comxvideosbrasil.comxvideosbrasileiro.net xvideoscom.mexvideosincesto.comxvideosjingxiang.comxvideosnovinha.comxvideosnovinha.com.brxvideosnovinhas.comxvideostravestis.xxxxvideosup.com.brxvideosx.com.br xvideoz.win xvidios.blog xvidios.xxx xvidzz.com xvirtual.com xvxx.stream xvxxtube.com -xx-map.com xx159.com.cn xx9.app  xxbb9.com  xxbook.cc xxbrits.comxxeronetxx.info -xxgasm.comxxindianporn.com +xx-map.com xx159.com.cn xx9.app  xxbook.cc xxbrits.comxxeronetxx.info xxfbiaa.xyz +xxgasm.comxxindianporn.comxxiqiyiavxx.buzz xxmovz.com  xxnx.restxxnxx-porn.com xxnxx-sex.com xxu.mobi xxvideo.mobi xxvideos.xxx xxvideoss.org -xxvids.net xxx-blog.toxxx-channel.com xxx-com.cfd xxx-fap.com xxx-files.orgxxx-hentai.blogspot.comxxx-porn-fuck.comxxx-porn-tube.com xxx-porn.info xxx-video.cfd xxx-videos.tv xxx-ways.com xxx.com xxx.xxx  xxx18.uno xxx18teen.net xxx2022.com xxx2023.com xxx4hindi.com xxxaporn.comxxxassfuck.com -xxxbit.comxxxbolivianas.com xxxbule.com xxxbullet.com xxxbunker.com xxxccc4.com xxxclub.club xxxcomics.org +xxvids.net xxx-com.cfd xxx-fap.com xxx-files.orgxxx-hentai.blogspot.comxxx-porn-fuck.comxxx-porn-tube.com xxx-porn.info xxx-video.cfd xxx-videos.tv xxx-ways.com xxx.com xxx.xxx  xxx18.uno xxx18teen.net xxx2022.com xxx2023.com xxx4hindi.com xxxaporn.comxxxassfuck.com +xxxbit.comxxxbolivianas.com xxxbule.com xxxbullet.com xxxbunker.com xxxclub.club xxxcomics.org xxxdan.com -xxxdesi.ccxxxdinotube.com xxxengine.net xxxfile.org xxxfiles.com xxxflare.com xxxforte.com xxxfree.watchxxxfuckmom.com xxxgames.bizxxxgames.gamesxxxgirls88.comxxxgratisfilms.com  xxxhd.pro xxxhdporn.ccxxxhdvideo.mobi xxxhentai.netxxxhentaipics.comxxxhentaipics.proxxxhomefuck.com xxxhub123.comxxxhubvideos.com xxxifuck.comxxxindianporn2.comxxxindiantv.comxxxjapanesemovies.com xxxland.netxxxlesbians.me xxxlucah.comxxxmaturepussypics.comxxxmatures.net xxxmofo.comxxxmomporn.tube xxxmovies.fun xxxmovies.pro xxxn.me xxxn.tv +xxxdesi.ccxxxdinotube.com xxxengine.net xxxfile.org xxxfiles.com xxxflare.com xxxforte.com xxxfree.watchxxxfuckmom.com xxxgames.bizxxxgames.gamesxxxgirls88.comxxxgratisfilms.com  xxxhd.pro xxxhdporn.cc xxxhentai.netxxxhentaipics.comxxxhentaipics.proxxxhomefuck.com xxxhub123.comxxxhubvideos.com xxxifuck.comxxxindianporn2.comxxxindiantv.comxxxjapanesemovies.com xxxland.netxxxlesbians.me xxxlucah.comxxxmaturepussypics.comxxxmatures.net xxxmofo.comxxxmomporn.tube xxxmovies.fun xxxmovies.pro xxxn.me xxxn.tv xxxner.comxxxnewvideos.com  xxxnu.com  xxxnxx.mexxxpenguin.com xxxpicz.com xxxporn.suxxxporn123.comxxxporndig.com xxxpornhd.proxxxpornmovs.comxxxpornotuber.comxxxpornozinho.blog.brxxxpornzeed.com xxxreal.com xxxscenes.netxxxsexanal.comxxxsexcinema.comxxxsexocasero.comxxxsextubes.com xxxsexzoo.com xxxshame.com xxxstreams.euxxxstreams.orgxxxstreams.watchxxxteenanal.net xxxtube1.comxxxtubeasian.netxxxtubedot.com xxxtubegf.comxxxtubenote.comxxxtubeset.comxxxtubezoo.com  xxxv.mobixxxvideo.blog.br xxxvideo.one xxxvideo.vipxxxvideo.worldxxxvideoamatoriali.com xxxvideor.comxxxvideos247.comxxxvideoszoo.com xxxvidos.vip xxxvidso.comxxxvirtualworld.com xxxvogue.net -xxxwow.net xxxxvideo.unoxxxymovies.comxxxyoungxxx.com xzone.to xzxxporn.com xzxxtube.com -yabang.org -yaburi.men  yaddal.tv yadori.club -yaeby.info yamoon.club yande.re yaohubaba.comyaoimangaonline.com yaoiotaku.comyaoyaomumu.com yaptube.com yasarang.net yatong.info yavtube.com  yaya.cyou yayadizhi.xyz yazhouse8.com -yeonda.com yepporn.com yes.xxxyespornfree.comyespornplease.comyespornpleasexxx.com yeswegays.comyeyuehuachao11.comyeyuehuachao12.comyeyuehuachao13.com -ygugu4.com yhy.cool yieamnd.com  yinac.xyz -yinac5.top  yinmh.comyinshuiger.infoyouassporn.com  youav.com -youflix.is youjism.com youjizz.sexyoung-amateur-movies.comyoung-webcam.net young-xxx.netyoungamateursporn.com younger19.comyoungerbabes.comyoungermommy.comyoungheaven.comyounglibertines.comyoungmommyfucksme.comyoungpornhd.comyoungpornonly.comyoungpornvideos.com youngsex.sexyyoungsex.videoyoungteenhomeporn.com youngtube.meyouporn-germany.com youporner.euyoupornlist.comyoupornxvideos.netyouramateurporn.comyourassbig.com yourbrain.comyourcolonic.comyourcolonoscopy.comyourdailypornvideos.wsyourdirtymind.com yourdoll.comyourflashporn.comyourfreeporn.tvyourgynexam.com yourlust.comyourpelvicexam.comyourpelvicultrasound.comyourphysicalexam.com yourporn.sexyyourporndump.comyourporngod.comyoursigmoidoscopy.comyourspeculumexam.comyourupskirt.comyourvoyeurvideos.comyourxxxvideos.pro youskbe.comyoutrannytube.com youwuss.com youx.xxxyouyu.services +xxxwow.net xxxxvideo.uno xxxyaom.xyzxxxymovies.comxxxyoungxxx.com xzone.to xzxxporn.com xzxxtube.com  yaddal.tv yadori.club +yaeby.info yamoon.club yande.re yantaqu.com yaohubaba.comyaoimangaonline.com yaoiotaku.com yaole91.xyz yaoliuno.funyaoyaomumu.com yaptube.com yasarang.net yavtube.com  yaya.cyou yayadizhi.xyz yazhouse8.com +yeonda.com yepporn.com yes.xxxyespornfree.comyespornplease.comyespornpleasexxx.com yeswegays.com +yft-mv.sbs +ygugu4.com yhgwgtv.xyz yhy.cool  yinac.xyz +yinac5.top yinhdhan.sbsyinhuafish.lat  yinmh.comyinshuiger.info +yinya.shop  ymhsf.top +ymhsf1.topyouassporn.com  youav.com +youflix.is youjism.com youjizz.sexyoung-amateur-movies.comyoung-webcam.net young-xxx.netyoungamateursporn.com younger19.comyoungerbabes.comyoungermommy.comyoungheaven.comyounglibertines.comyoungmommyfucksme.comyoungpornhd.comyoungpornonly.comyoungpornvideos.com youngsex.sexyyoungsex.videoyoungteenhomeporn.com youngtube.meyouporn-germany.com youporner.euyoupornlist.comyoupornxvideos.netyouramateurporn.comyourassbig.com yourbrain.comyourdailypornvideos.wsyourdirtymind.com yourdoll.comyourflashporn.comyourfreeporn.tvyourgynexam.com yourlust.comyourpelvicexam.com yourporn.sexyyourporndump.comyourporngod.comyourupskirt.comyourvoyeurvideos.comyourxxxvideos.pro youskbe.comyoutrannytube.com youwuss.com youx.xxxyouyu.services yoyoav.net -ypmate.com ysav184.xyz -ysporn.comyuenuge113.xyz yuraku.8v8.be  yusjb.com -yuvutu.com -ywbclx.top  ywoos.com yy55.tv  yyfb.cyou yzld188.top  z00.world z676869.comzatrahal.onlinezazzybabes.com -zbporn.com zeenite.com -zen8ok.xyz zerochan.netzettai-ero.com zh99.netzhaimankan.comzhainanjidi.xyzzhainanjidid.top zibacity.comzingtruyen.net  zishy.com -zobry.site zoig.com -zononi.comzoo-hardcore.com zoo-porno.biz zoo-tube8.com zoo-xnxx.comzoo-xvideo.comzoofiction.comzoofilianet.com -zoohun.comzoomobileporn.comzoophilist.net zooporn.prozooporn.shiksha zooporn.video zoopornmd.com zooporno.bizzooredtube.com  zoos.goldzoosexfarm.com zoosexnet.comzooskoolvideos.com zootube1.comzooxxxsexporn.redzooyouporn.comzoozhamster.com zorglist.com -zqqpwz.com +ypmate.com ysav184.xyz ysg-link.sbs yskg-ber.buzz +ysporn.comyuenuge113.xyz yuenuge18.cc  yusjb.com +yuvutu.com  ywoos.com yy55.tv yy7y.com yy8y.com  yyfb.cyou +yyyzgdl.cn yzld188.top  z00.world z676869.com za77.xyzzatrahal.onlinezazzybabes.com +zbporn.com  zctb.buzz zeenite.com +zen8ok.xyz zerochan.netzettai-ero.com zh99.netzhaimankan.comzhainanjidi.xyzzhainanjidid.top zhangboz1.xyz +zhtv01.comzhuzhushipin-app.com zibacity.comzingtruyen.net  zishy.com zoig.comzoo-hardcore.com zoo-porno.biz zoo-tube8.com zoo-xnxx.comzoofiction.comzoofilianet.com +zoohun.comzoomobileporn.comzoophilist.net zooporn.prozooporn.shiksha zooporn.video zoopornmd.com zooporno.bizzooredtube.comzoosexfarm.com zoosexnet.comzooskoolvideos.com zootube1.comzooxxxsexporn.redzooyouporn.comzoozhamster.com zorglist.com +zqqpwz.comzsuxtx-ktv.shop zteman.net -zunked.com zweiporn.com zzcartoon.com -zzgays.com zzitube.com anime-rule34-world.b-cdn.netxn--80aaazx1an0a.lolxn--8uq428d76d.tokyoxn--cck4d8b3009a.comxn--gmq92kd2rm1kx34a.comxn--hckl3e1e8a8ajin0czf.netxn--hhr917d3fecva.xyzxn--m1abbbgjah.lolxn--mtswd61ejxq.com%!xn--r8jwklh769h2mc880dk1o431a.com%!xn--r8jwklh769hk43amcfoyl3z3a.comxn--uis17aj9kmuf.com xn--urs05q.jpxn--x-qeu1ji09tzlg.bizxn--x-qeu1ji09tzlg.net(^|\.)[1-5]gaoap\.com$!(^|\.)[1-9]+aipai\.(com|net)$!(^|\.)[1-9]+zipai\.(com|net)$(^|\.)[1-9]00caocao\.com$(^|\.)[3-9]0000sao\.com$$ (^|\.)[a-z][1-9][0-9][a-z]\.com$-)(^|\.)[a-z]?fulibl\.(cc|com|org|net|xyz)$(^|\.)18tv[1-5]\.com$ (^|\.)69bag[0-1][1-9]?\.com$ (^|\.)783([a-z][a-z]?)?\.tv$"(^|\.)7mm0([0-1][0-9]?)?\.com$(^|\.)8dgo[1-57-9]\.com$(^|\.)91p[0-9][0-9]?\.com$(^|\.)91porn[0-9]{3}\.me$(^|\.)91sew1[1-6]\.buzz$(^|\.)989[a-z]?\.tv$(^|\.)99pp[1-9][0-9]\.com$:6(^|\.)aipa(111|222|333|444|555|666|777|888|999)\.life$"(^|\.)aisejushi(2|3|5|6)\.com$(^|\.)avcc1[0-9]\.com$!(^|\.)avstar0[1-9]\.(com|me)$(^|\.)banyinjia[0-9]?\.com$HD(^|\.)byyum([3589]|2[235689]|3[34]|4[1-9]|5[1-79]|6[0134679])?\.com$%!(^|\.)cgbb([1-9]|1[0-9]|20)\.com$(^|\.)cosaa[a-z]\.cyou$(^|\.)douyintt[0-9]\.me$(^|\.)fi11sm([0-9]+)?\.com$(^|\.)fiftymvapi\..+$!(^|\.)forduck[0-1][0-9]\.com$&"(^|\.)gaogediao\.(com|me|net|org)$(^|\.)guifw3[1-3]\.cc$(^|\.)h5ccav[1-5]\.com$(^|\.)hhmen[1-3]\.xyz$(^|\.)hkfg[1-7]\.xyz$(^|\.)jav777\.(cc|tv|work)$"(^|\.)jbk0([0-1][0-9]?)?\.com$(^|\.)jdyy[1-9]?\.me$$ (^|\.)kimoav([1-9][0-9]?)?\.com$(^|\.)ksyp0[1-9]\.com$(^|\.)lianren[1-7]\.cc$ (^|\.)loibus\.(cc|com|link)$+'(^|\.)loibus(100|101|202|505|606)\.top$(^|\.)maa18[1-2][0-9]\.com$(^|\.)mdyy[0-9][0-9]\.cc$(^|\.)mdyy[0-1][0-9]\.com$($(^|\.)mimi\.(cfd|lol|onl|sbs|so|vc)$(^|\.)mimi[0-9]{3}\.com$(^|\.)mitao[1-3]\.tv$(^|\.)mmtv[1-5]\.life$40(^|\.)mmwz\.(fun|in|la|me|one|pro|pw|run|tv|ws)$%!(^|\.)putaozy([1-9][0-9]?)?\.com$(^|\.)qqsp0[1-3]\.com$(^|\.)rbp[1-9][0-9]\.com$(^|\.)sao[1-6]0000\.com$(^|\.)sg11[3-9]\.me$(^|\.)spankwire[1-9]\.com$(^|\.)syjc1[1-6]\.xyz$'#(^|\.)tianbiav([1-9]|1[0-6])?\.com$(^|\.)tqav[1-9][0-9]\.com$(^|\.)tt[1-2][0-9]\.tv$(^|\.)ttghg[1-9][0-9]\.xyz$%!(^|\.)tttv([1-9][0-9]?|100)\.com$#(^|\.)twseb([1-9][0-9]?)?\.com$"(^|\.)uu[a-z][1-9][0-9]?\.com$(^|\.)whtdh0[1-3]\.cc$(^|\.)wmm33[0-5]\.com$(^|\.)wyfuli[1-9]\.net$(^|\.)xnkl[3-8]\.cn$(^|\.)yiren[1-9][0-9]\.com$(^|\.)youyuapi\..+$(^|\.)yrrj[1-9]?\.buzz$(^|\.)zh9[0-7]\.net$(^|\.)zztt[1-6][0-9]\.com$(^|\.)zzz[1-9][0-9]\.top$ - - CATEGORY-PT audiences.me bitpt.cn +zunked.com zweiporn.com zzcartoon.com zzdh.biz zzdh.cc zzdh.pw zzdh.run zzdh.ws +zzdh77.com zzdh808.com +zzdh99.com +zzgays.com anime-rule34-world.b-cdn.netxn--096-4g6em5t.comxn--201-4g6em5t.comxn--202-4g6em5t.comxn--203-4g6em5t.comxn--204-4g6em5t.comxn--205-4g6em5t.comxn--2vxsp6vi4j.comxn--8uq428d76d.tokyoxn--av-o44ep1d.comxn--cck4d8b3009a.comxn--gmq348bujlxrb.comxn--gmq92kd2rm1kx34a.comxn--hckl3e1e8a8ajin0czf.netxn--hhr917d3fecva.xyzxn--mtswd61ejxq.com%!xn--r8jwklh769h2mc880dk1o431a.com%!xn--r8jwklh769hk43amcfoyl3z3a.comxn--sjqr38j.comxn--uis17aj9kmuf.com xn--urs05q.jpxn--x-qeu1ji09tzlg.bizxn--x-qeu1ji09tzlg.net(^|\.)[1-5]gaoap\.com$!(^|\.)[1-9]+aipai\.(com|net)$!(^|\.)[1-9]+zipai\.(com|net)$(^|\.)[1-9]00caocao\.com$(^|\.)[3-9]0000sao\.com$$ (^|\.)[a-z][1-9][0-9][a-z]\.com$-)(^|\.)[a-z]?fulibl\.(cc|com|org|net|xyz)$(^|\.)1[0-9]{2}\.one$(^|\.)13mei[5-7]\.buzz$(^|\.)18j[efg]\.life$!(^|\.)18jmttios[0-9]{2}\.com$(^|\.)18tv[1-5]\.com$1-(^|\.)2024(3[0-9]|4[0-9]|6[0-9]|7[0-9])\.xyz$(^|\.)3[0-9]{2}\.icu$(^|\.)3[0-9]{2}\.one$ (^|\.)69bag[0-1][1-9]?\.com$ (^|\.)783([a-z][a-z]?)?\.tv$"(^|\.)7mm0([0-1][0-9]?)?\.com$(^|\.)8dgo[1-57-9]\.com$&"(^|\.)91cg([1-9]|[0-9][1-9])?.com$(^|\.)91p[0-9][0-9]?\.com$@<(^|\.)91porn\.(best|com|cool|group|party|plus|site|tw|work)$(^|\.)91porn[0-9]{3}\.me$(^|\.)91porn[0-9]?\.store$(^|\.)91porn[fvxy]\.com$(^|\.)91sew1[1-6]\.buzz$(^|\.)989[a-z]?\.tv$(^|\.)99pp[1-9][0-9]\.com$(^|\.)9cha[0-9]{2}\.cc$:6(^|\.)aipa(111|222|333|444|555|666|777|888|999)\.life$"(^|\.)aisejushi(2|3|5|6)\.com$(^|\.)aiwei[1-9]{2}\.buzz$(^|\.)aqdk[0-9]{3}\.com$(^|\.)avcc1[0-9]\.com$!(^|\.)avstar0[1-9]\.(com|me)$(^|\.)awjd[1-9]?\.tv$(^|\.)awwcn[1-9]?\.top$(^|\.)banyinjia[0-9]?\.com$(^|\.)bhzyk[1-9]?\.xyz$(^|\.)bibeidh1[6-8]\.cc$(^|\.)bjini[0-9]{2}\.buzz$(^|\.)byy[0-9][0-9]?\.icu$HD(^|\.)byyum([3589]|2[235689]|3[34]|4[1-9]|5[1-79]|6[0134679])?\.com$%!(^|\.)cgbb([1-9]|1[0-9]|20)\.com$ (^|\.)chuzs[1-9]{0,2}\.buzz$(^|\.)cosaa[a-z]\.cyou$(^|\.)douyintt[0-9]\.me$(^|\.)doufuru[0-9]?\.cc$ (^|\.)doufuru[0-9]{2}?\.xyz$(^|\.)fby[1-9]?[0-9]\.icu$(^|\.)fby[1-9]?[0-9]\.one$(^|\.)fi11sm([0-9]+)?\.com$(^|\.)fiftymvapi\..+$(^|\.)flsq[0-9]{2}\.com$!(^|\.)forduck[0-1][0-9]\.com$&"(^|\.)gaogediao\.(com|me|net|org)$$ (^|\.)gossipfuli[0-9]{3,4}\.xyz$(^|\.)guifw3[1-3]\.cc$(^|\.)h5ccav[1-5]\.com$(^|\.)hhmen[1-3]\.xyz$(^|\.)hkfg[1-7]\.xyz$(^|\.)hs[1-9]{2}\.vip$(^|\.)jav777\.(cc|tv|work)$(^|\.)jb[1-9][0-9]\.lol$"(^|\.)jbk0([0-1][0-9]?)?\.com$(^|\.)jdyy[1-9]?\.me$(^|\.)jiuse[0-9]{1,3}\.com$"(^|\.)jmtt\.(app|live|tv|vip)$(^|\.)jstv[0-9]{2}\.com$(^|\.)kdfl[0-9]{2}\.xyz$$ (^|\.)kimoav([1-9][0-9]?)?\.com$*&(^|\.)kpkuang\.(bond|fun|info|one|us)$(^|\.)ksyp0[1-9]\.com$(^|\.)lianren[1-7]\.cc$(^|\.)llyysp[0-9]{4}\.top$ (^|\.)loibus\.(cc|com|link)$+'(^|\.)loibus(100|101|202|505|606)\.top$%!(^|\.)luchuxue([0-9]{0,5})\.buzz$(^|\.)maa18[0-2][0-9]\.com$(^|\.)madouqu[0-9]{2}\.cc$(^|\.)mdyy[0-9][0-9]\.cc$(^|\.)mdyy[0-1][0-9]\.com$($(^|\.)mimi\.(cfd|lol|onl|sbs|so|vc)$(^|\.)mimi[0-9]{3}\.com$(^|\.)mitao[1-3]\.tv$(^|\.)mmtv[1-5]\.life$40(^|\.)mmwz\.(fun|in|la|me|one|pro|pw|run|tv|ws)$$ (^|\.)momotk([1-9][0-9]?)?\.uno$(^|\.)nnbw[0-2]\.xyz$%!(^|\.)putaozy([1-9][0-9]?)?\.com$(^|\.)qqbs([0-9]{2})?\.vip$(^|\.)qqsp0[1-3]\.com$(^|\.)rbp[1-9][0-9]\.com$(^|\.)rbyh[1-9]\.buzz$*&(^|\.)rule34\.(asia|us|world|xxx|xyz)$(^|\.)sao[1-6]0000\.com$(^|\.)sbyjs2[6-9]\.buzz$(^|\.)sg11[3-9]\.me$(^|\.)shdd[0-9]{2}\.buzz$$ (^|\.)shuangmawei[0-9]{2}\.buzz$(^|\.)smgsp[0-2]?\.buzz$(^|\.)spankwire[1-9]\.com$(^|\.)ssphb[0-9]{2}\.xyz$ (^|\.)supxxx[0-9]{0,2}\.com$(^|\.)sycf[0-9]?\.xyz$(^|\.)syjc1[1-6]\.xyz$'#(^|\.)tianbiav([1-9]|1[0-6])?\.com$(^|\.)tqav[1-9][0-9]\.com$(^|\.)tt[1-2][0-9]\.tv$(^|\.)ttghg[1-9][0-9]\.xyz$%!(^|\.)tttv([1-9][0-9]?|100)\.com$#(^|\.)twseb([1-9][0-9]?)?\.com$"(^|\.)uu[a-z][1-9][0-9]?\.com$(^|\.)whtdh0[1-3]\.cc$(^|\.)wmm33[0-5]\.com$(^|\.)wyfuli[1-9]\.net$(^|\.)xaa[0-9]?\.one$(^|\.)xaxy[0-9]{2}\.one$(^|\.)xg[0-9]{2}\.vip$(^|\.)xgyy([0-9]{2})?\.vip$!(^|\.)xingdh([0-9]{3})?\.xyz$(^|\.)xlywz[1-9]?\.cc$(^|\.)xnkl[3-8]\.cn$(^|\.)xomfsp[1-9]?\.buzz$(^|\.)xv[0-9]{4}\.top$ (^|\.)xxxyaom[0-9]{2}\.buzz$(^|\.)yiren[1-9][0-9]\.com$(^|\.)youyuapi\..+$(^|\.)yrrj[1-9]?\.buzz$(^|\.)yygc[0-9]?\.xyz$!(^|\.)zayy([0-9]{0,3})?\.xyz$(^|\.)zh9[0-7]\.net$(^|\.)zy[0-9]{4}\.top$(^|\.)zztt[1-6][0-9]\.com$(^|\.)zzz[1-9][0-9]\.top$ + + CATEGORY-PT audiences.me +avistaz.to beyond-hd.me bibliotik.me bitpt.cn blutopia.ccbroadcasthe.net  bt.byr.cn byr.pt ccfbits.org -chdbits.co eastgame.org et8.orggreatposterwall.com hdchina.org hdcity.city +chdbits.co +cinemaz.to dicmusic.com eastgame.org et8.org exoticaz.to filelist.iogreatposterwall.com +hdbits.org hdchina.org hdcity.city +hdfans.org hdhome.org hdsky.me -hdtime.orghudbt.hust.edu.cniptorrents.com jpopsuki.eu keepfrds.com lemonhd.org  m-team.cc  m-team.io nanyangpt.com  npupt.com open.cd ourbits.club pterclub.com -pthome.net ptsbao.clubpt.btschool.clubpt.eastgame.orgpt.hd4fans.orgpt.keepfrds.compt.nwsuaf6.edu.cnpt.sjtu.edu.cnpt.soulvoice.clubpt.xauat.edu.cn -skyey2.comspringsunday.net  tjupt.org totheglory.im u2.dmhy.org - -CATEGORY-PUBLIC-TRACKER 10.rarbg.com 12.rarbg.me 9.rarbg.com +hdtime.org hhanclub.tophudbt.hust.edu.cniptorrents.com jpopsuki.eu  jptv.club keepfrds.com lemonhd.org  m-team.cc  m-team.io morethantv.me nanyangpt.com  npupt.com open.cd ourbits.clubpassthepopcorn.me privatehd.topt.btschool.clubpt.eastgame.orgpt.hd4fans.orgpt.keepfrds.compt.nwsuaf6.edu.cnpt.sjtu.edu.cnpt.soulvoice.clubpt.xauat.edu.cn pterclub.com +pthome.net ptsbao.clubshare.ilolicon.com sharkpt.net +skyey2.comspringsunday.net +tju.pt  tjupt.orgtorrentleech.org totheglory.im u2.dmhy.org uhdbits.org  zhuque.in + +CATEGORY-PUBLIC-TRACKER 10.rarbg.com 12.rarbg.me1337.abcvg.info1c.premierzal.ru6.pocketnet.app6ahddutb1ucc3cp.ru 9.rarbg.com 9.rarbg.me -9.rarbg.tobigfoot1942.sektori.org bt.rghost.net bt.sc-ol.combtfile.sdo.comcoppersurfer.tkexodus.desync.com explodie.orgh4.trakx.nibba.tradeipv4.tracker.harry.lunyaa.tracker.wfopen.acgtracker.comopen.demonii.comopen.stealth.si opentor.orgopentracker.i2p.rocksoscar.reyesleon.xyzp4p.arenabg.com pubt.netretracker.ip.ncnet.ruretracker.localshare.dmhy.orgt-115.rhcloud.com  t.acg.ript.nyaatracker.comtr.bangumi.moetracker.birkenwald.detracker.bitsearch.totracker.btcake.comtracker.coppersurfer.tktracker.cyberia.istracker.dler.comtracker.dler.org tracker.ex.uatracker.fatkhoala.orgtracker.foreverpirates.cotracker.grepler.com tracker.internetwarriors.nettracker.istole.ittracker.kamigami.orgtracker.ktxp.com!tracker.leechers-paradise.orgtracker.moeking.metracker.openbittorrent.comtracker.opentrackr.orgtracker.pirateparty.grtracker.prq.totracker.publicbt.comtracker.sktorrent.nettracker.tfile.metracker.thinelephant.orgtracker.tiny-vps.comtracker.token.rotracker.torrent.eu.orgtracker.trackerfix.comtracker.zer0day.totracker.zond.orgtracker2.torrentino.comtracker3.torrentino.com +9.rarbg.to +aegir.sexy amigacity.xyzbigfoot1942.sektori.org($bittorrent-tracker.e-n-c-r-y-p-t.netbt.ktrackers.com bt.ptlsp.com bt.rghost.net bt.sc-ol.combt1.archive.orgbt2.archive.orgbtfile.sdo.combubu.mapfactor.combvarf.tracker.shcanardscitrons.nohost.me ch3oh.ru +concen.orgcoppersurfer.tkd40969.acod.regrucolo.ru  epider.me evan.imexodus.desync.com explodie.orgfh2.cmp-gaming.comfree.publictracker.xyzh4.trakx.nibba.tradeinferno.demonoid.is ipv4.rer.lolipv4.tracker.harry.luisk.richardsw.club +jutone.comleet-tracker.moemail.artixlinux.orgmartin-gebhardt.eumoonburrow.club movies.zsw.ca new-line.netnyaa.tracker.wf  odd-hd.froh.fuuuuuck.comopen-tracker.demonoid.chopen.acgnxtracker.comopen.acgtracker.comopen.demonii.comopen.demonoid.ch open.dstud.ioopen.free-tracker.gaopen.stealth.siopen.tracker.clopen.tracker.ink open.u-p.pwopen.xxtor.com opentor.orgopentracker.i2p.rocksopentracker.iooscar.reyesleon.xyzp2p.publictracker.xyzp4p.arenabg.compirate.t-1.orgpublic.tracker.vraphim.com pubt.netretracker.ip.ncnet.ruretracker.lanta.meretracker.local$ retracker01-msk-virt.corbina.netrun.publictracker.xyz  ryjer.comshare.dmhy.org su-data.comt-115.rhcloud.com  t.acg.ript.nyaatracker.comt.overflow.biz +t1.aag.moe t1.hloli.org tamas3.ynh.frtorrents.artixlinux.orgtr.bangumi.moetr.burnabyhighstar.com +tr.kxmp.cftracker-udp.gbitt.infotracker-zhuqiy.dgj055.icutracker.0x7c0.comtracker.anima.nztracker.artixlinux.orgtracker.auctor.tvtracker.birkenwald.detracker.bitsearch.totracker.bittor.pwtracker.bt4g.comtracker.btcake.comtracker.cloudit.toptracker.coppersurfer.tktracker.cubonegro.loltracker.cyberia.istracker.darkness.servicestracker.ddunlimited.nettracker.deadorbit.nltracker.dler.comtracker.dler.orgtracker.dump.cltracker.edkj.club tracker.ex.uatracker.expli.toptracker.farted.nettracker.fatkhoala.orgtracker.filemail.comtracker.files.fmtracker.fnix.nettracker.foreverpirates.cotracker.gbitt.infotracker.gcrreen.xyztracker.grepler.comtracker.imgoingto.icu tracker.internetwarriors.nettracker.ipfsscan.iotracker.ipv6tracker.orgtracker.istole.ittracker.jamesthebard.nettracker.kamigami.orgtracker.ktxp.com!tracker.leechers-paradise.orgtracker.lilithraws.orgtracker.loligirl.cntracker.moeking.metracker.mywaifu.besttracker.netmap.toptracker.openbittorrent.comtracker.opentrackr.orgtracker.picotorrent.onetracker.pirateparty.grtracker.prq.totracker.publicbt.com tracker.qu.axtracker.renfei.nettracker.sktorrent.nettracker.skyts.nettracker.srv00.comtracker.t-rb.orgtracker.tamersunion.orgtracker.tfile.metracker.theoks.nettracker.therarbg.comtracker.therarbg.totracker.thinelephant.orgtracker.tiny-vps.comtracker.token.rotracker.torrent.eu.orgtracker.trackerfix.comtracker.tryhackx.orgtracker.yemekyedim.comtracker.zer0day.totracker.zond.orgtracker1.ctix.cntracker1.itzmx.comtracker1.myporn.clubtracker2.dler.orgtracker2.torrentino.comtracker3.torrentino.comtrackers.ptlsp.comttk2.nbaonlineservice.comu.peer-exchange.download wepzone.net wg.mortis.mewww.peckservers.comyolo.liberbear.com  CATEGORY-REMOTE-CONTROL teamviewer.cn cnteamviewer.com teamviewer.us,(client-teamviewer-com.trafficmanager.net%!teamviewer.com.cdn.cloudflare.net anydesk.com nomachine.com rustdesk.com -D +D CATEGORY-SCHOLAR-!CN apa.orgpsyccareers.com cambridge.org"cambridgeschoolshakespeare.comcambridgedigital.netcambridgemaths.orgccdc.cam.ac.ukdlib.eastview.comnewisiknowledge.comisiknowledge.com clarivate.comwebofknowledge.comwebofscience.com doi.org doi.info cell.comclinicalkey.com els-cdn.comelsevier-ae.com elsevier.com elsevier.ioengineeringvillage.com  evise.comfundinginstitutional.com knovel.com mendeley.com reaxys.com @@ -6274,7 +6812,7 @@ booksc.xyzbookshome.info bookshome.netbookshome.world de1lib.org hk1lib.orglibsolutions.applibsolutions.domainslibsolutions.net ma1lib.org -sg1lib.orgsinglelogin.appsinglelogin.me  z-lib.org  zlib.life zlibcdn.com zlibcdn2.comaacrjournals.orgacademic.eb.com acaric.co.jp +sg1lib.orgsinglelogin.appsinglelogin.mesinglelogin.resinglelogin.site  z-lib.org z-library.se  zlib.life zlibcdn.com zlibcdn2.comaacrjournals.orgacademic.eb.com acaric.co.jp aclweb.org acm.org acs.org agu.org aiaa.orgaimsciences.org airiti.comairitilibrary.com altmetric.comalexanderstreet.comamdigital.co.uk ams.org anatomy.tvanalytictech.comannualreviews.org aps.orgarabidopsis.org artstor.org  arxiv.orgascelibrary.org asha.org asm.org asme.orgasminternational.orgasn-online.orgaspbjournals.orgaspenpublishing.com astm.org berkeley.edubiologists.combiomedcentral.com @@ -6344,8 +6882,8 @@ howbuy.com lufunds.com  zlfund.cn  CATEGORY-SHOPPING-IR divar.cloud divar.ir divarcdn.com digi-kala.com  emalls.ir esam.ir janebi.com  janebi.ir sheypoor.com  torob.com  zanbil.ir digikala.comdigikalabusiness.comdigikalajet.com digistyle.com -U -CATEGORY-SOCIAL-MEDIA-!CNaboutfacebook.com accessfacebookfromschool.com acebooik.com acebook.comadvancediddetection.comaskfacebook.netaskfacebook.org +V +CATEGORY-SOCIAL-MEDIA-!CN bsky.app bsky.network bsky.socialaboutfacebook.com accessfacebookfromschool.com acebooik.com acebook.comadvancediddetection.comaskfacebook.netaskfacebook.org atdmt2.com atlasdmt.comatlasonepoint.combuyingfacebooklikes.comcareersatfb.comcelebgramme.comchina-facebook.com click-url.comcomo-hackearfacebook.comcrowdtangle.com dacebook.comdlfacebook.comdotfacebook.comdotfacebook.netexpresswifi.com faacebok.com faacebook.com faasbook.com facbebook.com facbeok.com facboo.com facbook.com facbool.com facboox.com faccebook.comfaccebookk.com facdbook.com facdebook.com face-book.com faceabook.com facebboc.com facebbook.comfacebboook.com facebcook.com facebdok.com facebgook.com facebhook.com facebkkk.com facebo-ok.com faceboak.com facebock.com facebocke.com facebof.com faceboik.com facebok.comfacebokbook.com facebokc.com facebokk.com facebokok.com faceboks.com facebol.com facebolk.com facebomok.com faceboo.com facebooa.com faceboob.comfaceboobok.com facebooc.com faceboock.com facebood.com facebooe.com faceboof.com facebooi.com facebooik.com facebooik.org facebooj.comfacebook-corp.comfacebook-covid-19.comfacebook-ebook.comfacebook-forum.comfacebook-hardware.comfacebook-inc.comfacebook-login.comfacebook-newsroom.comfacebook-newsroom.orgfacebook-pmdcenter.comfacebook-pmdcenter.netfacebook-pmdcenter.orgfacebook-privacy.comfacebook-program.comfacebook-studio.comfacebook-support.orgfacebook-texas-holdem.comfacebook-texas-holdem.net facebook.br facebook.ca facebook.cc facebook.comfacebook.design facebook.net facebook.hu facebook.in fecebook.net facebook.nl facebook.org facebook.se facebook.shop facebook.tv facebook.us facebook.wangfacebook123.orgfacebook30.comfacebook30.netfacebook30.orgfacebook4business.comfacebookads.com"facebookadvertisingsecrets.comfacebookatschool.comfacebookawards.comfacebookblueprint.netfacebookbrand.comfacebookbrand.net3/facebookcanadianelectionintegrityinitiative.comfacebookcareer.comfacebookcheats.comfacebookck.comfacebookclub.comfacebookcom.comfacebookconsultant.orgfacebookcoronavirus.comfacebookcovers.orgfacebookcredits.infofacebookdating.netfacebookdusexe.orgfacebookemail.comfacebookenespanol.comfacebookexchange.comfacebookexchange.netfacebookfacebook.comfacebookflow.comfacebookgames.comfacebookgraphsearch.comfacebookgraphsearch.infofacebookgroups.comfacebookhome.ccfacebookhome.comfacebookhome.infofacebookhub.com facebooki.comfacebookinc.comfacebookland.comfacebooklikeexchange.comfacebooklive.comfacebooklivestaging.netfacebooklivestaging.orgfacebooklogin.comfacebooklogin.infofacebookloginhelp.netfacebooklogs.comfacebookmail.comfacebookmail.tvfacebookmanager.infofacebookmarketing.info facebookmarketingpartner.com!facebookmarketingpartners.comfacebookmobile.comfacebookmsn.comfacebooknews.comfacebooknfl.comfacebooknude.comfacebookofsex.comfacebookook.comfacebookpaper.comfacebookpay.comfacebookphonenumber.netfacebookphoto.comfacebookphotos.comfacebookpmdcenter.comfacebookpoke.netfacebookpoke.orgfacebookpoker.infofacebookpokerchips.infofacebookporn.netfacebookporn.orgfacebookporno.netfacebookportal.com facebooks.comfacebooksafety.comfacebooksecurity.netfacebookshop.comfacebooksignup.netfacebooksite.netfacebookstories.comfacebookstudios.netfacebookstudios.orgfacebooksupplier.comfacebooksuppliers.comfacebookswagemea.comfacebookswagstore.comfacebooksz.comfacebookthreads.netfacebooktv.netfacebooktv.orgfacebookvacation.com facebookw.comfacebookworld.com facebool.com facebool.info facebooll.com faceboom.com faceboon.com faceboonk.comfaceboooik.com faceboook.com faceboop.com faceboot.com faceboox.com facebopk.com facebpook.com facebuk.com facebuok.com facebvook.com facebyook.com facebzook.comfacecbgook.com facecbook.com facecbook.org facecook.com facecook.org facedbook.com faceebok.com faceebook.com faceebot.com facegbok.com facegbook.com faceobk.com faceobok.com faceobook.com faceook.comfacerbooik.com facerbook.com facesbooc.comfacesounds.com facetook.com facevbook.com facewbook.co facewook.comfacfacebook.com facfebook.com fackebook.com facnbook.com facrbook.com facvebook.com facwebook.com facxebook.com fadebook.com faebok.com faebook.com faebookc.com faeboook.com faecebok.com faesebook.comfafacebook.com faicbooc.com fasebokk.com fasebook.com faseboox.com favebook.com faycbok.com @@ -6355,14 +6893,16 @@ fbhome.com fbidb.io  fbinc.comfbinnovation.comfbmarketing.c fbrpms.com  fbsbx.com  fbsbx.netfbsupport-covid.netfbthirdpartypixel.comfbthirdpartypixel.netfbthirdpartypixel.org  fburl.com fbwat.chfbworkmail.com fcacebook.com fcaebook.com fcebook.com fcebookk.comfcfacebook.comfdacebook.info feacboo.com feacbook.com feacbooke.com feacebook.com fecbbok.com fecbooc.com fecbook.com feceboock.com feceboox.com fececbook.com  feook.com ferabook.com fescebook.com fesebook.com ffacebook.com fgacebook.com ficeboock.com fmcebook.com fnacebook.com fosebook.com fpacebook.com fqcebook.com fracebook.com  freeb.comfreebasics.comfreebasics.net freebs.comfreefacebook.comfreefacebook.netfreefacebookads.netfreefblikes.comfreindfeed.comfriendbook.info friendfed.comfriendfeed-api.comfriendfeed-media.comfriendfeed.comfriendfeedmedia.com fsacebok.com fscebook.comfundraisingwithfacebook.comfunnyfacebook.orgfutureofbusinesssurvey.org gacebook.com gameroom.comgfacecbook.com groups.comhackerfacebook.comhackfacebook.comhackfacebookid.comhifacebook.info!howtohackfacebook-account.comhsfacebook.comhttpfacebook.comhttpsfacebook.comhttpwwwfacebook.com i.org internet.org klik.me liverail.com liverail.tvlogin-account.netmarkzuckerberg.commidentsolutions.commobilefacebook.commoneywithfacebook.com myfbfans.com newsfeed.com nextstop.comonline-deals.netopencreate.orgreachtheworldonfacebook.com rocksdb.orgshopfacebook.comsportsfacebook.comsportstream.comsupportfacebook.comterragraph.comthefacebook.comthefacebook.net thefind.comtoplayerserver.comviewpointsfromfacebook.comwhyfacebook.com worldhack.comwww-facebook.comwwwfacebok.comwwwfacebook.comwwwmfacebook.comzuckerberg.comzuckerberg.netfacebookwork.com -redkix.com workplace.comworkplaceusecases.comfbcdn-a.akamaihd.net!achat-followers-instagram.com#acheter-followers-instagram.com$ acheterdesfollowersinstagram.com!acheterfollowersinstagram.combookstagram.comcarstagram.comcdninstagram.comchickstagram.com ig.me  igcdn.com igsonar.com igtv.com imstagram.com imtagram.cominstaadder.cominstachecker.cominstafallow.cominstafollower.cominstagainer.com instagda.com instagify.cominstagmania.com instagor.cominstagram-brand.cominstagram-engineering.cominstagram-help.cominstagram-press.cominstagram-press.net instagram.cominstagramci.cominstagramcn.cominstagramdi.cominstagramhashtags.netinstagramhilecim.cominstagramhilesi.orginstagramium.cominstagramizlenme.cominstagramkusu.cominstagramlogin.cominstagramm.cominstagramn.cominstagrampartners.cominstagramphoto.cominstagramq.cominstagramsepeti.cominstagramtakipcisatinal.netinstagramtakiphilesi.cominstagramtips.cominstagramtr.com instagran.cominstagranm.com instagrem.com instagrm.cominstagtram.com instagy.cominstamgram.cominstangram.cominstanttelegram.cominstaplayer.net instastyle.tv instgram.com intagram.com intagrm.com intgram.comkingstagram.comlnstagram-help.comtheinstagramhack.comoninstagram.comonline-instagram.comonlineinstagram.comweb-instagram.netwwwinstagram.combizographics.coml-0005.dc-msedge.netl-0005.l-msedge.net  licdn.com linkedin.at linkedin.com lnkd.inlicdn.cn +redkix.com workplace.comworkplaceusecases.comfbcdn-a.akamaihd.net graph.instagram.com +ads)graph-fallback.instagram.com +ads!achat-followers-instagram.com#acheter-followers-instagram.com$ acheterdesfollowersinstagram.com!acheterfollowersinstagram.combookstagram.comcarstagram.comcdninstagram.comchickstagram.com ig.me  igcdn.com igsonar.com igtv.com imstagram.com imtagram.cominstaadder.cominstachecker.cominstafallow.cominstafollower.cominstagainer.com instagda.com instagify.cominstagmania.com instagor.cominstagram-brand.cominstagram-engineering.cominstagram-help.cominstagram-press.cominstagram-press.net instagram.cominstagramci.cominstagramcn.cominstagramdi.cominstagramhashtags.netinstagramhilecim.cominstagramhilesi.orginstagramium.cominstagramizlenme.cominstagramkusu.cominstagramlogin.cominstagramm.cominstagramn.cominstagrampartners.cominstagramphoto.cominstagramq.cominstagramsepeti.cominstagramtakipcisatinal.netinstagramtakiphilesi.cominstagramtips.cominstagramtr.com instagran.cominstagranm.com instagrem.com instagrm.cominstagtram.com instagy.cominstamgram.cominstangram.cominstanttelegram.cominstaplayer.net instastyle.tv instgram.com intagram.com intagrm.com intgram.comkingstagram.comlnstagram-help.comtheinstagramhack.comoninstagram.comonline-instagram.comonlineinstagram.comweb-instagram.netwwwinstagram.combizographics.coml-0005.dc-msedge.netl-0005.l-msedge.net  licdn.com linkedin.at linkedin.com lnkd.inlicdn.cn cn linkedin.cn cne122475.dscg.akamaiedge.netlicdn.cn.cdn20.comlinkedin.sc.omtrdc.net threads.netads-twitter.comcms-twdigitalassets.com periscope.tv pscp.tvt.co tellapart.com tweetdeck.com  twimg.com twitpic.com twitter.biz twitter.com twitter.jptwittercommunity.comtwitterflightschool.comtwitterinc.comtwitteroauth.comtwitterstat.us twtrdns.net  twttr.com  twttr.net  twvid.com vine.co x.com mvk.com userapi.com  vk-cdn.me vk-cdn.net vk-portal.net vk.cc vk.com  vk.design vk.link vk.me vkcache.com vkgo.app vklive.appvkmessenger.comvkmessenger.app vkontakte.ruvkuseraudio.comvkuserlive.netvkuservideo.comvkuservideo.net - + CATEGORY-SOCIAL-MEDIA-CN bcy.net bcyimg.comlf-rc1.yhgfb-cn-static.com douban.com  douban.fm doubanio.com  gracg.com procg.cn 2016.sina.cn @@ -6380,11 +6920,8 @@ douban.com  douban.fm doubanio.com  gracg.com procg.cn 20 ads atm.sina.com adsbeacon.sina.com.cn ads biz.weibo.com -adsc.biz.weibo.com -ads!c.wcpt.biz.weibo.com ads%click.uve.mobile.sina.cn ads click.uve.weibo.com -adscm.dmp.sina.cn ads0#contentrecommend-out.mobile.sina.cn ads$count.video.sina.com.cn ads counter.sina.com.cn @@ -6399,17 +6936,11 @@ douban.com  douban.fm doubanio.com  gracg.com procg.cn 20 adsgame.weibo.com ads"gw5.push.mcp.weibo.cn ads"gw6.push.mcp.weibo.cn -ads"img.adbox.sina.com.cn -ads#img.amp.ad.sina.com.cn ads"int.dpool.sina.com.cn ads%interest.mix.sina.com.cn -ads)log.interest.mix.sina.com.cn ads log.mix.sina.com.cn ads log.sina.cn -ads!m.beacon.sina.com.cn -adsm.game.weibo.cn ads!mg.games.sina.com.cn -ads!motu.p4p.sina.com.cn adsnewspush.sinajs.cn ads oascentral.sina.com ads#oascentral.sina.com.hk @@ -6419,10 +6950,8 @@ douban.com  douban.fm doubanio.com  gracg.com procg.cn 20 adspfp.sina.com.cn adspfpip.sina.com ads!promote.biz.weibo.cn -ads r.dmp.sina.cn adsrm.sina.com.cn ads rs.sinajs.cn -adss.alitui.weibo.com ads"s.img.mix.sina.com.cn ads sapi.sina.cn ads sax.sina.cn @@ -6446,22 +6975,23 @@ douban.com  douban.fm doubanio.com  gracg.com procg.cn 20 ads$wbpctips.mobile.sina.cn adswidget.weibo.com ads woocall.sina.com.cn -adszc.biz.weibo.com adszymo.mps.weibo.com ads  97973.com picself.cn sina.cn sina.com sina.com.cn sina.net sinaapp.com sinaedge.com sinaimg.cn sinaimg.com  sinajs.cn sinajs.comt.cn videoself.cn  wbimg.com wbimg.cn wcdn.cn weibo.cn  weibo.com weibo.com.cn weibocdn.com xhaiwai.com -xhscdn.comxiaohongshu.com  zhihu.com  zhimg.comtieba.baidu.com  tieba.com - +xhscdn.com +xhscdn.netxiaohongshu.com  zhihu.com  zhimg.comtieba.baidu.com  tieba.com dandan818.comdandanvoice.com + CATEGORY-SOCIAL-MEDIA-IR bale.ai  eitaa.com eitaa.ir -gap.im  mizito.ir niniban.com ninisite.com  rubika.ir splus.ir virasty.com - -CATEGORY-TECH-IR afranet.comarvancloud.com arvancloud.ir asiatech.ir cafebazaar.ircafebazaar.org download.ir downloadly.ir hiweb.iripnumberia.com irancell.iriranserver.com -mci.irmihanwebhost.com mobinnet.ir myket.ir neshanmap.irp30download.comp30download.irparsonline.com picofile.com pishgaman.net -rightel.irsarzamindownload.com  shatel.ir  soft98.ir  sotoon.ir  taliya.ir +gap.imgaplication.com  mizito.ir niniban.com ninisite.com  rubika.ir splus.ir virasty.com + +CATEGORY-TECH-IR  abrha.net afranet.comarvancloud.com arvancloud.ir arzex.io asiatech.ir cafebazaar.ircafebazaar.orgdatisnetwork.com download.ir downloadly.ir hiweb.iripnumberia.com irancell.iriranserver.com +mci.irmihanwebhost.com mobinnet.ir myket.ir neshanmap.irp30download.comp30download.irparsonline.com parspack.com picofile.com pishgaman.net +rightel.ir sarmayex.comsarzamindownload.com  shatel.irskyroom.onlinesmshooshmand.com  soft98.ir softgozar.com  sotoon.ir  taliya.ir tci.ir uplod.ir -uupload.ir  zoomit.ir +uupload.ir  yasdl.com +zhaket.com  zoomit.ir U CATEGORY-TRAVEL-IR alibaba.ir flightio.com mrbilit.com tapsi.ir @@ -6498,6 +7028,8 @@ ipanda.com ipanda.com.cn ipanda.net livechina.cn livechina.comolympicchannelchina.cn tvcc.cn tvcc.com.cn%!xn--fiq53l6wcx3kp9bc7joo6apn8a.cn%!xn--fiq53l90et9fpncc7joo6apn8a.cn-)xn--fiq53l6wcx3kp9bc7joo6apn8a.xn--fiqs8s%!xn--kprv4ewxfr9cpxcc7joo6apn8a.cn-)xn--kprv4ewxfr9cpxcc7joo6apn8a.xn--fiqs8s zggbdszt.cnzggbdszt.com.cnzggbdszt.net.cnzygbdszt.net.cn % CDN77  cdn77.com  cdn77.org + +CENO censorship.no z CERNcern ams02.space cern.ch cixp.netdotcernpilot.info  ippog.orglinearcollider.org 3 @@ -6545,8 +7077,8 @@ ctexcel.fr ctexcel.us 189.cnchinatelecom-h.comchinatelecom.com.cnchinatelecomglobal.com chntel.com - - CHINAUNICOM  10010.com 10010.com.cn 114menhu.comchinaunicom.comchinaunicom.com.cnchinaunicom.com.hkchinaunicomglobal.commychinaunicom.com  wo.com.cn + + CHINAUNICOM  10010.com 10010.com.cn 114menhu.comchinaunicom.comchinaunicom.com.cnchinaunicom.com.hkchinaunicomglobal.commychinaunicom.com wo.cn  wo.com.cn wo116114.com ( CHINAZ chinaz.com @@ -6566,9 +7098,12 @@ mysdn.info  mysdn.net netacad.com netacad.netnetwork-auth.cn versly.comvideochampion.com virtuata.comwballiance.com!whyiwantciscotelepresence.com wifi-mx.comyoutubecisco.comapp-dynamics.comappdynamics.co.ukappdynamics.comappdynamics.deappdynamics.frappdynamics.infoappdynamics.jpappdynamics.org mearki.com meraki-go.com  meraki.hk merakigo.com tail-f.com  tailf.comcisco.evergage.comciscolivehls-i.akamaihd.net - -CITIC citic chinaamc.comcitic-prudential.com.cn citicbank.comciticcapital.com citiciam.com citicifh.comciticprufunds.com.cn citics.com.hk citicsf.com clsa.comcncbinternational.com -csc108.com csci.hk + +CITIC citic chinaamc.comcitic-prudential.com.cn citicbank.comciticcapital.com citiciam.com citicifh.comciticprufunds.com.cn citics.com.hk +!cn citicsf.com clsa.com"cncbinternational.com +!cn +csc108.comcsci.hk +!cn ecitic.com 3 @@ -6594,7 +7129,8 @@ N cloudc.one cloudcone.com cloudcone.net $ CLOUDCONVERTcloudconvert.com - + + CLOUDFLARE cf-ns.com cn cf-ns.net @@ -6609,13 +7145,18 @@ cftest6.cn cn cftest7.com cn cftest8.com cncloudflare-cn.com +cn!cloudflareanycast.net +cncloudflarechina.cn cncloudflarecn.net +cn cloudflareglobal.net cn%cloudflareinsights-cn.com +cncloudflareperf.com cncloudflareprod.com cn!cloudflarestaging.com cn#cloudflarestoragegw.com -cnargotunnel.com cf-ipfs.comcloudflare-dns.comcloudflare-gateway.comcloudflare-ipfs.comcloudflare-quic.comcloudflare.comcloudflare.net cloudflare.tvcloudflareaccess.comcloudflareapps.comcloudflarebolt.comcloudflareclient.comcloudflareinsights.comcloudflareok.comcloudflareportal.comcloudflarepreview.comcloudflareresolve.comcloudflaressl.comcloudflarestatus.comcloudflarestorage.comcloudflarestream.comcloudflaretest.comcloudflarewarp.com every1dns.net one.one.onepacloudflare.com  pages.devtrycloudflare.comvideodelivery.net  warp.plus workers.dev - +cn cf-ipfs.comcloudflare-ipfs.comargotunnel.com +cfl.recloudflare-dns.comcloudflare-ech.comcloudflare-esni.comcloudflare-gateway.comcloudflare-quic.comcloudflare.comcloudflare.net cloudflare.tvcloudflareaccess.comcloudflareapps.comcloudflarebolt.comcloudflareclient.comcloudflareinsights.comcloudflareok.comcloudflarepartners.comcloudflareportal.comcloudflarepreview.comcloudflareresolve.comcloudflaressl.comcloudflarestatus.comcloudflarestorage.comcloudflarestream.comcloudflaretest.comcloudflarewarp.com every1dns.netisbgpsafeyet.com one.one.onepacloudflare.com  pages.devtrycloudflare.comvideodelivery.net  warp.plus workers.dev + CLOUDFLARE-CN cf-ns.com cn cf-ns.net cn @@ -6629,12 +7170,18 @@ cftest6.cn cn cftest7.com cn cftest8.com cncloudflare-cn.com +cn!cloudflareanycast.net +cncloudflarechina.cn cncloudflarecn.net +cn cloudflareglobal.net cn%cloudflareinsights-cn.com +cncloudflareperf.com cncloudflareprod.com cn!cloudflarestaging.com cn#cloudflarestoragegw.com cn +; +CLOUDFLARE-IPFS cf-ipfs.comcloudflare-ipfs.com 4 CLOUDINARYcloudinary.comcloudinary.net @@ -6645,12 +7192,20 @@ K cmbimg.com cmbt.cn cmbuat.com  cmburl.cncmbwinglungbank.com cmf.biz cmf.ltd cmfchina.com cmfunds.cntest-cignacmb.com -ú + CNcn citic baidu -unicomsohu +unicomsohu xn--zfr164b xn--fiqs8s -xn--fiqz9s xn--1qqw23a xn--xhq521b xn--8y0a063a xn--6frz82g -xn--fiq64b xn--estv75g xn--vuq861b xn--zfr164b +xn--fiqz9s +xn--55qx5d +xn--io0a7i xn--ses554g +xn--czru2d xn--hxt814e +xn--fiq64b xn--czr694b xn--xhq521b xn--1qqw23a xn--vuq861b +xn--kput3i xn--3ds443gxn--fiq228c5hs xn--3bst00mxn--6qq986b3xl +xn--czrs0t  xn--vhquv xn--fjq720a +xn--unup4y xn--g2xx48c xn--imr513n xn--otu796d +xn--9et52u xn--6frz82g +xn--5tzm5g xn--8y0a063a xn--rhqv96g xn--nyqy26a 42r.cn 5566ua.com aurorapush.cn e0n.cn japps.cn jchat.io @@ -6666,28 +7221,80 @@ w.cnzz.com adsz.gds.cnzz.com adsairchina.com.cnairchinacargo.comhainanairlines.com hnacargo.com  hnair.com 10044.cn caac.gov.cn  ceair.comchinaexpressair.com  csair.com flycua.com hbhk.com.cn  jdair.netjuneyaoair.com luckyair.netsichuanair.comtibetairlines.com.cnvariflight.com xiamenair.com -boc.cnbank-of-china.combankofchina.combocfullertonbank.combocamchina.combocaviation.com  boccfc.cc  boccfc.cn  bocgi.com bocgins.com  bochk.com bocichina.cn bocichina.combocichina.com.cn bocifunds.cn bocifunds.combocifunds.com.cn bocigroup.com  bocim.combocservices.com.cnccb-life.com.cn +boc.cnbank-of-china.combankofchina.combocfullertonbank.combocamchina.combocaviation.com  boccfc.cc  boccfc.cn  bocgi.com bocgins.com bochk.com +!cn bocichina.cn bocichina.combocichina.com.cn bocifunds.cn bocifunds.combocifunds.com.cn bocigroup.com  bocim.combocservices.com.cnccb-life.com.cn ccb.cn ccb.com ccb.com.cn ccbcos.com ccbfund.cn ccbfund.comccbfund.com.cn ccbfutures.cnccbfutures.comccbintl.com.hkccbleasing.comccblife-test.com.cn ccbseoul.comccbtrust.com.cn  ccbxt.com 8008205555.cn8008205555.comcignacmb-ipmi.com cignacmb.comcignacmbamc.comcmb-leasing.com cmbchina.biz cmbchina.cn cmbchina.com cmbi.com.hk  cmbimg.cn cmbimg.com cmbt.cn cmbuat.com  cmburl.cncmbwinglungbank.com cmf.biz cmf.ltd cmfchina.com -cmfunds.cntest-cignacmb.comicbc  95588.com 95588.com.cn dccnet.com.cn icbc-at.com icbc-cz.com icbc-ltd.com icbc-uk.com icbc-us.com icbc.ae icbc.be -icbc.co.id -icbc.co.jp -icbc.co.kr -icbc.co.nl icbc.com.au icbc.com.cn icbc.com.es icbc.com.kh icbc.com.kw icbc.com.la icbc.com.mm icbc.com.mo icbc.com.mx icbc.com.pe icbc.com.pk icbc.com.qa icbc.com.sg icbc.com.vn icbc.de icbc.eu icbc.lu icbcalmaty.kz icbcasia.com icbcbr.com.br icbccs.com.cnicbccstz.com.cn icbci.com.hk icbcina.com icbcindia.com -icbcit.comicbclondon.comicbcmanila.com.cn  icbcme.ae icbcmoscow.ru -icbcmy.com -icbcnz.comicbcpanama.com icbcparis.fr -icbcpl.comicbcstandard.comicbcstandardbank.comicbcstandardresources.comicbcstandardsecurities.com icbcswiss.com icbcthai.com -icbkfs.com -icbkus.com  95516.com  95516.netchinaunionpay.comchinaunionpay.com.cnchinaunionpay.net +cmfunds.cntest-cignacmb.comicbc  95588.com 95588.com.cn dccnet.com.cn icbc-at.com +!cn icbc-cz.com +!cn icbc-ltd.com +!cn icbc-uk.com +!cn icbc-us.com +!cnicbc.ae +!cnicbc.be +!cn +icbc.co.id +!cn +icbc.co.jp +!cn +icbc.co.kr +!cn +icbc.co.nl +!cn icbc.com.au +!cn icbc.com.cn icbc.com.es +!cn icbc.com.kh +!cn icbc.com.kw +!cn icbc.com.la +!cn icbc.com.mm +!cn icbc.com.mo +!cn icbc.com.mx +!cn icbc.com.pe +!cn icbc.com.pk +!cn icbc.com.qa +!cn icbc.com.sg +!cn icbc.com.vn +!cnicbc.de +!cnicbc.eu +!cnicbc.lu +!cn icbcalmaty.kz +!cn icbcasia.com +!cn icbcbr.com.br +!cn icbccs.com.cnicbccstz.com.cn icbci.com.hk +!cn icbcina.com icbcindia.com +!cn +icbcit.com +!cnicbclondon.com +!cnicbcmanila.com.cn icbcme.ae +!cn icbcmoscow.ru +!cn +icbcmy.com +!cn +icbcnz.com +!cnicbcpanama.com +!cn icbcparis.fr +!cn +icbcpl.com +!cnicbcstandard.comicbcstandardbank.comicbcstandardresources.comicbcstandardsecurities.com icbcswiss.com +!cn icbcthai.com +!cn +icbkfs.com +!cn +icbkus.com +!cn  95516.com  95516.netchinaunionpay.comchinaunionpay.com.cnchinaunionpay.net cup.com.cn cup62.cn unionpay.com unionpay.netunionpaysecure.comunionpayintl.cnunionpayintl.com abchina.com bankcomm.combankofbeijing.com.cn bosc.cn bsb.com.cn ccb.comcgbchina.com.cn cib.com.cncitibank.com.cn cmbc.com.cn hsbc.com.cn -hxb.com.cn njcb.com.cn psbc.com spdb.com.cn  whccb.com +hxb.com.cn njcb.com.cn psbc.com spdb.com.cn  whccb.com kcbebank.com shrbank.com  mybank.cn +ms-bank.cn +webank.com webankcdn.net csxbank.com  fbank.com +xwbank.com zgcbank.comyillionbank.com +z-bank.comonebank.com.cn wegobank.cnsuningbank.com +kshbank.cn xa-bank.com newupbank.com +ymbank.com wxsbank.com sse.com.cn sseinfo.com szse.cn cninfo.com.cn ajzq.com avicsec.com  ccnew.com cczq.com cczq.net cfsc.com.cn cfzq.com cgws.comchinalions.comchinastock.com.cn cicc.com ciccwm.com cindasc.com cjsc.com cnhbstock.com cnht.com.cn csco.com.cn csfounder.com  ctsec.com daton.com.cn  dfham.com dfzq.com.cn dgzq.com.cn dtsbc.com.cn dwjq.com.cn dxzq.net easec.com.cnessence.com.cn ewww.com.cn fcsc.cnfzfinancing.com  gf.com.cn ghsl.cn ghzq.com.cn gjzq.com.cn gkzq.com.cn glsc.com.cn grzq.com gsgh.cn gszq.com gtja.com gtja.com  guodu.com guosen.com.cn gyzq.com.cn hazq.com hczq.com hfzq.com.cn hlzqgs.comhongtastock.com hrsec.com.cn hsbcqh.com.cn htsc.com.cn  htsec.comhuajingsec.com huajinsc.cn huayingsc.com hx168.com.cn hxzq.cn i618.com.cn  iztzq.com jhzq.com.cnjpmorganchina.com jyzq.cn  jzsec.com kysec.cn lczq.com lhzq.comlongone.com.cnmorganstanleyhuaxin.com mszq.com nesc.cn njzq.com.cnnomuraoi-sec.com @@ -6712,8 +7319,11 @@ zhfund.com zofund.com 5ifund.com fund123.cn -howbuy.com lufunds.com  zlfund.cn citic chinaamc.comcitic-prudential.com.cn citicbank.comciticcapital.com citiciam.com citicifh.comciticprufunds.com.cn citics.com.hk citicsf.com clsa.comcncbinternational.com -csc108.com csci.hk +howbuy.com lufunds.com  zlfund.cn citic chinaamc.comcitic-prudential.com.cn citicbank.comciticcapital.com citiciam.com citicifh.comciticprufunds.com.cn citics.com.hk +!cn citicsf.com clsa.com"cncbinternational.com +!cn +csc108.comcsci.hk +!cn ecitic.com1234567.com.cn 18.cn  18.com.cn  dfcfw.com eastmoney.comeastmoneyfutures.com emsec.hk guba.com.cn cebbank.com ceblease.com eb-ind.com ebasset.com ebchina.comebchinaintl.com ebf.com.cn  ebfcn.com ebfortune.com ebtrust.com ebscn-am.com  ebscn.comeverbright.com  secec.comsunlife-everbright.com @@ -6743,7 +7353,7 @@ nwcddns.cn cn route53.cn cnsagemaker.com.cn -cn".+\.awsdns-cn-[0-9][0-9]\.biz$$ .+\.awsdns-cn-[0-9][a-e0-9]\.cn$".+\.awsdns-cn-[0-9][0-9]\.com$".+\.awsdns-cn-[0-9][0-9]\.net$".+\.awsdns-cn-[0-9][0-9]\.top$ baijiayun.com +cn0,.+\.awsdns-cn-[0-9][0-9]\.(biz|com|net|top)$$ .+\.awsdns-cn-[0-9][a-e0-9]\.cn$ baijiayun.com bootcdn.cn bootcdn.net bootcss.com bootcdn.cnphpcomposer.com cf-ns.com cn cf-ns.net @@ -6758,8 +7368,12 @@ cftest6.cn cn cftest7.com cn cftest8.com cncloudflare-cn.com +cn!cloudflareanycast.net +cncloudflarechina.cn cncloudflarecn.net +cn cloudflareglobal.net cn%cloudflareinsights-cn.com +cncloudflareperf.com cncloudflareprod.com cn!cloudflarestaging.com cn#cloudflarestoragegw.com @@ -6768,7 +7382,7 @@ dlgslb.net  dwion.com fastcdn.comfastcdn.com.cn  flxdns.cn flxdns.com globalcdn.cn mcadn.cn  tlgslb.cn tlgslb.com maoyun.commaoyuncloud.cnmaoyuncloud.com pkoplink.com frontwize.com qingcache.com qingcloud.com qingstor.com routewize.com -yunify.comstaticfile.org qbox.me  qiniu.com qiniucdn.com qiniudn.com qiniudns.com +yunify.comstaticfile.netstaticfile.org qbox.me  qiniu.com qiniucdn.com qiniudn.com qiniudns.com qiniup.com  qnsdk.com  qnssl.com szbdyd.com snodehome.com snodehome.cn apimkt.net  cdndo.com clk1.cn clk1.topecloud-gdu.com  fshark.cn globalrdp.cn globalssh.cn  iprdp.net  ipssh.net me1.ltd slk1.net  u-cdn.net  ucgslb.cn @@ -6795,8 +7409,9 @@ skysea.com  suanya.cn suanya.com tieyou.com toptown.cn toursbms.com trip.com tripcdn.com -vipdlt.com dangdang.com ddimg.cn -ele.me elemecdn.com eleme.cn 1huizhan.com3.cn  300hu.com  360buy.cn +vipdlt.com dangdang.com ddimg.cn doservice.com +ele.me +ele.to eleme.cn eleme.io elemecdn.cn elemecdn.com  elenet.me 1huizhan.com3.cn  300hu.com  360buy.cn 360buy.com 360buy.com.cn 360buyimg.com360buyinternational.com 360top.com 7fresh.com baitiao.comblackdragon.com  caiyu.com chicalot.cnchinabank.com.cncloud-beijing.comcloud-hebi.comcloud-ningbo.comcloud-ordos.comcloud-shenzhen.comcloud-shiyan.comcloud-wuhan.comcloud-xian.com cloud-xm.comcloud-zhaoqing.comcloud-zhongwei.comcloudanqing.comcloudbaoshan.comcloudbeibei.comcloudbinzhou.comcloudchangde.comcloudchangsha.comcloudchangzhou.comcloudchaozhou.comcloudchengde.comcloudchengdu.comcloudchuzhou.com cloudczs.comclouddalian.comclouddatong.comclouddongying.comcloudfoshan.comcloudfuqing.comcloudganzhou.comcloudguangzhou.comcloudhaidong.comcloudhefei.comcloudhengshui.comcloudhuaihua.comcloudhuizhou.comcloudjinan.comcloudjinchang.comcloudjingzhou.comcloudjining.comcloudjiujiang.comcloudkunming.comcloudleshan.comcloudlijiang.comcloudlishui.comcloudluohe.comcloudluoyang.comcloudmeishan.comcloudnanan.comcloudnanjing.comcloudnanning.comcloudnantong.comcloudquanzhou.comcloudsanya.comcloudshanghai.comcloudshaoyang.comcloudshenfuxingqu.comcloudsiping.comcloudsuqian.comcloudtangshan.comcloudtianjin.comcloudtongchuan.comcloudtongliang.comcloudweinan.comcloudxiangtan.comcloudxianyou.comcloudxining.comcloudyanan.comcloudyancheng.comcloudyantai.comcloudyinchuan.comcloudyueyang.comcloudyuncheng.com cloudyuxi.comcloudzhongshan.comcloudzhuhai.com @@ -6847,12 +7462,12 @@ ali213.netbilibiligame.cn cn biligame.co cn biligame.com cn biligame.net -cnbilicomics.commanga.bilibili.com +cn bilicomic.combilicomics.commanga.bilibili.com acg.tv acgvideo.comanimetamashi.cnanimetamashi.com anitama.cn anitama.net b23.tv  bigfun.cn bigfunapp.cn  bili22.cn bili2233.cn  bili23.cn  bili33.cn biliapi.com biliapi.net bilibili.cc bilibili.cn bilibili.com bilibili.net bilibili.tv !cnbilibilipay.cnbilibilipay.com bilicdn1.com bilicdn2.com bilicdn3.com bilicdn4.com bilicdn5.com -biligo.com biliintl.com +biligo.com biliimg.com biliintl.com !cn bilivideo.cn bilivideo.com bilivideo.net dreamcast.hk  hdslb.com  hdslb.org im9.com maoercdn.com mincdn.com yo9.com$ upos-hz-mirrorakam.akamaized.net ciweimao.com hbooker.comkuangxiangit.com cowlevel.net  cdncl.net biji.com ddmogo.com @@ -6883,11 +7498,13 @@ ppsimg.com qiyi.com qiyipic.com ads  jjwxc.net ku6.com ku6cdn.com ku6img.com kkmh.comkuaikanmanhua.com gifshow.com ksapisrv.com kuaishou.com -yximgs.com log-sdk.gifshow.com +yximgs.com +kwaizt.comkuaishouzt.com log-sdk.gifshow.com adswlog.kuaishou.com ads  kgimg.com  kugou.com le.com lecloud.com -lemall.com letv.com letvcdn.com letvimg.com lizhi.fm lizhifm.com mfuns.cn miaopai.com mhyurl.cn +lemall.com letv.com letvcdn.com letvimg.com lizhi.fm lizhifm.com mfuns.cn miaopai.com mhystatic.com +cn mhyurl.cn cn mihayo.com cn mihayou.com @@ -6904,13 +7521,17 @@ mihoyo.com cn yuanshen.com cn'^.+-mihayo\.akamaized\.net$ cn  muwai.com  pplive.cn -pplive.com pptv.com qingting.fm  sfacg.com +pplive.com pptv.com qingting.fm qtfm.cn  sfacg.com 61.com -taomee.com -tapimg.com -taptap.com  tgbus.com tiancity.comtiancitycdn.com u17.com u17i.com u17t.com +taomee.com  tgbus.com tiancity.comtiancitycdn.com u17.com u17i.com u17t.com vgtime.com -xhscdn.comxiaohongshu.com ximalaya.com  xmcdn.com +tapimg.com +tapimg.net  taptap.cn +taptap.com  taptap.iotaptapdada.com +ro.com xd.cn +xd.com  xdcdn.net xindong.com +xhscdn.com +xhscdn.netxiaohongshu.com ximalaya.com  xmcdn.com kumiao.com  youku.com  ykimg.com mmstat.com soku.com cibntv.net @@ -6921,15 +7542,18 @@ hacpai.com  ld246.com kechuang.orgkc.kexinshe.com cn nga.cn 178.com ngabbs.com ngacn.cc saraba1st.com -52pojie.cn itsk.com -klpbbs.com  mcbbs.net  uiwow.com  fofa.info +52pojie.cn kafan.cn itsk.com  wuyou.net +klpbbs.com  mcbbs.net  uiwow.com right.com.cn +pcbeta.com  fofa.info leigod.com tmjiasuqi.com uu.163.com xunyou.combohejiasuqi.comjiasu.bohe.com ipip.netmyip.la -!cninfinitynewtab.com +!cn +dns.jd.com dns.weibo.cndns.weixin.qq.comdns.weixin.qq.com.cnhttpdns-api.aliyuncs.comhttpdns-sc.aliyuncs.comhttpdns.alicdn.comhttpdns.baidu.comhttpdns.baidubce.comhttpdns.bilivideo.comhttpdns.c.cdnhwc2.comhttpdns.meituan.comhttpdns.music.163.comhttpdns.n.netease.comhttpdns.push.oppomobile.comhttpdns.volcengineapi.comhttpsdns.baidu.comkuaishou.httpdns.prolofter.httpdns.c.163.commusic.httpdns.c.163.cominfinitynewtab.com inftab.com  ip138.com ipplus360.comkuaiduizuoye.com liulishuo.com llsapp.com -llscdn.com llsserver.com  feng1.comrongechain.comsf-airlines.comsf-cityrush.comsf-express.comsf-financial.com sf-saas.comsf-tech.com.cn sfcar.hk sffix.cn sfgy.org mcmod.cn36dianping.com 36kr.com 36krcdn.com 36krcnd.com cctv.cn cctv.com cctvpic.com chinaepg.cn chinalive.com citv.net.cn cnms.net.cn cntv.cn cntv.com.cn +llscdn.com llsserver.com baicizhan.com baicizhan.org +bczcdn.combczeducation.cn zhan.comburningvocabulary.cnburningvocabulary.com 423down.com ghxi.com  feng1.comrongechain.comsf-airlines.comsf-cityrush.comsf-express.comsf-financial.com sf-saas.comsf-tech.com.cn sfcar.hk sffix.cn sfgy.org mcmod.cn36dianping.com 36kr.com 36krcdn.com 36krcnd.com cctv.cn cctv.com cctvpic.com chinaepg.cn chinalive.com citv.net.cn cnms.net.cn cntv.cn cntv.com.cn cctvlib.cncctvlibrary.cncctvlib.com.cncctvlibrary.com.cn cctvpro.cncctvpro.com.cn  cntvwb.cn gjgbdszt.cngjgbdszt.com.cngjgbdszt.net.cn  ipanda.cn ipanda.com ipanda.com.cn @@ -6937,7 +7561,7 @@ ipanda.net livechina.cn livechina.comolympicchannelchina.cn  cns.com.cn ecns.cn  dgtle.com geekpark.nethoopchina.com.cn hupu.com hupucdn.com  shihuo.cn coolbuy.com  ifanr.com ifanr.inifanrusercontent.com ifanrx.com minapp.com jiemian.comjiemian.com.cn -lancdn.comlandiannews.com  wsoso.com landian.vip +lancdn.comlandiannews.com landian.vip landian.xyz ourl.co  wsoso.com fengcx.com  ifeng.com ifengimg.comphoenixcenter.cn fengedu.comifengweekly.com 6655.com cooldock.com ithome.com lapin365.com ruanmei.com saayaa.com win7china.com win8china.com sohu.com @@ -6961,7 +7585,9 @@ mypaas.com mypaas.com.cn myypark.com 123pan.com cloud.189.cn ctfile.com feimaoyun.com pan.baidu.com pan.quark.cn weiyun.com yun.139.com -yunpan.comaliyundrive.comyunpan.aliyun.com lanzoui.com lanzouw.com lanzoux.com +yunpan.comaliyundrive.comyunpan.aliyun.com baidupan.com ilanzou.com lanosso.com +lanzou.com lanzoub.com lanzouc.com lanzoue.com lanzouf.com lanzoug.com lanzouh.com lanzoui.com lanzouj.com lanzouk.com lanzoul.com lanzoum.com lanzouo.com lanzoup.com lanzouq.com lanzous.com lanzout.com lanzouu.com lanzouv.com lanzouw.com lanzoux.com lanzouy.com +lanzov.com woozooo.com cnmstl.net fofa.so t00ls.cc  t00ls.net tools.team  fuwai.com pkuh6.cn puh3.net.cnhospital.pku.edu.cnss.bjmu.edu.cn lkcoffee.comluckincoffeecdn.com yyds.co 17zuoye.cn 17zuoye.com 17zuoye.netapplysquare.comapplysquare.net @@ -6969,7 +7595,7 @@ cctalk.com  hjapi.com  hjfile.cn hujiang.com  yeshj.com koocdn.com koolearn.com koopass.com  baydn.com shanbay.com speiyou.com xesimg.com xueersi.com banmaaike.comxiaoyuankousuan.com ybccode.com yuanfudao.com yuansouti.com yuantiku.com zhihuishu.comrainclassroom.com yuketang.cn yudou.cn yushiyan.net xuetangx.com x-cloud.cc dgjy.net 91yunxiao.com aiyunxiao.com haofenshu.com iyunxiao.com yunxiao.comkeboyunxiao.com ketangpai.com  pigai.orgweilaiyunxiao.comchinesemooc.org -cnmooc.orgicourse163.org icourses.cn mooc.cnopenlearning.com pmphmooc.commoocs.unipus.cnopencourse.pku.edu.cn study.163.com +cnmooc.orgicourse163.org icourses.cn icve.com.cn mooc.cnopenlearning.com pmphmooc.commoocs.unipus.cnopencourse.pku.edu.cn study.163.com csdl.ac.cn iscas.ac.cn  las.ac.cn 16q.cn  5read.comaichaoxing.com chaoxing.cc chaoxing.com chaoxingv.com cxbiji.com hongbo100.com  lnlib.net mndqlib.net @@ -6998,22 +7624,30 @@ hongen.comwanfangdata.com.cn afdian.net afdiancdn.com agora.io agoraio.cn agoralab.co antutu.com bitauto.combitautoimg.com cheyisou.com  yiche.com  yccdn.com shimo.im  yuque.com  doc88.com  docin.com -douding.cncapitalonline.netmirrors.yun-idc.com chinaso.com +douding.cn&^ntp([1-7])?\.aliyun\.com$ +cn'^ntp([1-5])?\.tencent\.com$ +cncn.pool.ntp.org +cnntp.neu.edu.cn +cnntp.ntsc.ac.cn +cn +ntp.org.cn +cncapitalonline.netmirrors.yun-idc.com chinaso.com pg0.cn chinaz.com chinaz.net caiyunai.com caiyunapp.com coolapk.comcoolapkmarket.comcoolapkmarket.net c-t.workcowtransfer.com dida365.com allflow.cn  flowus.cnfoundertype.com geetest.com#geetest.datasink.sensorsdata.cn hellofont.cnhellowebfont.com0,hellofontpreview.oss-cn-beijing.aliyuncs.com-)hellowebfonts.oss-cn-beijing.aliyuncs.com hanyi.com.cnfontstar.com.cn jianshu.com -jianshu.io jinshuju.netjinshujucdn.com gotokeep.com keepcdn.com  lagou.com lgstatic.com baidupan.com -lanzou.com lanzoub.com lanzouc.com lanzoue.com lanzouf.com lanzoug.com lanzouh.com lanzoui.com lanzouj.com lanzouk.com lanzoul.com lanzoum.com lanzouo.com lanzoup.com lanzouq.com lanzous.com lanzout.com lanzouu.com lanzouv.com lanzouw.com lanzoux.com lanzouy.com woozooo.com  ldmnq.com +jianshu.io jinshuju.netjinshujucdn.com gotokeep.com keepcdn.com  lagou.com lgstatic.com  ldmnq.com liepin.com -lietou.comlietou-static.com mafengwo.cn mafengwo.com mafengwo.net  meitu.com meitudata.com meitustat.com moji.com mojichina.com newcoder.com nowcoder.com nowcoder.org  polyv.net videocc.net -renren.comrenren-inc.com vaptcha.com vaptcha.net wamawama.com +lietou.comlietou-static.com linakesi.com linakesi.cn lazycat.cloud heiyu.space mafengwo.cn mafengwo.com mafengwo.net  meitu.com meitudata.com meitustat.com moji.com mojichina.com newcoder.com nowcoder.com nowcoder.org  polyv.net videocc.net +renren.comrenren-inc.com tendcloud.comtalkingdata.comtalkinggame.com +cpatrk.net vaptcha.com vaptcha.net wamawama.com wiwide.com sojump.com wjx.cn wjx.com wjx.top  wolai.com -wol.tv wostatic.cn yinxiang.com zcmbc.com.cn zdns.cn zdns.net.cn zdns.org.cn zdnscloud.biz zdnscloud.cn zdnscloud.comzdnscloud.com.cnzdnscloud.info zdnscloud.netzdnscloud.net.cnzdnscloud.org.cn mihuashi.com bcy.net +wol.tv wostatic.cn yinxiang.com zcmbc.com.cn zdns.cn zdns.net.cn zdns.org.cn zdnscloud.biz zdnscloud.cn zdnscloud.comzdnscloud.com.cnzdnscloud.info zdnscloud.netzdnscloud.net.cnzdnscloud.org.cn mob.com +dutils.com accuratead.cn mihuashi.com tower.im udesk.cn xedge.cc bcy.net bcyimg.comlf-rc1.yhgfb-cn-static.com -douban.com  douban.fm doubanio.com  gracg.com procg.cn  zhihu.com  zhimg.comtieba.baidu.com  tieba.com aixcoder.com nnthink.com  apifox.cn +douban.com  douban.fm doubanio.com  gracg.com procg.cn  zhihu.com  zhimg.comtieba.baidu.com  tieba.com dandan818.comdandanvoice.com aixcoder.com nnthink.com  apifox.cn apifox.combaltamatica.com blogjava.net cnblogs.com cnitblog.com cnweblog.com cppblog.com phpweblog.net teachblog.net  coding.me coding.net codechina.net csdn.com csdn.net csdn.net.cn csdnimg.cn csto.com @@ -7026,15 +7660,23 @@ goproxy.cn goproxy.iojinrishici.com  juejin.cn  juejin.im xitu.iop1-juejin.byteimg.comp2-juejin.byteimg.comp3-juejin.byteimg.comp4-juejin.byteimg.comp5-juejin.byteimg.comp6-juejin.byteimg.comp7-juejin.byteimg.comp8-juejin.byteimg.comp9-juejin.byteimg.com dengguobi.comhouyicaiji.comjinglingbiaozhu.com oschina.net  pgyer.com tracup.com frontjs.comruby-china.orgrubyconfchina.orgsegmentfault.com  sifou.com mysxl.cn sxl.cn  sxlcdn.cn -tipdim.org openkylin.topubuntukylin.comxueyuanjun.com alibaba +tipdim.org openkylin.topubuntukylin.comxueyuanjun.com +asktug.com +pingcap.cn pingcap.com tidb.ai tidb.net tidbcloud.com tikv.org alibaba alipay taobao tmall a.alimama.cn adsacjs.aliyun.com +ads!adash-c.m.taobao.com +ads"adash-c.ut.taobao.com +ads0#adash-emas.cn-hangzhou.aliyuncs.com adsadash.m.taobao.com +ads#adash.man.aliyuncs.com ads!adashbc.m.taobao.com ads"adashbc.ut.taobao.com -ads"adash-c.ut.taobao.com ads adashx.m.taobao.com +adsadashx.ut.amap.com +adsadashx.ut.ele.me +ads adashx.ut.youku.com ads$adashx4ae.ut.taobao.com ads#adashx4yt.m.taobao.com ads#adashxgc.ut.taobao.com @@ -7045,20 +7687,17 @@ tipdim.org openkylin.topubuntukylin.comxueyuanjun.com alib ads#agoodm.wapa.taobao.com ads alipaylog.com adsamdc.alipay.com -adsamdc.m.taobao.com ads api.wapa.taobao.com ads#api.waptest.taobao.com adsapoll.m.taobao.com -ads#appdownload.alicdn.com adsatanx.alicdn.com adsatanx2.alicdn.com +ads!c-adash.m.taobao.com adscdn0.mobmore.com adsclick.aliyun.com ads&click.mz.simba.taobao.com adscm.ipinyou.com -ads cm.mlt01.com ads!dsp.simba.taobao.com -adserr.taobao.com adsex.mobmore.com ads ex.puata.info ads!fav.simba.taobao.com @@ -7073,6 +7712,10 @@ g.tbcdn.cn adsgtms02.alicdn.com adsgtms03.alicdn.com adsgtms04.alicdn.com +adsh-adashx.ut.ele.me +ads#h-adashx.ut.taobao.com +ads"h-adashx.ut.youku.com +ads&h-adashx4yt.ut.taobao.com adshydra.alibaba.com ads'hz.pre.tbusergw.taobao.net ads#hz.tbusergw.taobao.net @@ -7082,6 +7725,7 @@ g.tbcdn.cn ads$intl.waptest.taobao.com ads"jxlog.istreamsche.com adslog.umtrack.com +ads!m-adash.m.taobao.com adsm.intl.taobao.com adsm.simba.taobao.com adsmatch.p4p.1688.com @@ -7100,7 +7744,6 @@ g.tbcdn.cn adsrj.m.taobao.co adsrj.m.taobao.com adssdkinit.taobao.com -adsshow.re.taobao.com adssimaba.taobao.com adssimba.m.taobao.com ads!srd.simba.taobao.com @@ -7114,6 +7757,10 @@ g.tbcdn.cn ads tvupgrade.yunos.com adstyh.taobao.com adsuserimg.qunar.com +ads"v6-adashx.ut.amap.com +ads%v6-adashx.ut.cainiao.com +ads v6-adashx.ut.ele.me +ads$v6-adashx.ut.taobao.com adsw.m.taobao.com adsyiliao.hupan.com adsalibabacloud.co.inalibabacloud.comalibabacloud.com.aualibabacloud.com.hkalibabacloud.com.myalibabacloud.com.sgalibabacloud.com.tw alicloud.comalibabadns.com @@ -7154,7 +7801,8 @@ lazada.comliangxinyao.com m-now.cn maitix.com  mdeer.com mei.commiaostreet.com  mshare.cc nic.xinphilanthropy.xin phpwind.com phpwind.netqingtingtrip.com  rexpos.cn saee.org.cn shenjing.com  shuqi.comshuqireader.com sparenode.com  supet.com  ttpod.com wandoujia.com xin.xinxinlingshou.cn yowhale.com yunos-inc.com  yunos.comyushanfang.com zuodao.comaliexpress.com aliexpress.rualipayplus.com alipay.hk !cn alipaymo.com -!cnalicloudccp.comaliyundrive.comaliyundrive.net cainiao.comcainiao.com.cncainiao-inc.com freshhema.com hemamax.com +!cnalicloudccp.com +alipan.comaliyundrive.comaliyundrive.net cainiao.comcainiao.com.cncainiao-inc.com freshhema.com hemamax.com hemaos.com hemashare.cn shyhhema.comantfortune.com fund123.cn antfin.com antgroup.comantgroup-inc.cn sm.cn 1688.com etao.com juhuasuan.comlingshoujia.com @@ -7163,8 +7811,9 @@ taobao.com taobao.org taobaocdn.comtaobizhong.comtaopiaopiao.com tb.cn tbcache.com tburl.in  tmall.com tmall.ru tmalltv.com tmjl.ai quark.cn alitrip.com  feizhu.cn feizhu.com fliggy.com  fliggy.hk -iuynfg.com amap.com amapauto.com autonavi.com  gaode.com  xiami.com xiami.fm  xiami.net -koubei.com zhisheng.com npmmirror.com  b3log.org a.baidu.com +iuynfg.com a-map.cn a-map.co +a-map.link  a-map.vipacloudrender.com amap.com amapauto.com anav.com autonavi.com  gaode.com  xiami.com xiami.fm  xiami.net +koubei.com zhisheng.com npmmirror.com goofish.com  b3log.org a.baidu.com ads ad.duapps.com ads ad.player.baidu.com ads adm.baidu.com @@ -7182,9 +7831,7 @@ koubei.com zhisheng.com npmmirror.com  b3log.org a.baidu.com adsbaidutv.baidu.com adsbanlv.baidu.com ads bar.baidu.com -ads"bdimg.share.baidu.com adsbdplus.baidu.com -ads bj.bcebos.com adsbtlaunch.baidu.com ads c.baidu.com ads cb.baidu.com @@ -7192,11 +7839,8 @@ koubei.com zhisheng.com npmmirror.com  b3log.org a.baidu.com adscjhq.baidu.com adscleaner.baidu.com ads click.bes.baidu.com -adsclick.hm.baidu.com adsclick.qianqian.com -ads"cm.baichuan.baidu.com ads cm.baidu.com -adscm.pos.baidu.com ads cpro.baidu.cn adscpro.baidu.com ads!cpro.baidustatic.com @@ -7234,7 +7878,6 @@ koubei.com zhisheng.com npmmirror.com  b3log.org a.baidu.com ads#fc-feed.cdn.bcebos.com adsfclick.baidu.com adsfeed.baidu.com -adsfexclick.baidu.com ads g.baidu.com adsgimg.baidu.com adsguanjia.baidu.com @@ -7273,13 +7916,11 @@ koubei.com zhisheng.com npmmirror.com  b3log.org a.baidu.com ads rj.baidu.com adsrplog.baidu.com ads s.baidu.com -adss.cpro.baidu.com ads!sa.tuisong.baidu.com adssclick.baidu.com adssestat.baidu.com adsshadu.baidu.com adsshare.baidu.com -ads"snippet.pos.baidu.com adssobar.baidu.com adssobartop.baidu.com adsspcode.baidu.com @@ -7311,7 +7952,6 @@ koubei.com zhisheng.com npmmirror.com  b3log.org a.baidu.com ads$wenku-cms.bj.bcebos.com ads%wisepush.video.baidu.com ads wm.baidu.com -adswn.pos.baidu.com adsznsv.baidu.com adszz.bdstatic.com adszzy1.quyaoya.com @@ -7329,7 +7969,28 @@ hao123.com hao123img.com hao222.com haokan.com jomocdn.net jomodns.com mipcdn.com  nuomi.com quyaoya.com -shifen.com smartapps.cn  tieba.com tiebaimg.com xianfae.com xiaodutv.com larksuite.comlarksuitecdn.combyteoversea.com +shifen.com smartapps.cn  tieba.com tiebaimg.com xianfae.com xiaodutv.com sl916.com +cn bluepoch.com +cnactivity-zhendingtech.comchangdunovel.comfanqienovel.comfanqieopen.comfanqieopenpic.comfanqieopenstatic.comfanqieopenvod.com fanqiesdk.comfanqiesdkpic.comfanqiesdkstatic.comfanqiesdkvod.com fqnovel.com fqnovelim.comfqnovel-op.com fqnovelop.comfqnovelpic.comfqnovelstatic.comfqnovelvod.comihaohaoxuexi.com +muyewx.com novelfm.comnovelfmpic.comnovelfmstatic.comnovelfmvod.com qznovel.comqznovelpic.comqznovelstatic.comqznovelvod.comp3-novel.byteimg.comp6-novel.byteimg.com(ads3-normal-hl.zijieapi.com +ads(ads5-normal-hl.zijieapi.com +ads'log3-applog-hl.fqnovel.com +ads'log5-applog-hl.fqnovel.com +ads#p3-ad-sign.byteimg.com +ads#p6-ad-sign.byteimg.com +ads#p9-ad-sign.byteimg.com +ads)rtlog3-applog-hl.fqnovel.com +ads)rtlog5-applog-hl.fqnovel.com +ads anycross.com  blmpb.combytedancehermestest.comfalconsending.com +fei-shu.cn!feishu-3rd-party-services.comfeishu-boe.netfeishu-customer.cn feishu-pre.cnfeishu-pre.net feishu-psc.cnfeishu-staging.cn  feishu.cn +feishu.netfeishuapp-cdn.net feishuapp.cn feishuapp.com feishucdn.com feishudoc.cn feishudoc.comfeishuhuiyi.cnfeishuhuiyi.comfeishuimg-boe.comfeishuimg-pre.com feishuimg.comfeishukacdn.comfeishumeetings.cnfeishumeetings.comfeishuoffice.cnfeishuoffice.com feishuopenplatformrecord.com feishupkg.comfeishustatus.cn feishuvc.cn feishuvc.com getfeishu.cn getfeishu.com +getsays.cn getsays.com  lackvc.cnsecurityfeishu.cn securityfs.cnstatusfeishu.cn%!frontier-lark-lb-v3.lf.bytelb.netlark-passport-qa-sg.net lark.cn larkcloud.com larkcloud.net +larkfn.comlarkmeetings.cnlarkmeetings.comlarkoffice.comlarkoffice.com.bytedns1.comlarkofficeapp-boe.comlarkofficeapp-pre.comlarkofficeapp.comlarkofficeboe.comlarkofficecdn.comlarkofficeimg.comlarkofficepkg.comlarkofficepre.com larkrooms.cn larkrooms.comlarksuite-pre.com larksuite.comlarksuite.com.ttdns1.comlarksuite.com.ttdns2.comlarksuitecdn.comlarksuiteimg-boe.comlarksuiteimg-pre.comlarksuiteimg.com +larkvc.comstatuslarkoffice.comthelarkcloud.combaseopendev.com bytecloud.com +byteoc.combytewebservice.com +bytexns.cn bytexns.com bytexns.net bytexopen.combytexservice.com meegobeta.comoceancloudapi.com +okr.cn okr.com +okr.com.cnvscenevideo.combyteoversea.com !cn muscdn.com !cn @@ -7337,25 +7998,92 @@ musical.ly !cntik-tokapi.com !cn tiktok.com +!cntiktokcdn-us.com +!cn tiktokcdn.com !cn tiktokd.net !cn tiktokd.org -!cn tiktokcdn.com !cn tiktokv.com +!cn +tiktokv.us +!cn +tiktokw.us +!cn ttwstatic.com !cn,p16-tiktokcdn-com.akamaized.net -!cn  amemv.com -bytecdn.cnbyted-static.com  byted.org bytedance.com bytedance.netbytedanceapi.com bytedapm.com bytedns.netbytednsdoc.com bytedns1.com bytefcdn.com bytegecko.com bytegoofy.com bytegslb.com bytehwm.com byteimg.com byteintl.net -bytelb.netbyteoversea.com -!cn bytescm.com bytetcc.com bytetos.combytexservice.com feelgood.cn huaxiong.com ibytedapm.com ibytedtos.com +!cnbds.snssdk.com +adsctobsnssdk.com +ads dig.bdurl.net +adsextlog.snssdk.com +ads i.snssdk.com +adsmcs.snssdk.com +ads'pangolin-dsp-toutiao-b.com +ads%pangolin-dsp-toutiao.com +ads'pangolin-sdk-toutiao-b.com +ads%pangolin-sdk-toutiao.com +ads&pangolin-sdk-toutiao1.com +ads pangolin.snssdk.com +ads&panplayable-toutiao-b.com +ads$panplayable-toutiao.com +ads%pglstatp-sdk-toutiao.com +ads(pglstatp-snssdk-toutiao.com +ads#pglstatp-toutiao-b.com +ads!pglstatp-toutiao.com +ads%sf3-ttcdn-tos.pstatp.com +adsaigc-cloud.com bdegnine.com +bplslb.com  bpltm.com byte-dns.com byte-dns.net bytehouse.cnbyteinspire.cnbyteinspire.combytevdn-boe.com bytevdn.comcache4ever.com cache666.comcloudendpoint.cndouyincloud.netdouyincloud.run dycloudbk.com dycloud.runemr-volces.com +feilian.cn iccvlog.com ifeilian.cn ifeilian.cominspirecloud.cninspirecloud.comisealsuite.com ivolces.com kfcbest.com  kych5.commultilingual-volc.comqingfuwuapi.cnqingfuwucdn.com qingfuwu.cn qingfuwu.com slbauto.com  sms18.comtoutiaopanapi.comtoutiaopan.com +ttgslb.com  ttgtm.com vecdnlb.comvecloudgame.com vedcdnlb.com vedsalb.com veefdev.comveew-alb-cn1.comveew-alb-cn2.comveew-alb-ts.com +vegalb.com +vegslb.com  vegtm.net veicplive.comve-imcloud.com vemarsdev.comvemarsstatic.com vemarsweb.com vertciot.com vestack.cloudve-trafficroute.comve-trafficroute.netvolcadocean.com volcadvc.com volcalb.comvolcautovod.com volcbiz.com  volcca.cn +volcca.com +volcca.net volccdn1.com volccdn2.com +volccdn.cn volccdn.comvolcddos001.com volcddos.com volcdem.comvolcdlspace.cn +volcdn.com volc-dns.com volcdns.com volc-dns.net volc-dns.pub volcdns.pub volceapi.comvolceapplog.com volcecr.com volcecw.comvolc-embed.comvolcenginapi.comvolcenginealb.comvolcengineapi.com volcengine.cnvolcengine.comvolcengine-dns.comvolcenginedns.comvolcengine-dns.netvolcenginedns.netvolcengine.netvolcenginepaas.com +volces.com volcfake.comvolcfcdnbyte.com volcfcdn.comvolcfcdndvs.comvolcfcdnplus.comvolcfcdnrd.comvolcfcdnsc.comvolcfxgjrtm.com volcgroup.com volcgslb.com volcgtm.com volciad.com volcimagex.cnvolcimagex.comvolcimagex.netvolcimagextest.comvolcmagicpage.com volcmcdn1.com volcmcdn2.com volcmcdn3.com volcmcdn4.com volcmgs.comvolcmusecdn.com volcocic.comvolcopjrtm.comvolcpartner.comvolcpartner.netvolcsiriusbd.comvolcsirius.comvolcspaceeduc.comvolctracer.com volctrack.comvolctraffic.comvolctranscdn.com volcvideo.comvolcvideos.com volcvms.com volcvod.comvolcwaf001.com volcwaf.comwritingo-editor.com writingo.net  ytxptd.cn  ytxptz.cn zebracdn.com  zjytxd.cn  zjytxp.cn zvip.cn 99uri.cn  99uri.comactivity01.comactivity02.comactivity03.comactivity04.comactivity05.comactivitybyte.comactivity-dy.comactivity-wbsj.com +aihst8.comali-api-test.netali-gtm-01.netali-gtm-pressure.comali-restore.net amemv.cn  amemv.com  amemv.net arco.designawemeughun.comawemeuglang.comawemeugsoul.comawemeugwave.com baikevod.combdactivity.com +bdgslb.com bdispatch.com bdispatch.netbdns-api-test.net bdns-boe.com bdns-boe.netbdns-gtm-01.netbdns-gtm-pressure.combdns-restore.net bdns-test.com bdns-test.net  bdppe.net bdsagslb.combdsagslbtest.combdxigualive.combdxiguavod.combdzjdsagslb.com betaband.net betadance.net betastar.cn bfcdnbf.com bfcdnrd.com bfcdnsc.com boxdouyin.com +bvfcdn.com bx0byte.com byte000.com byte008.com +byte00.com +byte00.net byte7bw.net +byteac.com byteacct.combyteacctimg.combyteactivity11.combyteactivity12.combyteactivity13.combyteactivity14.combyteactivity15.combyteactivity16.combyteactivity.combyteadverts.com byteapi.com +bytecdn.cn bytecdn.com bytecdn.net bytecdntp.com bytecimg.combytedanceapi.combytedance-boe.net bytedance.cn bytedance.com bytedance.net bytedance.org bytedapm.com bytedcdn.combyted-dast.com byted-edu.combytedeliver.combytedgames.com bytedns1.com bytedns2.com bytedns3.com bytedns4.com bytedns5.com bytedns6.com bytedns7.com bytedns.combytednsdoc.com bytedns.net  byted.orgbytedsocial.combyted-static.com byted-ug.com byte-edge.combyte-edgeworker.com bytefae.com bytefast.net bytefcdn.combytefcdnrd.com bytegecko.combytegeckoext.com bytegoofy.com bytegqpo.netbytegrowth.com byte-gslb.com bytegslb.com bytehwm.com byteics.com byteics.net byteimgc.com byteimg.com byteintl.net bytelb000.net +bytelb.com +bytelb.net bytemaimg.combytemastatic.com bytemedi.com bytenewst.com byteorg.com byteorge.combyteoversea.com +!cn byteq5k.com byteq8u.net bytescm.com bytesslb.net bytetcc.com bytetech.info byte-test.cn byte-test.com byte-test.net bytetos.combytetraffic.netbytetstatic.combytetstatic.net bytevalk.combytevcloudvod.combytexservice.com cdnbuild.com cdnbuild.net cdndns1.com cdndns2.com cookicut.com doubo03.com douyinact.com douyinact.net douyinfe.comdraftstatic.com  druid.vip duoshan.comfedlearner.net feelgood.cn gslbdns.com gslbdns.net huaxiong.comhuoshancdn.comhuoshangroup.comhuoshanimg.comhuoshanlive.comhuoshanparty.comhuoshante8.comhuoshanvideo.cnhuoshanvideo.nethuoshanvod.comhuoshanxiaoshipin.cnhuoshanxiaoshipin.nethuoshanzhibo.cnhuoshanzhibo.nethypercachenet.comibdxigualive.comibdxiguavod.com ibytedapm.com ibytedtos.com !cn ibyteimg.com !cn -pstatp.com -snssdk.com  wtturl.cn zijieapi.com zijiecdn.com zijiecdn.net  zjbyte.cn  zjcdn.com toutiao.comtoutiaoapi.comtoutiaocdn.comtoutiaocloud.comtoutiaocloud.nettoutiaohao.comtoutiaohao.net toutiaoimg.cntoutiaoimg.comtoutiaoimg.nettoutiaopage.comtoutiaostatic.comtoutiaovod.com -douyin.com douyincdn.comdouyinliving.com douyinpic.comdouyinstatic.com douyinvod.com huoshan.comhuoshanstatic.comhuoshanzhibo.com +icphoto.cnidouyinliving.comidouyinpic.comidouyinstatic.comidouyinvod.com iesdouyin.com iesdouyin.net ieshuodong.cnieshuodong.net  ihst8.comihuoshanimg.comihuoshanlive.comihuoshanstatic.comihuoshanvod.com iluckysf.netitmanager.clubitoutiaoliving.comjokecommunity.cnjokecommunity.comjokecommunity.net  jstti.com +jtamac.com  kesong.co kolbuyer.cnlivecdnstatic.comlocal-ip.online luckysf.net modernjs.cn +myimis.com  ndcpp.comneihancommunity.cnneihancommunity.comneihancommunity.net nextvid.netneyetwatcher.com oortgslb.com openbcs.com  openve.cnoriginalimg.comoriginalstatic.comoriginalvod.com pacmantwo.comppkankan01.com +pstatp.comqingfuwucdn.net  qishui.cn +qishui.com qishui.com.cnqishuimusic.cnqishuimusic.com.cnqualitycloud.top samasty.comsearchstatic.comsearchtoutiaolive.comshidianguji.com +sinflb.net sinf.net sinf-test.net +snssdk.comsupercachenet.comtekkenthree.com tetrisone.com tiapi.cn  tiapi.net +tlbapm.com +toscdn.com toutiao11.com toutiao12.com toutiao13.com toutiao14.com toutiao15.com toutiaocdn.cntoutiaocdn.nettoutiaocloud.cntoutiaojisu.comtoutiaolite1.comtoutiaolite2.comtoutiaolite.comtoutiaoliving.comtoutiaopic.com toutiaowap.cntoutiaowap.comtoutiaowap.nettr-test-ali.nettr-testboe.net tr-test.net  ttbyte.cn +ttbyte.com +ttbyte.net +ttjisu.com ttwebview.comugshare-img.com vcloudapi.comvcloud-byte.comvestack-beta.comvestack-cicd.comvestack-preview.comvestack-sandbox.com vfcdnrd.comvolcanicengine.comvolcdns-test.comvolcdns-test.net +voleai.comwoaihuoshan.com +wohst8.com  wtturl.cn xiguaapp.cn xiguaapp.comxiguashipin.cnxiguashipin.net xiguavideo.cnxiguavideo.net xsgtvacct.com zijieapi.cn zijieapi.com zijieapi.net zijiecdn.cn zijiecdn.com zijiecdn.net zijiedj.com zijieimg.cn zijieimg.com zijieimg.netzijietiaodong.com zijieurl.cn zijieurl.com zijieurl.net zijiewap.cn zijiewap.com zijiewap.net +zilrms.com +ziyrta.com  zjbyte.cn +zjbyte.com +zjbyte.net  zjcdn.com +zjfcdn.com +zjgslb.com toutiao.comtoutiaoapi.comtoutiaocdn.comtoutiaocloud.comtoutiaocloud.nettoutiaohao.comtoutiaohao.net toutiaoimg.cntoutiaoimg.comtoutiaoimg.nettoutiaopage.comtoutiaostatic.comtoutiaovod.com +douyin.com douyincdn.comdouyinliving.com douyinpic.comdouyinstatic.com douyinvod.com huoshan.comhuoshanstatic.comhuoshanzhibo.com +doubao.com +cncoze.cn +cncoze.com +!cn ixigua.comixiguavideo.com ixgvideo.combdxiguaimg.combdxiguastatic.com  baike.com  feishu.cn feishu.net feishucdn.com feishupkg.com wukong.comwukongwenda.cnwukongwenda.com dcarapi.com dcarimg.com dcarlive.comdcarstatic.com dcarvod.com -dcdapp.com dongchedi.comdongchediapp.com  365yg.comgogokid.com.cn gogokid.com  pipix.com -muyewx.comchangdunovel.com  faceu.com ulikecam.com didi-food.comdidiaustralia.blogdidichuxing.comdidiglobal.comdidimobility.co.jpdidistatic.comxiaojukeji.com +dcdapp.com dongchedi.comdongchediapp.com  365yg.comgogokid.com.cn gogokid.com  pipix.com  faceu.com ulikecam.com +rsproxy.cn didi-food.com didi.cn didialift.comdidiaustralia.blogdidichuxing.comdidiglobal.comdidimobility.co.jpdidistatic.comdiditaxi.com.cn +udache.comxiaojukeji.com dji.com dji.net +djicdn.com +djiops.comdjiservice.org skypixel.com bisheng.cn cnbishengcompiler.cn cn devui.design @@ -7382,27 +8110,56 @@ gneec7.com cn owsgo.com cn teleows.com cn saasops.tech -cn  hc-cdn.cnhuaweicloud-dns.cnhuaweicloud-dns.com huaweicloud-dns.net +cnami-alliance.org.cn  b2bgo.comeduapaashwc.com  hc-cdn.cn +hc-cdn.com +hc-sre.comhuaweiapaas.cnhuaweiapaas.comhuaweicloud-dns.cnhuaweicloud-dns.com huaweicloud-dns.net !cn huaweicloud-dns.org -!cnhuaweicloud-smn.cnhuaweicloud-smn.comhuaweicloud-smn.nethuaweicloud.comhuaweicloudapis.cnhuaweicloudapis.comhuaweicloudlive.comhuaweimarketplace.comhuaweisafedns.cnhuaweisafehub.cn huaweiyun.cn huaweiyun.com hwcdnsre.comhwclouds-dns.cnhwclouds-dns.comhwclouds-dns.net hwclouds.cn hwclouds.mobihwclouds.org.cn hwcloudvis.cnhwcloudvis.comimc-oneaccess.cnimcapptest.com km6g.cn km7g.cn km8g.cn km9g.cn livehwc3.cnmyhuaweicloud.cn -myhwcdn.cn myhwcdn.commyhwcloudlive.commyhwclouds.com pagescube.cn pagescube.com powerapp.io)af-south-1.myhuaweicloud.com +!cnhuaweicloud-smn.cnhuaweicloud-smn.comhuaweicloud-smn.nethuaweicloud.cnhuaweicloud.comhuaweicloudapis.cnhuaweicloudapis.comhuaweicloudlive.comhuaweicloudsite.cnhuaweicloudsite.comhuaweicloudwaf.cnhuaweicloudwaf.comhuaweioneaccess.cnhuaweioneaccess.comhuaweimarketplace.comhuaweisafedns.cnhuaweisafedns.comhuaweisafehub.cn huaweisre.cn huaweisre.com huaweiyun.cn huaweiyun.com +hwastro.cn hwastro.com hwcdnsre.cn hwcdnsre.comhwclouds-dns.cnhwclouds-dns.comhwclouds-dns.net hwclouds.cn hwclouds.com hwclouds.mobihwclouds.org.cnhwcloudsite.cnhwcloudsite.com hwcloudvis.cnhwcloudvis.comimc-oneaccess.cnimcapptest.com km6g.cn km7g.cn km8g.cn km9g.cnkmcb-cn-east-3.cnkmcb-cn-north-4.cnkmop-cn-east-3.cnkmop-cn-north-4.cn livehwc3.cnmyhuaweicloud.cn +myhwcdn.cn myhwcdn.commyhwcloudlive.com myhwclouds.cnmyhwclouds.commyhwclouds.com.cnmyhwclouds.net pagescube.cn pagescube.com powerapp.io&ae-ad-1.myhuaweicloud.com +!cn)af-south-1.myhuaweicloud.com !cn- ap-southeast-1.myhuaweicloud.com !cn- ap-southeast-2.myhuaweicloud.com !cn- ap-southeast-3.myhuaweicloud.com -!cncn-east-2.myhuaweicloud.comcn-east-3.myhuaweicloud.com cn-north-1.myhuaweicloud.com cn-north-2.myhuaweicloud.com cn-north-3.myhuaweicloud.com cn-north-4.myhuaweicloud.com cn-north-5.myhuaweicloud.com cn-north-6.myhuaweicloud.com cn-north-9.myhuaweicloud.com$ cn-northeast-1.myhuaweicloud.com cn-south-1.myhuaweicloud.com cn-south-2.myhuaweicloud.com cn-south-4.myhuaweicloud.com$ cn-southwest-2.myhuaweicloud.com(eu-west-0.myhuaweicloud.com +!cn- ap-southeast-4.myhuaweicloud.com +!cncn-east-2.myhuaweicloud.comcn-east-3.myhuaweicloud.comcn-east-5.myhuaweicloud.com cn-north-1.myhuaweicloud.com!cn-north-11.myhuaweicloud.com cn-north-2.myhuaweicloud.com cn-north-3.myhuaweicloud.com cn-north-4.myhuaweicloud.com cn-north-5.myhuaweicloud.com cn-north-6.myhuaweicloud.com cn-north-9.myhuaweicloud.com$ cn-northeast-1.myhuaweicloud.com cn-south-1.myhuaweicloud.com cn-south-2.myhuaweicloud.com cn-south-4.myhuaweicloud.com$ cn-southwest-2.myhuaweicloud.com(eu-west-0.myhuaweicloud.com +!cn*eu-west-101.myhuaweicloud.com !cn)la-north-2.myhuaweicloud.com !cn)la-south-2.myhuaweicloud.com +!cn(me-east-1.myhuaweicloud.com !cn*na-mexico-1.myhuaweicloud.com !cn- ru-northwest-2.myhuaweicloud.com !cn*sa-brazil-1.myhuaweicloud.com -!cncdnhwchcg02.comcdnhwcurq03.comcdnhwczba04.comcdnhwclxw05.comcdnhwcupf06.comcdnhwcxcy07.comcdnhwcatq08.comcdnhwcztu09.comcdnhwcedi10.comcdnhwcoem01.comcdnhwcllh11.comcdnhwcjog12.comcdnhwcpsd13.comcdnhwcqwg14.comcdnhwcqir15.comcdnhwcvix16.comcdnhwcajk17.comcdnhwcchh18.comcdnhwcohm19.comcdnhwczjt20.comcdnhwcggk22.comcdnhwczth23.comcdnhwctxz24.comcdnhwcgrb01.cncdnhwcyxb02.cncdnhwcywp03.cncdnhwclkl04.cncdnhwcjbj05.cncdnhwconz06.cncdnhwcgqa21.comcdnhwckbw08.cncdnhwcsjs09.cncdnhwcjkl10.cncdnhwctmz11.cncdnhwcrpp12.cncdnhwcpqh13.cncdnhwcxsi14.cncdnhwcfzp15.cncdnhwcgvs16.cncdnhwcrgg07.cncdnhwceft18.cncdnhwccvo19.cncdnhwcbvo20.cncdnhwcdkd21.cncdnhwcdvg22.cncdnhwclnh23.cncdnhwckfd24.cncdnhwczxh101.comcdnhwcbzj102.comcdnhwcjqv17.cncdnhwcljk104.comcdnhwclxu105.comcdnhwcbqs106.comcdnhwctnm107.comcdnhwcbni108.comcdnhwczks109.comcdnhwcick110.comcdnhwcead111.comcdnhwcjlg112.comcdnhwckon103.comcdnhwczmn114.comcdnhwcqgw115.comcdnhwckfz116.comcdnhwcqve117.comcdnhwcgnc118.comcdnhwcuim119.comcdnhwcjsb120.comcdnhwccmz121.comcdnhwcibv122.comcdnhwcprh113.comcdnhwcedt124.comcdnhwcofl101.cncdnhwclrd102.cncdnhwcurr103.cncdnhwczid104.cncdnhwcqvk105.cncdnhwczoy106.cncdnhwcuwd107.cncdnhwcogx108.cncdnhwcoph123.comcdnhwceod109.cncdnhwcpcw110.cncdnhwczic111.cncdnhwcozb112.cncdnhwcqrr114.cncdnhwcaoc115.cncdnhwctyd116.cncdnhwcidu117.cncdnhwclsl119.cncdnhwcsux118.cncdnhwcbie120.cncdnhwcuxc121.cncdnhwcaip122.cncdnhwcwqz113.cncdnhwcojn124.cncdnhwcscc123.cn#.+\.cdnhwc([1-9]|10)\.(cn|com)$ abhouses.comagconnect.link  dbank.com dbankcdn.comdbankcloud.com hicloud.com hihonor.com honor.cn  huawei.cn +!cn(tr-west-1.myhuaweicloud.com +!cncdnhwchcg02.comcdnhwcurq03.comcdnhwczba04.comcdnhwclxw05.comcdnhwcupf06.comcdnhwcxcy07.comcdnhwcatq08.comcdnhwcztu09.comcdnhwcedi10.comcdnhwcoem01.comcdnhwcllh11.comcdnhwcjog12.comcdnhwcpsd13.comcdnhwcqwg14.comcdnhwcqir15.comcdnhwcvix16.comcdnhwcajk17.comcdnhwcchh18.comcdnhwcohm19.comcdnhwczjt20.comcdnhwcggk22.comcdnhwczth23.comcdnhwctxz24.comcdnhwcgrb01.cncdnhwcyxb02.cncdnhwcywp03.cncdnhwclkl04.cncdnhwcjbj05.cncdnhwconz06.cncdnhwcgqa21.comcdnhwckbw08.cncdnhwcsjs09.cncdnhwcjkl10.cncdnhwctmz11.cncdnhwcrpp12.cncdnhwcpqh13.cncdnhwcxsi14.cncdnhwcfzp15.cncdnhwcgvs16.cncdnhwcrgg07.cncdnhwceft18.cncdnhwccvo19.cncdnhwcbvo20.cncdnhwcdkd21.cncdnhwcdvg22.cncdnhwclnh23.cncdnhwckfd24.cncdnhwczxh101.comcdnhwcbzj102.comcdnhwcjqv17.cncdnhwcljk104.comcdnhwclxu105.comcdnhwcbqs106.comcdnhwctnm107.comcdnhwcbni108.comcdnhwczks109.comcdnhwcick110.comcdnhwcead111.comcdnhwcjlg112.comcdnhwckon103.comcdnhwczmn114.comcdnhwcqgw115.comcdnhwckfz116.comcdnhwcqve117.comcdnhwcgnc118.comcdnhwcuim119.comcdnhwcjsb120.comcdnhwccmz121.comcdnhwcibv122.comcdnhwcprh113.comcdnhwcedt124.comcdnhwcofl101.cncdnhwclrd102.cncdnhwcurr103.cncdnhwczid104.cncdnhwcqvk105.cncdnhwczoy106.cncdnhwcuwd107.cncdnhwcogx108.cncdnhwcoph123.comcdnhwceod109.cncdnhwcpcw110.cncdnhwczic111.cncdnhwcozb112.cncdnhwcqrr114.cncdnhwcaoc115.cncdnhwctyd116.cncdnhwcidu117.cncdnhwclsl119.cncdnhwcsux118.cncdnhwcbie120.cncdnhwcuxc121.cncdnhwcaip122.cncdnhwcwqz113.cncdnhwcojn124.cncdnhwcscc123.cn o7mu8.cn 59bob.cn tc3bl.cn hiu58.cn kfomn.cn azkr2.cn vm45e.cn buf35.cn uwtmy.cn fpxyo.cn tm2a8.cn r8zc9.cn 6ts7c.cn 2gkjr.cn ns95c.cn tm7sg.cn le5vb.cn y43f6.cn 8n82b.cn x9exk.cn ms2tg.cn ka9bv.cn acgab.cn mle5p.cn 26r9y.cn 9coof.cn tzygd.cn z95rr.cn 3ili6.cn vo6z2.cn lu1da.cn ivwi3.cn 7k2k1.cn cza84.cn 8gcdp.cn kma1g.cn 576nt.cn#.+\.cdnhwc([1-9]|10)\.(cn|com)$ abhouses.comagconnect.link  dbank.com dbankcdn.comdbankcloud.com hicloud.com hihonor.com honor.cn  huawei.cn huawei.com huawei.com.cnhuaweiacad.com huaweiief.cn huaweiief.comhuaweistatic.com  hwccpc.cn hwccpc.com hwht.cn hwocloud.com hwtrip.comshanhaitujian.com  vmall.com vmallres.com iflytek.com  xunfei.cn ets100.com -zhixue.com changyan.com xunfeixxj.com cmcm.com cmcmcdn.com  liebao.cn duba.com duba.net ijinshan.comseasungames.com xishanju.com xoyo.com testplus.cn +zhixue.com changyan.com xunfeixxj.com 315dian.com +doucang.cn doucang.com +drp321.com +erp.cn  erp321.cn +erp321.com +erp321.net  jsterp.cn jugongdan.com jushuitan.cn jushuitan.com jushuitan.netjushuitan-inc.com juxieyun.com  scm121.cn +scm121.com +shopss.com shuiyaohuo.cnshuiyaohuo.com  surerp.cn +surerp.com +sursung.cn sursung.com cmcm.com cmcmcdn.com  liebao.cn duba.com duba.net ijinshan.comseasungames.com xishanju.com xoyo.com testplus.cn wps.cn wps.com  51dzt.com  iciba.com  docer.com kdocs.cn papocket.com  wpspdf.cn kimg.cn kingsoft.com ksmobile.com -ks-cdn.com ks-cdn1.com  ksyun.com ksyuncdn.com ksyungslb.com flyme.cn meizu.cn  meizu.com  mzres.com 126.com 126.link 126.net 127.com 127.net 163.com 163cn.tv163industry.com 163mail.com 163qiyukf.com +ks-cdn.com ks-cdn1.com  ksyun.com ksyuncdn.com ksyungslb.com +lenovo.net +baiying.cnbaiying.com.cncftsupport.comcon-c-hybris.lenovo.comileapcloud.comlenovocloudos.com  lenovo.cn +lenovo.com lenovo.com.cnlenovoeservice.comlenovovip.com.cn  lxzjjt.cn +lxzjjt.comthinkcloudlab.com thinkpad.comzhiliaowenda.com.cn blurdev.comchainedbox.com  fm365.com +idea123.cn jhwan.com.cn juhuiwan.comjuhuiwan.com.cn juhuiwan.net lenauth.comlenovogame.com lenovomm.cn lenovomm.com +lx.pub +lx.run surepush.cn +zui.cn zui.com +zuk.cn zuk.com +zuk.com.cnlenovocare.com.cn lenovocust.cnlenovomobile.comcunchuhulian-ln.cnlenovonetapp.com +dayin8.comiprintworks.cnlenovoimage.cnlenovoimage.comlenovoprinter.comlenovoprinter.com.cnlenovoprinter.netthinkprinter.cnthinkprinter.com.cnthinkprinter.net +zxsales.cn!lenovo.com.cdn.cloudflare.net flyme.cn meizu.cn  meizu.com  mzres.com 126.com 126.link 126.net 127.com 127.net 163.com 163cn.tv163industry.com 163mail.com 163qiyukf.com 163yun.com 166.com 166.net haowu.linkicourse163.org  kaola.com lofter.com  nease.netnetease-inc.com netease.com @@ -7442,11 +8199,8 @@ youhua.com  yunpan.cn 2016.sina.cn ads atm.sina.com adsbeacon.sina.com.cn ads biz.weibo.com -adsc.biz.weibo.com -ads!c.wcpt.biz.weibo.com ads%click.uve.mobile.sina.cn ads click.uve.weibo.com -adscm.dmp.sina.cn ads0#contentrecommend-out.mobile.sina.cn ads$count.video.sina.com.cn ads counter.sina.com.cn @@ -7461,17 +8215,11 @@ youhua.com  yunpan.cn 2016.sina.cn adsgame.weibo.com ads"gw5.push.mcp.weibo.cn ads"gw6.push.mcp.weibo.cn -ads"img.adbox.sina.com.cn -ads#img.amp.ad.sina.com.cn ads"int.dpool.sina.com.cn ads%interest.mix.sina.com.cn -ads)log.interest.mix.sina.com.cn ads log.mix.sina.com.cn ads log.sina.cn -ads!m.beacon.sina.com.cn -adsm.game.weibo.cn ads!mg.games.sina.com.cn -ads!motu.p4p.sina.com.cn adsnewspush.sinajs.cn ads oascentral.sina.com ads#oascentral.sina.com.hk @@ -7481,10 +8229,8 @@ youhua.com  yunpan.cn 2016.sina.cn adspfp.sina.com.cn adspfpip.sina.com ads!promote.biz.weibo.cn -ads r.dmp.sina.cn adsrm.sina.com.cn ads rs.sinajs.cn -adss.alitui.weibo.com ads"s.img.mix.sina.com.cn ads sapi.sina.cn ads sax.sina.cn @@ -7508,22 +8254,24 @@ youhua.com  yunpan.cn 2016.sina.cn ads$wbpctips.mobile.sina.cn adswidget.weibo.com ads woocall.sina.com.cn -adszc.biz.weibo.com adszymo.mps.weibo.com ads  97973.com picself.cn sina.cn sina.com sina.com.cn sina.net sinaapp.com sinaedge.com sinaimg.cn sinaimg.com  sinajs.cn -sinajs.comt.cn videoself.cn  wbimg.com wbimg.cn wcdn.cn weibo.cn  weibo.com weibo.com.cn weibocdn.com xhaiwai.com -go2map.com sogo.com  sogou.com sogoucdn.com comsenz.com +sinajs.comt.cn videoself.cn  wbimg.com wbimg.cn wcdn.cn weibo.cn  weibo.com weibo.com.cn weibocdn.com xhaiwai.combinglianhuajianzhan.com ggoplay.com +ggowan.com +go2map.com  pinyin.cn +qd.ink sg.cn +sgtmos.com sgyeyou.com sgyouxi.com sogo.com sogou.cn  sogou.com sogou.com.cn  sogou.net sogoucdn.comsogoucdndl.comsogouimecdn.com sogou-inc.com sogou-op.org soso.com soso.com.cn sososnap.com teemo.cnwannianqingjianzhan.comxiangrikuijianzhan.comxiangrikuisite.com  xinyan.cn yeyousg.comyidianliulan.cnyidianliulan.comyuweikuijianzhan.com comsenz.com discuz.net discuz.org dns.pub  dnsapi.cn  dnspod.cn dnspod.com dnspod.com.cn dnspod.mobi dnspod.net -dnspod.org  dnsv2.com  dnsv3.com  dnsv4.com  dnsv5.com doh.pub acctdns.com acctdns.net aitransfy.comapaas-zone-test.comapigwtencent.com bkapigw.com +dnspod.org  dnsv2.com  dnsv3.com  dnsv4.com  dnsv5.com doh.pub dot.pub acctdns.com acctdns.net aitransfy.comapaas-zone-test.comapigwtencent.com bkapigw.com bkapps.com bkclouds.cc bktencent.com build9s.iobyodonline.com  cdn-go.cn cdndoctor.com cdngot.com -cdntip.com cdntips.com cdntips.net cdnv1.cn cdnv2.cn cdnv3.cn cloud-industry-delivery.site cloudbase.cn cloudbase.netcloudidaas.com cloudsite.vip cncqcloud.comcomputeinit.com coolsite.vip  dnsv1.com dnsv1.com.cn dothework.cn ectencent.cnectencent.com.cn +cdntip.com cdntips.com cdntips.net cdnv1.cn cdnv2.cn cdnv3.cn cloud-industry-delivery.site cloudbase.cn cloudbase.netcloudidaas.com cloudsite.vip cncqcloud.comcomputeinit.com coolsite.vip  dnsv1.com dnsv1.com.cn dothework.cn ectencent.cnectencent.com.cnedgeonedy1.com essurl.com exmailgz.com fsphere.cngaapqcloud.com gitdrone.cn  gmedev.cn govqcloud.com gsadds.com gtm.pub hr-welink.comidcgcloudcs.com  iemiq.com igtm.pubintltencentcos.com @@ -7610,7 +8358,7 @@ yufuid.net yunjitele.com.+\.dnse[0-5]\.(cn|com)$'#.+\.tdnsv([1-9] ads push.qq.com ads pgdt.gtimg.cn ads ugdtimg.com -ads openmidas.com  qq.designqqgamedesign.comtencent.design tjstats.comwegamedeveloper.comweui.io +ads openmidas.com  qq.designqqgamedesign.comtencent.design tjstats.comwegamedeveloper.comweixinbridge.comweui.io cnbattlecare.net cn gameitop.com cn gameloop.com @@ -7695,7 +8443,8 @@ wegame.com scescdn.cn cnscid.cn cn scsentry.cn -cn supercell.com!supercellcommunity.cn +cn supercell.com +!cn!supercellcommunity.cn cnsupercellsupport.cn cncodm.com cnbcfmglobal.com @@ -7714,9 +8463,12 @@ qqmail.com  qzone.com rtx.com.cnservicewechat.com tencent.cn tencent.co.id !cn tencent.comtencent.com.cntencent.com.hk tencent.nettencent.net.cntencentmusic.com -tenpay.com -wechat.com -weiyun.com alloyteam.com imweb.io ivweb.io  fyeds.com +tenpay.com  tfogc.com +wechat.com wechatpay.cn +weiyun.comwetv.vip +!cn wetvinfo.com +!cn wetv.qq.com +!cn alloyteam.com imweb.io ivweb.io  fyeds.com fyeds0.com fyeds1.com fyeds3.com @@ -7725,14 +8477,33 @@ fyeds5.com fyeds6.com fyeds7.com fyeds8.com -fyeds9.com fymall0.com fymall1.com fymall4.com fymall7.com fymall9.com fymallqa0.com fymallqa1.com fymallqa2.com fymallqa3.com fymallqa4.com fymallqa7.com fymallqa9.com -mi.com -mi-img.com  mifile.cn miui.com +fyeds9.com fymall0.com fymall1.com fymall4.com fymall7.com fymall9.com fymallqa0.com fymallqa1.com fymallqa2.com fymallqa3.com fymallqa4.com fymallqa7.com fymallqa9.com thtf.com.cntongfangpc.com mechrevo.com vivo.com vivo.com.cnvivoglobal.com +!cn a.market.xiaomi.com +adsad.intl.xiaomi.com +ads ad.mi.com +ads ad.xiaomi.com +adsad1.xiaomi.com +adsadmob.xiaomi.com +ads"adv.sec.intl.miui.com +adsadv.sec.miui.com +ads"misc.in.duokanbox.com +adsmistat.xiaomi.com +adssentry.d.mi.com +ads sentry.d.xiaomi.net +ads tjqonline.cn +ads"tracker.ai.xiaomi.com +adstracking.miui.com +ads +mi-img.com +mi.com  mifile.cn miui.com miwifi.com  xiaomi.cn xiaomi.com -xiaomi.netxiaomiyoupin.com +xiaomi.net xiaomiev.comxiaomimobile.comxiaomiyoupin.com +saxyit.com sandai.netthunderurl.com -xunlei.com  00cdn.com  88cdn.com  p2cdn.comthundercdn.com xycloud.com  xycdn.com  ezpro.pro 10099.com.cn +xunlei.com  00cdn.com  88cdn.com  p2cdn.comthundercdn.com xycloud.com  xycdn.com nubia.cn  nubia.com redmagic.com +zte.com.cn ztemall.com  ztems.combbs.ztedevices.comwww.ztedevices.comztedevices.com +!cn  ezpro.pro 10099.com.cn chn.cn  ahitv.com  cqccn.com gcable.com.cn sc96655.com  isxtv.com sdgdwljt.com 10086.cn 139.comchinamobile.comchinamobileltd.com migucloud.com migu.cn cmvideo.cn miguvideo.com andfx.cn  andfx.net cmicrwx.cncmpassport.comfetion-portal.com fetionpic.com mmarket.com mmarket6.com @@ -7740,14 +8511,22 @@ ctexcel.ca ctexcel.comctexcel.com.hk ctexcel.fr ctexcel.us 189.cnchinatelecom-h.comchinatelecom.com.cnchinatelecomglobal.com -chntel.com  10010.com 10010.com.cn 114menhu.comchinaunicom.comchinaunicom.com.cnchinaunicom.com.hkchinaunicomglobal.commychinaunicom.com  wo.com.cn jikipedia.com qiuwen.wikishidianbaike.com  51nod.com +chntel.com  10010.com 10010.com.cn 114menhu.comchinaunicom.comchinaunicom.com.cnchinaunicom.com.hkchinaunicomglobal.commychinaunicom.com wo.cn  wo.com.cn wo116114.com jikipedia.com qiuwen.wikishidianbaike.com  51nod.com acwing.com hihocoder.com jisuanke.com luogu.com.cn oi-wiki.com openjudge.cn -uoj.ac  vijos.org -j-test.comnattest-china.com itdog.cnwebmasterhome.cnguoxuedashi.com guoxuemi.com mojidict.com 8btc.com bystack.com chainnode.com matpool.com matpool.net jbcz.tvjibencaozuo.commedia.paperclipclub.netsinopec-usa.com sinopec.comsinopecgroup.comsinopecnews.com.cnsinopecsales.comaiqicha.baidu.comhongdunwang.com.cn qcc.com qichacha.com qichamao.com  qixin.com qyyjt.cn jindidata.comtianyancha.com x315.com upe.netsuzuki-china.com chugou360.com ycrx360.com jikeiot.cloud +uoj.ac  vijos.org leetcode.cnleetcode-cn.com lingkou.xyz lingkou.com +lingkou.cn +j-test.comnattest-china.com itdog.cnwebmasterhome.cnguoxuedashi.com guoxuemi.com mojidict.com 8btc.com bystack.com chainnode.com matpool.com matpool.net jbcz.tvjibencaozuo.commedia.paperclipclub.netsinopec-usa.com sinopec.comsinopecgroup.comsinopecnews.com.cnsinopecsales.comaiqicha.baidu.comhongdunwang.com.cn qcc.com qichacha.com qichamao.com  qixin.com qyyjt.cn jindidata.comtianyancha.com x315.com winos.me upe.netsuzuki-china.com chugou360.com ycrx360.com jikeiot.cloud zyh365.com cyol.com webterren.combjyouth.gov.cn bjyouth.net sqqnh.cn  sqqnh.orggongqingyun.cn jzfz.net  sumkoo.cn sumkoo.com sumkoo.net  veeqi.netwenmingban.com zhiyuanhe.cnzhiyuanyun.com.cn zyhe.com.cn -zzdtec.com0123456789.com 0379home.com +zzdtec.com +aitcfw.com +aizgtc.com hangzhouyq.cnhangzhouyq.com +zgxytc.com  zgzsa.com zhonshian.cn zhonshian.comzhonshian.com.cn  zjzsa.com  diiing.cndingdachuxing.comdingdatech.com jintdev.comxiangbababus.comguanggaotongapp.cnjutongbao.online jutongbao.top  hupun.com hupun.com.cn kata.com.cn +newniu.com wanliniu.com 1tyy.cn bbdc.cn beingfine.cnbeingfine.com.cn bubei.com.cn +coolab.top +is-cool.cnis-cool.com.cn langeasy.cnlangeasy.com.cnlearnywhere.cnlearnywhere.com.cn +qlisten.cn qtyy.cn0123456789.com 0379home.com 055110.com  05sun.com 0759job.com  100bt.com 100offer.com  11467.com 114chn.com 114piaowu.com 114shouji.com 119you.com 123juzi.com 123juzi.net 123u.com 1637.com  16888.com 16rd.com  17173.com 178linux.com  17989.com  17cdn.com 17house.com  18183.com 188.com 1905.com  19yxw.com 1nongjing.com  1ting.com 1zhe.com 21cn.com 2265.com 2288.org 2345.com 258.com 263.net 289.com 2cto.com 3000.com @@ -7846,7 +8625,7 @@ kiyuu.club kkzj.com kongfz.com kouclo.com koudai.com koudai8.com kq7.com  ksord.com  kuaaa.com kuaidi100.com kuaihou.com kuaizhan.com  kuqin.com -kuyiso.com lady8844.com lanhuapp.com laomaotao.net laomaotao.org  lascn.net  lawxp.com leangoo.com leanote.com ledu.comleetcode-cn.com leikeji.com leiphone.com leiting.com leju.com leturich.org lianmishu.com +kuyiso.com lady8844.com lanhuapp.com laomaotao.net laomaotao.org  lascn.net  lawxp.com leangoo.com leanote.com ledu.com leikeji.com leiphone.com leiting.com leju.com leturich.org lianmishu.com liantu.com lianzhuli.comliaoxuefeng.com liba.com libaclub.comlieyunwang.com lightonus.com likuso.com lingkou.com linkvans.com  linsn.com linuxidc.com liqucn.com liulanqi.net liuxiaoer.com live800.com liweijia.com lixinger.com lkkbrand.com longhoo.net @@ -7878,7 +8657,6 @@ oneyac.comonlinedown.netonlinesjtu.com onlylady.com opdown.com oray.com  ottcn.com oupeng.com p2peye.com p5w.netpaipaibang.com paopaoche.net pc6.com -pcbeta.com pchome.net  pcpop.com  peccn.com pgzs.compharmacodia.com piaoliang.compingplusplus.com pingwest.com pingxx.com pintu360.com  pipaw.com  pipaw.net pptbest.com pubyun.com  qc188.com qcds.com qd8.com qd-metro.com qh24.com qiangbus.com qianjia.com qianlima.com qianzhan.comqiaobutang.com qichacha.com @@ -7892,7 +8670,7 @@ sanwen.net  scdng.com scoregg.com sczsxx.com sdo.com sec-wiki.com sencdn.com seniverse.comsenlinjimore.com sgamer.com shanbay.com shang360.com -shangc.netshanghairc.comshangshi360.com shangzhibo.tvshanshuihotel.com sharejs.com shebiaotm.comshelter-china.comshelterdome.netshengdaosoft.comshenmayouxi.com  sheui.com shijiexia.com shixiseng.com shmetro.comshoujihuifu.comshouyoubus.com shrbank.com  shssp.orgshuidichou.comshuidihuzhu.com shumensy.comshuoshuokong.com +shangc.netshanghairc.comshangshi360.com shangzhibo.tvshanshuihotel.com sharejs.com shebiaotm.comshelter-china.comshelterdome.netshengdaosoft.comshenmayouxi.com  sheui.com shijiexia.com shixiseng.com shmetro.comshoujihuifu.comshouyoubus.com  shssp.orgshuidichou.comshuidihuzhu.com shumensy.comshuoshuokong.com shutcm.com simei8.com simuwang.com sinesafe.com  sjwyx.com  skycn.com sllssrq.com snimay.com  sobot.com sofreight.com softwhy.com @@ -7939,11 +8717,20 @@ zpb365.com zrblog.net zsxq.com  zuche.com zuchecdn.com zuhaowan.com zuidaima.com zuowen8.comzuowenwang.net fm3838.comlarsonlimited.com runsheng.com vzuu.com zoom3g.com -zoomyou.cn +zoomyou.cn ecombdapi.com +fspcdn.com +fun.tv funshion.com funshion.net ibidian.com jvcsmart.cnjvcsmart.com.cn  feidee.cn +feidee.com +feidee.net ssjlicai.com sui.com +narwal.comnarwaltech.com roborock.com +huaban.com  dancf.com kujiale.com wss.zonehisensehitachi.com moseeker.com anmo.com djdjapp.com dongjiao.ccdongjiaoapp.com N CNBC cnbc.com cnbcfm.com nbcuni.comnbcudigitaladops.com +> +CNBETA +cnbeta.com cnbeta.com.tw cnbetacdn.com  CNBLOGS blogjava.net cnblogs.com cnitblog.com cnweblog.com cppblog.com phpweblog.net teachblog.net  @@ -8019,6 +8806,8 @@ vipdlt.com  CUGBONLINE cugbonline.cn +' +CUINC cuinc.oen.tw cuinc.tw 2 CURSEFORGEcurseforge.com forgecdn.net @@ -8085,6 +8874,8 @@ heptio.com aliveipc.com aliveitsm.comaliveprofiler.com aliv getws1.com getwsone.comwhatisairwatch.comwhatisworkspaceone.comworkspaceone.comvmware.tt.omtrdc.netdelldell-brand.com dell.com dellcdn.com  DEMONOID demonoid.is +6 +DERIBIT deribit.comderibit.cdn.prismic.io  DETTOLdettol-prize.com  dettol.at  dettol.be  dettol.ch  dettol.cl dettol.co.id dettol.co.in dettol.co.ke dettol.co.nz dettol.co.uk dettol.com dettol.com.au dettol.com.bd dettol.com.br dettol.com.cn @@ -8097,8 +8888,9 @@ DEVIANTARTdeviantart.comdeviantart.net da-files.com DGTLE  dgtle.com  DIDA365 dida365.com - -DIDI didi-food.comdidiaustralia.blogdidichuxing.comdidiglobal.comdidimobility.co.jpdidistatic.comxiaojukeji.com + +DIDI didi-food.com didi.cn didialift.comdidiaustralia.blogdidichuxing.comdidiglobal.comdidimobility.co.jpdidistatic.comdiditaxi.com.cn +udache.comxiaojukeji.com  DIGICERT dcocsp.cn cndigicert-cn.comdigicert-validation.com digicert.cn @@ -8108,6 +8900,9 @@ _ DIGITALOCEANdigitalocean.comdigitaloceanspaces.com do.conginxconfig.io P DIGITALPLAYGROUNDdigitalplayground.com digitalplaygroundnetwork.com +m + +DINGDATECH  diiing.cndingdachuxing.comdingdatech.com jintdev.comxiangbababus.com  DINGTALK ddurl.to dingding.xin dingtalk.cn dingtalk.com dingtalk.netdingtalkapps.com laiwang.com lwurl.to  @@ -8121,10 +8916,10 @@ e DISCUZ comsenz.com discuz.net discuz.org - + DISNEYabc-studios.com abc.com edgedatg.com bamgrid.comdmed.technology dtci.codtci.technology espn.co.uk espn.com espn.net espncdn.com -espnqa.com watchespn.comespn.api.edge.bamgrid.comespn.hb.omtrdc.netespndotcom.tt.omtrdc.net hotstar.comhotstar-cdn.nethotstar-labs.comhotstarext.comhsprepack.akamaized.net^hses[1-7]?.akamaized.net$ +espnqa.com watchespn.comespn.api.edge.bamgrid.comespn.hb.omtrdc.netespndotcom.tt.omtrdc.net hotstar.comhotstar-cdn.nethotstar-labs.comhotstarext.comhsprepack.akamaized.net ^hses[1-7]?\.akamaized\.net$ marvel.commarvel10thanniversary.commarveldimensionofheroes.commarvelparty.netmarvelpinball.commarvelsdoubleagent.commarvelspotlightplays.com marvelsuperheroseptember.commarvelsuperwar.comthemarvelexperiencetour.comnatgeomaps.comnationalgeographic.com"nationalgeographicpartners.com ngeo.com starott.com starplus.comstar.api.edge.bamgrid.com%!star.connections.edge.bamgrid.com!star.content.edge.bamgrid.com"star.playback.edge.bamgrid.com disney.asia  disney.be  disney.bg  disney.ca  disney.ch disney.co.il disney.co.jp disney.co.kr disney.co.th disney.co.uk disney.co.za disney.com disney.com.au disney.com.br disney.com.hk disney.com.tw  disney.cz  disney.de  disney.dk  disney.es  disney.fi  disney.fr  disney.gr  disney.hu  disney.id  disney.in  disney.io  disney.it  disney.my  disney.nl  disney.no  disney.ph  disney.pl  disney.pt  disney.ro  disney.ru  disney.se  disney.sg20thcenturystudios.com.au20thcenturystudios.com.br20thcenturystudios.jpadventuresbydisney.com babble.com babyzone.com bamgrid.com"beautyandthebeastmusical.co.uk @@ -8136,6 +8931,10 @@ B disqus.com disquscdn.comdisqusservice.com 8 DIVAR divar.cloud divar.ir divarcdn.com +e +DJI dji.com dji.net +djicdn.com +djiops.comdjiservice.org skypixel.com T DLERCLOUD dlercloud.com dlercloud.org dlercloud.me dleris.best  @@ -8175,11 +8974,11 @@ microad.jp dmmrex.com  DMZJ dmzj.com - + DNSPOD dns.pub  dnsapi.cn  dnspod.cn dnspod.com dnspod.com.cn dnspod.mobi dnspod.net -dnspod.org  dnsv2.com  dnsv3.com  dnsv4.com  dnsv5.com doh.pub +dnspod.org  dnsv2.com  dnsv3.com  dnsv4.com  dnsv5.com doh.pub dot.pub  DOC88  doc88.com & @@ -8190,6 +8989,8 @@ douding.cn docker.com  docker.io DOI doi.org doi.info +O +DONGJIAO anmo.com djdjapp.com dongjiao.ccdongjiaoapp.com 9 DOUBAN douban.com  douban.fm doubanio.com @@ -8201,6 +9002,8 @@ U DRIBBBLE drbl.in dribbble.com  DROPBOX db.ttdropbox-dns.com dropbox.com dropbox.techdropboxapi.comdropboxbusiness.comdropboxcaptcha.comdropboxforum.comdropboxforums.comdropboxinsiders.comdropboxmail.comdropboxpartners.comdropboxstatic.comdropboxusercontent.comgetdropbox.com&"paper-attachments.s3.amazonaws.com + +DRWEB drweb.by drweb.cn drweb.co.jp  drweb.com drweb.fr drweb.kz drweb.uz drweb-av.de drweb-av.es drweb-av.it drweb-av.pl H DSLREPORTSbroadbandreports.com dslr.netdslreports.com @@ -8214,9 +9017,17 @@ DUCKDUCKGOcispaletter.comcispaletter.orgcometotheduckside.com duckgo.com ducksear.ch duckside.com  dukgo.comenteentegeh.defixtracking.com goduckgo.com hacksear.chjustduckit.comprivacysimplified.comprivatebrowsingmyths.comspreadprivacy.com , DUITANG dtstatic.com duitang.com -5 -DUOLINGO duolingo.com duolingo.cn + +DUOLINGO!ads-api.duolingo.com +ads!metrics.duolingo.com +ads'analytics.vpc.duolingo.com +ads duolingo.com duolingo.cn cn +} + DUOLINGO-ADS!ads-api.duolingo.com +ads!metrics.duolingo.com +ads'analytics.vpc.duolingo.com +ads * DUOWAN duowan.com dwstatic.com @@ -8337,9 +9148,10 @@ egghead.io ehwiki.org exhentai.org hath.networkhentaiathome.nethentaiverse.org  ELECTRONelectronjs.org -3 -ELEME -ele.me elemecdn.com eleme.cn + +ELEME doservice.com +ele.me +ele.to eleme.cn eleme.io elemecdn.cn elemecdn.com  elenet.me  ELSEVIER cell.comclinicalkey.com els-cdn.comelsevier-ae.com elsevier.com elsevier.ioengineeringvillage.com  evise.comfundinginstitutional.com knovel.com mendeley.com @@ -8368,12 +9180,14 @@ enfamil.pt enfasmart.comenspireformula.comnutramigen.net n  ENTRUST entrust.netentrustdatacard.comaffirmtrust.com atos.net myatos.netcertificat2.comtrendmicro.com +" + EPICBROWSERepicbrowser.com  EPICGAMESbattlebreakers.com eac-cdn.com easy.aceasyanticheat.net epicgames.com epicgames.dev fortnite.com paragon.complayparagon.comroborecall.comshadowcomplex.com spyjinx.comunrealengine.comunrealtournament.com6*^cdn\d-epicgames-\d+\.file\.myqcloud\.com$ cn*&^epicgames-download\d\.akamaized\.net$;/^epicgames-download\d-\d+\.file\.myqcloud\.com$ cn - -EPOCHMEDIAGROUP dajiyuan.com dajiyuan.eu edninfo.com epoch.cloud epoch.org.il epochbuy.com epochcar.com epochhk.com epochmall.comepochmediagroup.com epochshop.comepochstories.com epochtime.comepochtimes-bg.comepochtimes-romania.com epochtimes.bgepochtimes.co.ilepochtimes.co.krepochtimes.co.ukepochtimes.comepochtimes.com.auepochtimes.com.brepochtimes.com.sgepochtimes.com.twepochtimes.com.ua epochtimes.cz epochtimes.de epochtimes.eu epochtimes.fr epochtimes.it epochtimes.jp epochtimes.nl epochtimes.pl epochtimes.ru epochtimes.seepochtimeshk.orgepochtimestr.com epochweek.comepochweekly.com erabaru.net + +EPOCHMEDIAGROUP dajiyuan.com dajiyuan.eu edninfo.com epoch.cloud epoch.org.il epochbase.com epochbuy.com epochcar.com epochhk.com epochmall.comepochmediagroup.com epochshop.comepochstories.com epochtime.comepochtimes-bg.comepochtimes-romania.com epochtimes.bgepochtimes.co.ilepochtimes.co.krepochtimes.co.ukepochtimes.comepochtimes.com.auepochtimes.com.brepochtimes.com.sgepochtimes.com.twepochtimes.com.ua epochtimes.cz epochtimes.de epochtimes.eu epochtimes.fr epochtimes.it epochtimes.jp epochtimes.nl epochtimes.pl epochtimes.ru epochtimes.seepochtimeshk.orgepochtimestr.com epochweek.comepochweekly.com erabaru.net etviet.comlagranepoca.com minghui.org ntd.com ntd.tv  ntdca.com ntdimg.com ntdtv.ca ntdtv.co.kr  ntdtv.com ntdtv.com.tw ntdtv.jp ntdtv.kr  ntdtv.org ntdtv.ru ntdtv-dc.com ntdtvla.com  ntdvn.compersianepochtimes.com renminbao.comtheepochtimes.comtheepochtimessubscribe.comvelkaepocha.cz @@ -8400,6 +9214,9 @@ eb-ind.com ebasset.com ebchina.comebchinaintl.com ebf.com.cn  ebfcn.com ebfortune.com ebtrust.com ebscn-am.com  ebscn.comeverbright.com  secec.comsunlife-everbright.com  EVERNOTE evernote.com +L +F-DROID f-dro1d.org f-droid.com f-droid.org +fdroid.org @ FACEBOOKaboutfacebook.com accessfacebookfromschool.com acebooik.com acebook.comadvancediddetection.comaskfacebook.netaskfacebook.org atdmt2.com atlasdmt.comatlasonepoint.combuyingfacebooklikes.comcareersatfb.comcelebgramme.comchina-facebook.com click-url.comcomo-hackearfacebook.comcrowdtangle.com dacebook.comdlfacebook.comdotfacebook.comdotfacebook.netexpresswifi.com faacebok.com faacebook.com faasbook.com facbebook.com facbeok.com @@ -8412,17 +9229,21 @@ fbrpms.com  fbsbx.com  fbsbx.netfbsupport-covid.netfbthirdpa freebs.comfreefacebook.comfreefacebook.netfreefacebookads.netfreefblikes.comfreindfeed.comfriendbook.info friendfed.comfriendfeed-api.comfriendfeed-media.comfriendfeed.comfriendfeedmedia.com fsacebok.com fscebook.comfundraisingwithfacebook.comfunnyfacebook.orgfutureofbusinesssurvey.org gacebook.com gameroom.comgfacecbook.com groups.comhackerfacebook.comhackfacebook.comhackfacebookid.comhifacebook.info!howtohackfacebook-account.comhsfacebook.comhttpfacebook.comhttpsfacebook.comhttpwwwfacebook.com i.org internet.org klik.me liverail.com liverail.tvlogin-account.netmarkzuckerberg.commidentsolutions.commobilefacebook.commoneywithfacebook.com myfbfans.com newsfeed.com nextstop.comonline-deals.netopencreate.orgreachtheworldonfacebook.com rocksdb.orgshopfacebook.comsportsfacebook.comsportstream.comsupportfacebook.comterragraph.comthefacebook.comthefacebook.net thefind.comtoplayerserver.comviewpointsfromfacebook.comwhyfacebook.com worldhack.comwww-facebook.comwwwfacebok.comwwwfacebook.comwwwmfacebook.comzuckerberg.comzuckerberg.netfacebookwork.com redkix.com workplace.comworkplaceusecases.comfbcdn-a.akamaihd.net +T + FACEBOOK-ADS#analytics.facebook.com +adspixel.facebook.com +ads  FACEBOOK-DEVaccountkit.comatscaleconference.com botorch.org buck.build buckbuild.comcomponentkit.org draftjs.org f8.comfacebookappcenter.infofacebookappcenter.netfacebookappcenter.orgfacebookconnect.comfacebookdevelopergarage.comfaciometrics.com fasttext.cc fbf8.com fbinfer.com fblitho.com fbredex.com fbrell.com flow.dev flow.org flowtype.org frescolib.org hacklang.org hhvm.commakeitopen.com mcrouter.net mcrouter.orgmessengerdevelopers.com ogp.meopengraphprotocol.comopengraphprotocol.org  parse.com pyrobot.org  react.com reactjs.com reactjs.org recoiljs.org rocksdb.com rocksdb.net rocksdb.orgyogalayout.comdevelopers.facebook.com - - FALUNGONG dajiyuan.com dajiyuan.eu edninfo.com epoch.cloud epoch.org.il epochbuy.com epochcar.com epochhk.com epochmall.comepochmediagroup.com epochshop.comepochstories.com epochtime.comepochtimes-bg.comepochtimes-romania.com epochtimes.bgepochtimes.co.ilepochtimes.co.krepochtimes.co.ukepochtimes.comepochtimes.com.auepochtimes.com.brepochtimes.com.sgepochtimes.com.twepochtimes.com.ua epochtimes.cz epochtimes.de epochtimes.eu epochtimes.fr epochtimes.it epochtimes.jp epochtimes.nl epochtimes.pl epochtimes.ru epochtimes.seepochtimeshk.orgepochtimestr.com epochweek.comepochweekly.com erabaru.net + + FALUNGONG dajiyuan.com dajiyuan.eu edninfo.com epoch.cloud epoch.org.il epochbase.com epochbuy.com epochcar.com epochhk.com epochmall.comepochmediagroup.com epochshop.comepochstories.com epochtime.comepochtimes-bg.comepochtimes-romania.com epochtimes.bgepochtimes.co.ilepochtimes.co.krepochtimes.co.ukepochtimes.comepochtimes.com.auepochtimes.com.brepochtimes.com.sgepochtimes.com.twepochtimes.com.ua epochtimes.cz epochtimes.de epochtimes.eu epochtimes.fr epochtimes.it epochtimes.jp epochtimes.nl epochtimes.pl epochtimes.ru epochtimes.seepochtimeshk.orgepochtimestr.com epochweek.comepochweekly.com erabaru.net etviet.comlagranepoca.com minghui.org ntd.com ntd.tv  ntdca.com -ntdimg.com ntdtv.ca ntdtv.co.kr  ntdtv.com ntdtv.com.tw ntdtv.jp ntdtv.kr  ntdtv.org ntdtv.ru ntdtv-dc.com ntdtvla.com  ntdvn.compersianepochtimes.com renminbao.comtheepochtimes.comtheepochtimessubscribe.comvelkaepocha.czes-visiontimes.comkannewyork.comkanzhongguo.comkanzhongguo.eusecretchina.com trithucvn.net trithucvn.org vct.newsvisiontimes.comvisiontimes.devisiontimes.frvisiontimes.itvisiontimes.netvisiontimesjp.com  vtvan.comwatchinese.com bayvoice.net ozvoice.org sohcradio.com sohfrance.orgsoundofhope.eusoundofhope.krsoundofhope.orgwanokokorosoh.comaboluowang.combannedbook.netbannedbook.orgbroadpressinc.comchinaaffairs.org dafahao.comdonatecarsoh.orgdongtaiwang.com falundafa.orgfalundafa.org.twfalundafamuseum.orgfalungong.club faluninfo.netfawanghuihui.orgfayuanbooks.com  fgmtv.org ganjing.comganjingworld.com guangming.org mhradio.orgninecommentaries.com starp2p.comtiandixing.orgtiantibooks.org tuidang.orgupholdjustice.orgwujieliulan.com xinsheng.net yuanming.netyuming.qxbbs.org zhengjian.orgzhengwunet.org zhenxiang.bizzhuichaguoji.org shenyun.com shenyun.orgshenyuncreations.comshenyunperformingarts.org +ntdimg.com ntdtv.ca ntdtv.co.kr  ntdtv.com ntdtv.com.tw ntdtv.jp ntdtv.kr  ntdtv.org ntdtv.ru ntdtv-dc.com ntdtvla.com  ntdvn.compersianepochtimes.com renminbao.comtheepochtimes.comtheepochtimessubscribe.comvelkaepocha.czes-visiontimes.comkannewyork.comkanzhongguo.comkanzhongguo.eusecretchina.com trithucvn.net trithucvn.org vct.newsvisiontimes.comvisiontimes.devisiontimes.frvisiontimes.itvisiontimes.netvisiontimesjp.com  vtvan.comwatchinese.com bayvoice.net ozvoice.org sohcradio.com sohfrance.orgsoundofhope.eusoundofhope.krsoundofhope.orgwanokokorosoh.comaboluowang.combannedbook.netbannedbook.orgbroadpressinc.comchinaaffairs.org dafahao.comdonatecarsoh.orgdongtaiwang.com falundafa.orgfalundafa.org.twfalundafamuseum.orgfalungong.club faluninfo.netfawanghuihui.orgfayuanbooks.com  fgmtv.org ganjing.com ganjing.worldganjingworld.com guangming.org mhradio.orgninecommentaries.com starp2p.comtiandixing.orgtiantibooks.org tuidang.orgupholdjustice.orgwujieliulan.com xinsheng.net yuanming.netyuming.qxbbs.org zhengjian.orgzhengwunet.org zhenxiang.bizzhuichaguoji.org shenyun.com shenyun.orgshenyuncreations.comshenyunperformingarts.org  FAMILYMARTfamifun.com.tw family.co.jp family.com.twfamilymart.com.cn @@ -8430,8 +9251,10 @@ FAMILYMARTfamifun.com.tw family.co.jp family.com.twfamilym  FANDOM cursecdn.com fandom.com  wikia.com  wikia.org dndbeyond.com futhead.com gamepedia.com muthead.com cortexrpg.com fanatical.comwikia.nocookie.netfandom.zendesk.com -F -FANSTA  fansta.me-)misa-prod.s3.ap-northeast-1.amazonaws.com +( +FANS66  fans66.tw fansking.tw + +FANSTA  fansta.me-)misa-prod.s3.ap-northeast-1.amazonaws.com2023aga.oen.tw aga-expo.comcosfans-tw.com  FARFETCHfarfetch-apps.comfarfetch-contents.com farfetch.cn cn farfetch.comfarfetch.com.cn @@ -8448,11 +9271,25 @@ fastly.netfastlylabs.com fastlylb.netfastly-terrarium.com zencdn.net  FASTSTONE faststone.org -_ -FEDORA getfedora.orgfedoraforum.orgfedoraproject.orgfedoramagazine.org +u +FEDORA getfedora.orgfedoraforum.orgfedorapeople.orgfedoraproject.orgfedoramagazine.org  FEEDLY feedly.com + +FEISHU anycross.com  blmpb.combytedancehermestest.comfalconsending.com +fei-shu.cn!feishu-3rd-party-services.comfeishu-boe.netfeishu-customer.cn feishu-pre.cnfeishu-pre.net feishu-psc.cnfeishu-staging.cn  feishu.cn +feishu.netfeishuapp-cdn.net feishuapp.cn feishuapp.com feishucdn.com feishudoc.cn feishudoc.comfeishuhuiyi.cnfeishuhuiyi.comfeishuimg-boe.comfeishuimg-pre.com feishuimg.comfeishukacdn.comfeishumeetings.cnfeishumeetings.comfeishuoffice.cnfeishuoffice.com feishuopenplatformrecord.com feishupkg.comfeishustatus.cn feishuvc.cn feishuvc.com getfeishu.cn getfeishu.com +getsays.cn getsays.com  lackvc.cnsecurityfeishu.cn securityfs.cnstatusfeishu.cn + +FENGXING +fspcdn.com +fun.tv funshion.com funshion.net ibidian.com jvcsmart.cnjvcsmart.com.cn +A +FFLOGS +fflogs.com rpglogs.com +rpglogs.cn +cn  FIGMA  figma.com + @@ -8462,6 +9299,9 @@ filimo.com filimo.school FINISH$dishwashingexpert.com.cn cn  finish.at  finish.bg finish.co.kr finish.co.nz finish.co.uk finish.co.za finish.com.cn cn finish.com.hr finish.com.tr  finish.de  finish.es  finish.fr  finish.gr  finish.hu  finish.lv  finish.pl  finish.pt  finish.ro  finish.si  finish.skfinisharabia.comfinishbrasil.com.brfinishdishwashing.cafinishdishwashing.com finishinfo.be finishinfo.clfinishinfo.comfinishinfo.com.arfinishinfo.com.au finishinfo.cz finishinfo.fi finishinfo.it finishinfo.jp finishinfo.nl finishinfo.no finishinfo.ru finishinfo.sefinishkilpailu.fi finishwin.beyarininsuyu.com + +FIREBASE firebase.com firebase.iofirebaseapp.comfirebaseio.com-!firebase-settings.crashlytics.com +cnfirebase.google.comfirebase.googleapis.com#firebaseappcheck.googleapis.com,(firebasedynamiclinks-ipv4.googleapis.com,(firebasedynamiclinks-ipv6.googleapis.com'#firebasedynamiclinks.googleapis.com)%firebaseinappmessaging.googleapis.com($firebaseinstallations.googleapis.com%!firebaselogging-pa.googleapis.com"firebaselogging.googleapis.com+'firebaseperusertopics-pa.googleapis.com'#firebaseremoteconfig.googleapis.com 6 FIREFOX firefox.comfirefoxusercontent.com + @@ -8478,8 +9318,8 @@ allflow.cn  flowus.cn FLURRY-ADSdata.flurry.com ads -. -FLUTTER flutter.devflutterapp.com +; +FLUTTER flutter.devflutterapp.com pub.dev 7 FONTAWESOMEfontawesome.comfortawesome.com % @@ -8519,6 +9359,18 @@ my13la.com my20dc.commy20houston.com my29tv.com my45.com  my9nj.commyfoxatlanta.commyfoxaustin.commyfoxboston.commyfoxcharlotte.commyfoxchicago.com myfoxdc.commyfoxdetroit.com myfoxdfw.commyfoxhouston.commyfoxhurricane.com myfoxla.commyfoxlosangeles.commyfoxlubbock.commyfoxmaine.com myfoxny.commyfoxorlando.commyfoxphilly.commyfoxphoenix.commyfoxtampa.commyfoxtampabay.commyfoxtwincities.com myfoxzone.com myq2.comnewsnowfox.comorlandohurricane.comparadisehotelquizfox.com q13.com q13fox.comrealamericanstories.comrealamericanstories.inforealamericanstories.netrealamericanstories.orgrealamericanstories.tvrealmilwaukeenow.com rprimelab.comshopspeedtv.comsoccermatchpass.comspeeddreamride.comspeedfantasybid.comspeedracegear.com speedxtra.comteenchoice.com testonfox.comtheclasshroom.comthefoxnation.comthegeorgiascene.comwhatthefox.comwhosthehost.com wofl.tvwoflthenewsstation.com wogx.com foxnewsplayer-a.akamaihd.net + +FQNOVELactivity-zhendingtech.comchangdunovel.comfanqienovel.comfanqieopen.comfanqieopenpic.comfanqieopenstatic.comfanqieopenvod.com fanqiesdk.comfanqiesdkpic.comfanqiesdkstatic.comfanqiesdkvod.com fqnovel.com fqnovelim.comfqnovel-op.com fqnovelop.comfqnovelpic.comfqnovelstatic.comfqnovelvod.comihaohaoxuexi.com +muyewx.com novelfm.comnovelfmpic.comnovelfmstatic.comnovelfmvod.com qznovel.comqznovelpic.comqznovelstatic.comqznovelvod.comp3-novel.byteimg.comp6-novel.byteimg.com(ads3-normal-hl.zijieapi.com +ads(ads5-normal-hl.zijieapi.com +ads'log3-applog-hl.fqnovel.com +ads'log5-applog-hl.fqnovel.com +ads#p3-ad-sign.byteimg.com +ads#p6-ad-sign.byteimg.com +ads#p9-ad-sign.byteimg.com +ads)rtlog3-applog-hl.fqnovel.com +ads)rtlog5-applog-hl.fqnovel.com +ads $ FREECODECAMPfreecodecamp.org  @@ -8544,6 +9396,8 @@ y  GARENA"avatargarenanow-a.akamaihd.netcdngarenanow-a.akamaihd.netdlgarenanow-a.akamaihd.net!dlmobilegarena-a.akamaihd.net garena.co.id garena.co.th garena.com garena.live  garena.my  garena.ph  garena.sg  garena.tv  garena.tw  garena.vn garenanow.com seagroup.com +^ +GATEIO gate.io gatedata.org gateimg.com gateio.livegateio.services  GCORES gcores.com @@ -8553,153 +9407,17 @@ gcores.com GEETEST geetest.com#geetest.datasink.sensorsdata.cn ` GEMFURY  fury.blog fury.co fury.dev  fury.help fury.io gemfury.com - -GEOLOCATION-!CNgovmileduacadaeafagaialamaoaqarasatauawaxazbabbbdbebfbgbhbibjblbmbnbobrbsbtbvbwbybzcacdcfcgchcickclcmcrcucvcwcxcyczdedjdkdmdodzeceeegehereseteufifjfkfmfofrgagbgdgegfggghgiglgmgngpgrgsgtgugwgyhkhmhnhrhthuidieiliminioiqirisitjejmjojpkekgkhkikmknkpkrkwkykzlalblclilklrlsltlulvlymamcmdmfmgmhmkmlmmmnmompmqmrmsmtmumvmwmxmymznancnenfngninlnonpnrnunzompapepfpgphpkplpmpnprpspsptpyqarerorsrurwsasbscsdsesgshsisjskslsmsnsososrssstsusvsxsysztctdtftgthtjtktltmtntotrtttvtwtzuaugukusuyuzvavcvevgvivnvuwfwsyeytzazmzwaflmlbnbanflnra averybbbbcgcebcrsdnbdnpdunsdvagerni globalxice locus mckinsey olayangroup -olayan praxisapseek -vistaprint vistawtc xerox athletabananarepublic  bloomberg boots calvinklein cartier chloegap gucci -hermesiwcjlc  lancaster lipsyloft mango  montblanc mrporter -netaporter -nextdirectnextnike oldnavy omega panerai  patagonia -piaget  piperlimepolo redstone -swatch -africa capetown -durban -joburg abudhabiarabasiadoha dubaikrd kyoto -nagoya okinawa osaka -ryukyu -taipei tatar tokyo yokohama -alsace  amsterdambar  barcelona -bayernbcn -berlin brussels budapestbzhcat conlogne corsica cymrueusfrlgalgent hamburg helsinki irishist istanbul koeln -london -madrid -moscownrw parisruhr saarlandscot  stockholm swiss tirol -vlaanderen waleswien zuerich -boston miaminyc -quebec vegaskiwi  melbourne -sydneylatrioaarp -abbott -abbvie aetna alcon -anthembms -boehringer caremore -cialis dabur  freseniusjnj merck mutuelle -sanofiaeg -airbus -alstom -aramco -blanco bosch -bostik -chesapeakechk crown -doosan -dupontflirfls flsmidth  gecompany grainger hitachi  honeywellifm ipirangajio komatsukoneksb  kuokgroup leclerclidl linde lottemanmtr reliance rexrothril rockwoolrwesandvikcoromant sandvik sapphiresca -schaeffler schmidt schwarzgroup schwarz senersewsncf statoil total -vanish -walter -warman weberweir woodsidezara zippo africamagic agakhanakdn -ansonsbabybar -bharti bingocasa -casinochat -dating domains -extraspacegaygcc genting gleanhot ikano -imamat  ladbrokeslgbt -livestrongmaif -mattel persiangulf pokersas shellshia style sucks tatar -tattoo -tennic transformersvana -virgin vodkawinewmewtf bible catholic halal islam ismaili ummahxn--mgbi4ecexp astriumcern -emerck  hisamitsu lilly lundbeck lupin merckmsdmsdmtpc -otsuka -pfizer stadateva toray weather adultpornsexsexyxxx auspost deutschepostdhl epost fedex -pitneyxn--lgbbat1ad8j -xn--y9a3aqxn--mgbcpq6gpa1axn--54b7fta0cc  xn--90ais xn--90ae -xn--wgbh1c  xn--e1a4c  xn--qxa6a xn--node xn--qxam xn--j6w193g xn--4dbrk0ce xn--h2brj9cxn--mgbbh1a71e xn--fpcrj9c3d xn--gecrj9c xn--s9brj9c xn--45brj9cxn--xkc2dl3a5ee0h xn--2scrj9cxn--rvc1e0am3e xn--45br5cyl xn--3hcrj9c xn--mgbbh1axn--h2breg3eve xn--h2brj9c8c xn--mgbgu82axn--mgba3a4f16axn--mgba3a4fra xn--mgbtx2bxn--mgbayh7gpa xn--80ao21a xn--3e0b707e -xn--q7ce6a xn--mix891f xn--mix082f  xn--d1alfxn--mgbx4cd0abxn--mgbah1a3hjkrd  xn--l1accxn--mgbc0a9azcg xn--mgb9awbfxn--mgbai9azgqp6jxn--mgbai9a5eva00b xn--ygbi2ammx -xn--wgbl6a xn--p1aixn--mgberp4a5d4arxn--mgberp4a5d4a87gxn--mgbqly7c0a67fbcxn--mgbqly7cvafr -xn--90a3ac xn--yfro4i67o xn--fzc2c9e2c xn--mgbpl2fh xn--ogbpf8fl xn--mgbtf8fl xn--kpry57d xn--kprw13d xn--nnx388a -xn--o3cw4h xn--pgbs0dh  xn--j1amhxn--mgbaam7a8h xn--mgb2ddesaaa -abarthadac  alfaromeoaudi bentleybmw bridgestone bugatti buick cadillaccase -caseih  chevrolet chevy chrysler -datsun dodge -dunlop ferrarifiat  firestonefordgmc goodyear honda hyundai infiniti iveco -jaguarjeepkia lamborghini -lancia  landrover lexus lincoln maseratimini -mitsubishi mopar -newholland -nissanramseatsrt -suzuki -tatamotors -toyotatvs uconnect -volkswagen volvoaigo android apple bestbuy brother canondell digikey fujitsu  fujixerox  goldpointibm nikon nokia olympus  panasonic philips pioneer samsung sharpsony toshiba  yodobashi  allfinanzallfinanzberaterallfinanzberatungallyamericanexpressamexampanz banamex barclaycard barclaysbbtbbvabnl -bnpparibasbofa bradesco -capitalone cashbackbonuscbacfa chasecimb citadelciti commbank deloitte discover everbank fidelity hdfcbankhdfchsbcitaujcbjll jpmorganchase jpmorgankfhkpmg lacaixa lasalle lixil lplfinanciallplnab nadex netbanknorthwesternmutualopen -pictetpncpohl  pramerica -prudentialprupwcsaxosbiscbscor shriram softbank  statebank temasek -transunion ubankubs vanguardvisa wolterskluwerafamilycompany  aquarellediyduck -finish glade  homedepot  homegoods mrmuscleoffraid rightathome  scjohnsonaig allstateamericanfamily amfam amicaaxa chartis esurance farmers  goodhands guardian guardianlife iselect metlifemma -mutual -nationwide -nissaynorthlandinsurance -onyourside progressive redumbrella  statefarm -swiftcover thehartfordtiaatravelersinsurance  travelers travelguardtrvvig beats blockbusterbway netflix playstation showtimetab williamhillxboxasda bloomingdales -george  homesense justforulego macys  marshallsobiqvc safeway samsclub shopyourway staples -targetthd tiffany -tjmaxxtjx -tkmaxxvons walmartabb  accentureaceraco -active -airtel -amazonandaolawsaxis azure chatr -chrome cisco comcast -connectorscscdclkdish -docomodtvdwg emerson epson ericsson etisalat  fairwindsfido -flickr frogans frontierftrgbizgeaggeegle gmailgmogmx godaddygoog -googlegoogreeguge hangouthkt hotmailhtc -hughesieee iinet infosysinfy intel -intuitjavajcpjmpjprs juniperkddi -kindle -konamikpn lanxess liaison -lockermeo  microsoftmihmiimint mitekmit -mobily -mozaicmtn multichoice naspersnec neustar nexusnico -nortonntt -officeollo -oracle -orangeovh patchpayupccwqtel quest  richardli ricoh -rogers -sakurasaposassessfrshaw skolkovo skydrive skype sling smart stcgroupstc symantectatatcitdk telecity -telefonica terra translations  ultrabook unicornuol verisignvivavivo windows xfinity -xperia yahoo yamaxun -yandex yellowpages youtube -zappos -chanel clinique garnier  kerastase -kiehls lamer lancome -loreal -matrix -maybelline -natura origins -redkensvr barefoot beknown cityeatscookingchannel -cuisinella delmonte edekafage ferrero foodnetworkfood gallo heinz -kindermcd  mcdonalds pamperedchef -rocher -wilmarxn--3oq18vl8pn36axn--55qx5d8y0buji4b870uxn--5su34j936bgsgxn--b4w605ferd xn--cckwcxetd -xn--cg4bkixn--dkwm73cwpn xn--flw351exn--fzys8d69uvgmxn--hxt035cmppuelxn--hxt035czzpfflxn--j6w470d71isscxn--jlq480n2rgxn--jlq61u9w7bxn--kcrx77d1x4axn--kcrx7bb75ajk3bxn--mgba3a3ejtxn--mgba7c0bbn0axn--mgbaakc7dvfxn--mgbb9fbpob xn--ngbe9e0a xn--pgb3ceoj xn--qcka1pmcxn--w4r85el8fhu5dnra xn--w4rs40l avianca caravan changiairport cipriani clubmed delta firmdale -hilton hyatt kerryhotelskerrylogisiticskerryproperties marriott orientexpress  shangrila tradershotelstui -viking -virgin -webjetablecbre chintai  frontdoor -lefrakabc africamagicartebbc  canalpluscbncbsdstv -eurovisionfox -gallup globogotv guardianmediahbohgtvimdbitv -kyknetmnet movistar mzansimagicnhk nowtvsbs sevensky spiegel starhub -supersport theguardian travelchannelweatherchannel bauhaus latrobe -monashrmitcolorfulstage.com crypton.co.jp lapriere.jpmagicalmirai.com mikuexpo.com + +GEOLOCATION-!CNcolorfulstage.com crypton.co.jp lapriere.jpmagicalmirai.com mikuexpo.com piapro.net snowmiku.com bowlroll.net pubmatic.compubmatic.co.jpads.pubmatic.com -ads taboola.com citizenlab.cacitizenlab.orgapplecensorship.comfreebrowser.orgfreewechat.com freeweibo.com freezhihu.org greatfire.org pao-pao.netwikiunblocked.orghaveibeenpwned.compwnedpasswords.comgetlantern.org -lantern.io softether.orgsoftether-download.com  v2ray.com +ads taboola.com censorship.no citizenlab.cacitizenlab.orgepicbrowser.comapplecensorship.comfreebrowser.orgfreewechat.com freeweibo.com freezhihu.org greatfire.org pao-pao.netwikiunblocked.orghaveibeenpwned.compwnedpasswords.comgetlantern.org +lantern.iopaskoocheh.com softether.orgsoftether-download.comtorproject.org  v2ray.com v2ray.cool  v2fly.org opengw.net -vpngate.jp vpngate.net ahmia.fi akasha.worldbrowserleaks.combypasscensorship.org censorship.aidat.foundationdemocracy.earth eff.orgepicbrowser.com ffprofile.comfreenetproject.org fteproxy.org +vpngate.jp vpngate.net ahmia.fi akasha.worldbrowserleaks.combypasscensorship.org censorship.aidat.foundationdemocracy.earth eff.org ffprofile.comfreenetproject.org fteproxy.org geti2p.netgetoutline.org -gfw.reportguardianproject.info ipfs.io  jitsi.org lokinet.org  ntc.partyonionshare.org ooni.org openvpn.netprivacytools.io psiphon3.com sagernet.orgshadowsocks.org sspanel.net stunnel.org telex.cctorproject.org tribler.org tunsafe.comtwister.net.co +gfw.reportguardianproject.info hiddify.com  jitsi.org lokinet.org  ntc.partyonionshare.org ooni.org openvpn.netprivacytools.io +psiphon.ca psiphon3.com sagernet.orgshadowsocks.org sspanel.net stunnel.org telex.cc tribler.org tunsafe.comturkeyblocks.orgtwister.net.co uproxy.org vuvuzela.io whonix.org wikileaks.org wireguard.com zeronet.ioartstation.comartstationmedia.com drbl.in dribbble.com dynacw.co.jp @@ -8912,11 +9630,14 @@ visabg.com visaeurope.at visaeurope.ch visaeurope.lu visaeur visapay.cn cnvisapcsdirect.comvisaplatinum.cn cnvisaplatinum.com.cn -cn visaplus.comvisasavingsedge.cavisasignature.co.kr visb.org ak1.net +cn visaplus.comvisasavingsedge.cavisasignature.co.kr visb.org accdn.com.cn +cn ak1.net aka-ai.com aka-ai.net akacrypto.net akadeem.net akadns.com -akadns.net akadns6.net +akadns.net akadns6.net akadns88.net +cn akadns99.net +cn akaeai.com akafms.net akagtm.org akahost.net @@ -8924,13 +9645,20 @@ akaint.net akam.net akamaa.com akamah.com akamak.com -akamam.comakamai-access.comakamai-access.netakamai-cdn.com akamai-platform-internal.netakamai-platform-staging.comakamai-platform.netakamai-regression.netakamai-staging.netakamai-sucks.netakamai-thailand.comakamai-thailand.netakamai-trials.com akamai.co.kr -akamai.com +akamam.comakamai-access.comakamai-access.netakamai-cdn.com akamai-platform-internal.netakamai-platform-staging.comakamai-platform.netakamai-regression.netakamai-staging.netakamai-sucks.netakamai-thailand.comakamai-thailand.netakamai-trials.com akamai.co.kr +akamai.com +cn akamai.netakamaiedge.netakamaientrypoint.netakamaietpcnctest.com#akamaietpcompromisedcnctest.com'#akamaietpcompromisedmalwaretest.comakamaietpmalwaretest.comakamaietpphishingtest.comakamaihd-staging.net akamaihd.com akamaihd.netakamaimagicmath.netakamainewzealand.comakamaiphillipines.comakamaiphillipines.netakamaitech.comakamaitech.netakamaitechnologies.comakamaitechnologies.netakamaisingapore.netakamaistream.netakamaized-staging.net akamaized.netakamaizercentral.com akamci.com  akami.com  akami.net akamii.com akamqi.com akastream.com akastream.net -akatns.net iamakamai.com iamakamai.netsoasta-dswb.com +akatns.net akcdn.com.cn +cn aptdn.net +cn edgekey.net edgekey88.net +cn edgesuite.net iamakamai.com iamakamai.net janrain.biz +cnjanrainservices.com +cn skycdn.com.cn +cnsoasta-dswb.com srtcdn.net awempire.com dditsadn.com dditscdn.com docleradn.com doclercdn.com  cdn77.com  cdn77.org cf-ns.com cn cf-ns.net cn @@ -8944,12 +9672,17 @@ cftest6.cn cn cftest7.com cn cftest8.com cncloudflare-cn.com +cn!cloudflareanycast.net +cncloudflarechina.cn cncloudflarecn.net +cn cloudflareglobal.net cn%cloudflareinsights-cn.com +cncloudflareperf.com cncloudflareprod.com cn!cloudflarestaging.com cn#cloudflarestoragegw.com -cnargotunnel.com cf-ipfs.comcloudflare-dns.comcloudflare-gateway.comcloudflare-ipfs.comcloudflare-quic.comcloudflare.comcloudflare.net cloudflare.tvcloudflareaccess.comcloudflareapps.comcloudflarebolt.comcloudflareclient.comcloudflareinsights.comcloudflareok.comcloudflareportal.comcloudflarepreview.comcloudflareresolve.comcloudflaressl.comcloudflarestatus.comcloudflarestorage.comcloudflarestream.comcloudflaretest.comcloudflarewarp.com every1dns.net one.one.onepacloudflare.com  pages.devtrycloudflare.comvideodelivery.net  warp.plus workers.dev +cn cf-ipfs.comcloudflare-ipfs.comargotunnel.com +cfl.recloudflare-dns.comcloudflare-ech.comcloudflare-esni.comcloudflare-gateway.comcloudflare-quic.comcloudflare.comcloudflare.net cloudflare.tvcloudflareaccess.comcloudflareapps.comcloudflarebolt.comcloudflareclient.comcloudflareinsights.comcloudflareok.comcloudflarepartners.comcloudflareportal.comcloudflarepreview.comcloudflareresolve.comcloudflaressl.comcloudflarestatus.comcloudflarestorage.comcloudflarestream.comcloudflaretest.comcloudflarewarp.com every1dns.netisbgpsafeyet.com one.one.onepacloudflare.com  pages.devtrycloudflare.comvideodelivery.net  warp.plus workers.dev fastly.com fastly.netfastlylabs.com fastlylb.netfastly-terrarium.com zencdn.net  imgix.com  imgix.netdelvenetworks.com limelight.com  lldns.netllnw-trials.com llnw.com llnw.net  llnwd.net  llnwi.net pagecdn.com @@ -8971,18 +9704,22 @@ comodo.net comodoca.com comodoca2.com comodoca3.com comodoca cndigicert-cn.comdigicert-validation.com digicert.cn cn digicert.comdigitalcertvalidation.com freessl.com geotrust.com rapidssl.com thawte.com  thawte.de  thawte.frquovadisglobal.compublic-trust.com entrust.netentrustdatacard.comaffirmtrust.com atos.net -myatos.netcertificat2.comtrendmicro.com  gandi.net alphassl.comglobalsign-media.com globalsign.be globalsign.chglobalsign.co.ukglobalsign.comglobalsign.com.auglobalsign.com.hkglobalsign.com.sg globalsign.es globalsign.eu globalsign.frglobalsign.net globalsign.nlcrl2.alphassl.com -cnocsp.globalsign.com -cn ocsp2.globalsign.com -cn!secure.globalsign.com -cn secure2.alphassl.com +myatos.netcertificat2.comtrendmicro.com  gandi.net alphassl.com +cneasy-signing.com +cnglobalsign-media.com globalsign.be globalsign.chglobalsign.cloud globalsign.cn +cnglobalsign.co.ukglobalsign.com +cnglobalsign.com.auglobalsign.com.brglobalsign.com.hkglobalsign.com.sg globalsign.es globalsign.eu globalsign.frglobalsign.net globalsign.nlglobalsigncdn.com +cn4(cdn.globalsigncdn.com.cdn.cloudflare.net cn godaddy.comx.co godaddy pki.googclients1.google.compki.google.com crl.pki.goog +cn crls.pki.goog cn ocsp.pki.goog cn!pki-goog.l.google.com cn eca.hinet.netgtlsca.nat.gov.twhongkongpost.gov.hk ecert.gov.hk identrust.comidentrust.co.uk identrust.net  lencr.orgletsencrypt.comletsencrypt.org msocsp.comcrl.microsoft.commscrl.microsoft.comocsp.microsoft.comoneocsp.microsoft.comwww.microsoft.com cn secom.co.jpsecomtrust.netcybertrust.co.jpcybertrust.ne.jpmanagedpki.ne.jpenterprisessl.comhackerguardian.cominstantssl.com oemssl.cn +cn(oemssl.cn.cdn.cloudflare.net cnoptimumssl.compositivessl.com sectigo.comsectigochina.com +cn/#sectigochina.com.cdn.cloudflare.net cntrust-provider.cn cntrust-provider.com usertrust.com aoc.cat catcert.catincommon-rsa.org netsolssl.com ssl.com sslcom.cn cnstarfieldtech.com digital-id.ch digitalid.chmanaged-pki.chmanaged-pki.de pki-post.ch pki-posta.ch pki-poste.chroot-signing.chrootsigning.comssl-certificate.ch @@ -8996,7 +9733,8 @@ wiseid.com wisekey.comwisekey.com.hk accv.escamerfirma.com netlock.hu trustcor.ca trustcor.comtrustisfps.com clubhouse.comclubhouseapi.comjoinclubhouse.com dis.gd discord.co discord.comdiscord.design discord.dev -discord.gg discord.gift discord.gifts discord.media discord.new discord.store discord.toolsdiscord-activities.comdiscordactivities.comdiscordapp.comdiscordapp.netdiscordmerch.comdiscordpartygames.comdiscordsays.comdiscordstatus.comairhorn.solutionsairhornbot.combigbeans.solutionswatchanimeattheoffice.com discordapp.iodiscordcdn.com#hammerandchisel.ssl.zendesk.com freenode.net intercom.com intercom.iointercomassets.comintercomcdn.com gcld-line.com +discord.gg discord.gift discord.gifts discord.media discord.new discord.store discord.toolsdiscord-activities.comdiscordactivities.comdiscordapp.comdiscordapp.netdiscordmerch.comdiscordpartygames.comdiscordsays.comdiscordstatus.comairhorn.solutionsairhornbot.combigbeans.solutionswatchanimeattheoffice.com discordapp.iodiscordcdn.com#hammerandchisel.ssl.zendesk.com freenode.net intercom.com intercom.iointercomassets.comintercomcdn.com +keybase.iokeybaseapi.com gcld-line.com lin.eeline-apps-beta.comline-apps-rc.com line-apps.com line-beta.me line-cdn.net line-scdn.net line.biz line.me line.naver.jp linecorp.comlinefriends.comlinefriends.com.tw linegame.jplinemobile.comlinemyshop.comlineshoppingseller.com  linetv.tw nhncorp.jparewereadyyet.com element.io @@ -9005,29 +9743,38 @@ modular.im riot.im  vector.imfbmessenger.comm.me messe nbabot.net signal.art signal.orgsignalusers.orgwhispersystems.orgslack-core.comslack-edge.comslack-files.comslack-imgs.comslack-msgs.comslack-redir.net  slack.com -slackb.comslackcertified.com slackdemo.com slackhq.com comments.app contest.com  graph.orgquiz.directoryt.me tdesktop.com +slackb.comslackcertified.com slackdemo.com slackhq.comcdn-telegram.org comments.app contest.com fragment.com  graph.orgquiz.directoryt.me tdesktop.com telega.one telegra.phtelegram-cdn.org telegram.dog telegram.me telegram.orgtelegram.space telesco.pe -tg.dev tx.meusercontent.dev wa.mewhatsapp-plus.infowhatsapp-plus.mewhatsapp-plus.net whatsapp.cc whatsapp.com whatsapp.info whatsapp.net whatsapp.org whatsapp.tvwhatsappbrand.com asproex.comasproexapi.com +tg.dev tx.meusercontent.devgraph.whatsapp.com +adsgraph.whatsapp.net +ads wa.mewhatsapp-plus.infowhatsapp-plus.mewhatsapp-plus.net whatsapp.cc whatsapp.com whatsapp.info whatsapp.net whatsapp.org whatsapp.tvwhatsappbrand.com asproex.comasproexapi.com binance.ccbinance.charity binance.cloud binance.co binance.com binance.info binance.me binance.net binance.org -binance.usbinance.vision binancezh.be binancezh.biz binancezh.cc binancezh.co binancezh.combinancezh.info binancezh.ink binancezh.kimbinancezh.linkbinancezh.livebinancezh.mobi binancezh.net binancezh.pro binancezh.sh binancezh.topbinanceapi.com bnbstatic.com bitflyer.com bitflyer.jp bisq.io bisq.network bitsquare.io coinone.co.krcoinonecore.comcoinonecorp.com -devcon.orgethereum.foundation ethereum.org etherscan.io +binance.usbinance.visionbinancecnt.com binancezh.be binancezh.biz binancezh.cc binancezh.co binancezh.combinancezh.info binancezh.ink binancezh.kimbinancezh.linkbinancezh.livebinancezh.mobi binancezh.net binancezh.pro binancezh.sh binancezh.topbinanceapi.com bnbstatic.com saasexch.com saasexch.ioappsflayer.com bitflyer.com bitflyer.jp bisq.io bisq.network bitsquare.io  bybit.com  bycsi.com +bytick.com +byapis.com  bycbe.com bymj.iobybit-exchange.github.iobybit.ada.support coinone.co.krcoinonecore.comcoinonecorp.com deribit.comderibit.cdn.prismic.io +devcon.orgethereum.foundation ethereum.org etherscan.io gate.io gatedata.org gateimg.com gateio.livegateio.services hbabit.com -hbfile.net  huobi.com huobi.me  huobi.pro huobi.sc huobiasia.viphuobigroup.comhuobitoken.comlocalbitcoins.comlocalbitcoinschain.com okex.com okx.com +hbfile.net  huobi.com huobi.me  huobi.pro huobi.sc huobiasia.viphuobigroup.comhuobitoken.comlocalbitcoins.comlocalbitcoinschain.com okex.com okx.com okx-dns.com okx-dns1.com okx-dns2.com oklink.com -cnonekey-asset.com  onekey.so onekeycn.comonekey.zendesk.com +cnonekey-asset.com  onekey.so onekeycn.comonekey.zendesk.com wyndlabs.ai wynd.network zb.app -zb.com zb.io zb.live +zb.com zb.io zb.live 1inch.io aave.com bitbank.cc bitcoin.org bitfinex.com -bitmex.com bitquick.co bitstamp.net bittrex.com btcbox.co.jp -cex.io coinbase.com coinglass.comcryptocompare.com curve.fi -debank.com dogecoin.com  infura.iomytokenapi.com +bitget.com +bitmex.com bitquick.co bitstamp.net bittrex.com blockfrost.io btcbox.co.jp +cex.ioclearpool.finance coinalyze.net coinbase.com coindesk.com coingecko.com coinglass.com coinmap.orgcoinmarketcap.com +crypto.comcryptocompare.com curve.fi +cyberx.com +debank.com dogecoin.com dydx.exchangefundingrates.xyz +gemini.com hashflow.com  infura.io  invity.io maple.financemetalpha.finance mexc.commexcsensors.commytokenapi.com kraken.com -opensea.io -paxful.com  truefi.io uniswap.org  zapper.fi  adidas.at  adidas.be  adidas.ch adidas.co.in adidas.co.uk +opensea.io osl.com +paxful.com +ripple.comsatoshilabs.com theblock.co  trezor.io  truefi.io  unisat.io uniswap.orgwalletconnect.comwintermute.com  zapper.fi  adidas.at  adidas.be  adidas.ch adidas.co.in adidas.co.uk adidas.com adidas.com.cn cn adidas.com.sa adidas.com.tw  adidas.cz  adidas.de  adidas.dk  adidas.hu  adidas.ie  adidas.it  adidas.nl  adidas.pl  adidas.ru  adidas.se bby.combbycastatic.ca bbycloud.combbycontent.combbycontent.net bbyintl.com bbystatic.com  bbyurl.us bestbhy.combestbuy-audio.com"bestbuy-communityrelations.combestbuy-giftcard.infobestbuy-int.combestbuy-jobs.com bestbuy.ca @@ -9151,7 +9898,7 @@ idnike.cominikesneakers.com just-do-it.cn cn justdoit.uskicksnike1.comkidsnikeshoes.com mynike.comnike-air-max.comnike-dunksb.com nike-fr.com nike-org.com nike-shox.cn cn nike-uk.com nike-us.com nike-usa.com nike.cinike.cn -cn nike.com nike.com.br nike.com.hk nike.gy nike.hk  nike.shop nike.usnike.xn--hxt814e nike0594.com +cn nike.com nike.com.br nike.com.hk nike.gy nike.hk  nike.host  nike.shop nike.usnike.xn--hxt814e nike0594.com nike23.comnikeadidas.comnikeairhuarache.comnikeairmax.comnikeairmaxs.comnikeairmaxshoes.comnikeairrift.com nikeasia.comnikeaustralia.com nikeaw77.com  nikeb.com nikebbn.comnikebetrue.comnikebetterworld.cn cnnikebetterworld.com"nikebetterworld.com.cn cnnikebetterworld.infonikebetterworld.netnikebetterworld.org nikebiz.info nikebuy.com @@ -9211,7 +9958,7 @@ booksc.xyzbookshome.info bookshome.netbookshome.world de1lib.org hk1lib.orglibsolutions.applibsolutions.domainslibsolutions.net ma1lib.org -sg1lib.orgsinglelogin.appsinglelogin.me  z-lib.org  zlib.life zlibcdn.com zlibcdn2.comaacrjournals.orgacademic.eb.com acaric.co.jp +sg1lib.orgsinglelogin.appsinglelogin.mesinglelogin.resinglelogin.site  z-lib.org z-library.se  zlib.life zlibcdn.com zlibcdn2.comaacrjournals.orgacademic.eb.com acaric.co.jp aclweb.org acm.org acs.org agu.org aiaa.orgaimsciences.org airiti.comairitilibrary.com altmetric.comalexanderstreet.comamdigital.co.uk ams.org anatomy.tvanalytictech.comannualreviews.org aps.orgarabidopsis.org artstor.org  arxiv.orgascelibrary.org asha.org asm.org asme.orgasminternational.orgasn-online.orgaspbjournals.orgaspenpublishing.com astm.org berkeley.edubiologists.combiomedcentral.com @@ -9240,9 +9987,10 @@ pearson.cl pearson.co.in pearson.co.jp pearson.compearson.c pearson.es pearson.fr pearson.plpearsonactivelearn.compearsonassessment.bepearsonassessment.depearsonassessment.dkpearsonassessment.frpearsonassessment.nlpearsonassessment.nopearsonassessment.sepearsonassessments.compearsoncanada.capearsonclinical.bepearsonclinical.capearsonclinical.co.ukpearsonclinical.com.aupearsonclinical.com.brpearsonclinical.depearsonclinical.dkpearsonclinical.espearsonclinical.eupearsonclinical.frpearsonclinical.inpearsonclinical.nlpearsonclinical.nopearsonclinical.sepearsoncmg.compearsoncred.compearsoned.co.nz pearsoned.compearsoneducacion.netpearsoneducationbooks.com pearsonelt.chpearsonelt.compearsonenespanol.compearsonhighered.compearsoninstitute.ac.zapearsonlongman.chpearsononlineacademy.compearsonperu.pepearsonplaces.com.au%!pearsonschoolsandfecolleges.co.ukpearsonvue.compearsonvue.netpobl-content.com  pvue1.com  pvue2.comquatrum.com.brstark-verlag.chtalentlens.comthemathsfactor.comxn--pearsonenespaol-brb.com sitepoint.comskillshare.comspiceworks.comspiceworksstatic.com techtimes.com ted.com -tedcdn.com udacity.com  udemy.com udemycdn.com w3schools.comchemequations.com abema.io abema.tv abema-tv.com  adx.promo ameba.jp amebame.com amebaownd.comamebaowndme.com  ameblo.jp bucketeer.jpdokusho-ojikan.jp hayabusa.dev hayabusa.iohayabusa.media winticket.jpabematv.akamaized.net#ds-linear-abematv.akamaized.net ds-vod-abematv.akamaized.net linear-abematv.akamaized.netvod-abematv.akamaized.net  9anime.cz  9anime.id  9anime.to  9anime.wsanimedao-tv.comcrunchyroll.comfunimation.com gogo-load.com gogoanime.vcgogoanime.wiki gogocdn.net +tedcdn.com udacity.com  udemy.com udemycdn.com w3schools.comchemequations.com abema.io abema.tv abema-tv.com  adx.promo ameba.jp amebame.com amebaownd.comamebaowndme.com  ameblo.jp bucketeer.jpdokusho-ojikan.jp hayabusa.dev hayabusa.iohayabusa.media winticket.jpabematv.akamaized.net#ds-linear-abematv.akamaized.net ds-vod-abematv.akamaized.net linear-abematv.akamaized.netvod-abematv.akamaized.net amc.com amcn.comamcnetworks.com amcplus.comrne5a6ae085b6c43020dea230eb0c0ecc33a188227507da97b8ecc05eb8beace6.us-east-1.prod.service.minerva.devices.a2z.com  9anime.cz  9anime.id  9anime.to  9anime.wsanimedao-tv.comcrunchyroll.comfunimation.com gogo-load.com gogoanime.vcgogoanime.wiki gogocdn.net hidive.com -vrv.co ao3.orgarchiveofourown.orgarchiveofourown.comarchiveofourown.net +vrv.co +age.tv  agedm.org ao3.orgarchiveofourown.orgarchiveofourown.comarchiveofourown.net att.tv atttvnow.comattwatchtv.com directv.com  dtvce.comnettyinternet.combahamut.akamaized.netbahamut.com.tw gamer.com.twgamer2-cds.cdn.hinet.netgamer-cds.cdn.hinet.net bandcamp.com bcbits.com boomerang.com wbdnbo.net catchplay.comtra-ww000-cp.akamaized.net @@ -9253,7 +10001,8 @@ wbdnbo.net catchplay.comtra-ww000-cp.akamaized.net cn biligame.com cn biligame.net cn blizzard.comblizzardgearstore.comblz-contentstack.com -battle.netblizzard.nefficient.co.krblzddist1-a.akamaihd.netblzddistkr1-a.akamaihd.netbnetcmsus-a.akamaihd.netbnetproduct-a.akamaihd.netbnetshopus.akamaized.net diablo3.comdiabloimmortal.comfiresidegatherings.complayhearthstone.comheroesofthestorm.complayoverwatch.com starcraft.comstarcraft2.complaywarcraft3.comworldofwarcraft.comblizzcon-a.akamaihd.netblzmedia-a.akamaihd.netblznav.akamaized.netbluearchive-cn.com +battle.netblizzard.nefficient.co.krblzddist1-a.akamaihd.netblzddistkr1-a.akamaihd.netbnetcmsus-a.akamaihd.netbnetproduct-a.akamaihd.netbnetshopus.akamaized.net diablo3.comdiabloimmortal.comfiresidegatherings.complayhearthstone.comheroesofthestorm.complayoverwatch.com starcraft.comstarcraft2.complaywarcraft3.comworldofwarcraft.comblizzcon-a.akamaihd.netblzmedia-a.akamaihd.netblznav.akamaized.netbluearchive.jpbluearchive.nexon.combluearchive-cn.com +cn sl916.com cncurseforge.com forgecdn.net cygames.jp cygames.co.jpworldflipper.jpworldflipper.akamaized.netumamusume.akamaized.net dawngate.com eastore.comlordofultima.com origin.com  origin.tv#cloudsync-prod.s3.amazonaws.comorigin-a.akamaihd.netrtm.tnt-ea.comssl-lvlt.cdn.ea.comawayoutgame.combattlefieldbadcompany2.combattlefront2.combattlefrontii.combejewled-stars.combejeweledstars.comcapitalgames.com chillingo.comcommandandconquer.comconquerwithcharacter.com  crysis.jp dawngate.comdawngatechronicles.com @@ -9279,8 +10028,10 @@ garena.com garena.live  garena.my  garena.ph  garena.sg  ga cn."^cdn-akamai-.+\.gog-services\.com$ cn(^gog-cdn-.+\.footprint\.net$ cn, ^images(-\d)?\.gog-statics\.com$ +cn kurogames.com +cn aki-game.com cn -lowiro.com100classicbooks.com +lowiro.com nexon.co.jp  nexon.com nexon.ionexoncdn.co.kr nikke-de.com nikke-en.com nikke-fr.com nikke-jp.com nikke-kr.com nikke-sea.com100classicbooks.com amiibo.comayudanintendo.combowsersinsidestory.comexcitebots.comflipnotestudio.comgloryofheracles.comhackyourconsole.comkirbysuperstarultra.comkirbysepicyarn.comlegendofzelda.cn cn legendofzelda.com.cn cn miitomo.commiitomo.com.cn @@ -9296,8 +10047,9 @@ kyurem.com pokedex3d.compokemon-moon.compokemon-sun.compo cnmariokart.com.cn cnmariokart7.commariokart8.commariosupersluggers.comnewsupermariobrosu.comsupermario.comsupermario3dworld.com!supermariobros.com.cn cnsupermariogalaxy.comsupermariorun.comsuperpapermario.comnintendowii.com  wii-u.com -wiifit.com wiifitu.com wiipartyu.com wiisports.comwiisportsresort.comwiiugamepad.com  wiivc.net xenoblade.com op.ggopgg-static.akamaized.net -joyjoy.netpandanet-igs.com pinkcore.com pinkcore.netsekai.colorfulpalette.org playstationplaystation.complaystation.net sonyentertainmentnetwork.com"api-priconne-redive.cygames.jpomotenashi.cygames.jp%!prd-priconne-redive.akamaized.nethistoryofdota.comhistoryofdota.nethistoryofdota.orginstituteofwar.orgmolesports.com rgpub.ioriot-games.com riot.com riot.net riotcdn.netriotgames.co.kr riotgames.comriotgames.info riotgames.jp riotgames.net riotgames.tv riotpin.comriotpoints.com rstatic.net supremacy.com supremacy.net championshipseriesleague.com lcsmerch.comleaguehighschool.comleagueoflegends.caleagueoflegends.cn +wiifit.com wiifitu.com wiipartyu.com wiisports.comwiisportsresort.comwiiugamepad.com  wiivc.net xenoblade.com op.ggopgg-static.akamaized.net a.ppy.sh assets.ppy.sh c.ppy.sh +osu.ppy.sh  m1.ppy.sh lazer.ppy.sh notify.ppy.sh sentry.ppy.shspectator.ppy.sh +joyjoy.netpandanet-igs.com pinkcore.com pinkcore.net playstationplaystation.complaystation.net sonyentertainmentnetwork.comsekai.colorfulpalette.org"api-priconne-redive.cygames.jpomotenashi.cygames.jp%!prd-priconne-redive.akamaized.nethistoryofdota.comhistoryofdota.nethistoryofdota.orginstituteofwar.orgmolesports.com rgpub.ioriot-games.com riot.com riot.net riotcdn.netriotgames.co.kr riotgames.comriotgames.info riotgames.jp riotgames.net riotgames.tv riotpin.comriotpoints.com rstatic.net supremacy.com supremacy.net championshipseriesleague.com lcsmerch.comleaguehighschool.comleagueoflegends.caleagueoflegends.cn cnleagueoflegends.co.krleagueoflegends.comleagueoflegends.infoleagueoflegends.krleagueoflegends.netleagueoflegends.orgleagueoflegendsscripts.comleaguesharp.infoleaguoflegends.comlearnwithleague.comlol-europe.com lolclub.org lolespor.comlolesports.com lolfanart.net lolpcs.com lolshop.co.kr lolstatic.comlolusercontent.com lpl.com.cn @@ -9401,7 +10153,8 @@ wegame.com scescdn.cn cnscid.cn cn scsentry.cn -cn supercell.com!supercellcommunity.cn +cn supercell.com +!cn!supercellcommunity.cn cnsupercellsupport.cn cncodm.com cnbcfmglobal.com @@ -9420,13 +10173,13 @@ xboxab.comxboxgamepass.comxboxgamestudios.com xboxlive.cn cn xboxlive.com xboxone.co xboxone.com xboxone.euxboxplayanywhere.comxboxservices.comxboxstudios.com -xbx.lvynoproject.net fanatical.comhumblebundle.com loverslab.com modrinth.com nexusmods.com +xbx.lvynoproject.netdodi-repacks.downloaddodi-repacks.site fanatical.comfitgirl-repacks.sitegame-repack.sitehumblebundle.com loverslab.comminecraft.wiki modrinth.com nexusmods.com papermc.ioplanetminecraft.com protondb.com speedrun.com steamdb.info  ptzwx.comquanben-xiaoshuo.com quanben.iodailymotion.com dm-event.net  dmcdn.net dandanzan.cc  nunuyy.cc dazn-api.com dazn.com dazndn.com indazn.com indaznlab.comdeviantart.comdeviantart.net da-files.com*&content-ause1-ur-discovery1.uplynk.com disco-api.comdiscoveryplus.comabc-studios.com abc.com edgedatg.com bamgrid.comdmed.technology dtci.codtci.technology espn.co.uk espn.com espn.net espncdn.com -espnqa.com watchespn.comespn.api.edge.bamgrid.comespn.hb.omtrdc.netespndotcom.tt.omtrdc.net hotstar.comhotstar-cdn.nethotstar-labs.comhotstarext.comhsprepack.akamaized.net^hses[1-7]?.akamaized.net$ +espnqa.com watchespn.comespn.api.edge.bamgrid.comespn.hb.omtrdc.netespndotcom.tt.omtrdc.net hotstar.comhotstar-cdn.nethotstar-labs.comhotstarext.comhsprepack.akamaized.net ^hses[1-7]?\.akamaized\.net$ marvel.commarvel10thanniversary.commarveldimensionofheroes.commarvelparty.netmarvelpinball.commarvelsdoubleagent.commarvelspotlightplays.com marvelsuperheroseptember.commarvelsuperwar.comthemarvelexperiencetour.comnatgeomaps.comnationalgeographic.com"nationalgeographicpartners.com ngeo.com starott.com starplus.comstar.api.edge.bamgrid.com%!star.connections.edge.bamgrid.com!star.content.edge.bamgrid.com"star.playback.edge.bamgrid.com disney.asia  disney.be  disney.bg  disney.ca  disney.ch disney.co.il disney.co.jp disney.co.kr disney.co.th disney.co.uk disney.co.za disney.com disney.com.au disney.com.br disney.com.hk disney.com.tw  disney.cz  disney.de  disney.dk  disney.es  disney.fi  disney.fr  disney.gr  disney.hu  disney.id  disney.in  disney.io  disney.it  disney.my  disney.nl  disney.no  disney.ph  disney.pl  disney.pt  disney.ro  disney.ru  disney.se  disney.sg20thcenturystudios.com.au20thcenturystudios.com.br20thcenturystudios.jpadventuresbydisney.com babble.com babyzone.com bamgrid.com"beautyandthebeastmusical.co.uk @@ -9443,7 +10196,8 @@ huluqa.comhulurussia.com huluspain.comhulusports.comhulus hulutv.com huluusa.comjoinmaidez.com mushymush.tv myhulu.comoriginalhulu.com payhulu.comregisterhulu.comthehulubraintrust.comwwwhuluplus.com"hulu.playback.edge.bamgrid.comimdbboxofficemojo.com imdb.com imdb.tomedia-imdb.com iyf.tv dnvodcdn.mekingkong.com.twkingkongapp.com -kfs.io  kk.stream  kkbox.com kkbox.com.tw  kktix.com kktv.com.tw kktv.me kktv.com.tw kktv.metheater-kktv.cdn.hinet.net litv.tvlitvfreepc.akamaized.net manhuagui.comgenshinimpact.comhonkaiimpact3.comhonkaistarrail.com  hoyo.link hoyolab.com hoyoverse.comn0vadesktop.com mhyurl.cn +kfs.io  kk.stream  kkbox.com kkbox.com.tw  kktix.com kktv.com.tw kktv.me kktv.com.tw kktv.metheater-kktv.cdn.hinet.net last.fmlastfm.freetls.fastly.net litv.tvlitvfreepc.akamaized.net manhuagui.comgenshinimpact.comhonkaiimpact3.comhonkaistarrail.com  hoyo.link hoyolab.com hoyoverse.comn0vadesktop.com mhystatic.com +cn mhyurl.cn cn mihayo.com cn mihayou.com @@ -9463,7 +10217,7 @@ mihoyo.com nivodz.com vod360.net mytvsuper.com tvb.com fast.com netflix.ca netflix.com netflix.netnetflixinvestor.comnetflixtechblog.com nflxext.com nflximg.com nflximg.netnflxsearch.net -nflxso.net nflxvideo.netnetflixdnstest1.comnetflixdnstest2.comnetflixdnstest3.comnetflixdnstest4.comnetflixdnstest5.comnetflixdnstest6.comnetflixdnstest7.comnetflixdnstest8.comnetflixdnstest9.comnetflixdnstest10.com1-(^|\.)dualstack\.apiproxy-.+\.amazonaws\.com$40(^|\.)dualstack\.ichnaea-web-.+\.amazonaws\.com$netflix.com.edgesuite.netnico +nflxso.net nflxvideo.netnetflixdnstest0.comnetflixdnstest1.comnetflixdnstest2.comnetflixdnstest3.comnetflixdnstest4.comnetflixdnstest5.comnetflixdnstest6.comnetflixdnstest7.comnetflixdnstest8.comnetflixdnstest9.comnetflixdnstest10.com62(^|\.)apiproxy-device-prod-nlb-.+\.amazonaws\.com$73(^|\.)apiproxy-website-nlb-prod-.+\.amazonaws\.com$1-(^|\.)dualstack\.apiproxy-.+\.amazonaws\.com$40(^|\.)dualstack\.ichnaea-web-.+\.amazonaws\.com$netflix.com.edgesuite.netnico nicodic.jp nicomanga.jp niconico.com nicoseiga.jp nicovideo.jp nimg.jp simg.jp haiwaikan.com iole.tv  olehd.com olelive.com olevod.com  olevod.io  olevod.tv olevodtv.comolemovienews.com pbs.org ads-pixiv.net ads booth.pm  fanbox.cc  pixiv.net  pixiv.org pixiv.co.jp pixiv.me  pximg.net pluto.tv plutotv.net @@ -9472,7 +10226,7 @@ olevod.com  olevod.io  olevod.tv olevodtv.comolemovienews.com cnamazonprimevideos.comamazonvideo.ccamazonvideo.comprime-video.com primevideo.ccprimevideo.comprimevideo.infoprimevideo.org primevideo.tv fandango.com mgo.commgo-images.com ravm.tv roku.com rokutime.comshowtimeanytime.com showtime.com dishworld.comslinginternational.com  sling.commovenetworks.com movetv.comimageworks.commotionpictureser.com playshow.ioplayshowtv.comsonyclassics.comsonypictures.comsonypicturesanimation.comsonypicturesmuseum.comsonypicturesstudios.comsonypicturestelevision.com#sonypicturestelevisiongames.com wheelpop.com wwtbam.comyourfantasybeginsnow.comsoundcloud.com -sndcdn.com byspotify.com pscdn.co scdn.co spoti.fispotify-everywhere.com spotify.comspotify.designspotifycdn.comspotifycdn.netspotifycharts.comspotifycodes.comspotifyforbrands.comspotifyjobs.com&"audio-ak-spotify-com.akamaized.net'#audio4-ak-spotify-com.akamaized.net&"heads-ak-spotify-com.akamaized.net'#heads4-ak-spotify-com.akamaized.netspotify.com.edgesuite.netspotify.map.fastly.netspotify.map.fastlylb.net subscene.com i.jeded.com  tidal.com tidalhifi.com wimpmusic.combyteoversea.com +sndcdn.com byspotify.com pscdn.co scdn.co spoti.fispotify-everywhere.com spotify.comspotify.designspotifycdn.comspotifycdn.netspotifycharts.comspotifycodes.comspotifyforbrands.comspotifyjobs.com&"audio-ak-spotify-com.akamaized.net'#audio4-ak-spotify-com.akamaized.net+'cdn-spotify-experiments.conductrics.com&"heads-ak-spotify-com.akamaized.net'#heads4-ak-spotify-com.akamaized.netspotify.com.edgesuite.netspotify.map.fastly.netspotify.map.fastlylb.net subscene.com i.jeded.com  tidal.com tidalhifi.com wimpmusic.combyteoversea.com !cn muscdn.com !cn @@ -9480,10 +10234,16 @@ musical.ly !cntik-tokapi.com !cn tiktok.com +!cntiktokcdn-us.com +!cn tiktokcdn.com !cn tiktokd.net !cn tiktokd.org -!cn tiktokcdn.com !cn tiktokv.com +!cn +tiktokv.us +!cn +tiktokw.us +!cn ttwstatic.com !cn,p16-tiktokcdn-com.akamaized.net !cnthemoviedb.org tmdb.org thetvdb.com dogatch.jp gorin.jpscreens-lab.jp @@ -9495,7 +10255,7 @@ vhxqa3.com vhxqa4.com vhxqa6.comvimeo-staging.comvimeo-staging2.com  vimeo.com vimeo.frvimeobusiness.com vimeocdn.comvimeogoods.comvimeoondemand.comvimeostatus.comlivestream.com($^[0-9]+vod-adaptive\.akamaized\.net$ abow.jp angelbeats.jp anigema.jpcharlotte-anime.jpclannad-movie.jpheaven-burns-red.comkamisama-day.jpkamisama-maeda-lab.com koubaibu.jplitbus-anime.com product.co.jprewrite-anime.tvvisualarts.gr.jpvisual-arts.jp -viu.tvapi.viu.now.com^ewcdn[0-9]{2}\.nowe\.com$ viu.com dfp6rglgjqszk.cloudfront.net!d1k2us671qcoau.cloudfront.net!d2anahhhmp1ffz.cloudfront.net mox.moe vol.moe wwe.com wwe9.com youtubeggpht.cn +viu.tvapi.viu.now.com^ewcdn[0-9]{2}\.nowe\.com$ viu.com dfp6rglgjqszk.cloudfront.net!d1k2us671qcoau.cloudfront.net!d2anahhhmp1ffz.cloudfront.net mox.moe vol.moe webnovel.com wwe.com wwe9.com youtubeggpht.cn cn  ggpht.comgooglevideo.comwide-youtube.l.google.comwithyoutube.com youtu.beyoutube-nocookie.comyoutube-ui.l.google.com youtube.ae youtube.al @@ -9577,7 +10337,7 @@ youtube.ug youtube.uy youtube.vnyoutubeeducation.com($youtubeembeddedplayer.googleapis.comyoutubefanfest.comyoutubegaming.comyoutubego.co.idyoutubego.co.in youtubego.comyoutubego.com.br youtubego.id youtubego.inyoutubei.googleapis.comyoutubekids.comyoutubemobilesupport.com yt.be  ytimg.com z5.app -z5.com zee5.com zee5.in zee5.tvzeebioskop.com zeetv.co.uk  zeetv.com  zeeuk.com  777tv.net blubrry.combuzzsprout.com  castro.fm egta.com fireside.fminternationalsaimoe.com joox.com  linetv.tw litv.tv megaphone.fm moov.hk +z5.com zee5.com zee5.in zee5.tvzeebioskop.com zeetv.co.uk  zeetv.com  zeeuk.com  777tv.net blubrry.combuzzsprout.com  castro.fm egta.com fireside.fminternationalsaimoe.com joox.com  linetv.tw litv.tv megaphone.fm mikanani.me moov.hk odysee.com omobi.cc oranum.com overcast.fm syosetu.com thetvdb.com weverse.io yande.reamp-api.podcast.apple.combag.itunes.apple.combookeeper.itunes.apple.com @@ -9585,7 +10345,7 @@ weverse.io yande.reamp-api.podcast.apple.combag.itunes.apple.co gfycat.com imagebam.com imagecurl.com imagecurl.org imgcrl.orgimageshack.com imageshack.usimagetwist.com ibb.co  imgbb.com -simgbb.com  imgur.com imgur.io imgurinc.com mypikpak.com  pikpak.mepikpakdrive.com/"o4504926511693824.ingest.sentry.io +simgbb.com  imgur.com imgur.io imgurinc.com mypikpak.com mypikpak.net  pikpak.mepikpakdrive.com/"o4504926511693824.ingest.sentry.io ads pixhost.topostimages.org postimg.ccpstorage.space rmbl.ws @@ -9597,10 +10357,11 @@ pixnet.net pixnet.pro  pixnet.tw pixplug.in ptt.cc ptt2.cc ptt3.cc poe.com -poecdn.net qr.ae  quora.com quoracdn.net -reddit.comredditstatic.comredditmail.comredditmedia.com redd.it  18p2p.com avsforum.com disp.cc  doom9.org eyny.com gab.comhydrogenaud.io mewe.com +poecdn.net qr.ae  quora.com quoracdn.net redd.itreddit.app.link +reddit.comreddithelp.comredditmail.comredditmedia.comredditstatic.com redd.itreddit.map.fastly.net +yamibo.com  18p2p.com avsforum.com disp.cc  doom9.org eyny.com gab.comhydrogenaud.io mewe.com parler.com pincong.rocks safechat.com -sis001.com v2ex.comaboutfacebook.com accessfacebookfromschool.com acebooik.com acebook.comadvancediddetection.comaskfacebook.netaskfacebook.org +sis001.com v2ex.com bsky.app bsky.network bsky.socialaboutfacebook.com accessfacebookfromschool.com acebooik.com acebook.comadvancediddetection.comaskfacebook.netaskfacebook.org atdmt2.com atlasdmt.comatlasonepoint.combuyingfacebooklikes.comcareersatfb.comcelebgramme.comchina-facebook.com click-url.comcomo-hackearfacebook.comcrowdtangle.com dacebook.comdlfacebook.comdotfacebook.comdotfacebook.netexpresswifi.com faacebok.com faacebook.com faasbook.com facbebook.com facbeok.com facboo.com facbook.com facbool.com facboox.com faccebook.comfaccebookk.com facdbook.com facdebook.com face-book.com faceabook.com facebboc.com facebbook.comfacebboook.com facebcook.com facebdok.com facebgook.com facebhook.com facebkkk.com facebo-ok.com faceboak.com facebock.com facebocke.com facebof.com faceboik.com facebok.comfacebokbook.com facebokc.com facebokk.com facebokok.com faceboks.com facebol.com facebolk.com facebomok.com faceboo.com facebooa.com faceboob.comfaceboobok.com facebooc.com faceboock.com facebood.com facebooe.com faceboof.com facebooi.com facebooik.com facebooik.org facebooj.comfacebook-corp.comfacebook-covid-19.comfacebook-ebook.comfacebook-forum.comfacebook-hardware.comfacebook-inc.comfacebook-login.comfacebook-newsroom.comfacebook-newsroom.orgfacebook-pmdcenter.comfacebook-pmdcenter.netfacebook-pmdcenter.orgfacebook-privacy.comfacebook-program.comfacebook-studio.comfacebook-support.orgfacebook-texas-holdem.comfacebook-texas-holdem.net facebook.br facebook.ca facebook.cc facebook.comfacebook.design facebook.net facebook.hu facebook.in fecebook.net facebook.nl facebook.org facebook.se facebook.shop facebook.tv facebook.us facebook.wangfacebook123.orgfacebook30.comfacebook30.netfacebook30.orgfacebook4business.comfacebookads.com"facebookadvertisingsecrets.comfacebookatschool.comfacebookawards.comfacebookblueprint.netfacebookbrand.comfacebookbrand.net3/facebookcanadianelectionintegrityinitiative.comfacebookcareer.comfacebookcheats.comfacebookck.comfacebookclub.comfacebookcom.comfacebookconsultant.orgfacebookcoronavirus.comfacebookcovers.orgfacebookcredits.infofacebookdating.netfacebookdusexe.orgfacebookemail.comfacebookenespanol.comfacebookexchange.comfacebookexchange.netfacebookfacebook.comfacebookflow.comfacebookgames.comfacebookgraphsearch.comfacebookgraphsearch.infofacebookgroups.comfacebookhome.ccfacebookhome.comfacebookhome.infofacebookhub.com facebooki.comfacebookinc.comfacebookland.comfacebooklikeexchange.comfacebooklive.comfacebooklivestaging.netfacebooklivestaging.orgfacebooklogin.comfacebooklogin.infofacebookloginhelp.netfacebooklogs.comfacebookmail.comfacebookmail.tvfacebookmanager.infofacebookmarketing.info facebookmarketingpartner.com!facebookmarketingpartners.comfacebookmobile.comfacebookmsn.comfacebooknews.comfacebooknfl.comfacebooknude.comfacebookofsex.comfacebookook.comfacebookpaper.comfacebookpay.comfacebookphonenumber.netfacebookphoto.comfacebookphotos.comfacebookpmdcenter.comfacebookpoke.netfacebookpoke.orgfacebookpoker.infofacebookpokerchips.infofacebookporn.netfacebookporn.orgfacebookporno.netfacebookportal.com facebooks.comfacebooksafety.comfacebooksecurity.netfacebookshop.comfacebooksignup.netfacebooksite.netfacebookstories.comfacebookstudios.netfacebookstudios.orgfacebooksupplier.comfacebooksuppliers.comfacebookswagemea.comfacebookswagstore.comfacebooksz.comfacebookthreads.netfacebooktv.netfacebooktv.orgfacebookvacation.com facebookw.comfacebookworld.com facebool.com facebool.info facebooll.com faceboom.com faceboon.com faceboonk.comfaceboooik.com faceboook.com faceboop.com faceboot.com faceboox.com facebopk.com facebpook.com facebuk.com facebuok.com facebvook.com facebyook.com facebzook.comfacecbgook.com facecbook.com facecbook.org facecook.com facecook.org facedbook.com faceebok.com faceebook.com faceebot.com facegbok.com facegbook.com faceobk.com faceobok.com faceobook.com faceook.comfacerbooik.com facerbook.com facesbooc.comfacesounds.com facetook.com facevbook.com facewbook.co facewook.comfacfacebook.com facfebook.com fackebook.com facnbook.com facrbook.com facvebook.com facwebook.com facxebook.com fadebook.com faebok.com faebook.com faebookc.com faeboook.com faecebok.com faesebook.comfafacebook.com faicbooc.com fasebokk.com fasebook.com faseboox.com favebook.com faycbok.com @@ -9610,13 +10371,15 @@ fbhome.com fbidb.io  fbinc.comfbinnovation.comfbmarketing.c fbrpms.com  fbsbx.com  fbsbx.netfbsupport-covid.netfbthirdpartypixel.comfbthirdpartypixel.netfbthirdpartypixel.org  fburl.com fbwat.chfbworkmail.com fcacebook.com fcaebook.com fcebook.com fcebookk.comfcfacebook.comfdacebook.info feacboo.com feacbook.com feacbooke.com feacebook.com fecbbok.com fecbooc.com fecbook.com feceboock.com feceboox.com fececbook.com  feook.com ferabook.com fescebook.com fesebook.com ffacebook.com fgacebook.com ficeboock.com fmcebook.com fnacebook.com fosebook.com fpacebook.com fqcebook.com fracebook.com  freeb.comfreebasics.comfreebasics.net freebs.comfreefacebook.comfreefacebook.netfreefacebookads.netfreefblikes.comfreindfeed.comfriendbook.info friendfed.comfriendfeed-api.comfriendfeed-media.comfriendfeed.comfriendfeedmedia.com fsacebok.com fscebook.comfundraisingwithfacebook.comfunnyfacebook.orgfutureofbusinesssurvey.org gacebook.com gameroom.comgfacecbook.com groups.comhackerfacebook.comhackfacebook.comhackfacebookid.comhifacebook.info!howtohackfacebook-account.comhsfacebook.comhttpfacebook.comhttpsfacebook.comhttpwwwfacebook.com i.org internet.org klik.me liverail.com liverail.tvlogin-account.netmarkzuckerberg.commidentsolutions.commobilefacebook.commoneywithfacebook.com myfbfans.com newsfeed.com nextstop.comonline-deals.netopencreate.orgreachtheworldonfacebook.com rocksdb.orgshopfacebook.comsportsfacebook.comsportstream.comsupportfacebook.comterragraph.comthefacebook.comthefacebook.net thefind.comtoplayerserver.comviewpointsfromfacebook.comwhyfacebook.com worldhack.comwww-facebook.comwwwfacebok.comwwwfacebook.comwwwmfacebook.comzuckerberg.comzuckerberg.netfacebookwork.com -redkix.com workplace.comworkplaceusecases.comfbcdn-a.akamaihd.net!achat-followers-instagram.com#acheter-followers-instagram.com$ acheterdesfollowersinstagram.com!acheterfollowersinstagram.combookstagram.comcarstagram.comcdninstagram.comchickstagram.com ig.me  igcdn.com igsonar.com igtv.com imstagram.com imtagram.cominstaadder.cominstachecker.cominstafallow.cominstafollower.cominstagainer.com instagda.com instagify.cominstagmania.com instagor.cominstagram-brand.cominstagram-engineering.cominstagram-help.cominstagram-press.cominstagram-press.net instagram.cominstagramci.cominstagramcn.cominstagramdi.cominstagramhashtags.netinstagramhilecim.cominstagramhilesi.orginstagramium.cominstagramizlenme.cominstagramkusu.cominstagramlogin.cominstagramm.cominstagramn.cominstagrampartners.cominstagramphoto.cominstagramq.cominstagramsepeti.cominstagramtakipcisatinal.netinstagramtakiphilesi.cominstagramtips.cominstagramtr.com instagran.cominstagranm.com instagrem.com instagrm.cominstagtram.com instagy.cominstamgram.cominstangram.cominstanttelegram.cominstaplayer.net instastyle.tv instgram.com intagram.com intagrm.com intgram.comkingstagram.comlnstagram-help.comtheinstagramhack.comoninstagram.comonline-instagram.comonlineinstagram.comweb-instagram.netwwwinstagram.combizographics.coml-0005.dc-msedge.netl-0005.l-msedge.net  licdn.com linkedin.at linkedin.com lnkd.inlicdn.cn +redkix.com workplace.comworkplaceusecases.comfbcdn-a.akamaihd.net graph.instagram.com +ads)graph-fallback.instagram.com +ads!achat-followers-instagram.com#acheter-followers-instagram.com$ acheterdesfollowersinstagram.com!acheterfollowersinstagram.combookstagram.comcarstagram.comcdninstagram.comchickstagram.com ig.me  igcdn.com igsonar.com igtv.com imstagram.com imtagram.cominstaadder.cominstachecker.cominstafallow.cominstafollower.cominstagainer.com instagda.com instagify.cominstagmania.com instagor.cominstagram-brand.cominstagram-engineering.cominstagram-help.cominstagram-press.cominstagram-press.net instagram.cominstagramci.cominstagramcn.cominstagramdi.cominstagramhashtags.netinstagramhilecim.cominstagramhilesi.orginstagramium.cominstagramizlenme.cominstagramkusu.cominstagramlogin.cominstagramm.cominstagramn.cominstagrampartners.cominstagramphoto.cominstagramq.cominstagramsepeti.cominstagramtakipcisatinal.netinstagramtakiphilesi.cominstagramtips.cominstagramtr.com instagran.cominstagranm.com instagrem.com instagrm.cominstagtram.com instagy.cominstamgram.cominstangram.cominstanttelegram.cominstaplayer.net instastyle.tv instgram.com intagram.com intagrm.com intgram.comkingstagram.comlnstagram-help.comtheinstagramhack.comoninstagram.comonline-instagram.comonlineinstagram.comweb-instagram.netwwwinstagram.combizographics.coml-0005.dc-msedge.netl-0005.l-msedge.net  licdn.com linkedin.at linkedin.com lnkd.inlicdn.cn cn linkedin.cn cne122475.dscg.akamaiedge.netlicdn.cn.cdn20.comlinkedin.sc.omtrdc.net threads.netads-twitter.comcms-twdigitalassets.com periscope.tv pscp.tvt.co tellapart.com tweetdeck.com  twimg.com twitpic.com twitter.biz twitter.com twitter.jptwittercommunity.comtwitterflightschool.comtwitterinc.comtwitteroauth.comtwitterstat.us twtrdns.net  twttr.com  twttr.net  twvid.com vine.co x.com mvk.com userapi.com  vk-cdn.me vk-cdn.net vk-portal.net vk.cc vk.com  vk.design vk.link vk.me vkcache.com vkgo.app -vklive.appvkmessenger.comvkmessenger.app vkontakte.ruvkuseraudio.comvkuserlive.netvkuservideo.comvkuservideo.net 4everland.io c4rex.co cf-ipfs.comcloudflare-ipfs.comcrustwebsites.net  dweb.linkgateway.pinata.cloudipfs-gateway.cloudipfs.anonymize.comipfs.best-practice.seipfs.eternum.ioipfs.eth.aragon.network ipfs.fleek.co ipfs.io ipfs.lain.laipfs.runfission.com ipns.co jorropo.netnftstorage.link via0.com 9cdn.net9nation.com.au 9news.com.au 9now.com.aufreeviewplus.net.au +vklive.appvkmessenger.comvkmessenger.app vkontakte.ruvkuseraudio.comvkuserlive.netvkuservideo.comvkuservideo.net 4everland.io c4rex.cocrustwebsites.net  dweb.linkgateway.pinata.cloudipfs-gateway.cloudipfs.anonymize.comipfs.best-practice.seipfs.eternum.ioipfs.eth.aragon.network ipfs.fleek.co ipfs.io ipfs.lain.laipfs.runfission.com  ipfs.tech ipns.co jorropo.netnftstorage.link via0.com 9cdn.net9nation.com.au 9news.com.au 9now.com.aufreeviewplus.net.au mi9.com.au mi9cdn.com nine.com.aunineentertainment.com.aunineentertainmentco.com.auninemediaroom.com.auninemsn.com.austatic9.net.au yourtv.com.au9to5google.com 9to5mac.com9to5terminal.com 9to5toys.com dronedj.com electrek.cospaceexplored.com afp.com afpforum.com ajplus.net aljazeera.com aljazeera.netpalestineremix.comsarajevopodopsadom.comsrebrenica360.com syhacked.com @@ -9624,7 +10387,7 @@ ajplus.net aljazeera.com aljazeera.netpalestineremix.comsa apnews.comappledaily.comappledaily.com.hkappledaily.com.tw appledaily.hkapplefruity.comapplehealth.com.hk atnext.combestmallawards.com deluxe.com.hk eracom.com.tw next.hknextdigital.com.hknextdigital.com.twnextfilm.com.hknextmag.com.tw nextmedia.comnextmedia.com.tw nextmgz.comnextplus.com.hk nexttv.com.twnextwork.com.hknextwork.com.tw nextwork.hk nextwork.tw nxtdig.com.hk nxtdig.com.tw omoplanet.com privilege.hk privilege.tw sharpdaily.tw tomonews.nettwnextdigital.com aiasahi.jp asagaku.com  asahi.com asahicom.jpasakonet.co.jpnikkansports.comasahishimbun.sc.omtrdc.netbbcbbc-reporting-api.app  bbc.co.uk bbc.com -bbc.in +bbc.inbbc.mp-pxcdn.com bbc.net.ukbbcfmt.s.llnwi.net bbci.co.ukbbcmedia.co.ukbbcpersian.combbcverticals.com bidi.net.uk!aod-pod-uk-live.akamaized.net!as-dash-uk-live.akamaized.net as-hls-uk-live.akamaized.net!ve-dash-uk-live.akamaized.net%!ve-uhd-push-uk-live.akamaized.net"vod-dash-uk-live.akamaized.net"vod-dash-ww-live.akamaized.net!vod-hls-uk-live.akamaized.net!vod-sub-uk-live.akamaized.net#vod-thumb-uk-live.akamaized.net#vod-thumb-ww-live.akamaized.net&"vs-cmaf-push-uk-live.akamaized.net'#vs-cmaf-pushb-ww-live.akamaized.net%!vs-hls-push-uk-live.akamaized.net&"vs-hls-pushb-uk-live.akamaized.net  bloomberg bbgevent.com bbhub.io bbthat.com bgov.com bloomberg.cnbloomberg.co.jpbloomberg.co.kr bloomberg.combloomberg.com.br bloomberg.fm bloomberg.tvbloombergapps.combloombergarcade.combloombergbeta.combloombergbna.combloombergbreakaway.combloombergbriefs.combloombergchina.combloombergenvironment.combloombergforeducation.combloomberggovernment.combloombergindices.combloombergindustry.combloomberglabs.combloomberglaw.combloomberglive.combloomberglp.combloombergmedia.combloombergnext.combloombergpolarlake.combloombergprep.combloombergquint.combloombergradio.combloombergsef.combloombergspace.combloombergstatus.combloombergsurvey.combloombergtax.combloombergtax1.combloombergtaxtech.com!bloombergtradingchallenge.combloombergtv.mnbloombergvault.combloombergview.comblpcareers.com blpevents.comblpprofessional.com bmia.org bnef.combusinessweek.combusinessweekmag.com bwbx.io citylab.com gotraffic.netlondonmithraeum.comneweconomyforum.comnewenergyfinance.comquicktake.videotechatbloomberg.com tictoc.video  boxun.combowenpress.com @@ -9635,15 +10398,13 @@ cbsimg.netcbsinteractive.comcbsistatic.com cbsivideo.com c viacbs.com viacom.com viacomcbs.comviacomcbspressexpress.com paramount.com amlg.iocbsaavideo.commtvnservices.comparamountplus.compplusstatic.comcbsi.live.ott.irdeto.com%!cbsplaylistserver.aws.syncbak.comcbsservice.aws.syncbak.comlink.theplatform.com cnbc.com cnbcfm.com -nbcuni.comnbcudigitaladops.com cnn.com +nbcuni.comnbcudigitaladops.com +cnbeta.com cnbeta.com.tw cnbetacdn.com cnn.com cnn.io cnn.it cnnarabic.com cnnlabs.com cnnmoney.ch cnnmoney.comcnnmoneystream.comcnnpolitics.com  anm.co.uk  dailym.aidailymail.co.uk dailymail.comdailymail.com.au dailymail.dkdailymailonline.comdmgmediaprivacy.co.ukmailhealth.commailonline.co.ukmailonline.commailonsunday.co.ukmailonsunday.ie metro.co.uk mol.imthisismoney.co.uk thismon.ee -dw.comdeutschewelle.h-cdn.com economist.comeconomistgroup.comeconomistgroupcareers.com eiu.com dajiyuan.com dajiyuan.eu edninfo.com epoch.cloud epoch.org.il epochbuy.com epochcar.com epochhk.com epochmall.comepochmediagroup.com epochshop.comepochstories.com epochtime.comepochtimes-bg.comepochtimes-romania.com epochtimes.bgepochtimes.co.ilepochtimes.co.krepochtimes.co.ukepochtimes.comepochtimes.com.auepochtimes.com.brepochtimes.com.sgepochtimes.com.twepochtimes.com.ua epochtimes.cz epochtimes.de epochtimes.eu epochtimes.fr epochtimes.it epochtimes.jp epochtimes.nl epochtimes.pl epochtimes.ru epochtimes.seepochtimeshk.orgepochtimestr.com epochweek.comepochweekly.com erabaru.net -etviet.comlagranepoca.com minghui.org ntd.com -ntd.tv  ntdca.com -ntdimg.com ntdtv.ca ntdtv.co.kr  ntdtv.com ntdtv.com.tw ntdtv.jp ntdtv.kr  ntdtv.org ntdtv.ru ntdtv-dc.com ntdtvla.com  ntdvn.compersianepochtimes.com renminbao.comtheepochtimes.comtheepochtimessubscribe.comvelkaepocha.cz +dw.comdeutschewelle.h-cdn.com economist.comeconomistgroup.comeconomistgroupcareers.com eiu.com forbes.com forbesimg.comfoxfox-corporation.com fox-news.com fox.com fox.tv fox10.tv fox10news.comfox10phoenix.com  fox11.comfox13memphis.com fox13news.com  fox23.comfox23maine.com fox247.com  fox247.tv  fox26.comfox26houston.comfox28media.com  fox29.comfox2detroit.com fox2news.com  fox32.comfox32chicago.comfox35orlando.comfox38corpuschristi.com fox42kptm.com  fox46.comfox46charlotte.com  fox47.com fox49.tv fox4news.com fox51tns.netfox5atlanta.com @@ -9673,7 +10434,7 @@ ftv.com.twftvnews.com.twgannett-cdn.com gannett.comgannet gclubs.com  gettr.com gfashion.com  gnews.org gtv.org gtv1.orggtvmediagroupfairfund.com  guo.media  gwiki.net  gwins.orghimalaya.exchange hpayshop.com nfsc.global nfscdict.comnfscofficial.com rexcha.comrolfoundation.orgrolsociety.org!yiqiedoushiganggangkaishi.org!himalaya-exchange.zendesk.comapexprint.com.hk eprc.com.hk etbc.com.hk etnet.com.cn cn etnet.com.hketnetchina.com.cn -cnetpress.com.hkettrade.com.hk etwealth.com hket.com hketgroup.comulifestyle.com.hkumagazine.com.hk hkopentv.com fantv.hkhuffingtonpost.cahuffingtonpost.co.ukhuffingtonpost.co.zahuffingtonpost.comhuffingtonpost.com.auhuffingtonpost.com.mxhuffingtonpost.dehuffingtonpost.eshuffingtonpost.frhuffingtonpost.grhuffingtonpost.inhuffingtonpost.ithuffingtonpost.jphuffingtonpost.kr huffpost.comhuffpostarabi.comhuffpostbrasil.comhuffpostmaghreb.com banned.video infowars.cominfowarsmedia.combusinessinsider.co.zabusinessinsider.combusinessinsider.com.aubusinessinsider.com.plbusinessinsider.debusinessinsider.esbusinessinsider.frbusinessinsider.inbusinessinsider.jpbusinessinsider.mxbusinessinsider.mybusinessinsider.nlbusinessinsider.sginsider-intelligence.com insider.cominsiderintelligence.comes-visiontimes.comkannewyork.comkanzhongguo.comkanzhongguo.eusecretchina.com trithucvn.net trithucvn.org vct.newsvisiontimes.comvisiontimes.devisiontimes.frvisiontimes.itvisiontimes.netvisiontimesjp.com  vtvan.comwatchinese.com 47gyosei.jp  47news.jp kyodo-d.info +cnetpress.com.hkettrade.com.hk etwealth.com hket.com hketgroup.comulifestyle.com.hkumagazine.com.hk hkopentv.com fantv.hkhuffingtonpost.cahuffingtonpost.co.ukhuffingtonpost.co.zahuffingtonpost.comhuffingtonpost.com.auhuffingtonpost.com.mxhuffingtonpost.dehuffingtonpost.eshuffingtonpost.frhuffingtonpost.grhuffingtonpost.inhuffingtonpost.ithuffingtonpost.jphuffingtonpost.kr huffpost.comhuffpostarabi.comhuffpostbrasil.comhuffpostmaghreb.com banned.video infowars.cominfowarsmedia.combusinessinsider.co.zabusinessinsider.combusinessinsider.com.aubusinessinsider.com.plbusinessinsider.debusinessinsider.esbusinessinsider.frbusinessinsider.inbusinessinsider.jpbusinessinsider.mxbusinessinsider.mybusinessinsider.nlbusinessinsider.sginsider-intelligence.com insider.cominsiderintelligence.com 47gyosei.jp  47news.jp kyodo-d.info kyodo-d.jpkyodoimages.jp kyodonews.jp kyodonews.net newsmart.jp nna.jpfreedomplatform.tv londonreal.tv ltn.com.tw yes123.com.tw machigoto.jpmainichi-athletepartners.jp mainichi.jpmainichibooks.com meijinsen.jp mirailab.techmottainai.infonewsgawakaru.comsponichi.co.jpweekly-economist.commalayalamanorama.com manorama.commanoramanews.commanoramaonline.commanoramayearbook.inonmanorama.com radiomango.fm  theman.in @@ -9702,7 +10463,7 @@ sankei.com  sankei.jp sankeibiz.jp sankeishop.jp sanspo.comseasidestory.tokyoseiron-sankei.com tvnaviweb.jp zakzak.co.jp scmp.com i-scmp.com setn.com settv.com.twsingtaonewscorp.com sing68.com singtao.comsingtaobooks.com singtaola.comsingtaousa.comstheadline.comsingtaoopo.comhkheadline.comthestandard.com.hkeastweek.com.hkeasttouch.com.hkbastillepost.com -eduplus.hkheadlinejobs.hkjobmarket.com.hkmy-magazine.mepcmarket.com.hksky sky.com skyassets.comskyoceanrescue.comskyoceanrescue.deskyoceanrescue.it skysports.com skysports.fr skysports.ieskysportsonline.comskysportsracing.com bayvoice.net ozvoice.org sohcradio.com sohfrance.orgsoundofhope.eusoundofhope.krsoundofhope.orgwanokokorosoh.com theguardiandev-guardianapis.comdev-theguardian.com +eduplus.hkheadlinejobs.hkjobmarket.com.hkmy-magazine.mepcmarket.com.hksky sky.com skyassets.comskyoceanrescue.comskyoceanrescue.deskyoceanrescue.it skysports.com skysports.fr skysports.ieskysportsonline.comskysportsracing.com theguardiandev-guardianapis.comdev-theguardian.com gu-web.netguardianapis.comguardianapps.co.uk guim.co.ukguimcode.co.uktheguardian.comtheguardiandns.comtheinitium.com  init.shop thetype.cloud cn thetype.comtypeisbeautiful.com reut.rs reuters.com @@ -9725,7 +10486,6 @@ zaobao.com zaobao.com.sg  zaobao.sg bgr.inbollywoodlife.comcareerfundas.comcricketcountry.com dnai.in dnaindia.com earngeek.com ekhindi.com ind.sh  india.comindiancolleges.com itripto.com  oncars.in prepsure.comthehealthsite.com wionews.com yo1health.com zee.com zeebiz.comzeeentertainment.com zeenews.com"zeenews-fonts.s3.amazonaws.com -cnbeta.com cnbetacdn.com 881903.com am730.com.hkamericasvoice.newsappleinsider.com  axios.com bbgwatch.com bnext.com.tw breitbart.combusinessfocus.iobusinesstoday.com.twbusinessweekly.com.twcaijinglengyan.comchinadecoding.comchinadigitaltimes.netchinaeconomicreview.comcmmedia.com.tw cna.com.tw  cnyes.comcoolloud.org.tw cup.com.hk  cw.com.tw d100.net @@ -9740,11 +10500,15 @@ socrec.org storm.mgtaipeitimes.comtaiwannews.com.tw techne upmedia.mgvjmedia.com.hk warroom.orgwashingtonpost.com wealth.com.tw weiyuksj.com wenzhao.ca  wired.com ydn.com.twyibaochina.com youlucky.com zerohedge.com zoomingin.tvpugpig-dev.compugpig-stage.com -pugpig.com archive.orgarchive-it.orgopenlibrary.org ccstatic.orgcreativecommons.orgcreativecommons.engineeringlicensebuttons.net csis.orgcsis-prod.s3.amazonaws.comemojipedia.orgworldemojiawards.comworldemojiday.com xn--yt8h.la nist.gov time.gov openmaps.orgopenstreetmap.comopenstreetmap.netopenstreetmap.orgopenstreetmaps.org osm.orgosmfoundation.orgstateofthemap.comstateofthemap.orgrolfoundation.orgrolsociety.org aomedia.org  atypi.org -change.org f-droid.orgglobalsecurity.org iana.org ietf.org itu.int opte.org  smpte.org +pugpig.com  4pcdn.org +4plebs.orgarchive-it.org archive.org +archive.ph archive.todayopenlibrary.org ccstatic.orgcreativecommons.orgcreativecommons.engineeringlicensebuttons.net csis.orgcsis-prod.s3.amazonaws.comemojipedia.orgworldemojiawards.comworldemojiday.com xn--yt8h.la f-dro1d.org f-droid.com f-droid.org +fdroid.org nist.gov time.gov openmaps.orgopenstreetmap.comopenstreetmap.netopenstreetmap.orgopenstreetmaps.org osm.orgosmfoundation.orgstateofthemap.comstateofthemap.org +ppy.shrolfoundation.orgrolsociety.org aomedia.org  atypi.org +change.orgglobalsecurity.org iana.org ietf.org itu.int opte.org  smpte.org un.org -w3.org who.int wto.org -18comic.cc18comic.company 18comic.org 18comic.vip +w3.org who.int wto.org18comic-god.cc18comic-god.club18comic-god.xyz +18comic.cc18comic.company 18comic.org 18comic.vip jmcomic.ltd jmcomic.me jmcomic.mobi jmcomic.moe jmcomic1.city jmcomic1.me jmcomic1.mobi jmcomic2.moe 54647.global 54647.io 54647.online  54647.org anon-v.com anon-v.lol avmoo.click  avmoo.com  tellme.pw bdsm123.xyz bondagesm.xyz bili2.cc bili888.com bili999.com($(^|\.)bilibili3(0[1-9]|1[0-2])\.xyz$ boboporn.com boboporn.net @@ -9754,14 +10518,14 @@ boylove.cc boylove.live boylove1.cc boyloves.cc fuhouse.club btt804.com btt904.com bttzyw.com -bttzyw.net camwhores.tvcamwhores.video cavporn.comcavporn.github.io#(^|\.)cav1(0[2-9]|1[0-9])\.com$chatwhores.comchatwhores.netchatwhores.orgchatwhores.sex chatwhores.tv c4slive.comclips4sale.comvideos4sale.com  dmm.co.jp +bttzyw.net camwhores.tvcamwhores.video cavporn.comcavporn.github.io#(^|\.)cav1(0[2-9]|1[0-9])\.com$chatwhores.comchatwhores.netchatwhores.orgchatwhores.sex chatwhores.tv c4slive.comclips4sale.comvideos4sale.com cuinc.oen.tw cuinc.tw  dmm.co.jp dmmrex.com e-hentai.org ehgt.org ehtracker.org -ehwiki.org exhentai.org hath.networkhentaiathome.nethentaiverse.orgero-labs.cloud ero-labs.com ero-labs.netero-labs.online ero-labs.site erolabs.cloud erolabs.com erolabs.game erolabs.neterolabs.online  fansta.me-)misa-prod.s3.ap-northeast-1.amazonaws.com hentaivn.de hentaivn.la hentaivn.net htvncdn.net heydoga.com  heyzo.comcuntempire.com cuntwars.comdirtyleague.com faptitans.comhooligapps.comslotbitches.com smutstone.comtownofsins.comillusion.co.jp illusion.jp  acgcf.com  acgdg.com  acgdv.com acgfabu.com +ehwiki.org exhentai.org hath.networkhentaiathome.nethentaiverse.orgero-labs.cloud ero-labs.com ero-labs.netero-labs.online ero-labs.site erolabs.cloud erolabs.com erolabs.game erolabs.neterolabs.online  fans66.tw fansking.tw  fansta.me-)misa-prod.s3.ap-northeast-1.amazonaws.com2023aga.oen.tw aga-expo.comcosfans-tw.com hentaivn.de hentaivn.la hentaivn.net htvncdn.net heydoga.com  heyzo.comcuntempire.com cuntwars.comdirtyleague.com faptitans.comhooligapps.comslotbitches.com smutstone.comtownofsins.comillusion.co.jp illusion.jp  acgcf.com  acgdg.com  acgdv.com acgfabu.com acgfbw.com acgvipss.com  acgwr.com aishegw.com clincha.cnfabuyemian.comillusion111.comillusionas.comillusionchn.com illusionfb.cnillusiongw.com illusionh.com illusionl.comillusionn2.comillusionn3.comillusionn4.comillusionn5.comillusionxz.com illusiony.comillusionze.com illusnoi.com isgame365.cc isheppc.com lliusno.comnoisullifb.comwnoaissulli1.com yiqilai99.cn zzycdz.com cdnlab.live jable.tvmushroomtrack.com javbus.com javbus22.com  javcdn.cc javcc.cc  javcc.com  javdb.com jdbimgs.com jdbstatic.com x18r.co x18r.com z18r.co z18r.com javwide.com -javwide.tv +javwide.tv jkf.net jkface.net jkforum.net  jr24h.com jvid.com johren.games johren.net hkporn.net @@ -9778,91 +10542,36 @@ rdtcdn.com  tube8.com tube8.frextremetube.comkeezmovies.com ypncdn.com  babes.com men.com porniq.com pornmd.com seancody.comthumbzilla.com twistys.com -webcams.tv whynotbi.com moxing.mobi moxing.news netflav.com netflav1.com nudevista.com nudevista.es nudevista.net nudevista.vip  bikaa.xyz  bikac.xyz bikaios.xyzmanhuabika.com -picacn.xyz picacomic.com picacomic.xyz wikawika.xyz pornpros.compornprosnetwork.comshireyishunjian.comyingpianqu.com jhxl.orgxn--sgt856gbjl.cc porndude2.comporndudecasting.com pornsites.compornwebmasters.comtheporndude.cctheporndude.comtheporndude.vip18eighteen.com40somethingmag.com50plusmilfs.com60plusmilfs.com analqts.comashleysageellison.comautumn-jade.combeascoremodel.combigboobbundle.combigboobspov.combigtitangelawhite.combigtithitomi.combigtithooker.combigtitterrynova.combigtitvenera.comblackandstacked.combonedathome.combootyliciousmag.combustyangelique.combustyarianna.combustydanniashe.combustydustystash.combustyinescudna.combustykellykay.combustykerrymarie.combustylornamorgan.combustymerilyn.combustyoldsluts.combustysammieblack.comcherrybrady.comchloesworld.comchristymarks.comcock4stepmom.comcodivorexxx.comcreampieforgranny.comcrystalgunnsworld.comdaylenerio.comdesiraesworld.comdianepoppos.comeboobstore.comevanottyvideos.comfeedherfuckher.comflatandfuckedmilfs.comgetscorecash.comgrannygetsafacial.comgrannylovesbbc.comgrannylovesyoungcock.comhomealonemilfs.comibonedyourmom.comifuckedtheboss.comjessicaturner.comjoanabliss.comjuliamiles.comjuliamiles.comkarinahart.comkarlajames.comleannecrowvideos.com +webcams.tv whynotbi.com moxing.mobi moxing.news netflav.com netflav1.com netflav5.com nudevista.com nudevista.es nudevista.net nudevista.vip  bikaa.xyz  bikac.xyz bikaios.xyzmanhuabika.com picacgp.com picacgy.com +picacn.xyz picacomic.com picacomic.xyz wikawika.xyz playboy.complayboy.com.uk pornpros.compornprosnetwork.com sehuatang.net sehuatang.orgshireyishunjian.comyingpianqu.com jhxl.orgxn--sgt856gbjl.cc spankbang.comspankbang.party  sb-cd.com 5w.ag swag-live.co  swag.live porndude2.comporndudecasting.com pornsites.compornwebmasters.comtheporndude.cctheporndude.comtheporndude.vip18eighteen.com40somethingmag.com50plusmilfs.com60plusmilfs.com analqts.comashleysageellison.comautumn-jade.combeascoremodel.combigboobbundle.combigboobspov.combigtitangelawhite.combigtithitomi.combigtithooker.combigtitterrynova.combigtitvenera.comblackandstacked.combonedathome.combootyliciousmag.combustyangelique.combustyarianna.combustydanniashe.combustydustystash.combustyinescudna.combustykellykay.combustykerrymarie.combustylornamorgan.combustymerilyn.combustyoldsluts.combustysammieblack.comcherrybrady.comchloesworld.comchristymarks.comcock4stepmom.comcodivorexxx.comcreampieforgranny.comcrystalgunnsworld.comdaylenerio.comdesiraesworld.comdianepoppos.comeboobstore.comevanottyvideos.comfeedherfuckher.comflatandfuckedmilfs.comgetscorecash.comgrannygetsafacial.comgrannylovesbbc.comgrannylovesyoungcock.comhomealonemilfs.comibonedyourmom.comifuckedtheboss.comjessicaturner.comjoanabliss.comjuliamiles.comjuliamiles.comkarinahart.comkarlajames.comleannecrowvideos.com legsex.comlinseysworld.commegatitsminka.commickybells.commilfbundle.commilfthreesomes.com milftugs.commillymarks.commommystoytime.comnataliefiore.comnaughtyfootjobs.comnaughtymag.comnaughtytugs.comnicolepeters.comoldhornymilfs.compickinguppussy.com pornloser.compornmegaload.comreneerossvideos.comsarennasworld.comscoreclassics.comscoregroup.com scoreland.comscoreland2.com scorepass.com scoretv.tvscoreuniverse.comscorevideos.comsharizelvideos.comsilversluts.comstacyvandenbergboobs.comsusiewildin.comtawny-peaks.comtiffany-towers.comtitsandtugs.comtnatryouts.comvaloryirene.com xlgirls.comyourmomlovesanal.comyourmomsgotbigtits.comyourwifemymeat.comtokyo-tosho.nettokyotosho.info tokyotosho.setruyen-hentai.comtruyen-hentai.frtruyen-hentai.ru  uug22.com  uug23.com  uug25.com  uug26.com  uug27.com  uuk28.com  uun78.com  uun79.com  uun82.com  uun83.com  uun85.com  uun86.com  uun87.com  uun89.com  uun92.com  uun93.com  uun95.com  uun96.com  uun97.com  uun98.com  uun99.com  uux68.com#collector.xhamster.com ads xhamster.com xhamster.desi xhamster.xxxxhamster18.comxhamster18.desixhamsterlive.com  xhcdn.comwidgets.stripst.com avstar01.me avstar02.me avstar03.me avstar04.com avstar04.me avstar05.me avstar06.me avstar07.com avstar07.me avstar09.com avstar09.me avstar1.com avstar2.com avstar3.com avstar4.com avstar5.com avstar6.com avstar8.com avstar9.com xnxx-cdn.com xnxx.com xnxx.net xnxx.tv  xnxx3.comxvideos-cdn.com xvideos.comyjcontentdelivery.com youjizz.com  doure.net kuaipa.net miaopa.net yunlaopo.cc yunlaopo.com yunlaopo.net -168sex.top  a7sex.com ctotires.comferryclean.comzhimeishe888.com -dmthin.com -dmthus.com -dmtiny.com -dmtone.com -dmtoss.com -dmugly.com -dmunit.com -dmupon.com -dmurge.com -dmuser.com -dmvary.com -dmvast.com -dmvery.com -dmvote.com -dmwage.com -dmwait.com -dmwake.com -dmwant.com -dmwarm.com -dmwarn.com -dmwash.com -dmweak.com -dmwhat.com -dmwhom.com -dmwife.com -dmwild.com -dmwing.com -dmwipe.com -dmwish.com -dmword.com  ysact.com  ysage.com  ysaim.com  ysand.com  ysbad.com  ysbed.com -yshide.com -yshigh.com -yshill.com -yshole.com -ysholy.com -yshour.com -yshurt.com -ysinto.com -ysiron.com -ysjail.com -yslawn.com -ysleaf.com -ysleft.com -ysless.com -yslose.com -ysloss.com -yslost.com -ysloud.com -ysluck.com -yslung.com -ysmale.com -ysmany.com -ysmass.com -ysmeal.com -ysmeat.com -ysmeet.com -ysmelf.com -ysmere.com -ysmuch.com -ysmust.com  ysput.com  ysraw.com  ysrow.com  ysrub.com  ysset.com  yssir.com  ystry.com  ysvia.com  yswet.com adultporn 02weqj32.com -04647.club0cgdklr5sfwj.com 0dzn.com 0plkijj.vip 0xxx.ws100bucksbabes.com 100shmar.net101boyvideos.com101tubeporn.com -101xxx.xyz  10bet.com 10musume.com 110xnxx.com  114av.xyz  11jav.com +168sex.top  a7sex.com ctotires.comferryclean.comzhimeishe888.com adultporn 02weqj32.com +04647.club0cgdklr5sfwj.com 0plkijj.vip 0xxx.ws100bucksbabes.com101boyvideos.com101tubeporn.com +101xxx.xyz  10bet.com 10c10qoo.one 10musume.com 110xnxx.com1111mod-tube.buzz 1111mode.xyz1111modpo.info  114av.xyz +119474.xyz  11jav.com  123bin.cc 123sex.top 123videos.tv -128100.xyz  132288.cc141hongkong.com +126728.net +128100.xyz 13mei13.top +140033.xyz +141-hk.com141hongkong.com 141jav.com  141jj.com 159i.com -161sex.com 16885858.com 16fhgdty.xyz 16honeys.com  171xx.com 177picyy.com  179na.com 17mimei.club 17mimei.com18-teen-porn.com18-teen-xxx.com188channel.com 18acg.us18av.mm-cg.com 18av.pro  18avx.com 18commic.com 18doujin.com18doujinshi.xyz 18exgfs.com 18h.mm-cg.com18hmanga.click 18hmanga.com 18insta.com +161sex.com 16885858.com 16fhgdty.xyz 16honeys.com 170.icu  171xx.com 177picyy.com  179na.com 17lu.xyz 17mimei.club 17mimei.com 17supxxx.com18-teen-porn.com18-teen-xxx.com188channel.com 18acg.us18av.mm-cg.com 18av.pro  18avx.com 18commic.com 18doujin.com18doujinshi.xyz 18exgfs.com  18fby.com 18h.mm-cg.com +18h.tv18hmanga.click 18hmanga.com 18insta.com 18j.tv  18jms.com 18novel.xyz18porncomic.com -18porno.tv 18pornsex.com -18push.com 18qt.com18schoolgirlz.me  18sex.org -18tube.xxx -18yiren.tv 1bigclub.com1bokeponline.top1classtube.com -1jjdg2.vip -1jsa22.vip  1pondo.tv 1pornlist.com 1vwapi4d.xyz1watchmygf.com 1xbet.cm 1xbet.co.ke 2022.dev  21hub.com21naturals.com 2371tom.com  249dw7.cn +18porno.tv +18push.com 18qt.com  18sex.org +18tube.xxx  18ww.life +18yiren.tv 191porn.com +1992qq.xyz 1bigclub.com1bokeponline.top1classtube.com +1jjdg2.vip  1pondo.tv 1pornlist.com1watchmygf.com 1xbet.cm 1xbet.co.ke 2019baidu.xyz21heise360dh.cc  21hub.com21naturals.com 21vv.cc 2371tom.com  249dw7.cn 24hjav.com 24porn.com -24porn.pro 258porn.com 265sdwe3.com -2789av.com2adultflashgames.com 2beeg.me  2bit8.com +24porn.pro 265sdwe3.com +2789av.com 27mmwmmw.top2adultflashgames.com 2beeg.me  2bit8.com 2ch.hk  2chav.com  2dgen.com 2gayboys.com30plusgirls.com 32bm.cc 35s4.com 365buymy.com 36717.info 3789av.com 39group.info3animalsextube.com 3arabporn.com 3d-comics.com 3d-toon.com @@ -9873,202 +10582,214 @@ ysmust.com  ysput.com  ysraw.com  ysrow.com  ysrub.com  ysse 445gei.com 445jun.com 445nan.com 4550.fun  4club.com 4ertik.live -4ertik.one  4f1v1.top 4greedy.com +4ertik.one 4greedy.com 4hu.tv 4kporn.xxx 4ksex.me 4kup.net 4pig.com  4porn.com 4porn4.com  4tube.com 4tubefree.net 4u4c.com 500caocao.com 50dh.app  51cg1.com  51dh.site 51luoli.info 51mh.app 51pincha.cc 520aa.tv 520avtv.com 5278.cc 52av.be 52av.com 52av.one 52fuliji.cc 52hyse.com  531tr.com -55dndn.com  568xe.com +55dndn.com 567321.online  568xe.com 58avgo.com 592r.com 59mvmv.com 5fang.cc 5mb48g.com 5mo.fun 5q5zu9f1.me 6-ar.com 61jxbs42.xyz 62fh1bnj.me 634.tv -66wwmm.com 67id.com 67maoab.com69-sexgames.com  69bag.xyz 69femdom.com  69flv.com 69games.xxx69gayporno.com -69loli.com 69luolie.com 69story.com 69tubesex.com 69vj.com 69xporn.com 69xx.one 69xx560.xyz -6arabs.com6asianporn.com 6e8xr2gk.me6japaneseporn.com 6kea.com 6mature9.com  6neek.com 6sextube.com +66wwmm.com 67maoab.com69-sexgames.com 69av.one  69bag.xyz 69dys.pw 69femdom.com  69flv.com 69games.xxx69gayporno.com69hongdq6.buzz69hongdq7.buzz +69loli.com 69luolie.com 69re.net 69story.com 69tubesex.com 69vj.com 69xporn.com 69xx.one 69xx560.xyz +6arabs.com 6e8xr2gk.me6japaneseporn.com 6kea.com 6mature9.com  6neek.com 6sextube.com 6twseb.com6xxxvideos.com 720video.tv  721av.com  748av.com 75m.co 7719.me 777xporn.com 77maott.com 7mm.tv 7mmtv.sx 7mmtv.tv -7tb.cc  8111y.top 81jia.tv -82mvmv.com 85st.com +7tb.cc  8111y.top 81jia.tv 81tower.com +82mvmv.com 85tube.com 8664av.com -88gals.com  88kkn.com 88square.com -89.com  8949.voto 8kcosplay.com8kpornvids.com +88gals.com  88kkn.com 88manhua.top 88square.com +89.com 8kcosplay.com8kpornvids.com 8muses.com  8muses.io -8muses.xxx 8teenxxx.com8thstreetlatinas.com 8xxx.net90seconds.asia 91avfuli.com 91cy.app  91dy.club -91fans.org 91gay.me 91jinman.com 91md.me 91moxiong.com 91oo.xyz 91porn.best -91porn.com 91porn.work 91porny.com 91qk41rf.com 91rb.com 91rb.net 91se.fun 91sesex.xyz  91sew.xyz 91tv.tw 920share.com  921bb.com  922tp.com 941tube.com 9550.fun 97dounai.top 98916.tv  99quse.cc 99re.com 99thz.cc  99thz.com  9cao9.com 9ccms.me +8muses.xxx 8teenxxx.com8thstreetlatinas.com 8xxx.net90seconds.asia 91avfuli.com 91beiyong.com 91cy.app  91dy.club +91fans.org 91gay.me 91jinman.com 91md.me 91moxiong.com 91oo.xyz91pornplus.com 91porny.store 91qk41rf.com 91quanji.com 91rb.com 91rb.net 91se.fun 91sesex.xyz  91sew.xyz 91sew40.buzz 91vhome.com 920share.com  921bb.com  922tp.com  92hm.life 92hm.top 941tube.com +9527.rocks 9550.fun 978.life 97dounai.top  99quse.cc 99re.com 99thz.cc  99thz.com  9cao9.com 9hentai.ru -9hentai.to 9hentaiz.com 9xav.cc +9hentai.to 9hentaiz.com 9k6v4y.cyou 9tak-nav.buzz 9xav.cc 9xlove.xyz 9zipai.net a-hentai.tv a-teenz.com a1av.xyz -aa1141.com -aa1142.com -aaapp.cyou aabb1802.com aabb1803.com  aadmv.com aalah.me aavs.xyzabbywintersfree.com abclider.comabellalist.com abigass.comaboutporno.netabsoluporn.comabsolutewhores.com!acasadasbrasileirinhas.com.br acces-vod.comacgnmanhua.com -acgww.cyou acjj.net ad69.comadanaatikhaber.com  adbkm.comadorable-teens.net adorevids.com84adult-doujin-free-information-bureau.officialblog.jp adult-h.comadult-home-videos.comadult-list.comadult-sex-games.comadult-web-site.netadult.contents.fc2.comadult.toonsearch.netadult3dcomics.comadult3dfantasycomics.comadult3dporno.comadult3dtoons.comadult789.futoka.jp"adultartlinks.supertop-100.comadultartsites.com adultbay.orgadultblogranking.comadultblogtoplist.comadultcamslover.comadultdeepfakes.comadultdvdmarketplace.comadultdvdtalk.comadultempire.com adultepic.comadulterfree.com adulters.orgadultexpo.com.twadultfilmdatabase.comadultfreex.comadultfriendfinder.comadultgamereviews.comadultgames.games adultgames.meadultgames18.comadultgamesapk.comadultgamescollector.comadultgameson.comadultgamesportal.comadultgamestop.comadultgamingroom.com adultgeek.net adulti01.comadultinfojpn.com adultism.comadultlister.comadultmagazinespdf.com -adulto.vipadultpornvideos.netadultrental.comadultsexgame.bizadultsexgames.bizadultsextoys.com adulttime.comadulttoontube.comadultvideodump.comadultvideotop.comadultvirtualworlds.net aebn.comafappyending.comaffect3dstore.com aflamporn.com aflamsex.netaflamsexhd.com afriboyz.com aga-expo.com agag.tw  agzy1.com  ah-me.comahcathyxxx.com ahegao.online ahentaitv.comahorsecock.comahpornogratuit.comahpornotube.comahsexfilme.comahswingerporno.com +aa77kk.com +aaapp.cyou aabb1802.com aabb1803.com  aadmv.com aalah.me aavs.xyzabbywintersfree.com abclider.comabellalist.com abgsp1.buzz abigass.comaboutporno.netabsoluporn.comabsolutewhores.com!acasadasbrasileirinhas.com.br acces-vod.comacgnmanhua.com +acgww.cyou acjj.net ad69.comadanaatikhaber.com  adbkm.com adorevids.com  adporn.cc adpornu.xyz84adult-doujin-free-information-bureau.officialblog.jp adult-h.comadult-home-videos.comadult-list.comadult-sex-games.comadult-web-site.netadult.contents.fc2.comadult.toonsearch.netadult3dcomics.comadult3dfantasycomics.comadult3dporno.comadult3dtoons.comadult789.futoka.jp"adultartlinks.supertop-100.comadultartsites.com adultbay.orgadultblogranking.comadultblogtoplist.comadultcamslover.comadultclinic.jpadultdeepfakes.comadultdvdmarketplace.comadultdvdtalk.comadultempire.com adultepic.comadulterfree.com adulters.orgadultexpo.com.twadultfilmdatabase.comadultfreex.comadultfriendfinder.comadultgamereviews.comadultgames.games adultgames.meadultgames18.comadultgamesapk.comadultgamescollector.comadultgameson.comadultgamesportal.comadultgamestop.comadultgamingroom.com adultgeek.net adulti01.comadultinfojpn.com adultism.comadultlister.comadultmagazinespdf.com +adulto.vipadultpornvideos.netadultrental.comadultsexgame.bizadultsexgames.bizadultsextoys.com adulttime.comadulttoontube.comadultvideodump.comadultvideotop.comadultvirtualworlds.net aebn.comafappyending.comaffect3dstore.com +afkv28.com aflamporn.com aflamsex.netaflamsexhd.com afriboyz.com agag.tw  agzy1.com  ah-me.comahcathyxxx.com ahegao.online ahentaitv.com ahlxs-me.buzz ahlxsdh.sbsahorsecock.comahpornogratuit.comahpornotube.comahsexfilme.comahswingerporno.com ahtops.com ahtranny.comahvideosexe.com -ahxxx.club aibaobei.me aimei133.com aipa553.com airav.cc -airav.wikiairsextube.com aisejushi.com  ajsjx.comakiba-online.com akiba-web.com albagals.com albastudio.co  alhs.link alhs.xyzall-sex-links.comall3dsexpics.comalldrawingshere.com +ahxxx.club ai7995.site ai91porn.cc aimei133.com aipa553.com airav.cc +airav.wikiairsextube.com aisejushi.com aiwucm-us.sbs aixingge2.cc +aizyk.buzz  aizyk.xyz  ajsjx.comakiba-online.com akthelp.com albagals.com albastudio.co  alhs.link alhs.xyzall-sex-links.comall3dsexpics.comalldrawingshere.com allfet.netallfinegirls.com allhen.onlineallhorsesex.comalliancesages.comallinternal.comalljapanesepass.com allmomsex.com allover30.comallpasswords.comallporncomic.comallpornsites.netallpornsitespass.comallspyclips.comallswingersclubs.orgallthefallen.moe alohatube.com alotporn.comalphaporno.com alt.com altporn.net amabitch.com amakings.comamandalist.com -amanmi.comamapornofilme.comamateur-cougar.comamateur-exhibitionist.orgamateur-fetish.comamateur-gallery-post.comamateur-home-sex.comamateur-porn-clips.comamateur-porn-tube.netamateur-pussies.comamateur-threesomes.comamateuralbum.netamateuranalporn.comamateuranalvideos.comamateurarchiver.comamateurbdsmporn.comamateurblondegirls.comamateurblowjobporn.comamateurcool.comamateurcuckoldporn.comamateure-xtreme.comamateurest.comamateurgalore.netamateurgirlfriends.netamateurhomevids.comamateurhousewifefuck.comamateurmommymovies.comamateuroldsluts.comamateurpages.comamateurporn.photosamateurporndump.comamateurpornhouse.comamateurpornonly.comamateurpornsexvideos.comamateurs-fuck.comamateurs-gone-wild.comamateursecrets.netamateursexpussy.comamateursexstart.nlamateurslovesporn.comamateursvid.comamateurswingersmovies.comamateurthreesomeporn.comamateurwifefuck.comamateurwifetits.comamateurwifevideos.comamateurwivesvideos.com amateurxx.orgamatorialesesso.com amatporn.com amatura.comamazingcuckold.com amodoll.comamourangels.comamsterdamhotescort.comamsterdamluxescort.com anacams.comanal-pantyhose.com  anal.casa -anal.mediaanalamateursex.comanalcamshow.com analdin.comanalfuckvideo.comanalhomeporn.comanallivecams.comanalpornhouse.comanalpornonly.comanalpornosex.com analsaga.comanalscreen.com analtime.org analvids.comancensored.com andygod.com angelweb.jp anibooru.com -anilos.comanimal-hentai.comanimal-porn.netanimalforsex.comanimalincum.com animalporn.meanimalpornxxx.meanimalsporn.netanimalsporn.tvanimalzoosex.meanime-pictures.net anime-tube.pw animegal.netanimehentaihub.comanimeidhentai.comanimepornhd.com animesex.meanimesexhq.comanimestigma.comanimezilla.comanistreaming.xyz annamilk.comannualpelvicexam.comanonproxy.infoansin.erodayo.comantarvasnaclips.comantarvasnax.com anudetube.com anybunny.org anybunny.tv anyhentai.com anyporn.com anypornhd.comanypornsexxx.com +amanmi.comamapornofilme.comamateur-cougar.comamateur-exhibitionist.orgamateur-fetish.comamateur-gallery-post.comamateur-home-sex.comamateur-porn-clips.comamateur-porn-tube.netamateur-pussies.comamateur-threesomes.comamateuralbum.netamateuranalporn.comamateuranalvideos.comamateurarchiver.comamateurbdsmporn.comamateurblondegirls.comamateurblowjobporn.comamateurcool.comamateurcuckoldporn.comamateure-xtreme.comamateurest.comamateurgalore.netamateurgirlfriends.netamateurhomevids.comamateurhousewifefuck.comamateurmommymovies.comamateuroldsluts.comamateurpages.comamateurporn.photosamateurpornhouse.comamateurpornonly.comamateurpornsexvideos.comamateurs-fuck.comamateurs-gone-wild.comamateursecrets.netamateursexpussy.comamateursexstart.nlamateurslovesporn.comamateursvid.comamateurswingersmovies.comamateurthreesomeporn.comamateurwifefuck.comamateurwifetits.comamateurwifevideos.comamateurwivesvideos.com amateurxx.orgamatorialesesso.com amatporn.com amatura.comamazingcuckold.com amodoll.comamourangels.comamsterdamhotescort.comamsterdamluxescort.com anacams.com +anal-f.netanal-pantyhose.com  anal.casa +anal.mediaanalamateursex.comanalcamshow.com analdin.comanalfuckvideo.comanalhomeporn.comanallivecams.comanalpornhouse.comanalpornonly.comanalpornosex.com analsaga.comanalscreen.com analtime.org analvids.comancensored.com andygod.com angel-gto.com angelweb.jp anibooru.com +anilos.comanimal-hentai.comanimal-porn.netanimalforsex.comanimalincum.com animalporn.meanimalpornxxx.meanimalsporn.netanimalsporn.tvanimalzoosex.meanime-pictures.net anime-tube.pw animegal.netanimehentaihub.comanimeidhentai.comanimepornhd.com animesex.meanimesexhq.comanimestigma.comanimezilla.comanistreaming.xyz annamilk.comannualpelvicexam.comansin.erodayo.comantarvasnaclips.comantarvasnax.com anudetube.com anybunny.org anybunny.tv anyhentai.com anyporn.com anypornhd.comanypornsexxx.com anysex.comanyshemale.com  anyxxx.me anyxxx.proaoaou.iillii.net -aoxx69.net  apina.bizapornotube.net aporntv.comapornvideo.com  appyq.com apyarstorybooks.blogspot.com arabgirls.usarabianchicks.com arabnek.com +aoxx69.net  apina.bizapornotube.net aporntv.comapornvideo.com +app756.com  appyq.com apyarstorybooks.blogspot.com  aqdlt.netarabianchicks.com arabnek.com arabxn.com arabxnxx.org arabysexy.comarabysexy.mobiarcadewank.com -archivx.to  area51.toarirangmeari.com -armovs.comartnudegalleries.comartoferotica.info arzon.jp asexdoll.com asextube.netashemaletube.comashemaletv.com asiacrazy.xyzasiamoviepass.comasian-anal-sex.com asian-max.comasianboygay.comasiancamgirllive.comasiancamly.comasianfreeporn.netasiangfvideos.comasiangirlsnextdoor.com asianphd.comasianporn.restasianporn.sexyasianpornjav.comasianpornlabs.comasianpornmovies.comasianpornonly.comasianporntrends.comasianprivatetube.comasianscreens.com asiansex.sexyasiansexdiary.comasiansmaster.comasianthumbs.orgasianwifeporn.comasianxxxjoy.comasianxxxvideos.cc asknudes.com asmhentai.com asmr.gay asmrbuluo.com asredas.com ass4all.comassesphoto.comassistirhentai.com assoass.com assylum.com atasale.comatkgallery.com  atube.sex  atube.xxx -atubex.com auntymaza.com av-baron.comav-channel.com  av-th.net -av-top.com av01.tv av11.org  av1688.cc av234567.com  av369.net -av4.us av69.tv av69.us av6k.com +archivx.to  area51.to +armovs.comartnudegalleries.comartoferotica.info arzon.jp asexdoll.com asextube.netashemaletube.comashemaletv.com asiacrazy.xyzasiamoviepass.comasian-anal-sex.comasianboygay.comasiancamgirllive.comasiancamly.comasianfreeporn.netasiangfvideos.comasiangirlsnextdoor.com asianphd.comasianporn.restasianporn.sexyasianpornjav.comasianpornlabs.comasianpornmovies.comasianpornonly.comasianporntrends.comasianscreens.com asiansex.sexyasiansexdiary.comasiansmaster.comasianthumbs.orgasianwifeporn.comasianxxxvideos.cc asknudes.com asmhentai.com asmr.gay asmrbuluo.com asredas.com ass4all.comassesphoto.comassistirhentai.com assoass.com assylum.comatkgallery.com attackers.net  atube.sex  atube.xxx +atubex.com auntymaza.com av-baron.comav-channel.com av-movie.cc  av-th.net +av-top.com av01.tv av11.org  av1688.cc  av369.net +av4.us av69.tv av69.us av6k.com av6k.vip avbebe.com  avcar.vip -avcens.xyz  avcnn.com avcrempie.com avday.tv +avcens.xyz  avcnn.com avcrempie.com avday.tv avdby-up.buzz avdudu.top avdwang.xyz avelip.comaventertainments.com avfox.cc avgigi.com  avgle.com  avgle.net avgod.club  avhbo.com avhd101.com -avhome.one -avinin.com avizoon.site avizoone.com avjb.com avjoy.me  avlulu.cc avn.com avnana5.com -avpanda.cc avple.tv +avhome.one avhu.com +avinin.com avizoon.site avizoone.com avjb.com avjiasu.com avjoy.me avjzy67.xyzavking-mp4.sbs  avlulu.cc avn.com avnana5.comavnight-shipin.com +avpanda.cc avple.tv  avrila.cc +avrila2.ccavrila2023.top avrila23.cc avriri.top avsee01.tv avseesee.com  avstar.me -avwong.com  avwto.com awflapp.topaxbdoll.com.tw ayshdade.info ayshdee.xyz +avwong.com  avwto.com  avxxc.com awflapp.top awjq.cc +awwcn.buzz  awwcn.xyzaxbdoll.com.tw ayshdade.info ayshdee.xyz aziani.com aznude.com b-eroland.net -b3boos.com  b3bos.com  b6b33.combabecentrum.combabeimpact.com babepedia.com babes34.com babes34.probabesandbitches.netbabesandgirls.combabesandstars.combabesaround.com babesbang.combabesinporn.combabesmachine.combabesnetwork.combabesofindia.combabesource.com babestube.com babosas.com babushky.clubbabycondom.combabylongirls.co.uk babypink.tobackdoorlesbians.combackroomcastingcouch.com  bacon.combacsitinhyeu.vnbadasianpussy.com badjojo.com badoinkvr.combadsexygirl.combadteenspunished.com badvirtue.com baeb.comballbustingtube.com bamtoki.com banan.tvbanatal3arab.com banatfun.combang-movies.com bangbros.combangbrosnetwork.com bangher.netbangkokbangers.combangkokstreetwhores.combangyourwife.com baraero.com barelist.com bareporno.com barfuck.combarium-enema.com batsa.mebattleforcecomix.com bb33.net bbbaihu.vip bbc-anal.combbcpornonly.combbwmilftube.com  bcy01.com bdawnvr.xyz bdsm-mov.net bdsm.com bdsmboard.orgbdsmbunker.com bdsmcafe.com bdsmland.orgbdsmlibrary.com +b3boos.com  b6b33.combabecentrum.combabeimpact.com babepedia.com babes34.com babes34.probabesandbitches.netbabesandgirls.combabesandstars.combabesaround.com babesbang.combabesinporn.combabesmachine.combabesnetwork.combabesofindia.combabesource.com babestube.com babosas.com babushky.clubbabycondom.combabylongirls.co.uk babypink.tobackdoorlesbians.combackroomcastingcouch.com  bacon.combacsitinhyeu.vnbadasianpussy.com badjojo.com badoinkvr.combadsexygirl.combadteenspunished.com badvirtue.com baeb.com  bai29.xyzballbustingtube.com bamtoki.com banan.tv banatfun.combang-movies.com bangbros.combangbrosnetwork.com bangher.netbangkokstreetwhores.combangyourwife.com baraero.com barelist.com bareporno.com barfuck.combarium-enema.com barss1207.pro batsa.mebattleforcecomix.com bb33.net bbbaihu.vip bbc-anal.combbcpornonly.com  bbqm1.xyz bbw-yoyo.buzzbbwmilftube.com bbwyoyo.info  bcy01.com bdsm-mov.net bdsm.com bdsmboard.orgbdsmbunker.com bdsmcafe.com  bdsmhd.cc bdsmland.orgbdsmlibrary.com bdsmlr.combdsmpornonly.combdsmsexgame.combdsmstreak.combdsmtubexxx.com  bdsmtv.ccbeastiegals.combeastysexlinks.combeastythumbs.combeautifulandbusty.combeautyescortsamsterdam.combedstegratisporno.com beeg.com  beeg.rest beegfree.com  beejp.net befuck.com -befuck.net  bejav.netbekijkporno.nlbelamionline.combellebound.com -bellesa.co bellotube.com benaughty.funbengalisexvideos.comberlincompanions.combest-sex-games.combest3dhere.combestamateurcumshots.combestcamsites.netbesterpornos.combestescortgirls.nlbestfreecams.clubbestfreesexgames.combestfreetube.netbestfreetube.xxxbestgames-2022.combesthandjobporn.combesthentaitube.combestiality.gurubestialitysextaboo.combestialitytaboo.tvbestialityvideo.usbestjapanesepornsites.combestjavporn.combestjavporn.net bestkinky.combestlistofporn.com bestporn.subestpornclip.combestporncomix.combestporngames.combestpornsites.eubestpornsites.guidebestporntube.mebestpremiumpornsite.combestsexcam.combesttitstube.combesttube4you.combestxxxsites.combetterhdporn.combeurettesvideo.com bexjt5wz.xyz -bffshd.com +befuck.netbeiyongzhan1.com  bejav.netbekijkporno.nlbelamionline.combellebound.com +bellesa.co bellotube.com benaughty.funbengalisexvideos.comberlincompanions.combest-sex-games.combestcamsites.netbesterpornos.combestescortgirls.nlbestfreecams.clubbestfreesexgames.combestfreetube.netbestfreetube.xxxbestgames-2022.combesthandjobporn.combesthentaitube.combestiality.gurubestialitysextaboo.combestialitytaboo.tvbestialityvideo.usbestjapanesepornsites.combestjavporn.combestjavporn.net bestkinky.combestlistofporn.com bestporn.subestpornclip.combestporncomix.combestporngames.combestpornsites.eubestpornsites.guidebestporntube.mebestpremiumpornsite.combestsexcam.combesttitstube.combestxxxsites.com besuty99.combetterhdporn.combetween-legs.combeurettesvideo.com +bffshd.com  bhggn.xyz +bhzyk.buzz +bhzyw2.top biaoqs.xyz biaoqs1.xyz biaoqs2.xyz bidong25.com bidong9.com bigassporn.tvbigblackdicklover.combigboobsalert.combigboobsandhotsex.combigboobsonline.orgbigboobswives.com bigboss.video bigcocker.com bigdick.combigdickorgasm.combigindiansex.mobi bigporn.com  bigsex.tvbigtitsextapes.combigtitsgallery.netbigtitsmodelsdirectory.combigtitsthreesomes.combigtopsites.com  biguz.net bijukujo.club -bimbim.com bimbolive.com bioporno.com  biqle.org biqle.ru bisyoujyogyaruge.topaz.ne.jpbitchesgirls.combitchmomporn.com bitporno.combizarresexuality.com bkkdown.siteblackamateurfuck.comblackamateursvideos.com blacked.comblackhomeporn.comblackmonsterterror.comblackshemalevideo.comblacksonblondes.comblacktowhite.net -blaoshi.ccblog.descargasgay.combloggrowup.comblogterest.net blowjobit.comblowjobqueens.netbluffyporn.com bobs-tube.com bobvoyeur.com bodgirls.combodyfluids-jav.com  bokep.net bokepseks.org bokepvidz.combondagecomixxx.netbondagesex-xxx.com bongacams.com +bimbim.com bimbolive.com bioporno.com  biqle.org biqle.ru bisyoujyogyaruge.topaz.ne.jpbitchesgirls.combitchmomporn.com bitporno.combizarresexuality.com bjini.cc bkkdown.siteblackamateurfuck.comblackamateursvideos.com blacked.comblackhomeporn.comblackmonsterterror.comblackshemalevideo.comblacksonblondes.comblacktowhite.net +blaoshi.ccblog.descargasgay.combloggrowup.comblogterest.net blowjobit.comblowjobqueens.netbluffyporn.com +blylq.buzz bobs-tube.com bobvoyeur.com bocici.buzz bodgirls.combodyfluids-jav.com  bokep.net bokepseks.org bokepvidz.combondagecomixxx.netbondagesex-xxx.com bongacams.com bonyu.cyouboobieblog.com boobpedia.comboobsrealm.com boodigo.com boodigogo.com book18.org bookmark.xxx -booloo.com boomba.club  booru.orgbootysource.com +booloo.com boomba.club  booru.orgbootysource.com boqimod.com boqitube.cc borwap.com boshancy.combossagency.co.uk  boulx.com boundhub.combountyhunterporn.com  box57.one boy18tube.com boycall.comboyfriendtv.com boylabs.net boylove.com boypost.com boysfood.comboyspornpics.com -boyvid.com boyztube.combrandporno.combrasilincesto.combrasiltudoliberado.combravoerotica.com bravoporn.combravoteens.com bravotube.net bravotube.tvbrazzers-porno.onlinebrazzers-xxx.netbrazzersporn.mobi brazzfan.combrdteengal.combreasthealthinfo.combreath-takers.combritsexcash.combrliilantsdates.combrokenteens.com  bromo.com brourou.combrutalbdsmtube.combrutalfetish.com -bsersd.xyz bubbaporn.com buhidoh.netbukkake-jav.com bukkake.linkbululusexdoll.com bunnylust.comburningcamel.combustymomsvideo.combustynudebabes.com -buzzav.com bvfce6wz.xyz bwin.com byjav.me  byjhd.com  bzazi.com  c0930.com -cableav.tv cableav.xyz  caime.xyzcallabitch.org calvappd.me cam4.com  cam69.comcambaddies.com  cambb.xxx cambiaip.org  cambro.tv  camcam.cc camdolls.comcameraboys.com camfinder.com -camfox.comcamgirlfinder.netcamgirlstemple.comcamgirlvideos.org camgoddess.tv camonster.com camrabbit.com cams.com camsoda.com camsoda1.comcamstagestudio.com camster.com camstreams.tv camsvids.tv camvideos.org camvideos.tvcamvideoshub.comcamwhores-tv.comcamwhores.forum camwhores.tvcamwhoresbay.comcamwhoreshd.com camwhoria.comcandidforum-videos.comcandycumcity.comcandypleasure.comcaribbeancom.comcaribbeancompr.comcartoon-sex.tv cartoon18.comcartoon3thumbs.comcartoonporn.comcartoonporno.xxxcartoonpornonly.comcartoonpornvideos.comcartoonregistry.comcartoonscity.comcartoonsexfantazy.comcartoontube.comcartoonville.netcashback69.comcashvideotube.comcastingcouch-x.comcasualhomemadesex.comcatalinacruz.com catmiimi.com  cbart.net cc18.biz cc18.tv +boyvid.com boyztube.combrandporno.combrasilincesto.combrasiltudoliberado.combravoerotica.com bravoporn.combravoteens.com bravotube.net bravotube.tvbrazzers-porno.onlinebrazzers-xxx.netbrazzersporn.mobi brazzfan.combrdteengal.combreasthealthinfo.combreath-takers.combritsexcash.combrokenteens.com  bromo.com brourou.combrutalbdsmtube.combrutalfetish.com bsxm1213.pro bubbaporn.com buhidoh.netbukkake-jav.combululusexdoll.com bunnylust.comburningcamel.combustymomsvideo.combustynudebabes.com +buzzav.com bwin.combygpp1207.world byjav.me  byjhd.com  c0930.com +cableav.tv cableav.xyz  cai21.xyz  caime.xyzcallabitch.org cam4.com  cam69.comcambaddies.com  cambb.xxx  cambro.tv  camcam.cc camdolls.comcameraboys.com camfinder.com +camfox.comcamgirlfinder.netcamgirlstemple.com camgoddess.tv camonster.com camrabbit.com cams.com camsoda.com camsoda1.comcamstagestudio.com camster.com camstreams.tv camsvids.tv camvideos.org camvideos.tvcamvideoshub.comcamwhores-tv.comcamwhores.forum camwhores.tvcamwhoresbay.comcamwhoreshd.com camwhoria.comcandidforum-videos.comcandycumcity.comcandypleasure.comcaribbeancom.comcaribbeancompr.comcartoon-sex.tv cartoon18.comcartoon3thumbs.comcartoonporn.comcartoonporno.xxxcartoonpornonly.comcartoonpornvideos.comcartoonregistry.comcartoonscity.comcartoonsexfantazy.comcartoontube.comcartoonville.netcashback69.comcashvideotube.comcastingcouch-x.comcatalinacruz.com catmiimi.com +cavhot.com  cbart.net cc18.biz cc18.tv cc18tv.com ccav69.info  ccav69.meccav691api.com ccavb.tv celebforum.cocelebmasta.livecelebritygay.comcelebritynakeds.comcelebrityslips.comcelebritystorysite.comcelebsporno.comcelebsroulette.com cenkei.comcentervillage.co.jp -cerdas.comcervical-exam.com ceskeporno.cz  cfake.com cfwives.comcgkate.jinvod.comcharmescorts.com chatsex.xxxchatterbate.iochaturbate.com -chedteb.euchengjuanseo.comcherry-tale.comcherryasia.comcherrynudes.com cherrypai.comcherrypanpan.comcherrypimps.comcherrypornhd.comchickteases.com chikiporn.comchinese-porn-videos.comchinese-xnxx.comchinesespanking.comchinesexxxporn.net  chla3.com -chocam.comchubbypornonly.com chunja19.net chuporno.com chwr7s8u.com  chyoa.comcindymovies.comcinepornogratis.comcitas-para-mayoresde50.eccitasecuador.comcity-hentai.comcityheaven.netcityoflove.comcitytourgirls.com ciyuanjie.cc +cerdas.com ceskeporno.cz  cfake.com cfwives.comcharmescorts.comchatgptvideo.xyzchatgptvideob.buzz chatsex.xxxchatterbate.iochaturbate.comchengjuanseo.comchengrendouyin-app.comchengrenshipin-app.comcherry-tale.comcherryasia.comcherrynudes.com cherrypai.comcherrypanpan.comcherrypimps.comcherrypornhd.com chianxv.buzzchickteases.com chikiporn.comchinasex.com.eschinchuqi-av.latchinese-porn-videos.comchinese-xnxx.comchinesespanking.comchinesexxxporn.netchipmong13g.buzz  chla3.com +chocam.com chuangb15.xyzchubbypornonly.com +chuneo.xyz chunja19.net chuporno.com chutuno.fun +chuzs2.xyz chwr7s8u.com  chyoa.comcindymovies.comcinepornogratis.comcitas-para-mayoresde50.eccitasecuador.comcity-hentai.comcityheaven.netcityoflove.comcitytourgirls.com ciyuanjie.cc ckss98.comclaravenger.com clasporno.orgclassymomsex.comclimateone.blogspot.co.idclinical-videos.com -clip16.com clipcake.com cliphayho.comcliphunter.comclipsaoyai.com clipsbai.com clipseksi.com clipsex.asia clitgames.comcloudyzgirl.comclubseventeen.comclubsweethearts.com clubtubes.com cnnamador.comcockofhorse.comcocksuckersguide.comcocktailsandcocktalk.com cockyboys.comcoedcherry.comcoithienthai.comcoitustube.comcolegialasdeverdad.comcolegialasreales.comcoliriodemacho.com.brcollection-3d.comcollectionofbestporn.comcollegepornonly.comcollegesexgames.comcolliderporn.comcolombianas.webcamcomdotgame.com -comeav.com comicbox.xyzcomicscartoonporn.comcomicsporno.escomicunivers.comcomicuniverse.orgcomixzilla.com  conan.xxxcontactossexoecuador.comcool-comics.com +clip16.com clipcake.com cliphayho.comcliphunter.comclipsaoyai.com clipsbai.com clipseksi.com clipsex.asia clitgames.comcloudyzgirl.comclubseventeen.comclubsweethearts.com clubtubes.com  clzz2.xyz cnnamador.com  cnzjp.xyzcockofhorse.comcocksuckersguide.comcocktailsandcocktalk.com cockyboys.comcoedcherry.comcoithienthai.comcoitustube.comcolegialasdeverdad.comcolegialasreales.comcoliriodemacho.com.brcollection-3d.comcollectionofbestporn.comcollegepornonly.comcollegesexgames.comcolliderporn.comcolombianas.webcamcomdotgame.com +come29.xyz comicbox.xyzcomicscartoonporn.comcomicsporno.escomicunivers.comcomicuniverse.orgcomixzilla.com  conan.xxxcontactossexoecuador.comcool-comics.com cool18.com coolinet.netcoolsexnew.com copro.pw  coqnu.comcorbinfisher.comcosplay-jav.comcosplayeromania.jpcosplayporntube.comcosplayworld.netcougarsexmovies.comcouplecam.co.uk cp44.net -cpz.to crabporn.comcrazy-amateurs.com crazyav.xyz crazybook.xyz crazycloud.rucrazyfiction.xyzcrazylivecams.comcrazynovel.xyz crazyshit.comcrazyxxx3dworld.comcrazyxxx3dworld.netcrazyxxx3dworld.orgcrazyxxxworld.com creamasia.comcreamlemon.infocreampiehomevideos.com crocotube.comcruel-furies.comcrystalmiss.com csakporno.hu csgfnmdb.com -cshive.comcsnjcbnxdnb.comcuckfilmswifefuck.com cuckold69.comcuckoldfuck.comcuckoldingwifey.comcuckoldinterracialporn.comcuckoldinterracialwife.comcuckoldplacetube.comcuckoldporntube.comcuckoldvideos.xxxcuckoldwifesex.comcuckoldwifesexxx.comcuckoldwifetube.com cuckporn.comcuckvideos.comcuckwatchingwife.com cuckwimp.com -cuebic.bizcultoferotica.comcultura-kolomna.ru cum4k.cccumasianporn.com -cumfox.com cumlouder.comcumshotlist.comcumswappingsis.comcumteenporn.comcuntempire.comcurvybbwwives.comcurvyerotic.com -cwcams.com cy22.tv cyyeshb.com czechav.comczechbiporn.comczechcasting.comczechhunter.comczechlesbians.comczechmassage.comczechstreets.comczechvideo.org czechvr.comczechwifeswap.com  d-upp.comd2mrry2to5rg.com +cpz.to crabporn.comcrazy-amateurs.com crazyav.xyz crazybook.xyz crazycloud.rucrazyfiction.xyzcrazylivecams.comcrazynovel.xyz crazyshit.comcrazyxxx3dworld.comcrazyxxx3dworld.netcrazyxxx3dworld.orgcrazyxxxworld.com creamasia.comcreamlemon.info crocotube.com crtsgfb1.topcruel-furies.comcrystalmiss.com csakporno.hu +cshive.comcuckfilmswifefuck.com cuckold69.comcuckoldfuck.comcuckoldingwifey.comcuckoldinterracialporn.comcuckoldinterracialwife.comcuckoldplacetube.comcuckoldporntube.comcuckoldwifesex.comcuckoldwifesexxx.comcuckoldwifetube.com cuckporn.comcuckvideos.comcuckwatchingwife.com cuckwimp.com +cuebic.bizcultoferotica.comcultura-kolomna.ru cum4k.cccumasianporn.com cumlouder.comcumshotlist.comcumswappingsis.comcumteenporn.com cunhua.picscuntempire.comcurvybbwwives.comcurvyerotic.com +cwcams.com cy22.tv czechav.comczechbiporn.comczechcasting.comczechhunter.comczechlesbians.comczechmassage.comczechstreets.com czechvr.comczechwifeswap.com cztv117.shop  d-upp.comd2mrry2to5rg.com d2pass.com da3dsoul.dev daboja18.com -dachix.comdaddyslilangel.com daft.sex daftporn.comdaftpost.github.iodaftsex-hd.com daftsex.comdaftsex.github.io  dagfs.comdailybasis.comdailyporn.clubdaindianporn.com -damduc.org damnhotz.com damplips.comdanskpornofilm.comdansmovies.comdaretoku-eromanga.infodarkcategories.com darknaija.comdarknessporn.com darknun.comdarksidemagazine.comdastanhisexy.cc datawav.clubdate2night.xyz ddd-smart.net deasians.com dechamora.comdecorativemodels.com -deeper.comdeepfake-porn.comdeepfakeporn.netdefinebabe.comdefinefetish.comdeiightfuidates.net -demfhz.xyzderpibooru.org desihoes.com desiporn.tubedesipornfilms.comdesire-xx.supertop-100.comdesiresecrets.comdetentiongirls.comdeutsch-sexfilme.com!deutsche-pornos-kostenlos.xxx deutschepornos-kostenlos.netdeutschsex.comdeviantclip.comdevilsfilm.comdexterhorn.com dezyred.com -df-bet.com  dgaqp.com  dgwav.comdhlestudio.com.codiamantewebcam.comdiamondgirls.co.ukdiamondgirlstudio.com dianapost.com  diao.asiadiarrheafan.livedoor.blog dickeomas.comdickhardon.com didilist.comdigital-anime.comdigitaldesire.com dinotube.com dirty.gamesdirtyasiantube.comdirtydoglinks.comdirtyfarmer.com dirtyflix.comdirtyhomefuck.comdirtyleague.comdirtyonline.comdirtypornvids.com dirtyscat.orgdirtyshack.com dirtyship.comdiscountedporn.comdiscountporn.clubdisneyhentai.com divas.com.uydiyarbakirescort.com -dkcloud.cc  dkk37.com dldlinks.com dldshare.netdlsitenews.com  dnaav.com dobbyporn.comdoctor-videos.comdodgersexcartoons.com  doeda.comdogcumshot.net dogfart.comdogfartnetwork.com dogmovie.net dogofcum.com dogspics.net dojin-dl.com  dojin.com dojindb.netdojinmanga.netdojinwatch.com dollnight.com domywife.com donkparty.com  donmai.usdonpornogratis.comdonsnaughtymodels.com doodhwali.comdopaminegirl.comdoseofporn.comdotfreesex.comdoujin-eromanga.comdoujin-freee.comdoujin-info.netdoujin-night.comdoujincg.blog.jpdoujinfree.comdoujinland.infodoujinnomori.com doujins.com douyintt10.medouzinnsi-eromannga.comdownloadpass.comdragonhentai.netdrbdsmporn.com drbizzaro.comdreamamateurs.comdreammovies.com driverxxx.comdrivevideo.xyz drkogyi.comdrmgmggyi-mm.blogspot.com drtuber.com +dachix.comdaddyslilangel.comdafanhao-app.com daft.sex daftporn.comdaftsex-hd.com daftsex.com  dagfs.comdailybasis.comdailyporn.clubdaindianporn.com +damduc.org damplips.comdanskpornofilm.comdansmovies.comdaretoku-eromanga.infodarkcategories.com darknaija.comdarknessporn.com darknun.comdarksidemagazine.com dasaob.onlinedastanhisexy.cc datawav.clubdate2night.xyz ddd-smart.net +ddff66.com +ddff77.com deasians.com dechamora.comdecorativemodels.com +deeper.comdeepfake-porn.comdeepfakeporn.netdefinebabe.comdefinefetish.comderpibooru.org desihoes.com desiporn.tubedesipornfilms.comdesire-xx.supertop-100.comdesiresecrets.comdetentiongirls.comdeutsch-sexfilme.com!deutsche-pornos-kostenlos.xxx deutschepornos-kostenlos.netdeutschsex.comdeviantclip.comdevilsfilm.comdexterhorn.com dezyred.com  dgaqp.com  dgwav.com dh44.loldhlestudio.com.codiamantewebcam.comdiamondgirls.co.ukdiamondgirlstudio.com dianapost.comdiarrheafan.livedoor.blog dickeomas.comdickhardon.com didilist.comdigital-anime.comdigitaldesire.com dinotube.com dirty.gamesdirtyasiantube.comdirtydoglinks.comdirtyfarmer.com dirtyflix.comdirtyhomefuck.comdirtyleague.comdirtyonline.comdirtypornvids.com dirtyscat.orgdirtyshack.com dirtyship.comdiscountedporn.comdiscountporn.clubdisneyhentai.com divas.com.uydiyarbakirescort.com diyuser.buzz  djkav.mom +dkcloud.cc  dkk37.com dlap001.xyz dlap301.com dldlinks.com dldshare.netdlsitenews.com  dnaav.com dobbyporn.comdoctor-videos.comdodgersexcartoons.com  doeda.comdogcumshot.net dogfart.comdogfartnetwork.com dogmovie.net dogofcum.com dogspics.net dojin-dl.com  dojin.com dojindb.netdojinmanga.netdojinwatch.com domywife.com donkparty.com  donmai.usdonpornogratis.comdonsnaughtymodels.com doodhwali.comdopaminegirl.comdoseofporn.comdotfreesex.comdoufurufabu.xyzdoujin-eromanga.comdoujin-freee.comdoujin-info.netdoujin-night.comdoujincg.blog.jpdoujinfree.comdoujinland.infodoujinnomori.com doujins.com douyintt10.medouzinnsi-eromannga.comdownloadpass.comdragonhentai.netdrbdsmporn.com drbizzaro.comdreamamateurs.comdreammovies.com driverxxx.comdrivevideo.xyz drkogyi.comdrmgmggyi-mm.blogspot.com drtuber.com drunk6.comdrunkenstepfather.comdrunkentop.com dsex.to -dswz88.xyzdualeotruyen1s.comdubai-escort-list.comdubaihotties.org duckmovie.comdudethrill.com duga.jpdulceecuador.com dump.xxx dumps69.com dumpxxx.netduoweiweek.com -dutrai.comdvdtrailertube.com -dvh30n.vip  dx9527.cc dxyav.co -dykycl.com dyttapi.com dyttapis.com  e-cba.org -e-goods.ru e53w.com e621.neteadultgames.com earlyob.com eastbabes.comeasymatureporn.com easypic.comeasysexporn.com ebaka.ru ebalovo.com ebenporno.comebonyinlove.comebonywebcamhub.com  ecchi.xxxecchinohentai.ruechichimato.comecuatorianas.best ed21.cc edengay.netedgemeplease.com -efuckt.com  efukt.com egotastic.com +dswz88.xyzdualeotruyen1s.comdubai-escort-list.com duckmovie.comdudethrill.com duga.jpdulceecuador.com dump.xxx dumpxxx.netduolaapian126.xyzduolaapian127.xyzduoweiweek.com +dutrai.comdvdtrailertube.com  dx9527.cc dxyav.co dyfl1.pw +dykycl.com  e-cba.org +e-goods.ru e53w.com e621.neteadultgames.com eastbabes.com easypic.comeasysexporn.com ebalovo.com ebenporno.comebonyinlove.comebonywebcamhub.comecchinohentai.ruechichimato.comecuatorianas.best edengay.netedgemeplease.com  efukt.com egotastic.com ehv.cceighteen-store18x.jp eilieili.cc ekolojik.org el-ladies.com electbabe.comelephantlist.comelephanttube.comelephanttubenew.comelitebabes.comeliteindianporn.com -elitvip.ru elog-ch.com elog-ch.net elpadrote.comelpornoamateur.com#elpube-scat-movies.blogspot.com empflix.comempornium.site"encuentroscasualesoecuador.comenema-porn.comenema-videos.comenemabasics.comenemaexperiences.comenemahistory.comenemainformation.comenemanozzle.infoenemaporn.blogspot.comenemaprocedure.comenemarotica.comenemas4fun.comenemasexfetish.comenemasupplier.com enematube.com enf-cmnf.comenjoyasianporn.com enjoyfuck.com entensity.net epikporn.com eporner.com  erito.com ero-anime.netero-comic-hunter.net ero-kawa.comero-ma-nia.comero-manga-platinum.netero-mangalife.com  eroan.xyz erocurves.comerodou.tousatu.funerodouga.8sp.bizerodougazo.comerodoujinshi-world.com eroelog.com eroero69.work erofights.comerofullsets.net -erofus.com erogames.comerogazo-jp.neterogazo-ngo.comerogazopple.comerogazou-pinkline.comerogazoufactory.com erohentai.neteromanga-ace.comeromanga-cafe.comeromanga-hentai.comeromanga-mainichi.comeromanga-school.comeromangajukujo.com eromazofu.com  erome.com erome.iteropasture.com eropics.org +elitvip.ru elog-ch.com elog-ch.netelpornoamateur.com#elpube-scat-movies.blogspot.comempero-right.mom empflix.comempornium.site"encuentroscasualesoecuador.comenema-porn.comenema-videos.comenemabasics.comenemaexperiences.comenemahistory.comenemainformation.comenemaporn.blogspot.comenemarotica.comenemas4fun.comenemasexfetish.com enematube.com enf-cmnf.comenjoyasianporn.com enjoyfuck.com entensity.net epikporn.com eporner.com  erito.com ero-anime.netero-comic-hunter.net ero-kawa.comero-ma-nia.comero-manga-platinum.netero-mangalife.com  eroan.xyz erocurves.comerodou.tousatu.funerodouga.8sp.bizerodougazo.comerodoujinshi-world.com eroelog.com eroero69.work erofights.comerofullsets.net +erofus.com erogames.comerogazo-jp.neterogazo-ngo.comerogazopple.comerogazou-pinkline.comerogazoufactory.com erohentai.neteromanga-ace.comeromanga-cafe.comeromanga-kong.comeromanga-mainichi.comeromanga-school.comeromangajukujo.com eromazofu.com  erome.com erome.iteropasture.com eropics.org eropics.toeroprofile.com erosberry.com eroshiko.net erotelki.orgerotera.blogo.jp eroterest.net erothots.coerotic-artsites.comerotic-hentai.comerotic-photos.neteroticart-top100.comeroticbeauties.neteroticbeautyhub.comerotichdworld.com erotictube.me erotikaweb.hu erovizor.ru -eroxia.com eroyakuba.com ertk.net escobarvip.it escort.guide escort24h.netescortamsterdam1.comescortdude.comescortgirls.beescortrankings.ukeskimotube.com esmatube.comesperanzagomez.orgesposasymaridos.comestudio360.com.coestudiopenthouse.comethiosex2.wordpress.comeurobabeindex.comeurogirlsescort.comeuropornstar.comeurosexscene.com evaelfie.com evemodels.com everia.clubeverydayporn.coevgld7cg58l8.com evilangel.com evilx.su examroom.infoexgfvideos.xxxexgirlfriendmarket.com exiporn.com  exoav.comexotic-ghana.comexoticuganda.comexplicittube.comexploitedcollegegirls.comexploitedteensasia.comexplorespanking.comexporntoons.netexposedlatinas.com exs8fkw0.xyzextraasian.comextraindiansex.comextrajapaneseporn.comextreme-board.comextremepornfilms.com exxxtra.netexxxtrasmall.comexxxtrasmall1.com eyny.com  f6988.com +eroxia.com ertk.net escobarvip.it escort.guideescortamsterdam1.comescortdude.comescortgirls.beescortrankings.ukeskimotube.com esmatube.comesperanzagomez.orgesposasymaridos.comestudio360.com.coestudiopenthouse.comethiosex2.wordpress.comeurobabeindex.comeurogirlsescort.comeuropornstar.comeurosexscene.com evaelfie.com evemodels.com everia.clubeverydayporn.co evilangel.com evilx.suexgfvideos.xxxexgirlfriendmarket.com exiporn.com  exoav.comexotic-ghana.comexoticuganda.comexplicittube.comexploitedcollegegirls.comexploitedteensasia.comexplorespanking.comexporntoons.netexposedlatinas.comextraasian.comextraindiansex.comextrajapaneseporn.comextreme-board.comextremepornfilms.com exxxtra.netexxxtrasmall.comexxxtrasmall1.com eyny.com f5pf.com  f6988.com f95zone.to  faapy.comfabhairypussy.com fabuye.top fakehub.com faketaxi.com fakings.com  fakku.net faldgjalg.xyzfameregistry.com family-sex.mefamily-simulator.iofamilypies.net familyporn.tvfamilypornhd.comfamilysexsimulator.comfamilysimulator.comfamilysimulator.iofamilystrokes.comfamilyswap.xxxfamous-nudes.comfamousinternetgirls.com$ famousinternetgirlsgalleries.comfamousnudes.comfamouspornstars.com fanaken.com -fanfox.net fangsung.comfanhaodian.com fank.rufanleakstoday.comfanqianglu.com fans-here.com fansnudes.com fansteek.comfantasiasguatemala.com fantasti.ccfantasticyoungporn.com fap-xxx.com  fap18.net +fanfox.net fangsung.comfanhaodian.com fanhowab.buzz fank.rufanleakstoday.comfanqianglu.com fans-here.com +fans17.com fansnudes.com +fansone.co fansteek.comfantasiasguatemala.com fantasti.cc fap-xxx.com  fap18.net fap666.com fapality.com fapcat.com fapdude.com faperoni.com fapforfun.net faphdporn.com faphouse.com fapmovz.com fapnado.com fapopedia.netfappcelebs.comfappeningbook.comfappeningthots.com fappenist.com fapphub.com fapporn.mefaproulette.cofaproulette.online fapsafari.com fapster.xxxfapteencam.com -fapvid.com  fapxl.comfareastpornhub.comfastindianporn.com fatstube.com  fau11.comfavelaporno.comfavepornmovs.comfavepornvids.comfavjapaneseporn.com -fawgaf.xyz  fbjav.comfbooktaiwan.com  fc2ppv.tv fcw.xxx  fcww0.com  feet9.com +fapvid.comfareastpornhub.comfastindianporn.com fatstube.comfavelaporno.comfavepornmovs.comfavepornvids.comfavjapaneseporn.comfbiqiyiav.buzz  fbjav.comfbooktaiwan.com  fc2ppv.tv fcw.xxx  fcww0.com  feet9.com fei.ru feipang.linkfemalestars.com femdomcc.net -femjoy.com femscat.comferronetwork.comfestinhasbrasil.com fetish-bb.comfetishbank.netfetishdreamz.com fetishes.camfetishfishcams.comfetishpapa.comfetishpornfilms.comfetishpornonly.comfetishshrine.comfetishtown.net fetlife.com fffucked.com fgirl.ch fi11.cn fi11.com fi11av1.com fi11tv1.comfictionmania.tvfilesmonster.vip -filme2.xxxfilmeleporno.xxxfilmeporno.blogfilmeporno.xxxfilmesdesexo.blogfilmesporno.com.brfilmesporno.net.brfilmespornos.net filmporno.itfilmsexeporno.comfiltercams.comfimfiction.netfindasians.live findbare.com findcams.livefindhername.net findsav.com findtubes.comfindvrporn.comfine-art-nude.orgfineartteens.com finehub.com finevids.xxxfirstanalvideos.comfirstasianpussy.comfirstgynexam.comfirstpelvicexam.com fishmpegs.comfitnakedgirls.comfivestarpornsites.comfjlkajhgfa.top  fl310.comflagrasamadores.net  flaru.com flash-xxx.comflashtranny.com  flbjc.net fleshbot.com fleshlyx.com flexsig.com fli8.xyz flipfap.comflirt4free.com flirtmoms.comflirtyhoookup.com  fljmh.com -fljmh1.comfloppy-tits.com -flyflv.comflyingjizz.com -fm4.jp follasian.com footseen.comfootstockings.comforbiddenasian.comforbiddenmomsarchive.com forduck.cyouforhertube.comfotoscaserasx.com +femjoy.com femscat.comferronetwork.comfesery-com.sbsfestinhasbrasil.com fetish-bb.comfetishbank.netfetishdreamz.com fetishes.camfetishfishcams.comfetishpapa.comfetishpornonly.comfetishshrine.com fetlife.com fffucked.com fgirl.ch fi11.cn fi11.com fi11av1.com fi11tv1.comfictionmania.tvfilesmonster.vip +filme2.xxxfilmeleporno.xxxfilmeporno.blogfilmeporno.xxxfilmesdesexo.blogfilmesporno.com.brfilmesporno.net.brfilmespornos.net filmporno.itfilmsexeporno.comfiltercams.comfimfiction.netfindasians.live findbare.com findcams.livefindhername.net findsav.com findtubes.comfindvrporn.comfine-art-nude.orgfineartteens.com finevids.xxxfirstanalvideos.comfirstgynexam.comfirstpelvicexam.com fishmpegs.comfitnakedgirls.comfivestarpornsites.comfjlkajhgfa.top  fl310.comflagrasamadores.net  flaru.comflashtranny.com +fldz8.buzz fleshbot.com fleshlyx.com flexsig.com fli8.xyz flipfap.comflirt4free.com flirtmoms.comflirtyhoookup.com  fljmh.comfloppy-tits.com +flyflv.comflyingjizz.comflyyindh-cc.sbs +fm4.jp fmav.top +fmav51.icu follasian.com footseen.comfootstockings.comforbiddenasian.comforbiddenmomsarchive.com forduck.cyouforhertube.com forpojie.picsfotoscaserasx.com foxgay.com  foxhq.com foxporns.com foxtube.comfree-3d-porn.comfree-abbywinters.com free-avx.jpfree-erobooks.comfree-strip-games.comfree-wap-tube.comfree-xxx-porn.org free00.com -free18.netfree3dadultgames.com free64all.comfreeadultcomix.comfreeadultgames.tvfreeanimalporn.netfreearabsexx.com  freeav.tvfreebdsmxxx.orgfreebigmovies.comfreecamsfan.comfreecamstars.comfreecartoons.bizfreechatnow.comfreegaypornfinder.comfreegaypornhdtube.comfreegaysexgames.comfreehdinterracialporn.infreehdvideos.xxxfreehentaipic.comfreehentaistream.comfreehqtube.com freejavbt.comfreejavporn.mobifreelifetimefuckbook.comfreematuresgallery.com freeomovie.to freeones.com freeporn.comfreepornhdonlinegay.comfreepornhentaigames.comfreeporno.asiafreepornpreview.net freepornq.comfreepornvideos.lifefreesexalbum.comfreesexgames.gamesfreesexgames.wsfreesexvideos2k.comfreesexyindians.comfreesexyindians.orgfreesitexxx.comfreeteenporn.xxxfreeuseporn.comfreexvideos.org freexxx.best freexxx.winfreexxxporn.orgfreeyouporn.mobifreieporno.comfreshporno.net freshscat.com freudbox.com freyalist.com fritchy.com  frprn.comfruitycams.com ftop.ru  ftopx.com ftvgirls.com ftvmilfs.com fu62.vipfuck-xxx-movies.com fuck.com fuck.sc +free18.net free64all.comfreeadultcomix.comfreeadultgames.tvfreeanimalporn.netfreearabsexx.com  freeav.tvfreebdsmxxx.orgfreebigmovies.comfreecamsfan.comfreecartoons.bizfreechatnow.comfreegaypornhdtube.comfreegaysexgames.comfreehdinterracialporn.infreehdvideos.xxxfreehentaipic.comfreehentaistream.comfreehqtube.com freejavbt.comfreejavporn.mobifreelifetimefuckbook.comfreematuresgallery.com freeomovie.to freeones.com freeporn.comfreepornhdonlinegay.comfreepornhentaigames.comfreeporno.asiafreepornpreview.net freepornq.comfreepornvideos.lifefreesexalbum.comfreesexgames.gamesfreesexgames.wsfreesexvideos2k.comfreesexyindians.comfreesexyindians.orgfreeuseporn.comfreexvideos.org freexxx.best freexxx.winfreexxxporn.orgfreeyouporn.mobifreieporno.comfreshporno.net freshscat.com freudbox.com freyalist.com fritchy.com  frprn.comfruitycams.com ftop.ru  ftopx.com ftvgirls.com ftvmilfs.com fu62.vipfuck-xxx-movies.com fuck.com fuck.sc fuck55.net fuck6teen.comfuckableteens.netfuckbookecuador.com fuckcuck.com fuckgames.xxxfuckingawesome.comfuckingfreemovies.comfuckingmatures.comfuckingthreesome.comfuckmatureporn.comfuckmaturepussy.comfuckmeplease.net fuckmoral.comfuckmypakistanigf.comfucksexhub.comfuckteenvids.comfuckthathussy.com fucktube.com fuckup.xxxfuckvideos.biz -fujossy.jp  fukzr1.cc fulanax.com  fuli3.net fulib711.shopfuliba2021.comfuliba2023.netfullbookmm.blogspot.comfulldesisex.com fullfuli.com fullhdxxx.comfullpornnetwork.comfullsexmovs.com fulltaboo.tvfullxxxmovies.netfunshemale.com fuq.com  fuqqt.comfuraffinity.netfurrypornvideos.com +fujossy.jp  fukzr1.cc fulanax.comfuli-wangzhan.com  fuli3.net fulib711.shopfuliba2021.comfuliba2023.netfulipic.gumroad.comfullbookmm.blogspot.comfulldesisex.com fullfuli.com fullhdxxx.comfullpornnetwork.comfullsexmovs.com fulltaboo.tvfullxxxmovies.netfunshemale.com fuq.com  fuqqt.comfuraffinity.netfurrypornvideos.com furuke.com fuskator.com fusker.xxxfutanarihq.com fuxporn.com fuzokudx.com -fxporn.net fzdshare.net g-xxxhub.com g1d1goob.xyz  gaito.xyzgallery-dump.clubgalleryarchives.com gamboporn.com gamcore.com gamerotic.comgamesathletes.comgamesfuckgirls.comgamesofdesire.com gandhara.ru gao1.ccgarotaporno.comgarotoesperto.comgastrointestinalexam.com gate.ccgauleporno.xxx  gay.bingo gay0day.comgay1069sex.com gay4tube.com gayapatal.comgayasianamateurs.comgayasiantheater.comgayasianxxx.com gaybeeg.info  gaybf.comgayboystube.com gaybubble.comgaycamvideos.net gaycock4u.com gayforit.eugayfuckporn.com gayfuror.com gayharem.com gayheaven.orggaymaletube.comgaymenring.comgayonthenet.net -gaypad.netgaypinoyporn.com gayporn.com gayporn.progaypornforyou.comgaypornhdfree.comgaypornlinks.comgaypornlove.netgaypornmenu.com gayporno.fmgaypornonly.comgaypornsky.comgayrawclub.com gayroom.comgaysheaven.blogspot.comgaysitessearch.cc gaysonic.eugaystarnews.com gaystream.pwgaythebest.comgaytopcams.com gaytube.com  gayvl.net gazounabi.comgbluebooks.blogspot.com -gcolle.net gdsrx888.com geceguby.rugeilegratisporno.com geileomas.comgeinoueroch.com gelbooru.com gelbooru.megelbooru.wjcodes.comgenitourinaryexam.comgenkai-hounyo.comgenshin-porn.com genshinh.com getfappy.com -getporn.tvgetsexgames.com gfarchive.com -gfjizz.com gfleaks.com +fxporn.net fzdshare.net g-xxxhub.com  gaito.xyzgallery-dump.clubgalleryarchives.com gamboporn.com gamcore.com gamerotic.comgamesathletes.comgamesfuckgirls.comgamesofdesire.com gandhara.ru gao1.cc +gaofuwu.cc gaozs18.buzzgarotaporno.comgastrointestinalexam.com gate.ccgauleporno.xxx  gay.bingo gay0day.comgay1069sex.com gay4tube.com gayapatal.comgayasianamateurs.comgayasiantheater.com gaybeeg.info  gaybf.comgayboystube.com gaybubble.comgaycamvideos.net gaycock4u.com gayforit.eugayfuckporn.com gayfuror.com gayharem.com gayheaven.orggaymaletube.comgaymenring.comgayonthenet.net +gaypad.netgaypinoyporn.com gayporn.com gayporn.progaypornforyou.comgaypornhdfree.comgaypornlinks.comgaypornlove.netgaypornmenu.com gayporno.fmgaypornonly.comgaypornsky.comgayrawclub.com gayroom.comgaysheaven.blogspot.com gaysonic.eugaystarnews.com gaystream.pwgaythebest.comgaytopcams.com gaytube.com  gayvl.net gazounabi.comgbluebooks.blogspot.com +gcolle.net gdian-dh.mom gdsrx888.com geceguby.rugeilegratisporno.com geileomas.comgeinoueroch.com gelbooru.com gelbooru.megelbooru.wjcodes.com geng8cn.xyz gengba-av.mom  gengba.ccgenkai-hounyo.comgenshin-porn.com genshinh.com +getchu.com getfappy.com +getporn.tvgetsexgames.com gfarchive.com gfleaks.com gfpics.com gfpornbox.comgfpornmovies.comgfpornvideos.com gfrevenge.com gfysex.com -ggdiao.com  ggjav.comghettotube.com ghtv666.topgiantessbooru.com gifnuki.com gigantits.com gigaporn.orggigaxvideos.com -ginmoe.comgirl-secret.com girl7942.comgirlfriendgalleries.netgirlfriendhomeporn.comgirlfriendvideos.comgirlfriendvids.netgirlfuckshorse.net girlfur.com  girls.xyz girls2see.chgirlscanner.cc girlscv.comgirlsdelta.comgirlsfuck-tube.comgirlsheaven-job.netgirlsnudepic.comgirlsofdesire.orggirlsongirlstube.comgirlspoopingtube.comgirlssexxxx.comgirlstryanal.com girlsway.comgirlswelustfor.com girlsxxx.net gizmoxxx.com gladporn.com glam0ur.comglamourtits.com gloporn.comgloryholefucking.comgloryholeswallow.com gnom-cham.com gnzi.xyz  gnzi1.topgo-gaytube.com  go141.com  go2av.comgockhuatviet.com gofucker.comgofuckmenow.com gohentai.net gold-gay.com goldengate.hu -goldgay.tv goldjizz.comgoldsexvideos.comgoldteenporn.comgonzo-movies.com  gonzo.com good-gay.com goodporn.to goodporno.ccgoodsexporn.orggoporngate.com goragay.com gosexpod.comgoshemalecams.comgostosanovinha.com gotblop.comgotgayporn.com gothdporn.com gotporn.com  gouri.xyzgrabhentai.com grabpussy.comgradeuptube.com -graias.comgraiasmovies.comgrandepornogratis.comgrandfuckauto.xxxgrannylister.comgrannytube.netgratisvideokijken.nlgreatretroporn.comgreginhollywood.com -grooby.com groupfun.comguaranitermal.com  guifw.xyz -guifw2.topguochantube.com guochanw.lifeguruofporn.comguysnightlife.comgyakusimei.com gynoexam.info +ggdiao.com  ggjav.com  ggpds.comghettotube.comgiantessbooru.com gifnuki.com gigantits.com gigaporn.orggigaxvideos.com +ginmoe.comgirl-secret.com girl7942.comgirlfriendgalleries.netgirlfriendhomeporn.comgirlfriendvideos.comgirlfriendvids.netgirlfuckshorse.net girlfur.com  girls.xyz girls2see.chgirlscanner.cc girlscv.comgirlsdelta.comgirlsfuck-tube.comgirlsheaven-job.netgirlsnudepic.comgirlsofdesire.orggirlsongirlstube.comgirlspoopingtube.comgirlssexxxx.comgirlstryanal.com girlsway.comgirlswelustfor.com girlsxxx.net gizmoxxx.com gladporn.com glam0ur.comglamourtits.com gloporn.comgloryholeswallow.com gnai-dh.sbs gnailapp.sbs gnom-cham.com gnzi.xyz  gnzi1.topgo-gaytube.com  go141.com  go2av.comgockhuatviet.com gofucker.comgofuckmenow.com gohentai.net gold-gay.com goldengate.hu +goldgay.tv goldjizz.comgoldsexvideos.comgoldteenporn.com goldvip.cyougongkou-cc.sbsgonzo-movies.com  gonzo.com good-gay.com goodporn.to goodporno.ccgoodsexporn.orggoporngate.com goragay.com gosexpod.comgoshemalecams.comgossipfuli4511.xyzgossipfuli5522.xyzgossipfuli6883.xyzgostosanovinha.com gotblop.comgotgayporn.com gothdporn.com gotporn.com  gouri.xyz +gqzmnav.ccgrabhentai.com grabpussy.comgradeuptube.com +graias.comgraiasmovies.comgrandepornogratis.comgrandfuckauto.xxxgrannylister.comgrannytube.netgreatretroporn.comgreginhollywood.com +grooby.com groupfun.com  gt536.topguaranitermal.com  guifw.xyzguochantube.com guochanw.lifeguruofporn.comguysnightlife.comgyakusimei.com gynoexam.info gyutto.comh-doujinshi.xyz h-flash.comh-top.supertop-100.com h-webtoon.com  h0930.com h18ani1.vip -h2porn.com h528.com hadesex.com haha888.xyz haho.moehairy-amateurs.comhairy-beauty.comhairy-women-pussy.nethairyclassic.comhairydivas.comhairynature.comhairyolder.comhairypornsite.com haisetu.net haitenjp.comhamsterfucktube.comhamsterporn.tvhandjobcumvideos.comhandjobhub.comhandjobtube4free.com  hanime.me  hanime.tv +h2porn.com h528.com hadesex.com haha888.xyz haho.moe haijiao.comhairy-amateurs.comhairy-beauty.comhairy-women-pussy.nethairyclassic.comhairydivas.comhairynature.comhairyolder.comhairypornsite.com haisetu.net haitenjp.com hami-mod.buzzhamsterfucktube.comhamsterporn.tv hanbao-tv.lolhandjobhub.comhandjobtube4free.com  hanime.me  hanime.tv hanime.xxx -hanime1.me haori888.comhardanalfucking.comhardcore-sex-filme.comhardcoregayblog.com hardsex8.comhardsextube.com  hardx.com harvard.xxx hbox.jp hbrowse.com +hanime1.me hanr-bao.mom  hao21.xyz  hao62.xyz haori888.comhardcore-sex-filme.comhardcoregayblog.com hardsex8.comhardsextube.com  hardx.com hbox.jp hbrowse.com hcbdsm.com hclips.com hcomic.nethcomicbook.com hd-tubes.com -hd1999.top hdabla.net hdb1.app hdbigass.com hddgames.cchdfreeporn.net hdgaytube.xxx hdhole.comhdjavonline.com hdouban.com hdouban2.com hdouga.comhdporn1080.net hdporn92.comhdporncomics.comhdpornfree.xxx hdpornmax.net hdpornt.comhdpornvideo.xxx hdready.xxx hdreporn.com  hdsex.pro hdsexxx.net  hdtube.co hdtube1.comhdvideosporn.net -hdxnxx.xxx hdxx.tv  hdzog.comhealthcarecareeronline.comheartbreakers.galleryheartbreakers.infoheavenlyhentai.com heavy-r.comheavyfetish.com  hegre.com heijidi.lifehelixstudios.nethelloavgirls.com hellporno.com hellven.net hentai-ani.mehentai-archive.comhentai-books.comhentai-cosplays.comhentai-covers.sitehentai-eroanime.nethentai-for.nethentai-fun.comhentai-gamer.comhentai-gif-anime.comhentai-img.comhentai-moon.com!hentai-space.supertop-100.com"hentai-top100.supertop-100.comhentai-vostfr.net hentai.desi hentai.game  hentai.io hentai.name hentai.pink -hentai.pro hentai.toys  hentai.tv hentai0.com hentai01.com hentai2.nethentai2012.com hentai247.net hentai24h.org hentai24h.tvhentai2games.comhentai2read.com hentai2w.comhentai3dvideo.biz hentai44.comhentai4free.nethentai4manga.com hentai69.lifehentai69.online hentaia.nethentaiaction.nethentaiasmr.moehentaibaka.one hentaibar.comhentaiblue.comhentaibros.comhentaicity.comhentaicloud.comhentaiclub.nethentaicomic.ruhentaicomics.asiahentaicomics.lifehentaicore.nethentaicore.orghentaicovid.comhentaidirectory.orghentaidude.comhentaidude.xxxhentaienvy.com hentaiera.com hentaiero.net hentaifc.com hentaifox.com hentaifox.tvhentaifreak.orghentaifromhell.orghentaigamer.orghentaigamesplanet.comhentaigasm.comhentaihand.comhentaihaven.comhentaihaven.iohentaihaven.mehentaihaven.redhentaihaven.xxxhentaiheadlines.comhentaihere.comhentaiheroes.com hentaihub.xxx hentaikey.comhentaiknight.comhentailabs.comhentailegendado.com hentaimama.iohentaimangaporn.comhentaimovieplanet.comhentainanime.comhentainhaven.comhentainstream.comhentaipapa.com hentaipaw.comhentaiplay.nethentaiporn.comhentaipornonly.com hentaiprn.comhentaiprno.comhentaipros.comhentairank.supertop-100.comhentairead.comhentairead.infohentairead.vip hentairox.comhentairules.net hentais.tube hentaisea.comhentaiseason.comhentaispark.comhentaistream.comhentaistream.tvhentaistube.comhentaisub.infohentaitalk.com hentaitk.comhentaitube.onlinehentaivideos.net hentaivvz.comhentaiworld.euhentaiworld.tvhentaiworldporn.com +hdxnxx.xxx hdxx.tv  hdzog.comhealth026.clickhealthcarecareeronline.comheartbreakers.galleryheartbreakers.infoheavenlyhentai.com heavy-r.comheavyfetish.com  hegre.com heiguab.top heijidi.lifeheise360181.buzzheise360182.buzzhelixstudios.nethelloavgirls.com hellporno.com hellven.net hentai-ani.mehentai-archive.comhentai-books.comhentai-cosplays.comhentai-covers.sitehentai-eroanime.nethentai-for.nethentai-fun.comhentai-gamer.comhentai-gif-anime.comhentai-img.comhentai-moon.com!hentai-space.supertop-100.com"hentai-top100.supertop-100.comhentai-vostfr.net hentai.desi hentai.game  hentai.io hentai.name hentai.pink +hentai.pro hentai.toys  hentai.tv hentai0.com hentai01.com hentai2.nethentai2012.com hentai247.net hentai24h.org hentai24h.tvhentai2games.comhentai2read.com hentai2w.comhentai3dvideo.biz hentai44.comhentai4free.nethentai4manga.com hentai69.lifehentai69.online hentaia.nethentaiaction.nethentaiasmr.moehentaibaka.one hentaibar.comhentaiblue.comhentaibros.comhentaicity.comhentaicloud.comhentaiclub.nethentaicomic.ruhentaicomics.asiahentaicomics.lifehentaicore.nethentaicore.orghentaicovid.comhentaidirectory.orghentaidude.comhentaidude.xxxhentaienvy.com hentaiera.com hentaiero.net hentaifc.com hentaifox.com hentaifox.tvhentaifreak.orghentaifromhell.orghentaigamer.orghentaigamesplanet.comhentaigasm.comhentaihand.comhentaihaven.comhentaihaven.iohentaihaven.mehentaihaven.redhentaihaven.xxxhentaiheadlines.comhentaihere.comhentaiheroes.com hentaihub.xxx hentaikey.comhentaiknight.comhentailabs.comhentailegendado.com hentaimama.iohentaimangaporn.comhentaimovieplanet.comhentainanime.comhentainhaven.comhentainstream.comhentaipapa.com hentaipaw.comhentaiplay.nethentaiporn.comhentaipornonly.com hentaiprn.comhentaiprno.comhentaipros.comhentairank.supertop-100.comhentairead.comhentairead.infohentairead.vip hentairox.comhentairules.net hentais.tube hentaisea.comhentaiseason.comhentaispark.comhentaistream.comhentaistream.tvhentaistube.comhentaisub.infohentaitalk.com hentaitk.comhentaitokyo.comhentaitube.onlinehentaivideos.net hentaivvz.comhentaiworld.euhentaiworld.tvhentaiworldporn.com hentaix.me hentaixxx.viphentaixxxvids.com hentaiyes.com -hentaiz.cc -hentaiz.co hentaiz.mobi hentaiz.vip hentaizap.comhentaizilla.com hentaizz.nethenti-night.comhereistheporn.com herexxx.comhernudepics.com herodex.org heroero.comhexatronik.com heydouga.com -hgamer.pro -hgsacx.comhh-content.com hhtdq17.comhiddenvoyeurspy.com hidefporn.ws hifiporn.fun hifixxx.fun -hifuli.comhighcolonic.info highporn.nethilostripper.com -hiporn.nethippyhillscomix.comhiswifepussy.com hitbdsm.com  hitomi.la hitxhot.com hkbigman.net hlbelygl.com hmd.site hnalady.com hnext.jp hnntube.comhobonichielog.com hoes.com hoge.7jp.info holaporno.xxxholdemstripem.com holloporn.comhollyrandall.comhome-made-porn-movies.comhome-made-videos.comhome-sex-tapes.comhomefuckingmovies.comhomegrownfreaks.nethomemade-porn-video.comhomemadeamateur.comhomemadeanalporn.comhomemadefucktube.comhomemadepornclip.comhomemadeporntubes.comhomemadevids.nethomemoviestube.comhomepornbay.comhomepornking.comhomepornvideo.nethomesexmade.com homo.xxxhomofans.blogspot.comhonestpornreviews.com hongjie10.xyz hongjie11.xyzhongkongdoll.tvhongkongdollvideo.orghongmaodan100.comhoodamateurs.comhornybitches.org hornybutt.com hornychat.nethornyelephant.comhornygamer.comhornygfporn.comhornygirlsonline.org hornyjav.comhornysexgame.comhornywhores.net horse-cum.net horse4sex.comhorsecock.guruhorsecumshot.net horsedick.nethorsedicks.nethorsemecum.com horseporn.tvhot-arab-films.comhot-cartoon.comhot-gayporn.comhot-sex-photos.comhot-sex-tube.com hot-teens.com hot2048.comhotamateurblowjobs.comhotasianbabes.comhotcandyland.comhotcuckoldwife.comhotcumporn.comhotescortdusseldorf.com hotfiesta.comhotfucktube.comhotgaylist.com hotgirl.asiahotgirlsclips.com +hentaiz.co hentaiz.mobi hentaiz.vip hentaizap.comhentaizilla.com hentaizz.nethenti-night.comhereistheporn.com herexxx.comhernudepics.com heroero.comhexatronik.com heydouga.com hg.cool +hgamer.prohh-content.comhiddenvoyeurspy.com hidefporn.ws hifiporn.fun hifixxx.fun +hifuli.com highporn.net +hihigv.comhilostripper.com +hiporn.nethippyhillscomix.comhiswifepussy.com hitbdsm.com  hitomi.la hitxhot.com +hjb246.top +hjb7e9.top hkbigman.net hkf2023.lathkf202311.sitehkf202312.shop hlbelygl.com hlsp1.pw hmd.site  hmfby.com  hmfun.top hmovie-moe.us hnalady.com hnext.jp hnntube.comhobonichielog.com hoes.com hoge.7jp.info holaporno.xxxholdemstripem.com holloporn.comhollyrandall.comhome-made-porn-movies.comhome-made-videos.comhome-sex-tapes.com home-song.comhomefuckingmovies.comhomegrownfreaks.nethomemade-porn-video.comhomemadeamateur.comhomemadeanalporn.comhomemadefucktube.comhomemadepornclip.comhomemadeporntubes.comhomemadevids.nethomemoviestube.comhomepornbay.comhomepornking.comhomepornvideo.nethomesexmade.com homo.xxxhomofans.blogspot.comhonestpornreviews.com hongjie10.xyz hongjie11.xyzhongkongdoll.tvhongkongdollvideo.org +honnaka.jphoodamateurs.comhornybitches.org hornybutt.com hornychat.nethornyelephant.comhornygamer.comhornygfporn.comhornygirlsonline.org hornyjav.comhornywhores.net horse-cum.net horse4sex.comhorsecock.guruhorsecumshot.net horsedick.nethorsedicks.nethorsemecum.com horseporn.tvhot-arab-films.comhot-cartoon.comhot-gayporn.comhot-sex-photos.comhot-sex-tube.com hot-teens.com hot2048.comhotamateurblowjobs.comhotasianbabes.comhotcandyland.comhotcuckoldwife.comhotcumporn.comhotescortdusseldorf.com hotfiesta.comhotfucktube.comhotgaylist.com hotgirl.asiahotgirlsclips.com hotgoo.com hothdsex.xxxhothomemade.comhotindianbabe.comhotindianxxxsex.com  hotjav.tvhotladsworld.comhotladyhere.com hotmovies.com hotmovs.com hotntubes.comhotnudegirls.net hotporn.todayhotpornbible.comhotpornfile.orghotporntubes.com hotscope.tvhotsexvideo.mobihotsexydolls.comhotstunners.comhotteenfreecam.comhottestfilms.com hottystop.comhotwifemovies.com hotzxgirl.com howfuck.me hpjav.tv hptv.fun hq69.com hqbabes.com -hqbutt.com hqcollect.net hqdesexo.com hqporner.com +hqbutt.com hqdesexo.com hqporner.com hqseek.comhqtrannytube.com -hqtube.xxxhqxxxmovies.com hrecords.jp hsex.men hsex.tv hshsxkj.com hsxhr.cc -ht3200.tophtanime.epizy.com htyj-bj.com huangse.love huarenav.comhuarenporn.com huashundg.com huati.cchuaxin-lls.xyz hugedildo.com -hugesex.tv huj-pizda.comhuluhuluhuluhulu10.work humoron.comhungryclit.com hunk.ws huohaore.nethussiepass.com hustler.com  hxc10.vip +hqtube.xxxhqxxxmovies.com hrecords.jp hsex.men hsex.tv hshsxkj.com hsxsp1.buzz hsyy.viphtanime.epizy.com htyj-bj.com huabansp.comhuabansp7.club huangse.love huarenav.comhuarenporn.com huashundg.com huati.cchuaxin-lls.xyz huaxin80.com huaxinvip.top hugedildo.com +hugesex.tv huj-pizda.comhuluhuluhuluhulu10.work humoron.comhungryclit.com hunk.ws huohaore.nethussiepass.com hustler.com hxcsxs.pro hxdoll.com -hxxn12.tophycgm1324.shophyperdreams.com hypnohub.net hypnoporn.net hypnotube.comhypodermic-injection.com!hypodermicinjectiononline.com hyu2.com hzmn.net -i69.com.tw  i91av.org iafd.com iavnight.com ibradome.com  icegay.tv icegaytube.tv iceporn.comiceporncasting.comichigocandy.comichineseporn.comicuminside.comideal-teens.comidol-sagasukun.com iframejav.com ifuckedmy.mom igaychat.com igayporn.tvigetnaughty.com igkbroker.comigotpornpics.com  iijav.com +hxxn12.tophyperdreams.com hypnohub.net hypnoporn.net hypnotube.com hzmn.net +i69.com.tw  i91dz.com iafd.com iavnight.com ibradome.com  icegay.tv icegaytube.tv iceporn.comiceporncasting.comichigocandy.comichineseporn.comicuminside.com idarkdoll.comideal-teens.comideapocket.comidol-sagasukun.com iframejav.com ifuckedmy.mom igaychat.com igayporn.tvigetnaughty.com igkbroker.comigotpornpics.com ihsd-mp4.pics  ihsdav.cc  iijav.com iirmll.com -ijavhd.comiknowthatgirl.comilove-movies.comiloveinterracial.comiloveprettylolimm.com ilovexs.com imagefap.com imagepost.comimagetwist.com -imaypb.com img4.uk imhentai.xxx +ijavhd.comijavtorrent.com +ikanhm.xyz +ikanmh.xyziknowthatgirl.comilove-movies.comiloveinterracial.com ilovexs.com imagefap.com imagepost.comimagetwist.com +imaypb.com imhentai.xxx imilfs.com imlive.com -immoral.jp  immxd.comimperiodefamosas.com -imsrbx.xyz  imzog.com inaporn.com inasian.clubincestflix.comincesto.blog.brincestporn.xxxincestvidz.com -incezt.netindependentdubaiescorts.com indexxx.comindian-free-xnxx.comindian-pornstars.comindianfuck2.comindiangfvideos.comindiangirlsclub.comindianhiddencams.comindianpornfast.comindianporngirls.comindianpornvideo.orgindianpornvideos2.comindiansexmms2.comindiansexpussy.comindiansexstories.netindiansexstories2.netindienudes.comindonesiaporn.nameinfinitetoons.cominfinitetube.cominfluencersgonewild.comingyenszexvideo.topinhumanity.cominkedravens.com -inporn.com instabang.cominstantfap.cominstantfapgay.com instawank.cominteractivesex.xxxinternetexxxplorer.cominterracial-sites.com intescort.comintimateinvasions.com intporn.comintramuscularinjection.info inxporn.com iporntoo.com iporntv.netipostnaked.com iqq2.cc iqq3.cc  iqqtv.netiranianboobs.com iransextv.com  iranx.net iromod91.info irotv301.top isexlove.tw isexomega.tw isfocus.net +immoral.jp  immxd.comimperiodefamosas.com  imzog.com inaporn.com inasian.clubincestflix.comincesto.blog.brincestporn.xxxincestvidz.com +incezt.net indexxx.comindian-free-xnxx.comindianfuck2.comindiangfvideos.comindiangirlsclub.comindianhiddencams.comindianpornfast.comindianporngirls.comindianpornvideo.orgindianpornvideos2.comindiansexmms2.comindiansexpussy.comindiansexstories.netindiansexstories2.netindienudes.comindies-av.co.jpindonesiaporn.nameinfinitetoons.cominfinitetube.cominfluencersgonewild.com +inherd.mominhumanity.cominkedravens.com +inporn.com instabang.cominstantfap.cominstantfapgay.com instawank.com +insuyo.xyzinteractivesex.xxxinterracial-sites.com intescort.comintimateinvasions.com intporn.comintramuscularinjection.info inxporn.com  iooog.sbs iporntoo.com iporntv.netipostnaked.comiqiyiavlive.buzz iqq2.cc iqq3.cc  iqqtv.netiranianboobs.com iransextv.com  iranx.net irotv301.top isexlove.tw isfocus.net iss138.comissitedownrightnow.com istripper.com -ita-do.comitaeromanga.com ithaisex.com itsfuck.comivintageporn.com iw8j.cc iwank.tviwantavnow.comiwantgalleries.comiwantmature.com iwantporn.net iwara.tv iwyn138.com ixnxx.tv ixxx.com  iyalc.com iyottube.com jabcomix.com  jable.orgjade-net-home.com -jadult.net jafgrown.com jambotube.com +ita-do.comitaeromanga.com itsfuck.comivintageporn.com iwank.tviwantavnow.comiwantgalleries.comiwantmature.com iwantporn.net iwara.tv iwyn138.com ixnxx.tv ixxx.com  iyalc.com jabcomix.com  jable.orgjade-net-home.com +jadult.net jambotube.com janor6.netjapan-whores.comjapan18tube.comjapanbeast.comjapanese-scat.netjapaneseasmr.comjapanesebeauties.netjapanesebeauties.onejapanesegirlspictures.comjapaneselovelygirl.com japanfist.org japanporn.tvjapanxxxfilms.comjapon-girls.com japteenx.com japxtube.com -jasmin.com jav-1080.com jav-angel.netjav-legend.comjav-subtitles.com +jasmin.com jav-angel.netjav-subtitles.com jav-vr.net jav.dog jav.gallery jav.guru jav.la jav.land  jav.place jav.si jav.wine jav01.cc @@ -10077,113 +10798,127 @@ jav223.com  jav24.com jav2be.com jav321.com jav4you.org jav789.com -jav889.xyz jav9999.com javbabe.netjavbangers.com javbobo.com javbooks.com javbraze.com +jav889.xyz jav9999.com javbabe.netjavbangers.com +javbest.tv javbobo.com javbooks.com javbraze.com javbuz.com  javcl.com  javct.net -javcup.com  javday.tv javdisk.com javdock.com -javdoe.com  javdoe.to javdove.com javdove8.xyzjavextreme.net javfilms.com  javfor.mejavforme.ninja +javcup.comjavdatabase.com  javday.tv javdisk.com javdock.com  javdoe.to javdove.com javdove8.xyzjavextreme.net javfilms.com  javfor.mejavforme.ninja javfree.la javfree.me javfree.sh javfuck.net javfull.net  javfun.me  javfv.com  javgg.net javgrown.com javhard.net javhard.org javhaven.com javhay.net  javhd.com  javhd.icu  javhd.pro javhd.today javhd3x.com javhdfree.netjavhdhello.comjavhdonline.com javhdporn.com javhdporn.net javher.comjavheroine.com javhihi.com  javhub.me -javhub.net javidol.org javjack.comjavjunkies.com javkiki.com javlands.net javleak.comjavlibrary.com javlibrary.tv javmany.com javmenu.com  javmix.me  javmix.tvjavmobile.mobi javmodel.com javmost.com -javmost.cx javmost.xyz javmuch.com +javhub.net javidol.org javjack.comjavjunkies.com javlands.net javleak.comjavlibrary.com javlibrary.tv javmenu.com  javmix.me  javmix.tvjavmobile.mobi javmodel.com javmost.com +javmost.cx javmost.xyz javmuch.com javmulu.net javnew.net javopen.co  javout.cojavplatform.com javpop.com javpop.link javporn.tech javporn.ws javpost.net javprice.com javprime.net  javpub.me javpush.com  javqd.com javrank.com javrave.club javscat.netjavscatsex.comjavscatting.comjavscreens.com -javseen.tv javsex.asia  javsex.to  javsin.tv  javsky.tvjavspanking.com javstar.club javstore.net  javsx.com +javseen.tv javsex.asia  javsin.tv  javsky.tvjavspanking.com javstar.club javstore.net  javsx.com javtag.net javtasty.com -javteg.net javtiful.com javtorrent.me javtorrent.tkjavtrailers.com javtrust.com -javtube.cc javtube.com javtube.net javtv.to javvids.com javxspot.com  javxxx.me javynow.com jayspov.net jdavsp.asia  jdavsp.pw jdforum.net jennylist.xyz jenporno.cz jerk-porn.com -jerk24.com jerkdolls.com jerkdude.com jerkmate.com jerkmate.tvjerkmatelive.orgjerkofftocelebs.com  jgg18.xyz jiayoulu.com  jieav.com -jilhub.comjinmantiankong.com jinnaju.comjinsilubanzhao.com jiuse904.com jiuse905.comjiuzhouyihuo.com jiyou520.com jizzboom.comjizzbunker.com jizzhut.com -jizzle.comjizzonline.com jjaaxyz.com jjdong7.com jjgirls.com  jjsuo.sbs jm98.ccjodic-forum.orgjohnpersons.com joiasmr.com joinside.org jokerlu1.cc jokerlu1.info -joyclub.de joyhentai.comjoylovedolls.comjoyourself.com joysporn.com jpav.us jpavcom.com -jpbabe.com jpboy1069.net jpg4.biz  jpg4.info jpg4.pw +javteg.net javtiful.com javtorrent.mejavtrailers.com javtrust.com +javtube.cc javtube.com javtube.net javvids.com javxspot.com  javxxx.me javynow.com jayspov.net jb22.lol  jburl.top jdav-css.shop jdavsp.asia +jdavsp.com jdavsp.info  jdavsp.pw +jdavsp.top +jdavsp.xyz jdforum.net jennylist.xyz jenporno.cz jerk-porn.com +jerk24.com jerkdolls.com jerkdude.com jerkmate.com jerkmate.tvjerkmatelive.orgjerkofftocelebs.com  jgg18.xyz  jhzyw.xyzjiaochuanba25.buzzjiaochuanba26.buzz jiayoulu.com  jieav.com +jilhub.com jimeng22.com jiuse.ai  jiuse.icu jiuse.io jiuse.com.co jiuse821.com jiuse822.com jiuse823.com +jstv51.com +jstv52.com +jstv53.com jiyou520.com jizzboom.comjizzbunker.com jizzhut.com +jizzle.comjizzonline.com jjgirls.com  jjsuo.sbs +jkycjk.mom +jkzvz.shop  jkzw.shop jlb0011.site jm98.cc  jmvbt.comjodic-forum.orgjohnpersons.com joiasmr.com joinside.orgjokerlu-go.buzz jokerlu.asia jokerlu.world jokerlu1.cc jokerlu1.info +joyclub.dejoylovedolls.comjoyourself.com joysporn.com jpav.us jpavcom.com +jpbabe.com jpboy1069.net jpg4.biz jpg4.pw jpg4us.net -jpvhub.com  jsz91.com jtube.space judeporn.com juggsjoy.comjuicytwink.comjulesjordan.comjuliamovies.comjusmynote.wordpress.com just.xxxjustfamilyporn.comjustfullporn.org -justhd.xyzjustindianporn.mejustlesbianpussy.comjustnudepic.comjustpicsplease.com justporn.com justporn.link justporno.es justporno.sex justporno.tvjustswallows.comjustusboys.com juyangbee.xyz juyangto.info -juzige.xyz -jwkcgd.xyz +jpvhub.com  jsz91.com jtube.space judeporn.com juggsjoy.com juiceced.xyzjuicytwink.comjulesjordan.comjuliamovies.comjusmynote.wordpress.com just.xxxjustfamilyporn.comjustfullporn.org +justhd.xyzjustindianporn.mejustlesbianpussy.comjustnudepic.comjustpicsplease.com justporn.com justporn.link justporno.es justporno.sex justporno.tvjustswallows.comjustusboys.com juyangbee.xyz juyangto.info juzi-js.shop +juzige.xyz  jzydh.com k9vidz.com kaamuu.comkairakudoujin.net kaktuz.com -kama-nk.ru kamababa.comkampalaexclusiveescorts.com kanporno.com  kaob3.xyz karupsha.com karupspc.com katestube.com -kav.tw kbdxlesx.xyz +kama-nk.ru kamababa.comkampalaexclusiveescorts.com +kanav.info kanporno.com  kaob3.xyz karupsha.com karupspc.com katestube.comkawaiikawaii.jp kc3000.shop kcqsw-na.sbs +kdfuli.comkdy202312.shop keaiav.com kechtube.comkendralist.com kenxxx.com -kenya4.comkenyanporn.blogspot.com kenyaraha.netkenyasexparadise.comkeyporntube.comkhayannpyar.blogspot.comkhotruyentranhx.com kichikuou.com kickporn.com kikdirty.com  kimchi.tv kimogirl.cc kimosex.com kindgirls.comkindindianporn.comkindnudist.comkindteenporn.com kingcomix.com kingextre.mekingofpics.com kink.com kinkbook.com kinklive.com kinkoid.comkinkyfamily.comkinkypeepz.com kir2kos.net +kenya4.comkenyanporn.blogspot.com kenyaraha.netkeyporntube.comkhayannpyar.blogspot.comkhotruyentranhx.com kichikuou.com kickporn.com kikdirty.com  kimchi.tv kimogirl.cc kimosex.com kindgirls.comkindindianporn.comkindnudist.comkindteenporn.com kingcomix.com kingextre.me kingf-av.buzz kingf-av.lol kingf-av.mom kingf-av.sbs kingf-tv.buzz kingfav.sbskingofpics.com kinguno.xyz kink.com kinkbook.com kinklive.com kinkoid.comkinkyfamily.comkinkypeepz.com kir2kos.net kismia.com kisscos.net kissjav.com -kissjav.li kjj05.cn kkfcc03.com kkff2484.live -kmc-av.com +kissjav.li kkfcc03.com  kkiah.com kmdhyy.com kmff17.com koalaporn.comkobe-pastel.com -kompoz.com kompoz2.comkonachan.wjcodes.comkoreanpornmovie.comkorewaeroi.com koskade.comkostenlosepornoclips.com kphimsex.net krhentai.comkristenbjorn.com ksd235qw.comksescortclub.com  kslive.tv -ksyp10.com kuanrenxs.com kum.comkundun1069.comkusugurizanmai.comkutjeporno.com +kompoz.com kompoz2.comkonachan.wjcodes.comkoreanpornmovie.comkorewaeroi.comkostenlosepornoclips.com kouwobb.com kphimsex.net +kpht85.com kpptoto.info krhentai.comkristenbjorn.com ksd235qw.comksescortclub.com +ksyp10.com ku77.xyzkuaimao-app.com kuanrenxs.com kum.com  kun66.xyzkundun1069.comkusugurizanmai.comkutjeporno.com la-mama.ru lacomics.org -ladies.com ladybaba.netladyboygold.comladyboygold.euladyboypornonly.comlanasbigboobs.com langsuirs.comlaosijifuli9009.top laowang.vip laowang.viplargecamtube.comlargeporntube.comlatinaabuse.comlatintubeporn.com laxd.com lazymike.comlbfmaddiction.com -lbtube.com lcgirls.comleakedmeat.comleaksmodels.com leakxxx.comlelavement.com leliao1.com lemoncams.com lenkino.xxx lenporno.red leporno.orglepornochaud.comlepornofrais.com lesbian8.comlesbianpics.orglesbianpornvideos.comlesbiansubmission.comlesboerotica.net +ladies.com ladybaba.netladyboygold.comladyboygold.euladyboypornonly.comlanasbigboobs.com langsuirs.com +lanmdh.netlanniser-ylo.shoplaosijifuli9009.top laowang.viplargecamtube.comlargeporntube.comlatinaabuse.comlatintubeporn.com laxd.com lazymike.comlbfmaddiction.com +lbtube.com lcgirls.comleakedmeat.comleaksmodels.com leakxxx.com leliao1.com lemoncams.com lenkino.xxx lenporno.red leporno.orglepornochaud.comlepornofrais.com lesbian8.comlesbianpics.orglesbianpornvideos.comlesbiansubmission.comlesboerotica.net letfap.com letmejerk.com letmejerk.fun letsdoeit.comletsfuckme.net letsjerk.cclettherebeporn.com levelsex.com lewdthots.comlewdvrgames.com lewdweb.net lezpoo.com lgbtq.gameslianhonghong.com lianjiajr.netliboggirls.netlibraryofthumbs.comlifeselector.comlightxxxtube.com lihksnap.com likeseiyu.comliketruyen.net likuoo.videolilhumpers.com liliav.comlilith-soft.com limer.tw limertw.cclimeteensex.com lindylist.orglingeriepornonly.comlink-o-rama.comlink2galleries.com link69.comlinkjunkies.com linkshit.comliterotica.comlittleasians.comlittlesexdolls.comliuhefabu.clublivecamclips.comlivejasmin.comlivejasminbabes.net livemodels.coliveporngirls.comliveprivates.com livesex.comlivesexasian.com -livexxx.melizardporn.com llwht88.xyz +livexxx.melizardporn.comll82y2ifdd.top llbd10.shopllcaoxm-avi.sbs llwht88.xyz lmm167.shop lmmbtc.comlobstertube.comlocalxlist.orgloholidayhk.com lolhentai.net lolibus.cc lolibus.toplolislove.info -lolita.betlollipopescorts.comlondonhotescort.comlonestarnaughtygirls.com looporn.com  looti.netlostbetsgames.com lotcrap.comlove-sextoys.co.uk love4porn.com love6.tv  love7.xyzloveamateurfacials.comlovedolltorso.com lovegirls.camlovehomeporn.com lovejav.netloveloveskill.comlovemstudios.comlovepartners.lifelovesexbody.comlowergiseries.com lp99.pw lpsg.com lqh0bon3.xyz lrysgee.xyz lsawards.com  lsj2.shop  lsj40.xyzlsjfuli308.xyz lsnzxzy1.com -lspimg.com  lss55.com +lolita.betlollipopescorts.comlondonhotescort.comlonestarnaughtygirls.com looporn.com  looti.netlostbetsgames.com lotcrap.comlove-sextoys.co.uk love4porn.com love6.tv  love7.xyzloveamateurfacials.com loveavdh15.cc loveavdh21.cc loveavvip.comlovedolltorso.com lovegirls.camlovehomeporn.com lovejav.netloveloveskill.comlovepartners.lifelovesexbody.com +lovex.lifelowergiseries.com lp99.pw lpsg.com +lqpjw.cyou lrysgee.xyz lsawards.com  lsj2.shop  lsj40.xyzlsjfuli308.xyz +lspimg.com  lss55.com lthgav.buzz ltube.life lu2100.com lu2200.com lu23.com  lu2300.cc luanlunmv.cc lubetube.comlucahmelayu.clublucasentertainment.com lululu.one -luoli.info lupoporno.com luscious.netlushstories.com lustery.com lusthero.com lustteens.net lustylist.com luticlip.com +luoli.infoluotihg-tv.buzz +luotihg.cc lupoporno.com luscious.netlushstories.com lustery.com lusthero.com lustylist.com luticlip.comlutube2310.com luvmov.com luw666.xyz luw666cm.cc luxuretv.com luxuretv.fun -lxxlxx.com m5ir5np1.shopmachigle-sp.commachogaytube.commachosaonatural.com.br machotube.tv madamlive.tvmadchensex.commaddawgjav.netmadhomemadeporn.commadonna-av.com -madou.club madou.la madouav.onemadouzx.monster madouzx.top madpeople.net madthumbs.com madvagina.commafia-linkz.tomagicmovies.commahajantech.com maileoch.commalayporn.sitemalayporn.spacemalaypornhub.commallandrinhas.netmalvastudios.com mamacitaz.commanga-mill.com manga18.art mangahasu.semangahentai.me mangahome.com mangoporn.netmangotporn.com -manhub.com manhunt.netmanhuntdaily.com manhwa24h.commanhwahentai.me manporn.xxx mansurfer.commantochichi.commanurefetish.com manytoon.com manyvids.commarranazas.com masalabin.commasaladesi.commasalaseen.netmassagerepublic.commasterwanker.commasturbate2gether.com mat6tube.commature-amateur-sex.com mature-nl.eumature-porn-flix.commature-tube.sexy  mature.nlmatureclub.com maturefuck.ccmatureladiesxxx.commatureporner.commaturepornonly.commatures-loving-sex.commaturescam.commaturesexual.commaturesinhd.commaturetube.commaturewifeporn.ccmaturewomenanal.commaturexxxvideos.ccmaximumerotica.com  maya5.net mcstories.commd.hkgolden.com mdyy.de mdlf.xyz +lwwcn.buzz  lwwcn.xyz +lxxlxx.commachigle-sp.commachogaytube.commachosaonatural.com.br machotube.tv madamlive.tvmadchensex.commaddawgjav.netmadhomemadeporn.commadonna-av.com +madou.club madou.la madou.tv madouav.one madouqu.com madthumbs.com madvagina.commafia-linkz.tomagicmovies.commahajantech.com maileoch.commalayporn.sitemalayporn.spacemalaypornhub.commallandrinhas.netmalvastudios.com mamacitaz.commanga-mill.com manga18.art mangahasu.semangahentai.me mangahome.com mangoporn.netmangotporn.com +manhub.com manhunt.netmanhuntdaily.com manhwa24h.commanhwahentai.me manporn.xxx mansurfer.commantochichi.commanurefetish.com manytoon.com manyvids.commaomi-shipin.commarranazas.com masalabin.commasaladesi.commasalaseen.netmassage-in-taipei.commassagerepublic.commasterwanker.commasturbate2gether.com mat6tube.commature-amateur-sex.com mature-nl.eumature-porn-flix.commature-tube.sexy  mature.nlmatureclub.com maturefuck.ccmatureladiesxxx.commatureporner.commaturepornonly.commatures-loving-sex.commaturescam.commaturesexual.commaturesinhd.commaturetube.commaturewifeporn.ccmaturewomenanal.commaturexxxvideos.ccmaximumerotica.com  maya5.netmayijiejie.com mcstories.commd.hkgolden.com mdpj-mov.shop mdpjoin.buzz mdr-good.sbs mdr100ya.lat mdtt-tv.sbs mdyy.de me-gay.com mediasama.com medow.ru -meendo.commeetandfuck.gamesmeetandfuckgames.com megacamz.commegafilmporno.commegahdporno.netmegapornfreehd.commegaporno.com.brmegapornpics.com +meendo.commeetandfuck.gamesmeetandfuckgames.com megacamz.commegafilmporno.commegapornfreehd.commegaporno.com.brmegapornpics.com meguso.commeilleurpornos.com meitula.netmelonbooks.co.jpmelonstube.com meme111.com  men18.net menatplay.com mengnan.shop -menhdv.com mensheaven.jpmeoriental.com messytube.com met-nude.com metaporn.commetrotoons.com meuhentai.com mhhanman.xyz  mhqwe.xyz miaomwu.com midoushe.commiexnoviadesnuda.commilehighmedia.com +menhdv.com mensheaven.jpmeoriental.com messytube.com met-nude.com metaporn.commetrotoons.com meuhentai.com mhhanman.xyz  mhqwe.xyz miaomwu.com midoushe.commiexnoviadesnuda.commihomeone.infomilehighmedia.com +milfav.icu milfed.com milffox.commilfhunter.com milflove.livemilfmaturesex.net milfmovs.com milfnut.com milfporn.promilfpornonly.commilfpornpics.xxx milfprime.commilfs-gone-wild.com milfs-now.commilfsexstart.nlmilfslesbian.commilfsover30.com milftube.pro milfvr.com -milfzr.commilkmanbook.commilta1980.co.uk mimei.store -mimi22.top +milfzr.commilkmanbook.com mimei.storemimi-zhibo.com mimi2022.link +mimi22.top mimi222.topmimizy-go.buzz mingky.org mingkyaa.comminisexdoll.comminnano-av.com minuporno.com miohentai.com -missav.commisshotgirls.commistresskym.com  mitao.bar mitnaka.commixasiansex.commixmaturesex.commixvintagesex.com mjv-art.org  mm9841.cc mm9c63ae.xyz -mmaaxx.com  mmtv.life -moapi.site moapi1.club moapi1.onlinemobileporngames.commobilepornmovies.commobilevrxxx.commodelmediaus.commodeloswebcambogota.commodelsfreecams.com modeltv.commoeero-library.com +missav.commisshotgirls.commistresskym.com  mitao.bar mitnaka.commixasiansex.commixmaturesex.commixvintagesex.com mjv-art.org  mm-cg.com  mm9841.cc +mmaaxx.com mmgy.cc +mmscdh.one mmtongdao.xyz  mmtv.life mmwxl27.topmobileporngames.commobilepornmovies.commobilevrxxx.commodelmediaus.commodeloswebcambogota.commodelsfreecams.com modeltv.commoeero-library.com moefuns.co moeimg.net -moemax.net -moez-m.com  mofos.com mofosex.commofosnetwork.com mom-gfs.commom-sex-videos.com  mom50.commomami18.livedoor.blogmomfucktube.commomhomeporn.com momon-ga.com momoniji.commoms-sex-videos.commomsbangteens.commomsboysmovies.netmomsexypics.commomsfuckingboys.netmomsgiveass.commomshardcoreporn.commomsneversayno.com momsporn.sumomspornvideos.commomsteachsex.commomsteachsex.infomomsyoungboys.netmomtarts3d.com momtube.club -monaitv.memoneyswift.online -mono33.topmonstercockland.commonstersexporn.net moozporn.com morazzia.com mornporn.commostpopularpornsites.commotherless.commotherporn.ovhmovie-erog.com movie1000.xyz moviepost.commoviesarena.commoviesfree4u.xyzmoviesneek.com moystoys.commplstudios.com +moez-m.com  mofos.com mofosex.commofosnetwork.com mom-gfs.commom-sex-videos.com  mom50.commomami18.livedoor.blogmomesear-chs.buzzmomfucktube.commomhomeporn.com momon-ga.com momoniji.com +momotk.commoms-sex-videos.commomsbangteens.commomsboysmovies.netmomsexypics.commomsfuckingboys.netmomsgiveass.commomshardcoreporn.commomsneversayno.com momsporn.sumomspornvideos.commomsteachsex.commomsteachsex.infomomsyoungboys.netmomtarts3d.com momtube.club +monaitv.memonstercockland.commonstersexporn.net monthlyav.com moozporn.com morazzia.com mornporn.commostpopularpornsites.commotherless.commovie-erog.com movie1000.xyz moviepost.commoviesarena.commoviesfree4u.xyzmoviesneek.com moystoys.commplstudios.com mrbdsm.commrchewsasianbeaver.com mrcong.commrdeepfakes.com mrlivecam.com mrloli.com mrpinks.commrporngeek.commrpornlive.com mrssiren.com -mrskin.commrvideosdesexo.xxx  msflj.vip mtao.fun mu6bce1c.xyzmuchohentai.commuchomasporno.commulheresafoder.com -mult34.commultipornfor.me multporn.netmundomais.com.br muryouav.netmusclegirlflix.com muycerdas.xxx muyzorras.commvideoporno.xxx mwhentai.net my-enema.commy3dhentai.commyamateurgirls.netmyamateurtv.commyanmar-porn.com myavfun.com +mrskin.commrvideosdesexo.xxx mt0011.site mtao.funmuchohentai.commuchomasporno.commulheresafoder.com +mult34.com multporn.netmundomais.com.br muryouav.netmusclegirlflix.com muycerdas.xxx muyzorras.commvideoporno.xxx +mwcu00.com mwhentai.net +mxshm.site my-enema.commy3dhentai.commyamateurgirls.netmyamateurtv.com myav886.buzz myavfun.com myavok.com myavsuper.com myavxx.xyzmybabehotz.com myboylove.commybukkakeporn.com mycams.commycartoonsexgames.com mycdn.memyclitgames.commycomicsxxx.commyfappening.orgmyfavoritearcade.commyfistingporn.commyfreeblack.commyfreecams.commyfreepaysite.commyfreeporngames.commygaysites.commyhentaicomics.commyhentaigallery.commyhomemadesex.com myjkwd.com mylf.commylittlenieces.com mylust.commymasturbators.commyminisexdoll.commymusclevideo.com mypornads.commypornadviser.commypornbookmarks.com mypornfox.com myporngay.commypornhere.com -myporno.czmyporno.photosmypornolab.clickmypornstarbook.net mypornvid.fun mypornwap.funmyrimmingporn.commysexgames.com mysexygfs.commyteenwebcam.commytrannycams.com mytving.com  mywife.ccmywifecuckold.com myxvids.com myxxgirl.commyyoungmomisnude.commyyoungwifeisnude.com n15zev3w.shopnaaktevrouwenporno.comnaijauncut.comnailedhard.com naizitv.top nakadashi.tonaked-girls.me  naked.comnakedamateurmilf.comnakedasiansex.comnakedgirlpic.comnakedgirls.biznakedmodelsxxx.com nakednews.comnamethatporn.comnamethatpornad.com nan-net.com nanonamad.com naoconto.com napiszex.comnarumiya.xii.jp nasty.singles nastyvids.com naughty.comnaughtyamerica.comnaughtyblog.orgnaughtygamesource.comnaughtyhentai.biznaughtymachinima.comnaughtysophie.comnaughtywomenpics.comneedgayporn.comnekora.main.jp nekoxxx.com nenitas.clubneotokyo.supertop-100.com nerdnudes.com nesaporn.com nesaporn.mobi neswangy.net netarabic.com netfapx.comnetpornsex.comnetpornsex.netnetvideogirls.comneuerporno.com new-akiba.com new-jero.netnew-redtube.comnew3dcomics.comnewbienudes.com newbrazz.comnewgrounds.com newhentai.orgnewlineporn.comnewsensations.com newsextv.com newsexwap.com newsexxxx.com newxxx24.cc ngfiles.com nhentai.com +myporno.czmyporno.photosmypornolab.clickmypornstarbook.net mypornvid.fun mypornwap.funmyrimmingporn.commysexgames.com mysexygfs.commyteenwebcam.commytrannycams.com  mywife.ccmywifecuckold.com myxvids.com myxxgirl.commyyoungmomisnude.commyyoungwifeisnude.comnaaktevrouwenporno.com naihenda.shopnaihendauou.lolnaijauncut.comnailedhard.com naizitv.top nakadashi.tonaked-girls.me  naked.comnakedamateurmilf.comnakedasiansex.comnakedgirlpic.comnakedgirls.biznakedmodelsxxx.com nakednews.comnamethatporn.comnamethatpornad.com nan-net.com naoconto.com napiszex.comnarumiya.xii.jp nasty.singles nastyvids.com naughty.comnaughtyamerica.comnaughtyblog.orgnaughtygamesource.comnaughtyhentai.biznaughtymachinima.comnaughtysophie.comnaughtywomenpics.com nbdh15.buzz nee4you.comneedgayporn.comnekora.main.jp nekoxxx.com nenitas.clubneotokyo.supertop-100.com nerdnudes.com nesaporn.com nesaporn.mobi netarabic.com netfapx.comnetpornsex.comnetpornsex.netnetvideogirls.comneuerporno.com new-akiba.com new-jero.netnew-redtube.comnew3dcomics.comnewbienudes.com newbrazz.comnewgrounds.com newhentai.orgnewlineporn.comnewsensations.com newsextv.com newsexwap.com newsexxxx.com newxxx24.cc nhentai.com nhentai.io nhentai.net nhentai.to nhentai.xxxnhentaihaven.comnhentaihaven.orgniceanimegames.com niceporn.tvnichepornsite.comnichepornsites.comnickscipio.com  nicky.xxxnight.livedoor.biz nightclub.eu nights.fun nijiclamp.comnijidoujin.com -nijie.infonijieronavi.com nijifeti.comnijigen-daiaru.com nijinchu.com nijioma.blognineteentube.com -ninpu.cyou  niuc2.com niziero.info njav.tvnlsexfilmpjes.com nlt-media.comnoc.syosetu.com nonktube.comnonstopfap.comnoodlemagazine.com +nijie.info nijifeti.comnijigen-daiaru.com nijinchu.com nijioma.blognineteentube.com +ninpu.cyou  niuc2.com niziero.info njav.tvnlsexfilmpjes.com nlt-media.comnoc.syosetu.comnondh-room.mom nonktube.comnonstopfap.comnoodlemagazine.com norsk.mobinoveltrove.comnovinhabucetuda.comnovinhagostosa10.comnovinhasdozapzap.com novojoy.comnovostrong.com -nowjav.com  nozomi.la nsfw.xxx -nsfw247.to nsfwmemes.com +nowjav.com  nozomi.la nrdh99.buzz nrooms-dh.sbs nsfw.xxx +nsfw247.to nsfwmemes.com ntten-mg.buzz nu-bay.com nu36.vipnubilefilms.comnubiles-casting.comnubiles-porn.com nubiles.net nubileset.comnubilesunscripted.com nuddess.com nude-pics.orgnude-share.com nude.hunudeandhairy.comnudebeachpussy.com nudecams.camnudecelebforum.comnudedrawer.com nudedxxx.comnudeeroticteens.com nudefiles.netnudegfporn.com nudekenya.com nudelive.comnudematurewomenpics.comnudemilfporn.com -nudes7.com nudespree.com nudeteen.orgnudeteenboys.netnudeteenladies.comnudevietnam.comnudevista.bestnudevista.club nudevista.funnudevista.link nudevista.vipnudewifeporn.comnudewomenpics.netnudistbeachporn.com nudistic.com nudistlog.comnudistsexvideos.comnudistvoyeurbeach.com nudity911.comnudography.comnuespournous.com  nuita.net nukemanga.comnuki-dokoro.com  nurgay.tonurumassage.net nurxxx.mobi nushemale.com nuuporn.com  nuvid.com -nverxs.xyz  nwxs8.com nyahentai.reobutsumania.com  obutu.com ohentai.orgohgratisporrfilm.comohpornocasero.comohpornovideo.com ohsesso.com ohsexfilm.comohsexotube.comohyeah1080.com +nudes7.com nudespree.com nudeteen.orgnudeteenboys.netnudeteenladies.comnudevietnam.comnudevista.bestnudevista.club nudevista.funnudevista.link nudevista.vipnudewifeporn.comnudewomenpics.net nudify.onlinenudistbeachporn.com nudistic.com nudistlog.comnudistsexvideos.comnudistvoyeurbeach.com nudity911.comnudography.comnuespournous.com  nuita.net nukemanga.comnuki-dokoro.com  nurgay.tonurumassage.net nurxxx.mobi nushemale.com nuuporn.com  nuvid.com  nwxs8.com nyahentai.re  nym97.netobutsumania.com  obutu.com ohentai.orgohgratisporrfilm.comohpornocasero.comohpornovideo.com ohsesso.com ohsexfilm.comohsexotube.comohyeah1080.com oiobbs.com ok.xxxokazudouga.blog.jpokazudouga.tokyookkisokuho.comolder-women-movies.comolder-women-porn.com older.tube  oldje.comoli-school.com omafotze.com  omg.adult omg.blog omgteens.com omorashi.jp omorashi.orgonahodouga.comonani-daisuki.com @@ -10191,226 +10926,265 @@ one889.apponejapanese.com onejav.comonepornlist.comonesiterip.comonindiansex.comonlinefucktube.comonlineporn-vids.comonlineteenhub.comonlinexxxgames.comonly-xxx-porn.com only-xxx.com only3x.com onlyams.comonlycartoonsex.com onlydudes.comonlyfanspw.comonlyfreelatinaporn.comonlygayvideo.comonlyhdporn.comonlyhentaistuff.comonlyhomemadeanal.comonlyincestporn.comonlyindianporn.tvonlyindianporn2.com onlyleaks.me onlynudes.org onlyprime.ruonlysiterip.com onstream.cc onxxxtube.comonxxxvideo.com op7979.com opentgc.comoppai-doga.infooppainorakuen.com oreno3d.com -orgasm.comorgasmlist.comorgypornonly.comorgyxxxhub.comorientalasianporn.comoriginalindianporn.com orsm.net -orzqwq.comosakamotion.netosiri-suki-club.com otaku-168.com otaku18a.info otaku55.xyz otbm.comotokonokoland.com -oudoll.comoursexgames.com ourshdtv.comourshemales.comoutdoorpublicsex.comover18arcade.comoverthumbs.com  oxlife.co oxyporn.com oyeloca.com  ozeex.compacopacomama.compaerosnen.club -paheal.netpaidpornguide.compaidpornsites.compainfulpussytortures.com painnovel.com paipancon.compakistanporntube.net palcomix.com pali.ltdpancolle-movie.jppandamovies.pw pankwire.compantswalker.net papalah.comparadisehill.ccpasionmujeres.compassion-hd.com passion.com payserve.compaysitesreviews.net -pbabes.com -pctlwm.compeach-cherry.com peachy18.compeachyforum.com peekvids.compeepholecam.com pejyyah.compelvicexam.info penisbot.com penthouse.compeopledreamfunding.comperfectgirls.netperfectgonzo.comperfectjizz.comperfectnaked.comperfectsexnow.comperfectshemales.comperfecttitspics.compersiankitty.com +orgasm.comorgasmlist.comorgypornonly.comorgyxxxhub.comorientalasianporn.comoriginalindianporn.com orsm.netosakamotion.netosiri-suki-club.com otaku-168.com otaku18a.info otaku55.xyz otbm.comotokonokoland.com +oudoll.comoursexgames.com ourshdtv.comourshemales.comoutdoorpublicsex.comover18arcade.comoverthumbs.com  oxlife.co oyeloca.com  ozeex.compacopacomama.compaerosnen.club +paheal.netpaidpornguide.compaidpornsites.compainfulpussytortures.com painnovel.com paipancon.compakistanporntube.net palcomix.com pali.ltdpancolle-movie.jp panda30.shoppandamovies.pw pankwire.compantswalker.net  paon.site papalah.comparadisehill.ccpasionmujeres.compassion-hd.com passion.com payserve.compaysitesreviews.net +pbabes.com pbjar1205.pro +pctlwm.compeach-cherry.com peachy18.compeachyforum.com peekvids.compeepholecam.compelvicexam.info penisbot.com penthouse.compeopledreamfunding.comperfectgirls.netperfectgonzo.comperfectnaked.comperfectsexnow.comperfectshemales.comperfecttitspics.compersiankitty.com person.com pervclips.com perverse.sexperverttube.com petardas.com petardas.xxxpetardashd.com.ve petite.onepetiteamateurteen.competiteballerinasfucked.competitehdporn.com pgyy67.top pheonix.moneyphimsex47.clubphimsexhentai.mephimsexkhongche.cyouphimsexnhanh.clubphoto-image.monster photos18.com phun.orgphysicalexam.infopicacg2022.com pichunter.com picpost.com pics.vc -pictoa.com pictocum.com  pigav.compikabu.monster pinduck.com pinflix.com pingguotv.xyzpingxiangpuer.com pinkdino.com pinkporno.com pinkpussy.tv pinksporn.compinkteentube.netpinkvelvetvault.com pinkworld.compinyinxiang.compiratecams.com pirouvr.com pjgirls.complanetsuzy.orgplatinumlinks.org playbar.biz playboy.complayboyplus.complayforceone.com playmeow.com playnft.es.ht playno1.complayporngame.complayporngames.complaypornogames.complaysexgames.xxxplaysexygame.com playvids.complayyoungtube.compleasefuck.orgpleasurebabe.compleasuregirl.netpleasuremore.complumperpass.com plusone8.com plusporn.netpmatehunter.compoisontube.compojiefuli20033.xyzpojiefuli9113.xyzponyanimalsex.com poofetish.compoop-pee.onlinepoopee-puke.compoopeegirls.com  popjav.tv porcore.com poringa.net -porkahd.co  porm.clubporn-bokep.comporn-comic.comporn-discounts.comporn-discounts.xxxporn-gratis.infoporn-images-xxx.comporn-list.siteporn-portal.comporn-sex-video.meporn-stalker.fr porn-star.com porn.biz porn.com porn.to porn.xxxporn1videos.com porn2012.com porn2018.com porn300.comporn300.online  porn34.meporn3dgalleries.com porn4days.cc porn4fap.com porn555.com +pictoa.com pictocum.com  pigav.compikabu.monster pinduck.com pinflix.com pingguotv.xyzpingxiangpuer.com pinkdh-bb.sbs pinkdino.com pinkporno.com pinkpussy.tv pinksporn.compinkvelvetvault.com pinkworld.compiratecams.com pirouvr.com  pjbyj.top pjful-app.lol pjgirls.complanetsuzy.orgplatinumlinks.org play-bmm.shopplay-bmmer.buzz playbar.biz playboy.complayboyplus.complayforceone.com playmeow.com playno1.complayporngame.complayporngames.complaypornogames.complaysexgames.xxxplaysexygame.com playvids.complayyoungtube.compleasefuck.orgpleasurebabe.compleasuregirl.netpleasuremore.complumperpass.com plusone8.com plusporn.net  plzpf.compmatehunter.compoisontube.com +pojapp.cfdpojbayj1030.top +pojie7.compojiefuli20033.xyzpojiefuli9113.xyzponyanimalsex.com poofetish.compoop-pee.onlinepoopee-puke.compoopeegirls.com  popjav.tvpopporn-world.com porcore.com poringa.net +porkahd.co  porm.clubporn-bokep.comporn-comic.comporn-discounts.comporn-discounts.xxxporn-gratis.infoporn-images-xxx.comporn-list.siteporn-portal.comporn-sex-video.me porn-star.com porn.biz porn.com porn.to porn.xxx porn2012.com porn300.comporn300.online  porn34.meporn3dgalleries.com porn4days.cc porn4fap.com porn555.com porn5f.com porn62.com  porn7.net  porn7.xxx porn87.com porn91.org  porn93.cc pornachi.com pornacho.com pornadoo.com pornaf.compornaffected.compornandxxxvideos.com pornaroma.com  pornav.co pornaxo.com pornbest.org -pornbit.cc pornbozz.com pornbraze.com pornbrb.compornburger.com pornburst.xxx porncana.com porncoil.comporncomics.com porncomics.meporncomixonline.net porncore.net porncoven.com porncrash.comporndabster.com porndeals.comporndeepfake.net porndex.comporndiamond.com porndig.com porndigger.meporndiscount.orgporndiscounts.com porndish.com porndisk.com pornditos.com porndoe.comporndoepremium.com porndork.com -porndr.comporndroids.compornelephant.com pornenix.com  porner.tvpornerbros.compornexpress.net -pornez.netpornfactory.info pornfhd.compornfidelity.com pornfind.orgpornfinder.biz pornflip.compornfoolery.com  pornfu.tv pornfuck.net pornfuror.comporngames.club porngames.comporngames.games porngames.tvporngameshub.comporngamesverse.com porngeek.com porngem.com porngifs.xxxporngladiator.com +pornbit.cc +pornbl.com pornbozz.com pornbraze.compornburger.com pornburst.xxx porncana.com porncoil.comporncomics.com porncomics.meporncomixonline.net porncore.net porncoven.com porncrash.comporndabster.com porndeals.comporndeepfake.net porndex.comporndiamond.com porndig.com porndigger.meporndiscount.orgporndiscounts.com porndish.com porndisk.com pornditos.com porndoe.comporndoepremium.com porndork.com +porndr.comporndroids.compornelephant.com pornenix.com  porner.tvpornerbros.compornexpress.netpornfactory.info pornfhd.compornfidelity.com pornfind.orgpornfinder.biz pornflip.compornfoolery.com  pornfu.tv pornfuck.net pornfuror.comporngames.club porngames.comporngames.games porngames.tvporngameshub.comporngamesverse.com porngeek.com porngem.com porngifs.xxxporngladiator.com porngo.com porngo.tubeporngogo.supertop-100.comporngrabbz.compornguide.blog pornguz.com pornhail.com pornhat.com pornhat.one pornhat.tv -pornhd.com pornhd3x.tv pornhd8k.netpornhdfuck.com pornhdtube.tvpornhdvideos.tv pornheed.com pornheli.com pornhits.com pornhoho.com pornhost.compornhub-deutsch.infopornhub-german.compornhub-sexfilme.net pornhub00.compornhubdeutsch.netpornhubs.videopornhubselect.com pornhun.xyzpornhutdeutsch.com pornhuub.xyz pornicom.com -pornid.xxx pornimg.xyz pornirani.com pornjam.com pornjav.org pornjizz.co +pornhd.com pornhd3x.tv pornhd8k.netpornhdfuck.com pornhdtube.tvpornhdvideos.tv pornheed.com pornheli.com pornhits.com pornhoho.com pornhost.compornhub-deutsch.infopornhub-german.compornhub-sexfilme.net pornhub00.compornhubdeutsch.netpornhubs.videopornhubselect.com pornhun.xyzpornhutdeutsch.com pornicom.com +pornid.xxx pornimg.xyz pornirani.com pornjam.com pornjav.org pornjk.com pornkai.com pornkind.net pornking.fun pornkino.cc pornkro.com pornktube.com pornky.compornlaundry.compornlegendsclub.compornlist18.compornlistdude.com pornlulu.com pornluxme.com pornma.compornmadeathome.compornmagnet.org pornmaki.compornmaster.fun pornmate.compornmaturetube.com pornmemo.com pornmonde.compornmovies2.mepornmoviescave.com pornmz.com -pornmz.netpornnetworkdeals.com pornnut.comporno-erotica.com porno.org.in porno365.netporno365.website porno49.com porno800.com pornoaid.compornoamateurlatino.net pornobae.compornobengala.compornoboard.netpornoboliviaxxx.compornobom.com.br pornobox.netpornobrasil.blog.brpornobrasil.compornobrasil.orgpornobrasileiro.tvpornobrasileiro.xyz pornobuzz.netpornocarioca.compornocaserotube.com -pornocd.rupornocomic.netpornodanke.compornodebolivia.netpornodoido.com pornodrome.tvpornoecuadorxxx.compornoelena.net pornofiles.rupornofilmlist.com pornofint.com pornofrog.compornogayphy.com pornogids.net pornogram.xxxpornogramxxx.compornogratis.vlog.brpornogrund.com pornoh.info pornohd.blue pornohd.plus pornohd.pornpornohoo.com.mx pornohut.infopornohutdeutsch.net pornoid.compornoincreible.compornoingyen.hupornoirado.com pornoisy.compornoitaliano.com pornojefe.com pornojux.com pornoko.net pornokrol.com pornolab.netpornolaba.mobipornolandia.xxxpornomasse.compornomineiro.compornomovies.mobi pornone.compornoorzel.compornopantry.compornoprive.xxxpornoreino.com pornorips.com pornos.livepornoscanner.com pornosex.campornosfilmes.com pornoslon.mepornosphere.com pornotime.net pornotree.com pornotron.netpornotube.blog.brpornotube69.nlpornov1080.namepornovenezolano.com.vepornovenezolanox.com pornovesem.tvpornovideosfree.netpornovideoshub.compornovideow.com pornoweb.hu pornoweb.win pornoxo.com pornozona.tv pornpair.compornpander.com pornpaw.com -pornpen.ai pornper.com pornpics.com pornproxy.app -pornqd.compornrabbit.compornreactor.cc pornrips.cc pornrox.com pornscat.org pornscum.compornsearchengine.com pornsexer.com pornshare.biz pornsites.xxxpornsitesnow.compornsocket.compornsoldiers.com pornsos.com pornspark.compornstarbyface.compornstreams.tvpornstripgames.com porntea.compornteen123.com porntitan.com +pornmz.netpornnetworkdeals.com pornnut.comporno-erotica.com porno.org.in porno365.netporno365.website porno49.com pornoaid.compornoamateurlatino.net pornobae.compornobengala.compornoboard.netpornoboliviaxxx.compornobom.com.br pornobox.netpornobrasil.blog.brpornobrasil.compornobrasil.orgpornobrasileiro.tvpornobrasileiro.xyz pornobuzz.netpornocarioca.compornocaserotube.com +pornocd.rupornocomic.netpornodanke.compornodoido.com pornodrome.tvpornoecuadorxxx.compornoelena.net pornofiles.rupornofilmlist.com pornofint.com pornofrog.compornogayphy.com pornogids.net pornogram.xxxpornogramxxx.compornogratis.vlog.brpornogrund.com pornohd.blue pornohd.plus pornohd.pornpornohoo.com.mx pornohut.infopornohutdeutsch.net pornoid.compornoincreible.compornoingyen.hupornoirado.compornoitaliano.com pornojefe.com pornojux.com pornoko.net pornokrol.com pornolab.netpornolaba.mobipornolandia.xxxpornomasse.compornomineiro.compornomovies.mobi pornone.compornoorzel.compornoprive.xxxpornoreino.com pornorips.com pornos.livepornoscanner.com pornosex.campornosfilmes.com pornoslon.mepornosphere.com pornotime.net pornotree.com pornotron.netpornotube.blog.brpornotube69.nlpornov1080.namepornovenezolano.com.vepornovenezolanox.compornovideosfree.netpornovideoshub.compornovideow.com pornoweb.hu pornoweb.win pornoxo.com pornozona.tv pornpair.compornpander.com pornpaw.com +pornpen.ai pornper.com pornpics.com pornpost.net pornproxy.app +pornqd.compornrabbit.compornreactor.cc pornrips.cc pornrox.com pornscat.org pornscum.com pornsexer.com pornshare.biz pornsites.xxxpornsitesnow.compornsocket.compornsoldiers.com pornsos.com pornspark.compornstarbyface.compornstreams.tvpornstripgames.com porntea.compornteen123.com porntn.com porntop.comporntoplinks.com porntrex.com porntry.comporntsunami.com porntube.comporntubent.com porntv.com  pornuj.czpornultras.com  pornv.org pornve.com pornvibe.orgpornvideobb.compornvideos.casapornvideotop.compornvideotube.onlinepornvidhd.clubpornwatchers.compornwebmasters.com pornwhite.compornwhitelist.com pornwild.to pornworld.topornxnxxmovies.com pornxp.com pornxp.net pornxp.org -pornxs.compornxvideos.tvpornxvideos.win pornxxx.bidpornxxxmovies.ccpornxxxplace.compornxxxweb.com pornyeah.com pornyteen.com pornzog.com pornzone.comporstoporno.site  porzo.com porzo.tv postegro.itpostyourgirls.wspovpornonly.com povr.com pp6.info -ppe.lawyer  pplah.com ppp91.ccprastitutki.rupremiumbooty.com premiumhd.netpremiumpornlist.com  press.vinpretty-ass.xyzprettynubiles.comprettyvirgin.com pridetube.comprimecurves.comprimeindianporn.comprimematures.comprimemomsex.comprimepornlist.comprincesscum.com private.comprivatecasting-x.comprivateclassics.comprivatevoyeurvideos.comproctoscopeexam.comprofreeporno.comprojectjav.comprojectvoyeur.com  pron.gurupropertysex.com proporn.comprostate-exam-info.comprostoporno.net prothots.comproxyadult.org -prpops.com ptapjmp.com ptt.sex pu82.vippublic-sex-porn.compublicagentxxx.compublichealthdepartment.infopublicpornvideo.compublicsexhub.compunishbang.compunishworld.compurelyceleb.compurenudism.compuresexmovies.com puretaboo.com purextc.compuripuriunkomura.com -pururin.topussy-pics.netpussy3dporn.com pussyboy.netpussymomsex.compussyporntubes.compussysexgames.compussyshine.infopussyspace.compussyspace.net putinho.net pvt.sexy -pyhapp.comqatarescortsvip.com -qckprn.com qdiehzz7.meqdmomentum.com  qinav.comqingenporn.net -qingse.one qkjuyet.com qmov.com qmov.net qmttqg3k.me +pornxs.compornxvideos.tvpornxvideos.winpornxxxmovies.ccpornxxxplace.compornxxxweb.com pornyeah.com pornyteen.com pornzog.com pornzone.comporstoporno.site  porzo.com porzo.tv postegro.itpostyourgirls.wspovpornonly.com povr.com pp6.info ppb-mod.buzz +ppe.lawyer  pplah.com ppp91.ccprastitutki.rupremium-beauty.com premiumhd.netpremiumpornlist.com  press.vinpretty-ass.xyzprettynubiles.comprettyvirgin.com pridetube.comprimecurves.comprimeindianporn.comprimematures.comprimepornlist.comprincesscum.com private.comprivatecasting-x.comprivateclassics.comprivatevoyeurvideos.comproctoscopeexam.comprofreeporno.comprojectjav.comprojectvoyeur.com  pron.gurupropertysex.com proporn.comprostoporno.net prothots.comproxyadult.org +prpops.com ptapjmp.com ptt.sex pu82.vippublic-sex-porn.compublicagentxxx.compublicpornvideo.compublicsexhub.compunishbang.compunishworld.com purelov5.compurelyceleb.compurenudism.com puretaboo.com purextc.compuripuriunkomura.com +pururin.topussy-pics.netpussy3dporn.com pussyboy.netpussymomsex.compussyporntubes.compussysexgames.compussyshine.infopussyspace.compussyspace.net putinho.net pvt.sexypzforever.skinpzforever01.homespzhanfor.todayqatarescortsvip.com  qattdh.cc +qattdh.top +qattdh1.cc +qattdh2.cc qattdh6.topqbmengmei6.mom  qcmod.xyz qdiehzz7.me  qinav.com +qingse.one qise100.com qmov.com qmov.net qmttqg3k.me qombol.comqooqlevideo.com  qorno.com -qporno.xxxquickiepage.com qumingwz.com qzav.tvr-new-sale.blog.jpr18.clickme.net r18.com  r18av.com  r18lu.com r34porn.netrabbitscams.comrabbitscams.sexrabbitsreviews.com ragnaporn.com rajwaphq.com randyblue.com rapefilms.net rapetube.me rat.xxxratedgross.com +qporno.xxx  qqbs.asia  qqbs.workquickiepage.com qumingwz.com qysg.cc +qysg7.buzz +qysg8.buzz qzav.tvr-new-sale.blog.jpr18.clickme.net  r18av.comr18lu-avi.shop  r18lu.com r34porn.netrabbitscams.comrabbitscams.sexrabbitsreviews.com rajwaphq.com randyblue.com rapefilms.net rapetube.me rat.xxxratedgross.com rbc007.com rbe996.com -rbeopp.com re25.vip reachporn.comreaderswivesonline.comreal-homemade-movies.comreal-mature-porn.comreal-thaipussy.comrealcuckoldsex.com realdoll.comrealgfporn.comrealitykings.comreallesbianexposed.comrealmaturesfuck.comrealpornclip.comrealsexdoll.comrealteengirls.comrealzoomovies.comrecelebrity.comrectovaginalexam.comredamateurtube.comredfaptube.com redgifs.com redhdtube.xxxredlightcenter.comredmatureporn.com redporn.xxx redporno.czredpornpictures.com redsexhub.comredteenporn.comredtub3xxx.com redtube.blog redtube9.comredtubepremium.comredwap-xxx.com  redwap.me -redwap.pro  redxxx.ccredxxxvideo.tvredxxxvideos.com +rbeopp.com  rcl07.xyz rds-yes.buzz re25.vip reachporn.comreaderswivesonline.comreal-homemade-movies.comreal-mature-porn.comreal-thaipussy.comrealcuckoldsex.com realdoll.comrealgfporn.comrealitykings.comreallesbianexposed.comrealmaturesfuck.comrealpornclip.comrealsexdoll.comrealteengirls.comrealzoomovies.comrecelebrity.comredamateurtube.comredfaptube.com redgifs.com redhdtube.xxxredlightcenter.comredmatureporn.com redporn.xxx redporno.czredpornpictures.com redsexhub.comredteenporn.comredtub3xxx.com redtube.blog redtube9.comredtubepremium.comredwap-xxx.com  redwap.me +redwap.pro  redxxx.ccredxxxvideo.tv ree007.xyz reiporno.com renderos.com -repe21.com  resao.comretroclassicporn.comretrohomevideos.comretroxxxmovs.com  rexxx.org ricefever.com -rigums.xyz risextube.com +repe21.com  resao.comresoubanana.buzzresoubang.buzzretroclassicporn.comretrohomevideos.comretroxxxmovs.com  rexxx.org rhyw.me rhyw31.life ricefever.com +rigums.xyz rinvdh7.xyz risextube.com +rjgsp.buzz rjgsp1.buzz rlczdo.xyz -rm2029.com ro89.comrockettube.comrocksextube.com roloflix.com roloxxx.comromantic-sex-video.comrosemarydoll.com roshy.tv  rou.videoroughebonysex.com roughman.net royalcams.com -rplay.live rrs1.xyz -rssing.com rude.com rukoebxx.com rule34.asia  rule34.us rule34.world -rule34.xxx -rule34.xyz rule34h.comrule34pornvids.comrule34video.com ruleporn.com rumporn.com rundf665.cyou runporn.comrunwayescorts.comrushporn.online rushporn.xxxrussianrape.org ruvideos.net s-books.com s8ds5gfm.xyz sabuibo.net -sacduc.comsacredhentai.com saerock.com safebooru.orgsakuralive.comsambaporno.comsankakucomplex.com sanwapub.com saoni91.xyz saonidh01.ccsapphicerotica.comsapphicpornonly.com sarapbabe.com satan18av.com -satnym.comsavitabhabhi.comsavitabhabhi.vip savitahd.net sca-tolo.infoscandalplanet.com scanlover.comscat-enema.comscat-japan.com scat-shop.net  scat.gold scatfap.comscatfinder.com -scathd.com scatkings.comscatnetwork.comscatolo-guromania.com scatshop.com scatsite.com scatvids.club scatville.comscharferporno.com scifisex.net -scolle.netscorediscounts.clubscrew-my-wife.com scrolller.com seaporn.org -search.xxxsecret-flirt-hub.comsecretbabes.co.uksecretubes.com see.xxx seedmov18.comseehorsepenis.comseematureporn.comseemilfporn.com seemygf.com seemyporn.com sego8.cc sego8.co  sego8.xyz sehuatang.netseiroganmania.com -seksmet.nlsekswebsite.nlselectanescort.comselectyourgame.comselfloversworld.com seneporno.com seniortgp.comsenpaiheat.comsensualgirls.orgsensualmothers.com sensueel.net senzuritv.net -seqing.oneseqingwangzhan.pro seqingx.com ser7.ccserbiporno.netserviporno.com seselah.com sesenovel.comsessoamatorialeitaliano.comsevereporn.comsevgikurtulmaz.comsex-amateur-clips.com +rm2029.com ro89.comrockettube.comrocksextube.com roloflix.com roloxxx.comromantic-sex-video.comrosemarydoll.com roshy.tv  rou.video roudao6.buzz roudaosp.ccroughebonysex.com roughman.net royalcams.com +rplay.live +rrl28.buzz rrs1.xyz +rssing.com rude.com rukoebxx.comrulaisc-tv.buzz rule34h.comrule34pornvids.comrule34video.com ruleporn.com runporn.comrunwayescorts.comrushporn.online rushporn.xxxrussianrape.org ruvideos.net s-books.com +s1s1s1.com s8ds5gfm.xyz sabuibo.net +sacduc.comsacredhentai.com saerock.com safebooru.orgsakuralive.comsambaporno.comsankakucomplex.com saobjpg.com saoni91.xyz +saonia.xyzsaonidh-one.sbs saonidh.world saonidh01.ccsapphicerotica.comsapphicpornonly.com sarapbabe.com satan18av.com +satnym.com  satv01.mesavitabhabhi.comsavitabhabhi.vip savitahd.net sbgkstv.shop sca-tolo.infoscandalplanet.com scanlover.comscat-enema.comscat-japan.com scat-shop.net  scat.gold scatfap.comscatfinder.com +scathd.com scatkings.comscatnetwork.com scatshop.com scatsite.com scatvids.club scatville.comscharferporno.com scifisex.net +scolle.netscorediscounts.clubscrew-my-wife.com scrolller.com +sdnice.one sdnitube.buzz seaporn.org +search.xxxsecret-flirt-hub.comsecretbabes.co.uksecretubes.com see.xxx seedmov18.comseehorsepenis.comseematureporn.comseemilfporn.com seemygf.com seemyporn.com sego8.cc sego8.co  sego8.xyzseiroganmania.com sejie80.com +seksmet.nlsekswebsite.nlsekur1213.guruselectanescort.comselectyourgame.comselfloversworld.com seneporno.com seniortgp.comsenluocaituan.gumroad.comsenpaiheat.comsensualgirls.orgsensualmothers.com sensueel.net senzuritv.net +seqing.oneseqingwangzhan.pro seqingx.com ser7.ccserbiporno.net serlucap.lolserlutv258.xyzserviporno.com seselah.com sesenovel.comsessoamatorialeitaliano.comsevereporn.comsevgikurtulmaz.comsex-amateur-clips.com sex-av.com sex-douga.jpsex-for-work.com sex-gif.org sex-hay.prosex-hot-sites.com sex-ly.com sex-teen.net sex-young.com sex.cam sex.com sex.sex sex.xxx sex0098.com -sex021.net  sex3.mobisex4arabxxx.com sexalarab.comsexandsplash.comsexanimalvideos.com sexanime.net sexarea.org sexasia.netsexavidols.com sexbebin.com sexbomba.ru sexbombo.comsexbookecuador.com  sexbq.comsexcartoon.bizsexcelebrity.net sexcord.comsexdollpornhd.com sexdolls.comsexdollsshow.com -sexdug.comsexecherche.comsexedanslepre.net  sexei.netsexemulator.com sexfilm.al.rusexfilm4free.comsexfilmeporno.comsexfilmstube.com  sexfl.xyzsexflashgame.orgsexflexible.com sexgalaxy.net sexgame.comsexgamefun.com sexgames.cc sexgames.xxxsexgamesbox.comsexgamesclub.com sexguide.ro sexharlot.com  sexhd.fun +sex021.net  sex3.mobisex4arabxxx.com +sex588.net sex8.cc sexaidh.com sexalarab.comsexandsplash.comsexanimalvideos.com sexanime.net sexarea.org sexasia.netsexavidols.com sexbebin.com sexbomba.ru sexbombo.comsexbookecuador.com  sexbq.comsexcartoon.bizsexcelebrity.net sexcord.comsexdollpornhd.com sexdolls.comsexdollsshow.com +sexdug.comsexecherche.comsexedanslepre.net  sexei.netsexemulator.com sexfilm.al.rusexfilm4free.comsexfilmeporno.comsexfilmstube.com  sexfl.xyzsexflashgame.orgsexflexible.com sexgalaxy.net sexgame.comsexgamefun.com sexgames.cc sexgames.xxxsexgamesbox.comsexgamesclub.com sexguide.ro  sexhd.fun sexhd.pics sexhdmovs.comsexhotgames.com sexhub.red sexhubhd.com sexifilm.top sexiframe.com sexindians.cc sexinsex.netsexiranian.party  sexjk.com -sexjobs.it sexkorea.netsexlikereal.comsexmadeathome.comsexmature.club sexmerci.com +sexjobs.it sexkomix2.com sexkorea.netsexlikereal.comsexmadeathome.comsexmature.club sexmerci.com sexmex.xxx -sexmix.netsexmodel.wordpress.com sexmomsex.comsexmovies24.com sexmummy.com sexmutant.com sexnaweb.net sexnudo.com sexo123.net sexodama.comsexodeamor.comsexopornolive.comsexoquente.blogsexplustube.netsexpornimg.comsexpornpictures.comsexpornvideoasian.com sexsaoy.com sexsex1.com sexsexe1.com sexsiam.com +sexmix.netsexmodel.wordpress.com sexmomsex.comsexmovies24.com sexmummy.com sexmutant.com sexnaweb.net sexnudo.com sexo123.net sexodama.comsexodeamor.comsexopornolive.comsexoquente.blogsexpornimg.comsexpornpictures.comsexpornvideoasian.com sexsaoy.com sexsex1.com sexsiam.com sexsim.comsexsimulator.comsexsiteinc.comsexstoriespost.com  sextb.net sextime.tv sextop.net sextop1.net sextorso.comsextoystop.comsextreffen-portale.comsextreffensite.com sextube.desi sextube.fmsextube69free.netsextubebox.comsextubedot.comsextubehub.comsextubeset.comsextubespot.comsextubexxl.com sextubish.com -sextvx.com sexu.comsexualhentai.net sexuria.com +sextvx.com  sextw.net sexu.comsexualhentai.net sexuria.com sexvid.xxxsexvideo10.comsexvideo12com.prosexvideos.host sexvideos.telsexvideosxxx.mobi -sexvids.cc  sexvr.comsexwebvideo.comsexwithhorse.net  sexxhd.de  sexxx.cfd -sexxx8.xyz sexxxdoll.com sexxxhd.com sexxxtape.net sexxxx.rodeosexxxxfilms.comsexy-babe-pics.comsexy-beauties.comsexy-models.net sexy-more.comsexy-older-women.comsexy-photos.netsexy-torrents.comsexy3dtoon.comsexyandfunny.comsexyasiangirls.ccsexyavenue.comsexybabesz.comsexycandidgirls.com sexyculo.com sexyfeet.tvsexyfuckgames.comsexyfucking.rusexygirlfriendtube.comsexygirlspics.com sexygloz.comsexyhomewives.com sexyhub.comsexyhumorgames.comsexykittenporn.com sexyoung.mesexypornpictures.orgsexyseeker.comsexysexdoll.comsexysites.com.phsexyteenssite.com sexytuber.comsexywetpussy.com -sexzy4.comsfmcompile.club sg120.me sgp1.funsh-xuxingda.com sh83.xyz shadbase.comshadowslaves.com shahvani.com shahvani.siteshahvatsaraa.comshakethesnake.com shameless.comshapelcounset.xyzsharks-lagoon.frsharkyporn.com sharmota.com sheflix.com  shegg.com shegods.comshemale-porn-galls.comshemalebestlabel.com shemalehd.sexshemaleleaks.comshemalemodelstube.comshemaleporn.funshemaleporn.xxxshemalepornonly.comshemaleporntube.tvshemalespoiledwhore.comshemalestardb.comshemalestube.comshemaletrannypics.comshemaletube.proshemaletubevideos.com shemalez.com -shequ8.camshequdaohang.comshesfreaky.com sheshaft.comshianyuanfang.com shikorina.net shit-porn.net -shithd.com shitjav.comshittytube.comshockingmovies.comshooshtime.comshoptraivip.com  showup.tvshowybeauty.com shrkurl.comshufflesex.com  shyav.com shymysex.comshywifeswap.comsigmoidoscopeexam.com sikiswap.comsilkengirl.comsimilar-porn.funsimonsgirls.com simpcity.susimply-hentai.comsirenxxxstudios.com +sexvids.cc  sexvr.comsexwebvideo.comsexwenheav.shopsexwithhorse.net  sexxhd.de +sexxx8.xyz sexxxdoll.com sexxxtape.net sexxxx.rodeosexxxxfilms.comsexy-babe-pics.comsexy-beauties.comsexy-models.net sexy-more.comsexy-older-women.comsexy-photos.netsexy-torrents.comsexy3dtoon.comsexyandfunny.comsexyasiangirls.ccsexyavenue.comsexybabesz.comsexycandidgirls.com sexyculo.com sexyfeet.tvsexyfuckgames.comsexyfucking.rusexygirlfriendtube.comsexygirlspics.comsexyhomewives.com sexyhub.comsexyhumorgames.comsexykittenporn.com sexyoung.mesexypornpictures.orgsexyseeker.comsexysexdoll.comsexysites.com.phsexyteenssite.com sexytuber.comsexywetpussy.com +sexzy4.comsfmcompile.club sg120.me sgp1.fun sgspe.de +sgspt.buzzsh-xuxingda.com sh83.xyz shadbase.comshadowslaves.com shahvani.com shahvani.siteshakethesnake.com shameless.comshapelcounset.xyzsharks-lagoon.frsharkyporn.com sharmota.com shdd.ink sheflix.com  shegg.com shegods.comshemale-porn-galls.comshemalebestlabel.com shemalehd.sexshemaleleaks.comshemalemodelstube.comshemaleporn.funshemaleporn.xxxshemalepornonly.comshemaleporntube.tvshemalespoiledwhore.comshemalestardb.comshemalestube.comshemaletrannypics.comshemaletube.proshemaletubevideos.com shemalez.comshenshi-cha.com +shequ8.camshequdaohang.comshesfreaky.com sheshaft.comshibashuwu.net shikorina.netshiroutoav.netshishijump001.com shit-porn.net +shithd.com shitjav.comshittytube.comshockingmovies.comshooshtime.comshoptraivip.com  showup.tvshowybeauty.com shrkurl.com shsh201.comshuangmawei.xyzshufflesex.com shymysex.comshywifeswap.comsifangclub.comsigmoidoscopeexam.com sikiswap.comsilkengirl.comsimilar-porn.funsimonsgirls.com simpcity.susimply-hentai.com  sing4.latsirenxxxstudios.com sis.la sis001.com  sis001.us siscache.com sisisl.com siska.videosislovesme.comsissy-university.com sissy.eu.org -sissy.gamesissyporncrossdresser.com siterips.org siteripz.com siteripz.net situero.com sjcollect.com skebetter.com skinstrip.net -skokka.com sksarab.top skunkgirl.ccskyporn.online sldolls.comsleazyneasy.com slutclit.com slutdump.com slutload.com  sluts.xyz sluttyrat.comsmallteenpussy.com smashed.xxx smm99999.comsmokinmovies.com smplace.com smutcam.com smutcams.com smutindia.com -smutty.comsmuttymoms.com smyw.orgsnapwebcams.com snjulebu.comsocialmediagirls.comsociolotron.comsoftmodels.net -soirt4.fun -sokmil.comsomanylolies.comsonorousporn.com soolakhi.com  sora6.com sorairi.info  souka.xyzsouth-plus.net sp.coolspankandbang.com spankbang.comspankbang.partyspankbang1.com spanking.wikispankingstudio.comspankingtube.comspankmonster.comspankred3d.com spankwire.comspectraltube.comspermyporn.com spicebar.despicybigtits.comspicystory.net -spizoo.comspreadporn.org spring06.top spring13.top  srwwu.uno ss7.app  sshs.club sshs.pw sshs.xyz sss.xxx ssshuqian.xyz +sissy.gamesissyporncrossdresser.com siterips.org siteripz.com siteripz.net situero.com  six9dy.pw sjcollect.com sjhsp1.buzz skebetter.com skinstrip.net +skokka.com sksarab.top skunkgirl.ccskyporn.online sl99mod.buzz sldolls.comsleazyneasy.com slutload.com  sluts.xyz sluttyrat.comsmallteenpussy.com smashed.xxx  smmsp.xyzsmokinmovies.com smplace.com smutcam.com smutcams.com smutindia.com +smutty.comsmuttymoms.com smyw.orgsnapwebcams.com snjulebu.comsocialmediagirls.comsociolotron.comsoftmodels.net sogclub.com sojiy1124.top +sokmil.comsonorousporn.com soolakhi.comsoooyinfor.lol +soporn.com  sora6.com  sos44.com  souka.xyzsouth-plus.net soyinyj.top sp.coolspankandbang.comspankbang1.com spanking.wikispankingstudio.comspankingtube.comspankmonster.comspankred3d.com spankwire.comspectraltube.comspermyporn.com spicebar.despicybigtits.com +spizoo.com sqyzh-dh.sbs ss7.app  sshs.club sshs.pw sshs.xyz sss.xxx ssshuqian.xyz sssins.com sssjav.com sssuo1.xyz starsze.icu -staxus.comsteamofporn.comsteamygamer.comsteezylist.comstepdaughter.lovestepfamilyporn.comstepmaturesex.com stepmom.onestepsiblingscaught.comstickofjoy.comstileproject.comstimorolsex.com  stin31.rustocking-tease.comstockingfetishvideo.comstonefoxlingerie.comstonefoxproductions.comstoriesonline.netstraightpornstuds.comstream-mydirtyhobby.biz streamate.comstreamhentaimovies.comstreamingporn.xyzstreamlatina.com streamporn.cc streamporn.pw streamsex.com streamxxx.tvstreetmeatasia.comstrip-poker.xxxstripcamfun.com stripchat.comstripparadise.comstripselector.comstripskunk.com studiofow.comstudioluxus.com stufferdb.comstupidcams.com +staxus.comsteamofporn.comsteamygamer.comsteezylist.comstepdaughter.lovestepfamilyporn.comstepmaturesex.com stepmom.onestepsiblingscaught.comstickofjoy.comstileproject.comstimorolsex.com  stin31.rustocking-tease.comstockingfetishvideo.comstonefoxlingerie.comstonefoxproductions.comstoriesonline.netstraightpornstuds.comstream-mydirtyhobby.biz streamate.comstreamingporn.xyzstreamlatina.com streamporn.cc streamporn.pw streamsex.comstreetmeatasia.comstrip-poker.xxxstripcamfun.com stripchat.comstripparadise.comstripselector.comstripskunk.com studiofow.comstudioluxus.com stufferdb.comstupidcams.com sub147.comsublimedirectory.comsubmityourflicks.com sucksex.com sukafeti.jpsukebei.nyaa.sisukebelinks.com sumomo-ch.com sunporno.comsupadou.blogism.jpsupanimegames.comsuperadultgames.comsupergratisporno.comsuperhqporn.comsuperjapanesesex.comsupersexeamateur.com -supjav.com sureporn.com  suxib.comsvensksexfilm.comsvipshipin.storesvscomics.asia svscomics.com svsgames.org  swag.live swapsmut.comsweetadult-tube.com sweetmlif.net sweetsext.comsweetsinner.com swegold.comswingercuckoldporn.comswingerpornfun.comswingerporntube.com swingers-homemade-videos.comswingers.theadulthub.comswingersexorgy.comswingexpert.nlswpr.livedoor.blog +supjav.com sureporn.com  suxib.comsvensksexfilm.comsvipshipin.storesvscomics.asia svscomics.com svsgames.org swapsmut.comsweetadult-tube.com sweetsext.comsweetsinner.com swegold.comswingercuckoldporn.comswingerpornfun.comswingerporntube.com swingers-homemade-videos.comswingers.theadulthub.comswingersexorgy.comswingexpert.nlswpr.livedoor.blog sxarab.top sxshentai.com -sxyprn.com syzbj36.xyz szexvideo.top t66y.com tabooporn.tvtabooporns.com tabootube.xxxtabustudios.cotacamateurs.com  taiav.comtaiwanadultexpo.com taiwansex.tw  takens.tw -taknai.com takporn.comtaleofthenight.comtamilsexvideos.cc tanflix.com tantaly.com taose.tvtaradinhos.com +sxyprn.com +sybj91.one sybjav.online syfor.click syzbj36.xyz szexvideo.top t66y.com tabooporn.tvtabooporns.com tabootube.xxxtabustudios.cotacamateurs.com tachusz.xyz  taiav.comtaiolongdh.sbstaiwanadultexpo.com taiwansex.tw  takens.tw +taknai.com takporn.comtaleofthenight.comtamilsexvideos.cc tanflix.com tantaly.com taoil-cn.sbs taqunuhai.viptaradinhos.com tasexy.com tasexy.toptastyblacks.com tati-log.com -taxi69.comtaxidrivermovie.com tbib.org  tblop.comtbr.tangbr.net tctsx28d.xyzteacherfucksteens.comteachmyass.com teamskeet.comteatroporno.com teen-girl.netteen-lover.net teen-sexy.com teen3x.mobiteenagefucking.comteendreams.comteengirlfriendtube.comteenporngallery.netteenporntube.xxxteenpornvideo.xxx teenport.comteenpussypicture.comteenqueens.net teenrave.org -teensex.meteensloveanal.comteensloveporn.net teensnow.com teensnow.link teentube.proteenwebcamtube.com teeztube.comtelegram-porn.com terk.nlterrlficdates.comtettediferro.it +taxi69.comtaxidrivermovie.com tbib.orgtbr.tangbr.netteacherfucksteens.comteachmyass.com teamskeet.comteatroporno.com teen-girl.netteen-lover.net teen-sexy.com teen3x.mobiteenagefucking.comteendreams.comteengirlfriendtube.comteenporngallery.netteenporntube.xxxteenpornvideo.xxx teenport.comteenpussypicture.comteenqueens.net teenrave.org +teensex.meteensloveanal.comteensloveporn.net teensnow.com teensnow.link teentube.proteenwebcamtube.com teeztube.comtelegram-porn.com temetube.xyz terk.nltettediferro.it tferwq.comtgirlcentral.comtgirlpostop.com tgp6.com tgtube.com tgutube.com thai-xxx.com -thai69.comthaicherry.com thaichix.comthaicuties.com thaigirls.netthaigirls100.net theav.ccthebestfetishsites.comthebondagefiles.comthecamdude.comthecandidbay.comthecandidforum-voyeur.rutheclubprive.comtheclyster.comthecuckold.comthecuckoldporn.comthefappening.prothefappening.wikithefappeningblog.com +thai69.com thaichix.comthaicuties.com thaigirls.netthaigirls100.net thdh.cc theav.ccthebestfetishsites.comthebondagefiles.comthecamdude.comthecandidbay.comthecandidforum-voyeur.rutheclubprive.comthecuckold.comthecuckoldporn.comthefappening.prothefappening.wikithefappeningblog.com thegay.comthegayoffice.comthehabibshow.comthehentaiworld.com thehun.nettheindianleaks.com thekarups.comtheleakbay.comthelittleslush.comthemilfmovies.comthenewgirlspooping.comthenewporn.comthenipslip.com thepervs.com -theporn.ccthepornarea.comthepornbest.comthepornbet.comthepornbin.comthepornblender.comthepornguy.orgthepornlinks.comthepornlist.comthepornlist.netthepornlistdude.comthepornmap.comthepornscat.comtheporntoplist.comthesafeporn.comthesexbible.comtheteenhome.comthethothub.com thetranny.comthevirtualsexreview.com theyxxx.com -thisav.com -thisav.org thisvid.comthisvidscat.net thotbook.tv +theporn.ccthepornarea.comthepornbest.comthepornbet.comthepornbin.comthepornblender.comthepornguy.orgthepornlinks.comthepornlist.comthepornlist.netthepornlistdude.comthepornmap.comthepornscat.comtheporntoplist.com theporny.comthesafeporn.comthethothub.com thetranny.comthevirtualsexreview.com theyxxx.com +thisav.com thisvid.comthisvidscat.net thotbook.tv thothub.ru -thothub.to thottok.com thotvids.com thri.xxx thrixxx.com thtmod1.comthumbnailseries.com thz7.net thzu.cctianbiav10.comtiantang.today  tiava.com -tiava1.com  tiaz.sitetig-ol-bitties.live timi1.me  timo0.com tinhduc.org +thothub.to thottok.com thotvids.com thri.xxx thrixxx.com thtmod1.comthumbnailseries.com thz7.net thzu.cctiantang.today  tiava.com +tiava1.com  tiaz.sitetig-ol-bitties.live timi1.me  timo0.com +ting53.xyz tinhduc.org tiny4k.com tiohentai.com titsbox.comtitsintops.comtittykings.com -tjsbfj.com tkb008.xyz tkb2233.life tkbqf2.life -tktube.com tnaflix.comtokyomotion.comtokyomotion.nettokyoporns.comtomatespodres.com tomovie.nettonicmovies.comtoomadporn.pro toon-3d.comtoonsexblog.comtoosexyvaginas.com top100nl.nettop100sexgames.comtopadultgames.biz topanime.biztopartporn.comtopbabesblog.orgtopcartoonsites.comtopcelebnudes.com topchats.comtopchineseporn.comtopcuckolds.comtoperoticartsites.com topescort.nltopescortbabes.com topexhib.net topface.comtopfantasyart.comtopfreepornvideos.com  tophd.xxx tophdsex.com tophentai.biztophentaicomics.comtopless.com.ua topmanga.biztopnudemalecelebs.com -topporn.metoppornguide.comtoppornoduro.comtoppornsites.comtoppornsites.nettoprealvideos.com topsexart.comtopsexhdvideos.comtopsexygames.comtoptoonsites.com topvids.nettopxxxpornvids.comtopyoungporn.com toroporno.comtorrentkitty.tvtorrentleen.com totoleak.com tourporno.comtoutoupa1024.funtownofsins.comtpornstars.com tps138.info +tktube.comtmei-taoyuan.com tnaflix.com tokyo-hot.comtokyomotion.comtokyomotion.nettokyonightstyle.comtokyoporns.comtomatespodres.comtonicmovies.comtoomadporn.pro toon-3d.comtoonsexblog.com top100nl.nettop100sexgames.comtopadultgames.biz topanime.biztopartporn.comtopbabesblog.orgtopcartoonsites.comtopcelebnudes.com topchats.comtopchineseporn.comtopcuckolds.comtoperoticartsites.com topescort.nltopescortbabes.com topexhib.net topface.comtopfantasyart.comtopfreepornvideos.com  tophd.xxx tophdsex.com tophentai.biztophentaicomics.com topmanga.biztopnudemalecelebs.com +topporn.metoppornguide.comtoppornoduro.comtoppornsites.comtoppornsites.nettoprealvideos.com topsexart.comtopsexhdvideos.comtopsexygames.comtoptoonsites.com topvids.nettopxxxpornvids.comtopyoungporn.com toroporno.comtorrentkitty.tv totoleak.com tourporno.comtownofsins.com toxin-up.sbs toxinzoo.sbstpornstars.com tranny.one trannygem.com trannytube.tvtrannyvideosxxx.com trans500.comtransangels.comtransarmuito.comtranscamslive.comtranspornsites.comtravelgirls.comtrendyporn.com triballo.nettrikepatrol.comtrixhentai.comtropictube.comtrueamateurmodels.comtrueamateurs.com trueanal.comtruebeachporn.comtrustedpeach.comtruthordarepics.com truyen18.xyztruyengihay.nettruyenhentai.xyz truyenkk1.comtruyentranh86.com truyenwk.com tryboobs.comtrycuckold.comtryfuckmenow.com tryquinn.com tryst.linktsescortsdirectory.comtsmodelstube.com  tssp.best tsthai.com tsumino.com tsundora.comtsuradou.noonvob.com  tsyum.comtube-pornomovs.comtube-sex-videos.com tube.bz tube18.sex tube188.com tube2011.com tube2012.com tube2017.com tube4sex.comtube4world.com tube8zoo.com tubebdsm.comtubecaptain.com tubecop.com tubedna.com tubedupe.com tubeenema.comtubefuckme.nettubegalore.com tubegold.xxxtubelombia.net tubemature.tvtubemovies4k.comtubeorigin.comtubepatrol.orgtubepornclassic.comtubepornlist.comtubepornstars.comtubepornup.comtubesafari.com -tubesex.metubeshemales.com tubetop69.com tubetria.mobitubetubetube.com  tubev.pro  tubev.sextubevintageporn.com tubewolf.comtubexclips.com tubinge.com -tubous.com tubsexer.com tubxporn.com tubxporn.xxx tufos.com.br  tukif.comturbogvideos.com  tushy.com twavking.com twcomix.com twhentai.com twifuli.comtwinkboyfriends.tvtwinkspornos.comtwinktube.sexy twinkybf.comtwistedlinks.net twistys.com twitcomike.jp -twlegs.com twoo.com -tx5254.com tx5ptbp7.com txqzz34r.com +tubesex.metubeshemales.com tubetop69.com tubetria.mobitubetubetube.com  tubev.pro  tubev.sextubevintageporn.com tubewolf.comtubexclips.com tubinge.com tubsexer.com tubxporn.com tubxporn.xxx tufos.com.br  tukif.comturbogvideos.com  tushy.com  tw985.com twavking.com twcomix.com twhentai.com twidouga.net twifuli.comtwinkboyfriends.tvtwinkspornos.com twinkybf.comtwistedlinks.net twistys.com twitcomike.jp +twlegs.com twline5.com twoo.com +tx5254.com txqzz34r.com txvlog.com txxx.com  txxx1.comtyler-brown.com tyms2022.com tytng189.comtytporno.online u3c3.com u9a9.cc u9a9.com uaa.com  uflash.tvuguisupapa.net -uhairy.com  uhtube.me -uiporn.comujapanesesex.comuk-exhibitionist.comultradonkey.comultrayoungsex.com -uncams.comuncensoredhentai.xxxuncensoredsexparties.comunderhentai.netungrounded.netuninhibitedcomix.com unkoscene.comunusualporn.net up01.ccupdatetube.com upjav.ccuplay-istrip.com +uhairy.com +uiporn.comujapanesesex.com ujizzcn.comuk-exhibitionist.comultradonkey.com +uncams.comuncensoredhentai.xxxuncensoredsexparties.comunderhentai.netuninhibitedcomix.com unkoscene.comunusualporn.net up01.ccupdatetube.com upjav.ccuplay-istrip.com uplust.com upornia.com uporno.xxx ura-akiba.jp -urasma.comuriminzokkiri.comurlgalleries.net urukawa.comuselessjunk.com uusexdoll.com uusextoy.com uxxxporn.com v2ph.com  v7hds.comvagabundasdoorkut.net  vagina.nlvaginacontest.comvaginal-ultrasound.comvaginalultrasound.infovaginapics.pro vbejeyv.shop  vdoav.comvecchiescopate.casa venezporn.com -veporn.com vepornhd.club veporno.netvercomicsporno.xxx verhentai.tvverpeliculasporno.gratis vervesex.comveryladyboy.com vgg8.comviddeo-jav.net video-jav.net video-one.com video.fc2.com video01.orgvideodesexo.blog videoleak.me videos6.comvideosamadoresreais.comvideosdemadurasx.comvideosdepornografia.blog.brvideosdesexo.br.comvideosdesexo.com.brvideosection.comvideoshorny.comvideoskaseros.comvideosmadeathome.comvideosporno.com.brvideosporno.lifevideostravestis.xxxvideosxxxnicaragua.topvideoxxxporn.biz videozzz.com +urasma.comurlgalleries.net urukawa.comuselessjunk.com  uup76.com uusexdoll.com uusextoy.com v-av.com v2ph.com  v7hds.comvagabundasdoorkut.net  vagina.nlvaginacontest.comvaginal-ultrasound.comvaginalultrasound.infovaginapics.pro vbejeyv.shop  vdoav.comvecchiescopate.casa venezporn.com +veporn.com vepornhd.club veporno.netvercomicsporno.xxx verhentai.tvverpeliculasporno.gratis vervesex.comveryladyboy.com vgg8.com video-jav.net video-one.com video.fc2.com video01.orgvideodesexo.blog videoleak.mevideosamadoresreais.comvideosdemadurasx.comvideosdepornografia.blog.brvideosdesexo.br.comvideosdesexo.com.brvideosection.comvideoshorny.comvideoskaseros.comvideosmadeathome.comvideosporno.com.brvideosporno.lifevideostravestis.xxxvideoxxxporn.biz videozzz.com vidown.comvidspornoduro.com viet.sex viet69.dev viet69.link viet69.newsviewerswives.net viewgals.com vikiporn.comvintage-erotica-forum.comvintageamateurporn.comvintagehomemadesex.comvintagemedicalpictures.comvintagexxxfilms.com vipergirls.to vipissy.comvipmatureporn.comvipstudiocali.com viralcum.com viralporn.comvirginpornlinks.comvirtualpartyworld.comvirtualporn.comvirtualrealgay.comvirtualrealporn.comvirtualrealtrans.comvirtualtaboo.com vitukali.com vivaxnxx.com  vixen.com -vixvids.to vjav.com vl4x.net  vmwxw.com vnanchoi.cavomitkings.com voyeureye.com voyeurhit.comvoyeurhouse.comvoyeurmonkey.comvoyeurpapa.comvoyeurporntapes.comvoyeurstyle.com voyeurweb.com -vpejey.xyz  vporn.comvpornvideos.com -vrbgay.com  vrcams.io vrfdgswx.xyz vrfun18.com +vixvids.to vjav.com vl4x.net  vmwxw.com vnanchoi.cavomitkings.com voyeureye.com voyeurhit.comvoyeurhouse.comvoyeurmonkey.comvoyeurpapa.comvoyeurporntapes.comvoyeurstyle.com voyeurweb.com  vporn.comvpornvideos.com +vrbgay.com  vrcams.io vrfun18.com vrporn.com vrporncat.comvrpornjack.comvrpornmania.comvrpornranked.comvrsexgames.biz vrsmash.com vrsumo.com -vsezoo.comvuasanhrong.com vulgarx.com vxnbbrs.xyz vxxsred.xyz  w0512.com w6un.comwaittingfor001.weebly.com wankgames.com wankizer.com -wankoz.com  wankz.com wankzvr.comwantmywife.com +vsezoo.com vulgarx.com  w0512.com w6un.comwaisongcha.comwaittingfor001.weebly.com wana-tv.sbs wancctv.asiawandan-dh.buzz wanduww.buzz wankgames.com wankizer.com +wankoz.com  wankz.com wankzvr.com want520.comwantmywife.com waplog.com waranlov.com warddogs.com washa.tv waskucity.comwatch-my-gf.comwatch-porn.netwatchersweb.comwatchindianporn.netwatchjavonline.comwatchmyexgf.net watchmygf.me watchmygf.net watchmygf.towatchmygirlfriend.tvwatchteencam.comwater-and-power.comwaterdamagesandiego.org watersex.com wav.tv -wawatv.net -wbvm4s.comwearehairy.com weav.xyzwebcam-teen.netwebcamgirls.chatwebcamjackers.comwebcammedellin.cowebcamtubexxx.com webgata.netwebgirlsonline.net weimi180.comweknowporn.com welcomix.comwellfuckedwife.comwellmaturetube.comwet-ass-pussy.comwetandpuffy.com wetchicks.org wetnhorny.com wetplace.comwetpussygames.comwetsextube.comwhatboyswant.comwhengirlsplay.com whentai.com whichav.com whichav.videowhitexxxtube.comwholevideos.comwhoreasianporn.com whoreshub.com whoreslag.comwhoreteensex.comwhorevintagesex.com whvuxtub.com whynotbi.comwife-home-videos.comwifehomeporn.comwifeinlove.comwifeinterracialfuck.comwifeloversporn.comwifemovies.netwifesexorgy.comwifesharingpics.comwifevideos.netwifewantstoplay.com wikifeet.com wikiporn.tvwikisexguide.comwildcamporn.com wildfanny.comwildfreevideos.comwildxxxhardcore.com willyporn.com winning11.com wixipedia.net wiz-s.jp wldfnjh.com  wnacg.com -wnacg.link  wnacg.org wonporn.com wonporn.netwoodmancastingx.com world3d.bizworldescortindex.comworldpornvideos.com worldsex.com wowgirls.comwowindianporn.comwowpornlist.xyz wowstars.comwowyoungporn.com wtfpeople.com wumashe.com  wunvb.com wuso.me wuyefuli.org wvm0agb4.me +wbvm4s.comwearehairy.com weav.xyzwebcam-teen.netwebcamgirls.chatwebcamjackers.comwebcammedellin.cowebcamtubexxx.com webgata.netwebgirlsonline.net weimi180.comweknowporn.com welcomix.comwellfuckedwife.comwellmaturetube.com  wen21.xyzwet-ass-pussy.comwetandpuffy.com wetchicks.org wetnhorny.com wetplace.comwetpussygames.comwetsextube.com +whasil.xyzwhatboyswant.comwhengirlsplay.com whentai.comwhereiskpkuang.com whichav.com whichav.videowhitexxxtube.comwholevideos.comwhoreasianporn.com whoreshub.com whoreslag.comwhoreteensex.comwhorevintagesex.com whvuxtub.com whynotbi.comwife-home-videos.comwifehomeporn.comwifeinlove.comwifeinterracialfuck.comwifeloversporn.comwifemovies.netwifesexorgy.comwifesharingpics.comwifevideos.netwifewantstoplay.com wikifeet.com wikiporn.tvwikisexguide.comwildcamporn.com wildfanny.comwildfreevideos.comwildxxxhardcore.com willyporn.com winning11.com wixipedia.net wiz-s.jp wjny-one.sbs +wm18s.buzz  wnacg.com +wnacg.link  wnacg.orgwolfsex-me.sbs wonporn.com wonporn.netwoodmancastingx.com world3d.bizworldescortindex.comworldofslaves.ioworldpornvideos.com worldsex.com wowgirls.comwowindianporn.comwowpornlist.xyz wowstars.comwowyoungporn.com wtfpeople.com  wunvb.com wuso.me wuyefuli.org wvm0agb4.me ww9094.comwwwpornhub.pro  wxoyt.com wyqqdz.com -wzlthw.com  wzmyg.com  wztv8.com  x-art.comx-artvideo.net x-caprice.com x-fetish.org x18r.com x3guide.com  x3vid.com x6av.com  x99av.com -x9wang.com -xacmbq.xyzxanimeporn.com xanimeporn.tv xapplist.comxattractive.com xb18.me  xbabe.com -xbabe.mobi xbahis33.com xbahis44.com -xbanny.com xbeegtube.com  xbnat.com xbookcn.net xbooks.work +wzlthw.com  wzmyg.com  wztv8.com +wzzyw.buzz  x-art.comx-artvideo.net x-caprice.com x-fetish.org +x0rd38.xyz x18r.com x3guide.com  x3vid.com x6av.com  x99av.comxanimeporn.com xanimeporn.tv xapplist.comxattractive.com xaxy.xyz xb18.me  xbabe.com +xbabe.mobi +xbanny.com xbeegtube.comxbhuijiab.info  xbnat.com xbookcn.net xbooks.work xbooru.com xboyvids.comxbrasilporno.com  xcafe.com  xcams.com xcg123.com  xchina.co -xchina.fun xcity.jp xcum.com  xdaddy.in xdir.vip xdporner.com  xecce.com xemales.com  xero.porn xerotica.com xfantazy.comxfemaledom.com xfockers.com xfreehd.comxfuckonline.com xgames.zone xgaytube.com xgaytube.tv xgirls.webcam xgroovy.com xgsp.tv xh-porn.com xh.video xhamster2.com xhot.pro xhub.tv  xiaofu.me xiaogirls.com  xiaoou.io  xiaoou.tv xiaoyaoge.xyz  xie56.xyz -xinfhw.com xing66.lifexinmeitulu.com +xchina.fun xcity.jp xcum.com  xdaddy.in +xdh999.one xdir.vip xdporner.com  xecce.com xemales.com xerotica.com xfantazy.comxfemaledom.com xfockers.com xfreehd.comxfuckonline.com xgames.zone xgaytube.com xgaytube.tv xgirls.webcam xgroovy.com xgsp.tv  xgtd3.com +xgtdr.buzz xh-porn.com xh.video xhamster2.com xhot.pro xhub.tvxiangrikui-app.com +xianir.xyz  xiaofu.me xiaogirls.com  xiaoou.io  xiaoou.tvxiaoshuobb.life xiaoyaoge.xyz  xie56.xyz  xin21.xyzxinaia-av.buzz +xinfhw.com xing66.life xing840.info xinggan77.vip xinlan995.xyzxinmeitulu.com xiuren.org xjavporn.comxkeezmovies.com -xknoop.comxkontakt18.com xkorean.camxl-gaytube.com  xlecx.org  xlinkz.to xlovecam.com +xknoop.comxkontakt18.com xkorean.camxl-gaytube.com  xlecx.org  xlinkz.to xlovecam.com xlydh.cc xmalay.com -xmature.su  xmissy.nlxmoviesforyou.com xnalgas.com xnostars.com xnxvideos.org xnxx-com.cfdxnxx-sex-tube.comxnxx-sex-videos.comxnxx-teens.com xnxx-tv.net xnxx-xxx.win xnxx.health +xmature.su +xmav99.com +xmbsyj.topxmforever.rest  xmissy.nlxmoviesforyou.com xnalgas.com xnertv.shop xnostars.com xnxvideos.orgxnxx-sex-tube.comxnxx-sex-videos.comxnxx-teens.com xnxx-tv.net xnxx-xxx.win xnxx.health xnxx18.pro xnxx2.info xnxx2.it  xnxx2.org  xnxx2.pro xnxx4porn.com xnxxarab.ccxnxxarabsex.com xnxxcom.club xnxxcom.xyzxnxxcomvideos.com xnxxfap.infoxnxxhamster.net xnxxhd.biz  xnxxhd.tvxnxxmovies.com xnxxporn.de xnxxporn.funxnxxpornvid.comxnxxsexclips.comxnxxsexmovies.com xnxxtime.comxnxxvideos.rest xnxxx.cc  xo104.com -xogogo.com xoteens.comxoxoteiras.com xozilla.com  xpaja.net xpee.com xpoleuno.com xpornblog.comxpornplease.com xsela.cc xshaker.net xshr.online xsrxpwvg.com  xstas.biz  xsvod.xyz -xsz-av.com  xtapes.to  xtube.com xtubebdsm.com xtubezoo.com xu97.vip  xujan.com xv1.monster xvds.tv  xvedo.net xvideo-jp.com +xogogo.com +xomfsp.xyz xoteens.comxoxoteiras.com xozilla.com  xpaja.net xpee.com xpoleuno.com xpornblog.comxpornplease.com xqwherb.sbs xsela.cc xshaker.net xshr.online xsijishe.com +xslist.org  xstas.biz  xsvod.xyz +xsz-av.com  xtapes.to +xtegvk.xyz  xtube.com xtubebdsm.com xtubezoo.com xu97.vip  xujan.com xv1.monster xvds.tv  xvedo.net xvideo-jp.com xvideo.com xvideo.runxvideo.vlog.brxvideoporno.tvxvideos-dl.topxvideos-porn-video.comxvideos-xxxx.com xvideos.blog xvideos.co xvideos.la xvideos.red xvideos.tv.br xvideos2.com xvideos3.comxvideos5.com.brxvideosamadoras.comxvideosbrasil.comxvideosbrasileiro.net xvideoscom.mexvideosincesto.comxvideosjingxiang.comxvideosnovinha.comxvideosnovinha.com.brxvideosnovinhas.comxvideostravestis.xxxxvideosup.com.brxvideosx.com.br xvideoz.win xvidios.blog xvidios.xxx xvidzz.com xvirtual.com xvxx.stream xvxxtube.com -xx-map.com xx159.com.cn xx9.app  xxbb9.com  xxbook.cc xxbrits.comxxeronetxx.info -xxgasm.comxxindianporn.com +xx-map.com xx159.com.cn xx9.app  xxbook.cc xxbrits.comxxeronetxx.info xxfbiaa.xyz +xxgasm.comxxindianporn.comxxiqiyiavxx.buzz xxmovz.com  xxnx.restxxnxx-porn.com xxnxx-sex.com xxu.mobi xxvideo.mobi xxvideos.xxx xxvideoss.org -xxvids.net xxx-blog.toxxx-channel.com xxx-com.cfd xxx-fap.com xxx-files.orgxxx-hentai.blogspot.comxxx-porn-fuck.comxxx-porn-tube.com xxx-porn.info xxx-video.cfd xxx-videos.tv xxx-ways.com xxx.com xxx.xxx  xxx18.uno xxx18teen.net xxx2022.com xxx2023.com xxx4hindi.com xxxaporn.comxxxassfuck.com -xxxbit.comxxxbolivianas.com xxxbule.com xxxbullet.com xxxbunker.com xxxccc4.com xxxclub.club xxxcomics.org +xxvids.net xxx-com.cfd xxx-fap.com xxx-files.orgxxx-hentai.blogspot.comxxx-porn-fuck.comxxx-porn-tube.com xxx-porn.info xxx-video.cfd xxx-videos.tv xxx-ways.com xxx.com xxx.xxx  xxx18.uno xxx18teen.net xxx2022.com xxx2023.com xxx4hindi.com xxxaporn.comxxxassfuck.com +xxxbit.comxxxbolivianas.com xxxbule.com xxxbullet.com xxxbunker.com xxxclub.club xxxcomics.org xxxdan.com -xxxdesi.ccxxxdinotube.com xxxengine.net xxxfile.org xxxfiles.com xxxflare.com xxxforte.com xxxfree.watchxxxfuckmom.com xxxgames.bizxxxgames.gamesxxxgirls88.comxxxgratisfilms.com  xxxhd.pro xxxhdporn.ccxxxhdvideo.mobi xxxhentai.netxxxhentaipics.comxxxhentaipics.proxxxhomefuck.com xxxhub123.comxxxhubvideos.com xxxifuck.comxxxindianporn2.comxxxindiantv.comxxxjapanesemovies.com xxxland.netxxxlesbians.me xxxlucah.comxxxmaturepussypics.comxxxmatures.net xxxmofo.comxxxmomporn.tube xxxmovies.fun xxxmovies.pro xxxn.me xxxn.tv +xxxdesi.ccxxxdinotube.com xxxengine.net xxxfile.org xxxfiles.com xxxflare.com xxxforte.com xxxfree.watchxxxfuckmom.com xxxgames.bizxxxgames.gamesxxxgirls88.comxxxgratisfilms.com  xxxhd.pro xxxhdporn.cc xxxhentai.netxxxhentaipics.comxxxhentaipics.proxxxhomefuck.com xxxhub123.comxxxhubvideos.com xxxifuck.comxxxindianporn2.comxxxindiantv.comxxxjapanesemovies.com xxxland.netxxxlesbians.me xxxlucah.comxxxmaturepussypics.comxxxmatures.net xxxmofo.comxxxmomporn.tube xxxmovies.fun xxxmovies.pro xxxn.me xxxn.tv xxxner.comxxxnewvideos.com  xxxnu.com  xxxnxx.mexxxpenguin.com xxxpicz.com xxxporn.suxxxporn123.comxxxporndig.com xxxpornhd.proxxxpornmovs.comxxxpornotuber.comxxxpornozinho.blog.brxxxpornzeed.com xxxreal.com xxxscenes.netxxxsexanal.comxxxsexcinema.comxxxsexocasero.comxxxsextubes.com xxxsexzoo.com xxxshame.com xxxstreams.euxxxstreams.orgxxxstreams.watchxxxteenanal.net xxxtube1.comxxxtubeasian.netxxxtubedot.com xxxtubegf.comxxxtubenote.comxxxtubeset.comxxxtubezoo.com  xxxv.mobixxxvideo.blog.br xxxvideo.one xxxvideo.vipxxxvideo.worldxxxvideoamatoriali.com xxxvideor.comxxxvideos247.comxxxvideoszoo.com xxxvidos.vip xxxvidso.comxxxvirtualworld.com xxxvogue.net -xxxwow.net xxxxvideo.unoxxxymovies.comxxxyoungxxx.com xzone.to xzxxporn.com xzxxtube.com -yabang.org -yaburi.men  yaddal.tv yadori.club -yaeby.info yamoon.club yande.re yaohubaba.comyaoimangaonline.com yaoiotaku.comyaoyaomumu.com yaptube.com yasarang.net yatong.info yavtube.com  yaya.cyou yayadizhi.xyz yazhouse8.com -yeonda.com yepporn.com yes.xxxyespornfree.comyespornplease.comyespornpleasexxx.com yeswegays.comyeyuehuachao11.comyeyuehuachao12.comyeyuehuachao13.com -ygugu4.com yhy.cool yieamnd.com  yinac.xyz -yinac5.top  yinmh.comyinshuiger.infoyouassporn.com  youav.com -youflix.is youjism.com youjizz.sexyoung-amateur-movies.comyoung-webcam.net young-xxx.netyoungamateursporn.com younger19.comyoungerbabes.comyoungermommy.comyoungheaven.comyounglibertines.comyoungmommyfucksme.comyoungpornhd.comyoungpornonly.comyoungpornvideos.com youngsex.sexyyoungsex.videoyoungteenhomeporn.com youngtube.meyouporn-germany.com youporner.euyoupornlist.comyoupornxvideos.netyouramateurporn.comyourassbig.com yourbrain.comyourcolonic.comyourcolonoscopy.comyourdailypornvideos.wsyourdirtymind.com yourdoll.comyourflashporn.comyourfreeporn.tvyourgynexam.com yourlust.comyourpelvicexam.comyourpelvicultrasound.comyourphysicalexam.com yourporn.sexyyourporndump.comyourporngod.comyoursigmoidoscopy.comyourspeculumexam.comyourupskirt.comyourvoyeurvideos.comyourxxxvideos.pro youskbe.comyoutrannytube.com youwuss.com youx.xxxyouyu.services +xxxwow.net xxxxvideo.uno xxxyaom.xyzxxxymovies.comxxxyoungxxx.com xzone.to xzxxporn.com xzxxtube.com  yaddal.tv yadori.club +yaeby.info yamoon.club yande.re yantaqu.com yaohubaba.comyaoimangaonline.com yaoiotaku.com yaole91.xyz yaoliuno.funyaoyaomumu.com yaptube.com yasarang.net yavtube.com  yaya.cyou yayadizhi.xyz yazhouse8.com +yeonda.com yepporn.com yes.xxxyespornfree.comyespornplease.comyespornpleasexxx.com yeswegays.com +yft-mv.sbs +ygugu4.com yhgwgtv.xyz yhy.cool  yinac.xyz +yinac5.top yinhdhan.sbsyinhuafish.lat  yinmh.comyinshuiger.info +yinya.shop  ymhsf.top +ymhsf1.topyouassporn.com  youav.com +youflix.is youjism.com youjizz.sexyoung-amateur-movies.comyoung-webcam.net young-xxx.netyoungamateursporn.com younger19.comyoungerbabes.comyoungermommy.comyoungheaven.comyounglibertines.comyoungmommyfucksme.comyoungpornhd.comyoungpornonly.comyoungpornvideos.com youngsex.sexyyoungsex.videoyoungteenhomeporn.com youngtube.meyouporn-germany.com youporner.euyoupornlist.comyoupornxvideos.netyouramateurporn.comyourassbig.com yourbrain.comyourdailypornvideos.wsyourdirtymind.com yourdoll.comyourflashporn.comyourfreeporn.tvyourgynexam.com yourlust.comyourpelvicexam.com yourporn.sexyyourporndump.comyourporngod.comyourupskirt.comyourvoyeurvideos.comyourxxxvideos.pro youskbe.comyoutrannytube.com youwuss.com youx.xxxyouyu.services yoyoav.net -ypmate.com ysav184.xyz -ysporn.comyuenuge113.xyz yuraku.8v8.be  yusjb.com -yuvutu.com -ywbclx.top  ywoos.com yy55.tv  yyfb.cyou yzld188.top  z00.world z676869.comzatrahal.onlinezazzybabes.com -zbporn.com zeenite.com -zen8ok.xyz zerochan.netzettai-ero.com zh99.netzhaimankan.comzhainanjidi.xyzzhainanjidid.top zibacity.comzingtruyen.net  zishy.com -zobry.site zoig.com -zononi.comzoo-hardcore.com zoo-porno.biz zoo-tube8.com zoo-xnxx.comzoo-xvideo.comzoofiction.comzoofilianet.com -zoohun.comzoomobileporn.comzoophilist.net zooporn.prozooporn.shiksha zooporn.video zoopornmd.com zooporno.bizzooredtube.com  zoos.goldzoosexfarm.com zoosexnet.comzooskoolvideos.com zootube1.comzooxxxsexporn.redzooyouporn.comzoozhamster.com zorglist.com -zqqpwz.com +ypmate.com ysav184.xyz ysg-link.sbs yskg-ber.buzz +ysporn.comyuenuge113.xyz yuenuge18.cc  yusjb.com +yuvutu.com  ywoos.com yy55.tv yy7y.com yy8y.com  yyfb.cyou +yyyzgdl.cn yzld188.top  z00.world z676869.com za77.xyzzatrahal.onlinezazzybabes.com +zbporn.com  zctb.buzz zeenite.com +zen8ok.xyz zerochan.netzettai-ero.com zh99.netzhaimankan.comzhainanjidi.xyzzhainanjidid.top zhangboz1.xyz +zhtv01.comzhuzhushipin-app.com zibacity.comzingtruyen.net  zishy.com zoig.comzoo-hardcore.com zoo-porno.biz zoo-tube8.com zoo-xnxx.comzoofiction.comzoofilianet.com +zoohun.comzoomobileporn.comzoophilist.net zooporn.prozooporn.shiksha zooporn.video zoopornmd.com zooporno.bizzooredtube.comzoosexfarm.com zoosexnet.comzooskoolvideos.com zootube1.comzooxxxsexporn.redzooyouporn.comzoozhamster.com zorglist.com +zqqpwz.comzsuxtx-ktv.shop zteman.net -zunked.com zweiporn.com zzcartoon.com -zzgays.com zzitube.com anime-rule34-world.b-cdn.netxn--80aaazx1an0a.lolxn--8uq428d76d.tokyoxn--cck4d8b3009a.comxn--gmq92kd2rm1kx34a.comxn--hckl3e1e8a8ajin0czf.netxn--hhr917d3fecva.xyzxn--m1abbbgjah.lolxn--mtswd61ejxq.com%!xn--r8jwklh769h2mc880dk1o431a.com%!xn--r8jwklh769hk43amcfoyl3z3a.comxn--uis17aj9kmuf.com xn--urs05q.jpxn--x-qeu1ji09tzlg.bizxn--x-qeu1ji09tzlg.net(^|\.)[1-5]gaoap\.com$!(^|\.)[1-9]+aipai\.(com|net)$!(^|\.)[1-9]+zipai\.(com|net)$(^|\.)[1-9]00caocao\.com$(^|\.)[3-9]0000sao\.com$$ (^|\.)[a-z][1-9][0-9][a-z]\.com$-)(^|\.)[a-z]?fulibl\.(cc|com|org|net|xyz)$(^|\.)18tv[1-5]\.com$ (^|\.)69bag[0-1][1-9]?\.com$ (^|\.)783([a-z][a-z]?)?\.tv$"(^|\.)7mm0([0-1][0-9]?)?\.com$(^|\.)8dgo[1-57-9]\.com$(^|\.)91p[0-9][0-9]?\.com$(^|\.)91porn[0-9]{3}\.me$(^|\.)91sew1[1-6]\.buzz$(^|\.)989[a-z]?\.tv$(^|\.)99pp[1-9][0-9]\.com$:6(^|\.)aipa(111|222|333|444|555|666|777|888|999)\.life$"(^|\.)aisejushi(2|3|5|6)\.com$(^|\.)avcc1[0-9]\.com$!(^|\.)avstar0[1-9]\.(com|me)$(^|\.)banyinjia[0-9]?\.com$HD(^|\.)byyum([3589]|2[235689]|3[34]|4[1-9]|5[1-79]|6[0134679])?\.com$%!(^|\.)cgbb([1-9]|1[0-9]|20)\.com$(^|\.)cosaa[a-z]\.cyou$(^|\.)douyintt[0-9]\.me$(^|\.)fi11sm([0-9]+)?\.com$(^|\.)fiftymvapi\..+$!(^|\.)forduck[0-1][0-9]\.com$&"(^|\.)gaogediao\.(com|me|net|org)$(^|\.)guifw3[1-3]\.cc$(^|\.)h5ccav[1-5]\.com$(^|\.)hhmen[1-3]\.xyz$(^|\.)hkfg[1-7]\.xyz$(^|\.)jav777\.(cc|tv|work)$"(^|\.)jbk0([0-1][0-9]?)?\.com$(^|\.)jdyy[1-9]?\.me$$ (^|\.)kimoav([1-9][0-9]?)?\.com$(^|\.)ksyp0[1-9]\.com$(^|\.)lianren[1-7]\.cc$ (^|\.)loibus\.(cc|com|link)$+'(^|\.)loibus(100|101|202|505|606)\.top$(^|\.)maa18[1-2][0-9]\.com$(^|\.)mdyy[0-9][0-9]\.cc$(^|\.)mdyy[0-1][0-9]\.com$($(^|\.)mimi\.(cfd|lol|onl|sbs|so|vc)$(^|\.)mimi[0-9]{3}\.com$(^|\.)mitao[1-3]\.tv$(^|\.)mmtv[1-5]\.life$40(^|\.)mmwz\.(fun|in|la|me|one|pro|pw|run|tv|ws)$%!(^|\.)putaozy([1-9][0-9]?)?\.com$(^|\.)qqsp0[1-3]\.com$(^|\.)rbp[1-9][0-9]\.com$(^|\.)sao[1-6]0000\.com$(^|\.)sg11[3-9]\.me$(^|\.)spankwire[1-9]\.com$(^|\.)syjc1[1-6]\.xyz$'#(^|\.)tianbiav([1-9]|1[0-6])?\.com$(^|\.)tqav[1-9][0-9]\.com$(^|\.)tt[1-2][0-9]\.tv$(^|\.)ttghg[1-9][0-9]\.xyz$%!(^|\.)tttv([1-9][0-9]?|100)\.com$#(^|\.)twseb([1-9][0-9]?)?\.com$"(^|\.)uu[a-z][1-9][0-9]?\.com$(^|\.)whtdh0[1-3]\.cc$(^|\.)wmm33[0-5]\.com$(^|\.)wyfuli[1-9]\.net$(^|\.)xnkl[3-8]\.cn$(^|\.)yiren[1-9][0-9]\.com$(^|\.)youyuapi\..+$(^|\.)yrrj[1-9]?\.buzz$(^|\.)zh9[0-7]\.net$(^|\.)zztt[1-6][0-9]\.com$(^|\.)zzz[1-9][0-9]\.top$aboluowang.combannedbook.netbannedbook.orgbroadpressinc.comchinaaffairs.org dafahao.comdonatecarsoh.orgdongtaiwang.com falundafa.orgfalundafa.org.twfalundafamuseum.orgfalungong.club faluninfo.netfawanghuihui.orgfayuanbooks.com  fgmtv.org ganjing.comganjingworld.com guangming.org mhradio.orgninecommentaries.com starp2p.comtiandixing.orgtiantibooks.org tuidang.orgupholdjustice.orgwujieliulan.com xinsheng.net yuanming.netyuming.qxbbs.org zhengjian.orgzhengwunet.org zhenxiang.bizzhuichaguoji.org shenyun.com shenyun.orgshenyuncreations.comshenyunperformingarts.org apkcombo.com apkmirror.com apkpure.com cdnpure.com pureapk.com +zunked.com zweiporn.com zzcartoon.com zzdh.biz zzdh.cc zzdh.pw zzdh.run zzdh.ws +zzdh77.com zzdh808.com +zzdh99.com +zzgays.com anime-rule34-world.b-cdn.netxn--096-4g6em5t.comxn--201-4g6em5t.comxn--202-4g6em5t.comxn--203-4g6em5t.comxn--204-4g6em5t.comxn--205-4g6em5t.comxn--2vxsp6vi4j.comxn--8uq428d76d.tokyoxn--av-o44ep1d.comxn--cck4d8b3009a.comxn--gmq348bujlxrb.comxn--gmq92kd2rm1kx34a.comxn--hckl3e1e8a8ajin0czf.netxn--hhr917d3fecva.xyzxn--mtswd61ejxq.com%!xn--r8jwklh769h2mc880dk1o431a.com%!xn--r8jwklh769hk43amcfoyl3z3a.comxn--sjqr38j.comxn--uis17aj9kmuf.com xn--urs05q.jpxn--x-qeu1ji09tzlg.bizxn--x-qeu1ji09tzlg.net(^|\.)[1-5]gaoap\.com$!(^|\.)[1-9]+aipai\.(com|net)$!(^|\.)[1-9]+zipai\.(com|net)$(^|\.)[1-9]00caocao\.com$(^|\.)[3-9]0000sao\.com$$ (^|\.)[a-z][1-9][0-9][a-z]\.com$-)(^|\.)[a-z]?fulibl\.(cc|com|org|net|xyz)$(^|\.)1[0-9]{2}\.one$(^|\.)13mei[5-7]\.buzz$(^|\.)18j[efg]\.life$!(^|\.)18jmttios[0-9]{2}\.com$(^|\.)18tv[1-5]\.com$1-(^|\.)2024(3[0-9]|4[0-9]|6[0-9]|7[0-9])\.xyz$(^|\.)3[0-9]{2}\.icu$(^|\.)3[0-9]{2}\.one$ (^|\.)69bag[0-1][1-9]?\.com$ (^|\.)783([a-z][a-z]?)?\.tv$"(^|\.)7mm0([0-1][0-9]?)?\.com$(^|\.)8dgo[1-57-9]\.com$&"(^|\.)91cg([1-9]|[0-9][1-9])?.com$(^|\.)91p[0-9][0-9]?\.com$@<(^|\.)91porn\.(best|com|cool|group|party|plus|site|tw|work)$(^|\.)91porn[0-9]{3}\.me$(^|\.)91porn[0-9]?\.store$(^|\.)91porn[fvxy]\.com$(^|\.)91sew1[1-6]\.buzz$(^|\.)989[a-z]?\.tv$(^|\.)99pp[1-9][0-9]\.com$(^|\.)9cha[0-9]{2}\.cc$:6(^|\.)aipa(111|222|333|444|555|666|777|888|999)\.life$"(^|\.)aisejushi(2|3|5|6)\.com$(^|\.)aiwei[1-9]{2}\.buzz$(^|\.)aqdk[0-9]{3}\.com$(^|\.)avcc1[0-9]\.com$!(^|\.)avstar0[1-9]\.(com|me)$(^|\.)awjd[1-9]?\.tv$(^|\.)awwcn[1-9]?\.top$(^|\.)banyinjia[0-9]?\.com$(^|\.)bhzyk[1-9]?\.xyz$(^|\.)bibeidh1[6-8]\.cc$(^|\.)bjini[0-9]{2}\.buzz$(^|\.)byy[0-9][0-9]?\.icu$HD(^|\.)byyum([3589]|2[235689]|3[34]|4[1-9]|5[1-79]|6[0134679])?\.com$%!(^|\.)cgbb([1-9]|1[0-9]|20)\.com$ (^|\.)chuzs[1-9]{0,2}\.buzz$(^|\.)cosaa[a-z]\.cyou$(^|\.)douyintt[0-9]\.me$(^|\.)doufuru[0-9]?\.cc$ (^|\.)doufuru[0-9]{2}?\.xyz$(^|\.)fby[1-9]?[0-9]\.icu$(^|\.)fby[1-9]?[0-9]\.one$(^|\.)fi11sm([0-9]+)?\.com$(^|\.)fiftymvapi\..+$(^|\.)flsq[0-9]{2}\.com$!(^|\.)forduck[0-1][0-9]\.com$&"(^|\.)gaogediao\.(com|me|net|org)$$ (^|\.)gossipfuli[0-9]{3,4}\.xyz$(^|\.)guifw3[1-3]\.cc$(^|\.)h5ccav[1-5]\.com$(^|\.)hhmen[1-3]\.xyz$(^|\.)hkfg[1-7]\.xyz$(^|\.)hs[1-9]{2}\.vip$(^|\.)jav777\.(cc|tv|work)$(^|\.)jb[1-9][0-9]\.lol$"(^|\.)jbk0([0-1][0-9]?)?\.com$(^|\.)jdyy[1-9]?\.me$(^|\.)jiuse[0-9]{1,3}\.com$"(^|\.)jmtt\.(app|live|tv|vip)$(^|\.)jstv[0-9]{2}\.com$(^|\.)kdfl[0-9]{2}\.xyz$$ (^|\.)kimoav([1-9][0-9]?)?\.com$*&(^|\.)kpkuang\.(bond|fun|info|one|us)$(^|\.)ksyp0[1-9]\.com$(^|\.)lianren[1-7]\.cc$(^|\.)llyysp[0-9]{4}\.top$ (^|\.)loibus\.(cc|com|link)$+'(^|\.)loibus(100|101|202|505|606)\.top$%!(^|\.)luchuxue([0-9]{0,5})\.buzz$(^|\.)maa18[0-2][0-9]\.com$(^|\.)madouqu[0-9]{2}\.cc$(^|\.)mdyy[0-9][0-9]\.cc$(^|\.)mdyy[0-1][0-9]\.com$($(^|\.)mimi\.(cfd|lol|onl|sbs|so|vc)$(^|\.)mimi[0-9]{3}\.com$(^|\.)mitao[1-3]\.tv$(^|\.)mmtv[1-5]\.life$40(^|\.)mmwz\.(fun|in|la|me|one|pro|pw|run|tv|ws)$$ (^|\.)momotk([1-9][0-9]?)?\.uno$(^|\.)nnbw[0-2]\.xyz$%!(^|\.)putaozy([1-9][0-9]?)?\.com$(^|\.)qqbs([0-9]{2})?\.vip$(^|\.)qqsp0[1-3]\.com$(^|\.)rbp[1-9][0-9]\.com$(^|\.)rbyh[1-9]\.buzz$*&(^|\.)rule34\.(asia|us|world|xxx|xyz)$(^|\.)sao[1-6]0000\.com$(^|\.)sbyjs2[6-9]\.buzz$(^|\.)sg11[3-9]\.me$(^|\.)shdd[0-9]{2}\.buzz$$ (^|\.)shuangmawei[0-9]{2}\.buzz$(^|\.)smgsp[0-2]?\.buzz$(^|\.)spankwire[1-9]\.com$(^|\.)ssphb[0-9]{2}\.xyz$ (^|\.)supxxx[0-9]{0,2}\.com$(^|\.)sycf[0-9]?\.xyz$(^|\.)syjc1[1-6]\.xyz$'#(^|\.)tianbiav([1-9]|1[0-6])?\.com$(^|\.)tqav[1-9][0-9]\.com$(^|\.)tt[1-2][0-9]\.tv$(^|\.)ttghg[1-9][0-9]\.xyz$%!(^|\.)tttv([1-9][0-9]?|100)\.com$#(^|\.)twseb([1-9][0-9]?)?\.com$"(^|\.)uu[a-z][1-9][0-9]?\.com$(^|\.)whtdh0[1-3]\.cc$(^|\.)wmm33[0-5]\.com$(^|\.)wyfuli[1-9]\.net$(^|\.)xaa[0-9]?\.one$(^|\.)xaxy[0-9]{2}\.one$(^|\.)xg[0-9]{2}\.vip$(^|\.)xgyy([0-9]{2})?\.vip$!(^|\.)xingdh([0-9]{3})?\.xyz$(^|\.)xlywz[1-9]?\.cc$(^|\.)xnkl[3-8]\.cn$(^|\.)xomfsp[1-9]?\.buzz$(^|\.)xv[0-9]{4}\.top$ (^|\.)xxxyaom[0-9]{2}\.buzz$(^|\.)yiren[1-9][0-9]\.com$(^|\.)youyuapi\..+$(^|\.)yrrj[1-9]?\.buzz$(^|\.)yygc[0-9]?\.xyz$!(^|\.)zayy([0-9]{0,3})?\.xyz$(^|\.)zh9[0-7]\.net$(^|\.)zy[0-9]{4}\.top$(^|\.)zztt[1-6][0-9]\.com$(^|\.)zzz[1-9][0-9]\.top$ dajiyuan.com dajiyuan.eu edninfo.com epoch.cloud epoch.org.il epochbase.com epochbuy.com epochcar.com epochhk.com epochmall.comepochmediagroup.com epochshop.comepochstories.com epochtime.comepochtimes-bg.comepochtimes-romania.com epochtimes.bgepochtimes.co.ilepochtimes.co.krepochtimes.co.ukepochtimes.comepochtimes.com.auepochtimes.com.brepochtimes.com.sgepochtimes.com.twepochtimes.com.ua epochtimes.cz epochtimes.de epochtimes.eu epochtimes.fr epochtimes.it epochtimes.jp epochtimes.nl epochtimes.pl epochtimes.ru epochtimes.seepochtimeshk.orgepochtimestr.com epochweek.comepochweekly.com erabaru.net +etviet.comlagranepoca.com minghui.org ntd.com +ntd.tv  ntdca.com +ntdimg.com ntdtv.ca ntdtv.co.kr  ntdtv.com ntdtv.com.tw ntdtv.jp ntdtv.kr  ntdtv.org ntdtv.ru ntdtv-dc.com ntdtvla.com  ntdvn.compersianepochtimes.com renminbao.comtheepochtimes.comtheepochtimessubscribe.comvelkaepocha.czes-visiontimes.comkannewyork.comkanzhongguo.comkanzhongguo.eusecretchina.com trithucvn.net trithucvn.org vct.newsvisiontimes.comvisiontimes.devisiontimes.frvisiontimes.itvisiontimes.netvisiontimesjp.com  vtvan.comwatchinese.com bayvoice.net ozvoice.org sohcradio.com sohfrance.orgsoundofhope.eusoundofhope.krsoundofhope.orgwanokokorosoh.comaboluowang.combannedbook.netbannedbook.orgbroadpressinc.comchinaaffairs.org dafahao.comdonatecarsoh.orgdongtaiwang.com falundafa.orgfalundafa.org.twfalundafamuseum.orgfalungong.club faluninfo.netfawanghuihui.orgfayuanbooks.com  fgmtv.org ganjing.com ganjing.worldganjingworld.com guangming.org mhradio.orgninecommentaries.com starp2p.comtiandixing.orgtiantibooks.org tuidang.orgupholdjustice.orgwujieliulan.com xinsheng.net yuanming.netyuming.qxbbs.org zhengjian.orgzhengwunet.org zhenxiang.bizzhuichaguoji.org shenyun.com shenyun.orgshenyuncreations.comshenyunperformingarts.org apkcombo.com apkmirror.com apkpure.com apkpure.net cdnpure.com pureapk.com winudf.com firefox.comfirefoxusercontent.com chrome -chrome.com chromium.org  brave.com bromite.org  opera.com vivaldi.com waterfox.netbluestacks.com lsplayer.com +chrome.com chromium.orgbasilisk-browser.org  brave.com bromite.orgbrowser.kagi.com cromite.org decentr.net  dothq.org +floorp.appiridiumbrowser.dekiwibrowser.comkmeleonbrowser.org librewolf.netminbrowser.orgnetsurf-browser.org  opera.com palemoon.orgpulsebrowser.appqutebrowser.org vivaldi.com waterfox.net +fflogs.com rpglogs.com +rpglogs.cn +cnbluestacks.com lsplayer.com cn yeshen.com cn maa.plus  prts.plusheavenlywind.cc cn poi.moe steampp.net -cn decrypt.dayaccuweather.comgetadblock.comadblockplus.org addthis.comaddthiscdn.comaddthisedge.com addtoany.comadguard-dns.comadguard-dns.ioadguard-vpn.com adguard.com aptoide.com +cn^time(.euro)?.apple.com$!^time([1-5])?\.facebook\.com$^time([1-4])?.google.com$^((((ut1-wwv)|(ntp\-(b|d|wwv))|(time(\-(([a-e]\-(g|b))|([a-e]\-wwv)))?))\.nist\.gov)|((ntp-c|ut1-time)|(utcnist(2|3)?))\.colorado\.edu)$ ^ntp[0-7]\.ntp-servers\.net$ clock.isc.org ntp.fiord.ru +ntp.nat.ms +ntp.nic.cz ntp.nict.jp ntp.ripe.net +ntp.se +ntp.ufe.cz pool.ntp.orgtime.cloudflare.com time.nrc.catime.windows.com&^ntp([1-7])?\.aliyun\.com$ +cn'^ntp([1-5])?\.tencent\.com$ +cncn.pool.ntp.org +cnntp.neu.edu.cn +cnntp.ntsc.ac.cn +cn +ntp.org.cn +cn decrypt.dayaccuweather.comgetadblock.comadblockplus.org addthis.comaddthiscdn.comaddthisedge.com addtoany.com adguard.app adguard.com adguard.info +adguard.io adguard.org +adtidy.net +adtidy.org agrd.ioadguard-dns.comadguard-dns.ioadguardvpn.comadguard-vpn.comadguard-vpn.online aptoide.com arphic.com arphic.com.cn arphic.com.twifontcloud.com  authy.com -bit.ly  bitly.com bitly.is bitwarden.combigbuckbunny.org blender.orgelephantsdream.org bcove.video bcovlive.io bcvp0rtal.com boltdns.netbrightcove.combrightcove.netbrightcove.servicesbrightcovecdn.com videojs.com +bit.ly  bitly.com bitly.is bitwarden.com bitwarden.eu bitwarden.netbigbuckbunny.org blender.orgelephantsdream.org bcove.video bcovlive.io bcvp0rtal.com boltdns.netbrightcove.combrightcove.netbrightcove.servicesbrightcovecdn.com videojs.com zencdn.net zencoder.combcovlive-a.akamaihd.netbcsecure01-a.akamaihd.netbrightcove.imgix.net buymeacoff.eebuymeacoffee.com chatango.comcloudconvert.comcontentful.com ctfassets.net cutt.lydigitalocean.comdigitaloceanspaces.com do.conginxconfig.io disqus.com disquscdn.comdisqusservice.comcispaletter.comcispaletter.orgcometotheduckside.com ddg.co @@ -10423,7 +11197,7 @@ feedly.com  figma.com gofundme.com gravatar.com botstop.com heroku.com  heroku.me herokuapp.com herokucdn.comherokucharge.com herokussl.comheroku-app.comheroku-charge.com codei.sh codeish.co codeish.io -he.net iina.ioinfrapedia.com inoreader.com is.gdv.gd +he.net iina.ioimageglass.orginfrapedia.com inoreader.com is.gdv.gd jwpcdn.comjwplatform.com jwplayer.com jwpltx.com jwpsrv.comlongtailvideo.comkindle4rss.com kodi.tv  kodi.wiki liberapay.com liberapay.org linguee.com  deepl.comlocalizecdn.comlocalizejs.comlocalizestatus.com @@ -10436,14 +11210,15 @@ notion.com notion.new notion.site  notion.so ok.ru okaapps.com%^(.+\.)*zh\.okaapps\.com$ cnopencollective.com  omaps.apporganicmaps.app pastebin.com patreon.compatreoncommunity.compatreonusercontent.com*&live-patreon-marketing.pantheonsite.io pics.ee  picsee.co picsee.pro pise.pw pros.ee -pse.is ping.pe playcover.ioplaycover.workers.dev pm.me  proton.me protonmail.chprotonmail.comprotonstatus.com quip-cdn.com quip.comquipelements.com +pse.is ping.pe ping.sx$ public-us-pingsx.api.clonoth.com playcover.ioplaycover.workers.dev pm.me  proton.me protonmail.chprotonmail.comprotonstatus.com quip-cdn.com quip.comquipelements.com reabble.cn cn reabble.com rb.gy rebrandly.com reurl.cc rsshub.app -dns.sb ip.sb loli.net sb.sb sm.msu.nu +dns.sb ip.gs ip.sb loli.net sb.sb sm.msu.nu www.sb setapp.com sharethis.com myshopify.com shop.app shopify.com shopify.devshopifycdn.comshopifycloud.comshopifystatus.comshopifysvc.com shorturl.atslideshare.comslideshare.netslidesharecdn.comsourceforge.comsourceforge.net -sf.net fsdn.com cash.appcashbycashapp.com gosq.co gosq.comissquaredown.comissquareup.com mkt.comsellercommunity.comsquarecapital.com squarecdn.comsquarecloudservices.com squareup.com startpage.com ixquick.com steemit.com svp-team.com test-ipv6.com ctan.orglatex-project.org +sf.net fsdn.com cash.appcashbycashapp.com gosq.co gosq.comissquaredown.comissquareup.com mkt.comsellercommunity.comsquarecapital.com squarecdn.comsquarecloudservices.com squareup.com startpage.com ixquick.com steemit.com svp-team.comams2.test-ipv6.comfra.test-ipv6.com sixte.sttest-ipv6.alpinedc.chtest-ipv6.arauc.brtest-ipv6.belwue.nettest-ipv6.carnet.hr test-ipv6.cl test-ipv6.comtest-ipv6.cs.umd.edu!test-ipv6.csclub.uwaterloo.ca test-ipv6.cztest-ipv6.epic.networktest-ipv6.fratec.net test-ipv6.freerangecloud.comtest-ipv6.go6.si test-ipv6.hu test-ipv6.istest-ipv6.iu13.net"test-ipv6.ke.liquidtelecom.nettest-ipv6.noroutetohost.nettest-ipv6.roedu.net test-ipv6.setest-ipv6.sin.vr.orgtest-ipv6.ttk.ru testipv6.de testipv6.cn +cn ctan.orglatex-project.org miktex.org tug.org tidelift.com tinyurl.com trello.com trellocdn.com tumblr.com tuta.io tutanota.com @@ -10455,14 +11230,14 @@ vercel.app vercel.blog vercel.com vercel.events vercel.live vercel.pub  vercel.sh vercel.storezeit-world.co.ukzeit-world.comzeit-world.netzeit-world.org zeit.co zeit.sh zeitworld.com webflow.com editorx.comparastorage.com wix-code.com wix.comwixanswers.com wixapps.net  wixmp.com wixsite.com wixstatic.comvideopress.com w.org wordpress.com wordpress.org wordpress.tv wp-themes.com wp.com  wpvip.com outbound.io zdassets.comzdusercontent.com zendesk.com  zndsk.com  zopim.com -zeplin.dev  zeplin.io zoho.com zoho.com.au zoho.eu zoho.in zohocdn.comzohomeetups.comzohomerchandise.comzohopublic.comzohoschools.comzohostatic.com zohostatic.inzohouniversity.comzohowebstatic.com zoom.com zoom.com.cn zoom.us biliplus.com cloudlatex.io overleaf.com auroraoss.comanaconda.cloud anaconda.com anaconda.org conda.io android.comandroidify.comappleswift.com  swift.org +zeplin.dev  zeplin.io zoho.com zoho.com.au zoho.eu zoho.in zohocdn.comzohomeetups.comzohomerchandise.comzohopublic.comzohoschools.comzohostatic.com zohostatic.inzohouniversity.comzohowebstatic.com zoom.com zoom.com.cn zoom.us biliplus.com cloudlatex.io overleaf.com auroraoss.com cookiepro.com cookielaw.org onetrust.comanaconda.cloud anaconda.com anaconda.org conda.io android.comandroidify.comappleswift.com  swift.org swiftui.cn cnswiftui.com.cn cncalendarserver.orgapple-cloudkit.com cups.orgdeveloper.apple.comdevimages-cdn.apple.comdevstreaming-cdn.apple.comfoundationdb.orgmacosforge.org macruby.com macruby.net macruby.orgapple-mapkit.complaygrounds-cdn.apple.com carekit.orgresearchandcare.orgresearchkit.cn cnresearchkit.com.cn cnresearchkit.hkresearchkit.netresearchkit.orgresearchkit.tvservicetalk.io webkit.org webkitgtk.org wpewebkit.orgwebobjects.com-)appleworldwidedeveloper.hb-api.omtrdc.net)%appleworldwidedeveloper.sc.omtrdc.net#p-events-delivery.akamaized.net archlinux.orgarchlinuxarm.orgbootstrapcdn.comgetbootstrap.combraventures.com braveux.com -compass.isfightforux.comforthebadge.comstockagainstphotography.com launchpad.netlaunchpadlibrarian.comlaunchpadlibrarian.netlaunchpadlibrarian.org snapcraft.io snapstore.io +compass.isfightforux.comforthebadge.comstockagainstphotography.com launchpad.netlaunchpadcontent.netlaunchpadlibrarian.comlaunchpadlibrarian.netlaunchpadlibrarian.org snapcraft.io snapstore.io ubuntu.com ubuntu.netubuntuforums.orgubuntu-touch.io canonical.com azurecr.io  docker.io ecr.aws @@ -10473,11 +11248,12 @@ docker.com  docker.io embed.ly embedly.com playerjs.ioa buck.build buckbuild.comcomponentkit.org draftjs.org f8.comfacebookappcenter.infofacebookappcenter.netfacebookappcenter.orgfacebookconnect.comfacebookdevelopergarage.comfaciometrics.com fasttext.cc fbf8.com fbinfer.com fblitho.com fbredex.com fbrell.com flow.dev flow.org flowtype.org frescolib.org hacklang.org hhvm.commakeitopen.com mcrouter.net mcrouter.orgmessengerdevelopers.com -ogp.meopengraphprotocol.comopengraphprotocol.org  parse.com pyrobot.org  react.com reactjs.com reactjs.org recoiljs.org rocksdb.com rocksdb.net rocksdb.orgyogalayout.comdevelopers.facebook.com fastlane.cifastlane.tools getfedora.orgfedoraforum.orgfedoraproject.orgfedoramagazine.org flathub.org flatpak.org flutter.devflutterapp.comfontawesome.comfortawesome.com  fury.blog fury.co fury.dev  fury.help fury.io gemfury.com gitbook.com +ogp.meopengraphprotocol.comopengraphprotocol.org  parse.com pyrobot.org  react.com reactjs.com reactjs.org recoiljs.org rocksdb.com rocksdb.net rocksdb.orgyogalayout.comdevelopers.facebook.com fastlane.cifastlane.tools getfedora.orgfedoraforum.orgfedorapeople.orgfedoraproject.orgfedoramagazine.org firebase.com firebase.iofirebaseapp.comfirebaseio.com-!firebase-settings.crashlytics.com +cnfirebase.google.comfirebase.googleapis.com#firebaseappcheck.googleapis.com,(firebasedynamiclinks-ipv4.googleapis.com,(firebasedynamiclinks-ipv6.googleapis.com'#firebasedynamiclinks.googleapis.com)%firebaseinappmessaging.googleapis.com($firebaseinstallations.googleapis.com%!firebaselogging-pa.googleapis.com"firebaselogging.googleapis.com+'firebaseperusertopics-pa.googleapis.com'#firebaseremoteconfig.googleapis.com flathub.org flatpak.org flutter.devflutterapp.com pub.devfontawesome.comfortawesome.com  fury.blog fury.co fury.dev  fury.help fury.io gemfury.com gitbook.com gitbook.io npm.community  npmjs.com  npmjs.org atom.iodependabot.com ghcr.io git.io github.blog github.comgithub.community -github.dev  github.io githubapp.comgithubassets.comgithubhackathon.comgithubpreview.devgithubstatus.comgithubuniverse.comgithubusercontent.com myoctocat.comopensource.guide repo.newthegithubshop.com!github-cloud.s3.amazonaws.comFBgithub-production-release-asset-[0-9a-za-z]{6}\.s3\.amazonaws\.com +github.dev  github.io githubapp.comgithubassets.comgithubhackathon.comgithubnext.comgithubpreview.devgithubstatus.comgithubuniverse.comgithubusercontent.com myoctocat.comopensource.guide repo.newthegithubshop.comblob.core.windows.net!github-cloud.s3.amazonaws.comHD^github-production-release-asset-[0-9a-za-z]{6}\.s3\.amazonaws\.com$ gitlab.com  gitlab.io gitlab.netgitlab-static.net.*gitlab-assets.oss-cn-hongkong.aliyuncs.com go-lang.com go-lang.net go-lang.org go.dev  godoc.org @@ -10515,7 +11291,9 @@ gneec7.com oneapi.comopenvinotoolkit.orgsnap-telemetry.io acpica.comclearlinux.org ospray.net -ospray.orgjava java.com java.net intellij.com intellij.net intellij.org jetbrains.com jetbrains.netjetbrains.spacejetbrains.team datalore.iokotlinlang.org  grazie.aigrazie.aws.intellij.net  jfrog.com  jfrog.org bintray.com!d29vzk4ow07wi7.cloudfront.net jsdelivr.com jsdelivr.net esm.runcdn.jsdelivr.net kubernetes.io +ospray.orgjava java.com java.net intellij.com intellij.net intellij.org jetbrains.com jetbrains.netjetbrains.spacejetbrains.team datalore.iokotlinlang.orgcdn.jetbrains.com +cn)download-cdn.jetbrains.com.cn +cn jb.gg  grazie.aigrazie.aws.intellij.net  jfrog.com  jfrog.org bintray.com!d29vzk4ow07wi7.cloudfront.net jsdelivr.com jsdelivr.net esm.runcdn.jsdelivr.net kubernetes.io k8s.ioadaptivecards.ioapi-extractor.com apisof.net appcenter.ms blazor.netbotframework.comcodethemicrobit.comdevopsassessment.net dot.netgamesstack.comgraphengine.ioinsiderdevtour.com @@ -10524,10 +11302,14 @@ blazor.netbotframework.comcodethemicrobit.comdevopsassessment. cnmicrosoftreactor.infomicrosoftreactor.netmicrosoftreactor.orgmicrosoftsilverlight.commicrosoftsilverlight.orgmicrosoftsilverlight.netmicrosoftsqlserver.com  mmdnn.commono-project.com msdn.commsinnovationchallenge.commspairlift.commsropendata.com  nuget.org nugettest.orgopentranslatorstothings.orgposhtestgallery.compwabuilder.comreactorms.com.cn cn sankie.netsqlserveronlinux.comtimelinestoryteller.comuwpcommunitytoolkit.comvisualstudio-staging.comvisualstudio.comvisualstudio.covisualstudio.co.ukvisualstudio.euvisualstudio.net vfsforgit.com vfsforgit.org vsassets.io -vscode.devvscode-cdn.netvscode-unpkg.net xamarin.comaz764295.vo.msecnd.net)%bingsettingssearch.trafficmanager.netdefault.exp-tas.comdeveloper.microsoft.com'#download.visualstudio.microsoft.comdtlgalleryint.cloudapp.net poshtestgallery.cloudapp.net"psg-int-centralus.cloudapp.netpsg-int-eastus.cloudapp.netrink.hockeyapp.net+'vscode-sync-insiders.trafficmanager.net"vscode-sync.trafficmanager.net vscode.blob.core.windows.netvscode.search.windows.net vsmarketplacebadge.apphb.com mongodb.com mongodb.org  nginx.com  nginx.org openwrt.orglede-project.org osdn.net perl.org cpan.org metacpan.orgpolymer-project.orgpolymerproject.org  pycon.org pypa.io pypi.io pypi.org +vscode.devvscode-cdn.netvscode-unpkg.net xamarin.comaz764295.vo.msecnd.net)%bingsettingssearch.trafficmanager.netdefault.exp-tas.comdeveloper.microsoft.com'#download.visualstudio.microsoft.comdtlgalleryint.cloudapp.net poshtestgallery.cloudapp.net"psg-int-centralus.cloudapp.netpsg-int-eastus.cloudapp.netrink.hockeyapp.net+'vscode-sync-insiders.trafficmanager.net"vscode-sync.trafficmanager.net vscode.blob.core.windows.netvscode.search.windows.net vsmarketplacebadge.apphb.com mongodb.com mongodb.org  nginx.com  nginx.org  nixos.org chatgpt.com oaistatic.comoaiusercontent.com +openai.com!openai.com.cdn.cloudflare.net openaiapi-site.azureedge.net2.openaicom-api-bdcpf8c6d2e9atf6.z01.azurefd.net1-openaicomproductionae4b.blob.core.windows.net.*production-openaicom-storage.azureedge.net@<^chatgpt-async-webps-prod-eastus-\d+\.webpubsub\.azure\.com$$o33249.ingest.sentry.io +ads openaicom.imgix.net +ads openwrt.orglede-project.org osdn.netperl.apache.org perl.org cpan.org metacpan.org +modperl.plpolymer-project.orgpolymerproject.org  pycon.org pypa.io pypi.io pypi.org python.orgpythonhosted.org piwheels.org qt.ioqt-project.orgreadthedocs-hosted.comreadthedocs.comreadthedocs.ioreadthedocs.org redis.io redislabs.com remirepo.net ruby-lang.org rubygems.org rust-lang.org  rustup.rs  crates.io docs.rs redhat.com -redhat.orgscala-lang.org scala-sbt.org askubuntu.comblogoverflow.comcodeforaliving.iomathoverflow.netserverfault.com sstatic.net stackapps.com stackauth.comstackexchange.com stackmod.blogstackoverflow.blogstackoverflow.costackoverflow.comstackoverflow.emailstackoverflowbusiness.comstackoverflowcareers.comstacksnippets.net superuser.com tex-talk.netthesffblog.commystrikingly.comstrikingly.comstrikinglycdn.com openmidas.com  qq.designqqgamedesign.comtencent.design tjstats.comwegamedeveloper.comweui.io +redhat.orgscala-lang.org scala-sbt.org sourcehut.org sr.ht askubuntu.comblogoverflow.comcodeforaliving.iomathoverflow.netserverfault.com sstatic.net stackapps.com stackauth.comstackexchange.com stackmod.blogstackoverflow.blogstackoverflow.costackoverflow.comstackoverflow.emailstackoverflowbusiness.comstackoverflowcareers.comstacksnippets.net superuser.com tex-talk.netthesffblog.commystrikingly.comstrikingly.comstrikinglycdn.com openmidas.com  qq.designqqgamedesign.comtencent.design tjstats.comwegamedeveloper.comweixinbridge.comweui.io cn termux.com termux.dev @@ -10535,10 +11317,14 @@ termux.org kernel.org  linux.org amp.devampproject.comampproject.netampproject.orgcdn.ampproject.org cnamp.akamaized.netelectronjs.org jquery.comjquerymobile.com jqueryui.com mochajs.org -nodejs.org openjsf.orglfai.foundationlinuxfoundation.org topcoder.com  unity.com unity3d.com!unityads.unity3d.com +nodejs.org openjsf.orglfai.foundationlinuxfoundation.org topcoder.com  unity.com unity3d.comads.unitychina.cn +ads$splash-ads.cdn.unity.cn +ads%splash-ads.unitychina.cn +adsunityads.unity.cn +ads!unityads.unity3d.com ads#unityads.unitychina.cn ads -v8.dev v8project.org vim.orgxda-developers.com xda-cdn.comadventofcode.comalpinelinux.org +v8.dev v8project.org vim.org xda-cdn.comxda-developers.com xdaforums.comadventofcode.comalpinelinux.org apache.orgartixlinux.org atom.io badgen.net bitvise.com  cdnjs.com centos.orgchocolatey.org clojure.org @@ -10554,10 +11340,9 @@ gentoo.orggetcomposer.org getzola.org git-scm.com gnu.org hexdocs.pm ius.io jenkins.io -js.org jupyter.org kali.orglinuxfromscratch.org linuxmint.com lua.org macports.org mariadb.org  mingw.org mobatek.net  mysql.com  nixos.orgnodesource.comnotepad-plus-plus.org -openai.com openresty.org openssl.org opensuse.org packagist.org pcre.org phantomjs.org php.net  putty.orgpostgresql.org r-project.orgraspberrypi.org raspbian.org regex101.com rpmfusion.orgscientificlinux.org scoop.shshellcheck.net +js.org jupyter.org kali.orglinuxfromscratch.org linuxmint.com lua.org macports.org mariadb.org  mingw.org mobatek.net  mysql.com  nixos.orgnodesource.comnotepad-plus-plus.org openresty.org openssl.org opensuse.org packagist.org pcre.org phantomjs.org php.net  putty.orgpostgresql.org r-project.orgraspberrypi.org raspbian.org regex101.com rpmfusion.orgscientificlinux.org scoop.shshellcheck.net shields.io -sqlite.orgsublimetext.com termius.com  unpkg.com videojs.com videolan.org wapm.io  wasmer.io wireshark.org x.org xposed.info yarnpkg.com zsh.orgacer-group.com acer.com acer.com.cn +sqlite.orgsublimetext.com termius.com  unpkg.com videojs.com videolan.org wapm.io  wasmer.io wireshark.org x.org xposed.info yarnpkg.com zsh.orghuggingface.coacer-group.com acer.com acer.com.cn cn3dns-1.adobe.com3dns-2.adobe.com3dns-3.adobe.com3dns-4.adobe.com3dns-5.adobe.com3dns.adobe.comactivate-sea.adobe.comactivate-sjc0.adobe.comactivate.adobe.comactivate.wip1.adobe.comactivate.wip2.adobe.comactivate.wip3.adobe.comactivate.wip4.adobe.comadobe-dns-1.adobe.comadobe-dns-2.adobe.comadobe-dns-3.adobe.comadobe-dns-4.adobe.comadobe-dns.adobe.com adobeereg.comcrl.versign.netereg.adobe.comereg.wip.adobe.comereg.wip1.adobe.comereg.wip2.adobe.comereg.wip3.adobe.comereg.wip4.adobe.comhl2rcv.adobe.comhlrcv.stage.adobe.comlm.licenses.adobe.comlmlicenses.wip4.adobe.comna1r.services.adobe.comood.opsource.netpractivate.adobepractivate.adobe.compractivate.adobe.ipppractivate.adobe.newoapractivate.adobe.ntp wip.adobe.comwip1.adobe.comwip2.adobe.comwip3.adobe.comwip4.adobe.comwwis-dubc1-vip100.adobe.comwwis-dubc1-vip101.adobe.comwwis-dubc1-vip102.adobe.comwwis-dubc1-vip103.adobe.comwwis-dubc1-vip104.adobe.comwwis-dubc1-vip105.adobe.comwwis-dubc1-vip106.adobe.comwwis-dubc1-vip107.adobe.comwwis-dubc1-vip108.adobe.comwwis-dubc1-vip109.adobe.comwwis-dubc1-vip110.adobe.comwwis-dubc1-vip111.adobe.comwwis-dubc1-vip112.adobe.comwwis-dubc1-vip113.adobe.comwwis-dubc1-vip114.adobe.comwwis-dubc1-vip115.adobe.comwwis-dubc1-vip116.adobe.comwwis-dubc1-vip117.adobe.comwwis-dubc1-vip118.adobe.comwwis-dubc1-vip119.adobe.comwwis-dubc1-vip120.adobe.comwwis-dubc1-vip121.adobe.comwwis-dubc1-vip122.adobe.comwwis-dubc1-vip123.adobe.comwwis-dubc1-vip124.adobe.comwwis-dubc1-vip125.adobe.comwwis-dubc1-vip30.adobe.comwwis-dubc1-vip31.adobe.comwwis-dubc1-vip32.adobe.comwwis-dubc1-vip33.adobe.comwwis-dubc1-vip34.adobe.comwwis-dubc1-vip35.adobe.comwwis-dubc1-vip36.adobe.comwwis-dubc1-vip37.adobe.comwwis-dubc1-vip38.adobe.comwwis-dubc1-vip39.adobe.comwwis-dubc1-vip40.adobe.comwwis-dubc1-vip41.adobe.comwwis-dubc1-vip42.adobe.comwwis-dubc1-vip43.adobe.comwwis-dubc1-vip44.adobe.comwwis-dubc1-vip45.adobe.comwwis-dubc1-vip46.adobe.comwwis-dubc1-vip47.adobe.comwwis-dubc1-vip48.adobe.comwwis-dubc1-vip49.adobe.comwwis-dubc1-vip50.adobe.comwwis-dubc1-vip51.adobe.comwwis-dubc1-vip52.adobe.comwwis-dubc1-vip53.adobe.comwwis-dubc1-vip54.adobe.comwwis-dubc1-vip55.adobe.comwwis-dubc1-vip56.adobe.comwwis-dubc1-vip57.adobe.comwwis-dubc1-vip58.adobe.comwwis-dubc1-vip59.adobe.comwwis-dubc1-vip60.adobe.comwwis-dubc1-vip61.adobe.comwwis-dubc1-vip62.adobe.comwwis-dubc1-vip63.adobe.comwwis-dubc1-vip64.adobe.comwwis-dubc1-vip65.adobe.comwwis-dubc1-vip66.adobe.comwwis-dubc1-vip67.adobe.comwwis-dubc1-vip68.adobe.comwwis-dubc1-vip69.adobe.comwwis-dubc1-vip70.adobe.comwwis-dubc1-vip71.adobe.comwwis-dubc1-vip72.adobe.comwwis-dubc1-vip73.adobe.comwwis-dubc1-vip74.adobe.comwwis-dubc1-vip75.adobe.comwwis-dubc1-vip76.adobe.comwwis-dubc1-vip77.adobe.comwwis-dubc1-vip78.adobe.comwwis-dubc1-vip79.adobe.comwwis-dubc1-vip80.adobe.comwwis-dubc1-vip81.adobe.comwwis-dubc1-vip82.adobe.comwwis-dubc1-vip83.adobe.comwwis-dubc1-vip84.adobe.comwwis-dubc1-vip85.adobe.comwwis-dubc1-vip86.adobe.comwwis-dubc1-vip87.adobe.comwwis-dubc1-vip88.adobe.comwwis-dubc1-vip89.adobe.comwwis-dubc1-vip90.adobe.comwwis-dubc1-vip91.adobe.comwwis-dubc1-vip92.adobe.comwwis-dubc1-vip93.adobe.comwwis-dubc1-vip94.adobe.comwwis-dubc1-vip95.adobe.comwwis-dubc1-vip96.adobe.comwwis-dubc1-vip97.adobe.comwwis-dubc1-vip98.adobe.comwwis-dubc1-vip99.adobe.com"advertising.adobe.com ads tubemogul.com ads typekit.com typekit.net10xfotolia.com 2o7.net acrobat.com adbecrsl.comadobe-aemassets-value.comadobe-audience-finder.com"adobe-video-partner-finder.com  adobe.com adobe.lyadobeaemcloud.comadobeaemcloud.netadobeawards.comadobecontent.ioadobecreativityawards.com @@ -10596,7 +11381,7 @@ nwcddns.cn cn route53.cn cnsagemaker.com.cn -cn".+\.awsdns-cn-[0-9][0-9]\.biz$$ .+\.awsdns-cn-[0-9][a-e0-9]\.cn$".+\.awsdns-cn-[0-9][0-9]\.com$".+\.awsdns-cn-[0-9][0-9]\.net$".+\.awsdns-cn-[0-9][0-9]\.top$awsacmvalidations.comacmvalidationsaws.comaesworkshops.comamazonaws-china.comamazonaws.co.uk amazonaws.com amazonaws.tv amazonses.comamazonworkdocs.comamplifyapp.comamplifyframework.comaws-iot-hackathon.comawsautopilot.comawsautoscaling.com awsbraket.comawscommandlineinterface.comawsedstart.comawseducate.comawseducate.netawseducate.orgawsglobalaccelerator.comawsloft-johannesburg.comawsloft-stockholm.comawssecworkshops.com awsstatic.comawsthinkbox.com awstrack.mecdkworkshop.comcloudfront.comcloudfront.netcontainersonaws.comelasticbeanstalk.comthinkboxsoftware.com".+\.awsdns-[0-9][0-9]\.co\.uk$.+\.awsdns-[0-9][0-9]\.com$.+\.awsdns-[0-9][0-9]\.net$.+\.awsdns-[0-9][0-9]\.org$ +cn0,.+\.awsdns-cn-[0-9][0-9]\.(biz|com|net|top)$$ .+\.awsdns-cn-[0-9][a-e0-9]\.cn$awsacmvalidations.comacmvalidationsaws.comaesworkshops.comamazonaws-china.comamazonaws.co.uk amazonaws.com amazonaws.tv amazonses.comamazonworkdocs.comamplifyapp.comamplifyframework.comaws-iot-hackathon.comawsautopilot.comawsautoscaling.com awsbraket.comawscommandlineinterface.comawsedstart.comawseducate.comawseducate.netawseducate.orgawsglobalaccelerator.comawsloft-johannesburg.comawsloft-stockholm.comawssecworkshops.com awsstatic.comawsthinkbox.com awstrack.mecdkworkshop.comcloudfront.comcloudfront.netcontainersonaws.comelasticbeanstalk.comthinkboxsoftware.com0,.+\.awsdns-[0-9][0-9]\.(co\.uk|com|net|org)$ kindle kindle.cn cn kindle.co.jp kindle.co.uk kindle.com  kindle.de  kindle.es  kindle.fr  kindle.in  kindle.it  kindle.jpkindleoasis.cn @@ -10634,7 +11419,8 @@ yamaxun.cn cn amd.com amd.com.cnamdfanstore.com radeon.com www.amd.com -cniadsdk.apple.com +cn%api-adservices.apple.com +adsiadsdk.apple.com ads iad.apple.com ads qwapi.com adsappldnld.apple.com gg.apple.comgnf-mdn.apple.comgnf-mr.apple.com gs.apple.com ig.apple.commesu.apple.comns.itunes.apple.comoscdn.apple.comosrecovery.apple.com skl.apple.comswcdn.apple.comswdist.apple.comswdownload.apple.comswpost.apple.comswscan.apple.comupdates-http.cdn-apple.comupdates.cdn-apple.com xp.apple.com100beatscheap.com1monsterbeatsbydreus.com2013beatsbydrdreonline.com2013beatsbydrdreshop.com2013beatsbydreshop.com2013beatshdcybermonday.com2013cheapestbeats.com2013newbeatsworld.com2013pascherbeatsbydre.com2014cheapbeatsbydre.com 2beatsdre.com2buybeatsbydre.com2drdrebeats.com40shopping.com4beatsbydre.com5beatsbydre.comaaagradeheadphones.com @@ -10770,7 +11556,10 @@ newton.com next.com overapple.com powerbook.eupullstring.ne touchid.tv touchid.wangtracking-location.comtruedepth3d.com tryrating.comwebobjects.co.uk webobjects.de webobjects.euwebobjects.net wuxiapple.com wwapple.netwww-sms-apple.com wwwapple.com wwwapple.net wwwlapple.com xn--czrs0t4phtr3a.cn cnxn--fiqs8sxootzz.cn cn xn--fiqs8sxootzz.xn--hxt814e!xn--gtvq61aiijy0b.xn--hxt814exn--gtvz22d.wangxn--gtvz22d.xn--hxt814exn--hxtr4rozx.xn--czr694b xn--kput3imi374g.xn--hxt814e#xn--ohq11k7pl25iyo8a.cn -cn xn--ruq8a011kt6y.xn--hxt814eapple.com.akadns.net%!courier-push-apple.com.akadns.netpush-apple.com.akadns.net."amp-api-search-edge.apps.apple.com +cn xn--ruq8a011kt6y.xn--hxt814eapple.com.akadns.net%!courier-push-apple.com.akadns.netpush-apple.com.akadns.net:.amp-api-edge-lb-cn.itunes-apple.com.akadns.net +cn7+amp-api-edge-lb.itunes-apple.com.akadns.net +cn'amp-api-edge.apps.apple.com +cn."amp-api-search-edge.apps.apple.com cn"amp-api.apps.apple.com cn aod.itunes.apple.com cn#api-edge.apps.apple.com @@ -10786,7 +11575,12 @@ touchid.tv touchid.wangtracking-location.comtruedepth3d.com cn(gspe11-2-cn-ssl.ls.apple.com cn&gspe12-cn-ssl.ls.apple.com cn&gspe85-cn-ssl.ls.apple.com +cn5)inappcheck-cn.itunes-apple.com.akadns.net +cn5)inappcheck-lb.itunes-apple.com.akadns.net +cn'inappcheck.itunes.apple.com cn!init.itunes.apple.com +cn+init.gc-lb.apple.com.akadns.net +cninit.gc.apple.com cn$iosapps.itunes.apple.com cn"js-cdn.music.apple.com cn km.support.apple.com @@ -10816,6 +11610,10 @@ touchid.tv touchid.wangtracking-location.comtruedepth3d.com cna5.mzstatic.com cn, adcdownload.apple.com.akadns.net cn!adcdownload.apple.com +cn#amp-api.media.apple.com +cn&api-p-ap-c.smoot.apple.com +cn&api-p-ap-d.smoot.apple.com +cn&api-p-ap-e.smoot.apple.com cn."app-site-association.cdn-apple.com cnappldnld.apple.com cn"appldnld.g.aaplimg.com @@ -10847,44 +11645,54 @@ touchid.tv touchid.wangtracking-location.comtruedepth3d.com cn cl5.apple.com cn+clientflow.apple.com.akadns.net cn clientflow.apple.com +cn, cn-smp-paymentservices.apple.com cn."configuration.apple.com.akadns.net cn#configuration.apple.com cncstat.apple.com cncstat.cdn-apple.com cn."dd-cdn.origin-apple.com.akadns.net +cndejavu.apple.com cn(download.developer.apple.com +cn!experiments.apple.com cngs-loc-cn.apple.com cngs-loc.apple.com cn%gsp10-ssl-cn.ls.apple.com +cn!gsp12-cn.ls.apple.com cn!gsp13-cn.ls.apple.com cnC7gsp4-cn.ls.apple.com.edgekey.net.globalredir.akadns.net cn, gsp4-cn.ls.apple.com.edgekey.net cn gsp4-cn.ls.apple.com cn gsp5-cn.ls.apple.com cn%gsp85-cn-ssl.ls.apple.com +cn(gspe19-2-cn-ssl.ls.apple.com cn&gspe19-cn-ssl.ls.apple.com cn-!gspe19-cn.ls-apple.com.akadns.net cn"gspe19-cn.ls.apple.com cn#gspe21-ssl.ls.apple.com cngspe21.ls.apple.com cn#gspe35-ssl.ls.apple.com +cn&gspe79-cn-ssl.ls.apple.com cn+guzzoni-apple-com.v.aaplimg.com cnguzzoni.apple.com +cn#guzzoni.smoot.apple.com cniadsdk.apple.com cn, icloud-cdn.icloud.com.akadns.net cn icloud.cdn-apple.com cn'images.apple.com.akadns.net cn?3images.apple.com.edgekey.net.globalredir.akadns.net cnimages.apple.com +cninit-kt.apple.com cn3'init-p01md-lb.push-apple.com.akadns.net cn init-p01md.apple.com cn3'init-p01st-lb.push-apple.com.akadns.net cn%init-p01st.push.apple.com cn3'init-s01st-lb.push-apple.com.akadns.net cn%init-s01st.push.apple.com +cninit.ess.apple.com cn(iosapps.itunes.g.aaplimg.com cnipcdn.apple.com cniphone-ld.apple.com +cn1%iphone-ld.origin-apple.com.akadns.net cn is1-ssl.mzstatic.com cnis1.mzstatic.com cn is2-ssl.mzstatic.com @@ -10901,19 +11709,30 @@ touchid.tv touchid.wangtracking-location.comtruedepth3d.com cn)mesu-cdn.apple.com.akadns.net cn+mesu-china.apple.com.akadns.net cnmesu.apple.com +cnml.cdn-apple.com cnmusic.apple.com cn(ocsp-lb.apple.com.akadns.net cnocsp.apple.com cnocsp2.apple.com cnoscdn.apple.com cn-!oscdn.origin-apple.com.akadns.net +cn(osxapps.itunes.g.aaplimg.com cnpancake.apple.com cn, pancake.cdn-apple.com.akadns.net +cnpba0.apple.com +cn probe.siri.apple.com cn1%prod-support.apple-support.akadns.net cn&publicassets.cdn-apple.com cn#reserve-prime.apple.com cns.mzstatic.com +cn'seed-sequoia.siri.apple.com +cn'seed-swallow.siri.apple.com +cnseed.siri.apple.com +cnsequoia.apple.com +cn(sh-pod2-smp-device.apple.com +cn)shazam-insights.cdn-apple.com cn(smp-device-content.apple.com +cnstatic.gc.apple.com cn4(stocks-sparkline-lb.apple.com.akadns.net cn&stocks-sparkline.apple.com cn>2store.apple.com.edgekey.net.globalredir.akadns.net @@ -10923,6 +11742,7 @@ touchid.tv touchid.wangtracking-location.comtruedepth3d.com cn+store.storeimages.cdn-apple.com cn2&support-china.apple-support.akadns.net cnsupport.apple.com +cn+swallow-apple-com.v.aaplimg.com cnswallow.apple.com cn."swcatalog-cdn.apple.com.akadns.net cnswcatalog.apple.com @@ -10932,12 +11752,18 @@ touchid.tv touchid.wangtracking-location.comtruedepth3d.com cnswdist.apple.com cn+swscan-cdn.apple.com.akadns.net cnswscan.apple.com +cnsylvan.apple.com +cn(tj-pod1-smp-device.apple.com cn1%updates-http.cdn-apple.com.akadns.net cn&updates-http.cdn-apple.com cn!updates.cdn-apple.com cnvalid.apple.com cn-!valid.origin-apple.com.akadns.net +cn-!weather-data.apple.com.akadns.net cn"weather-data.apple.com +cn!weather-map.apple.com +cn"weather-map2.apple.com +cn weatherkit.apple.com cn<0www.apple.com.edgekey.net.globalredir.akadns.net cn%www.apple.com.edgekey.net cn www.apple.com @@ -10957,7 +11783,21 @@ uverse.comwebhosting.com att-idns.net attdns.com attdns.netna-att-idns.netaudiencenetwork.comaudiencenetwork.tvcabletvdirectv.com dierectv.com dirctv.com direcpath.com direcpath.netdirecttv-deals.tvdirecttv-dish.com dkrecttv.com directtv.netdirecttvdeals.tvdirecttvreviews.comdirectv-4-you.comdirectv-newyork.com directv.comdirectvadsales.comdirectvatlantaga.comdirectvboston.comdirectvbundles.comdirectvbusiness.comdirectvcincinnatioh.comdirectvcinema.comdirectvconnect.comdirectvcookevilletn.comdirectvcrossvilletn.comdirectvdealer.comdirectvdeals.comdirectvdealsnow.com directvdsl.tvdirectvforhotels.comdirectvgrandslam.comdirectvhouston.comdirectvinternet.comdirectvkentucky.comdirectvlebanontn.comdirectvlosangeles.comdirectvmetropolisil.comdirectvmonitoring.comdirectvmurfreesborotn.comdirectvnewhampshire.comdirectvnow.comdirectvoffercodes.comdirectvonline.comdirectvplans.comdirectvpomise.comdirectvpromise.comdirectvpromotions.comdirectvrebate.comdirectvrichmond.comdirectvsavings.comdirectvsports.comdirectvsundayticket.com direectv.com -diretv.comdtv2009offers.comfreedirecttvspecial.com getdirect.tv hddirectv.com le-direct.tvmydirectgroove.commydirectvchannels.comredzonechannel.com txdirectv.com  xandr.com autodesk.combandwagonhost.com bwh1.net bwh8.net  bwh81.net  bwh88.net  bwh89.net blurams.com canon c-ij.com canon-cee.comcanon-cmos-sensors.com canon-cna.comcanon-ebm.com.hkcanon-emea.comcanon-emirates.aecanon-europa.comcanon-europe.com canon-me.com canon-ois.qacanon-se.com.tw canon.am canon.at canon.az canon.ba canon.be canon.bg canon.ca canon.chcanon.cn +diretv.comdtv2009offers.comfreedirecttvspecial.com getdirect.tv hddirectv.com le-direct.tvmydirectgroove.commydirectvchannels.comredzonechannel.com txdirectv.com  xandr.com 123dapp.com123dappipad.com123dartisan.com 123dcatch.com123dcircuits.com123dcreature.com123dcreaturenews.com123ddesign.com123ddoodler.com 123dmake.com 123dnews.com 123dpro.com 123dpro.net123dsculpt.com20yearsoffea.com360autodesk.com 360nexus.com 360nexus.net +360plm.com360trailers.com3d-december.com3ddecember.com 3december.com3decemberonline.com 3drules.com 3dstudio.com  3dtin.com  3dtin.net 5-d.com 51tuqiang.com5axis-machining.com +acdocs.com +adinst.com adskcloud.com adskcloud.net adskeng.netadskengineering.net adskengpp.net adskengpr.net  adtcc.comaecexcellence.comaerospace-cadcam.comaerospace-design.comairgunstudio.com  alias.comaliasadvantage.comaliasimaginationsengine.com aliasple.comaliasshowcase.comaliassketchbook.comaliassketchbookpro.comaliassystems.com aliasvisualizationstudio.comaliaswavefront.comarchitectural-cadcam.comarnoldrenderer.com +artcam.comartcamexpress.comartcaminsignia.comartcamjewelsmith.com artcampro.comassemblesystems.comautocad-schulungen.com autocad.comautocad360.com autocad3d.comautocadarchitecturecc.comautocadexpert.comautocadformac.comautocadfreestyle.com autocadlt.comautocadltbg.comautocadmac.comautocadmobile.comautocadsucks.comautocadsucks.net autocadws.com autocadws.netautodesk-aia-me.comautodesk-events.comautodesk-kickoff.comautodesk-mm.comautodesk-news.comautodesk-online.comautodesk-service.comautodesk-services.comautodesk-support.comautodesk-university.comautodesk-usability.com autodesk.com autodesk.dev autodesk.netautodesk123d.comautodesk123dnews.comautodesk360.comautodesk360access.comautodesk360beta.comautodesk360bim.comautodesk360express.comautodesk360forbim.comautodesk360forplm.comautodesk360nexus.comautodesk360nexus.netautodesk360plm.comautodesk360pro.com!autodesk360solutionforbim.com!autodesk360solutionforplm.comautodesk360vault.comautodeskaecfeed.comautodeskandcitrix.comautodeskarcade.comautodeskautocadlt.comautodeskautomotive.comautodeskbim360.comautodeskbookrequest.comautodeskbuild.comautodeskbuildingops.comautodeskbuildspc.comautodeskcave.comautodeskchronicle.comautodeskcommunications.comautodeskcompetitions.com!autodeskdesigncompetition.com"autodeskdesigncompetitions.comautodeskdiscussions.comautodeskdocandmedia.com#autodeskdocandmediaamericas.comautodeskdocandmediaasia.comautodeskdocandmediaemea.com!autodeskdocandmediaeurope.comautodeskegitimleri.comautodeskenterprise.comautodeskevents.comautodeskfashionstyler.comautodeskforgames.comautodeskforge.comautodeskformit.comautodeskfoundation.comautodeskfusionlifecycle.comautodeskgovernment.net#autodeskgreenbuildingstudio.comautodeskhelp.comautodeskicpcouncil.comautodeskimpression.comautodeskinform.comautodeskinstant.comautodeskjournal.comautodesklearning.comautodesklistens.comautodesklivedesign.comautodesklms.com$ autodeskmanufacturingacademy.com%!autodeskmayaformotiongraphics.comautodeskmedbookrequest.comautodeskmedia.comautodeskmediarequest.comautodeskmeetings.comautodeskmfg.com%!autodeskmotiongraphicsandmore.comautodesknews.comautodeskonline.comautodeskpartner.comautodeskplm.comautodeskplm360.comautodeskplm360.netautodeskproductreviews.comautodeskprofiles.comautodeskprograms.comautodeskresearch.comautodeskrevit.comautodeskrevit.netautodeskrevitsucks.comautodeskrevitsucks.netautodeskseek.comautodesksketchbook.com"autodesksketchbookdesigner.comautodeskstylebook.comautodesksubscription.comautodesksucks.comautodesksucks.netautodesktechdays.comautodesktechx.comautodesktinkerbox.comautodesktravel.comautodeskturkiye.comautodeskuniversity.comautodeskuniversity2013.comautodeskvasari.comautodeskvasari.netautodeskvietnam.comautodeskviewer.comautodeskworkshop.comautodeskworkshop.netautomotive-cadcam.comautosketch.com auxdubai.com avatara.combehindthescreenz.com best4bim.com bestbim.com betterbim.combetterwithautodesk.com bim-360.com +bim360.com +bim360.netbim360field.combim360glue.com bim360ops.combim3dcontent.com bimadsk.com bimglue.combimlibrary.com bimseeker.com bimsource.com bimworld.com bridgebim.com brni.combuilding3dcontent.com cad-mep.comcadcamsystemsinc.com cadduct.com +cadmep.comcadoverlay.com +cadren.com  caice.com cam-duct.com camduct.comceramics-cadcam.com +cfd-tv.com cfdesign.comchina-autodesk.comcitrixandautodesk.com civil3d.com civilcc.comcivilsoftware.netclimate-server.comcompass-system.comcompass-systems.comconstructware.comcontechacademy.comcrankplayer.comcreatewhatsnext.comcreativepass.comcreatwhatsnext.comdarwindimensions.comdelcam-ams.comdelcam-electrode.com delcam-na.comdelcam-robotics.comdelcam-services.com +delcam.comdelcamconsulting.comdelcamforsolidworks.com delcamna.com delcamtv.comdelcamuniversity.com delcamusa.comdesign-ledrev.comdesign-ledrevolution.comdesignledrevolution.comdesignsformovement.com designxml.com designxml.netdestinationbim.comdigitalprototyping.com discreet.com dodv.com drainage.com drnastran.com dwg.comdwgtrueconvert.comdwgtrueview.comdynamobuilds.comdynamopackages.comdynamoreach.com ecotect.com ecotect.net +ecscad.comecspublisher.comeducation-cadcam.com ember3dp.comemberprinter.comemergingsolutions.comenergystarbuildings.comeraofconnection.com esopworld.com#eueuropeansustainabledesign.neteurocodesoftware.com!europeansustainabledesign.com!europeansustainabledesign.net($europeansustainabledesigncouncil.com($europeansustainabledesigncouncil.netevalviewer.com evolver.com evolver3d.comevolverpro.comextensions4revit.comfakeorfoto.comfakeorphoto.comfeanonlinear.comfeaturecam.com +five-d.comflameunleashed.com flowfront.com flowfront.netfluidfxapp.com fmdesktop.comfollowpype.comfootwear-cadcam.com formit360.comformitfactory.com freefbx.comfusionlifecycle.comfusionproductionapps.com$ futureofbritishmanufacturing.comfutureofmaktingthings.com  gbxml.netgeneticconstructor.comgeospatialimaging.comgeospatialinfo.comgetbuzzsaw.comgivemebuzzsaw.com gobuildx.netgovernmentengineer.comgreenbuildingstudio.com hmsxpress.comhomestylerapp.comhomestylernews.comhorizontal-llc.comhorizontal-systems.comhorizontalglue.comhorizontalsystems.com hsm-works.comhsm-xpress.comhsmexpress.com hsmworks.com hsmxpress.comidea-server.comimagemodeler.comimaginationsengine.comimpactdesignhub.cominfraworks.cominstallbuzzsaw.comintelisolve.cominventor-certified.cominventorfusion.cominventorseries.comistorytell.comizmirautodeskegitimleri.com jasa3dmax.comjasaautocad.com kaydara.comkeepyourcad.com kynogon.comlasersawapp.comlicenseparser.comlivesketchshare.comlrfdsoftware.comlunchwithpype.commachine-dna.commadewithmaya.commadewithstudiotools.com magestic.commakeanything.commakeitrealcontest.commakingstartshere.commap-software.com mapguide.commappingonline.commarinecadcam.commarkingmenus.commatchmover.commaxillofacial-cadcam.commayacomplete.commayaconductors.commayafluideffects.commayaformotiongraphics.com mayagames.commayamasters.commayamentor.netmayamentors.commayamentors.netmayaonlinux.com mayaonmac.com mayaonosx.commayapressbooks.com mayasucks.commayaunlimited.com mayauser.com mayauser.netmayavisualization.commedicalimplants-cadcam.com meshmixer.commeshmixerforum.commimistudio.commimistyler.com mmmanual.com moldflow.commoldflowexpress.commoleculardesigntoolkit.com molecularsimulationtools.commolecularviewer.com molviewer.commorewithautodesk.commotiongraphicsandmore.com mudbox3d.commy1stflame.com myautocad.commyautodeskbenefits.commyfirstflame.commymapportal.comnastranincad.com nastrannx.comnastrantraining.comnastranworldwide.comnavisworks.comnavisworks.net +neicad.comneiexplicit.com +neifea.com neimotion.comneinastranincad.comneisoftware.comneisolutions.com neiworks.com nenastran.comnetzerobuildings.comnetzerobuildingstudio.com new2fea.com newtofea.comnextgenerationcam.comnonlinearnastran.com objectarx.comoneteamconference.comopenreality.com opticore.comorthopaedic-cadcam.comorthotics-cadcam.compackaging-cadcam.compackagingcadcam.com partmaker.com  pi-vr.compixlr-o-matic.compixlromatic.complansondemand.complasticlabs.complastics-cadcam.com plug-into.comportfoliowall.compoweranimator.compowerinspect.com powermill.compowermillna.compowershape-e.compowershape.comprofilemaster.comprojectpoint.comprojectpoint.netprojectshoreline.comprojectvasari.comps-exchange.comrapidprototyping-cadcam.comreality-computing.comrealpeople-realprojects.comrealpeoplerealprojects.com realviz.com retimer.com  revit.com revitcc.comrevitsucks.net robobat.comrobotoffice.comsavoycomputing.com scaleform.com  scpic.net sculpoly.comshotgridsoftware.comshotgridstudio.comshotguncloud.com shotgunfx.comshotgunlocalhost.comshotgunsoftware.comshotgunsoftware.netshotgunstudio-test.comshotgunstudio.comshotgunvfx.com simsquad.comsimulationsquad.comsketchbookdesigner.comsketchbookmobile.comsketchbooknews.comsketchbookpro.com skymatter.com smartfea.comsmartnastran.com socailcam.com socialcam.comsocialcammail.com socialkam.com squ1.comsquidplatform.com ssttest.netstingrayengine.comstudiopaint.comstudiosucks.comsubmittal-log.com!sustainablebuildingstudio.com sustainabledesigncouncil.com sustainabledesigncouncil.net suxiebu.comswiss-machining.comswiss-turn.com t-splines.com the-area.com the123d.comthedesignworkshop.com thedesk.comtheinventionworks.comtheinventionworks.net timefxapp.comtinkerboxapp.com tinkercad.comtinkerentertainment.comtinkerplay.nettire-cadcam.comtoolmaking-cadcam.com topobase.comtoy-cadcam.com toycadcam.com truebim.com truedwg.com trunest.comtrusted-dwg.comtrusteddwg.com tryalias.com trydesign.com tspline.com tsplines.comtweakadmin.comtweakfilms.comtweaksoftware.comtyre-cadcam.comtyrecadcam.comupfrontcfd.comupfrontfea.comvelaserver.comvelastaging.com velasync.comvelasystems.com velatest.com viriondb.comvortexmachining.comvred-essentials.comvredessentials.comvredprofessional.com vrnastran.comxn--74q434dwff.comxn--74q434dwff.netbandwagonhost.com bwh1.net bwh8.net  bwh81.net  bwh88.net  bwh89.net blurams.com canon c-ij.com canon-cee.comcanon-cmos-sensors.com canon-cna.comcanon-ebm.com.hkcanon-emea.comcanon-emirates.aecanon-europa.comcanon-europe.com canon-me.com canon-ois.qacanon-se.com.tw canon.am canon.at canon.az canon.ba canon.be canon.bg canon.ca canon.chcanon.cn cn canon.co.il canon.co.uk canon.co.za  canon.com canon.com.al canon.com.au canon.com.by canon.com.cn cn canon.com.cy canon.com.hk canon.com.mk canon.com.mt canon.com.my canon.com.tr canon.com.tw canon.cz canon.de canon.dk canon.ee canon.es canon.fi canon.fr canon.ge canon.gr canon.hr canon.hu canon.ie canon.it canon.kz canon.lt canon.lu canon.lv canon.me  canon.net canon.nl canon.no canon.pl canon.pt canon.ro canon.rs canon.ru canon.se canon.si canon.sk canon.tj canon.ua canon.uzcanonfoundation.orgcanonproprinters.com  chegg.com cheggcdn.com webex.ca webex.co.in webex.co.it webex.co.jp webex.co.kr webex.co.nz webex.co.uk  webex.com webex.com.au webex.com.br webex.com.cn cn webex.com.hk webex.com.mx webex.de webex.es webex.fr ciscoacademynetriders.comcciernslabs.comcciesecuritylabs.comccievoicelabs.com  ccna5.netcisco-returns.comcisco-warrantyfinder.comcisco.cn @@ -10985,10 +11825,15 @@ badaas.com bitnami.combitnamiapp.combitnamistudio.comdock nyansa.com velocloud.com gopivotal.com heptio.cn cn heptio.com aliveipc.com aliveitsm.comaliveprofiler.com alivercm.comaliverewind.com alivertsm.com alivevm.com alivevmax.com alivevue.com vsphere.com vsphere.net air-watch.comairwatchexpress.comairwatchqa.com -getws1.com getwsone.comwhatisairwatch.comwhatisworkspaceone.comworkspaceone.comvmware.tt.omtrdc.netdelldell-brand.com dell.com dellcdn.com duolingo.com duolingo.cn -cnclickedu.co.ukdeepfreeze.co.ukdeepfreeze.comdeepfreeze.com.br deepfreeze.eudeepfreeze.netdeepfreeze.tech faronics.cafaronics.co.uk faronics.comfaronics.com.aufaronics.com.sg faronics.eu faronics.techfaronicslabs.comfaronicswise.co.ukfaronicswise.comfaronics.kayako.com  aorus.com aoruszone.cn +getws1.com getwsone.comwhatisairwatch.comwhatisworkspaceone.comworkspaceone.comvmware.tt.omtrdc.netdelldell-brand.com dell.com dellcdn.com drweb.by drweb.cn drweb.co.jp  drweb.com drweb.fr drweb.kz drweb.uz drweb-av.de drweb-av.es drweb-av.it drweb-av.pl!ads-api.duolingo.com +ads!metrics.duolingo.com +ads'analytics.vpc.duolingo.com +ads duolingo.com duolingo.cn +cnclickedu.co.ukdeepfreeze.co.ukdeepfreeze.comdeepfreeze.com.br deepfreeze.eudeepfreeze.netdeepfreeze.tech faronics.cafaronics.co.uk faronics.comfaronics.com.aufaronics.com.sg faronics.eu faronics.techfaronicslabs.comfaronicswise.co.ukfaronicswise.comfaronics.kayako.com giffgaff.comgiffgaff.design  aorus.com aoruszone.cn cn gigabyte.cn -cn gigabyte.comgigabyte2.azureedge.netsa78gs.wpc.edgecastcdn.net"sni1dcb6gl.wpc.edgecastcdn.net blogger.com blogblog.com blogspot.ae blogspot.al blogspot.am blogspot.ba blogspot.be blogspot.bg blogspot.bj blogspot.ca blogspot.cf blogspot.ch blogspot.clblogspot.co.atblogspot.co.idblogspot.co.ilblogspot.co.keblogspot.co.nzblogspot.co.ukblogspot.co.za blogspot.comblogspot.com.arblogspot.com.aublogspot.com.brblogspot.com.byblogspot.com.coblogspot.com.cyblogspot.com.eeblogspot.com.egblogspot.com.esblogspot.com.mtblogspot.com.ngblogspot.com.trblogspot.com.uy blogspot.cv blogspot.cz blogspot.de blogspot.dk blogspot.fi blogspot.fr blogspot.gr blogspot.hk blogspot.hr blogspot.hu blogspot.ie blogspot.in blogspot.is blogspot.it blogspot.jp blogspot.kr blogspot.li blogspot.lt blogspot.lu blogspot.md blogspot.mk blogspot.mx blogspot.my blogspot.nl blogspot.no blogspot.pe blogspot.pt blogspot.qa blogspot.re blogspot.ro blogspot.rs blogspot.ru blogspot.se blogspot.sg blogspot.si blogspot.sk blogspot.sn blogspot.td blogspot.tw blogspot.ug blogspot.vn2mdn.net +cn gigabyte.comgigabyte2.azureedge.netsa78gs.wpc.edgecastcdn.net"sni1dcb6gl.wpc.edgecastcdn.net blogger.com blogblog.com blogspot.ae blogspot.al blogspot.am blogspot.ba blogspot.be blogspot.bg blogspot.bj blogspot.ca blogspot.cf blogspot.ch blogspot.clblogspot.co.atblogspot.co.idblogspot.co.ilblogspot.co.keblogspot.co.nzblogspot.co.ukblogspot.co.za blogspot.comblogspot.com.arblogspot.com.aublogspot.com.brblogspot.com.byblogspot.com.coblogspot.com.cyblogspot.com.eeblogspot.com.egblogspot.com.esblogspot.com.mtblogspot.com.ngblogspot.com.trblogspot.com.uy blogspot.cv blogspot.cz blogspot.de blogspot.dk blogspot.fi blogspot.fr blogspot.gr blogspot.hk blogspot.hr blogspot.hu blogspot.ie blogspot.in blogspot.is blogspot.it blogspot.jp blogspot.kr blogspot.li blogspot.lt blogspot.lu blogspot.md blogspot.mk blogspot.mx blogspot.my blogspot.nl blogspot.no blogspot.pe blogspot.pt blogspot.qa blogspot.re blogspot.ro blogspot.rs blogspot.ru blogspot.se blogspot.sg blogspot.si blogspot.sk blogspot.sn blogspot.td blogspot.tw blogspot.ug blogspot.vn 2mdn-cn.net +ads2mdn.net +ads admob-cn.com ads admob.com adsads.youtube.com ads adsense.com @@ -11000,19 +11845,32 @@ getws1.com getwsone.comwhatisairwatch.comwhatisworkspaceone.com ads"adwords-community.com ads adwords.com adsadwordsexpress.com +ads#app-measurement-cn.com ads app-measurement.com -ads&clickserver.googleads.com +adsdoubleclick-cn.net +adsdoubleclick.cn adsdoubleclick.com adsdoubleclick.net +ads$google-analytics-cn.com ads!google-analytics.com adsgoogleadapis.com +adsgoogleads-cn.com +ads googleads.com +ads$googleadservices-cn.com ads!googleadservices.com +ads googleadsserving.cn ads googleanalytics.com +ads"googleoptimize-cn.com adsgoogleoptimize.com +ads%googlesyndication-cn.com ads"googlesyndication.com +ads$googletagmanager-cn.com ads!googletagmanager.com +ads%googletagservices-cn.com ads"googletagservices.com +ads*googletraveladservices-cn.com ads'googletraveladservices.com +adsgooglevads-cn.com ads)marketingplatform.google.com ads urchin.com @@ -11023,8 +11881,7 @@ urchin.com googleguge hangout nexus xn--flw351e xn--qcka1pmc  google.ad  google.ae  google.al  google.am  google.as  google.at  google.az  google.ba  google.be  google.bf  google.bg  google.bi  google.bj  google.bs  google.bt  google.by  google.ca google.cat  google.cd  google.cf  google.cg  google.ch  google.ci  google.cl  google.cm google.cn cn  google.co google.co.ao google.co.bw google.co.ck google.co.cr google.co.id google.co.il google.co.in google.co.jp google.co.ke google.co.kr google.co.ls google.co.ma google.co.mz google.co.nz google.co.th google.co.tz google.co.ug google.co.uk google.co.uz google.co.ve google.co.vi google.co.za google.co.zm google.co.zw -google.com google.com.af google.com.ag google.com.ai google.com.ar google.com.au google.com.bd google.com.bh google.com.bn google.com.bo google.com.br google.com.bz google.com.co google.com.cu google.com.cy google.com.do google.com.ec google.com.eg google.com.et google.com.fj google.com.gh google.com.gi google.com.gt google.com.hk google.com.jm google.com.kh google.com.kw google.com.lb google.com.ly google.com.mm google.com.mt google.com.mx google.com.my google.com.na google.com.ng google.com.ni google.com.np google.com.om google.com.pa google.com.pe google.com.pg google.com.ph google.com.pk google.com.pr google.com.py google.com.qa google.com.sa google.com.sb google.com.sg google.com.sl google.com.sv google.com.tj google.com.tr google.com.tw google.com.ua google.com.uy google.com.vc google.com.vn  google.cv  google.cz  google.de  google.dj  google.dk  google.dm  google.dz  google.ee  google.es  google.fi  google.fm  google.fr  google.ga  google.ge  google.gg  google.gl  google.gm  google.gr  google.gy  google.hn  google.hr  google.ht  google.hu  google.ie  google.im  google.iq  google.is  google.it  google.je  google.jo  google.kg  google.ki  google.kz  google.la  google.li  google.lk  google.lt  google.lu  google.lv  google.md  google.me  google.mg  google.mk  google.ml  google.mn  google.ms  google.mu  google.mv  google.mw  google.ne  google.nl  google.no  google.nr  google.nu  google.pl  google.pn  google.ps  google.pt  google.ro  google.rs  google.ru  google.rw  google.sc  google.se  google.sh  google.si  google.sk  google.sm  google.sn  google.so  google.sr  google.st  google.td  google.tg  google.tl  google.tm  google.tn  google.to  google.tt  google.vg  google.vu  google.ws firebase.com firebase.iofirebaseapp.comfirebaseio.com-!firebase-settings.crashlytics.com -cnfirebase.google.comfirebase.googleapis.com#firebaseappcheck.googleapis.com,(firebasedynamiclinks-ipv4.googleapis.com,(firebasedynamiclinks-ipv6.googleapis.com'#firebasedynamiclinks.googleapis.com)%firebaseinappmessaging.googleapis.com($firebaseinstallations.googleapis.com%!firebaselogging-pa.googleapis.com"firebaselogging.googleapis.com+'firebaseperusertopics-pa.googleapis.com'#firebaseremoteconfig.googleapis.com 0emm.com  1e100.net  1ucrs.com +google.com google.com.af google.com.ag google.com.ai google.com.ar google.com.au google.com.bd google.com.bh google.com.bn google.com.bo google.com.br google.com.bz google.com.co google.com.cu google.com.cy google.com.do google.com.ec google.com.eg google.com.et google.com.fj google.com.gh google.com.gi google.com.gt google.com.hk google.com.jm google.com.kh google.com.kw google.com.lb google.com.ly google.com.mm google.com.mt google.com.mx google.com.my google.com.na google.com.ng google.com.ni google.com.np google.com.om google.com.pa google.com.pe google.com.pg google.com.ph google.com.pk google.com.pr google.com.py google.com.qa google.com.sa google.com.sb google.com.sg google.com.sl google.com.sv google.com.tj google.com.tr google.com.tw google.com.ua google.com.uy google.com.vc google.com.vn  google.cv  google.cz  google.de  google.dj  google.dk  google.dm  google.dz  google.ee  google.es  google.fi  google.fm  google.fr  google.ga  google.ge  google.gg  google.gl  google.gm  google.gr  google.gy  google.hn  google.hr  google.ht  google.hu  google.ie  google.im  google.iq  google.is  google.it  google.je  google.jo  google.kg  google.ki  google.kz  google.la  google.li  google.lk  google.lt  google.lu  google.lv  google.md  google.me  google.mg  google.mk  google.ml  google.mn  google.ms  google.mu  google.mv  google.mw  google.ne  google.nl  google.no  google.nr  google.nu  google.pl  google.pn  google.ps  google.pt  google.ro  google.rs  google.ru  google.rw  google.sc  google.se  google.sh  google.si  google.sk  google.sm  google.sn  google.so  google.sr  google.st  google.td  google.tg  google.tl  google.tm  google.tn  google.to  google.tt  google.vg  google.vu  google.ws 0emm.com  1e100.net  1ucrs.com 466453.com abc.xyz adgoogle.net admeld.comangulardart.org api.ai @@ -11046,8 +11903,7 @@ googel.com googil.com  googl.comgoogle-access.netgoogle-syndication.com google.berlin google.dev google.net -google.orggoogle.ventures"googleacquisitionmigration.com googleapis.cn -cngoogleapis.comgoogleapps.comgooglearth.comgoogleblog.com googlebot.comgooglecapital.comgooglecert.netgooglecnapps.cn +google.orggoogle.ventures"googleacquisitionmigration.com googleapis.cngoogleapis.comgoogleapps.comgooglearth.comgoogleblog.com googlebot.comgooglecapital.comgooglecert.netgooglecnapps.cn cngooglecode.comgooglecommerce.comgooglecompare.co.ukgoogledanmark.comgoogledomains.comgoogledrive.com googlee.comgoogleearth.comgooglefiber.comgooglefiber.netgooglefinland.comgooglemail.comgooglemaps.comgooglepagecreator.comgooglephotos.comgoogleplay.comgoogleplus.comgooglesource.comgooglestore.comgooglesverige.comgoogleusercontent.comgoogleventures.com googlezip.net googlr.com goolge.com gooogle.com gridaware.app gsrc.io @@ -11071,9 +11927,6 @@ webrtc.orgweltweitwachsen.dewhatbrowser.org widevine.comw cn265.com cn 2mdn-cn.net cn2mdn.net -cn!accounts.googlers.com -cn$accounts.xn--9trs65b.com -cn&accounts.xn--ggle-55da.com cn admob-cn.com cn adservice.google.com cn ai.ytimg.com @@ -11099,9 +11952,8 @@ webrtc.orgweltweitwachsen.dewhatbrowser.org widevine.comw cn)cnappinstall.googleadapis.com cn)connectivitycheck.gstatic.com cn$content.googleadapis.com -cncorp.google.com -cncorp.googleapis.com cn0$crashlyticsreports-pa.googleapis.com +cn crl.pki.goog cncsi.gstatic.com cndartsearch-cn.net cn$dg-meta.video.google.com @@ -11118,6 +11970,7 @@ webrtc.orgweltweitwachsen.dewhatbrowser.org widevine.comw cndownload.qpdp1.net cn*download.tensorflow.google.com cn+emmapplecodevice.googleapis.com +cn-!firebase-settings.crashlytics.com cn&fontfiles.googleadapis.com cn$fontfiles.googleapis.com cn"fonts.googleadapis.com @@ -11127,7 +11980,6 @@ webrtc.orgweltweitwachsen.dewhatbrowser.org widevine.comw cng1.gstatic.com cng2.gstatic.com cng3.gstatic.com -cn gcpnode.com cngonglchuangl.net cngongyichuangyi.net cn#google-analytics-cn.com @@ -11160,8 +12012,10 @@ webrtc.orgweltweitwachsen.dewhatbrowser.org widevine.comw cn monitoring.qatp1.net cn monitoring.qcpp1.net cn monitoring.qpdp1.net +cn ocsp.pki.goog cn, pagead-googlehosted.l.google.com cn0$performanceparameters.googleapis.com +cn!pki-goog.l.google.com cnplay.1ucrs.com cn'prod-controlbe.floonet.goog cn$prod-databe.floonet.goog @@ -11180,10 +12034,9 @@ webrtc.orgweltweitwachsen.dewhatbrowser.org widevine.comw cn!qualysguard.qcpp1.net cn!qualysguard.qpdp1.net cn recaptcha.net +cnrecaptcha-cn.net cnredirector.bdn.dev cn(redirector.c.chat.google.com -cn(redirector.c.docs.google.com -cn)redirector.c.drive.google.com cn(redirector.c.mail.google.com cn(redirector.c.pack.google.com cn(redirector.c.play.google.com @@ -11212,8 +12065,6 @@ webrtc.orgweltweitwachsen.dewhatbrowser.org widevine.comw cn&test.gbugs-qa.chromium.org cntools.google.com cntools.l.google.com -cn up.corp.goog -cnup.gcp.googlers.com cn"update.crashlytics.com cn!update.googleapis.com cnwear.googleapis.com @@ -11225,6 +12076,44 @@ webrtc.orgweltweitwachsen.dewhatbrowser.org widevine.comw cn www.pxcc.com cn xn--9kr7l.com cnxn--flw351e.com +cn$applemdm.corp.google.com +cndns.corp.google.com +cn!g3doc.corp.google.com +cn(gmskiosk-ssl.corp.google.com +cngo.corp.google.com +cn!gorom.corp.google.com +cn goto.corp.google.com +cn(l2-uberproxy.corp.google.com +cn"logger.corp.google.com +cn&logger-dev.corp.google.com +cn!login.corp.google.com +cn'proxyconfig.corp.google.com +cn, rapture-autopush.corp.google.com +cn#rapture.corp.google.com +cn(rapture-prod.corp.google.com +cn(rapture-test.corp.google.com +cn"r.cert.corp.google.com +cn%ssh-relay.corp.google.com +cn'sslredirect.corp.google.com +cn/#streaming-uberproxy.corp.google.com +cn8,streaming-uberproxy-rotation.corp.google.com +cnsup.corp.google.com +cn)supportcenter.corp.google.com +cn*sup-ssh-relay2.corp.google.com +cn)sup-ssh-relay.corp.google.com +cn$techstop.corp.google.com +cn&uberproxy4.corp.google.com +cn&uberproxy6.corp.google.com +cn%uberproxy.corp.google.com +cn, uberproxy-debug4.corp.google.com +cn+uberproxy-debug.corp.google.com +cn2&uberproxy-pen-redirect.corp.google.com +cn vext.corp.google.com +cnsup.l.google.com +cn*uberproxy-with-cn.l.google.com +cn+uberproxy-with-cn4.l.google.com +cn+uberproxy-with-cn6.l.google.com +cn qiao-cn.com cn hetzner.cloud hetzner.com hetzner.deyour-server.de cht.com.tw chtf.org.tw  emome.net  hinet.net  xuite.net csifund.org hkbn.com.hk hkbn.net @@ -11259,10 +12148,11 @@ omnitek.tv openamt.comopendroneid.orgoptanedifference.com pc.com pentium.com pentium.net pintool.compoweredbyintel.comreconinstruments.com reconjet.comresearchintel.comsaffrontech.comsensorynetworks.com siport.comsmart-edge.comtheintelstore.comthunderbolttechnology.nettrustedanalytics.comtrustedanalytics.net vokevr.com vpro.com vpro.net xeon.comxn--ztsq84g.cn -xscale.combarefootnetworks.com  kakao.com kakaocdn.net kakaocorp.com kakaotalk.jp +xscale.combarefootnetworks.com daum.net daumcdn.net daumkakao.io  kakao.com kakao.co.kr kakaocdn.net kakaocorp.com kakaotalk.jp  kgslb.com onkakao.net kakao.vckakaobrain.comkakaoinvestment.comkakaomobility.comkakaopiccoma.com kakaobank.com kakaobank.iokakaobankcontent.comkakaoenterprise.comkakaocloud.comkakaoilaas.com  1thek.com antenna.co.krawesomeent.co.kr bhent.co.krdolphiners.com gleline.com istent.co.kr jwide.co.kr kakaoent.comkrosspictures.comlogosfilm.co.kr megamon.co.kr  melon.com msoopent.comootbstudio.co.kr shownote.comstarship-ent.comstuidok110.com vastenm.com zipcine.comdaumpcbang.comkakaogamescorp.com kakaovx.comlionhearts.co.kr metabora.io +sena.co.krkakaohealthcare.com karechat.aipastahealth.com kakaopay.comkakaopaysec.comkpinsurances.comfashionbykakao.comkakaostyle.com posty.kr  zigzag.kr lg.com lgappstv.com  lge.co.kr lge.comlgecareers.com lghvac.comlghvacstory.comlgrecyclingprogram.comlgsalesportal.comlgelectronics.122.2o7.net logi.comlogicool.co.jp logicoolg.com logitech.biz logitech.comlogitech.com.cn logitech.fr logitech.io logitechg.comlogitechg.com.cn logitechg.frlogitechio.com.cnworldsfastestgamer.net imgsmail.ru mail.ru mycdn.me binoculus.com buyoculus.com ocul.usoculus-china.com -oculus.comoculus2014.com oculus3d.comoculusblog.comoculusbrand.comoculuscasino.net oculuscdn.comoculusconnect.comoculusdiving.comoculusforbusiness.comoculusrift.com oculusvr.compowersunitedvr.com meta.com azure 21vbc.com +oculus.comoculus2014.com oculus3d.comoculusblog.comoculusbrand.comoculuscasino.net oculuscdn.comoculusconnect.comoculusdiving.comoculusforbusiness.comoculusrift.com oculusvr.compowersunitedvr.com meta.ai meta.com azure 21vbc.com cn21vbluecloud.com cn21vbluecloud.net cnaadrm.cn @@ -11323,20 +12213,22 @@ b3itech.cn cnazure.microsoft.com"azuremarketplace.microsoft.com azure-dns.cn cn azure-dns.comazure-dns.info azure-dns.net azure-dns.org).+\.azure-dns-([1-9]|10)\.cn$ cnbing bing.com bing.com.cn -cn bing.net bingads.combingagencyawards.com bingapis.combingapistatistics.combingsandbox.combingvisualsearch.com bingworld.combluehatnights.com -dictate.msflipwithsurface.commasalladeloslimites.commicrosoft-give.commicrosoftcloudsummit.commicrosoftdiplomados.commicrosoftlatamholiday.commicrosoftmxfilantropia.com!microsoftpartnersolutions.commsunlimitedcloudsummit.comoffice365love.comoffice365tw.comrenovacionoffice.comsprinklesapp.com cn.bing.com +cn bing.net bing123.com bingads.combingagencyawards.com bingapis.combingapistatistics.combingparachute.combingsandbox.combingvisualsearch.com bingworld.combluehatnights.com +dictate.msflipwithsurface.commasalladeloslimites.commicrosoft-give.commicrosoftcloudsummit.commicrosoftdiplomados.commicrosoftlatamholiday.commicrosoftmxfilantropia.com!microsoftpartnersolutions.commsunlimitedcloudsummit.comoffice365love.comoffice365tw.comrenovacionoffice.comsprinklesapp.comlocation.microsoft.com cn.bing.com cn cn.bing.net +cncn.mm.bing.net cn ditu.live.com cnbj1.api.bing.com cnemoi-cncdn.bing.com cnmicrosoftnews.ccmicrosoftnews.cn cnmicrosoftnews.commicrosoftnews.netmicrosoftnews.orgmicrosoftnewsforkids.commicrosoftnewsforkids.netmicrosoftnewsforkids.orgmicrosoftnewskids.commicrosoftnewskids.netmicrosoftnewskids.orgmsn.cn -cn msn.commsnewskids.commsnewskids.netmsnewskids.org msnkids.com 1drv.com 1drv.mslivefilestore.com onedrive.coonedrive.co.uk onedrive.com onedrive.eu onedrive.net onedrive.orgonedrive.live.comstorage.live.com  microsoft hotmail +cn msn.commsnewskids.commsnewskids.netmsnewskids.org msnkids.commicrosoftstart.com  start.com 1drv.com 1drv.mslivefilestore.com onedrive.coonedrive.co.uk onedrive.com onedrive.eu onedrive.net onedrive.orgonedrive.live.comstorage.live.com  microsoft hotmail office skype windows microsoft.az microsoft.be microsoft.by microsoft.ca microsoft.cat microsoft.ch microsoft.cl microsoft.com microsoft.cz microsoft.de microsoft.dk microsoft.ee microsoft.es microsoft.eu microsoft.fi microsoft.ge microsoft.hu microsoft.io microsoft.is microsoft.it microsoft.jp microsoft.lt microsoft.lu microsoft.lv microsoft.md microsoft.net microsoft.pl microsoft.pt microsoft.red microsoft.ro microsoft.rs microsoft.ru microsoft.se microsoft.si microsoft.tv microsoft.ua microsoft.uz microsoft.vnfemalefounderscomp.com -m12.vc +m12.vc a-msedge.net aka.msankarazirvesi2018.comapplicationinsights.ioapplicationinsights.net aria.ms asp.net aspnetcdn.com binads.com bluehatil.com  boswp.combrazilpartneruniversity.com breakdown.mecentralvalidation.com -ch9.mscharticulator.com cloudapp.netcloudappsecurity.comcortanaanalytics.comcortanaskills.comcrmdynint-gcc.com crmdynint.comcrossborderexpansion.com docs.com dynamics.cn +ch9.mscharticulator.com cloudapp.netcloudappsecurity.comcortanaanalytics.comcortanaskills.comcrmdynint-gcc.com crmdynint.comcrossborderexpansion.comdcg.microsoft.com +cn docs.com dynamics.cn cn dynamics.com edgesuite.net efproject.net engkoo.com cnfasttrackreadysupport.comfluidpreview.comfootprintdns.comgameuxmasterguide.com @@ -11387,7 +12279,7 @@ pixapp.net powerapps.cn cnpowerautomate.com powerbi.cn cn powerbi.compowershellgallery.comprojectmurphy.netprojectsangam.com -pxt.ios-microsoft.com +pxt.ios-dc-msedge.nets-microsoft.com s-msedge.net s-msft.com  s-msn.com sfbassets.com sfbassets.net sfx.ms sharepoint.cn cnsharepoint.comsharepointonline.com  skype.com  skype.netskypeassets.comskypeassets.net staffhub.mssuccesswithteams.com surface.com @@ -11400,42 +12292,56 @@ winhec.com winhec.net yammer.com&"edge-skype-com.s-0001.s-msedge.netskype-edf.akadns.netskypedata.akadns.net(dl.delivery.mp.microsoft.com cn&download.windowsupdate.com +cn#b.c2r.ts.cdn.office.net cn'bg.v4.a.dl.ws.microsoft.com cn(bg4.v4.a.dl.ws.microsoft.com +cnbuild.microsoft.com cn2&cdn.marketplaceimages.windowsphone.com cn cn.windowssearch.com cn#ctldl.windowsupdate.com +cn"devblogs.microsoft.com cn#developer.microsoft.com cndocs.microsoft.com cn"download.microsoft.com cn/#download.visualstudio.microsoft.com +cn#f.c2r.ts.cdn.office.net cnfs.microsoft.com +cnlearn.microsoft.com cn(msgr.dlservice.microsoft.com cn, msgruser.dlservice.microsoft.com +cn, myvs.download.prss.microsoft.com +cn."oemsoc.download.prss.microsoft.com cn#officecdn.microsoft.com cn&qh.dlservice.microsoft.com +cn res-1.cdn.office.net +cnres.cdn.office.net cnsdx.microsoft.com +cn shell.cdn.office.net cn/#silverlight.dlservice.microsoft.com cn, slupdate.dlservice.microsoft.com +cn0$software.download.prss.microsoft.com +cn(statics.teams.cdn.office.net cn, storeedgefd.dsx.mp.microsoft.com +cn0$surface.downloads.prss.microsoft.com +cn."vscode.download.prss.microsoft.com +cn*vz.download.prss.microsoft.com cn&wl.dlservice.microsoft.com cn&wscont1.apps.microsoft.com cn&wscont2.apps.microsoft.com cn&xb.dlservice.microsoft.com -cn/+img-prod-cms-rt-microsoft-com.akamaized.netimg-s-msn-com.akamaized.netmwf-service.akamaized.net)%officecdn-microsoft-com.akamaized.net3/statics-marketingsites-eas-ms-com.akamaized.net3/statics-marketingsites-eus-ms-com.akamaized.net40statics-marketingsites-wcus-ms-com.akamaized.net mikrotik.com mt.lvrouterboard.com mindgeek.comdeveloper.allizom.orgdeveloper.mozilla.orgmdn.allizom.net mdn.devmdn.mozilla.netmdn.mozit.cloud mdnplay.dev mdnyalp.devmdn.mozillademos.org mozilla.commozilla.community mozilla.net mozilla.orgextensionworkshop.com bugzilla.org getpocket.comseamonkey-project.orgthunderbird.netmusixmatch.com -mxmcdn.net grafolio.com  naver.com naver.jp  naver.net navercorp.com  plug.game pstatic.net webtoons.com neuralink.com +cn/+img-prod-cms-rt-microsoft-com.akamaized.netimg-s-msn-com.akamaized.netmwf-service.akamaized.net)%officecdn-microsoft-com.akamaized.net3/statics-marketingsites-eas-ms-com.akamaized.net3/statics-marketingsites-eus-ms-com.akamaized.net40statics-marketingsites-wcus-ms-com.akamaized.net mikrotik.com mt.lv mynetname.netrouterboard.com mindgeek.comdeveloper.allizom.orgdeveloper.mozilla.orgmdn.allizom.net mdn.devmdn.mozilla.netmdn.mozit.cloud mdnplay.dev mdnyalp.devmdn.mozillademos.org +mozgcp.net mozilla.commozilla.community mozilla.net mozilla.orgextensionworkshop.com bugzilla.org getpocket.comseamonkey-project.orgthunderbird.netmusixmatch.com +mxmcdn.net  naver.com naver.me  naver.netnaver.com.akadns.net navercorp.com  nheos.com pstatic.net clova.ainavercloudcorp.com naverncp.com +ncloud.comworksmobile.comnaverfincorp.com snow.me snowcorp.com vday.iostudiolico.comstudioncorp.com wattpad.com webtoons.comwebtoonscorp.com band.us grafolio.com modoo.at naver.jp naverads.comnaverads.com.akadns.net naverlabs.com  plug.game prismlive.com neuralink.com geforce.cn cn geforce.co.kr geforce.co.uk geforce.comgeforce.com.twgputechconf.cn cngputechconf.co.krgputechconf.comgputechconf.com.augputechconf.com.twgputechconf.eugputechconf.ingputechconf.jp nvidia.asia  nvidia.at  nvidia.be  nvidia.ch nvidia.cn cn nvidia.co.at nvidia.co.in nvidia.co.jp nvidia.co.kr nvidia.co.uk -nvidia.com nvidia.com.au nvidia.com.br nvidia.com.mx nvidia.com.pe nvidia.com.pl nvidia.com.tr nvidia.com.tw nvidia.com.ua nvidia.com.ve  nvidia.cz  nvidia.de  nvidia.dk  nvidia.es  nvidia.eu  nvidia.fi  nvidia.fr  nvidia.in  nvidia.it  nvidia.jp  nvidia.lu  nvidia.mx  nvidia.nl  nvidia.no  nvidia.pl  nvidia.ro  nvidia.ru  nvidia.se  nvidia.twnvidiaforhp.comnvidiagrid.netshotwithgeforce.com tegrazone.cotegrazone.co.kr tegrazone.com tegrazone.jp tegrazone.krnvidia.tt.omtrdc.net -openai.com&"chat.openai.com.cdn.cloudflare.net openaiapi-site.azureedge.net2.openaicom-api-bdcpf8c6d2e9atf6.z01.azurefd.net1-openaicomproductionae4b.blob.core.windows.net.*production-openaicom-storage.azureedge.net$o33249.ingest.sentry.io -ads openaicom.imgix.net -adsopenweather.co.ukopenweathermap.org -oracle -oracle.comoraclecloud.comoraclefoundation.org oracleimg.comoracleinfinity.ioateam-oracle.com -bronto.comcovid19-rx.org covid19rx.org sun.com  panasonic panasonic.cn -cn panasonic.com panasonic.jp technics.com 1010.com.hkesmarthealth.com  hkcsl.comhkt-enterprise.com hkt-eye.com hkt.comhkteducation.comhktpremier.com hktshop.comnetvigator.comtheclub.com.hk uhub.com pccw.compccwglobal.compccwsolutions.com moov.hkmyqnapcloud.com qlink.to qnap.commyqnapcloud.cn +nvidia.com nvidia.com.au nvidia.com.br nvidia.com.mx nvidia.com.pe nvidia.com.pl nvidia.com.tr nvidia.com.tw nvidia.com.ua nvidia.com.ve  nvidia.cz  nvidia.de  nvidia.dk  nvidia.es  nvidia.eu  nvidia.fi  nvidia.fr  nvidia.in  nvidia.it  nvidia.jp  nvidia.lu  nvidia.mx  nvidia.nl  nvidia.no  nvidia.pl  nvidia.ro  nvidia.ru  nvidia.se  nvidia.twnvidiaforhp.comnvidiagrid.netshotwithgeforce.com tegrazone.cotegrazone.co.kr tegrazone.com tegrazone.jp tegrazone.krnvidia.tt.omtrdc.netopenweather.co.ukopenweathermap.org +oracleateam-oracle.com +bronto.comcovid19-rx.org covid19rx.org +oracle.comoraclecloud.comoraclefoundation.org oracleimg.comoracleinfinity.io sun.comvirtualbox.org  panasonic panasonic.cn +cn panasonic.com panasonic.jp technics.com 1010.com.hkesmarthealth.com  hkcsl.comhkt-enterprise.com hkt-eye.com hkt.comhkteducation.comhktpremier.com hktshop.comnetvigator.comtheclub.com.hk uhub.com pccw.compccwglobal.compccwsolutions.com moov.hk perplexity.aimyqnapcloud.com qlink.to qnap.commyqnapcloud.cn cn qlinkto.cn cn qnap.com.cn @@ -11445,10 +12351,14 @@ iskoot.com izatcloud.net cnmeetsmartbook.compatenttruth.org pixtronix.com!qceventscenter.com.cn cnqctconnect.com qprize.comqualcomm-email.com qualcomm.cn +cn*qualcomm.cn.cdn.cloudflare.net cnqualcomm.co.idqualcomm.co.inqualcomm.co.jpqualcomm.co.krqualcomm.co.uk qualcomm.comqualcomm.com.brqualcomm.com.tw qualcomm.de qualcomm.frqualcommhalo.comqualcommlabs.comqualcommmea.comqualcommretail.comqualcommventures.cnqualcommventures.com qualphone.com quicinc.com snapdragon.cnsnapdragonbooth.com uplinq.com wipower.comwirelessreach.com xtracloud.cn cn -brewmp.comqualcomm.sc.omtrdc.net  qwant.com qwant.de qwant.fr qwant.it  razer.comrazersupport.com razerzone.com razerzone.jprespawnbyrazer.com appcloud.comappexchange.com attic.iobeyondcore.combuddymedia.com chatter.comcloudcraze.com cotweet.com data.comdemandware.com desk.comdocumentforce.comdreamforce.com einstein.comexacttarget.com  force.com govforce.comgravitytank.com heywire.com krux.commarketingcloud.com metamind.io +brewmp.comqualcomm.sc.omtrdc.net  qwant.com qwant.de qwant.fr qwant.it  razer.com razerapi.com +cnrazerofficial.comrazersynapse.com +cnrazersupport.com razerzone.com +cn razerzone.jprespawnbyrazer.com appcloud.comappexchange.com attic.iobeyondcore.combuddymedia.com chatter.comcloudcraze.com cotweet.com data.comdemandware.com desk.comdocumentforce.comdreamforce.com einstein.comexacttarget.com  force.com govforce.comgravitytank.com heywire.com krux.commarketingcloud.com metamind.io pardot.com quotable.com radian6.com relateiq.comsalesforce.comsalesforce.orgsalesforceiq.comsalesforceliveagent.com salesforcemarketingcloud.com sequence.comsfdcstatic.com sforce.com site.com social.comsteelbrick.com twinprime.comweinvoiceit.com samsung @@ -11466,7 +12376,10 @@ sony.co.nz sony.co.th sony.co.uk sony.com sony.com.ar sony.com.au sony.com.bo sony.com.br sony.com.co sony.com.do sony.com.ec sony.com.gt sony.com.hk sony.com.hn sony.com.mk sony.com.mx sony.com.my sony.com.ni sony.com.pa sony.com.pe sony.com.ph sony.com.sg sony.com.sv sony.com.tr sony.com.tw sony.com.vn sony.cz sony.de sony.dk sony.ee sony.es sony.eu sony.fi sony.fr sony.gr sony.hr sony.hu sony.ie sony.it sony.kz sony.lt sony.lu sony.lv sony.net sony.nl sony.no sony.pl sony.pt sony.ro sony.rs sony.ru sony.se sony.si sony.sk sony.ua sonybo.co.jp sonybsc.comsonybuilding.jpsonydesign.com sonydna.comsonyglobalsolutions.jp sonykigyo.jpsonylatvija.com sonypcl.jpsonyprotechnosupport.co.jpsonystoragemedia.co.jp sonytc.co.jp  sovec.net -spacex.comboringcompany.cominternetdownloadmanager.comregisteridm.com  tonec.comuber-assets.com uber.com ubereats.com  vultr.comg-technology.com +spacex.com spacemail.com spaceship.com +st.com%stmicroelectronics.com.cn +cn tailscale.com tailscale.io +ts.netboringcompany.cominternetdownloadmanager.comregisteridm.com  tonec.comuber-assets.com uber.com ubereats.com  vultr.comg-technology.com sandisk.ae sandisk.it sandisk.cn @@ -11485,12 +12398,12 @@ sandisk.sg ads yahoo yahoo.ae yahoo.am yahoo.as yahoo.at yahoo.az yahoo.ba yahoo.be yahoo.bg yahoo.bi yahoo.bs yahoo.bt yahoo.by yahoo.ca  yahoo.cat yahoo.cd yahoo.cg yahoo.ch yahoo.cl yahoo.cmyahoo.cn cn yahoo.co.ao yahoo.co.bw yahoo.co.ck yahoo.co.cr yahoo.co.id yahoo.co.il yahoo.co.in yahoo.co.jp yahoo.co.kr yahoo.co.mz yahoo.co.nz yahoo.co.th yahoo.co.tz yahoo.co.uk yahoo.co.uz yahoo.co.ve yahoo.co.vi yahoo.co.za  yahoo.com yahoo.com.af yahoo.com.ag yahoo.com.ai yahoo.com.ar yahoo.com.au yahoo.com.bd yahoo.com.bo yahoo.com.br yahoo.com.bz yahoo.com.cn cn yahoo.com.co yahoo.com.do yahoo.com.ec yahoo.com.eg yahoo.com.es yahoo.com.fj yahoo.com.gi yahoo.com.gt yahoo.com.hk yahoo.com.kw yahoo.com.lb yahoo.com.ly yahoo.com.mt yahoo.com.mx yahoo.com.my yahoo.com.na yahoo.com.nf yahoo.com.om yahoo.com.pa yahoo.com.pe yahoo.com.ph yahoo.com.pk yahoo.com.pr yahoo.com.py yahoo.com.sa yahoo.com.sb yahoo.com.sg yahoo.com.sv yahoo.com.tj yahoo.com.tr yahoo.com.tw yahoo.com.ua yahoo.com.uy yahoo.com.vc yahoo.com.vn yahoo.cz yahoo.de yahoo.dj yahoo.dk yahoo.dm yahoo.ee yahoo.es yahoo.fi yahoo.fm yahoo.fr yahoo.ge yahoo.gg yahoo.gl yahoo.gm yahoo.gp yahoo.gr yahoo.gy yahoo.hk yahoo.hr yahoo.hu yahoo.ie yahoo.im yahoo.in yahoo.is yahoo.it yahoo.je yahoo.jo yahoo.la yahoo.lt yahoo.lu yahoo.lv yahoo.md yahoo.me yahoo.mk yahoo.mw yahoo.mx  yahoo.net yahoo.nl yahoo.no yahoo.nu yahoo.ph yahoo.pl yahoo.pn yahoo.ps yahoo.pt yahoo.ro yahoo.ru yahoo.rw yahoo.se yahoo.sg yahoo.sh yahoo.si yahoo.sk yahoo.sm yahoo.sn yahoo.so yahoo.sr yahoo.st yahoo.tg yahoo.tk yahoo.tl yahoo.tm yahoo.tn yahoo.vg yahoo.ws maktoob.com -myguide.hktechcrunch.comyahoo-news.com.hk yahooapis.com yahoodns.netyahoofinance.comyahoohealth.comyahoomusic.comyahoosandbox.comyahoosportsbook.com yho.com yimg.com yimg.jp  ymail.comyusercontent.com +myguide.hktechcrunch.comyahoo-news.com.hk yahooapis.com yahoodns.netyahoofinance.comyahoohealth.comyahoomusic.comyahoosandbox.comyahoosportsbook.com yho.com yimg.com yimg.jp  ymail.comyusercontent.com cdn.js7k.com yandexxn--d1acpjx3f.xn--p1ai dzen.ru ya.ru yandex.aero  yandex.az  yandex.by yandex.co.il yandex.com yandex.com.am yandex.com.ge yandex.com.ru yandex.com.tr yandex.com.ua  yandex.de  yandex.ee  yandex.eu  yandex.fi  yandex.fr yandex.jobs  yandex.kg  yandex.kz  yandex.lt  yandex.lv  yandex.md yandex.net yandex.org  yandex.pl  yandex.ru  yandex.st  yandex.sx  yandex.tj  yandex.tm  yandex.ua  yandex.uzyandexcloud.net yastatic.net teamviewer.cn -cnteamviewer.com teamviewer.us,(client-teamviewer-com.trafficmanager.net%!teamviewer.com.cdn.cloudflare.net anydesk.com nomachine.com rustdesk.com porkbun.com 1337x.to 1337x.gd 1337x.is 1337x.st 1337x.tw +cnteamviewer.com teamviewer.us,(client-teamviewer-com.trafficmanager.net%!teamviewer.com.cdn.cloudflare.net anydesk.com nomachine.com rustdesk.com  auth0.com civitai.com porkbun.com 1337x.to 1337x.gd 1337x.is 1337x.st 1337x.tw 1337xto.to  1337xx.to  x1337x.eu  x1337x.se  x1337x.ws  btdig.com demonoid.is nyaa.net nyaa.sipirates-forum.org torrindex.netthepiratebay.org apibay.org  dyncdn.me rarbg.me rarbg.toproxyrarbg.org rarbg.israrbgaccess.orgrarbgaccessed.org rarbgget.org rarbggo.orgrarbgmirror.comrarbgmirror.orgrarbgproxy.org rarbgprx.org rarbgto.orgrarbgunblock.comrarbgunblock.orgrarbgunblocked.org rarbgway.org 928.plus zind.cloud boslife.biz boslife.net @@ -11607,7 +12520,7 @@ rea.global rea.io rea.techrealcommercial.com.aurealestate.com.au realtor.com reastatic.net rumah123.comsmartexpos.comsmartline.com.auspacely.com.ausquarefoot.com.hkthinkofliving.comscenesource.me  scnsrc.me sbux.com.my sbuxcard.comstarbucks-stars.com starbucks.ad starbucks.at starbucks.be starbucks.bg starbucks.ca starbucks.chstarbucks.co.idstarbucks.co.jpstarbucks.co.nzstarbucks.co.thstarbucks.co.ukstarbucks.co.za starbucks.comstarbucks.com.arstarbucks.com.bnstarbucks.com.cn cnstarbucks.com.costarbucks.com.cystarbucks.com.grstarbucks.com.hkstarbucks.com.khstarbucks.com.kzstarbucks.com.mxstarbucks.com.mystarbucks.com.pestarbucks.com.sgstarbucks.com.trstarbucks.com.uy starbucks.de starbucks.dk starbucks.es starbucks.fr starbucks.hu starbucks.ie starbucks.in starbucks.it starbucks.nl starbucks.no starbucks.ph starbucks.pl starbucks.pt starbucks.rs starbucks.ru starbucks.se starbucks.tt starbucks.vnstarbucksathome.comstarbucksavie.castarbuckscard.phstarbuckscardb2b.comstarbuckscoffee.czstarbuckscoffeegear.com starbuckscoffeegearstore.comstarbucksforlife.castarbucksforlife.comstarbuckspoq.comstarbucksreserve.comstarbucksrewardsstarland.ca starbucksrewardsstarland.comstarbucksromania.rostarbucksrtd.comstarbucksslovakia.skstarbuckssummergame.castarbuckssummergame.com tsquare.tv  windy.com xdty.org  xingrz.me - + GEOLOCATION-CN 42r.cn 5566ua.com aurorapush.cn @@ -11624,28 +12537,80 @@ w.cnzz.com adsz.gds.cnzz.com adsairchina.com.cnairchinacargo.comhainanairlines.com hnacargo.com  hnair.com 10044.cn caac.gov.cn  ceair.comchinaexpressair.com  csair.com flycua.com hbhk.com.cn  jdair.netjuneyaoair.com luckyair.netsichuanair.comtibetairlines.com.cnvariflight.com xiamenair.com -boc.cnbank-of-china.combankofchina.combocfullertonbank.combocamchina.combocaviation.com  boccfc.cc  boccfc.cn  bocgi.com bocgins.com  bochk.com bocichina.cn bocichina.combocichina.com.cn bocifunds.cn bocifunds.combocifunds.com.cn bocigroup.com  bocim.combocservices.com.cnccb-life.com.cn +boc.cnbank-of-china.combankofchina.combocfullertonbank.combocamchina.combocaviation.com  boccfc.cc  boccfc.cn  bocgi.com bocgins.com bochk.com +!cn bocichina.cn bocichina.combocichina.com.cn bocifunds.cn bocifunds.combocifunds.com.cn bocigroup.com  bocim.combocservices.com.cnccb-life.com.cn ccb.cn ccb.com ccb.com.cn ccbcos.com ccbfund.cn ccbfund.comccbfund.com.cn ccbfutures.cnccbfutures.comccbintl.com.hkccbleasing.comccblife-test.com.cn ccbseoul.comccbtrust.com.cn  ccbxt.com 8008205555.cn8008205555.comcignacmb-ipmi.com cignacmb.comcignacmbamc.comcmb-leasing.com cmbchina.biz cmbchina.cn cmbchina.com cmbi.com.hk  cmbimg.cn cmbimg.com cmbt.cn cmbuat.com  cmburl.cncmbwinglungbank.com cmf.biz cmf.ltd cmfchina.com -cmfunds.cntest-cignacmb.comicbc  95588.com 95588.com.cn dccnet.com.cn icbc-at.com icbc-cz.com icbc-ltd.com icbc-uk.com icbc-us.com icbc.ae icbc.be -icbc.co.id -icbc.co.jp -icbc.co.kr -icbc.co.nl icbc.com.au icbc.com.cn icbc.com.es icbc.com.kh icbc.com.kw icbc.com.la icbc.com.mm icbc.com.mo icbc.com.mx icbc.com.pe icbc.com.pk icbc.com.qa icbc.com.sg icbc.com.vn icbc.de icbc.eu icbc.lu icbcalmaty.kz icbcasia.com icbcbr.com.br icbccs.com.cnicbccstz.com.cn icbci.com.hk icbcina.com icbcindia.com -icbcit.comicbclondon.comicbcmanila.com.cn  icbcme.ae icbcmoscow.ru -icbcmy.com -icbcnz.comicbcpanama.com icbcparis.fr -icbcpl.comicbcstandard.comicbcstandardbank.comicbcstandardresources.comicbcstandardsecurities.com icbcswiss.com icbcthai.com -icbkfs.com -icbkus.com  95516.com  95516.netchinaunionpay.comchinaunionpay.com.cnchinaunionpay.net +cmfunds.cntest-cignacmb.comicbc  95588.com 95588.com.cn dccnet.com.cn icbc-at.com +!cn icbc-cz.com +!cn icbc-ltd.com +!cn icbc-uk.com +!cn icbc-us.com +!cnicbc.ae +!cnicbc.be +!cn +icbc.co.id +!cn +icbc.co.jp +!cn +icbc.co.kr +!cn +icbc.co.nl +!cn icbc.com.au +!cn icbc.com.cn icbc.com.es +!cn icbc.com.kh +!cn icbc.com.kw +!cn icbc.com.la +!cn icbc.com.mm +!cn icbc.com.mo +!cn icbc.com.mx +!cn icbc.com.pe +!cn icbc.com.pk +!cn icbc.com.qa +!cn icbc.com.sg +!cn icbc.com.vn +!cnicbc.de +!cnicbc.eu +!cnicbc.lu +!cn icbcalmaty.kz +!cn icbcasia.com +!cn icbcbr.com.br +!cn icbccs.com.cnicbccstz.com.cn icbci.com.hk +!cn icbcina.com icbcindia.com +!cn +icbcit.com +!cnicbclondon.com +!cnicbcmanila.com.cn icbcme.ae +!cn icbcmoscow.ru +!cn +icbcmy.com +!cn +icbcnz.com +!cnicbcpanama.com +!cn icbcparis.fr +!cn +icbcpl.com +!cnicbcstandard.comicbcstandardbank.comicbcstandardresources.comicbcstandardsecurities.com icbcswiss.com +!cn icbcthai.com +!cn +icbkfs.com +!cn +icbkus.com +!cn  95516.com  95516.netchinaunionpay.comchinaunionpay.com.cnchinaunionpay.net cup.com.cn cup62.cn unionpay.com unionpay.netunionpaysecure.comunionpayintl.cnunionpayintl.com abchina.com bankcomm.combankofbeijing.com.cn bosc.cn bsb.com.cn ccb.comcgbchina.com.cn cib.com.cncitibank.com.cn cmbc.com.cn hsbc.com.cn -hxb.com.cn njcb.com.cn psbc.com spdb.com.cn  whccb.com +hxb.com.cn njcb.com.cn psbc.com spdb.com.cn  whccb.com kcbebank.com shrbank.com  mybank.cn +ms-bank.cn +webank.com webankcdn.net csxbank.com  fbank.com +xwbank.com zgcbank.comyillionbank.com +z-bank.comonebank.com.cn wegobank.cnsuningbank.com +kshbank.cn xa-bank.com newupbank.com +ymbank.com wxsbank.com sse.com.cn sseinfo.com szse.cn cninfo.com.cn ajzq.com avicsec.com  ccnew.com cczq.com cczq.net cfsc.com.cn cfzq.com cgws.comchinalions.comchinastock.com.cn cicc.com ciccwm.com cindasc.com cjsc.com cnhbstock.com cnht.com.cn csco.com.cn csfounder.com  ctsec.com daton.com.cn  dfham.com dfzq.com.cn dgzq.com.cn dtsbc.com.cn dwjq.com.cn dxzq.net easec.com.cnessence.com.cn ewww.com.cn fcsc.cnfzfinancing.com  gf.com.cn ghsl.cn ghzq.com.cn gjzq.com.cn gkzq.com.cn glsc.com.cn grzq.com gsgh.cn gszq.com gtja.com gtja.com  guodu.com guosen.com.cn gyzq.com.cn hazq.com hczq.com hfzq.com.cn hlzqgs.comhongtastock.com hrsec.com.cn hsbcqh.com.cn htsc.com.cn  htsec.comhuajingsec.com huajinsc.cn huayingsc.com hx168.com.cn hxzq.cn i618.com.cn  iztzq.com jhzq.com.cnjpmorganchina.com jyzq.cn  jzsec.com kysec.cn lczq.com lhzq.comlongone.com.cnmorganstanleyhuaxin.com mszq.com nesc.cn njzq.com.cnnomuraoi-sec.com @@ -11670,8 +12635,11 @@ zhfund.com zofund.com 5ifund.com fund123.cn -howbuy.com lufunds.com  zlfund.cn citic chinaamc.comcitic-prudential.com.cn citicbank.comciticcapital.com citiciam.com citicifh.comciticprufunds.com.cn citics.com.hk citicsf.com clsa.comcncbinternational.com -csc108.com csci.hk +howbuy.com lufunds.com  zlfund.cn citic chinaamc.comcitic-prudential.com.cn citicbank.comciticcapital.com citiciam.com citicifh.comciticprufunds.com.cn citics.com.hk +!cn citicsf.com clsa.com"cncbinternational.com +!cn +csc108.comcsci.hk +!cn ecitic.com1234567.com.cn 18.cn  18.com.cn  dfcfw.com eastmoney.comeastmoneyfutures.com emsec.hk guba.com.cn cebbank.com ceblease.com eb-ind.com ebasset.com ebchina.comebchinaintl.com ebf.com.cn  ebfcn.com ebfortune.com ebtrust.com ebscn-am.com  ebscn.comeverbright.com  secec.comsunlife-everbright.com @@ -11701,7 +12669,7 @@ nwcddns.cn cn route53.cn cnsagemaker.com.cn -cn".+\.awsdns-cn-[0-9][0-9]\.biz$$ .+\.awsdns-cn-[0-9][a-e0-9]\.cn$".+\.awsdns-cn-[0-9][0-9]\.com$".+\.awsdns-cn-[0-9][0-9]\.net$".+\.awsdns-cn-[0-9][0-9]\.top$ baijiayun.com +cn0,.+\.awsdns-cn-[0-9][0-9]\.(biz|com|net|top)$$ .+\.awsdns-cn-[0-9][a-e0-9]\.cn$ baijiayun.com bootcdn.cn bootcdn.net bootcss.com bootcdn.cnphpcomposer.com cf-ns.com cn cf-ns.net @@ -11716,8 +12684,12 @@ cftest6.cn cn cftest7.com cn cftest8.com cncloudflare-cn.com +cn!cloudflareanycast.net +cncloudflarechina.cn cncloudflarecn.net +cn cloudflareglobal.net cn%cloudflareinsights-cn.com +cncloudflareperf.com cncloudflareprod.com cn!cloudflarestaging.com cn#cloudflarestoragegw.com @@ -11726,7 +12698,7 @@ dlgslb.net  dwion.com fastcdn.comfastcdn.com.cn  flxdns.cn flxdns.com globalcdn.cn mcadn.cn  tlgslb.cn tlgslb.com maoyun.commaoyuncloud.cnmaoyuncloud.com pkoplink.com frontwize.com qingcache.com qingcloud.com qingstor.com routewize.com -yunify.comstaticfile.org qbox.me  qiniu.com qiniucdn.com qiniudn.com qiniudns.com +yunify.comstaticfile.netstaticfile.org qbox.me  qiniu.com qiniucdn.com qiniudn.com qiniudns.com qiniup.com  qnsdk.com  qnssl.com szbdyd.com snodehome.com snodehome.cn apimkt.net  cdndo.com clk1.cn clk1.topecloud-gdu.com  fshark.cn globalrdp.cn globalssh.cn  iprdp.net  ipssh.net me1.ltd slk1.net  u-cdn.net  ucgslb.cn @@ -11753,8 +12725,9 @@ skysea.com  suanya.cn suanya.com tieyou.com toptown.cn toursbms.com trip.com tripcdn.com -vipdlt.com dangdang.com ddimg.cn -ele.me elemecdn.com eleme.cn 1huizhan.com3.cn  300hu.com  360buy.cn +vipdlt.com dangdang.com ddimg.cn doservice.com +ele.me +ele.to eleme.cn eleme.io elemecdn.cn elemecdn.com  elenet.me 1huizhan.com3.cn  300hu.com  360buy.cn 360buy.com 360buy.com.cn 360buyimg.com360buyinternational.com 360top.com 7fresh.com baitiao.comblackdragon.com  caiyu.com chicalot.cnchinabank.com.cncloud-beijing.comcloud-hebi.comcloud-ningbo.comcloud-ordos.comcloud-shenzhen.comcloud-shiyan.comcloud-wuhan.comcloud-xian.com cloud-xm.comcloud-zhaoqing.comcloud-zhongwei.comcloudanqing.comcloudbaoshan.comcloudbeibei.comcloudbinzhou.comcloudchangde.comcloudchangsha.comcloudchangzhou.comcloudchaozhou.comcloudchengde.comcloudchengdu.comcloudchuzhou.com cloudczs.comclouddalian.comclouddatong.comclouddongying.comcloudfoshan.comcloudfuqing.comcloudganzhou.comcloudguangzhou.comcloudhaidong.comcloudhefei.comcloudhengshui.comcloudhuaihua.comcloudhuizhou.comcloudjinan.comcloudjinchang.comcloudjingzhou.comcloudjining.comcloudjiujiang.comcloudkunming.comcloudleshan.comcloudlijiang.comcloudlishui.comcloudluohe.comcloudluoyang.comcloudmeishan.comcloudnanan.comcloudnanjing.comcloudnanning.comcloudnantong.comcloudquanzhou.comcloudsanya.comcloudshanghai.comcloudshaoyang.comcloudshenfuxingqu.comcloudsiping.comcloudsuqian.comcloudtangshan.comcloudtianjin.comcloudtongchuan.comcloudtongliang.comcloudweinan.comcloudxiangtan.comcloudxianyou.comcloudxining.comcloudyanan.comcloudyancheng.comcloudyantai.comcloudyinchuan.comcloudyueyang.comcloudyuncheng.com cloudyuxi.comcloudzhongshan.comcloudzhuhai.com @@ -11805,12 +12778,12 @@ ali213.netbilibiligame.cn cn biligame.co cn biligame.com cn biligame.net -cnbilicomics.commanga.bilibili.com +cn bilicomic.combilicomics.commanga.bilibili.com acg.tv acgvideo.comanimetamashi.cnanimetamashi.com anitama.cn anitama.net b23.tv  bigfun.cn bigfunapp.cn  bili22.cn bili2233.cn  bili23.cn  bili33.cn biliapi.com biliapi.net bilibili.cc bilibili.cn bilibili.com bilibili.net bilibili.tv !cnbilibilipay.cnbilibilipay.com bilicdn1.com bilicdn2.com bilicdn3.com bilicdn4.com bilicdn5.com -biligo.com biliintl.com +biligo.com biliimg.com biliintl.com !cn bilivideo.cn bilivideo.com bilivideo.net dreamcast.hk  hdslb.com  hdslb.org im9.com maoercdn.com mincdn.com yo9.com$ upos-hz-mirrorakam.akamaized.net ciweimao.com hbooker.comkuangxiangit.com cowlevel.net  cdncl.net biji.com ddmogo.com @@ -11841,11 +12814,13 @@ ppsimg.com qiyi.com qiyipic.com ads  jjwxc.net ku6.com ku6cdn.com ku6img.com kkmh.comkuaikanmanhua.com gifshow.com ksapisrv.com kuaishou.com -yximgs.com log-sdk.gifshow.com +yximgs.com +kwaizt.comkuaishouzt.com log-sdk.gifshow.com adswlog.kuaishou.com ads  kgimg.com  kugou.com le.com lecloud.com -lemall.com letv.com letvcdn.com letvimg.com lizhi.fm lizhifm.com mfuns.cn miaopai.com mhyurl.cn +lemall.com letv.com letvcdn.com letvimg.com lizhi.fm lizhifm.com mfuns.cn miaopai.com mhystatic.com +cn mhyurl.cn cn mihayo.com cn mihayou.com @@ -11862,13 +12837,17 @@ mihoyo.com cn yuanshen.com cn'^.+-mihayo\.akamaized\.net$ cn  muwai.com  pplive.cn -pplive.com pptv.com qingting.fm  sfacg.com +pplive.com pptv.com qingting.fm qtfm.cn  sfacg.com 61.com -taomee.com -tapimg.com -taptap.com  tgbus.com tiancity.comtiancitycdn.com u17.com u17i.com u17t.com +taomee.com  tgbus.com tiancity.comtiancitycdn.com u17.com u17i.com u17t.com vgtime.com -xhscdn.comxiaohongshu.com ximalaya.com  xmcdn.com +tapimg.com +tapimg.net  taptap.cn +taptap.com  taptap.iotaptapdada.com +ro.com xd.cn +xd.com  xdcdn.net xindong.com +xhscdn.com +xhscdn.netxiaohongshu.com ximalaya.com  xmcdn.com kumiao.com  youku.com  ykimg.com mmstat.com soku.com cibntv.net @@ -11879,15 +12858,18 @@ hacpai.com  ld246.com kechuang.orgkc.kexinshe.com cn nga.cn 178.com ngabbs.com ngacn.cc saraba1st.com -52pojie.cn itsk.com -klpbbs.com  mcbbs.net  uiwow.com  fofa.info +52pojie.cn kafan.cn itsk.com  wuyou.net +klpbbs.com  mcbbs.net  uiwow.com right.com.cn +pcbeta.com  fofa.info leigod.com tmjiasuqi.com uu.163.com xunyou.combohejiasuqi.comjiasu.bohe.com ipip.netmyip.la -!cninfinitynewtab.com +!cn +dns.jd.com dns.weibo.cndns.weixin.qq.comdns.weixin.qq.com.cnhttpdns-api.aliyuncs.comhttpdns-sc.aliyuncs.comhttpdns.alicdn.comhttpdns.baidu.comhttpdns.baidubce.comhttpdns.bilivideo.comhttpdns.c.cdnhwc2.comhttpdns.meituan.comhttpdns.music.163.comhttpdns.n.netease.comhttpdns.push.oppomobile.comhttpdns.volcengineapi.comhttpsdns.baidu.comkuaishou.httpdns.prolofter.httpdns.c.163.commusic.httpdns.c.163.cominfinitynewtab.com inftab.com  ip138.com ipplus360.comkuaiduizuoye.com liulishuo.com llsapp.com -llscdn.com llsserver.com  feng1.comrongechain.comsf-airlines.comsf-cityrush.comsf-express.comsf-financial.com sf-saas.comsf-tech.com.cn sfcar.hk sffix.cn sfgy.org mcmod.cn36dianping.com 36kr.com 36krcdn.com 36krcnd.com cctv.cn cctv.com cctvpic.com chinaepg.cn chinalive.com citv.net.cn cnms.net.cn cntv.cn cntv.com.cn +llscdn.com llsserver.com baicizhan.com baicizhan.org +bczcdn.combczeducation.cn zhan.comburningvocabulary.cnburningvocabulary.com 423down.com ghxi.com  feng1.comrongechain.comsf-airlines.comsf-cityrush.comsf-express.comsf-financial.com sf-saas.comsf-tech.com.cn sfcar.hk sffix.cn sfgy.org mcmod.cn36dianping.com 36kr.com 36krcdn.com 36krcnd.com cctv.cn cctv.com cctvpic.com chinaepg.cn chinalive.com citv.net.cn cnms.net.cn cntv.cn cntv.com.cn cctvlib.cncctvlibrary.cncctvlib.com.cncctvlibrary.com.cn cctvpro.cncctvpro.com.cn  cntvwb.cn gjgbdszt.cngjgbdszt.com.cngjgbdszt.net.cn  ipanda.cn ipanda.com ipanda.com.cn @@ -11895,7 +12877,7 @@ ipanda.net livechina.cn livechina.comolympicchannelchina.cn  cns.com.cn ecns.cn  dgtle.com geekpark.nethoopchina.com.cn hupu.com hupucdn.com  shihuo.cn coolbuy.com  ifanr.com ifanr.inifanrusercontent.com ifanrx.com minapp.com jiemian.comjiemian.com.cn -lancdn.comlandiannews.com  wsoso.com landian.vip +lancdn.comlandiannews.com landian.vip landian.xyz ourl.co  wsoso.com fengcx.com  ifeng.com ifengimg.comphoenixcenter.cn fengedu.comifengweekly.com 6655.com cooldock.com ithome.com lapin365.com ruanmei.com saayaa.com win7china.com win8china.com sohu.com @@ -11919,7 +12901,9 @@ mypaas.com mypaas.com.cn myypark.com 123pan.com cloud.189.cn ctfile.com feimaoyun.com pan.baidu.com pan.quark.cn weiyun.com yun.139.com -yunpan.comaliyundrive.comyunpan.aliyun.com lanzoui.com lanzouw.com lanzoux.com +yunpan.comaliyundrive.comyunpan.aliyun.com baidupan.com ilanzou.com lanosso.com +lanzou.com lanzoub.com lanzouc.com lanzoue.com lanzouf.com lanzoug.com lanzouh.com lanzoui.com lanzouj.com lanzouk.com lanzoul.com lanzoum.com lanzouo.com lanzoup.com lanzouq.com lanzous.com lanzout.com lanzouu.com lanzouv.com lanzouw.com lanzoux.com lanzouy.com +lanzov.com woozooo.com cnmstl.net fofa.so t00ls.cc  t00ls.net tools.team  fuwai.com pkuh6.cn puh3.net.cnhospital.pku.edu.cnss.bjmu.edu.cn lkcoffee.comluckincoffeecdn.com yyds.co 17zuoye.cn 17zuoye.com 17zuoye.netapplysquare.comapplysquare.net @@ -11927,7 +12911,7 @@ cctalk.com  hjapi.com  hjfile.cn hujiang.com  yeshj.com koocdn.com koolearn.com koopass.com  baydn.com shanbay.com speiyou.com xesimg.com xueersi.com banmaaike.comxiaoyuankousuan.com ybccode.com yuanfudao.com yuansouti.com yuantiku.com zhihuishu.comrainclassroom.com yuketang.cn yudou.cn yushiyan.net xuetangx.com x-cloud.cc dgjy.net 91yunxiao.com aiyunxiao.com haofenshu.com iyunxiao.com yunxiao.comkeboyunxiao.com ketangpai.com  pigai.orgweilaiyunxiao.comchinesemooc.org -cnmooc.orgicourse163.org icourses.cn mooc.cnopenlearning.com pmphmooc.commoocs.unipus.cnopencourse.pku.edu.cn study.163.com +cnmooc.orgicourse163.org icourses.cn icve.com.cn mooc.cnopenlearning.com pmphmooc.commoocs.unipus.cnopencourse.pku.edu.cn study.163.com csdl.ac.cn iscas.ac.cn  las.ac.cn 16q.cn  5read.comaichaoxing.com chaoxing.cc chaoxing.com chaoxingv.com cxbiji.com hongbo100.com  lnlib.net mndqlib.net @@ -11956,22 +12940,30 @@ hongen.comwanfangdata.com.cn afdian.net afdiancdn.com agora.io agoraio.cn agoralab.co antutu.com bitauto.combitautoimg.com cheyisou.com  yiche.com  yccdn.com shimo.im  yuque.com  doc88.com  docin.com -douding.cncapitalonline.netmirrors.yun-idc.com chinaso.com +douding.cn&^ntp([1-7])?\.aliyun\.com$ +cn'^ntp([1-5])?\.tencent\.com$ +cncn.pool.ntp.org +cnntp.neu.edu.cn +cnntp.ntsc.ac.cn +cn +ntp.org.cn +cncapitalonline.netmirrors.yun-idc.com chinaso.com pg0.cn chinaz.com chinaz.net caiyunai.com caiyunapp.com coolapk.comcoolapkmarket.comcoolapkmarket.net c-t.workcowtransfer.com dida365.com allflow.cn  flowus.cnfoundertype.com geetest.com#geetest.datasink.sensorsdata.cn hellofont.cnhellowebfont.com0,hellofontpreview.oss-cn-beijing.aliyuncs.com-)hellowebfonts.oss-cn-beijing.aliyuncs.com hanyi.com.cnfontstar.com.cn jianshu.com -jianshu.io jinshuju.netjinshujucdn.com gotokeep.com keepcdn.com  lagou.com lgstatic.com baidupan.com -lanzou.com lanzoub.com lanzouc.com lanzoue.com lanzouf.com lanzoug.com lanzouh.com lanzoui.com lanzouj.com lanzouk.com lanzoul.com lanzoum.com lanzouo.com lanzoup.com lanzouq.com lanzous.com lanzout.com lanzouu.com lanzouv.com lanzouw.com lanzoux.com lanzouy.com woozooo.com  ldmnq.com +jianshu.io jinshuju.netjinshujucdn.com gotokeep.com keepcdn.com  lagou.com lgstatic.com  ldmnq.com liepin.com -lietou.comlietou-static.com mafengwo.cn mafengwo.com mafengwo.net  meitu.com meitudata.com meitustat.com moji.com mojichina.com newcoder.com nowcoder.com nowcoder.org  polyv.net videocc.net -renren.comrenren-inc.com vaptcha.com vaptcha.net wamawama.com +lietou.comlietou-static.com linakesi.com linakesi.cn lazycat.cloud heiyu.space mafengwo.cn mafengwo.com mafengwo.net  meitu.com meitudata.com meitustat.com moji.com mojichina.com newcoder.com nowcoder.com nowcoder.org  polyv.net videocc.net +renren.comrenren-inc.com tendcloud.comtalkingdata.comtalkinggame.com +cpatrk.net vaptcha.com vaptcha.net wamawama.com wiwide.com sojump.com wjx.cn wjx.com wjx.top  wolai.com -wol.tv wostatic.cn yinxiang.com zcmbc.com.cn zdns.cn zdns.net.cn zdns.org.cn zdnscloud.biz zdnscloud.cn zdnscloud.comzdnscloud.com.cnzdnscloud.info zdnscloud.netzdnscloud.net.cnzdnscloud.org.cn mihuashi.com bcy.net +wol.tv wostatic.cn yinxiang.com zcmbc.com.cn zdns.cn zdns.net.cn zdns.org.cn zdnscloud.biz zdnscloud.cn zdnscloud.comzdnscloud.com.cnzdnscloud.info zdnscloud.netzdnscloud.net.cnzdnscloud.org.cn mob.com +dutils.com accuratead.cn mihuashi.com tower.im udesk.cn xedge.cc bcy.net bcyimg.comlf-rc1.yhgfb-cn-static.com -douban.com  douban.fm doubanio.com  gracg.com procg.cn  zhihu.com  zhimg.comtieba.baidu.com  tieba.com aixcoder.com nnthink.com  apifox.cn +douban.com  douban.fm doubanio.com  gracg.com procg.cn  zhihu.com  zhimg.comtieba.baidu.com  tieba.com dandan818.comdandanvoice.com aixcoder.com nnthink.com  apifox.cn apifox.combaltamatica.com blogjava.net cnblogs.com cnitblog.com cnweblog.com cppblog.com phpweblog.net teachblog.net  coding.me coding.net codechina.net csdn.com csdn.net csdn.net.cn csdnimg.cn csto.com @@ -11984,15 +12976,23 @@ goproxy.cn goproxy.iojinrishici.com  juejin.cn  juejin.im xitu.iop1-juejin.byteimg.comp2-juejin.byteimg.comp3-juejin.byteimg.comp4-juejin.byteimg.comp5-juejin.byteimg.comp6-juejin.byteimg.comp7-juejin.byteimg.comp8-juejin.byteimg.comp9-juejin.byteimg.com dengguobi.comhouyicaiji.comjinglingbiaozhu.com oschina.net  pgyer.com tracup.com frontjs.comruby-china.orgrubyconfchina.orgsegmentfault.com  sifou.com mysxl.cn sxl.cn  sxlcdn.cn -tipdim.org openkylin.topubuntukylin.comxueyuanjun.com alibaba +tipdim.org openkylin.topubuntukylin.comxueyuanjun.com +asktug.com +pingcap.cn pingcap.com tidb.ai tidb.net tidbcloud.com tikv.org alibaba alipay taobao tmall a.alimama.cn adsacjs.aliyun.com +ads!adash-c.m.taobao.com +ads"adash-c.ut.taobao.com +ads0#adash-emas.cn-hangzhou.aliyuncs.com adsadash.m.taobao.com +ads#adash.man.aliyuncs.com ads!adashbc.m.taobao.com ads"adashbc.ut.taobao.com -ads"adash-c.ut.taobao.com ads adashx.m.taobao.com +adsadashx.ut.amap.com +adsadashx.ut.ele.me +ads adashx.ut.youku.com ads$adashx4ae.ut.taobao.com ads#adashx4yt.m.taobao.com ads#adashxgc.ut.taobao.com @@ -12003,20 +13003,17 @@ tipdim.org openkylin.topubuntukylin.comxueyuanjun.com alib ads#agoodm.wapa.taobao.com ads alipaylog.com adsamdc.alipay.com -adsamdc.m.taobao.com ads api.wapa.taobao.com ads#api.waptest.taobao.com adsapoll.m.taobao.com -ads#appdownload.alicdn.com adsatanx.alicdn.com adsatanx2.alicdn.com +ads!c-adash.m.taobao.com adscdn0.mobmore.com adsclick.aliyun.com ads&click.mz.simba.taobao.com adscm.ipinyou.com -ads cm.mlt01.com ads!dsp.simba.taobao.com -adserr.taobao.com adsex.mobmore.com ads ex.puata.info ads!fav.simba.taobao.com @@ -12031,6 +13028,10 @@ g.tbcdn.cn adsgtms02.alicdn.com adsgtms03.alicdn.com adsgtms04.alicdn.com +adsh-adashx.ut.ele.me +ads#h-adashx.ut.taobao.com +ads"h-adashx.ut.youku.com +ads&h-adashx4yt.ut.taobao.com adshydra.alibaba.com ads'hz.pre.tbusergw.taobao.net ads#hz.tbusergw.taobao.net @@ -12040,6 +13041,7 @@ g.tbcdn.cn ads$intl.waptest.taobao.com ads"jxlog.istreamsche.com adslog.umtrack.com +ads!m-adash.m.taobao.com adsm.intl.taobao.com adsm.simba.taobao.com adsmatch.p4p.1688.com @@ -12058,7 +13060,6 @@ g.tbcdn.cn adsrj.m.taobao.co adsrj.m.taobao.com adssdkinit.taobao.com -adsshow.re.taobao.com adssimaba.taobao.com adssimba.m.taobao.com ads!srd.simba.taobao.com @@ -12072,6 +13073,10 @@ g.tbcdn.cn ads tvupgrade.yunos.com adstyh.taobao.com adsuserimg.qunar.com +ads"v6-adashx.ut.amap.com +ads%v6-adashx.ut.cainiao.com +ads v6-adashx.ut.ele.me +ads$v6-adashx.ut.taobao.com adsw.m.taobao.com adsyiliao.hupan.com adsalibabacloud.co.inalibabacloud.comalibabacloud.com.aualibabacloud.com.hkalibabacloud.com.myalibabacloud.com.sgalibabacloud.com.tw alicloud.comalibabadns.com @@ -12112,7 +13117,8 @@ lazada.comliangxinyao.com m-now.cn maitix.com  mdeer.com mei.commiaostreet.com  mshare.cc nic.xinphilanthropy.xin phpwind.com phpwind.netqingtingtrip.com  rexpos.cn saee.org.cn shenjing.com  shuqi.comshuqireader.com sparenode.com  supet.com  ttpod.com wandoujia.com xin.xinxinlingshou.cn yowhale.com yunos-inc.com  yunos.comyushanfang.com zuodao.comaliexpress.com aliexpress.rualipayplus.com alipay.hk !cn alipaymo.com -!cnalicloudccp.comaliyundrive.comaliyundrive.net cainiao.comcainiao.com.cncainiao-inc.com freshhema.com hemamax.com +!cnalicloudccp.com +alipan.comaliyundrive.comaliyundrive.net cainiao.comcainiao.com.cncainiao-inc.com freshhema.com hemamax.com hemaos.com hemashare.cn shyhhema.comantfortune.com fund123.cn antfin.com antgroup.comantgroup-inc.cn sm.cn 1688.com etao.com juhuasuan.comlingshoujia.com @@ -12121,8 +13127,9 @@ taobao.com taobao.org taobaocdn.comtaobizhong.comtaopiaopiao.com tb.cn tbcache.com tburl.in  tmall.com tmall.ru tmalltv.com tmjl.ai quark.cn alitrip.com  feizhu.cn feizhu.com fliggy.com  fliggy.hk -iuynfg.com amap.com amapauto.com autonavi.com  gaode.com  xiami.com xiami.fm  xiami.net -koubei.com zhisheng.com npmmirror.com  b3log.org a.baidu.com +iuynfg.com a-map.cn a-map.co +a-map.link  a-map.vipacloudrender.com amap.com amapauto.com anav.com autonavi.com  gaode.com  xiami.com xiami.fm  xiami.net +koubei.com zhisheng.com npmmirror.com goofish.com  b3log.org a.baidu.com ads ad.duapps.com ads ad.player.baidu.com ads adm.baidu.com @@ -12140,9 +13147,7 @@ koubei.com zhisheng.com npmmirror.com  b3log.org a.baidu.com adsbaidutv.baidu.com adsbanlv.baidu.com ads bar.baidu.com -ads"bdimg.share.baidu.com adsbdplus.baidu.com -ads bj.bcebos.com adsbtlaunch.baidu.com ads c.baidu.com ads cb.baidu.com @@ -12150,11 +13155,8 @@ koubei.com zhisheng.com npmmirror.com  b3log.org a.baidu.com adscjhq.baidu.com adscleaner.baidu.com ads click.bes.baidu.com -adsclick.hm.baidu.com adsclick.qianqian.com -ads"cm.baichuan.baidu.com ads cm.baidu.com -adscm.pos.baidu.com ads cpro.baidu.cn adscpro.baidu.com ads!cpro.baidustatic.com @@ -12192,7 +13194,6 @@ koubei.com zhisheng.com npmmirror.com  b3log.org a.baidu.com ads#fc-feed.cdn.bcebos.com adsfclick.baidu.com adsfeed.baidu.com -adsfexclick.baidu.com ads g.baidu.com adsgimg.baidu.com adsguanjia.baidu.com @@ -12231,13 +13232,11 @@ koubei.com zhisheng.com npmmirror.com  b3log.org a.baidu.com ads rj.baidu.com adsrplog.baidu.com ads s.baidu.com -adss.cpro.baidu.com ads!sa.tuisong.baidu.com adssclick.baidu.com adssestat.baidu.com adsshadu.baidu.com adsshare.baidu.com -ads"snippet.pos.baidu.com adssobar.baidu.com adssobartop.baidu.com adsspcode.baidu.com @@ -12269,7 +13268,6 @@ koubei.com zhisheng.com npmmirror.com  b3log.org a.baidu.com ads$wenku-cms.bj.bcebos.com ads%wisepush.video.baidu.com ads wm.baidu.com -adswn.pos.baidu.com adsznsv.baidu.com adszz.bdstatic.com adszzy1.quyaoya.com @@ -12287,7 +13285,28 @@ hao123.com hao123img.com hao222.com haokan.com jomocdn.net jomodns.com mipcdn.com  nuomi.com quyaoya.com -shifen.com smartapps.cn  tieba.com tiebaimg.com xianfae.com xiaodutv.com larksuite.comlarksuitecdn.combyteoversea.com +shifen.com smartapps.cn  tieba.com tiebaimg.com xianfae.com xiaodutv.com sl916.com +cn bluepoch.com +cnactivity-zhendingtech.comchangdunovel.comfanqienovel.comfanqieopen.comfanqieopenpic.comfanqieopenstatic.comfanqieopenvod.com fanqiesdk.comfanqiesdkpic.comfanqiesdkstatic.comfanqiesdkvod.com fqnovel.com fqnovelim.comfqnovel-op.com fqnovelop.comfqnovelpic.comfqnovelstatic.comfqnovelvod.comihaohaoxuexi.com +muyewx.com novelfm.comnovelfmpic.comnovelfmstatic.comnovelfmvod.com qznovel.comqznovelpic.comqznovelstatic.comqznovelvod.comp3-novel.byteimg.comp6-novel.byteimg.com(ads3-normal-hl.zijieapi.com +ads(ads5-normal-hl.zijieapi.com +ads'log3-applog-hl.fqnovel.com +ads'log5-applog-hl.fqnovel.com +ads#p3-ad-sign.byteimg.com +ads#p6-ad-sign.byteimg.com +ads#p9-ad-sign.byteimg.com +ads)rtlog3-applog-hl.fqnovel.com +ads)rtlog5-applog-hl.fqnovel.com +ads anycross.com  blmpb.combytedancehermestest.comfalconsending.com +fei-shu.cn!feishu-3rd-party-services.comfeishu-boe.netfeishu-customer.cn feishu-pre.cnfeishu-pre.net feishu-psc.cnfeishu-staging.cn  feishu.cn +feishu.netfeishuapp-cdn.net feishuapp.cn feishuapp.com feishucdn.com feishudoc.cn feishudoc.comfeishuhuiyi.cnfeishuhuiyi.comfeishuimg-boe.comfeishuimg-pre.com feishuimg.comfeishukacdn.comfeishumeetings.cnfeishumeetings.comfeishuoffice.cnfeishuoffice.com feishuopenplatformrecord.com feishupkg.comfeishustatus.cn feishuvc.cn feishuvc.com getfeishu.cn getfeishu.com +getsays.cn getsays.com  lackvc.cnsecurityfeishu.cn securityfs.cnstatusfeishu.cn%!frontier-lark-lb-v3.lf.bytelb.netlark-passport-qa-sg.net lark.cn larkcloud.com larkcloud.net +larkfn.comlarkmeetings.cnlarkmeetings.comlarkoffice.comlarkoffice.com.bytedns1.comlarkofficeapp-boe.comlarkofficeapp-pre.comlarkofficeapp.comlarkofficeboe.comlarkofficecdn.comlarkofficeimg.comlarkofficepkg.comlarkofficepre.com larkrooms.cn larkrooms.comlarksuite-pre.com larksuite.comlarksuite.com.ttdns1.comlarksuite.com.ttdns2.comlarksuitecdn.comlarksuiteimg-boe.comlarksuiteimg-pre.comlarksuiteimg.com +larkvc.comstatuslarkoffice.comthelarkcloud.combaseopendev.com bytecloud.com +byteoc.combytewebservice.com +bytexns.cn bytexns.com bytexns.net bytexopen.combytexservice.com meegobeta.comoceancloudapi.com +okr.cn okr.com +okr.com.cnvscenevideo.combyteoversea.com !cn muscdn.com !cn @@ -12295,25 +13314,92 @@ musical.ly !cntik-tokapi.com !cn tiktok.com +!cntiktokcdn-us.com +!cn tiktokcdn.com !cn tiktokd.net !cn tiktokd.org -!cn tiktokcdn.com !cn tiktokv.com +!cn +tiktokv.us +!cn +tiktokw.us +!cn ttwstatic.com !cn,p16-tiktokcdn-com.akamaized.net -!cn  amemv.com -bytecdn.cnbyted-static.com  byted.org bytedance.com bytedance.netbytedanceapi.com bytedapm.com bytedns.netbytednsdoc.com bytedns1.com bytefcdn.com bytegecko.com bytegoofy.com bytegslb.com bytehwm.com byteimg.com byteintl.net -bytelb.netbyteoversea.com -!cn bytescm.com bytetcc.com bytetos.combytexservice.com feelgood.cn huaxiong.com ibytedapm.com ibytedtos.com +!cnbds.snssdk.com +adsctobsnssdk.com +ads dig.bdurl.net +adsextlog.snssdk.com +ads i.snssdk.com +adsmcs.snssdk.com +ads'pangolin-dsp-toutiao-b.com +ads%pangolin-dsp-toutiao.com +ads'pangolin-sdk-toutiao-b.com +ads%pangolin-sdk-toutiao.com +ads&pangolin-sdk-toutiao1.com +ads pangolin.snssdk.com +ads&panplayable-toutiao-b.com +ads$panplayable-toutiao.com +ads%pglstatp-sdk-toutiao.com +ads(pglstatp-snssdk-toutiao.com +ads#pglstatp-toutiao-b.com +ads!pglstatp-toutiao.com +ads%sf3-ttcdn-tos.pstatp.com +adsaigc-cloud.com bdegnine.com +bplslb.com  bpltm.com byte-dns.com byte-dns.net bytehouse.cnbyteinspire.cnbyteinspire.combytevdn-boe.com bytevdn.comcache4ever.com cache666.comcloudendpoint.cndouyincloud.netdouyincloud.run dycloudbk.com dycloud.runemr-volces.com +feilian.cn iccvlog.com ifeilian.cn ifeilian.cominspirecloud.cninspirecloud.comisealsuite.com ivolces.com kfcbest.com  kych5.commultilingual-volc.comqingfuwuapi.cnqingfuwucdn.com qingfuwu.cn qingfuwu.com slbauto.com  sms18.comtoutiaopanapi.comtoutiaopan.com +ttgslb.com  ttgtm.com vecdnlb.comvecloudgame.com vedcdnlb.com vedsalb.com veefdev.comveew-alb-cn1.comveew-alb-cn2.comveew-alb-ts.com +vegalb.com +vegslb.com  vegtm.net veicplive.comve-imcloud.com vemarsdev.comvemarsstatic.com vemarsweb.com vertciot.com vestack.cloudve-trafficroute.comve-trafficroute.netvolcadocean.com volcadvc.com volcalb.comvolcautovod.com volcbiz.com  volcca.cn +volcca.com +volcca.net volccdn1.com volccdn2.com +volccdn.cn volccdn.comvolcddos001.com volcddos.com volcdem.comvolcdlspace.cn +volcdn.com volc-dns.com volcdns.com volc-dns.net volc-dns.pub volcdns.pub volceapi.comvolceapplog.com volcecr.com volcecw.comvolc-embed.comvolcenginapi.comvolcenginealb.comvolcengineapi.com volcengine.cnvolcengine.comvolcengine-dns.comvolcenginedns.comvolcengine-dns.netvolcenginedns.netvolcengine.netvolcenginepaas.com +volces.com volcfake.comvolcfcdnbyte.com volcfcdn.comvolcfcdndvs.comvolcfcdnplus.comvolcfcdnrd.comvolcfcdnsc.comvolcfxgjrtm.com volcgroup.com volcgslb.com volcgtm.com volciad.com volcimagex.cnvolcimagex.comvolcimagex.netvolcimagextest.comvolcmagicpage.com volcmcdn1.com volcmcdn2.com volcmcdn3.com volcmcdn4.com volcmgs.comvolcmusecdn.com volcocic.comvolcopjrtm.comvolcpartner.comvolcpartner.netvolcsiriusbd.comvolcsirius.comvolcspaceeduc.comvolctracer.com volctrack.comvolctraffic.comvolctranscdn.com volcvideo.comvolcvideos.com volcvms.com volcvod.comvolcwaf001.com volcwaf.comwritingo-editor.com writingo.net  ytxptd.cn  ytxptz.cn zebracdn.com  zjytxd.cn  zjytxp.cn zvip.cn 99uri.cn  99uri.comactivity01.comactivity02.comactivity03.comactivity04.comactivity05.comactivitybyte.comactivity-dy.comactivity-wbsj.com +aihst8.comali-api-test.netali-gtm-01.netali-gtm-pressure.comali-restore.net amemv.cn  amemv.com  amemv.net arco.designawemeughun.comawemeuglang.comawemeugsoul.comawemeugwave.com baikevod.combdactivity.com +bdgslb.com bdispatch.com bdispatch.netbdns-api-test.net bdns-boe.com bdns-boe.netbdns-gtm-01.netbdns-gtm-pressure.combdns-restore.net bdns-test.com bdns-test.net  bdppe.net bdsagslb.combdsagslbtest.combdxigualive.combdxiguavod.combdzjdsagslb.com betaband.net betadance.net betastar.cn bfcdnbf.com bfcdnrd.com bfcdnsc.com boxdouyin.com +bvfcdn.com bx0byte.com byte000.com byte008.com +byte00.com +byte00.net byte7bw.net +byteac.com byteacct.combyteacctimg.combyteactivity11.combyteactivity12.combyteactivity13.combyteactivity14.combyteactivity15.combyteactivity16.combyteactivity.combyteadverts.com byteapi.com +bytecdn.cn bytecdn.com bytecdn.net bytecdntp.com bytecimg.combytedanceapi.combytedance-boe.net bytedance.cn bytedance.com bytedance.net bytedance.org bytedapm.com bytedcdn.combyted-dast.com byted-edu.combytedeliver.combytedgames.com bytedns1.com bytedns2.com bytedns3.com bytedns4.com bytedns5.com bytedns6.com bytedns7.com bytedns.combytednsdoc.com bytedns.net  byted.orgbytedsocial.combyted-static.com byted-ug.com byte-edge.combyte-edgeworker.com bytefae.com bytefast.net bytefcdn.combytefcdnrd.com bytegecko.combytegeckoext.com bytegoofy.com bytegqpo.netbytegrowth.com byte-gslb.com bytegslb.com bytehwm.com byteics.com byteics.net byteimgc.com byteimg.com byteintl.net bytelb000.net +bytelb.com +bytelb.net bytemaimg.combytemastatic.com bytemedi.com bytenewst.com byteorg.com byteorge.combyteoversea.com +!cn byteq5k.com byteq8u.net bytescm.com bytesslb.net bytetcc.com bytetech.info byte-test.cn byte-test.com byte-test.net bytetos.combytetraffic.netbytetstatic.combytetstatic.net bytevalk.combytevcloudvod.combytexservice.com cdnbuild.com cdnbuild.net cdndns1.com cdndns2.com cookicut.com doubo03.com douyinact.com douyinact.net douyinfe.comdraftstatic.com  druid.vip duoshan.comfedlearner.net feelgood.cn gslbdns.com gslbdns.net huaxiong.comhuoshancdn.comhuoshangroup.comhuoshanimg.comhuoshanlive.comhuoshanparty.comhuoshante8.comhuoshanvideo.cnhuoshanvideo.nethuoshanvod.comhuoshanxiaoshipin.cnhuoshanxiaoshipin.nethuoshanzhibo.cnhuoshanzhibo.nethypercachenet.comibdxigualive.comibdxiguavod.com ibytedapm.com ibytedtos.com !cn ibyteimg.com !cn -pstatp.com -snssdk.com  wtturl.cn zijieapi.com zijiecdn.com zijiecdn.net  zjbyte.cn  zjcdn.com toutiao.comtoutiaoapi.comtoutiaocdn.comtoutiaocloud.comtoutiaocloud.nettoutiaohao.comtoutiaohao.net toutiaoimg.cntoutiaoimg.comtoutiaoimg.nettoutiaopage.comtoutiaostatic.comtoutiaovod.com -douyin.com douyincdn.comdouyinliving.com douyinpic.comdouyinstatic.com douyinvod.com huoshan.comhuoshanstatic.comhuoshanzhibo.com +icphoto.cnidouyinliving.comidouyinpic.comidouyinstatic.comidouyinvod.com iesdouyin.com iesdouyin.net ieshuodong.cnieshuodong.net  ihst8.comihuoshanimg.comihuoshanlive.comihuoshanstatic.comihuoshanvod.com iluckysf.netitmanager.clubitoutiaoliving.comjokecommunity.cnjokecommunity.comjokecommunity.net  jstti.com +jtamac.com  kesong.co kolbuyer.cnlivecdnstatic.comlocal-ip.online luckysf.net modernjs.cn +myimis.com  ndcpp.comneihancommunity.cnneihancommunity.comneihancommunity.net nextvid.netneyetwatcher.com oortgslb.com openbcs.com  openve.cnoriginalimg.comoriginalstatic.comoriginalvod.com pacmantwo.comppkankan01.com +pstatp.comqingfuwucdn.net  qishui.cn +qishui.com qishui.com.cnqishuimusic.cnqishuimusic.com.cnqualitycloud.top samasty.comsearchstatic.comsearchtoutiaolive.comshidianguji.com +sinflb.net sinf.net sinf-test.net +snssdk.comsupercachenet.comtekkenthree.com tetrisone.com tiapi.cn  tiapi.net +tlbapm.com +toscdn.com toutiao11.com toutiao12.com toutiao13.com toutiao14.com toutiao15.com toutiaocdn.cntoutiaocdn.nettoutiaocloud.cntoutiaojisu.comtoutiaolite1.comtoutiaolite2.comtoutiaolite.comtoutiaoliving.comtoutiaopic.com toutiaowap.cntoutiaowap.comtoutiaowap.nettr-test-ali.nettr-testboe.net tr-test.net  ttbyte.cn +ttbyte.com +ttbyte.net +ttjisu.com ttwebview.comugshare-img.com vcloudapi.comvcloud-byte.comvestack-beta.comvestack-cicd.comvestack-preview.comvestack-sandbox.com vfcdnrd.comvolcanicengine.comvolcdns-test.comvolcdns-test.net +voleai.comwoaihuoshan.com +wohst8.com  wtturl.cn xiguaapp.cn xiguaapp.comxiguashipin.cnxiguashipin.net xiguavideo.cnxiguavideo.net xsgtvacct.com zijieapi.cn zijieapi.com zijieapi.net zijiecdn.cn zijiecdn.com zijiecdn.net zijiedj.com zijieimg.cn zijieimg.com zijieimg.netzijietiaodong.com zijieurl.cn zijieurl.com zijieurl.net zijiewap.cn zijiewap.com zijiewap.net +zilrms.com +ziyrta.com  zjbyte.cn +zjbyte.com +zjbyte.net  zjcdn.com +zjfcdn.com +zjgslb.com toutiao.comtoutiaoapi.comtoutiaocdn.comtoutiaocloud.comtoutiaocloud.nettoutiaohao.comtoutiaohao.net toutiaoimg.cntoutiaoimg.comtoutiaoimg.nettoutiaopage.comtoutiaostatic.comtoutiaovod.com +douyin.com douyincdn.comdouyinliving.com douyinpic.comdouyinstatic.com douyinvod.com huoshan.comhuoshanstatic.comhuoshanzhibo.com +doubao.com +cncoze.cn +cncoze.com +!cn ixigua.comixiguavideo.com ixgvideo.combdxiguaimg.combdxiguastatic.com  baike.com  feishu.cn feishu.net feishucdn.com feishupkg.com wukong.comwukongwenda.cnwukongwenda.com dcarapi.com dcarimg.com dcarlive.comdcarstatic.com dcarvod.com -dcdapp.com dongchedi.comdongchediapp.com  365yg.comgogokid.com.cn gogokid.com  pipix.com -muyewx.comchangdunovel.com  faceu.com ulikecam.com didi-food.comdidiaustralia.blogdidichuxing.comdidiglobal.comdidimobility.co.jpdidistatic.comxiaojukeji.com +dcdapp.com dongchedi.comdongchediapp.com  365yg.comgogokid.com.cn gogokid.com  pipix.com  faceu.com ulikecam.com +rsproxy.cn didi-food.com didi.cn didialift.comdidiaustralia.blogdidichuxing.comdidiglobal.comdidimobility.co.jpdidistatic.comdiditaxi.com.cn +udache.comxiaojukeji.com dji.com dji.net +djicdn.com +djiops.comdjiservice.org skypixel.com bisheng.cn cnbishengcompiler.cn cn devui.design @@ -12340,27 +13426,56 @@ gneec7.com cn owsgo.com cn teleows.com cn saasops.tech -cn  hc-cdn.cnhuaweicloud-dns.cnhuaweicloud-dns.com huaweicloud-dns.net +cnami-alliance.org.cn  b2bgo.comeduapaashwc.com  hc-cdn.cn +hc-cdn.com +hc-sre.comhuaweiapaas.cnhuaweiapaas.comhuaweicloud-dns.cnhuaweicloud-dns.com huaweicloud-dns.net !cn huaweicloud-dns.org -!cnhuaweicloud-smn.cnhuaweicloud-smn.comhuaweicloud-smn.nethuaweicloud.comhuaweicloudapis.cnhuaweicloudapis.comhuaweicloudlive.comhuaweimarketplace.comhuaweisafedns.cnhuaweisafehub.cn huaweiyun.cn huaweiyun.com hwcdnsre.comhwclouds-dns.cnhwclouds-dns.comhwclouds-dns.net hwclouds.cn hwclouds.mobihwclouds.org.cn hwcloudvis.cnhwcloudvis.comimc-oneaccess.cnimcapptest.com km6g.cn km7g.cn km8g.cn km9g.cn livehwc3.cnmyhuaweicloud.cn -myhwcdn.cn myhwcdn.commyhwcloudlive.commyhwclouds.com pagescube.cn pagescube.com powerapp.io)af-south-1.myhuaweicloud.com +!cnhuaweicloud-smn.cnhuaweicloud-smn.comhuaweicloud-smn.nethuaweicloud.cnhuaweicloud.comhuaweicloudapis.cnhuaweicloudapis.comhuaweicloudlive.comhuaweicloudsite.cnhuaweicloudsite.comhuaweicloudwaf.cnhuaweicloudwaf.comhuaweioneaccess.cnhuaweioneaccess.comhuaweimarketplace.comhuaweisafedns.cnhuaweisafedns.comhuaweisafehub.cn huaweisre.cn huaweisre.com huaweiyun.cn huaweiyun.com +hwastro.cn hwastro.com hwcdnsre.cn hwcdnsre.comhwclouds-dns.cnhwclouds-dns.comhwclouds-dns.net hwclouds.cn hwclouds.com hwclouds.mobihwclouds.org.cnhwcloudsite.cnhwcloudsite.com hwcloudvis.cnhwcloudvis.comimc-oneaccess.cnimcapptest.com km6g.cn km7g.cn km8g.cn km9g.cnkmcb-cn-east-3.cnkmcb-cn-north-4.cnkmop-cn-east-3.cnkmop-cn-north-4.cn livehwc3.cnmyhuaweicloud.cn +myhwcdn.cn myhwcdn.commyhwcloudlive.com myhwclouds.cnmyhwclouds.commyhwclouds.com.cnmyhwclouds.net pagescube.cn pagescube.com powerapp.io&ae-ad-1.myhuaweicloud.com +!cn)af-south-1.myhuaweicloud.com !cn- ap-southeast-1.myhuaweicloud.com !cn- ap-southeast-2.myhuaweicloud.com !cn- ap-southeast-3.myhuaweicloud.com -!cncn-east-2.myhuaweicloud.comcn-east-3.myhuaweicloud.com cn-north-1.myhuaweicloud.com cn-north-2.myhuaweicloud.com cn-north-3.myhuaweicloud.com cn-north-4.myhuaweicloud.com cn-north-5.myhuaweicloud.com cn-north-6.myhuaweicloud.com cn-north-9.myhuaweicloud.com$ cn-northeast-1.myhuaweicloud.com cn-south-1.myhuaweicloud.com cn-south-2.myhuaweicloud.com cn-south-4.myhuaweicloud.com$ cn-southwest-2.myhuaweicloud.com(eu-west-0.myhuaweicloud.com +!cn- ap-southeast-4.myhuaweicloud.com +!cncn-east-2.myhuaweicloud.comcn-east-3.myhuaweicloud.comcn-east-5.myhuaweicloud.com cn-north-1.myhuaweicloud.com!cn-north-11.myhuaweicloud.com cn-north-2.myhuaweicloud.com cn-north-3.myhuaweicloud.com cn-north-4.myhuaweicloud.com cn-north-5.myhuaweicloud.com cn-north-6.myhuaweicloud.com cn-north-9.myhuaweicloud.com$ cn-northeast-1.myhuaweicloud.com cn-south-1.myhuaweicloud.com cn-south-2.myhuaweicloud.com cn-south-4.myhuaweicloud.com$ cn-southwest-2.myhuaweicloud.com(eu-west-0.myhuaweicloud.com +!cn*eu-west-101.myhuaweicloud.com !cn)la-north-2.myhuaweicloud.com !cn)la-south-2.myhuaweicloud.com +!cn(me-east-1.myhuaweicloud.com !cn*na-mexico-1.myhuaweicloud.com !cn- ru-northwest-2.myhuaweicloud.com !cn*sa-brazil-1.myhuaweicloud.com -!cncdnhwchcg02.comcdnhwcurq03.comcdnhwczba04.comcdnhwclxw05.comcdnhwcupf06.comcdnhwcxcy07.comcdnhwcatq08.comcdnhwcztu09.comcdnhwcedi10.comcdnhwcoem01.comcdnhwcllh11.comcdnhwcjog12.comcdnhwcpsd13.comcdnhwcqwg14.comcdnhwcqir15.comcdnhwcvix16.comcdnhwcajk17.comcdnhwcchh18.comcdnhwcohm19.comcdnhwczjt20.comcdnhwcggk22.comcdnhwczth23.comcdnhwctxz24.comcdnhwcgrb01.cncdnhwcyxb02.cncdnhwcywp03.cncdnhwclkl04.cncdnhwcjbj05.cncdnhwconz06.cncdnhwcgqa21.comcdnhwckbw08.cncdnhwcsjs09.cncdnhwcjkl10.cncdnhwctmz11.cncdnhwcrpp12.cncdnhwcpqh13.cncdnhwcxsi14.cncdnhwcfzp15.cncdnhwcgvs16.cncdnhwcrgg07.cncdnhwceft18.cncdnhwccvo19.cncdnhwcbvo20.cncdnhwcdkd21.cncdnhwcdvg22.cncdnhwclnh23.cncdnhwckfd24.cncdnhwczxh101.comcdnhwcbzj102.comcdnhwcjqv17.cncdnhwcljk104.comcdnhwclxu105.comcdnhwcbqs106.comcdnhwctnm107.comcdnhwcbni108.comcdnhwczks109.comcdnhwcick110.comcdnhwcead111.comcdnhwcjlg112.comcdnhwckon103.comcdnhwczmn114.comcdnhwcqgw115.comcdnhwckfz116.comcdnhwcqve117.comcdnhwcgnc118.comcdnhwcuim119.comcdnhwcjsb120.comcdnhwccmz121.comcdnhwcibv122.comcdnhwcprh113.comcdnhwcedt124.comcdnhwcofl101.cncdnhwclrd102.cncdnhwcurr103.cncdnhwczid104.cncdnhwcqvk105.cncdnhwczoy106.cncdnhwcuwd107.cncdnhwcogx108.cncdnhwcoph123.comcdnhwceod109.cncdnhwcpcw110.cncdnhwczic111.cncdnhwcozb112.cncdnhwcqrr114.cncdnhwcaoc115.cncdnhwctyd116.cncdnhwcidu117.cncdnhwclsl119.cncdnhwcsux118.cncdnhwcbie120.cncdnhwcuxc121.cncdnhwcaip122.cncdnhwcwqz113.cncdnhwcojn124.cncdnhwcscc123.cn#.+\.cdnhwc([1-9]|10)\.(cn|com)$ abhouses.comagconnect.link  dbank.com dbankcdn.comdbankcloud.com hicloud.com hihonor.com honor.cn  huawei.cn +!cn(tr-west-1.myhuaweicloud.com +!cncdnhwchcg02.comcdnhwcurq03.comcdnhwczba04.comcdnhwclxw05.comcdnhwcupf06.comcdnhwcxcy07.comcdnhwcatq08.comcdnhwcztu09.comcdnhwcedi10.comcdnhwcoem01.comcdnhwcllh11.comcdnhwcjog12.comcdnhwcpsd13.comcdnhwcqwg14.comcdnhwcqir15.comcdnhwcvix16.comcdnhwcajk17.comcdnhwcchh18.comcdnhwcohm19.comcdnhwczjt20.comcdnhwcggk22.comcdnhwczth23.comcdnhwctxz24.comcdnhwcgrb01.cncdnhwcyxb02.cncdnhwcywp03.cncdnhwclkl04.cncdnhwcjbj05.cncdnhwconz06.cncdnhwcgqa21.comcdnhwckbw08.cncdnhwcsjs09.cncdnhwcjkl10.cncdnhwctmz11.cncdnhwcrpp12.cncdnhwcpqh13.cncdnhwcxsi14.cncdnhwcfzp15.cncdnhwcgvs16.cncdnhwcrgg07.cncdnhwceft18.cncdnhwccvo19.cncdnhwcbvo20.cncdnhwcdkd21.cncdnhwcdvg22.cncdnhwclnh23.cncdnhwckfd24.cncdnhwczxh101.comcdnhwcbzj102.comcdnhwcjqv17.cncdnhwcljk104.comcdnhwclxu105.comcdnhwcbqs106.comcdnhwctnm107.comcdnhwcbni108.comcdnhwczks109.comcdnhwcick110.comcdnhwcead111.comcdnhwcjlg112.comcdnhwckon103.comcdnhwczmn114.comcdnhwcqgw115.comcdnhwckfz116.comcdnhwcqve117.comcdnhwcgnc118.comcdnhwcuim119.comcdnhwcjsb120.comcdnhwccmz121.comcdnhwcibv122.comcdnhwcprh113.comcdnhwcedt124.comcdnhwcofl101.cncdnhwclrd102.cncdnhwcurr103.cncdnhwczid104.cncdnhwcqvk105.cncdnhwczoy106.cncdnhwcuwd107.cncdnhwcogx108.cncdnhwcoph123.comcdnhwceod109.cncdnhwcpcw110.cncdnhwczic111.cncdnhwcozb112.cncdnhwcqrr114.cncdnhwcaoc115.cncdnhwctyd116.cncdnhwcidu117.cncdnhwclsl119.cncdnhwcsux118.cncdnhwcbie120.cncdnhwcuxc121.cncdnhwcaip122.cncdnhwcwqz113.cncdnhwcojn124.cncdnhwcscc123.cn o7mu8.cn 59bob.cn tc3bl.cn hiu58.cn kfomn.cn azkr2.cn vm45e.cn buf35.cn uwtmy.cn fpxyo.cn tm2a8.cn r8zc9.cn 6ts7c.cn 2gkjr.cn ns95c.cn tm7sg.cn le5vb.cn y43f6.cn 8n82b.cn x9exk.cn ms2tg.cn ka9bv.cn acgab.cn mle5p.cn 26r9y.cn 9coof.cn tzygd.cn z95rr.cn 3ili6.cn vo6z2.cn lu1da.cn ivwi3.cn 7k2k1.cn cza84.cn 8gcdp.cn kma1g.cn 576nt.cn#.+\.cdnhwc([1-9]|10)\.(cn|com)$ abhouses.comagconnect.link  dbank.com dbankcdn.comdbankcloud.com hicloud.com hihonor.com honor.cn  huawei.cn huawei.com huawei.com.cnhuaweiacad.com huaweiief.cn huaweiief.comhuaweistatic.com  hwccpc.cn hwccpc.com hwht.cn hwocloud.com hwtrip.comshanhaitujian.com  vmall.com vmallres.com iflytek.com  xunfei.cn ets100.com -zhixue.com changyan.com xunfeixxj.com cmcm.com cmcmcdn.com  liebao.cn duba.com duba.net ijinshan.comseasungames.com xishanju.com xoyo.com testplus.cn +zhixue.com changyan.com xunfeixxj.com 315dian.com +doucang.cn doucang.com +drp321.com +erp.cn  erp321.cn +erp321.com +erp321.net  jsterp.cn jugongdan.com jushuitan.cn jushuitan.com jushuitan.netjushuitan-inc.com juxieyun.com  scm121.cn +scm121.com +shopss.com shuiyaohuo.cnshuiyaohuo.com  surerp.cn +surerp.com +sursung.cn sursung.com cmcm.com cmcmcdn.com  liebao.cn duba.com duba.net ijinshan.comseasungames.com xishanju.com xoyo.com testplus.cn wps.cn wps.com  51dzt.com  iciba.com  docer.com kdocs.cn papocket.com  wpspdf.cn kimg.cn kingsoft.com ksmobile.com -ks-cdn.com ks-cdn1.com  ksyun.com ksyuncdn.com ksyungslb.com flyme.cn meizu.cn  meizu.com  mzres.com 126.com 126.link 126.net 127.com 127.net 163.com 163cn.tv163industry.com 163mail.com 163qiyukf.com +ks-cdn.com ks-cdn1.com  ksyun.com ksyuncdn.com ksyungslb.com +lenovo.net +baiying.cnbaiying.com.cncftsupport.comcon-c-hybris.lenovo.comileapcloud.comlenovocloudos.com  lenovo.cn +lenovo.com lenovo.com.cnlenovoeservice.comlenovovip.com.cn  lxzjjt.cn +lxzjjt.comthinkcloudlab.com thinkpad.comzhiliaowenda.com.cn blurdev.comchainedbox.com  fm365.com +idea123.cn jhwan.com.cn juhuiwan.comjuhuiwan.com.cn juhuiwan.net lenauth.comlenovogame.com lenovomm.cn lenovomm.com +lx.pub +lx.run surepush.cn +zui.cn zui.com +zuk.cn zuk.com +zuk.com.cnlenovocare.com.cn lenovocust.cnlenovomobile.comcunchuhulian-ln.cnlenovonetapp.com +dayin8.comiprintworks.cnlenovoimage.cnlenovoimage.comlenovoprinter.comlenovoprinter.com.cnlenovoprinter.netthinkprinter.cnthinkprinter.com.cnthinkprinter.net +zxsales.cn!lenovo.com.cdn.cloudflare.net flyme.cn meizu.cn  meizu.com  mzres.com 126.com 126.link 126.net 127.com 127.net 163.com 163cn.tv163industry.com 163mail.com 163qiyukf.com 163yun.com 166.com 166.net haowu.linkicourse163.org  kaola.com lofter.com  nease.netnetease-inc.com netease.com @@ -12400,11 +13515,8 @@ youhua.com  yunpan.cn 2016.sina.cn ads atm.sina.com adsbeacon.sina.com.cn ads biz.weibo.com -adsc.biz.weibo.com -ads!c.wcpt.biz.weibo.com ads%click.uve.mobile.sina.cn ads click.uve.weibo.com -adscm.dmp.sina.cn ads0#contentrecommend-out.mobile.sina.cn ads$count.video.sina.com.cn ads counter.sina.com.cn @@ -12419,17 +13531,11 @@ youhua.com  yunpan.cn 2016.sina.cn adsgame.weibo.com ads"gw5.push.mcp.weibo.cn ads"gw6.push.mcp.weibo.cn -ads"img.adbox.sina.com.cn -ads#img.amp.ad.sina.com.cn ads"int.dpool.sina.com.cn ads%interest.mix.sina.com.cn -ads)log.interest.mix.sina.com.cn ads log.mix.sina.com.cn ads log.sina.cn -ads!m.beacon.sina.com.cn -adsm.game.weibo.cn ads!mg.games.sina.com.cn -ads!motu.p4p.sina.com.cn adsnewspush.sinajs.cn ads oascentral.sina.com ads#oascentral.sina.com.hk @@ -12439,10 +13545,8 @@ youhua.com  yunpan.cn 2016.sina.cn adspfp.sina.com.cn adspfpip.sina.com ads!promote.biz.weibo.cn -ads r.dmp.sina.cn adsrm.sina.com.cn ads rs.sinajs.cn -adss.alitui.weibo.com ads"s.img.mix.sina.com.cn ads sapi.sina.cn ads sax.sina.cn @@ -12466,22 +13570,24 @@ youhua.com  yunpan.cn 2016.sina.cn ads$wbpctips.mobile.sina.cn adswidget.weibo.com ads woocall.sina.com.cn -adszc.biz.weibo.com adszymo.mps.weibo.com ads  97973.com picself.cn sina.cn sina.com sina.com.cn sina.net sinaapp.com sinaedge.com sinaimg.cn sinaimg.com  sinajs.cn -sinajs.comt.cn videoself.cn  wbimg.com wbimg.cn wcdn.cn weibo.cn  weibo.com weibo.com.cn weibocdn.com xhaiwai.com -go2map.com sogo.com  sogou.com sogoucdn.com comsenz.com +sinajs.comt.cn videoself.cn  wbimg.com wbimg.cn wcdn.cn weibo.cn  weibo.com weibo.com.cn weibocdn.com xhaiwai.combinglianhuajianzhan.com ggoplay.com +ggowan.com +go2map.com  pinyin.cn +qd.ink sg.cn +sgtmos.com sgyeyou.com sgyouxi.com sogo.com sogou.cn  sogou.com sogou.com.cn  sogou.net sogoucdn.comsogoucdndl.comsogouimecdn.com sogou-inc.com sogou-op.org soso.com soso.com.cn sososnap.com teemo.cnwannianqingjianzhan.comxiangrikuijianzhan.comxiangrikuisite.com  xinyan.cn yeyousg.comyidianliulan.cnyidianliulan.comyuweikuijianzhan.com comsenz.com discuz.net discuz.org dns.pub  dnsapi.cn  dnspod.cn dnspod.com dnspod.com.cn dnspod.mobi dnspod.net -dnspod.org  dnsv2.com  dnsv3.com  dnsv4.com  dnsv5.com doh.pub acctdns.com acctdns.net aitransfy.comapaas-zone-test.comapigwtencent.com bkapigw.com +dnspod.org  dnsv2.com  dnsv3.com  dnsv4.com  dnsv5.com doh.pub dot.pub acctdns.com acctdns.net aitransfy.comapaas-zone-test.comapigwtencent.com bkapigw.com bkapps.com bkclouds.cc bktencent.com build9s.iobyodonline.com  cdn-go.cn cdndoctor.com cdngot.com -cdntip.com cdntips.com cdntips.net cdnv1.cn cdnv2.cn cdnv3.cn cloud-industry-delivery.site cloudbase.cn cloudbase.netcloudidaas.com cloudsite.vip cncqcloud.comcomputeinit.com coolsite.vip  dnsv1.com dnsv1.com.cn dothework.cn ectencent.cnectencent.com.cn +cdntip.com cdntips.com cdntips.net cdnv1.cn cdnv2.cn cdnv3.cn cloud-industry-delivery.site cloudbase.cn cloudbase.netcloudidaas.com cloudsite.vip cncqcloud.comcomputeinit.com coolsite.vip  dnsv1.com dnsv1.com.cn dothework.cn ectencent.cnectencent.com.cnedgeonedy1.com essurl.com exmailgz.com fsphere.cngaapqcloud.com gitdrone.cn  gmedev.cn govqcloud.com gsadds.com gtm.pub hr-welink.comidcgcloudcs.com  iemiq.com igtm.pubintltencentcos.com @@ -12568,7 +13674,7 @@ yufuid.net yunjitele.com.+\.dnse[0-5]\.(cn|com)$'#.+\.tdnsv([1-9] ads push.qq.com ads pgdt.gtimg.cn ads ugdtimg.com -ads openmidas.com  qq.designqqgamedesign.comtencent.design tjstats.comwegamedeveloper.comweui.io +ads openmidas.com  qq.designqqgamedesign.comtencent.design tjstats.comwegamedeveloper.comweixinbridge.comweui.io cnbattlecare.net cn gameitop.com cn gameloop.com @@ -12653,7 +13759,8 @@ wegame.com scescdn.cn cnscid.cn cn scsentry.cn -cn supercell.com!supercellcommunity.cn +cn supercell.com +!cn!supercellcommunity.cn cnsupercellsupport.cn cncodm.com cnbcfmglobal.com @@ -12672,9 +13779,12 @@ qqmail.com  qzone.com rtx.com.cnservicewechat.com tencent.cn tencent.co.id !cn tencent.comtencent.com.cntencent.com.hk tencent.nettencent.net.cntencentmusic.com -tenpay.com -wechat.com -weiyun.com alloyteam.com imweb.io ivweb.io  fyeds.com +tenpay.com  tfogc.com +wechat.com wechatpay.cn +weiyun.comwetv.vip +!cn wetvinfo.com +!cn wetv.qq.com +!cn alloyteam.com imweb.io ivweb.io  fyeds.com fyeds0.com fyeds1.com fyeds3.com @@ -12683,14 +13793,33 @@ fyeds5.com fyeds6.com fyeds7.com fyeds8.com -fyeds9.com fymall0.com fymall1.com fymall4.com fymall7.com fymall9.com fymallqa0.com fymallqa1.com fymallqa2.com fymallqa3.com fymallqa4.com fymallqa7.com fymallqa9.com -mi.com -mi-img.com  mifile.cn miui.com +fyeds9.com fymall0.com fymall1.com fymall4.com fymall7.com fymall9.com fymallqa0.com fymallqa1.com fymallqa2.com fymallqa3.com fymallqa4.com fymallqa7.com fymallqa9.com thtf.com.cntongfangpc.com mechrevo.com vivo.com vivo.com.cnvivoglobal.com +!cn a.market.xiaomi.com +adsad.intl.xiaomi.com +ads ad.mi.com +ads ad.xiaomi.com +adsad1.xiaomi.com +adsadmob.xiaomi.com +ads"adv.sec.intl.miui.com +adsadv.sec.miui.com +ads"misc.in.duokanbox.com +adsmistat.xiaomi.com +adssentry.d.mi.com +ads sentry.d.xiaomi.net +ads tjqonline.cn +ads"tracker.ai.xiaomi.com +adstracking.miui.com +ads +mi-img.com +mi.com  mifile.cn miui.com miwifi.com  xiaomi.cn xiaomi.com -xiaomi.netxiaomiyoupin.com +xiaomi.net xiaomiev.comxiaomimobile.comxiaomiyoupin.com +saxyit.com sandai.netthunderurl.com -xunlei.com  00cdn.com  88cdn.com  p2cdn.comthundercdn.com xycloud.com  xycdn.com  ezpro.pro 10099.com.cn +xunlei.com  00cdn.com  88cdn.com  p2cdn.comthundercdn.com xycloud.com  xycdn.com nubia.cn  nubia.com redmagic.com +zte.com.cn ztemall.com  ztems.combbs.ztedevices.comwww.ztedevices.comztedevices.com +!cn  ezpro.pro 10099.com.cn chn.cn  ahitv.com  cqccn.com gcable.com.cn sc96655.com  isxtv.com sdgdwljt.com 10086.cn 139.comchinamobile.comchinamobileltd.com migucloud.com migu.cn cmvideo.cn miguvideo.com andfx.cn  andfx.net cmicrwx.cncmpassport.comfetion-portal.com fetionpic.com mmarket.com mmarket6.com @@ -12698,14 +13827,22 @@ ctexcel.ca ctexcel.comctexcel.com.hk ctexcel.fr ctexcel.us 189.cnchinatelecom-h.comchinatelecom.com.cnchinatelecomglobal.com -chntel.com  10010.com 10010.com.cn 114menhu.comchinaunicom.comchinaunicom.com.cnchinaunicom.com.hkchinaunicomglobal.commychinaunicom.com  wo.com.cn jikipedia.com qiuwen.wikishidianbaike.com  51nod.com +chntel.com  10010.com 10010.com.cn 114menhu.comchinaunicom.comchinaunicom.com.cnchinaunicom.com.hkchinaunicomglobal.commychinaunicom.com wo.cn  wo.com.cn wo116114.com jikipedia.com qiuwen.wikishidianbaike.com  51nod.com acwing.com hihocoder.com jisuanke.com luogu.com.cn oi-wiki.com openjudge.cn -uoj.ac  vijos.org -j-test.comnattest-china.com itdog.cnwebmasterhome.cnguoxuedashi.com guoxuemi.com mojidict.com 8btc.com bystack.com chainnode.com matpool.com matpool.net jbcz.tvjibencaozuo.commedia.paperclipclub.netsinopec-usa.com sinopec.comsinopecgroup.comsinopecnews.com.cnsinopecsales.comaiqicha.baidu.comhongdunwang.com.cn qcc.com qichacha.com qichamao.com  qixin.com qyyjt.cn jindidata.comtianyancha.com x315.com upe.netsuzuki-china.com chugou360.com ycrx360.com jikeiot.cloud +uoj.ac  vijos.org leetcode.cnleetcode-cn.com lingkou.xyz lingkou.com +lingkou.cn +j-test.comnattest-china.com itdog.cnwebmasterhome.cnguoxuedashi.com guoxuemi.com mojidict.com 8btc.com bystack.com chainnode.com matpool.com matpool.net jbcz.tvjibencaozuo.commedia.paperclipclub.netsinopec-usa.com sinopec.comsinopecgroup.comsinopecnews.com.cnsinopecsales.comaiqicha.baidu.comhongdunwang.com.cn qcc.com qichacha.com qichamao.com  qixin.com qyyjt.cn jindidata.comtianyancha.com x315.com winos.me upe.netsuzuki-china.com chugou360.com ycrx360.com jikeiot.cloud zyh365.com cyol.com webterren.combjyouth.gov.cn bjyouth.net sqqnh.cn  sqqnh.orggongqingyun.cn jzfz.net  sumkoo.cn sumkoo.com sumkoo.net  veeqi.netwenmingban.com zhiyuanhe.cnzhiyuanyun.com.cn zyhe.com.cn -zzdtec.com0123456789.com 0379home.com +zzdtec.com +aitcfw.com +aizgtc.com hangzhouyq.cnhangzhouyq.com +zgxytc.com  zgzsa.com zhonshian.cn zhonshian.comzhonshian.com.cn  zjzsa.com  diiing.cndingdachuxing.comdingdatech.com jintdev.comxiangbababus.comguanggaotongapp.cnjutongbao.online jutongbao.top  hupun.com hupun.com.cn kata.com.cn +newniu.com wanliniu.com 1tyy.cn bbdc.cn beingfine.cnbeingfine.com.cn bubei.com.cn +coolab.top +is-cool.cnis-cool.com.cn langeasy.cnlangeasy.com.cnlearnywhere.cnlearnywhere.com.cn +qlisten.cn qtyy.cn0123456789.com 0379home.com 055110.com  05sun.com 0759job.com  100bt.com 100offer.com  11467.com 114chn.com 114piaowu.com 114shouji.com 119you.com 123juzi.com 123juzi.net 123u.com 1637.com  16888.com 16rd.com  17173.com 178linux.com  17989.com  17cdn.com 17house.com  18183.com 188.com 1905.com  19yxw.com 1nongjing.com  1ting.com 1zhe.com 21cn.com 2265.com 2288.org 2345.com 258.com 263.net 289.com 2cto.com 3000.com @@ -12804,7 +13941,7 @@ kiyuu.club kkzj.com kongfz.com kouclo.com koudai.com koudai8.com kq7.com  ksord.com  kuaaa.com kuaidi100.com kuaihou.com kuaizhan.com  kuqin.com -kuyiso.com lady8844.com lanhuapp.com laomaotao.net laomaotao.org  lascn.net  lawxp.com leangoo.com leanote.com ledu.comleetcode-cn.com leikeji.com leiphone.com leiting.com leju.com leturich.org lianmishu.com +kuyiso.com lady8844.com lanhuapp.com laomaotao.net laomaotao.org  lascn.net  lawxp.com leangoo.com leanote.com ledu.com leikeji.com leiphone.com leiting.com leju.com leturich.org lianmishu.com liantu.com lianzhuli.comliaoxuefeng.com liba.com libaclub.comlieyunwang.com lightonus.com likuso.com lingkou.com linkvans.com  linsn.com linuxidc.com liqucn.com liulanqi.net liuxiaoer.com live800.com liweijia.com lixinger.com lkkbrand.com longhoo.net @@ -12836,7 +13973,6 @@ oneyac.comonlinedown.netonlinesjtu.com onlylady.com opdown.com oray.com  ottcn.com oupeng.com p2peye.com p5w.netpaipaibang.com paopaoche.net pc6.com -pcbeta.com pchome.net  pcpop.com  peccn.com pgzs.compharmacodia.com piaoliang.compingplusplus.com pingwest.com pingxx.com pintu360.com  pipaw.com  pipaw.net pptbest.com pubyun.com  qc188.com qcds.com qd8.com qd-metro.com qh24.com qiangbus.com qianjia.com qianlima.com qianzhan.comqiaobutang.com qichacha.com @@ -12850,7 +13986,7 @@ sanwen.net  scdng.com scoregg.com sczsxx.com sdo.com sec-wiki.com sencdn.com seniverse.comsenlinjimore.com sgamer.com shanbay.com shang360.com -shangc.netshanghairc.comshangshi360.com shangzhibo.tvshanshuihotel.com sharejs.com shebiaotm.comshelter-china.comshelterdome.netshengdaosoft.comshenmayouxi.com  sheui.com shijiexia.com shixiseng.com shmetro.comshoujihuifu.comshouyoubus.com shrbank.com  shssp.orgshuidichou.comshuidihuzhu.com shumensy.comshuoshuokong.com +shangc.netshanghairc.comshangshi360.com shangzhibo.tvshanshuihotel.com sharejs.com shebiaotm.comshelter-china.comshelterdome.netshengdaosoft.comshenmayouxi.com  sheui.com shijiexia.com shixiseng.com shmetro.comshoujihuifu.comshouyoubus.com  shssp.orgshuidichou.comshuidihuzhu.com shumensy.comshuoshuokong.com shutcm.com simei8.com simuwang.com sinesafe.com  sjwyx.com  skycn.com sllssrq.com snimay.com  sobot.com sofreight.com softwhy.com @@ -12897,12 +14033,20 @@ zpb365.com zrblog.net zsxq.com  zuche.com zuchecdn.com zuhaowan.com zuidaima.com zuowen8.comzuowenwang.net fm3838.comlarsonlimited.com runsheng.com vzuu.com zoom3g.com -zoomyou.cn +zoomyou.cn ecombdapi.com +fspcdn.com +fun.tv funshion.com funshion.net ibidian.com jvcsmart.cnjvcsmart.com.cn  feidee.cn +feidee.com +feidee.net ssjlicai.com sui.com +narwal.comnarwaltech.com roborock.com +huaban.com  dancf.com kujiale.com wss.zonehisensehitachi.com moseeker.com anmo.com djdjapp.com dongjiao.ccdongjiaoapp.com  GETTYIMAGESgettyimages.aegettyimages.atgettyimages.begettyimages.cagettyimages.chgettyimages.co.jpgettyimages.co.nzgettyimages.co.ukgettyimages.comgettyimages.com.augettyimages.com.brgettyimages.com.mxgettyimages.degettyimages.dkgettyimages.esgettyimages.figettyimages.frgettyimages.hkgettyimages.iegettyimages.ingettyimages.itgettyimages.nlgettyimages.nogettyimages.ptgettyimages.se  GFYCAT gfycat.com +1 +GIFFGAFF giffgaff.comgiffgaff.design  GIGABYTE  aorus.com aoruszone.cn cn gigabyte.cn @@ -12914,24 +14058,25 @@ gfycat.com gitbook.io $ GITEE  gitee.com gitee.io - + GITHUB npm.community  npmjs.com  npmjs.org atom.iodependabot.com ghcr.io git.io github.blog github.comgithub.community -github.dev  github.io githubapp.comgithubassets.comgithubhackathon.comgithubpreview.devgithubstatus.comgithubuniverse.comgithubusercontent.com myoctocat.comopensource.guide repo.newthegithubshop.com!github-cloud.s3.amazonaws.comFBgithub-production-release-asset-[0-9a-za-z]{6}\.s3\.amazonaws\.com +github.dev  github.io githubapp.comgithubassets.comgithubhackathon.comgithubnext.comgithubpreview.devgithubstatus.comgithubuniverse.comgithubusercontent.com myoctocat.comopensource.guide repo.newthegithubshop.comblob.core.windows.net!github-cloud.s3.amazonaws.comHD^github-production-release-asset-[0-9a-za-z]{6}\.s3\.amazonaws\.com$ ~ GITLAB gitlab.com  gitlab.io gitlab.netgitlab-static.net.*gitlab-assets.oss-cn-hongkong.aliyuncs.com GITV gitv.cn gitv.tv - + -GLOBALSIGN alphassl.comglobalsign-media.com globalsign.be globalsign.chglobalsign.co.ukglobalsign.comglobalsign.com.auglobalsign.com.hkglobalsign.com.sg globalsign.es globalsign.eu globalsign.frglobalsign.net globalsign.nlcrl2.alphassl.com -cnocsp.globalsign.com -cn ocsp2.globalsign.com -cn!secure.globalsign.com -cn secure2.alphassl.com +GLOBALSIGN alphassl.com +cneasy-signing.com +cnglobalsign-media.com globalsign.be globalsign.chglobalsign.cloud globalsign.cn +cnglobalsign.co.ukglobalsign.com +cnglobalsign.com.auglobalsign.com.brglobalsign.com.hkglobalsign.com.sg globalsign.es globalsign.eu globalsign.frglobalsign.net globalsign.nlglobalsigncdn.com +cn4(cdn.globalsigncdn.com.cdn.cloudflare.net cn @ GLOBALVOICESglobalvoices.orgglobalvoicesonline.org @@ -12960,12 +14105,15 @@ golang.net golang.org 1 GOODREADS goodreads.com gr-assets.com - -GOOGLE android.comandroidify.com blogger.com blogblog.com blogspot.ae blogspot.al blogspot.am blogspot.ba blogspot.be blogspot.bg blogspot.bj blogspot.ca blogspot.cf blogspot.ch blogspot.clblogspot.co.atblogspot.co.idblogspot.co.ilblogspot.co.keblogspot.co.nzblogspot.co.ukblogspot.co.za blogspot.comblogspot.com.arblogspot.com.aublogspot.com.brblogspot.com.byblogspot.com.coblogspot.com.cyblogspot.com.eeblogspot.com.egblogspot.com.esblogspot.com.mtblogspot.com.ngblogspot.com.trblogspot.com.uy blogspot.cv blogspot.cz blogspot.de blogspot.dk blogspot.fi blogspot.fr blogspot.gr blogspot.hk blogspot.hr blogspot.hu blogspot.ie blogspot.in blogspot.is blogspot.it blogspot.jp blogspot.kr blogspot.li blogspot.lt blogspot.lu blogspot.md blogspot.mk blogspot.mx blogspot.my blogspot.nl blogspot.no blogspot.pe blogspot.pt blogspot.qa blogspot.re blogspot.ro blogspot.rs blogspot.ru blogspot.se blogspot.sg blogspot.si blogspot.sk blogspot.sn blogspot.td blogspot.tw blogspot.ug blogspot.vn dart.dev dartlang.org dartpad.dev fastlane.cifastlane.tools flutter.devflutterapp.com go-lang.com go-lang.net go-lang.org + +GOOGLE android.comandroidify.com blogger.com blogblog.com blogspot.ae blogspot.al blogspot.am blogspot.ba blogspot.be blogspot.bg blogspot.bj blogspot.ca blogspot.cf blogspot.ch blogspot.clblogspot.co.atblogspot.co.idblogspot.co.ilblogspot.co.keblogspot.co.nzblogspot.co.ukblogspot.co.za blogspot.comblogspot.com.arblogspot.com.aublogspot.com.brblogspot.com.byblogspot.com.coblogspot.com.cyblogspot.com.eeblogspot.com.egblogspot.com.esblogspot.com.mtblogspot.com.ngblogspot.com.trblogspot.com.uy blogspot.cv blogspot.cz blogspot.de blogspot.dk blogspot.fi blogspot.fr blogspot.gr blogspot.hk blogspot.hr blogspot.hu blogspot.ie blogspot.in blogspot.is blogspot.it blogspot.jp blogspot.kr blogspot.li blogspot.lt blogspot.lu blogspot.md blogspot.mk blogspot.mx blogspot.my blogspot.nl blogspot.no blogspot.pe blogspot.pt blogspot.qa blogspot.re blogspot.ro blogspot.rs blogspot.ru blogspot.se blogspot.sg blogspot.si blogspot.sk blogspot.sn blogspot.td blogspot.tw blogspot.ug blogspot.vn dart.dev dartlang.org dartpad.dev fastlane.cifastlane.tools firebase.com firebase.iofirebaseapp.comfirebaseio.com-!firebase-settings.crashlytics.com +cnfirebase.google.comfirebase.googleapis.com#firebaseappcheck.googleapis.com,(firebasedynamiclinks-ipv4.googleapis.com,(firebasedynamiclinks-ipv6.googleapis.com'#firebasedynamiclinks.googleapis.com)%firebaseinappmessaging.googleapis.com($firebaseinstallations.googleapis.com%!firebaselogging-pa.googleapis.com"firebaselogging.googleapis.com+'firebaseperusertopics-pa.googleapis.com'#firebaseremoteconfig.googleapis.com flutter.devflutterapp.com pub.dev go-lang.com go-lang.net go-lang.org go.dev  godoc.org golang.com golang.net -golang.org2mdn.net +golang.org 2mdn-cn.net +ads2mdn.net +ads admob-cn.com ads admob.com adsads.youtube.com ads adsense.com @@ -12977,25 +14125,39 @@ golang.org2mdn.net ads"adwords-community.com ads adwords.com adsadwordsexpress.com +ads#app-measurement-cn.com ads app-measurement.com -ads&clickserver.googleads.com +adsdoubleclick-cn.net +adsdoubleclick.cn adsdoubleclick.com adsdoubleclick.net +ads$google-analytics-cn.com ads!google-analytics.com adsgoogleadapis.com +adsgoogleads-cn.com +ads googleads.com +ads$googleadservices-cn.com ads!googleadservices.com +ads googleadsserving.cn ads googleanalytics.com +ads"googleoptimize-cn.com adsgoogleoptimize.com +ads%googlesyndication-cn.com ads"googlesyndication.com +ads$googletagmanager-cn.com ads!googletagmanager.com +ads%googletagservices-cn.com ads"googletagservices.com +ads*googletraveladservices-cn.com ads'googletraveladservices.com +adsgooglevads-cn.com ads)marketingplatform.google.com ads urchin.com ads!analytics.google.com ads>1^adservice\.google\.([a-z]{2}|com?)(\.[a-z]{2})?$ adscharlestonroadregistry.com crr.comregistry.google get.app get.dev get.how get.new get.page get.rsvp hey.boo iam.soy new.dayxn--p8j9a0d9c9a.xn--q9jyb4cscholar.google.aescholar.google.atscholar.google.bescholar.google.bgscholar.google.cascholar.google.catscholar.google.chscholar.google.clscholar.google.cnscholar.google.co.crscholar.google.co.idscholar.google.co.ilscholar.google.co.inscholar.google.co.jpscholar.google.co.krscholar.google.co.nzscholar.google.co.thscholar.google.co.ukscholar.google.co.vescholar.google.co.zascholar.google.comscholar.google.com.arscholar.google.com.auscholar.google.com.boscholar.google.com.brscholar.google.com.coscholar.google.com.cuscholar.google.com.doscholar.google.com.ecscholar.google.com.egscholar.google.com.gtscholar.google.com.hkscholar.google.com.lyscholar.google.com.mxscholar.google.com.myscholar.google.com.nischolar.google.com.pascholar.google.com.pescholar.google.com.phscholar.google.com.pkscholar.google.com.prscholar.google.com.pyscholar.google.com.sgscholar.google.com.svscholar.google.com.trscholar.google.com.twscholar.google.com.uascholar.google.com.uyscholar.google.com.vnscholar.google.czscholar.google.descholar.google.dkscholar.google.esscholar.google.fischolar.google.frscholar.google.grscholar.google.hnscholar.google.hrscholar.google.huscholar.google.isscholar.google.itscholar.google.lischolar.google.ltscholar.google.luscholar.google.lvscholar.google.nlscholar.google.noscholar.google.plscholar.google.ptscholar.google.roscholar.google.ruscholar.google.sescholar.google.sischolar.google.sk!scholar.googleusercontent.comscholar.l.google.com pki.googclients1.google.compki.google.com crl.pki.goog +cn crls.pki.goog cn ocsp.pki.goog cn!pki-goog.l.google.com cnalt1-mtalk.google.comalt2-mtalk.google.comalt3-mtalk.google.comalt4-mtalk.google.comalt5-mtalk.google.comalt6-mtalk.google.comalt7-mtalk.google.comalt8-mtalk.google.commtalk.google.com @@ -13086,8 +14248,7 @@ youtube.vnyoutubeeducation.com($youtubeembeddedplayer.googleapis.com googleguge hangout nexus xn--flw351e xn--qcka1pmc  google.ad  google.ae  google.al  google.am  google.as  google.at  google.az  google.ba  google.be  google.bf  google.bg  google.bi  google.bj  google.bs  google.bt  google.by  google.ca google.cat  google.cd  google.cf  google.cg  google.ch  google.ci  google.cl  google.cm google.cn cn  google.co google.co.ao google.co.bw google.co.ck google.co.cr google.co.id google.co.il google.co.in google.co.jp google.co.ke google.co.kr google.co.ls google.co.ma google.co.mz google.co.nz google.co.th google.co.tz google.co.ug google.co.uk google.co.uz google.co.ve google.co.vi google.co.za google.co.zm google.co.zw -google.com google.com.af google.com.ag google.com.ai google.com.ar google.com.au google.com.bd google.com.bh google.com.bn google.com.bo google.com.br google.com.bz google.com.co google.com.cu google.com.cy google.com.do google.com.ec google.com.eg google.com.et google.com.fj google.com.gh google.com.gi google.com.gt google.com.hk google.com.jm google.com.kh google.com.kw google.com.lb google.com.ly google.com.mm google.com.mt google.com.mx google.com.my google.com.na google.com.ng google.com.ni google.com.np google.com.om google.com.pa google.com.pe google.com.pg google.com.ph google.com.pk google.com.pr google.com.py google.com.qa google.com.sa google.com.sb google.com.sg google.com.sl google.com.sv google.com.tj google.com.tr google.com.tw google.com.ua google.com.uy google.com.vc google.com.vn  google.cv  google.cz  google.de  google.dj  google.dk  google.dm  google.dz  google.ee  google.es  google.fi  google.fm  google.fr  google.ga  google.ge  google.gg  google.gl  google.gm  google.gr  google.gy  google.hn  google.hr  google.ht  google.hu  google.ie  google.im  google.iq  google.is  google.it  google.je  google.jo  google.kg  google.ki  google.kz  google.la  google.li  google.lk  google.lt  google.lu  google.lv  google.md  google.me  google.mg  google.mk  google.ml  google.mn  google.ms  google.mu  google.mv  google.mw  google.ne  google.nl  google.no  google.nr  google.nu  google.pl  google.pn  google.ps  google.pt  google.ro  google.rs  google.ru  google.rw  google.sc  google.se  google.sh  google.si  google.sk  google.sm  google.sn  google.so  google.sr  google.st  google.td  google.tg  google.tl  google.tm  google.tn  google.to  google.tt  google.vg  google.vu  google.ws firebase.com firebase.iofirebaseapp.comfirebaseio.com-!firebase-settings.crashlytics.com -cnfirebase.google.comfirebase.googleapis.com#firebaseappcheck.googleapis.com,(firebasedynamiclinks-ipv4.googleapis.com,(firebasedynamiclinks-ipv6.googleapis.com'#firebasedynamiclinks.googleapis.com)%firebaseinappmessaging.googleapis.com($firebaseinstallations.googleapis.com%!firebaselogging-pa.googleapis.com"firebaselogging.googleapis.com+'firebaseperusertopics-pa.googleapis.com'#firebaseremoteconfig.googleapis.com 0emm.com  1e100.net  1ucrs.com +google.com google.com.af google.com.ag google.com.ai google.com.ar google.com.au google.com.bd google.com.bh google.com.bn google.com.bo google.com.br google.com.bz google.com.co google.com.cu google.com.cy google.com.do google.com.ec google.com.eg google.com.et google.com.fj google.com.gh google.com.gi google.com.gt google.com.hk google.com.jm google.com.kh google.com.kw google.com.lb google.com.ly google.com.mm google.com.mt google.com.mx google.com.my google.com.na google.com.ng google.com.ni google.com.np google.com.om google.com.pa google.com.pe google.com.pg google.com.ph google.com.pk google.com.pr google.com.py google.com.qa google.com.sa google.com.sb google.com.sg google.com.sl google.com.sv google.com.tj google.com.tr google.com.tw google.com.ua google.com.uy google.com.vc google.com.vn  google.cv  google.cz  google.de  google.dj  google.dk  google.dm  google.dz  google.ee  google.es  google.fi  google.fm  google.fr  google.ga  google.ge  google.gg  google.gl  google.gm  google.gr  google.gy  google.hn  google.hr  google.ht  google.hu  google.ie  google.im  google.iq  google.is  google.it  google.je  google.jo  google.kg  google.ki  google.kz  google.la  google.li  google.lk  google.lt  google.lu  google.lv  google.md  google.me  google.mg  google.mk  google.ml  google.mn  google.ms  google.mu  google.mv  google.mw  google.ne  google.nl  google.no  google.nr  google.nu  google.pl  google.pn  google.ps  google.pt  google.ro  google.rs  google.ru  google.rw  google.sc  google.se  google.sh  google.si  google.sk  google.sm  google.sn  google.so  google.sr  google.st  google.td  google.tg  google.tl  google.tm  google.tn  google.to  google.tt  google.vg  google.vu  google.ws 0emm.com  1e100.net  1ucrs.com 466453.com abc.xyz adgoogle.net admeld.comangulardart.org api.ai @@ -13109,8 +14270,7 @@ googel.com googil.com  googl.comgoogle-access.netgoogle-syndication.com google.berlin google.dev google.net -google.orggoogle.ventures"googleacquisitionmigration.com googleapis.cn -cngoogleapis.comgoogleapps.comgooglearth.comgoogleblog.com googlebot.comgooglecapital.comgooglecert.netgooglecnapps.cn +google.orggoogle.ventures"googleacquisitionmigration.com googleapis.cngoogleapis.comgoogleapps.comgooglearth.comgoogleblog.com googlebot.comgooglecapital.comgooglecert.netgooglecnapps.cn cngooglecode.comgooglecommerce.comgooglecompare.co.ukgoogledanmark.comgoogledomains.comgoogledrive.com googlee.comgoogleearth.comgooglefiber.comgooglefiber.netgooglefinland.comgooglemail.comgooglemaps.comgooglepagecreator.comgooglephotos.comgoogleplay.comgoogleplus.comgooglesource.comgooglestore.comgooglesverige.comgoogleusercontent.comgoogleventures.com googlezip.net googlr.com goolge.com gooogle.com gridaware.app gsrc.io @@ -13134,9 +14294,6 @@ webrtc.orgweltweitwachsen.dewhatbrowser.org widevine.comw cn265.com cn 2mdn-cn.net cn2mdn.net -cn!accounts.googlers.com -cn$accounts.xn--9trs65b.com -cn&accounts.xn--ggle-55da.com cn admob-cn.com cn adservice.google.com cn ai.ytimg.com @@ -13162,9 +14319,8 @@ webrtc.orgweltweitwachsen.dewhatbrowser.org widevine.comw cn)cnappinstall.googleadapis.com cn)connectivitycheck.gstatic.com cn$content.googleadapis.com -cncorp.google.com -cncorp.googleapis.com cn0$crashlyticsreports-pa.googleapis.com +cn crl.pki.goog cncsi.gstatic.com cndartsearch-cn.net cn$dg-meta.video.google.com @@ -13181,6 +14337,7 @@ webrtc.orgweltweitwachsen.dewhatbrowser.org widevine.comw cndownload.qpdp1.net cn*download.tensorflow.google.com cn+emmapplecodevice.googleapis.com +cn-!firebase-settings.crashlytics.com cn&fontfiles.googleadapis.com cn$fontfiles.googleapis.com cn"fonts.googleadapis.com @@ -13190,7 +14347,6 @@ webrtc.orgweltweitwachsen.dewhatbrowser.org widevine.comw cng1.gstatic.com cng2.gstatic.com cng3.gstatic.com -cn gcpnode.com cngonglchuangl.net cngongyichuangyi.net cn#google-analytics-cn.com @@ -13223,8 +14379,10 @@ webrtc.orgweltweitwachsen.dewhatbrowser.org widevine.comw cn monitoring.qatp1.net cn monitoring.qcpp1.net cn monitoring.qpdp1.net +cn ocsp.pki.goog cn, pagead-googlehosted.l.google.com cn0$performanceparameters.googleapis.com +cn!pki-goog.l.google.com cnplay.1ucrs.com cn'prod-controlbe.floonet.goog cn$prod-databe.floonet.goog @@ -13243,10 +14401,9 @@ webrtc.orgweltweitwachsen.dewhatbrowser.org widevine.comw cn!qualysguard.qcpp1.net cn!qualysguard.qpdp1.net cn recaptcha.net +cnrecaptcha-cn.net cnredirector.bdn.dev cn(redirector.c.chat.google.com -cn(redirector.c.docs.google.com -cn)redirector.c.drive.google.com cn(redirector.c.mail.google.com cn(redirector.c.pack.google.com cn(redirector.c.play.google.com @@ -13275,8 +14432,6 @@ webrtc.orgweltweitwachsen.dewhatbrowser.org widevine.comw cn&test.gbugs-qa.chromium.org cntools.google.com cntools.l.google.com -cn up.corp.goog -cnup.gcp.googlers.com cn"update.crashlytics.com cn!update.googleapis.com cnwear.googleapis.com @@ -13288,10 +14443,50 @@ webrtc.orgweltweitwachsen.dewhatbrowser.org widevine.comw cn www.pxcc.com cn xn--9kr7l.com cnxn--flw351e.com +cn$applemdm.corp.google.com +cndns.corp.google.com +cn!g3doc.corp.google.com +cn(gmskiosk-ssl.corp.google.com +cngo.corp.google.com +cn!gorom.corp.google.com +cn goto.corp.google.com +cn(l2-uberproxy.corp.google.com +cn"logger.corp.google.com +cn&logger-dev.corp.google.com +cn!login.corp.google.com +cn'proxyconfig.corp.google.com +cn, rapture-autopush.corp.google.com +cn#rapture.corp.google.com +cn(rapture-prod.corp.google.com +cn(rapture-test.corp.google.com +cn"r.cert.corp.google.com +cn%ssh-relay.corp.google.com +cn'sslredirect.corp.google.com +cn/#streaming-uberproxy.corp.google.com +cn8,streaming-uberproxy-rotation.corp.google.com +cnsup.corp.google.com +cn)supportcenter.corp.google.com +cn*sup-ssh-relay2.corp.google.com +cn)sup-ssh-relay.corp.google.com +cn$techstop.corp.google.com +cn&uberproxy4.corp.google.com +cn&uberproxy6.corp.google.com +cn%uberproxy.corp.google.com +cn, uberproxy-debug4.corp.google.com +cn+uberproxy-debug.corp.google.com +cn2&uberproxy-pen-redirect.corp.google.com +cn vext.corp.google.com +cnsup.l.google.com +cn*uberproxy-with-cn.l.google.com +cn+uberproxy-with-cn4.l.google.com +cn+uberproxy-with-cn6.l.google.com +cn qiao-cn.com cn - + -GOOGLE-ADS2mdn.net +GOOGLE-ADS 2mdn-cn.net +ads2mdn.net +ads admob-cn.com ads admob.com adsads.youtube.com ads adsense.com @@ -13303,19 +14498,32 @@ GOOGLE-ADS2mdn.net ads"adwords-community.com ads adwords.com adsadwordsexpress.com +ads#app-measurement-cn.com ads app-measurement.com -ads&clickserver.googleads.com +adsdoubleclick-cn.net +adsdoubleclick.cn adsdoubleclick.com adsdoubleclick.net +ads$google-analytics-cn.com ads!google-analytics.com adsgoogleadapis.com +adsgoogleads-cn.com +ads googleads.com +ads$googleadservices-cn.com ads!googleadservices.com +ads googleadsserving.cn ads googleanalytics.com +ads"googleoptimize-cn.com adsgoogleoptimize.com +ads%googlesyndication-cn.com ads"googlesyndication.com +ads$googletagmanager-cn.com ads!googletagmanager.com +ads%googletagservices-cn.com ads"googletagservices.com +ads*googletraveladservices-cn.com ads'googletraveladservices.com +adsgooglevads-cn.com ads)marketingplatform.google.com ads urchin.com @@ -13324,10 +14532,13 @@ urchin.com ads  GOOGLE-REGISTRYcharlestonroadregistry.com crr.comregistry.google get.app get.dev get.how get.new get.page get.rsvp hey.boo iam.soy new.dayxn--p8j9a0d9c9a.xn--q9jyb4c + +GOOGLE-REGISTRY-TLDmemeingfoozipmov nexusdadphdprofesqrsvpboodaynewdevpageapphowsoy xn--q9jyb4c  GOOGLE-SCHOLARscholar.google.aescholar.google.atscholar.google.bescholar.google.bgscholar.google.cascholar.google.catscholar.google.chscholar.google.clscholar.google.cnscholar.google.co.crscholar.google.co.idscholar.google.co.ilscholar.google.co.inscholar.google.co.jpscholar.google.co.krscholar.google.co.nzscholar.google.co.thscholar.google.co.ukscholar.google.co.vescholar.google.co.zascholar.google.comscholar.google.com.arscholar.google.com.auscholar.google.com.boscholar.google.com.brscholar.google.com.coscholar.google.com.cuscholar.google.com.doscholar.google.com.ecscholar.google.com.egscholar.google.com.gtscholar.google.com.hkscholar.google.com.lyscholar.google.com.mxscholar.google.com.myscholar.google.com.nischolar.google.com.pascholar.google.com.pescholar.google.com.phscholar.google.com.pkscholar.google.com.prscholar.google.com.pyscholar.google.com.sgscholar.google.com.svscholar.google.com.trscholar.google.com.twscholar.google.com.uascholar.google.com.uyscholar.google.com.vnscholar.google.czscholar.google.descholar.google.dkscholar.google.esscholar.google.fischolar.google.frscholar.google.grscholar.google.hnscholar.google.hrscholar.google.huscholar.google.isscholar.google.itscholar.google.lischolar.google.ltscholar.google.luscholar.google.lvscholar.google.nlscholar.google.noscholar.google.plscholar.google.ptscholar.google.roscholar.google.ruscholar.google.sescholar.google.sischolar.google.sk!scholar.googleusercontent.comscholar.l.google.com - + GOOGLE-TRUST-SERVICES pki.googclients1.google.compki.google.com crl.pki.goog +cn crls.pki.goog cn ocsp.pki.goog cn!pki-goog.l.google.com cn @@ -13442,8 +14653,8 @@ HOOLIGAPPScuntempire.com cuntwars.comdirtyleague.com fapti HOTJAR-ADSstatic.hotjar.com ads - -HOTSTAR hotstar.comhotstar-cdn.nethotstar-labs.comhotstarext.comhsprepack.akamaized.net^hses[1-7]?.akamaized.net$ + +HOTSTAR hotstar.comhotstar-cdn.nethotstar-labs.comhotstarext.comhsprepack.akamaized.net ^hses[1-7]?\.akamaized\.net$  HOYOVERSEgenshinimpact.comhonkaiimpact3.comhonkaistarrail.com  hoyo.link hoyolab.com hoyoverse.comn0vadesktop.com  @@ -13465,7 +14676,7 @@ hpstore.cn hpveer.comhpvirtualthin.com hpwallart.comhpwellnesscentral.com  hpwsn.com i-123-hp.com inkchoice.cominstantink.comleavinghpinc.comlife-global.orgmyhpsupport.com printeron.comprintersetupsupport.comprintspots.comprintspots.netserviceshp.comthecompaqstore.comtouchsmartpc.comtouchsmartpc.nettouchsmartpc.orgworkstations.tv www8-hp.comxn--6eup7j.comxn--6eup7j.nethpstore.corpmerchandise.com $ HUANGHUAGANGhuanghuagang.org -% +0 HUAWEI bisheng.cn cnbishengcompiler.cn @@ -13493,20 +14704,28 @@ gneec7.com cn owsgo.com cn teleows.com cn saasops.tech -cn  hc-cdn.cnhuaweicloud-dns.cnhuaweicloud-dns.com huaweicloud-dns.net +cnami-alliance.org.cn  b2bgo.comeduapaashwc.com  hc-cdn.cn +hc-cdn.com +hc-sre.comhuaweiapaas.cnhuaweiapaas.comhuaweicloud-dns.cnhuaweicloud-dns.com huaweicloud-dns.net !cn huaweicloud-dns.org -!cnhuaweicloud-smn.cnhuaweicloud-smn.comhuaweicloud-smn.nethuaweicloud.comhuaweicloudapis.cnhuaweicloudapis.comhuaweicloudlive.comhuaweimarketplace.comhuaweisafedns.cnhuaweisafehub.cn huaweiyun.cn huaweiyun.com hwcdnsre.comhwclouds-dns.cnhwclouds-dns.comhwclouds-dns.net hwclouds.cn hwclouds.mobihwclouds.org.cn hwcloudvis.cnhwcloudvis.comimc-oneaccess.cnimcapptest.com km6g.cn km7g.cn km8g.cn km9g.cn livehwc3.cnmyhuaweicloud.cn -myhwcdn.cn myhwcdn.commyhwcloudlive.commyhwclouds.com pagescube.cn pagescube.com powerapp.io)af-south-1.myhuaweicloud.com +!cnhuaweicloud-smn.cnhuaweicloud-smn.comhuaweicloud-smn.nethuaweicloud.cnhuaweicloud.comhuaweicloudapis.cnhuaweicloudapis.comhuaweicloudlive.comhuaweicloudsite.cnhuaweicloudsite.comhuaweicloudwaf.cnhuaweicloudwaf.comhuaweioneaccess.cnhuaweioneaccess.comhuaweimarketplace.comhuaweisafedns.cnhuaweisafedns.comhuaweisafehub.cn huaweisre.cn huaweisre.com huaweiyun.cn huaweiyun.com +hwastro.cn hwastro.com hwcdnsre.cn hwcdnsre.comhwclouds-dns.cnhwclouds-dns.comhwclouds-dns.net hwclouds.cn hwclouds.com hwclouds.mobihwclouds.org.cnhwcloudsite.cnhwcloudsite.com hwcloudvis.cnhwcloudvis.comimc-oneaccess.cnimcapptest.com km6g.cn km7g.cn km8g.cn km9g.cnkmcb-cn-east-3.cnkmcb-cn-north-4.cnkmop-cn-east-3.cnkmop-cn-north-4.cn livehwc3.cnmyhuaweicloud.cn +myhwcdn.cn myhwcdn.commyhwcloudlive.com myhwclouds.cnmyhwclouds.commyhwclouds.com.cnmyhwclouds.net pagescube.cn pagescube.com powerapp.io&ae-ad-1.myhuaweicloud.com +!cn)af-south-1.myhuaweicloud.com !cn- ap-southeast-1.myhuaweicloud.com !cn- ap-southeast-2.myhuaweicloud.com !cn- ap-southeast-3.myhuaweicloud.com -!cncn-east-2.myhuaweicloud.comcn-east-3.myhuaweicloud.com cn-north-1.myhuaweicloud.com cn-north-2.myhuaweicloud.com cn-north-3.myhuaweicloud.com cn-north-4.myhuaweicloud.com cn-north-5.myhuaweicloud.com cn-north-6.myhuaweicloud.com cn-north-9.myhuaweicloud.com$ cn-northeast-1.myhuaweicloud.com cn-south-1.myhuaweicloud.com cn-south-2.myhuaweicloud.com cn-south-4.myhuaweicloud.com$ cn-southwest-2.myhuaweicloud.com(eu-west-0.myhuaweicloud.com +!cn- ap-southeast-4.myhuaweicloud.com +!cncn-east-2.myhuaweicloud.comcn-east-3.myhuaweicloud.comcn-east-5.myhuaweicloud.com cn-north-1.myhuaweicloud.com!cn-north-11.myhuaweicloud.com cn-north-2.myhuaweicloud.com cn-north-3.myhuaweicloud.com cn-north-4.myhuaweicloud.com cn-north-5.myhuaweicloud.com cn-north-6.myhuaweicloud.com cn-north-9.myhuaweicloud.com$ cn-northeast-1.myhuaweicloud.com cn-south-1.myhuaweicloud.com cn-south-2.myhuaweicloud.com cn-south-4.myhuaweicloud.com$ cn-southwest-2.myhuaweicloud.com(eu-west-0.myhuaweicloud.com +!cn*eu-west-101.myhuaweicloud.com !cn)la-north-2.myhuaweicloud.com !cn)la-south-2.myhuaweicloud.com +!cn(me-east-1.myhuaweicloud.com !cn*na-mexico-1.myhuaweicloud.com !cn- ru-northwest-2.myhuaweicloud.com !cn*sa-brazil-1.myhuaweicloud.com -!cncdnhwchcg02.comcdnhwcurq03.comcdnhwczba04.comcdnhwclxw05.comcdnhwcupf06.comcdnhwcxcy07.comcdnhwcatq08.comcdnhwcztu09.comcdnhwcedi10.comcdnhwcoem01.comcdnhwcllh11.comcdnhwcjog12.comcdnhwcpsd13.comcdnhwcqwg14.comcdnhwcqir15.comcdnhwcvix16.comcdnhwcajk17.comcdnhwcchh18.comcdnhwcohm19.comcdnhwczjt20.comcdnhwcggk22.comcdnhwczth23.comcdnhwctxz24.comcdnhwcgrb01.cncdnhwcyxb02.cncdnhwcywp03.cncdnhwclkl04.cncdnhwcjbj05.cncdnhwconz06.cncdnhwcgqa21.comcdnhwckbw08.cncdnhwcsjs09.cncdnhwcjkl10.cncdnhwctmz11.cncdnhwcrpp12.cncdnhwcpqh13.cncdnhwcxsi14.cncdnhwcfzp15.cncdnhwcgvs16.cncdnhwcrgg07.cncdnhwceft18.cncdnhwccvo19.cncdnhwcbvo20.cncdnhwcdkd21.cncdnhwcdvg22.cncdnhwclnh23.cncdnhwckfd24.cncdnhwczxh101.comcdnhwcbzj102.comcdnhwcjqv17.cncdnhwcljk104.comcdnhwclxu105.comcdnhwcbqs106.comcdnhwctnm107.comcdnhwcbni108.comcdnhwczks109.comcdnhwcick110.comcdnhwcead111.comcdnhwcjlg112.comcdnhwckon103.comcdnhwczmn114.comcdnhwcqgw115.comcdnhwckfz116.comcdnhwcqve117.comcdnhwcgnc118.comcdnhwcuim119.comcdnhwcjsb120.comcdnhwccmz121.comcdnhwcibv122.comcdnhwcprh113.comcdnhwcedt124.comcdnhwcofl101.cncdnhwclrd102.cncdnhwcurr103.cncdnhwczid104.cncdnhwcqvk105.cncdnhwczoy106.cncdnhwcuwd107.cncdnhwcogx108.cncdnhwcoph123.comcdnhwceod109.cncdnhwcpcw110.cncdnhwczic111.cncdnhwcozb112.cncdnhwcqrr114.cncdnhwcaoc115.cncdnhwctyd116.cncdnhwcidu117.cncdnhwclsl119.cncdnhwcsux118.cncdnhwcbie120.cncdnhwcuxc121.cncdnhwcaip122.cncdnhwcwqz113.cncdnhwcojn124.cncdnhwcscc123.cn#.+\.cdnhwc([1-9]|10)\.(cn|com)$ abhouses.comagconnect.link  dbank.com dbankcdn.comdbankcloud.com hicloud.com hihonor.com honor.cn  huawei.cn +!cn(tr-west-1.myhuaweicloud.com +!cncdnhwchcg02.comcdnhwcurq03.comcdnhwczba04.comcdnhwclxw05.comcdnhwcupf06.comcdnhwcxcy07.comcdnhwcatq08.comcdnhwcztu09.comcdnhwcedi10.comcdnhwcoem01.comcdnhwcllh11.comcdnhwcjog12.comcdnhwcpsd13.comcdnhwcqwg14.comcdnhwcqir15.comcdnhwcvix16.comcdnhwcajk17.comcdnhwcchh18.comcdnhwcohm19.comcdnhwczjt20.comcdnhwcggk22.comcdnhwczth23.comcdnhwctxz24.comcdnhwcgrb01.cncdnhwcyxb02.cncdnhwcywp03.cncdnhwclkl04.cncdnhwcjbj05.cncdnhwconz06.cncdnhwcgqa21.comcdnhwckbw08.cncdnhwcsjs09.cncdnhwcjkl10.cncdnhwctmz11.cncdnhwcrpp12.cncdnhwcpqh13.cncdnhwcxsi14.cncdnhwcfzp15.cncdnhwcgvs16.cncdnhwcrgg07.cncdnhwceft18.cncdnhwccvo19.cncdnhwcbvo20.cncdnhwcdkd21.cncdnhwcdvg22.cncdnhwclnh23.cncdnhwckfd24.cncdnhwczxh101.comcdnhwcbzj102.comcdnhwcjqv17.cncdnhwcljk104.comcdnhwclxu105.comcdnhwcbqs106.comcdnhwctnm107.comcdnhwcbni108.comcdnhwczks109.comcdnhwcick110.comcdnhwcead111.comcdnhwcjlg112.comcdnhwckon103.comcdnhwczmn114.comcdnhwcqgw115.comcdnhwckfz116.comcdnhwcqve117.comcdnhwcgnc118.comcdnhwcuim119.comcdnhwcjsb120.comcdnhwccmz121.comcdnhwcibv122.comcdnhwcprh113.comcdnhwcedt124.comcdnhwcofl101.cncdnhwclrd102.cncdnhwcurr103.cncdnhwczid104.cncdnhwcqvk105.cncdnhwczoy106.cncdnhwcuwd107.cncdnhwcogx108.cncdnhwcoph123.comcdnhwceod109.cncdnhwcpcw110.cncdnhwczic111.cncdnhwcozb112.cncdnhwcqrr114.cncdnhwcaoc115.cncdnhwctyd116.cncdnhwcidu117.cncdnhwclsl119.cncdnhwcsux118.cncdnhwcbie120.cncdnhwcuxc121.cncdnhwcaip122.cncdnhwcwqz113.cncdnhwcojn124.cncdnhwcscc123.cn o7mu8.cn 59bob.cn tc3bl.cn hiu58.cn kfomn.cn azkr2.cn vm45e.cn buf35.cn uwtmy.cn fpxyo.cn tm2a8.cn r8zc9.cn 6ts7c.cn 2gkjr.cn ns95c.cn tm7sg.cn le5vb.cn y43f6.cn 8n82b.cn x9exk.cn ms2tg.cn ka9bv.cn acgab.cn mle5p.cn 26r9y.cn 9coof.cn tzygd.cn z95rr.cn 3ili6.cn vo6z2.cn lu1da.cn ivwi3.cn 7k2k1.cn cza84.cn 8gcdp.cn kma1g.cn 576nt.cn#.+\.cdnhwc([1-9]|10)\.(cn|com)$ abhouses.comagconnect.link  dbank.com dbankcdn.comdbankcloud.com hicloud.com hihonor.com honor.cn  huawei.cn huawei.com huawei.com.cnhuaweiacad.com huaweiief.cn huaweiief.comhuaweistatic.com  hwccpc.cn hwccpc.com hwht.cn hwocloud.com hwtrip.comshanhaitujian.com  vmall.com vmallres.com @@ -13540,21 +14759,29 @@ gneec7.com cn teleows.com cn saasops.tech cn - - HUAWEICLOUD  hc-cdn.cnhuaweicloud-dns.cnhuaweicloud-dns.com huaweicloud-dns.net +) + HUAWEICLOUDami-alliance.org.cn  b2bgo.comeduapaashwc.com  hc-cdn.cn +hc-cdn.com +hc-sre.comhuaweiapaas.cnhuaweiapaas.comhuaweicloud-dns.cnhuaweicloud-dns.com huaweicloud-dns.net !cn huaweicloud-dns.org -!cnhuaweicloud-smn.cnhuaweicloud-smn.comhuaweicloud-smn.nethuaweicloud.comhuaweicloudapis.cnhuaweicloudapis.comhuaweicloudlive.comhuaweimarketplace.comhuaweisafedns.cnhuaweisafehub.cn huaweiyun.cn huaweiyun.com hwcdnsre.comhwclouds-dns.cnhwclouds-dns.comhwclouds-dns.net hwclouds.cn hwclouds.mobihwclouds.org.cn hwcloudvis.cnhwcloudvis.comimc-oneaccess.cnimcapptest.com km6g.cn km7g.cn km8g.cn km9g.cn livehwc3.cnmyhuaweicloud.cn -myhwcdn.cn myhwcdn.commyhwcloudlive.commyhwclouds.com pagescube.cn pagescube.com powerapp.io)af-south-1.myhuaweicloud.com +!cnhuaweicloud-smn.cnhuaweicloud-smn.comhuaweicloud-smn.nethuaweicloud.cnhuaweicloud.comhuaweicloudapis.cnhuaweicloudapis.comhuaweicloudlive.comhuaweicloudsite.cnhuaweicloudsite.comhuaweicloudwaf.cnhuaweicloudwaf.comhuaweioneaccess.cnhuaweioneaccess.comhuaweimarketplace.comhuaweisafedns.cnhuaweisafedns.comhuaweisafehub.cn huaweisre.cn huaweisre.com huaweiyun.cn huaweiyun.com +hwastro.cn hwastro.com hwcdnsre.cn hwcdnsre.comhwclouds-dns.cnhwclouds-dns.comhwclouds-dns.net hwclouds.cn hwclouds.com hwclouds.mobihwclouds.org.cnhwcloudsite.cnhwcloudsite.com hwcloudvis.cnhwcloudvis.comimc-oneaccess.cnimcapptest.com km6g.cn km7g.cn km8g.cn km9g.cnkmcb-cn-east-3.cnkmcb-cn-north-4.cnkmop-cn-east-3.cnkmop-cn-north-4.cn livehwc3.cnmyhuaweicloud.cn +myhwcdn.cn myhwcdn.commyhwcloudlive.com myhwclouds.cnmyhwclouds.commyhwclouds.com.cnmyhwclouds.net pagescube.cn pagescube.com powerapp.io&ae-ad-1.myhuaweicloud.com +!cn)af-south-1.myhuaweicloud.com !cn- ap-southeast-1.myhuaweicloud.com !cn- ap-southeast-2.myhuaweicloud.com !cn- ap-southeast-3.myhuaweicloud.com -!cncn-east-2.myhuaweicloud.comcn-east-3.myhuaweicloud.com cn-north-1.myhuaweicloud.com cn-north-2.myhuaweicloud.com cn-north-3.myhuaweicloud.com cn-north-4.myhuaweicloud.com cn-north-5.myhuaweicloud.com cn-north-6.myhuaweicloud.com cn-north-9.myhuaweicloud.com$ cn-northeast-1.myhuaweicloud.com cn-south-1.myhuaweicloud.com cn-south-2.myhuaweicloud.com cn-south-4.myhuaweicloud.com$ cn-southwest-2.myhuaweicloud.com(eu-west-0.myhuaweicloud.com +!cn- ap-southeast-4.myhuaweicloud.com +!cncn-east-2.myhuaweicloud.comcn-east-3.myhuaweicloud.comcn-east-5.myhuaweicloud.com cn-north-1.myhuaweicloud.com!cn-north-11.myhuaweicloud.com cn-north-2.myhuaweicloud.com cn-north-3.myhuaweicloud.com cn-north-4.myhuaweicloud.com cn-north-5.myhuaweicloud.com cn-north-6.myhuaweicloud.com cn-north-9.myhuaweicloud.com$ cn-northeast-1.myhuaweicloud.com cn-south-1.myhuaweicloud.com cn-south-2.myhuaweicloud.com cn-south-4.myhuaweicloud.com$ cn-southwest-2.myhuaweicloud.com(eu-west-0.myhuaweicloud.com +!cn*eu-west-101.myhuaweicloud.com !cn)la-north-2.myhuaweicloud.com !cn)la-south-2.myhuaweicloud.com +!cn(me-east-1.myhuaweicloud.com !cn*na-mexico-1.myhuaweicloud.com !cn- ru-northwest-2.myhuaweicloud.com !cn*sa-brazil-1.myhuaweicloud.com -!cncdnhwchcg02.comcdnhwcurq03.comcdnhwczba04.comcdnhwclxw05.comcdnhwcupf06.comcdnhwcxcy07.comcdnhwcatq08.comcdnhwcztu09.comcdnhwcedi10.comcdnhwcoem01.comcdnhwcllh11.comcdnhwcjog12.comcdnhwcpsd13.comcdnhwcqwg14.comcdnhwcqir15.comcdnhwcvix16.comcdnhwcajk17.comcdnhwcchh18.comcdnhwcohm19.comcdnhwczjt20.comcdnhwcggk22.comcdnhwczth23.comcdnhwctxz24.comcdnhwcgrb01.cncdnhwcyxb02.cncdnhwcywp03.cncdnhwclkl04.cncdnhwcjbj05.cncdnhwconz06.cncdnhwcgqa21.comcdnhwckbw08.cncdnhwcsjs09.cncdnhwcjkl10.cncdnhwctmz11.cncdnhwcrpp12.cncdnhwcpqh13.cncdnhwcxsi14.cncdnhwcfzp15.cncdnhwcgvs16.cncdnhwcrgg07.cncdnhwceft18.cncdnhwccvo19.cncdnhwcbvo20.cncdnhwcdkd21.cncdnhwcdvg22.cncdnhwclnh23.cncdnhwckfd24.cncdnhwczxh101.comcdnhwcbzj102.comcdnhwcjqv17.cncdnhwcljk104.comcdnhwclxu105.comcdnhwcbqs106.comcdnhwctnm107.comcdnhwcbni108.comcdnhwczks109.comcdnhwcick110.comcdnhwcead111.comcdnhwcjlg112.comcdnhwckon103.comcdnhwczmn114.comcdnhwcqgw115.comcdnhwckfz116.comcdnhwcqve117.comcdnhwcgnc118.comcdnhwcuim119.comcdnhwcjsb120.comcdnhwccmz121.comcdnhwcibv122.comcdnhwcprh113.comcdnhwcedt124.comcdnhwcofl101.cncdnhwclrd102.cncdnhwcurr103.cncdnhwczid104.cncdnhwcqvk105.cncdnhwczoy106.cncdnhwcuwd107.cncdnhwcogx108.cncdnhwcoph123.comcdnhwceod109.cncdnhwcpcw110.cncdnhwczic111.cncdnhwcozb112.cncdnhwcqrr114.cncdnhwcaoc115.cncdnhwctyd116.cncdnhwcidu117.cncdnhwclsl119.cncdnhwcsux118.cncdnhwcbie120.cncdnhwcuxc121.cncdnhwcaip122.cncdnhwcwqz113.cncdnhwcojn124.cncdnhwcscc123.cn#.+\.cdnhwc([1-9]|10)\.(cn|com)$ +!cn(tr-west-1.myhuaweicloud.com +!cncdnhwchcg02.comcdnhwcurq03.comcdnhwczba04.comcdnhwclxw05.comcdnhwcupf06.comcdnhwcxcy07.comcdnhwcatq08.comcdnhwcztu09.comcdnhwcedi10.comcdnhwcoem01.comcdnhwcllh11.comcdnhwcjog12.comcdnhwcpsd13.comcdnhwcqwg14.comcdnhwcqir15.comcdnhwcvix16.comcdnhwcajk17.comcdnhwcchh18.comcdnhwcohm19.comcdnhwczjt20.comcdnhwcggk22.comcdnhwczth23.comcdnhwctxz24.comcdnhwcgrb01.cncdnhwcyxb02.cncdnhwcywp03.cncdnhwclkl04.cncdnhwcjbj05.cncdnhwconz06.cncdnhwcgqa21.comcdnhwckbw08.cncdnhwcsjs09.cncdnhwcjkl10.cncdnhwctmz11.cncdnhwcrpp12.cncdnhwcpqh13.cncdnhwcxsi14.cncdnhwcfzp15.cncdnhwcgvs16.cncdnhwcrgg07.cncdnhwceft18.cncdnhwccvo19.cncdnhwcbvo20.cncdnhwcdkd21.cncdnhwcdvg22.cncdnhwclnh23.cncdnhwckfd24.cncdnhwczxh101.comcdnhwcbzj102.comcdnhwcjqv17.cncdnhwcljk104.comcdnhwclxu105.comcdnhwcbqs106.comcdnhwctnm107.comcdnhwcbni108.comcdnhwczks109.comcdnhwcick110.comcdnhwcead111.comcdnhwcjlg112.comcdnhwckon103.comcdnhwczmn114.comcdnhwcqgw115.comcdnhwckfz116.comcdnhwcqve117.comcdnhwcgnc118.comcdnhwcuim119.comcdnhwcjsb120.comcdnhwccmz121.comcdnhwcibv122.comcdnhwcprh113.comcdnhwcedt124.comcdnhwcofl101.cncdnhwclrd102.cncdnhwcurr103.cncdnhwczid104.cncdnhwcqvk105.cncdnhwczoy106.cncdnhwcuwd107.cncdnhwcogx108.cncdnhwcoph123.comcdnhwceod109.cncdnhwcpcw110.cncdnhwczic111.cncdnhwcozb112.cncdnhwcqrr114.cncdnhwcaoc115.cncdnhwctyd116.cncdnhwcidu117.cncdnhwclsl119.cncdnhwcsux118.cncdnhwcbie120.cncdnhwcuxc121.cncdnhwcaip122.cncdnhwcwqz113.cncdnhwcojn124.cncdnhwcscc123.cn o7mu8.cn 59bob.cn tc3bl.cn hiu58.cn kfomn.cn azkr2.cn vm45e.cn buf35.cn uwtmy.cn fpxyo.cn tm2a8.cn r8zc9.cn 6ts7c.cn 2gkjr.cn ns95c.cn tm7sg.cn le5vb.cn y43f6.cn 8n82b.cn x9exk.cn ms2tg.cn ka9bv.cn acgab.cn mle5p.cn 26r9y.cn 9coof.cn tzygd.cn z95rr.cn 3ili6.cn vo6z2.cn lu1da.cn ivwi3.cn 7k2k1.cn cza84.cn 8gcdp.cn kma1g.cn 576nt.cn#.+\.cdnhwc([1-9]|10)\.(cn|com)$ . HUBBLEPHONEhubblephone.com tsi.ai @@ -13572,14 +14799,13 @@ huluim.comhuluinstantmessenger.com huluitaly.com hulunet.com huluqa.comhulurussia.com huluspain.comhulusports.comhulustream.com huluteam.com hulutv.com huluusa.comjoinmaidez.com mushymush.tv myhulu.comoriginalhulu.com payhulu.comregisterhulu.comthehulubraintrust.comwwwhuluplus.com"hulu.playback.edge.bamgrid.com - + HUNANTV-ADSclick.hunantv.com adsda.hunantv.com ads da.mgtv.com adslog.hunantv.com adslog.v2.hunantv.com adsres.hunantv.com -adsv2.log.hunantv.com ads  HUOBI @@ -13587,27 +14813,75 @@ hbabit.com hbfile.net  huobi.com huobi.me  huobi.pro huobi.sc huobiasia.viphuobigroup.comhuobitoken.com J HUPUhoopchina.com.cn hupu.com hupucdn.com  shihuo.cn +[ +HUPUN  hupun.com hupun.com.cn kata.com.cn +newniu.com wanliniu.com  HURRICANEELECTRIC he.net & HUYA huya.com msstatic.com - -IBMibmweatherchannel weatherappdomain.cloud bluemix.com bluemix.net ibm.com + +IBM  consul.io hashicorp.comnomadproject.io  packer.io terraform.iovagrantcloud.com vagrantup.comvaultproject.ioibmweatherchannel weatherappdomain.cloud bluemix.com bluemix.net ibm.com ibm.eu ibm.net ibm.us s-bluemix.net s81c.com - -ICBCicbc  95588.com 95588.com.cn dccnet.com.cn icbc-at.com icbc-cz.com icbc-ltd.com icbc-uk.com icbc-us.com icbc.ae icbc.be -icbc.co.id -icbc.co.jp -icbc.co.kr -icbc.co.nl icbc.com.au icbc.com.cn icbc.com.es icbc.com.kh icbc.com.kw icbc.com.la icbc.com.mm icbc.com.mo icbc.com.mx icbc.com.pe icbc.com.pk icbc.com.qa icbc.com.sg icbc.com.vn icbc.de icbc.eu icbc.lu icbcalmaty.kz icbcasia.com icbcbr.com.br icbccs.com.cnicbccstz.com.cn icbci.com.hk icbcina.com icbcindia.com -icbcit.comicbclondon.comicbcmanila.com.cn  icbcme.ae icbcmoscow.ru -icbcmy.com -icbcnz.comicbcpanama.com icbcparis.fr -icbcpl.comicbcstandard.comicbcstandardbank.comicbcstandardresources.comicbcstandardsecurities.com icbcswiss.com icbcthai.com -icbkfs.com -icbkus.com + +ICBCicbc  95588.com 95588.com.cn dccnet.com.cn icbc-at.com +!cn icbc-cz.com +!cn icbc-ltd.com +!cn icbc-uk.com +!cn icbc-us.com +!cnicbc.ae +!cnicbc.be +!cn +icbc.co.id +!cn +icbc.co.jp +!cn +icbc.co.kr +!cn +icbc.co.nl +!cn icbc.com.au +!cn icbc.com.cn icbc.com.es +!cn icbc.com.kh +!cn icbc.com.kw +!cn icbc.com.la +!cn icbc.com.mm +!cn icbc.com.mo +!cn icbc.com.mx +!cn icbc.com.pe +!cn icbc.com.pk +!cn icbc.com.qa +!cn icbc.com.sg +!cn icbc.com.vn +!cnicbc.de +!cnicbc.eu +!cnicbc.lu +!cn icbcalmaty.kz +!cn icbcasia.com +!cn icbcbr.com.br +!cn icbccs.com.cnicbccstz.com.cn icbci.com.hk +!cn icbcina.com icbcindia.com +!cn +icbcit.com +!cnicbclondon.com +!cnicbcmanila.com.cn icbcme.ae +!cn icbcmoscow.ru +!cn +icbcmy.com +!cn +icbcnz.com +!cnicbcpanama.com +!cn icbcparis.fr +!cn +icbcpl.com +!cnicbcstandard.comicbcstandardbank.comicbcstandardresources.comicbcstandardsecurities.com icbcswiss.com +!cn icbcthai.com +!cn +icbkfs.com +!cn +icbkus.com +!cn  ICLOUDmask-h2.icloud.commask.icloud.comapple-icloud.cn cnappleicloud.cn @@ -13633,6 +14907,10 @@ o IFANR coolbuy.com  ifanr.com ifanr.inifanrusercontent.com ifanrx.com minapp.com + +IFAST +fsmone.com fsmone.com.hk fsmone.com.myfundsupermart.comifastcapital.com.my ifastcorp.comifastfinancial.com.hkifastfinancial.co.in ifastgb.com ifastgp.comifastgp.com.hkifastnetwork.comifastps.com.cn +cn ifasttv.com n IFLYTEK iflytek.com  xunfei.cn ets100.com @@ -13673,6 +14951,9 @@ zzycdz.com A IMAGECURL imagecurl.com imagecurl.org imgcrl.org + + +IMAGEGLASSimageglass.org 3 IMAGESHACKimageshack.com imageshack.us @@ -13706,8 +14987,14 @@ INFRAPEDIAinfrapedia.com inshot.com inshotapp.com  INSIDERbusinessinsider.co.zabusinessinsider.combusinessinsider.com.aubusinessinsider.com.plbusinessinsider.debusinessinsider.esbusinessinsider.frbusinessinsider.inbusinessinsider.jpbusinessinsider.mxbusinessinsider.mybusinessinsider.nlbusinessinsider.sginsider-intelligence.com insider.cominsiderintelligence.com - - INSTAGRAM!achat-followers-instagram.com#acheter-followers-instagram.com$ acheterdesfollowersinstagram.com!acheterfollowersinstagram.combookstagram.comcarstagram.comcdninstagram.comchickstagram.com ig.me  igcdn.com igsonar.com igtv.com imstagram.com imtagram.cominstaadder.cominstachecker.cominstafallow.cominstafollower.cominstagainer.com instagda.com instagify.cominstagmania.com instagor.cominstagram-brand.cominstagram-engineering.cominstagram-help.cominstagram-press.cominstagram-press.net instagram.cominstagramci.cominstagramcn.cominstagramdi.cominstagramhashtags.netinstagramhilecim.cominstagramhilesi.orginstagramium.cominstagramizlenme.cominstagramkusu.cominstagramlogin.cominstagramm.cominstagramn.cominstagrampartners.cominstagramphoto.cominstagramq.cominstagramsepeti.cominstagramtakipcisatinal.netinstagramtakiphilesi.cominstagramtips.cominstagramtr.com instagran.cominstagranm.com instagrem.com instagrm.cominstagtram.com instagy.cominstamgram.cominstangram.cominstanttelegram.cominstaplayer.net instastyle.tv instgram.com intagram.com intagrm.com intgram.comkingstagram.comlnstagram-help.comtheinstagramhack.comoninstagram.comonline-instagram.comonlineinstagram.comweb-instagram.netwwwinstagram.com + + INSTAGRAM graph.instagram.com +ads)graph-fallback.instagram.com +ads!achat-followers-instagram.com#acheter-followers-instagram.com$ acheterdesfollowersinstagram.com!acheterfollowersinstagram.combookstagram.comcarstagram.comcdninstagram.comchickstagram.com ig.me  igcdn.com igsonar.com igtv.com imstagram.com imtagram.cominstaadder.cominstachecker.cominstafallow.cominstafollower.cominstagainer.com instagda.com instagify.cominstagmania.com instagor.cominstagram-brand.cominstagram-engineering.cominstagram-help.cominstagram-press.cominstagram-press.net instagram.cominstagramci.cominstagramcn.cominstagramdi.cominstagramhashtags.netinstagramhilecim.cominstagramhilesi.orginstagramium.cominstagramizlenme.cominstagramkusu.cominstagramlogin.cominstagramm.cominstagramn.cominstagrampartners.cominstagramphoto.cominstagramq.cominstagramsepeti.cominstagramtakipcisatinal.netinstagramtakiphilesi.cominstagramtips.cominstagramtr.com instagran.cominstagranm.com instagrem.com instagrm.cominstagtram.com instagy.cominstamgram.cominstangram.cominstanttelegram.cominstaplayer.net instastyle.tv instgram.com intagram.com intagrm.com intgram.comkingstagram.comlnstagram-help.comtheinstagramhack.comoninstagram.comonline-instagram.comonlineinstagram.comweb-instagram.netwwwinstagram.com +\ + INSTAGRAM-ADS graph.instagram.com +ads)graph-fallback.instagram.com +ads $ INTEL 01.org hyperscan.iointellinuxgraphics.comintellinuxgraphics.net @@ -13853,8 +15140,10 @@ jzt.jd.com ads stat.m.jd.com ads img-x.jd.com ads - - JETBRAINS intellij.com intellij.net intellij.org jetbrains.com jetbrains.netjetbrains.spacejetbrains.team datalore.iokotlinlang.org + + JETBRAINS intellij.com intellij.net intellij.org jetbrains.com jetbrains.netjetbrains.spacejetbrains.team datalore.iokotlinlang.orgcdn.jetbrains.com +cn)download-cdn.jetbrains.com.cn +cn jb.gg : JETBRAINS-AI  grazie.aigrazie.aws.intellij.net Y @@ -13885,8 +15174,8 @@ JINRISHICIjinrishici.com JINSHUJU jinshuju.netjinshujucdn.com  JIYUKOBOjiyu-kobo.co.jp -C -JKF +P +JKF jkf.net jkface.net jkforum.net  jr24h.com jvid.com * JOHREN johren.games @@ -13898,6 +15187,17 @@ Q JSDELIVR jsdelivr.com jsdelivr.net esm.runcdn.jsdelivr.net  JUEJIN  juejin.cn  juejin.im xitu.iop1-juejin.byteimg.comp2-juejin.byteimg.comp3-juejin.byteimg.comp4-juejin.byteimg.comp5-juejin.byteimg.comp6-juejin.byteimg.comp7-juejin.byteimg.comp8-juejin.byteimg.comp9-juejin.byteimg.com + + JUSHUITAN 315dian.com +doucang.cn doucang.com +drp321.com +erp.cn  erp321.cn +erp321.com +erp321.net  jsterp.cn jugongdan.com jushuitan.cn jushuitan.com jushuitan.netjushuitan-inc.com juxieyun.com  scm121.cn +scm121.com +shopss.com shuiyaohuo.cnshuiyaohuo.com  surerp.cn +surerp.com +sursung.cn sursung.com 8 JUSTAV hkporn.net @@ -13905,6 +15205,8 @@ justav.net twporn.net d JUSTMYSOCKSjustmysocks.netjustmysocks1.netjustmysocks2.netjustmysocks4.net +L + JUTONGBAOguanggaotongapp.cnjutongbao.online jutongbao.top w JWPLAYER jwpcdn.comjwplatform.com jwplayer.com @@ -13914,8 +15216,9 @@ R KAGGLE kaggle.com  kaggle.io kaggle.netkaggleusercontent.com -M -KAKAO  kakao.com kakaocdn.net kakaocorp.com kakaotalk.jp + +KAKAO daum.net daumcdn.net daumkakao.io  kakao.com kakao.co.kr kakaocdn.net kakaocorp.com kakaotalk.jp  kgslb.com onkakao.net kakao.vckakaobrain.comkakaoinvestment.comkakaomobility.comkakaopiccoma.com kakaobank.com kakaobank.iokakaobankcontent.comkakaoenterprise.comkakaocloud.comkakaoilaas.com  1thek.com antenna.co.krawesomeent.co.kr bhent.co.krdolphiners.com gleline.com istent.co.kr jwide.co.kr kakaoent.comkrosspictures.comlogosfilm.co.kr megamon.co.kr  melon.com msoopent.comootbstudio.co.kr shownote.comstarship-ent.comstuidok110.com vastenm.com zipcine.comdaumpcbang.comkakaogamescorp.com kakaovx.comlionhearts.co.kr metabora.io +sena.co.krkakaohealthcare.com karechat.aipastahealth.com kakaopay.comkakaopaysec.comkpinsurances.comfashionbykakao.comkakaostyle.com posty.kr  zigzag.kr  KANZHONGGUOes-visiontimes.comkannewyork.comkanzhongguo.comkanzhongguo.eusecretchina.com trithucvn.net trithucvn.org vct.newsvisiontimes.comvisiontimes.devisiontimes.frvisiontimes.itvisiontimes.netvisiontimesjp.com  vtvan.comwatchinese.com 9 @@ -13928,6 +15231,9 @@ I  KERNEL kernel.org +- +KEYBASE +keybase.iokeybaseapi.com 4 KHANACADEMYkhanacademy.org kastatic.org  @@ -13967,9 +15273,10 @@ ku6cdn.com ku6img.com . KUAIKAN kkmh.comkuaikanmanhua.com - + KUAISHOU gifshow.com ksapisrv.com kuaishou.com -yximgs.com log-sdk.gifshow.com +yximgs.com +kwaizt.comkuaishouzt.com log-sdk.gifshow.com adswlog.kuaishou.com ads P @@ -13992,27 +15299,47 @@ KUBERNETES kubernetes.io ads%adserviceretry.kglink.cn ads%adserviceretry.kugou.com ads +@ + KUROGAMES kurogames.com +cn aki-game.com +cn  KYODONEWS 47gyosei.jp  47news.jp kyodo-d.info kyodo-d.jpkyodoimages.jp kyodonews.jp kyodonews.net newsmart.jp nna.jp ( LAGOU  lagou.com lgstatic.com -N +l LANDIAN -lancdn.comlandiannews.com  wsoso.com landian.vip +lancdn.comlandiannews.com landian.vip landian.xyz ourl.co  wsoso.com - LANTERNgetlantern.org lantern.io - -LANZOU baidupan.com -lanzou.com lanzoub.com lanzouc.com lanzoue.com lanzouf.com lanzoug.com lanzouh.com lanzoui.com lanzouj.com lanzouk.com lanzoul.com lanzoum.com lanzouo.com lanzoup.com lanzouq.com lanzous.com lanzout.com lanzouu.com lanzouv.com lanzouw.com lanzoux.com lanzouy.com woozooo.com + +LANZOU baidupan.com ilanzou.com lanosso.com +lanzou.com lanzoub.com lanzouc.com lanzoue.com lanzouf.com lanzoug.com lanzouh.com lanzoui.com lanzouj.com lanzouk.com lanzoul.com lanzoum.com lanzouo.com lanzoup.com lanzouq.com lanzous.com lanzout.com lanzouu.com lanzouv.com lanzouw.com lanzoux.com lanzouy.com +lanzov.com woozooo.com  LARACASTS laracasts.com -/ -LARK larksuite.comlarksuitecdn.com -r - LAUNCHPAD launchpad.netlaunchpadlibrarian.comlaunchpadlibrarian.netlaunchpadlibrarian.org + +LARK anycross.com  blmpb.combytedancehermestest.comfalconsending.com +fei-shu.cn!feishu-3rd-party-services.comfeishu-boe.netfeishu-customer.cn feishu-pre.cnfeishu-pre.net feishu-psc.cnfeishu-staging.cn  feishu.cn +feishu.netfeishuapp-cdn.net feishuapp.cn feishuapp.com feishucdn.com feishudoc.cn feishudoc.comfeishuhuiyi.cnfeishuhuiyi.comfeishuimg-boe.comfeishuimg-pre.com feishuimg.comfeishukacdn.comfeishumeetings.cnfeishumeetings.comfeishuoffice.cnfeishuoffice.com feishuopenplatformrecord.com feishupkg.comfeishustatus.cn feishuvc.cn feishuvc.com getfeishu.cn getfeishu.com +getsays.cn getsays.com  lackvc.cnsecurityfeishu.cn securityfs.cnstatusfeishu.cn%!frontier-lark-lb-v3.lf.bytelb.netlark-passport-qa-sg.net lark.cn larkcloud.com larkcloud.net +larkfn.comlarkmeetings.cnlarkmeetings.comlarkoffice.comlarkoffice.com.bytedns1.comlarkofficeapp-boe.comlarkofficeapp-pre.comlarkofficeapp.comlarkofficeboe.comlarkofficecdn.comlarkofficeimg.comlarkofficepkg.comlarkofficepre.com larkrooms.cn larkrooms.comlarksuite-pre.com larksuite.comlarksuite.com.ttdns1.comlarksuite.com.ttdns2.comlarksuitecdn.comlarksuiteimg-boe.comlarksuiteimg-pre.comlarksuiteimg.com +larkvc.comstatuslarkoffice.comthelarkcloud.combaseopendev.com bytecloud.com +byteoc.combytewebservice.com +bytexns.cn bytexns.com bytexns.net bytexopen.combytexservice.com meegobeta.comoceancloudapi.com +okr.cn okr.com +okr.com.cnvscenevideo.com + + LARK-GLOBAL%!frontier-lark-lb-v3.lf.bytelb.netlark-passport-qa-sg.net lark.cn larkcloud.com larkcloud.net +larkfn.comlarkmeetings.cnlarkmeetings.comlarkoffice.comlarkoffice.com.bytedns1.comlarkofficeapp-boe.comlarkofficeapp-pre.comlarkofficeapp.comlarkofficeboe.comlarkofficecdn.comlarkofficeimg.comlarkofficepkg.comlarkofficepre.com larkrooms.cn larkrooms.comlarksuite-pre.com larksuite.comlarksuite.com.ttdns1.comlarksuite.com.ttdns2.comlarksuitecdn.comlarksuiteimg-boe.comlarksuiteimg-pre.comlarksuiteimg.com +larkvc.comstatuslarkoffice.comthelarkcloud.com +4 +LASTFM last.fmlastfm.freetls.fastly.net + + LAUNCHPAD launchpad.netlaunchpadcontent.netlaunchpadlibrarian.comlaunchpadlibrarian.netlaunchpadlibrarian.org  LAVTEAM lavteam.org  @@ -14024,22 +15351,34 @@ lemall.com letv.com letvcdn.com letvimg.com ) LEANPLUM-ADS leanplum.com ads + +LENOVO +lenovo.net +baiying.cnbaiying.com.cncftsupport.comcon-c-hybris.lenovo.comileapcloud.comlenovocloudos.com  lenovo.cn +lenovo.com lenovo.com.cnlenovoeservice.comlenovovip.com.cn  lxzjjt.cn +lxzjjt.comthinkcloudlab.com thinkpad.comzhiliaowenda.com.cn blurdev.comchainedbox.com  fm365.com +idea123.cn jhwan.com.cn juhuiwan.comjuhuiwan.com.cn juhuiwan.net lenauth.comlenovogame.com lenovomm.cn lenovomm.com +lx.pub +lx.run surepush.cn +zui.cn zui.com +zuk.cn zuk.com +zuk.com.cnlenovocare.com.cn lenovocust.cnlenovomobile.comcunchuhulian-ln.cnlenovonetapp.com +dayin8.comiprintworks.cnlenovoimage.cnlenovoimage.comlenovoprinter.comlenovoprinter.com.cnlenovoprinter.netthinkprinter.cnthinkprinter.com.cnthinkprinter.net +zxsales.cn!lenovo.com.cdn.cloudflare.net B LETHALHARDCORElethalhardcore.comlethalhardcorevr.com F LETSENCRYPT  lencr.orgletsencrypt.comletsencrypt.org - + LETV-ADS#api.game.letvstore.com ads ark.letv.com ads dc.letv.com -adsdev.dc.letv.com ads fz.letv.com ads g3.letv.com adsletv.allyes.com adsminisite.letv.com adsmsg.m.letv.com adsn.mark.letv.com -adsplog.dc.letv.com adspro.hoye.letv.com ads pro.letv.com ads stat.letv.com @@ -14067,6 +15406,8 @@ lietou.comlietou-static.com lih.kg  lihkg.com  LIMELIGHTdelvenetworks.com limelight.com  lldns.netllnw-trials.com llnw.com llnw.net  llnwd.net  llnwi.net +Q +LINAKESI linakesi.com linakesi.cn lazycat.cloud heiyu.space  LINE gcld-line.com lin.eeline-apps-beta.comline-apps-rc.com line-apps.com line-beta.me line-cdn.net line-scdn.net line.biz line.me line.naver.jp linecorp.comlinefriends.comlinefriends.com.tw linegame.jplinemobile.comlinemyshop.comlineshoppingseller.com  linetv.tw @@ -14100,6 +15441,9 @@ LOCALIZEJSlocalizecdn.comlocalizejs.comlocalizestatus.com 7 LONDONREALfreedomplatform.tv londonreal.tv + + +LONGBRIDGElongbridge.cloudlongbridge.global longbridge.hk longbridge.sglongbridgeapp.comlongportapp.com  lbkrs.com  wbrks.com  LOWIRO lowiro.com @@ -14187,7 +15531,7 @@ A M MESSENGERfbmessenger.comm.me messenger.com nbabot.net -Y +Z METAaboutfacebook.com accessfacebookfromschool.com acebooik.com acebook.comadvancediddetection.comaskfacebook.netaskfacebook.org atdmt2.com atlasdmt.comatlasonepoint.combuyingfacebooklikes.comcareersatfb.comcelebgramme.comchina-facebook.com click-url.comcomo-hackearfacebook.comcrowdtangle.com dacebook.comdlfacebook.comdotfacebook.comdotfacebook.netexpresswifi.com faacebok.com faacebook.com faasbook.com facbebook.com facbeok.com facboo.com facbook.com facbool.com facboox.com faccebook.comfaccebookk.com facdbook.com facdebook.com face-book.com faceabook.com facebboc.com facebbook.comfacebboook.com facebcook.com facebdok.com facebgook.com facebhook.com facebkkk.com facebo-ok.com faceboak.com facebock.com facebocke.com facebof.com faceboik.com facebok.comfacebokbook.com facebokc.com facebokk.com facebokok.com faceboks.com facebol.com facebolk.com facebomok.com faceboo.com facebooa.com faceboob.comfaceboobok.com facebooc.com faceboock.com facebood.com facebooe.com faceboof.com facebooi.com facebooik.com facebooik.org facebooj.comfacebook-corp.comfacebook-covid-19.comfacebook-ebook.comfacebook-forum.comfacebook-hardware.comfacebook-inc.comfacebook-login.comfacebook-newsroom.comfacebook-newsroom.orgfacebook-pmdcenter.comfacebook-pmdcenter.netfacebook-pmdcenter.orgfacebook-privacy.comfacebook-program.comfacebook-studio.comfacebook-support.orgfacebook-texas-holdem.comfacebook-texas-holdem.net facebook.br facebook.ca facebook.cc facebook.comfacebook.design facebook.net facebook.hu facebook.in fecebook.net facebook.nl facebook.org facebook.se facebook.shop facebook.tv facebook.us facebook.wangfacebook123.orgfacebook30.comfacebook30.netfacebook30.orgfacebook4business.comfacebookads.com"facebookadvertisingsecrets.comfacebookatschool.comfacebookawards.comfacebookblueprint.netfacebookbrand.comfacebookbrand.net3/facebookcanadianelectionintegrityinitiative.comfacebookcareer.comfacebookcheats.comfacebookck.comfacebookclub.comfacebookcom.comfacebookconsultant.orgfacebookcoronavirus.comfacebookcovers.orgfacebookcredits.infofacebookdating.netfacebookdusexe.orgfacebookemail.comfacebookenespanol.comfacebookexchange.comfacebookexchange.netfacebookfacebook.comfacebookflow.comfacebookgames.comfacebookgraphsearch.comfacebookgraphsearch.infofacebookgroups.comfacebookhome.ccfacebookhome.comfacebookhome.infofacebookhub.com facebooki.comfacebookinc.comfacebookland.comfacebooklikeexchange.comfacebooklive.comfacebooklivestaging.netfacebooklivestaging.orgfacebooklogin.comfacebooklogin.infofacebookloginhelp.netfacebooklogs.comfacebookmail.comfacebookmail.tvfacebookmanager.infofacebookmarketing.info facebookmarketingpartner.com!facebookmarketingpartners.comfacebookmobile.comfacebookmsn.comfacebooknews.comfacebooknfl.comfacebooknude.comfacebookofsex.comfacebookook.comfacebookpaper.comfacebookpay.comfacebookphonenumber.netfacebookphoto.comfacebookphotos.comfacebookpmdcenter.comfacebookpoke.netfacebookpoke.orgfacebookpoker.infofacebookpokerchips.infofacebookporn.netfacebookporn.orgfacebookporno.netfacebookportal.com facebooks.comfacebooksafety.comfacebooksecurity.netfacebookshop.comfacebooksignup.netfacebooksite.netfacebookstories.comfacebookstudios.netfacebookstudios.orgfacebooksupplier.comfacebooksuppliers.comfacebookswagemea.comfacebookswagstore.comfacebooksz.comfacebookthreads.netfacebooktv.netfacebooktv.orgfacebookvacation.com facebookw.comfacebookworld.com facebool.com facebool.info facebooll.com faceboom.com faceboon.com faceboonk.comfaceboooik.com faceboook.com faceboop.com faceboot.com faceboox.com facebopk.com facebpook.com facebuk.com facebuok.com facebvook.com facebyook.com facebzook.comfacecbgook.com facecbook.com facecbook.org facecook.com facecook.org facedbook.com faceebok.com faceebook.com faceebot.com facegbok.com facegbook.com faceobk.com faceobok.com faceobook.com faceook.comfacerbooik.com facerbook.com facesbooc.comfacesounds.com facetook.com facevbook.com facewbook.co facewook.comfacfacebook.com facfebook.com fackebook.com facnbook.com facrbook.com facvebook.com facwebook.com facxebook.com fadebook.com @@ -14202,9 +15546,21 @@ redkix.com workplace.comworkplaceusecases.comfbcdn-a.akamaihd.n buck.build buckbuild.comcomponentkit.org draftjs.org f8.comfacebookappcenter.infofacebookappcenter.netfacebookappcenter.orgfacebookconnect.comfacebookdevelopergarage.comfaciometrics.com fasttext.cc fbf8.com fbinfer.com fblitho.com fbredex.com fbrell.com flow.dev flow.org flowtype.org frescolib.org hacklang.org hhvm.commakeitopen.com mcrouter.net mcrouter.orgmessengerdevelopers.com -ogp.meopengraphprotocol.comopengraphprotocol.org  parse.com pyrobot.org  react.com reactjs.com reactjs.org recoiljs.org rocksdb.com rocksdb.net rocksdb.orgyogalayout.comdevelopers.facebook.com!achat-followers-instagram.com#acheter-followers-instagram.com$ acheterdesfollowersinstagram.com!acheterfollowersinstagram.combookstagram.comcarstagram.comcdninstagram.comchickstagram.com ig.me  igcdn.com igsonar.com igtv.com imstagram.com imtagram.cominstaadder.cominstachecker.cominstafallow.cominstafollower.cominstagainer.com instagda.com instagify.cominstagmania.com instagor.cominstagram-brand.cominstagram-engineering.cominstagram-help.cominstagram-press.cominstagram-press.net instagram.cominstagramci.cominstagramcn.cominstagramdi.cominstagramhashtags.netinstagramhilecim.cominstagramhilesi.orginstagramium.cominstagramizlenme.cominstagramkusu.cominstagramlogin.cominstagramm.cominstagramn.cominstagrampartners.cominstagramphoto.cominstagramq.cominstagramsepeti.cominstagramtakipcisatinal.netinstagramtakiphilesi.cominstagramtips.cominstagramtr.com instagran.cominstagranm.com instagrem.com instagrm.cominstagtram.com instagy.cominstamgram.cominstangram.cominstanttelegram.cominstaplayer.net instastyle.tv instgram.com intagram.com intagrm.com intgram.comkingstagram.comlnstagram-help.comtheinstagramhack.comoninstagram.comonline-instagram.comonlineinstagram.comweb-instagram.netwwwinstagram.comfbmessenger.comm.me messenger.com +ogp.meopengraphprotocol.comopengraphprotocol.org  parse.com pyrobot.org  react.com reactjs.com reactjs.org recoiljs.org rocksdb.com rocksdb.net rocksdb.orgyogalayout.comdevelopers.facebook.com graph.instagram.com +ads)graph-fallback.instagram.com +ads!achat-followers-instagram.com#acheter-followers-instagram.com$ acheterdesfollowersinstagram.com!acheterfollowersinstagram.combookstagram.comcarstagram.comcdninstagram.comchickstagram.com ig.me  igcdn.com igsonar.com igtv.com imstagram.com imtagram.cominstaadder.cominstachecker.cominstafallow.cominstafollower.cominstagainer.com instagda.com instagify.cominstagmania.com instagor.cominstagram-brand.cominstagram-engineering.cominstagram-help.cominstagram-press.cominstagram-press.net instagram.cominstagramci.cominstagramcn.cominstagramdi.cominstagramhashtags.netinstagramhilecim.cominstagramhilesi.orginstagramium.cominstagramizlenme.cominstagramkusu.cominstagramlogin.cominstagramm.cominstagramn.cominstagrampartners.cominstagramphoto.cominstagramq.cominstagramsepeti.cominstagramtakipcisatinal.netinstagramtakiphilesi.cominstagramtips.cominstagramtr.com instagran.cominstagranm.com instagrem.com instagrm.cominstagtram.com instagy.cominstamgram.cominstangram.cominstanttelegram.cominstaplayer.net instastyle.tv instgram.com intagram.com intagrm.com intgram.comkingstagram.comlnstagram-help.comtheinstagramhack.comoninstagram.comonline-instagram.comonlineinstagram.comweb-instagram.netwwwinstagram.comfbmessenger.comm.me messenger.com nbabot.net binoculus.com buyoculus.com ocul.usoculus-china.com -oculus.comoculus2014.com oculus3d.comoculusblog.comoculusbrand.comoculuscasino.net oculuscdn.comoculusconnect.comoculusdiving.comoculusforbusiness.comoculusrift.com oculusvr.compowersunitedvr.com threads.net wa.mewhatsapp-plus.infowhatsapp-plus.mewhatsapp-plus.net whatsapp.cc whatsapp.com whatsapp.info whatsapp.net whatsapp.org whatsapp.tvwhatsappbrand.com meta.com +oculus.comoculus2014.com oculus3d.comoculusblog.comoculusbrand.comoculuscasino.net oculuscdn.comoculusconnect.comoculusdiving.comoculusforbusiness.comoculusrift.com oculusvr.compowersunitedvr.com threads.netgraph.whatsapp.com +adsgraph.whatsapp.net +ads wa.mewhatsapp-plus.infowhatsapp-plus.mewhatsapp-plus.net whatsapp.cc whatsapp.com whatsapp.info whatsapp.net whatsapp.org whatsapp.tvwhatsappbrand.com meta.ai meta.com + +META-ADS#analytics.facebook.com +adspixel.facebook.com +ads graph.instagram.com +ads)graph-fallback.instagram.com +adsgraph.whatsapp.com +adsgraph.whatsapp.net +ads e METART metart.commetartnetwork.com metcams.comnaiadsystems.com  nsimg.net @@ -14214,7 +15570,7 @@ metart.commetartnetwork.com metcams.comnaiadsystems.com  ns MIAOMIAOZHE miaomiaoz.commiaomiaozhe.com  MIAOPAI miaopai.com -q +x MICROSOFT azure 21vbc.com cn21vbluecloud.com cn21vbluecloud.net @@ -14276,16 +15632,17 @@ b3itech.cn cnazure.microsoft.com"azuremarketplace.microsoft.com azure-dns.cn cn azure-dns.comazure-dns.info azure-dns.net azure-dns.org).+\.azure-dns-([1-9]|10)\.cn$ cnbing bing.com bing.com.cn -cn bing.net bingads.combingagencyawards.com bingapis.combingapistatistics.combingsandbox.combingvisualsearch.com bingworld.combluehatnights.com -dictate.msflipwithsurface.commasalladeloslimites.commicrosoft-give.commicrosoftcloudsummit.commicrosoftdiplomados.commicrosoftlatamholiday.commicrosoftmxfilantropia.com!microsoftpartnersolutions.commsunlimitedcloudsummit.comoffice365love.comoffice365tw.comrenovacionoffice.comsprinklesapp.com cn.bing.com +cn bing.net bing123.com bingads.combingagencyawards.com bingapis.combingapistatistics.combingparachute.combingsandbox.combingvisualsearch.com bingworld.combluehatnights.com +dictate.msflipwithsurface.commasalladeloslimites.commicrosoft-give.commicrosoftcloudsummit.commicrosoftdiplomados.commicrosoftlatamholiday.commicrosoftmxfilantropia.com!microsoftpartnersolutions.commsunlimitedcloudsummit.comoffice365love.comoffice365tw.comrenovacionoffice.comsprinklesapp.comlocation.microsoft.com cn.bing.com cn cn.bing.net +cncn.mm.bing.net cn ditu.live.com cnbj1.api.bing.com cnemoi-cncdn.bing.com cn npm.community  npmjs.com  npmjs.org atom.iodependabot.com ghcr.io git.io github.blog github.comgithub.community -github.dev  github.io githubapp.comgithubassets.comgithubhackathon.comgithubpreview.devgithubstatus.comgithubuniverse.comgithubusercontent.com myoctocat.comopensource.guide repo.newthegithubshop.com!github-cloud.s3.amazonaws.comFBgithub-production-release-asset-[0-9a-za-z]{6}\.s3\.amazonaws\.comadaptivecards.ioapi-extractor.com +github.dev  github.io githubapp.comgithubassets.comgithubhackathon.comgithubnext.comgithubpreview.devgithubstatus.comgithubuniverse.comgithubusercontent.com myoctocat.comopensource.guide repo.newthegithubshop.comblob.core.windows.net!github-cloud.s3.amazonaws.comHD^github-production-release-asset-[0-9a-za-z]{6}\.s3\.amazonaws\.com$adaptivecards.ioapi-extractor.com apisof.net appcenter.ms blazor.netbotframework.comcodethemicrobit.comdevopsassessment.net dot.netgamesstack.comgraphengine.ioinsiderdevtour.com jwt.ms microbit.orgmicrosoftadc.commicrosoftgamestack.commicrosoftiotinsiderlabs.commicrosoftreactor.cn @@ -14297,7 +15654,7 @@ vscode.devvscode-cdn.netvscode-unpkg.net xamarin.comaz764 msocsp.comcrl.microsoft.commscrl.microsoft.comocsp.microsoft.comoneocsp.microsoft.comwww.microsoft.com cnmicrosoftnews.ccmicrosoftnews.cn cnmicrosoftnews.commicrosoftnews.netmicrosoftnews.orgmicrosoftnewsforkids.commicrosoftnewsforkids.netmicrosoftnewsforkids.orgmicrosoftnewskids.commicrosoftnewskids.netmicrosoftnewskids.orgmsn.cn -cn msn.commsnewskids.commsnewskids.netmsnewskids.org msnkids.com 1drv.com 1drv.mslivefilestore.com onedrive.coonedrive.co.uk onedrive.com onedrive.eu onedrive.net onedrive.orgonedrive.live.comstorage.live.com +cn msn.commsnewskids.commsnewskids.netmsnewskids.org msnkids.commicrosoftstart.com  start.com 1drv.com 1drv.mslivefilestore.com onedrive.coonedrive.co.uk onedrive.com onedrive.eu onedrive.net onedrive.orgonedrive.live.comstorage.live.com beth.games bethesda.netbethesdagamestudios.com bethsoft.com doom.comelderscrolls.comcallersbane.com minecraft.netminecraftshop.com mojang.comxboxforzamotorsport.netforzaracingchampionship.com forzarc.com gamepass.comorithegame.comrenovacionxboxlive.comtellmewhygame.com xbox.co xbox.com xbox.eu xbox.org xbox360.co xbox360.com @@ -14308,10 +15665,11 @@ xboxone.co xboxone.com xboxone.euxboxplayanywhere.comxboxservices.comxboxstudios.com xbx.lv  microsoft hotmail office skype windows microsoft.az microsoft.be microsoft.by microsoft.ca microsoft.cat microsoft.ch microsoft.cl microsoft.com microsoft.cz microsoft.de microsoft.dk microsoft.ee microsoft.es microsoft.eu microsoft.fi microsoft.ge microsoft.hu microsoft.io microsoft.is microsoft.it microsoft.jp microsoft.lt microsoft.lu microsoft.lv microsoft.md microsoft.net microsoft.pl microsoft.pt microsoft.red microsoft.ro microsoft.rs microsoft.ru microsoft.se microsoft.si microsoft.tv microsoft.ua microsoft.uz microsoft.vnfemalefounderscomp.com -m12.vc +m12.vc a-msedge.net aka.msankarazirvesi2018.comapplicationinsights.ioapplicationinsights.net aria.ms asp.net aspnetcdn.com binads.com bluehatil.com  boswp.combrazilpartneruniversity.com breakdown.mecentralvalidation.com -ch9.mscharticulator.com cloudapp.netcloudappsecurity.comcortanaanalytics.comcortanaskills.comcrmdynint-gcc.com crmdynint.comcrossborderexpansion.com docs.com dynamics.cn +ch9.mscharticulator.com cloudapp.netcloudappsecurity.comcortanaanalytics.comcortanaskills.comcrmdynint-gcc.com crmdynint.comcrossborderexpansion.comdcg.microsoft.com +cn docs.com dynamics.cn cn dynamics.com edgesuite.net efproject.net engkoo.com cnfasttrackreadysupport.comfluidpreview.comfootprintdns.comgameuxmasterguide.com @@ -14362,7 +15720,7 @@ pixapp.net powerapps.cn cnpowerautomate.com powerbi.cn cn powerbi.compowershellgallery.comprojectmurphy.netprojectsangam.com -pxt.ios-microsoft.com +pxt.ios-dc-msedge.nets-microsoft.com s-msedge.net s-msft.com  s-msn.com sfbassets.com sfbassets.net sfx.ms sharepoint.cn cnsharepoint.comsharepointonline.com  skype.com  skype.netskypeassets.comskypeassets.net staffhub.mssuccesswithteams.com surface.com @@ -14375,24 +15733,39 @@ winhec.com winhec.net yammer.com&"edge-skype-com.s-0001.s-msedge.netskype-edf.akadns.netskypedata.akadns.net(dl.delivery.mp.microsoft.com cn&download.windowsupdate.com +cn#b.c2r.ts.cdn.office.net cn'bg.v4.a.dl.ws.microsoft.com cn(bg4.v4.a.dl.ws.microsoft.com +cnbuild.microsoft.com cn2&cdn.marketplaceimages.windowsphone.com cn cn.windowssearch.com cn#ctldl.windowsupdate.com +cn"devblogs.microsoft.com cn#developer.microsoft.com cndocs.microsoft.com cn"download.microsoft.com cn/#download.visualstudio.microsoft.com +cn#f.c2r.ts.cdn.office.net cnfs.microsoft.com +cnlearn.microsoft.com cn(msgr.dlservice.microsoft.com cn, msgruser.dlservice.microsoft.com +cn, myvs.download.prss.microsoft.com +cn."oemsoc.download.prss.microsoft.com cn#officecdn.microsoft.com cn&qh.dlservice.microsoft.com +cn res-1.cdn.office.net +cnres.cdn.office.net cnsdx.microsoft.com +cn shell.cdn.office.net cn/#silverlight.dlservice.microsoft.com cn, slupdate.dlservice.microsoft.com +cn0$software.download.prss.microsoft.com +cn(statics.teams.cdn.office.net cn, storeedgefd.dsx.mp.microsoft.com +cn0$surface.downloads.prss.microsoft.com +cn."vscode.download.prss.microsoft.com +cn*vz.download.prss.microsoft.com cn&wl.dlservice.microsoft.com cn&wscont1.apps.microsoft.com cn&wscont2.apps.microsoft.com @@ -14412,8 +15785,9 @@ vscode.devvscode-cdn.netvscode-unpkg.net xamarin.comaz764 MICROSOFT-PKI msocsp.comcrl.microsoft.commscrl.microsoft.comocsp.microsoft.comoneocsp.microsoft.comwww.microsoft.com cn - -MIHOYOgenshinimpact.comhonkaiimpact3.comhonkaistarrail.com  hoyo.link hoyolab.com hoyoverse.comn0vadesktop.com mhyurl.cn + +MIHOYOgenshinimpact.comhonkaiimpact3.comhonkaistarrail.com  hoyo.link hoyolab.com hoyoverse.comn0vadesktop.com mhystatic.com +cn mhyurl.cn cn mihayo.com cn mihayou.com @@ -14430,8 +15804,9 @@ mihoyo.com cn yuanshen.com cn'^.+-mihayo\.akamaized\.net$ cn - - MIHOYO-CN mhyurl.cn + + MIHOYO-CN mhystatic.com +cn mhyurl.cn cn mihayo.com cn mihayou.com @@ -14448,8 +15823,8 @@ mihoyo.com cn yuanshen.com cn'^.+-mihayo\.akamaized\.net$ cn -< -MIKROTIK mikrotik.com mt.lvrouterboard.com +O +MIKROTIK mikrotik.com mt.lv mynetname.netrouterboard.com  MINDGEEK brazzer.com brazzers.com brazzers.xxxbrazzersnetwork.com  mofos.comdigitalplayground.com digitalplaygroundnetwork.commydirtyhobby.com mdhcdn.com @@ -14533,15 +15908,16 @@ mortein.cn cn movefrees.commovefreeoffers.commovefreerewards.comschiffvitamins.com * MOXING moxing.mobi moxing.news - -MOZILLA firefox.comfirefoxusercontent.comdeveloper.allizom.orgdeveloper.mozilla.orgmdn.allizom.net mdn.devmdn.mozilla.netmdn.mozit.cloud mdnplay.dev mdnyalp.devmdn.mozillademos.org rust-lang.org  rustup.rs  crates.io docs.rs mozilla.commozilla.community mozilla.net mozilla.orgextensionworkshop.com bugzilla.org getpocket.comseamonkey-project.orgthunderbird.net + +MOZILLA firefox.comfirefoxusercontent.comdeveloper.allizom.orgdeveloper.mozilla.orgmdn.allizom.net mdn.devmdn.mozilla.netmdn.mozit.cloud mdnplay.dev mdnyalp.devmdn.mozillademos.org rust-lang.org  rustup.rs  crates.io docs.rs +mozgcp.net mozilla.commozilla.community mozilla.net mozilla.orgextensionworkshop.com bugzilla.org getpocket.comseamonkey-project.orgthunderbird.net  MPV mpv.io - + MSNmicrosoftnews.ccmicrosoftnews.cn cnmicrosoftnews.commicrosoftnews.netmicrosoftnews.orgmicrosoftnewsforkids.commicrosoftnewsforkids.netmicrosoftnewsforkids.orgmicrosoftnewskids.commicrosoftnewskids.netmicrosoftnewskids.orgmsn.cn -cn msn.commsnewskids.commsnewskids.netmsnewskids.org msnkids.com +cn msn.commsnewskids.commsnewskids.netmsnewskids.org msnkids.commicrosoftstart.com  start.com  MUCINEX mucinex.ca @@ -14577,14 +15953,18 @@ myradio.hkmyradio.com.hk MZED mzed.com 0 N3RO n3ro.lol n3ro.net n3ro.wtf +, +NARWAL +narwal.comnarwaltech.com ! NAT-TESTnattest-china.com v NATIONALGEOGRAPHICnatgeomaps.comnationalgeographic.com"nationalgeographicpartners.com ngeo.com - + NAVER gcld-line.com lin.eeline-apps-beta.comline-apps-rc.com line-apps.com line-beta.me line-cdn.net line-scdn.net line.biz line.me line.naver.jp linecorp.comlinefriends.comlinefriends.com.tw linegame.jplinemobile.comlinemyshop.comlineshoppingseller.com  linetv.tw -nhncorp.jp grafolio.com  naver.com naver.jp  naver.net navercorp.com  plug.game pstatic.net webtoons.com +nhncorp.jp  naver.com naver.me  naver.netnaver.com.akadns.net navercorp.com  nheos.com pstatic.net clova.ainavercloudcorp.com naverncp.com +ncloud.comworksmobile.comnaverfincorp.com snow.me snowcorp.com vday.iostudiolico.comstudioncorp.com wattpad.com webtoons.comwebtoonscorp.com band.us grafolio.com modoo.at naver.jp naverads.comnaverads.com.akadns.net naverlabs.com  plug.game prismlive.com  NBCUNIVERSALdreamworks.com cnbc.com cnbcfm.com  msnbc.com @@ -14611,12 +15991,12 @@ youdao.com zhuanzfx.comanalytics.163.com ads crashlytics.163.com ads g.163.com ads -, -NETFLAV netflav.com netflav1.com - +> +NETFLAV netflav.com netflav1.com netflav5.com + NETFLIX fast.com netflix.ca netflix.com netflix.netnetflixinvestor.comnetflixtechblog.com nflxext.com nflximg.com nflximg.netnflxsearch.net -nflxso.net nflxvideo.netnetflixdnstest1.comnetflixdnstest2.comnetflixdnstest3.comnetflixdnstest4.comnetflixdnstest5.comnetflixdnstest6.comnetflixdnstest7.comnetflixdnstest8.comnetflixdnstest9.comnetflixdnstest10.com1-(^|\.)dualstack\.apiproxy-.+\.amazonaws\.com$40(^|\.)dualstack\.ichnaea-web-.+\.amazonaws\.com$netflix.com.edgesuite.net +nflxso.net nflxvideo.netnetflixdnstest0.comnetflixdnstest1.comnetflixdnstest2.comnetflixdnstest3.comnetflixdnstest4.comnetflixdnstest5.comnetflixdnstest6.comnetflixdnstest7.comnetflixdnstest8.comnetflixdnstest9.comnetflixdnstest10.com62(^|\.)apiproxy-device-prod-nlb-.+\.amazonaws\.com$73(^|\.)apiproxy-website-nlb-prod-.+\.amazonaws\.com$1-(^|\.)dualstack\.apiproxy-.+\.amazonaws\.com$40(^|\.)dualstack\.ichnaea-web-.+\.amazonaws\.com$netflix.com.edgesuite.net y NETLIFYbitballoon.com netlify.app netlify.comnetlifystatus.com!d33wubrfki0l68.cloudfront.net  @@ -14640,6 +16020,8 @@ Q newsmax.in newsmaxtv.com H NEXITALLY nexitally.comnexitallysafe.com nexitcore.com +I +NEXON nexon.co.jp  nexon.com nexon.ionexoncdn.co.kr < NGA nga.cn 178.com @@ -14649,7 +16031,7 @@ ngabbs.com ngacn.cc  NICONICOnico nicodic.jp nicomanga.jp niconico.com nicoseiga.jp nicovideo.jp nimg.jp simg.jp - + NIKEnikeair-nike-shoes.com airmax360.combeijingnike.combetternike.combuynikechina.comcheap-nike.comcheapnikedunks.comcheapnikeoutlet.comclassicnike.comcnnikebrand.comcustomnikeshoes.com easynike.com eenike.comfashionnike.com finenike.comfoampositeshoes.comgoldnikeclub.com gonike.comhandbags-nike.comhightopnikes.com @@ -14657,7 +16039,7 @@ idnike.cominikesneakers.com just-do-it.cn cn justdoit.uskicksnike1.comkidsnikeshoes.com mynike.comnike-air-max.comnike-dunksb.com nike-fr.com nike-org.com nike-shox.cn cn nike-uk.com nike-us.com nike-usa.com nike.cinike.cn -cn nike.com nike.com.br nike.com.hk nike.gy nike.hk  nike.shop nike.usnike.xn--hxt814e nike0594.com +cn nike.com nike.com.br nike.com.hk nike.gy nike.hk  nike.host  nike.shop nike.usnike.xn--hxt814e nike0594.com nike23.comnikeadidas.comnikeairhuarache.comnikeairmax.comnikeairmaxs.comnikeairmaxshoes.comnikeairrift.com nikeasia.comnikeaustralia.com nikeaw77.com  nikeb.com nikebbn.comnikebetrue.comnikebetterworld.cn cnnikebetterworld.com"nikebetterworld.com.cn cnnikebetterworld.infonikebetterworld.netnikebetterworld.org nikebiz.info nikebuy.com @@ -14687,6 +16069,8 @@ swoosh.com  swoosh.tvthedailysnkr.comverygoodnike.comwomen 6 NIKKAN-GENDAI gendai.netnikkan-gendai.com +t +NIKKE nikke-de.com nikke-en.com nikke-fr.com nikke-jp.com nikke-kr.com nikke-sea.com x NIKKEInikkei-cnbc.co.jp nikkei.co.jp nikkei.com  nikkei.jpnikkei4946.comnikkeibp.co.jp @@ -14710,6 +16094,8 @@ kyurem.com pokedex3d.compokemon-moon.compokemon-sun.compo wiifit.com wiifitu.com wiipartyu.com wiisports.comwiisportsresort.comwiiugamepad.com  wiivc.net xenoblade.com " NIST nist.gov time.gov + +NIXOS  nixos.org  NODEJS nodejs.org @@ -14784,8 +16170,8 @@ presage.io A OKAAPPS okaapps.com%^(.+\.)*zh\.okaapps\.com$ cn -8 -OKX okex.com okx.com +m +OKX okex.com okx.com okx-dns.com okx-dns1.com okx-dns2.com oklink.com cn  @@ -14810,9 +16196,9 @@ f ads . OP op.ggopgg-static.akamaized.net - -OPENAI -openai.com&"chat.openai.com.cdn.cloudflare.net openaiapi-site.azureedge.net2.openaicom-api-bdcpf8c6d2e9atf6.z01.azurefd.net1-openaicomproductionae4b.blob.core.windows.net.*production-openaicom-storage.azureedge.net$o33249.ingest.sentry.io + +OPENAI chatgpt.com oaistatic.comoaiusercontent.com +openai.com!openai.com.cdn.cloudflare.net openaiapi-site.azureedge.net2.openaicom-api-bdcpf8c6d2e9atf6.z01.azurefd.net1-openaicomproductionae4b.blob.core.windows.net.*production-openaicom-storage.azureedge.net@<^chatgpt-async-webps-prod-eastus-\d+\.webpubsub\.azure\.com$$o33249.ingest.sentry.io ads openaicom.imgix.net ads ( @@ -14830,16 +16216,23 @@ h OPENWEATHERopenweather.co.ukopenweathermap.org 0 OPENWRT openwrt.orglede-project.org + + OPENX-ADS openx.net +ads openxadexchange.com +ads openxcdn.net +ads openxenterprise.com +adsopenxmarket.asia +ads  OPPO coloros.com finzfin.com heytap.com heytapcs.comheytapdownload.comheytapimage.comheytapmobi.com myoppo.com nearme.com.cn oppo.cn oppo.com  oppo.mobioppodigital.com  oppoer.meoppomobile.com oppopay.com opposhop.cn realme.com realmebbs.comrealmemobile.com - + ORACLE -oracle -oracle.comoraclecloud.comoraclefoundation.org oracleimg.comoracleinfinity.ioateam-oracle.com -bronto.comcovid19-rx.org covid19rx.org sun.com addthis.comaddthiscdn.comaddthisedge.comjava java.com java.net +oracleateam-oracle.com +bronto.comcovid19-rx.org covid19rx.org +oracle.comoraclecloud.comoraclefoundation.org oracleimg.comoracleinfinity.io sun.comvirtualbox.org addthis.comaddthiscdn.comaddthisedge.comjava java.com java.net { OREILLY oreil.ly oreilly.comoreilly.com.cn cnoreilly.revieworeillystatic.com @@ -14853,6 +16246,9 @@ origin.com  origin.tv#cloudsync-prod.s3.amazonaws.comorigin-a.aka OSCHINA  gitee.com gitee.io oschina.net  OSDN osdn.net + +OSU a.ppy.sh assets.ppy.sh c.ppy.sh +osu.ppy.sh  m1.ppy.sh lazer.ppy.sh notify.ppy.sh sentry.ppy.shspectator.ppy.sh  OUPamamanualofstyle.com anb.org blackstonespoliceservice.com epigeum.com oed.com  omscr.com oup.com ouplaw.com ox.ac.ukoxfordaasc.comoxfordartonline.comoxfordbibliographies.comoxfordclinicalpsych.com oxforddnb.comoxfordfirstsource.comoxfordhandbooks.comoxfordlawtrove.comoxfordmedicine.comoxfordmusiconline.comoxfordpoliticstrove.com oxfordre.comoxfordreference.comoxfordscholarlyeditions.comoxfordscholarship.comoxfordwesternmusic.comsipriyearbook.org ukwhoswho.com"universitypressscholarship.comveryshortintroductions.com @@ -14867,6 +16263,9 @@ k joyjoy.netpandanet-igs.com , PAOFUYUN paofu.cloud paofuyun.me + + +PASKOOCHEHpaskoocheh.com  PASTEBIN pastebin.com | @@ -14917,23 +16316,31 @@ pearson.cl pearson.co.in pearson.co.jp pearson.compearson.c pearson.es pearson.fr pearson.plpearsonactivelearn.compearsonassessment.bepearsonassessment.depearsonassessment.dkpearsonassessment.frpearsonassessment.nlpearsonassessment.nopearsonassessment.sepearsonassessments.compearsoncanada.capearsonclinical.bepearsonclinical.capearsonclinical.co.ukpearsonclinical.com.aupearsonclinical.com.brpearsonclinical.depearsonclinical.dkpearsonclinical.espearsonclinical.eupearsonclinical.frpearsonclinical.inpearsonclinical.nlpearsonclinical.nopearsonclinical.sepearsoncmg.compearsoncred.compearsoned.co.nz pearsoned.compearsoneducacion.netpearsoneducationbooks.com pearsonelt.chpearsonelt.compearsonenespanol.compearsonhighered.compearsoninstitute.ac.zapearsonlongman.chpearsononlineacademy.compearsonperu.pepearsonplaces.com.au%!pearsonschoolsandfecolleges.co.ukpearsonvue.compearsonvue.netpobl-content.com  pvue1.com  pvue2.comquatrum.com.brstark-verlag.chtalentlens.comthemathsfactor.comxn--pearsonenespaol-brb.com -4 -PERL perl.org cpan.org metacpan.org + +PEPPY a.ppy.sh assets.ppy.sh c.ppy.sh +osu.ppy.sh  m1.ppy.sh lazer.ppy.sh notify.ppy.sh sentry.ppy.shspectator.ppy.sh +ppy.sh +Y +PERLperl.apache.org perl.org cpan.org metacpan.org +modperl.pl + + +PERPLEXITY perplexity.ai 7 PGYER  pgyer.com tracup.com frontjs.com v PHOENIX fengcx.com  ifeng.com ifengimg.comphoenixcenter.cn fengedu.comifengweekly.com - -PICACG  bikaa.xyz  bikac.xyz bikaios.xyzmanhuabika.com + +PICACG  bikaa.xyz  bikac.xyz bikaios.xyzmanhuabika.com picacgp.com picacgy.com picacn.xyz picacomic.com picacomic.xyz wikawika.xyz Z PICSEE pics.ee  picsee.co picsee.pro pise.pw pros.ee pse.is -o -PIKPAK mypikpak.com  pikpak.mepikpakdrive.com/"o4504926511693824.ingest.sentry.io + +PIKPAK mypikpak.com mypikpak.net  pikpak.mepikpakdrive.com/"o4504926511693824.ingest.sentry.io ads T PINDUODUO @@ -14941,8 +16348,14 @@ pddpic.com pinduoduo.com pinduoduo.net yangkeduo.com K PINGAN pingan.com pingan.com.cn pingan.com.hk yqb.com +v +PINGCAP +asktug.com +pingcap.cn pingcap.com tidb.ai tidb.net tidbcloud.com tikv.org  PINGPE ping.pe +; +PINGSX ping.sx$ public-us-pingsx.api.clonoth.com . PINKCORE pinkcore.com pinkcore.net  @@ -14965,6 +16378,8 @@ pixnet.pro  pixnet.tw pixplug.in  PKOPLINK pkoplink.com +. +PLAYBOY playboy.complayboy.com.uk 8 PLAYCOVER playcover.ioplaycover.workers.dev j @@ -15000,13 +16415,14 @@ pplive.com pptv.com PRIMEVIDEO aiv-cdn.netamazonprimevideo.cn cn#amazonprimevideo.com.cn cnamazonprimevideos.comamazonvideo.ccamazonvideo.comprime-video.com primevideo.ccprimevideo.comprimevideo.infoprimevideo.org primevideo.tv - -PRIVATElan localdomain example invalid  localhosttest local  home.arpa10.in-addr.arpa16.172.in-addr.arpa17.172.in-addr.arpa18.172.in-addr.arpa19.172.in-addr.arpa20.172.in-addr.arpa21.172.in-addr.arpa22.172.in-addr.arpa23.172.in-addr.arpa24.172.in-addr.arpa25.172.in-addr.arpa26.172.in-addr.arpa27.172.in-addr.arpa28.172.in-addr.arpa29.172.in-addr.arpa30.172.in-addr.arpa31.172.in-addr.arpa168.192.in-addr.arpa0.in-addr.arpa127.in-addr.arpa254.169.in-addr.arpa2.0.192.in-addr.arpa100.51.198.in-addr.arpa113.0.203.in-addr.arpa 255.255.255.255.in-addr.arpaLH0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpaLH1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa d.f.ip6.arpa8.e.f.ip6.arpa9.e.f.ip6.arpaa.e.f.ip6.arpab.e.f.ip6.arpa8.b.d.0.1.0.0.2.ip6.arpa64.100.in-addr.arpa65.100.in-addr.arpa66.100.in-addr.arpa67.100.in-addr.arpa68.100.in-addr.arpa69.100.in-addr.arpa70.100.in-addr.arpa71.100.in-addr.arpa72.100.in-addr.arpa73.100.in-addr.arpa74.100.in-addr.arpa75.100.in-addr.arpa76.100.in-addr.arpa77.100.in-addr.arpa78.100.in-addr.arpa79.100.in-addr.arpa80.100.in-addr.arpa81.100.in-addr.arpa82.100.in-addr.arpa83.100.in-addr.arpa84.100.in-addr.arpa85.100.in-addr.arpa86.100.in-addr.arpa87.100.in-addr.arpa88.100.in-addr.arpa89.100.in-addr.arpa90.100.in-addr.arpa91.100.in-addr.arpa92.100.in-addr.arpa93.100.in-addr.arpa94.100.in-addr.arpa95.100.in-addr.arpa96.100.in-addr.arpa97.100.in-addr.arpa98.100.in-addr.arpa99.100.in-addr.arpa100.100.in-addr.arpa101.100.in-addr.arpa102.100.in-addr.arpa103.100.in-addr.arpa104.100.in-addr.arpa105.100.in-addr.arpa106.100.in-addr.arpa107.100.in-addr.arpa108.100.in-addr.arpa109.100.in-addr.arpa110.100.in-addr.arpa111.100.in-addr.arpa112.100.in-addr.arpa113.100.in-addr.arpa114.100.in-addr.arpa115.100.in-addr.arpa116.100.in-addr.arpa117.100.in-addr.arpa118.100.in-addr.arpa119.100.in-addr.arpa120.100.in-addr.arpa121.100.in-addr.arpa122.100.in-addr.arpa123.100.in-addr.arpa124.100.in-addr.arpa125.100.in-addr.arpa126.100.in-addr.arpa127.100.in-addr.arpa%!^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$instant.arubanetworks.comsetmeup.arubanetworks.comcaptive.apple.com!connectivitycheck.gstatic.comasusrouter.comrouter.asus.comwww.asusrouter.comnetworkcheck.kde.orgrouterlogin.comwww.routerlogin.com + +PRIVATElan localdomain example invalid  localhosttest local  home.arpa10.in-addr.arpa16.172.in-addr.arpa17.172.in-addr.arpa18.172.in-addr.arpa19.172.in-addr.arpa20.172.in-addr.arpa21.172.in-addr.arpa22.172.in-addr.arpa23.172.in-addr.arpa24.172.in-addr.arpa25.172.in-addr.arpa26.172.in-addr.arpa27.172.in-addr.arpa28.172.in-addr.arpa29.172.in-addr.arpa30.172.in-addr.arpa31.172.in-addr.arpa168.192.in-addr.arpa0.in-addr.arpa127.in-addr.arpa254.169.in-addr.arpa2.0.192.in-addr.arpa100.51.198.in-addr.arpa113.0.203.in-addr.arpa 255.255.255.255.in-addr.arpaLH0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpaLH1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa d.f.ip6.arpa8.e.f.ip6.arpa9.e.f.ip6.arpaa.e.f.ip6.arpab.e.f.ip6.arpa8.b.d.0.1.0.0.2.ip6.arpa64.100.in-addr.arpa65.100.in-addr.arpa66.100.in-addr.arpa67.100.in-addr.arpa68.100.in-addr.arpa69.100.in-addr.arpa70.100.in-addr.arpa71.100.in-addr.arpa72.100.in-addr.arpa73.100.in-addr.arpa74.100.in-addr.arpa75.100.in-addr.arpa76.100.in-addr.arpa77.100.in-addr.arpa78.100.in-addr.arpa79.100.in-addr.arpa80.100.in-addr.arpa81.100.in-addr.arpa82.100.in-addr.arpa83.100.in-addr.arpa84.100.in-addr.arpa85.100.in-addr.arpa86.100.in-addr.arpa87.100.in-addr.arpa88.100.in-addr.arpa89.100.in-addr.arpa90.100.in-addr.arpa91.100.in-addr.arpa92.100.in-addr.arpa93.100.in-addr.arpa94.100.in-addr.arpa95.100.in-addr.arpa96.100.in-addr.arpa97.100.in-addr.arpa98.100.in-addr.arpa99.100.in-addr.arpa100.100.in-addr.arpa101.100.in-addr.arpa102.100.in-addr.arpa103.100.in-addr.arpa104.100.in-addr.arpa105.100.in-addr.arpa106.100.in-addr.arpa107.100.in-addr.arpa108.100.in-addr.arpa109.100.in-addr.arpa110.100.in-addr.arpa111.100.in-addr.arpa112.100.in-addr.arpa113.100.in-addr.arpa114.100.in-addr.arpa115.100.in-addr.arpa116.100.in-addr.arpa117.100.in-addr.arpa118.100.in-addr.arpa119.100.in-addr.arpa120.100.in-addr.arpa121.100.in-addr.arpa122.100.in-addr.arpa123.100.in-addr.arpa124.100.in-addr.arpa125.100.in-addr.arpa126.100.in-addr.arpa127.100.in-addr.arpa%!^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$instant.arubanetworks.comsetmeup.arubanetworks.comcaptive.apple.com!connectivitycheck.gstatic.comasusrouter.comrouter.asus.comwww.asusrouter.comcp.cloudflare.comdetectportal.firefox.comnetworkcheck.kde.org!location.services.mozilla.comrouterlogin.comwww.routerlogin.com hiwifi.com leike.cc  my.router peiluyou.com phicomm.me -router.ctc plex.directlocalhost.sec.qq.comlocalhost.ptlogin2.qq.com tendawifi.comtplinkwifi.net +router.ctc plex.directlocalhost.sec.qq.comlocalhost.ptlogin2.qq.comtest.steampowered.com tendawifi.comtplinkwifi.net tplogin.cnmsftconnecttest.com msftncsi.com -miwifi.comwww.mifiwi.com zte.home +miwifi.comwww.miwifi.com zte.home +ts.net - PROJECTSEKAIsekai.colorfulpalette.org 6 @@ -15038,17 +16454,17 @@ $ PYTHON-COMMUNITY piwheels.org $ QCC qcc.com qichacha.com -4 +4 QCLOUD comsenz.com discuz.net discuz.org dns.pub  dnsapi.cn  dnspod.cn dnspod.com dnspod.com.cn dnspod.mobi dnspod.net -dnspod.org  dnsv2.com  dnsv3.com  dnsv4.com  dnsv5.com doh.pub acctdns.com acctdns.net aitransfy.comapaas-zone-test.comapigwtencent.com bkapigw.com +dnspod.org  dnsv2.com  dnsv3.com  dnsv4.com  dnsv5.com doh.pub dot.pub acctdns.com acctdns.net aitransfy.comapaas-zone-test.comapigwtencent.com bkapigw.com bkapps.com bkclouds.cc bktencent.com build9s.iobyodonline.com  cdn-go.cn cdndoctor.com cdngot.com -cdntip.com cdntips.com cdntips.net cdnv1.cn cdnv2.cn cdnv3.cn cloud-industry-delivery.site cloudbase.cn cloudbase.netcloudidaas.com cloudsite.vip cncqcloud.comcomputeinit.com coolsite.vip  dnsv1.com dnsv1.com.cn dothework.cn ectencent.cnectencent.com.cn +cdntip.com cdntips.com cdntips.net cdnv1.cn cdnv2.cn cdnv3.cn cloud-industry-delivery.site cloudbase.cn cloudbase.netcloudidaas.com cloudsite.vip cncqcloud.comcomputeinit.com coolsite.vip  dnsv1.com dnsv1.com.cn dothework.cn ectencent.cnectencent.com.cnedgeonedy1.com essurl.com exmailgz.com fsphere.cngaapqcloud.com gitdrone.cn  gmedev.cn govqcloud.com gsadds.com gtm.pub hr-welink.comidcgcloudcs.com  iemiq.com igtm.pubintltencentcos.com @@ -15129,11 +16545,11 @@ youhua.com  yunpan.cn y QINGCLOUD frontwize.com qingcache.com qingcloud.com qingstor.com routewize.com yunify.com - +* -QINGTINGFM qingting.fm - -QINIUstaticfile.org qbox.me  qiniu.com qiniucdn.com qiniudn.com qiniudns.com +QINGTINGFM qingting.fm qtfm.cn + +QINIUstaticfile.netstaticfile.org qbox.me  qiniu.com qiniucdn.com qiniudn.com qiniudns.com qiniup.com  qnsdk.com  qnssl.com  QIXIN  qixin.com @@ -15145,13 +16561,14 @@ qlinkto.cn cn # QT qt.ioqt-project.org - + QUALCOMMairgonetworks.comberkanawireless.com cdmatech.comdragoniscoming.comgobianywhere.comgpsonextra.net cnhellosmartbook.com imod.comipleadership.org iskoot.com izatcloud.net cnmeetsmartbook.compatenttruth.org pixtronix.com!qceventscenter.com.cn cnqctconnect.com qprize.comqualcomm-email.com qualcomm.cn +cn*qualcomm.cn.cdn.cloudflare.net cnqualcomm.co.idqualcomm.co.inqualcomm.co.jpqualcomm.co.krqualcomm.co.uk qualcomm.comqualcomm.com.brqualcomm.com.tw qualcomm.de qualcomm.frqualcommhalo.comqualcommlabs.comqualcommmea.comqualcommretail.comqualcommventures.cnqualcommventures.com qualphone.com quicinc.com snapdragon.cnsnapdragonbooth.com uplinq.com wipower.comwirelessreach.com xtracloud.cn cn @@ -15174,8 +16591,11 @@ rakuten.tw  rclon.com rebates.jp  RARBG  dyncdn.me rarbg.me rarbg.toproxyrarbg.org rarbg.israrbgaccess.orgrarbgaccessed.org rarbgget.org rarbggo.orgrarbgmirror.comrarbgmirror.orgrarbgproxy.org rarbgprx.org rarbgto.orgrarbgunblock.comrarbgunblock.orgrarbgunblocked.org rarbgway.org -i -RAZER  razer.comrazersupport.com razerzone.com razerzone.jprespawnbyrazer.com + +RAZER  razer.com razerapi.com +cnrazerofficial.comrazersynapse.com +cnrazersupport.com razerzone.com +cn razerzone.jprespawnbyrazer.com B RBaerogard.com.auaerogard.com.cn cnaerogardcn.com @@ -15297,9 +16717,9 @@ rea.global REALTYPErealtype.co.jp realtype.jp ) REBRANDLY rb.gy rebrandly.com -d -REDDIT -reddit.comredditstatic.comredditmail.comredditmedia.com redd.it + +REDDIT redd.itreddit.app.link +reddit.comreddithelp.comredditmail.comredditmedia.comredditstatic.com redd.itreddit.map.fastly.net ( REDHAT redhat.com @@ -15328,6 +16748,8 @@ lolpcs.com lolshop.co.kr lolstatic.comlolusercontent.com lpl.com.cn cn pvp.net pvp.tv ulol.comlolstatic-a.akamaihd.netplayvalorant.comriotforgegames.comruinedking.comconvrgencegame.com + +ROBOROCK roborock.com  ROCKSTARrockstargames.com rsg.sc1-gamedownloads-rockstargames-com.akamaized.net)%media-rockstargames-com.akamaized.net*&videos-rockstargames-com.akamaized.net @@ -15370,9 +16792,9 @@ xn--cg4bkigalaxyappstore.comgalaxymobile.jpgame-platform.net ign.jpinnovations-i.com  ironna.jp  iza.ne.jpjapan-forward.com  keiba.netknowswho.co.jpmetropolitana.tokyo  mostly.jpsankei-ad-info.com sankei-ad.netsankei-books.co.jpsankei-call.jpsankei-digital.co.jpsankei-eiga.co.jpsankei-kaihatsu.co.jpsankei-kurashi.comsankei-shougakukai.jpsankei-tours.com sankei.co.jp sankei.com  sankei.jp sankeibiz.jp sankeishop.jp sanspo.comseasidestory.tokyoseiron-sankei.com tvnaviweb.jp zakzak.co.jp -U +` SB -dns.sb ip.sb loli.net sb.sb sm.msu.nu +dns.sb ip.gs ip.sb loli.net sb.sb sm.msu.nu www.sb . SCALAscala-lang.org scala-sbt.org @@ -15398,9 +16820,11 @@ N SEASUNseasungames.com xishanju.com xoyo.com testplus.cn n SECOM secom.co.jpsecomtrust.netcybertrust.co.jpcybertrust.ne.jpmanagedpki.ne.jp - + SECTIGOenterprisessl.comhackerguardian.cominstantssl.com oemssl.cn +cn(oemssl.cn.cdn.cloudflare.net cnoptimumssl.compositivessl.com sectigo.comsectigochina.com +cn/#sectigochina.com.cdn.cloudflare.net cntrust-provider.cn cntrust-provider.com usertrust.com aoc.cat catcert.catincommon-rsa.org netsolssl.com + @@ -15408,6 +16832,8 @@ n ads 3 SEGMENTFAULTsegmentfault.com  sifou.com +1 + SEHUATANG sehuatang.net sehuatang.org 5 SENSORSDATA-ADS"static.sensorsdata.cn ads @@ -15445,7 +16871,7 @@ U SIGNAL signal.art signal.orgsignalusers.orgwhispersystems.org - + SINA 2016.sina.cn adsad.sina.com.cn adsadbox.sina.com.cn @@ -15461,11 +16887,8 @@ signal.orgsignalusers.orgwhispersystems.org ads atm.sina.com adsbeacon.sina.com.cn ads biz.weibo.com -adsc.biz.weibo.com -ads!c.wcpt.biz.weibo.com ads%click.uve.mobile.sina.cn ads click.uve.weibo.com -adscm.dmp.sina.cn ads0#contentrecommend-out.mobile.sina.cn ads$count.video.sina.com.cn ads counter.sina.com.cn @@ -15480,17 +16903,11 @@ signal.orgsignalusers.orgwhispersystems.org adsgame.weibo.com ads"gw5.push.mcp.weibo.cn ads"gw6.push.mcp.weibo.cn -ads"img.adbox.sina.com.cn -ads#img.amp.ad.sina.com.cn ads"int.dpool.sina.com.cn ads%interest.mix.sina.com.cn -ads)log.interest.mix.sina.com.cn ads log.mix.sina.com.cn ads log.sina.cn -ads!m.beacon.sina.com.cn -adsm.game.weibo.cn ads!mg.games.sina.com.cn -ads!motu.p4p.sina.com.cn adsnewspush.sinajs.cn ads oascentral.sina.com ads#oascentral.sina.com.hk @@ -15500,10 +16917,8 @@ signal.orgsignalusers.orgwhispersystems.org adspfp.sina.com.cn adspfpip.sina.com ads!promote.biz.weibo.cn -ads r.dmp.sina.cn adsrm.sina.com.cn ads rs.sinajs.cn -adss.alitui.weibo.com ads"s.img.mix.sina.com.cn ads sapi.sina.cn ads sax.sina.cn @@ -15527,13 +16942,12 @@ signal.orgsignalusers.orgwhispersystems.org ads$wbpctips.mobile.sina.cn adswidget.weibo.com ads woocall.sina.com.cn -adszc.biz.weibo.com adszymo.mps.weibo.com ads  97973.com picself.cn sina.cn sina.com sina.com.cn sina.net sinaapp.com sinaedge.com sinaimg.cn sinaimg.com  sinajs.cn sinajs.comt.cn videoself.cn  wbimg.com wbimg.cn wcdn.cn weibo.cn  weibo.com weibo.com.cn weibocdn.com xhaiwai.com - + SINA-ADS 2016.sina.cn adsad.sina.com.cn adsadbox.sina.com.cn @@ -15549,11 +16963,8 @@ sinajs.comt.cn videoself.cn  wbimg.com wbimg.cn wcdn.cn ads atm.sina.com adsbeacon.sina.com.cn ads biz.weibo.com -adsc.biz.weibo.com -ads!c.wcpt.biz.weibo.com ads%click.uve.mobile.sina.cn ads click.uve.weibo.com -adscm.dmp.sina.cn ads0#contentrecommend-out.mobile.sina.cn ads$count.video.sina.com.cn ads counter.sina.com.cn @@ -15568,17 +16979,11 @@ sinajs.comt.cn videoself.cn  wbimg.com wbimg.cn wcdn.cn adsgame.weibo.com ads"gw5.push.mcp.weibo.cn ads"gw6.push.mcp.weibo.cn -ads"img.adbox.sina.com.cn -ads#img.amp.ad.sina.com.cn ads"int.dpool.sina.com.cn ads%interest.mix.sina.com.cn -ads)log.interest.mix.sina.com.cn ads log.mix.sina.com.cn ads log.sina.cn -ads!m.beacon.sina.com.cn -adsm.game.weibo.cn ads!mg.games.sina.com.cn -ads!motu.p4p.sina.com.cn adsnewspush.sinajs.cn ads oascentral.sina.com ads#oascentral.sina.com.hk @@ -15588,10 +16993,8 @@ sinajs.comt.cn videoself.cn  wbimg.com wbimg.cn wcdn.cn adspfp.sina.com.cn adspfpip.sina.com ads!promote.biz.weibo.cn -ads r.dmp.sina.cn adsrm.sina.com.cn ads rs.sinajs.cn -adss.alitui.weibo.com ads"s.img.mix.sina.com.cn ads sapi.sina.cn ads sax.sina.cn @@ -15615,7 +17018,6 @@ sinajs.comt.cn videoself.cn  wbimg.com wbimg.cn wcdn.cn ads$wbpctips.mobile.sina.cn adswidget.weibo.com ads woocall.sina.com.cn -adszc.biz.weibo.com adszymo.mps.weibo.com ads  @@ -15666,9 +17068,12 @@ szbdyd.com snodehome.com snodehome.cn SOFTBANK softbank sb-mobile.jpsb-telecom.netsoftbank-ipo.comsoftbank-jp.comsoftbank-robotics.comsoftbank-telecom.comsoftbank-telecom.net softbank.jp softbank.tvsoftbankbb.comsoftbankbb.netsoftbankci.comsoftbankhawksstore.jpsoftbankmobile.netsoftbankrobotics.comsoftbanktelecom.comsoftbankusa.netsoftbankventuresasia.comsoftbankworld.com : SOFTETHER softether.orgsoftether-download.com -F -SOGOU -go2map.com sogo.com  sogou.com sogoucdn.com + +SOGOUbinglianhuajianzhan.com ggoplay.com +ggowan.com +go2map.com  pinyin.cn +qd.ink sg.cn +sgtmos.com sgyeyou.com sgyouxi.com sogo.com sogou.cn  sogou.com sogou.com.cn  sogou.net sogoucdn.comsogoucdndl.comsogouimecdn.com sogou-inc.com sogou-op.org soso.com soso.com.cn sososnap.com teemo.cnwannianqingjianzhan.comxiangrikuijianzhan.comxiangrikuisite.com  xinyan.cn yeyousg.comyidianliulan.cnyidianliulan.comyuweikuijianzhan.com 0 SOHU sohu.com sohucs.com @@ -15720,9 +17125,17 @@ sndcdn.com Q SOURCEFORGEsourceforge.comsourceforge.net sf.net fsdn.com +) + SOURCEHUT sourcehut.org sr.ht + + SPACEMAIL spacemail.com +1 + SPACESHIP spacemail.com spaceship.com  SPACEX spacex.com +B + SPANKBANG spankbang.comspankbang.party  sb-cd.com  SPEEDTEST  cdnst.net cellmaps.com ekahau.cloud ekahau.com  ookla.comooklaserver.net pingtest.net speedtest.co speedtest.netspeedtestcustom.com webtest.netOB^speed\.(coe|open)\.ad\.[a-z]{2,6}\.prod\.hosts\.ooklaserver\.net$ @@ -15730,8 +17143,8 @@ ekahau.com  ookla.comooklaserver.net pingtest.net speedtest. : SPICEWORKSspiceworks.comspiceworksstatic.com - -SPOTIFY byspotify.com pscdn.co scdn.co spoti.fispotify-everywhere.com spotify.comspotify.designspotifycdn.comspotifycdn.netspotifycharts.comspotifycodes.comspotifyforbrands.comspotifyjobs.com&"audio-ak-spotify-com.akamaized.net'#audio4-ak-spotify-com.akamaized.net&"heads-ak-spotify-com.akamaized.net'#heads4-ak-spotify-com.akamaized.netspotify.com.edgesuite.netspotify.map.fastly.netspotify.map.fastlylb.net + +SPOTIFY byspotify.com pscdn.co scdn.co spoti.fispotify-everywhere.com spotify.comspotify.designspotifycdn.comspotifycdn.netspotifycharts.comspotifycodes.comspotifyforbrands.comspotifyjobs.com&"audio-ak-spotify-com.akamaized.net'#audio4-ak-spotify-com.akamaized.net+'cdn-spotify-experiments.conductrics.com&"heads-ak-spotify-com.akamaized.net'#heads4-ak-spotify-com.akamaized.netspotify.com.edgesuite.netspotify.map.fastly.netspotify.map.fastlylb.net  SPOTIFY-ADS'adeventtracker.spotify.com ads$adstudio-assets.scdn.co @@ -15751,6 +17164,10 @@ apress.com springer.comspringerlink.comspringernature.com  SSPAI  sspai.com Q SSRCLOUDairport-gov-cn.comcnix-gov-cn.comxn--d4ty0ojsqzfd.com +7 +ST +st.com%stmicroelectronics.com.cn +cn  STACKEXCHANGE askubuntu.comblogoverflow.comcodeforaliving.iomathoverflow.netserverfault.com sstatic.net stackapps.com stackauth.comstackexchange.com stackmod.blogstackoverflow.blogstackoverflow.costackoverflow.comstackoverflow.emailstackoverflowbusiness.comstackoverflowcareers.comstacksnippets.net superuser.com tex-talk.netthesffblog.com 1 @@ -15766,9 +17183,9 @@ Q STARPLUS starott.com starplus.comstar.api.edge.bamgrid.com%!star.connections.edge.bamgrid.com!star.content.edge.bamgrid.com"star.playback.edge.bamgrid.com / STARTPAGE startpage.com ixquick.com - +4 -STATICFILEstaticfile.org +STATICFILEstaticfile.netstaticfile.org STEAMplayartifact.com @@ -15807,6 +17224,10 @@ s stripe.comstripe.network stripecdn.com - SUBSCENE subscene.com i.jeded.com +Y + SUISHOUJI  feidee.cn +feidee.com +feidee.net ssjlicai.com sui.com  SUMKOOgongqingyun.cn jzfz.net  sumkoo.cn sumkoo.com @@ -15827,6 +17248,8 @@ ssacdn.com SURUGA-YA suruga-ya.com suruga-ya.jp  SVP svp-team.com +2 +SWAG 5w.ag swag-live.co  swag.live ^ SWIFTappleswift.com  swift.org swiftui.cn @@ -15849,6 +17272,9 @@ TAGTIC-ADS g1.tagtic.cn ads \ TAIKANG taikang.comtaikanglife.comtaikangzhijia.comtkhealthcare.com +< + TAILSCALE tailscale.com tailscale.io +ts.net $ TAOMEE 61.com @@ -15856,10 +17282,11 @@ taomee.com + TAPPX-ADSssp.api.tappx.com ads -( +j TAPTAP tapimg.com -taptap.com +tapimg.net  taptap.cn +taptap.com  taptap.iotaptapdada.com 8 TARGET target @@ -15878,8 +17305,8 @@ TEAMVIEWER teamviewer.cn " TED ted.com tedcdn.com - -TELEGRAM comments.app contest.com  graph.orgquiz.directoryt.me tdesktop.com + +TELEGRAMcdn-telegram.org comments.app contest.com fragment.com  graph.orgquiz.directoryt.me tdesktop.com telega.one telegra.phtelegram-cdn.org telegram.dog telegram.me telegram.orgtelegram.space telesco.pe @@ -15888,17 +17315,32 @@ telesco.pe TELEKOM telekom.com telekom.de telesec.de -V + +TELEVISION-ADS ad.hpplay.cn +adsadeng.hpplay.cn +ads#ads-uo.api.leiniao.com +ads#ads-ut.api.leiniao.com +adsads.api.my7v.com +ads ads.huan.tv +adsads.huantest.com +adsadvapi.joyplus.tv +ads advapikj.joyplus.tv +ads$euads-o.api.leiniao.com +ads!hwads-t.api.my7v.com +ads kuyun.com +ads!testads.api.my7v.com +ads +X TENCENT comsenz.com discuz.net discuz.org dns.pub  dnsapi.cn  dnspod.cn dnspod.com dnspod.com.cn dnspod.mobi dnspod.net -dnspod.org  dnsv2.com  dnsv3.com  dnsv4.com  dnsv5.com doh.pub acctdns.com acctdns.net aitransfy.comapaas-zone-test.comapigwtencent.com bkapigw.com +dnspod.org  dnsv2.com  dnsv3.com  dnsv4.com  dnsv5.com doh.pub dot.pub acctdns.com acctdns.net aitransfy.comapaas-zone-test.comapigwtencent.com bkapigw.com bkapps.com bkclouds.cc bktencent.com build9s.iobyodonline.com  cdn-go.cn cdndoctor.com cdngot.com -cdntip.com cdntips.com cdntips.net cdnv1.cn cdnv2.cn cdnv3.cn cloud-industry-delivery.site cloudbase.cn cloudbase.netcloudidaas.com cloudsite.vip cncqcloud.comcomputeinit.com coolsite.vip  dnsv1.com dnsv1.com.cn dothework.cn ectencent.cnectencent.com.cn +cdntip.com cdntips.com cdntips.net cdnv1.cn cdnv2.cn cdnv3.cn cloud-industry-delivery.site cloudbase.cn cloudbase.netcloudidaas.com cloudsite.vip cncqcloud.comcomputeinit.com coolsite.vip  dnsv1.com dnsv1.com.cn dothework.cn ectencent.cnectencent.com.cnedgeonedy1.com essurl.com exmailgz.com fsphere.cngaapqcloud.com gitdrone.cn  gmedev.cn govqcloud.com gsadds.com gtm.pub hr-welink.comidcgcloudcs.com  iemiq.com igtm.pubintltencentcos.com @@ -15985,7 +17427,7 @@ yufuid.net yunjitele.com.+\.dnse[0-5]\.(cn|com)$'#.+\.tdnsv([1-9] ads push.qq.com ads pgdt.gtimg.cn ads ugdtimg.com -ads openmidas.com  qq.designqqgamedesign.comtencent.design tjstats.comwegamedeveloper.comweui.io +ads openmidas.com  qq.designqqgamedesign.comtencent.design tjstats.comwegamedeveloper.comweixinbridge.comweui.io cnbattlecare.net cn gameitop.com cn gameloop.com @@ -16070,7 +17512,8 @@ wegame.com scescdn.cn cnscid.cn cn scsentry.cn -cn supercell.com!supercellcommunity.cn +cn supercell.com +!cn!supercellcommunity.cn cnsupercellsupport.cn cncodm.com cnbcfmglobal.com @@ -16089,9 +17532,12 @@ qqmail.com  qzone.com rtx.com.cnservicewechat.com tencent.cn tencent.co.id !cn tencent.comtencent.com.cntencent.com.hk tencent.nettencent.net.cntencentmusic.com -tenpay.com -wechat.com -weiyun.com alloyteam.com imweb.io ivweb.io  fyeds.com +tenpay.com  tfogc.com +wechat.com wechatpay.cn +weiyun.comwetv.vip +!cn wetvinfo.com +!cn wetv.qq.com +!cn alloyteam.com imweb.io ivweb.io  fyeds.com fyeds0.com fyeds1.com fyeds3.com @@ -16128,10 +17574,10 @@ fyeds9.com fymall0.com fymall1.com fymall4.com fymall7.com ads pgdt.gtimg.cn ads ugdtimg.com ads - - TENCENT-DEV openmidas.com  qq.designqqgamedesign.comtencent.design tjstats.comwegamedeveloper.comweui.io + + TENCENT-DEV openmidas.com  qq.designqqgamedesign.comtencent.design tjstats.comwegamedeveloper.comweixinbridge.comweui.io cn - + TENCENT-GAMESbattlecare.net cn gameitop.com cn gameloop.com @@ -16216,7 +17662,8 @@ wegame.com scescdn.cn cnscid.cn cn scsentry.cn -cn supercell.com!supercellcommunity.cn +cn supercell.com +!cn!supercellcommunity.cn cnsupercellsupport.cn cncodm.com cnbcfmglobal.com @@ -16226,6 +17673,9 @@ scescdn.cn 17roco.com cn roco.qq.com cn +X + TENDCLOUD tendcloud.comtalkingdata.comtalkinggame.com +cpatrk.net 8 TERMUX termux.com @@ -16240,8 +17690,9 @@ termux.org cntesla-cdn.thron.com  TESTtest.example.com - - TEST-IPV6 test-ipv6.com + + TEST-IPV6ams2.test-ipv6.comfra.test-ipv6.com sixte.sttest-ipv6.alpinedc.chtest-ipv6.arauc.brtest-ipv6.belwue.nettest-ipv6.carnet.hr test-ipv6.cl test-ipv6.comtest-ipv6.cs.umd.edu!test-ipv6.csclub.uwaterloo.ca test-ipv6.cztest-ipv6.epic.networktest-ipv6.fratec.net test-ipv6.freerangecloud.comtest-ipv6.go6.si test-ipv6.hu test-ipv6.istest-ipv6.iu13.net"test-ipv6.ke.liquidtelecom.nettest-ipv6.noroutetohost.nettest-ipv6.roedu.net test-ipv6.setest-ipv6.sin.vr.orgtest-ipv6.ttk.ru testipv6.de testipv6.cn +cn G TEX ctan.orglatex-project.org miktex.org tug.org @@ -16290,7 +17741,7 @@ TIANYANCHA jindidata.comtianyancha.com TIDAL  tidal.com tidalhifi.com wimpmusic.com  TIDELIFT tidelift.com - + TIKTOKbyteoversea.com !cn muscdn.com @@ -16299,10 +17750,16 @@ musical.ly !cntik-tokapi.com !cn tiktok.com +!cntiktokcdn-us.com +!cn tiktokcdn.com !cn tiktokd.net !cn tiktokd.org -!cn tiktokcdn.com !cn tiktokv.com +!cn +tiktokv.us +!cn +tiktokw.us +!cn ttwstatic.com !cn,p16-tiktokcdn-com.akamaized.net !cn  @@ -16310,24 +17767,21 @@ tiktok.com  TIPDM tipdim.org -b -TLD-!CNgovmileduacadaeafagaialamaoaqarasatauawaxazbabbbdbebfbgbhbibjblbmbnbobrbsbtbvbwbybzcacdcfcgchcickclcmcrcucvcwcxcyczdedjdkdmdodzeceeegehereseteufifjfkfmfofrgagbgdgegfggghgiglgmgngpgrgsgtgugwgyhkhmhnhrhthuidieiliminioiqirisitjejmjojpkekgkhkikmknkpkrkwkykzlalblclilklrlsltlulvlymamcmdmfmgmhmkmlmmmnmompmqmrmsmtmumvmwmxmymznancnenfngninlnonpnrnunzompapepfpgphpkplpmpnprpspsptpyqarerorsrurwsasbscsdsesgshsisjskslsmsnsososrssstsusvsxsysztctdtftgthtjtktltmtntotrtttvtwtzuaugukusuyuzvavcvevgvivnvuwfwsyeytzazmzwaflmlbnbanflnra averybbbbcgcebcrsdnbdnpdunsdvagerni globalxice locus mckinsey olayangroup -olayan praxisapseek -vistaprint vistawtc xerox athletabananarepublic  bloomberg boots calvinklein cartier chloegap gucci -hermesiwcjlc  lancaster lipsyloft mango  montblanc mrporter -netaporter -nextdirectnextnike oldnavy omega panerai  patagonia -piaget  piperlimepolo redstone +I +TLD-!CNmemeingfoozipmov nexusdadphdprofesqrsvpboodaynewdevpageapphowsoy xn--q9jyb4cgovmileduacadaeafagaialamaoaqarasatauawaxazbabbbdbebfbgbhbibjbmbnbobrbsbtbvbwbybzcacdcfcgchcickclcmcrcucvcwcxcyczdedjdkdmdodzeceeegereseteufifjfkfmfofrgagbgdgegfggghgiglgmgngpgrgsgtgugwgyhkhmhnhrhthuidieiliminioiqirisitjejmjojpkekgkhkikmknkpkrkwkykzlalblclilklrlsltlulvlymamcmdmgmhmkmlmmmnmompmqmrmsmtmumvmwmxmymznancnenfngninlnonpnrnunzompapepfpgphpkplpmpnprpspsptpyqarerorsrurwsasbscsdsesgshsisjskslsmsnsososrssstsusvsxsysztctdtftgthtjtktltmtntotrtttvtwtzuaugukusuyuzvavcvevgvivnvuwfwsyeytzazmzwaflmlbnbanflnracrsdnpdvagerniice locus mckinsey olayangroup +olayan praxisapseekwtc xerox athleta  bloomberg calvinkleingap gucci +hermes  lancaster lipsy mango +nextdirectnextnike omega redstone swatch africa capetown durban -joburg abudhabiarabasiadoha dubaikrd kyoto +joburg abudhabiarabasia dubaikrd kyoto nagoya okinawa osaka ryukyu taipei tatar tokyo yokohama alsace  amsterdambar  barcelona bayernbcn -berlin brussels budapestbzhcat conlogne corsica cymrueusfrlgalgent hamburg helsinki irishist istanbul koeln +berlin brusselsbzhcat corsica cymrueusfrlgalgent hamburg helsinki irishist istanbul koeln london madrid moscownrw parisruhr saarlandscot  stockholm swiss tirol @@ -16336,125 +17790,91 @@ vlaanderen waleswien zuerich quebec vegaskiwi  melbourne sydneylatrioaarp abbott -abbvie aetna alcon -anthembms -boehringer caremore -cialis dabur  freseniusjnj merck mutuelle +abbvie aetnabms +boehringer dabur  freseniusjnj sanofiaeg airbus alstom -aramco -blanco bosch -bostik -chesapeakechk crown -doosan -dupontflirfls flsmidth  gecompany grainger hitachi  honeywellifm ipirangajio komatsukoneksb  kuokgroup leclerclidl linde lottemanmtr reliance rexrothril rockwoolrwesandvikcoromant sandvik sapphiresca -schaeffler schmidt schwarzgroup schwarz senersewsncf statoil total -vanish -walter -warman weberweir woodsidezara zippo africamagic agakhanakdn -ansonsbabybar +aramco bosch +bostik crown +dupontflir grainger hitachiifm ipirangajio komatsu  kuokgroup leclerclidl lottemanmtr reliance rexrothrilrwesandvikcoromant sandvik +schaeffler schmidt schwarz senersewsncf total +walter weberweir woodsidezara africamagic agakhanakdnbabybar bharti bingocasa casinochat dating domains -extraspacegaygcc genting gleanhot ikano -imamat  ladbrokeslgbt -livestrongmaif -mattel persiangulf pokersas shellshia style sucks tatar -tattoo -tennic transformersvana -virgin vodkawinewmewtf bible catholic halal islam ismaili ummahxn--mgbi4ecexp astriumcern -emerck  hisamitsu lilly lundbeck lupin merckmsdmsdmtpc +extraspacegay gentinghot ikano +imamatlgbtmaif +mattelmoe pokersas shellshia style sucks tatar +tattoovana +virgin vodkawinewmewtf bible catholic ismailixn--mgbi4ecexpcern +emerck  hisamitsu lilly lundbeck merckmsdmsd otsuka -pfizer stadateva toray weather adultpornsexsexyxxx auspost deutschepostdhl epost fedex -pitneyxn--lgbbat1ad8j +pfizer stadateva toray weather adultpornsexsexyxxx auspostdhl fedexxn--lgbbat1ad8j xn--y9a3aqxn--mgbcpq6gpa1axn--54b7fta0cc  xn--90ais xn--90ae xn--wgbh1c  xn--e1a4c  xn--qxa6a xn--node xn--qxam xn--j6w193g xn--4dbrk0ce xn--h2brj9cxn--mgbbh1a71e xn--fpcrj9c3d xn--gecrj9c xn--s9brj9c xn--45brj9cxn--xkc2dl3a5ee0h xn--2scrj9cxn--rvc1e0am3e xn--45br5cyl xn--3hcrj9c xn--mgbbh1axn--h2breg3eve xn--h2brj9c8c xn--mgbgu82axn--mgba3a4f16axn--mgba3a4fra xn--mgbtx2bxn--mgbayh7gpa xn--80ao21a xn--3e0b707e xn--q7ce6a xn--mix891f xn--mix082f  xn--d1alfxn--mgbx4cd0abxn--mgbah1a3hjkrd  xn--l1accxn--mgbc0a9azcg xn--mgb9awbfxn--mgbai9azgqp6jxn--mgbai9a5eva00b xn--ygbi2ammx xn--wgbl6a xn--p1aixn--mgberp4a5d4arxn--mgberp4a5d4a87gxn--mgbqly7c0a67fbcxn--mgbqly7cvafr xn--90a3ac xn--yfro4i67o xn--fzc2c9e2c xn--mgbpl2fh xn--ogbpf8fl xn--mgbtf8fl xn--kpry57d xn--kprw13d xn--nnx388a -xn--o3cw4h xn--pgbs0dh  xn--j1amhxn--mgbaam7a8h xn--mgb2ddesaaa -abarthadac  alfaromeoaudi bentleybmw bridgestone bugatti buick cadillaccase -caseih  chevrolet chevy chrysler -datsun dodge -dunlop ferrarifiat  firestonefordgmc goodyear honda hyundai infiniti iveco -jaguarjeepkia lamborghini -lancia  landrover lexus lincoln maseratimini -mitsubishi mopar -newholland -nissanramseatsrt +xn--o3cw4h xn--pgbs0dh  xn--j1amhxn--mgbaam7a8h xn--mgb2ddesaaaaudi bentleybmw bridgestonecase +datsun +dunlop ferrari  firestoneford goodyear honda hyundai infiniti +jaguarjeepkia lamborghini  landrover lexus lincolnmini +mitsubishi +nissanseat suzuki tatamotors -toyotatvs uconnect -volkswagen volvoaigo android apple bestbuy brother canondell digikey fujitsu  fujixerox  goldpointibm nikon nokia olympus  panasonic philips pioneer samsung sharpsony toshiba  yodobashi  allfinanzallfinanzberaterallfinanzberatungallyamericanexpressamexampanz banamex barclaycard barclaysbbtbbvabnl +toyotatvs volvo android apple bestbuy brother canondell fujitsu  goldpointibm nikon nokia  panasonic philips pioneer samsung sharpsony toshiba  yodobashi  allfinanzallyamericanexpressamexanz banamex barclaycard barclaysbbtbbva bnpparibasbofa bradesco -capitalone cashbackbonuscbacfa chasecimb citadelciti commbank deloitte discover everbank fidelity hdfcbankhdfchsbcitaujcbjll jpmorganchase jpmorgankfhkpmg lacaixa lasalle lixil lplfinanciallplnab nadex netbanknorthwesternmutualopen +capitalonecbacfa chase citadelciti commbank deloitte discover fidelity hdfcbankhdfchsbcitaujcbjll jpmorgankfhkpmg lacaixa lasalle lplfinanciallplnab netbankopen pictetpncpohl  pramerica -prudentialprupwcsaxosbiscbscor shriram softbank  statebank temasek -transunion ubankubs vanguardvisa wolterskluwerafamilycompany  aquarellediyduck -finish glade  homedepot  homegoods mrmuscleoffraid rightathome  scjohnsonaig allstateamericanfamily amfam amicaaxa chartis esurance farmers  goodhands guardian guardianlife iselect metlifemma -mutual -nationwide -nissaynorthlandinsurance -onyourside progressive redumbrella  statefarm -swiftcover thehartfordtiaatravelersinsurance  travelers travelguardtrvvig beats blockbusterbway netflix playstation showtimetab williamhillxboxasda bloomingdales -george  homesense justforulego macys  marshallsobiqvc safeway samsclub shopyourway staples -targetthd tiffany +prudentialprupwcsaxosbiscb softbank  statebank temasek ubankubs vanguardvisa wolterskluwer  aquarellediy  homedepot  homegoodsaig allstateamericanfamily amfam amicaaxa farmersmma +nissay progressive redumbrella  statefarmtiaatravelersinsurance  travelerstrvvig beats blockbuster netflix playstationtab williamhillxboxasda +george  homesenselego  marshallsobi samsclub staples +targetthd tjmaxxtjx -tkmaxxvons walmartabb  accentureaceraco -active +tkmaxx walmartabb  accentureaco airtel -amazonandaolawsaxis azure chatr -chrome cisco comcast -connectorscscdclkdish -docomodtvdwg emerson epson ericsson etisalat  fairwindsfido +amazonaolaws azure +chrome ciscodclkdishdtv epson ericsson  fairwindsfido flickr frogans frontierftrgbizgeaggeegle gmailgmogmx godaddygoog -googlegoogreeguge hangouthkt hotmailhtc -hughesieee iinet infosysinfy intel -intuitjavajcpjmpjprs juniperkddi -kindle -konamikpn lanxess liaison -lockermeo  microsoftmihmiimint mitekmit -mobily -mozaicmtn multichoice naspersnec neustar nexusnico +googlegooguge hangouthkt hotmail +hughesieee +intuitjavajmpjprs juniperkddi +kindlekpn lanxess +locker  microsoftmintmitmtnnec neustar nexusnico nortonntt officeollo oracle -orangeovh patchpayupccwqtel quest  richardli ricoh +orangeovhpccw quest  richardli ricoh rogers -sakurasaposassessfrshaw skolkovo skydrive skype sling smart stcgroupstc symantectatatcitdk telecity -telefonica terra translations  ultrabook unicornuol verisignvivavivo windows xfinity -xperia yahoo yamaxun -yandex yellowpages youtube +sakurasassfrshaw skype sling smart stcgroupstctcitdkuol verisignvivavivo windows yahoo yamaxun +yandex youtube zappos -chanel clinique garnier  kerastase -kiehls lamer lancome -loreal -matrix -maybelline -natura origins -redkensvr barefoot beknown cityeatscookingchannel -cuisinella delmonte edekafage ferrero foodnetworkfood gallo heinz -kindermcd  mcdonalds pamperedchef -rocher -wilmarxn--3oq18vl8pn36axn--55qx5d8y0buji4b870uxn--5su34j936bgsgxn--b4w605ferd xn--cckwcxetd -xn--cg4bkixn--dkwm73cwpn xn--flw351exn--fzys8d69uvgmxn--hxt035cmppuelxn--hxt035czzpfflxn--j6w470d71isscxn--jlq480n2rgxn--jlq61u9w7bxn--kcrx77d1x4axn--kcrx7bb75ajk3bxn--mgba3a3ejtxn--mgba7c0bbn0axn--mgbaakc7dvfxn--mgbb9fbpob xn--ngbe9e0a xn--pgb3ceoj xn--qcka1pmcxn--w4r85el8fhu5dnra xn--w4rs40l avianca caravan changiairport cipriani clubmed delta firmdale -hilton hyatt kerryhotelskerrylogisiticskerryproperties marriott orientexpress  shangrila tradershotelstui +chanel clinique lamer +natura origins barefoot +cuisinella edekafage ferrerofood galloxn--5su34j936bgsgxn--b4w605ferd xn--cckwcxetd +xn--cg4bki xn--flw351exn--fzys8d69uvgmxn--jlq480n2rgxn--kcrx77d1x4axn--mgba3a3ejtxn--mgba7c0bbn0a xn--ngbe9e0a xn--qcka1pmcxn--w4r85el8fhu5dnra xn--w4rs40l caravan cipriani clubmed delta firmdale hyatt kerryhotelskerryproperties marriott  shangrilatui viking -virgin -webjetablecbre chintai  frontdoor -lefrakabc africamagicartebbc  canalpluscbncbsdstv +virginablecbre chintai +lefrakabcartebbccbn eurovisionfox -gallup globogotv guardianmediahbohgtvimdbitv -kyknetmnet movistar mzansimagicnhk nowtvsbs sevensky spiegel starhub -supersport theguardian travelchannelweatherchannel bauhaus latrobe -monashrmit - +gallup globohboimdbitvnhk nowtvsbs sevenskyweatherchannel bauhaus latrobe +monash + TLD-CNcn citic baidu -unicomsohu +unicomsohu xn--zfr164b xn--fiqs8s -xn--fiqz9s xn--1qqw23a xn--xhq521b xn--8y0a063a xn--6frz82g -xn--fiq64b xn--estv75g xn--vuq861b xn--zfr164b +xn--fiqz9s +xn--55qx5d +xn--io0a7i xn--ses554g +xn--czru2d xn--hxt814e +xn--fiq64b xn--czr694b xn--xhq521b xn--1qqw23a xn--vuq861b +xn--kput3i xn--3ds443gxn--fiq228c5hs xn--3bst00mxn--6qq986b3xl +xn--czrs0t  xn--vhquv xn--fjq720a +xn--unup4y xn--g2xx48c xn--imr513n xn--otu796d +xn--9et52u xn--6frz82g +xn--5tzm5g xn--8y0a063a xn--rhqv96g xn--nyqy26a  TLD-OPENNIC bazarbbschancoincybdynemcepicfreefurgeek gopherindykokulib libreneonulloossoz @@ -16476,10 +17896,15 @@ L TONGCHENG 40017.cn 17u.cn 17u.net 17usoft.com 17usoft.net  elong.comelongstatic.com ly.com +A +TONGFANG thtf.com.cntongfangpc.com mechrevo.com  TOPCODER topcoder.com # TORexit oniontor + + +TORPROJECTtorproject.org = TRANSLATEWIKItranslatewiki.nettranslatewiki.org + @@ -16576,12 +18001,20 @@ w.cnzz.com  UNIONPAY  95516.com  95516.netchinaunionpay.comchinaunionpay.com.cnchinaunionpay.net cup.com.cn cup62.cn unionpay.com unionpay.netunionpaysecure.comunionpayintl.cnunionpayintl.com -o -UNITY  unity.com unity3d.com!unityads.unity3d.com + +UNITY  unity.com unity3d.comads.unitychina.cn +ads$splash-ads.cdn.unity.cn +ads%splash-ads.unitychina.cn +adsunityads.unity.cn +ads!unityads.unity3d.com ads#unityads.unitychina.cn ads -S - UNITY-ADS!unityads.unity3d.com + + UNITY-ADSads.unitychina.cn +ads$splash-ads.cdn.unity.cn +ads%splash-ads.unitychina.cn +adsunityads.unity.cn +ads!unityads.unity3d.com ads#unityads.unitychina.cn ads a @@ -16622,7 +18055,7 @@ vercel.com vercel.events vercel.live vercel.pub  vercel.sh vercel.storezeit-world.co.ukzeit-world.comzeit-world.netzeit-world.org zeit.co zeit.sh zeitworld.com  VERISIGN verisign.asia verisign.biz verisign.chverisign.co.inverisign.co.uk verisign.comverisign.com.auverisign.com.brverisign.com.cnverisign.com.esverisign.com.hkverisign.com.sgverisign.com.twverisign.com.vn verisign.de verisign.dk verisign.es verisign.fr verisign.hk verisign.in verisign.info verisign.jobs verisign.mobi verisign.name verisign.net verisign.org verisign.pro verisign.se verisign.sg verisign.tw verisign.us verisign.vnverisigninc.com - + VERIZON flickr flic.kr flickr.com @@ -16632,7 +18065,7 @@ flickr.netstaticflickr.com ads.yahoo.com ads yahoo yahoo.ae yahoo.am yahoo.as yahoo.at yahoo.az yahoo.ba yahoo.be yahoo.bg yahoo.bi yahoo.bs yahoo.bt yahoo.by yahoo.ca  yahoo.cat yahoo.cd yahoo.cg yahoo.ch yahoo.cl yahoo.cmyahoo.cn cn yahoo.co.ao yahoo.co.bw yahoo.co.ck yahoo.co.cr yahoo.co.id yahoo.co.il yahoo.co.in yahoo.co.jp yahoo.co.kr yahoo.co.mz yahoo.co.nz yahoo.co.th yahoo.co.tz yahoo.co.uk yahoo.co.uz yahoo.co.ve yahoo.co.vi yahoo.co.za  yahoo.com yahoo.com.af yahoo.com.ag yahoo.com.ai yahoo.com.ar yahoo.com.au yahoo.com.bd yahoo.com.bo yahoo.com.br yahoo.com.bz yahoo.com.cn cn yahoo.com.co yahoo.com.do yahoo.com.ec yahoo.com.eg yahoo.com.es yahoo.com.fj yahoo.com.gi yahoo.com.gt yahoo.com.hk yahoo.com.kw yahoo.com.lb yahoo.com.ly yahoo.com.mt yahoo.com.mx yahoo.com.my yahoo.com.na yahoo.com.nf yahoo.com.om yahoo.com.pa yahoo.com.pe yahoo.com.ph yahoo.com.pk yahoo.com.pr yahoo.com.py yahoo.com.sa yahoo.com.sb yahoo.com.sg yahoo.com.sv yahoo.com.tj yahoo.com.tr yahoo.com.tw yahoo.com.ua yahoo.com.uy yahoo.com.vc yahoo.com.vn yahoo.cz yahoo.de yahoo.dj yahoo.dk yahoo.dm yahoo.ee yahoo.es yahoo.fi yahoo.fm yahoo.fr yahoo.ge yahoo.gg yahoo.gl yahoo.gm yahoo.gp yahoo.gr yahoo.gy yahoo.hk yahoo.hr yahoo.hu yahoo.ie yahoo.im yahoo.in yahoo.is yahoo.it yahoo.je yahoo.jo yahoo.la yahoo.lt yahoo.lu yahoo.lv yahoo.md yahoo.me yahoo.mk yahoo.mw yahoo.mx  yahoo.net yahoo.nl yahoo.no yahoo.nu yahoo.ph yahoo.pl yahoo.pn yahoo.ps yahoo.pt yahoo.ro yahoo.ru yahoo.rw yahoo.se yahoo.sg yahoo.sh yahoo.si yahoo.sk yahoo.sm yahoo.sn yahoo.so yahoo.sr yahoo.st yahoo.tg yahoo.tk yahoo.tl yahoo.tm yahoo.tn yahoo.vg yahoo.ws maktoob.com -myguide.hktechcrunch.comyahoo-news.com.hk yahooapis.com yahoodns.netyahoofinance.comyahoohealth.comyahoomusic.comyahoosandbox.comyahoosportsbook.com yho.com yimg.com yimg.jp  ymail.comyusercontent.com +myguide.hktechcrunch.comyahoo-news.com.hk yahooapis.com yahoodns.netyahoofinance.comyahoohealth.comyahoomusic.comyahoosandbox.comyahoosportsbook.com yho.com yimg.com yimg.jp  ymail.comyusercontent.com cdn.js7k.com oath.cloud oath.com ouroath.comstatic-verizon.com uplynk.com verizon.com verizon.netverizonbusinessfios.comverizondigitalmedia.comverizonenterprise.comverizonfios.comverizonmedia.comverizonwireless.com vzw.com xo.com omniroot.com @@ -16684,6 +18117,9 @@ anigema.jpcharlotte-anime.jpclannad-movie.jpheaven-burns-red.c  VIU viu.tvapi.viu.now.com^ewcdn[0-9]{2}\.nowe\.com$ viu.com dfp6rglgjqszk.cloudfront.net!d1k2us671qcoau.cloudfront.net!d2anahhhmp1ffz.cloudfront.net +B +VIVO vivo.com vivo.com.cnvivoglobal.com +!cn  VK mvk.com userapi.com  vk-cdn.me vk-cdn.net vk-portal.net vk.cc @@ -16710,6 +18146,19 @@ getws1.com getwsone.comwhatisairwatch.comwhatisworkspaceone.com voanews.euvoanoticias.com voanouvel.comvoaportugues.com voashona.com voasomali.comvoaswahili.com voathai.comvoatibetan.comvoatibetanenglish.comvoatiengviet.com voatour.comvoazimbabwe.comzeriamerikes.com  VODAFONEmyvodafone.com.aumyvodafone.com.wsvodafone.co.uk vodafone.comvodafone.com.auvodafone.com.tr vodafone.de vodafone.it + + +VOLCENGINEaigc-cloud.com bdegnine.com +bplslb.com  bpltm.com byte-dns.com byte-dns.net bytehouse.cnbyteinspire.cnbyteinspire.combytevdn-boe.com bytevdn.comcache4ever.com cache666.comcloudendpoint.cndouyincloud.netdouyincloud.run dycloudbk.com dycloud.runemr-volces.com +feilian.cn iccvlog.com ifeilian.cn ifeilian.cominspirecloud.cninspirecloud.comisealsuite.com ivolces.com kfcbest.com  kych5.commultilingual-volc.comqingfuwuapi.cnqingfuwucdn.com qingfuwu.cn qingfuwu.com slbauto.com  sms18.comtoutiaopanapi.comtoutiaopan.com +ttgslb.com  ttgtm.com vecdnlb.comvecloudgame.com vedcdnlb.com vedsalb.com veefdev.comveew-alb-cn1.comveew-alb-cn2.comveew-alb-ts.com +vegalb.com +vegslb.com  vegtm.net veicplive.comve-imcloud.com vemarsdev.comvemarsstatic.com vemarsweb.com vertciot.com vestack.cloudve-trafficroute.comve-trafficroute.netvolcadocean.com volcadvc.com volcalb.comvolcautovod.com volcbiz.com  volcca.cn +volcca.com +volcca.net volccdn1.com volccdn2.com +volccdn.cn volccdn.comvolcddos001.com volcddos.com volcdem.comvolcdlspace.cn +volcdn.com volc-dns.com volcdns.com volc-dns.net volc-dns.pub volcdns.pub volceapi.comvolceapplog.com volcecr.com volcecw.comvolc-embed.comvolcenginapi.comvolcenginealb.comvolcengineapi.com volcengine.cnvolcengine.comvolcengine-dns.comvolcenginedns.comvolcengine-dns.netvolcenginedns.netvolcengine.netvolcenginepaas.com +volces.com volcfake.comvolcfcdnbyte.com volcfcdn.comvolcfcdndvs.comvolcfcdnplus.comvolcfcdnrd.comvolcfcdnsc.comvolcfxgjrtm.com volcgroup.com volcgslb.com volcgtm.com volciad.com volcimagex.cnvolcimagex.comvolcimagex.netvolcimagextest.comvolcmagicpage.com volcmcdn1.com volcmcdn2.com volcmcdn3.com volcmcdn4.com volcmgs.comvolcmusecdn.com volcocic.comvolcopjrtm.comvolcpartner.comvolcpartner.netvolcsiriusbd.comvolcsirius.comvolcspaceeduc.comvolctracer.com volctrack.comvolctraffic.comvolctranscdn.com volcvideo.comvolcvideos.com volcvms.com volcvod.comvolcwaf001.com volcwaf.comwritingo-editor.com writingo.net  ytxptd.cn  ytxptz.cn zebracdn.com  zjytxd.cn  zjytxp.cn zvip.cn " VOLMOE mox.moe vol.moe @@ -16761,6 +18210,8 @@ ctv.com.tw ctitv.com.twwantblogger.com zwtvusa.com benliton cn webex.com.hk webex.com.mx webex.de webex.es webex.fr  WEBFLOW webflow.com + +WEBNOVEL webnovel.com  WEBTYPE webtype.com : @@ -16780,8 +18231,14 @@ sandisk.in sandisk.nl sandisk.sg wd.com wdc.comwesterndigital.com - -WHATSAPP wa.mewhatsapp-plus.infowhatsapp-plus.mewhatsapp-plus.net whatsapp.cc whatsapp.com whatsapp.info whatsapp.net whatsapp.org whatsapp.tvwhatsappbrand.com + +WHATSAPPgraph.whatsapp.com +adsgraph.whatsapp.net +ads wa.mewhatsapp-plus.infowhatsapp-plus.mewhatsapp-plus.net whatsapp.cc whatsapp.com whatsapp.info whatsapp.net whatsapp.org whatsapp.tvwhatsappbrand.com +P + WHATSAPP-ADSgraph.whatsapp.com +adsgraph.whatsapp.net +ads  WHOLEFOODSMARKET wfm.comwholecitiesfoundation.orgwholefoods.comwholefoodsmarket.co.ukwholefoodsmarket.comwholekidsfoundation.orgwholeplanetfoundation.org + @@ -16833,11 +18290,15 @@ z ads WWE wwe.com wwe9.com - +) +WYND wyndlabs.ai wynd.network + Xads-twitter.comcms-twdigitalassets.com periscope.tv pscp.tvt.co tellapart.com tweetdeck.com  twimg.com twitpic.com twitter.biz twitter.com -twitter.jptwittercommunity.comtwitterflightschool.comtwitterinc.comtwitteroauth.comtwitterstat.us twtrdns.net  twttr.com  twttr.net  twvid.com vine.co x.com +twitter.jptwittercommunity.comtwitterflightschool.comtwitterinc.comtwitteroauth.comtwitterstat.us twtrdns.net  twttr.com  twttr.net  twvid.com vine.co x.comx.ai  X315 x315.com + +XAIx.ai  XBOX beth.games bethesda.netbethesdagamestudios.com bethsoft.com doom.comelderscrolls.comcallersbane.com minecraft.netminecraftshop.com @@ -16849,8 +18310,15 @@ xboxab.comxboxgamepass.comxboxgamestudios.com xboxlive.cn xboxone.co xboxone.com xboxone.euxboxplayanywhere.comxboxservices.comxboxstudios.com xbx.lv -. -XDAxda-developers.com xda-cdn.com + +XD +tapimg.com +tapimg.net  taptap.cn +taptap.com  taptap.iotaptapdada.com +ro.com xd.cn +xd.com  xdcdn.net xindong.com +A +XDA xda-cdn.comxda-developers.com xdaforums.com  XDTY xdty.org  @@ -16859,18 +18327,13 @@ xboxone.euxboxplayanywhere.comxboxservices.comxboxstudios.com 3 XHAMSTER-ADS#collector.xhamster.com ads -2 +B XIAOHONGSHU -xhscdn.comxiaohongshu.com - -XIAOMI -mi.com -mi-img.com  mifile.cn miui.com -miwifi.com  xiaomi.cn -xiaomi.com -xiaomi.netxiaomiyoupin.com - - XIAOMITV-ADSad.intl.xiaomi.com +xhscdn.com +xhscdn.netxiaohongshu.com + +XIAOMI a.market.xiaomi.com +adsad.intl.xiaomi.com ads ad.mi.com ads ad.xiaomi.com adsad1.xiaomi.com @@ -16879,12 +18342,35 @@ xiaomi.netxiaomiyoupin.com adsadv.sec.miui.com ads"misc.in.duokanbox.com adsmistat.xiaomi.com +adssentry.d.mi.com +ads sentry.d.xiaomi.net ads tjqonline.cn +ads"tracker.ai.xiaomi.com +adstracking.miui.com +ads +mi-img.com +mi.com  mifile.cn miui.com +miwifi.com  xiaomi.cn +xiaomi.com +xiaomi.net xiaomiev.comxiaomimobile.comxiaomiyoupin.com +saxyit.com + + +XIAOMI-ADS a.market.xiaomi.com +adsad.intl.xiaomi.com +ads ad.mi.com +ads ad.xiaomi.com +adsad1.xiaomi.com +adsadmob.xiaomi.com +ads"adv.sec.intl.miui.com +adsadv.sec.miui.com +ads"misc.in.duokanbox.com +adsmistat.xiaomi.com +adssentry.d.mi.com +ads sentry.d.xiaomi.net +ads tjqonline.cn +ads"tracker.ai.xiaomi.com adstracking.miui.com -ads ad.hpplay.cn -adsadeng.hpplay.cn -ads kuyun.com -ads umeng.com ads + XIMALAYA ximalaya.com  xmcdn.com @@ -16915,7 +18401,7 @@ sandai.netthunderurl.com xunlei.com  00cdn.com  88cdn.com  p2cdn.comthundercdn.com xycloud.com  xycdn.com / XVIDEOSxvideos-cdn.com xvideos.com - + YAHOO flickr flic.kr flickr.com @@ -16925,12 +18411,15 @@ flickr.netstaticflickr.com ads.yahoo.com ads yahoo yahoo.ae yahoo.am yahoo.as yahoo.at yahoo.az yahoo.ba yahoo.be yahoo.bg yahoo.bi yahoo.bs yahoo.bt yahoo.by yahoo.ca  yahoo.cat yahoo.cd yahoo.cg yahoo.ch yahoo.cl yahoo.cmyahoo.cn cn yahoo.co.ao yahoo.co.bw yahoo.co.ck yahoo.co.cr yahoo.co.id yahoo.co.il yahoo.co.in yahoo.co.jp yahoo.co.kr yahoo.co.mz yahoo.co.nz yahoo.co.th yahoo.co.tz yahoo.co.uk yahoo.co.uz yahoo.co.ve yahoo.co.vi yahoo.co.za  yahoo.com yahoo.com.af yahoo.com.ag yahoo.com.ai yahoo.com.ar yahoo.com.au yahoo.com.bd yahoo.com.bo yahoo.com.br yahoo.com.bz yahoo.com.cn cn yahoo.com.co yahoo.com.do yahoo.com.ec yahoo.com.eg yahoo.com.es yahoo.com.fj yahoo.com.gi yahoo.com.gt yahoo.com.hk yahoo.com.kw yahoo.com.lb yahoo.com.ly yahoo.com.mt yahoo.com.mx yahoo.com.my yahoo.com.na yahoo.com.nf yahoo.com.om yahoo.com.pa yahoo.com.pe yahoo.com.ph yahoo.com.pk yahoo.com.pr yahoo.com.py yahoo.com.sa yahoo.com.sb yahoo.com.sg yahoo.com.sv yahoo.com.tj yahoo.com.tr yahoo.com.tw yahoo.com.ua yahoo.com.uy yahoo.com.vc yahoo.com.vn yahoo.cz yahoo.de yahoo.dj yahoo.dk yahoo.dm yahoo.ee yahoo.es yahoo.fi yahoo.fm yahoo.fr yahoo.ge yahoo.gg yahoo.gl yahoo.gm yahoo.gp yahoo.gr yahoo.gy yahoo.hk yahoo.hr yahoo.hu yahoo.ie yahoo.im yahoo.in yahoo.is yahoo.it yahoo.je yahoo.jo yahoo.la yahoo.lt yahoo.lu yahoo.lv yahoo.md yahoo.me yahoo.mk yahoo.mw yahoo.mx  yahoo.net yahoo.nl yahoo.no yahoo.nu yahoo.ph yahoo.pl yahoo.pn yahoo.ps yahoo.pt yahoo.ro yahoo.ru yahoo.rw yahoo.se yahoo.sg yahoo.sh yahoo.si yahoo.sk yahoo.sm yahoo.sn yahoo.so yahoo.sr yahoo.st yahoo.tg yahoo.tk yahoo.tl yahoo.tm yahoo.tn yahoo.vg yahoo.ws maktoob.com -myguide.hktechcrunch.comyahoo-news.com.hk yahooapis.com yahoodns.netyahoofinance.comyahoohealth.comyahoomusic.comyahoosandbox.comyahoosportsbook.com yho.com yimg.com yimg.jp  ymail.comyusercontent.com +myguide.hktechcrunch.comyahoo-news.com.hk yahooapis.com yahoodns.netyahoofinance.comyahoohealth.comyahoomusic.comyahoosandbox.comyahoosportsbook.com yho.com yimg.com yimg.jp  ymail.comyusercontent.com cdn.js7k.com b YAHOO-ADS ads.yahoo.com adsgemini.yahoo.com ads ysm.yahoo.com ads + +YAMIBO +yamibo.com  YANDEX yandexxn--d1acpjx3f.xn--p1ai dzen.ru ya.ru yandex.aero  yandex.az  yandex.by yandex.co.il @@ -16956,7 +18445,8 @@ c kumiao.com  youku.com  ykimg.com mmstat.com soku.com cibntv.net - + + YOUKU-ADSactives.youku.com ads ad.api.3g.youku.com ads$ad.api.mobile.youku.com @@ -16973,8 +18463,6 @@ cibntv.net adse.stat.ykimg.com ads#gamex.mobile.youku.com ads!guanggaoad.youku.com -ads hudong.pl.youku.com -ads!huodong.pl.youku.com ads"huodong.vip.youku.com ads hz.youku.com adsiyes.youku.com @@ -16997,7 +18485,6 @@ cibntv.net ads&store.xl.api.3g.youku.com adstdrec.youku.com adstest.ott.youku.com -ads!test.sdk.m.youku.com ads v.l.youku.com adsval.api.youku.com ads wan.youku.com @@ -17007,6 +18494,11 @@ cibntv.net  YOUPORNextremetube.comkeezmovies.com youporn.comyouporngay.comyoupornpremium.com youpornru.comyopornshop.com ypncdn.com + +YOUQUAN +aitcfw.com +aizgtc.com hangzhouyq.cnhangzhouyq.com +zgxytc.com  zgzsa.com zhonshian.cn zhonshian.comzhonshian.com.cn  zjzsa.com  YOUTUBE youtubeggpht.cn cn  ggpht.comgooglevideo.comwide-youtube.l.google.comwithyoutube.com youtu.beyoutube-nocookie.comyoutube-ui.l.google.com @@ -17113,7 +18605,7 @@ D YY duowan.com dwstatic.com yy.com yystatic.com - + Z-LIBRARY 1lib.cloud 1lib.cz 1lib.domains1lib.education 1lib.eu 1lib.limited 1lib.pl 1lib.to 1lib.tw 2lib.org 3lib.net art1lib.com b-ok.africa  b-ok.asia b-ok.cc b-ok.global b-ok.org book4you.org bookfi.net  booksc.eu  booksc.me @@ -17122,7 +18614,7 @@ booksc.xyzbookshome.info bookshome.netbookshome.world de1lib.org hk1lib.orglibsolutions.applibsolutions.domainslibsolutions.net ma1lib.org -sg1lib.orgsinglelogin.appsinglelogin.me  z-lib.org  zlib.life zlibcdn.com zlibcdn2.com +sg1lib.orgsinglelogin.appsinglelogin.mesinglelogin.resinglelogin.site  z-lib.org z-library.se  zlib.life zlibcdn.com zlibcdn2.com : ZAOBAO zaobao.com zaobao.com.sg  zaobao.sg @@ -17146,6 +18638,9 @@ r ' ZEPLIN zeplin.dev  zeplin.io +: +ZHANGTAO mob.com +dutils.com accuratead.cn  ZHANQI  zhanqi.tv % @@ -17162,6 +18657,10 @@ ziroom.comziroomapartment.com ZOHO zoho.com zoho.com.au zoho.eu zoho.in zohocdn.comzohomeetups.comzohomerchandise.comzohopublic.comzohoschools.comzohostatic.com zohostatic.inzohouniversity.comzohowebstatic.com 2 ZOOM zoom.com zoom.com.cn zoom.us + +ZTE nubia.cn  nubia.com redmagic.com +zte.com.cn ztemall.com  ztems.combbs.ztedevices.comwww.ztedevices.comztedevices.com +!cn @ ZUOYEBANG zuoyebang.cc zuoyebang.com zybang.com diff --git a/v2rayu/Build/v2ray-core/v2ray b/v2rayu/Build/v2ray-core/v2ray index abe8083f52..964226e823 100755 Binary files a/v2rayu/Build/v2ray-core/v2ray and b/v2rayu/Build/v2ray-core/v2ray differ diff --git a/v2rayu/Build/v2ray-core/v2ray-arm64 b/v2rayu/Build/v2ray-core/v2ray-arm64 index 846e8f90ae..a24f131907 100755 Binary files a/v2rayu/Build/v2ray-core/v2ray-arm64 and b/v2rayu/Build/v2ray-core/v2ray-arm64 differ diff --git a/xray-core/app/commander/commander.go b/xray-core/app/commander/commander.go index a893a4d5fb..c433454a67 100644 --- a/xray-core/app/commander/commander.go +++ b/xray-core/app/commander/commander.go @@ -8,6 +8,7 @@ import ( "sync" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/signal/done" core "github.com/xtls/xray-core/core" "github.com/xtls/xray-core/features/outbound" @@ -46,7 +47,7 @@ func NewCommander(ctx context.Context, config *Config) (*Commander, error) { } service, ok := rawService.(Service) if !ok { - return nil, newError("not a Service.") + return nil, errors.New("not a Service.") } c.services = append(c.services, service) } @@ -70,16 +71,16 @@ func (c *Commander) Start() error { var listen = func(listener net.Listener) { if err := c.server.Serve(listener); err != nil { - newError("failed to start grpc server").Base(err).AtError().WriteToLog() + errors.LogErrorInner(context.Background(), err, "failed to start grpc server") } } if len(c.listen) > 0 { if l, err := net.Listen("tcp", c.listen); err != nil { - newError("API server failed to listen on ", c.listen).Base(err).AtError().WriteToLog() + errors.LogErrorInner(context.Background(), err, "API server failed to listen on ", c.listen) return err } else { - newError("API server listening on ", l.Addr()).AtInfo().WriteToLog() + errors.LogInfo(context.Background(), "API server listening on ", l.Addr()) go listen(l) } return nil @@ -93,7 +94,7 @@ func (c *Commander) Start() error { go listen(listener) if err := c.ohm.RemoveHandler(context.Background(), c.tag); err != nil { - newError("failed to remove existing handler").WriteToLog() + errors.LogInfoInner(context.Background(), err, "failed to remove existing handler") } return c.ohm.AddHandler(context.Background(), &Outbound{ diff --git a/xray-core/app/commander/errors.generated.go b/xray-core/app/commander/errors.generated.go deleted file mode 100644 index c3cac32935..0000000000 --- a/xray-core/app/commander/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package commander - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/app/commander/outbound.go b/xray-core/app/commander/outbound.go index aa60bd1c98..001423ff93 100644 --- a/xray-core/app/commander/outbound.go +++ b/xray-core/app/commander/outbound.go @@ -5,6 +5,7 @@ import ( "sync" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/net/cnc" "github.com/xtls/xray-core/common/signal/done" @@ -31,7 +32,7 @@ func (l *OutboundListener) add(conn net.Conn) { func (l *OutboundListener) Accept() (net.Conn, error) { select { case <-l.done.Wait(): - return nil, newError("listen closed") + return nil, errors.New("listen closed") case c := <-l.buffer: return c, nil } diff --git a/xray-core/app/dispatcher/default.go b/xray-core/app/dispatcher/default.go index 4d65630d8b..34119ac2a3 100644 --- a/xray-core/app/dispatcher/default.go +++ b/xray-core/app/dispatcher/default.go @@ -10,6 +10,7 @@ import ( "time" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/buf" "github.com/xtls/xray-core/common/log" "github.com/xtls/xray-core/common/net" @@ -26,7 +27,7 @@ import ( "github.com/xtls/xray-core/transport/pipe" ) -var errSniffingTimeout = newError("timeout on sniffing") +var errSniffingTimeout = errors.New("timeout on sniffing") type cachedReader struct { sync.Mutex @@ -191,7 +192,7 @@ func (d *DefaultDispatcher) shouldOverride(ctx context.Context, result SniffResu pattern := d[7:] re, err := regexp.Compile(pattern) if err != nil { - newError("Unable to compile regex").WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "Unable to compile regex") continue } if re.MatchString(domain) { @@ -213,7 +214,7 @@ func (d *DefaultDispatcher) shouldOverride(ctx context.Context, result SniffResu } if fkr0, ok := d.fdns.(dns.FakeDNSEngineRev0); ok && protocolString != "bittorrent" && p == "fakedns" && fkr0.IsIPInIPPool(destination.Address) { - newError("Using sniffer ", protocolString, " since the fake DNS missed").WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "Using sniffer ", protocolString, " since the fake DNS missed") return true } if resultSubset, ok := result.(SnifferIsProtoSubsetOf); ok { @@ -261,7 +262,7 @@ func (d *DefaultDispatcher) Dispatch(ctx context.Context, destination net.Destin } if err == nil && d.shouldOverride(ctx, result, sniffingRequest, destination) { domain := result.Domain() - newError("sniffed domain: ", domain).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "sniffed domain: ", domain) destination.Address = net.ParseAddress(domain) protocol := result.Protocol() if resComp, ok := result.(SnifferResultComposite); ok { @@ -286,7 +287,7 @@ func (d *DefaultDispatcher) Dispatch(ctx context.Context, destination net.Destin // DispatchLink implements routing.Dispatcher. func (d *DefaultDispatcher) DispatchLink(ctx context.Context, destination net.Destination, outbound *transport.Link) error { if !destination.IsValid() { - return newError("Dispatcher: Invalid destination.") + return errors.New("Dispatcher: Invalid destination.") } outbounds := session.OutboundsFromContext(ctx) if len(outbounds) == 0 { @@ -315,7 +316,7 @@ func (d *DefaultDispatcher) DispatchLink(ctx context.Context, destination net.De } if err == nil && d.shouldOverride(ctx, result, sniffingRequest, destination) { domain := result.Domain() - newError("sniffed domain: ", domain).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "sniffed domain: ", domain) destination.Address = net.ParseAddress(domain) protocol := result.Protocol() if resComp, ok := result.(SnifferResultComposite); ok { @@ -407,10 +408,10 @@ func (d *DefaultDispatcher) routedDispatch(ctx context.Context, link *transport. ctx = session.SetForcedOutboundTagToContext(ctx, "") if h := d.ohm.GetHandler(forcedOutboundTag); h != nil { isPickRoute = 1 - newError("taking platform initialized detour [", forcedOutboundTag, "] for [", destination, "]").WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "taking platform initialized detour [", forcedOutboundTag, "] for [", destination, "]") handler = h } else { - newError("non existing tag for platform initialized detour: ", forcedOutboundTag).AtError().WriteToLog(session.ExportIDToError(ctx)) + errors.LogError(ctx, "non existing tag for platform initialized detour: ", forcedOutboundTag) common.Close(link.Writer) common.Interrupt(link.Reader) return @@ -420,13 +421,13 @@ func (d *DefaultDispatcher) routedDispatch(ctx context.Context, link *transport. outTag := route.GetOutboundTag() if h := d.ohm.GetHandler(outTag); h != nil { isPickRoute = 2 - newError("taking detour [", outTag, "] for [", destination, "]").WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "taking detour [", outTag, "] for [", destination, "]") handler = h } else { - newError("non existing outTag: ", outTag).AtWarning().WriteToLog(session.ExportIDToError(ctx)) + errors.LogWarning(ctx, "non existing outTag: ", outTag) } } else { - newError("default route for ", destination).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "default route for ", destination) } } @@ -435,7 +436,7 @@ func (d *DefaultDispatcher) routedDispatch(ctx context.Context, link *transport. } if handler == nil { - newError("default outbound handler not exist").WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "default outbound handler not exist") common.Close(link.Writer) common.Interrupt(link.Reader) return diff --git a/xray-core/app/dispatcher/errors.generated.go b/xray-core/app/dispatcher/errors.generated.go deleted file mode 100644 index e13ee60889..0000000000 --- a/xray-core/app/dispatcher/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package dispatcher - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/app/dispatcher/fakednssniffer.go b/xray-core/app/dispatcher/fakednssniffer.go index 8d0804de14..f7486d1d1e 100644 --- a/xray-core/app/dispatcher/fakednssniffer.go +++ b/xray-core/app/dispatcher/fakednssniffer.go @@ -5,6 +5,7 @@ import ( "strings" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/session" "github.com/xtls/xray-core/core" @@ -22,7 +23,7 @@ func newFakeDNSSniffer(ctx context.Context) (protocolSnifferWithMetadata, error) } if fakeDNSEngine == nil { - errNotInit := newError("FakeDNSEngine is not initialized, but such a sniffer is used").AtError() + errNotInit := errors.New("FakeDNSEngine is not initialized, but such a sniffer is used").AtError() return protocolSnifferWithMetadata{}, errNotInit } return protocolSnifferWithMetadata{protocolSniffer: func(ctx context.Context, bytes []byte) (SniffResult, error) { @@ -31,7 +32,7 @@ func newFakeDNSSniffer(ctx context.Context) (protocolSnifferWithMetadata, error) if ob.Target.Network == net.Network_TCP || ob.Target.Network == net.Network_UDP { domainFromFakeDNS := fakeDNSEngine.GetDomainFromFakeDNS(ob.Target.Address) if domainFromFakeDNS != "" { - newError("fake dns got domain: ", domainFromFakeDNS, " for ip: ", ob.Target.Address.String()).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "fake dns got domain: ", domainFromFakeDNS, " for ip: ", ob.Target.Address.String()) return &fakeDNSSniffResult{domainName: domainFromFakeDNS}, nil } } @@ -109,10 +110,10 @@ func newFakeDNSThenOthers(ctx context.Context, fakeDNSSniffer protocolSnifferWit } return nil, common.ErrNoClue } - newError("ip address not in fake dns range, return as is").AtDebug().WriteToLog() + errors.LogDebug(ctx, "ip address not in fake dns range, return as is") return nil, common.ErrNoClue } - newError("fake dns sniffer did not set address in range option, assume false.").AtWarning().WriteToLog() + errors.LogWarning(ctx, "fake dns sniffer did not set address in range option, assume false.") return nil, common.ErrNoClue }, metadataSniffer: false, diff --git a/xray-core/app/dispatcher/sniffer.go b/xray-core/app/dispatcher/sniffer.go index e23277a7e2..4d62f1b364 100644 --- a/xray-core/app/dispatcher/sniffer.go +++ b/xray-core/app/dispatcher/sniffer.go @@ -4,6 +4,7 @@ import ( "context" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/protocol/bittorrent" "github.com/xtls/xray-core/common/protocol/http" @@ -52,7 +53,7 @@ func NewSniffer(ctx context.Context) *Sniffer { return ret } -var errUnknownContent = newError("unknown content") +var errUnknownContent = errors.New("unknown content") func (s *Sniffer) Sniff(c context.Context, payload []byte, network net.Network) (SniffResult, error) { var pendingSniffer []protocolSnifferWithMetadata diff --git a/xray-core/app/dns/config.go b/xray-core/app/dns/config.go index 6236f7b533..ab547e1433 100644 --- a/xray-core/app/dns/config.go +++ b/xray-core/app/dns/config.go @@ -1,6 +1,7 @@ package dns import ( + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/strmatcher" "github.com/xtls/xray-core/common/uuid" @@ -36,11 +37,11 @@ var localTLDsAndDotlessDomainsRule = &NameServer_OriginalRule{ func toStrMatcher(t DomainMatchingType, domain string) (strmatcher.Matcher, error) { strMType, f := typeMap[t] if !f { - return nil, newError("unknown mapping type", t).AtWarning() + return nil, errors.New("unknown mapping type", t).AtWarning() } matcher, err := strMType.New(domain) if err != nil { - return nil, newError("failed to create str matcher").Base(err) + return nil, errors.New("failed to create str matcher").Base(err) } return matcher, nil } @@ -51,7 +52,7 @@ func toNetIP(addrs []net.Address) ([]net.IP, error) { if addr.Family().IsIP() { ips = append(ips, addr.IP()) } else { - return nil, newError("Failed to convert address", addr, "to Net IP.").AtWarning() + return nil, errors.New("Failed to convert address", addr, "to Net IP.").AtWarning() } } return ips, nil diff --git a/xray-core/app/dns/dns.go b/xray-core/app/dns/dns.go index fbdf74ee41..4abc8b3309 100644 --- a/xray-core/app/dns/dns.go +++ b/xray-core/app/dns/dns.go @@ -54,7 +54,7 @@ func New(ctx context.Context, config *Config) (*DNS, error) { case 0, net.IPv4len, net.IPv6len: clientIP = net.IP(config.ClientIp) default: - return nil, newError("unexpected client IP length ", len(config.ClientIp)) + return nil, errors.New("unexpected client IP length ", len(config.ClientIp)) } var ipOption *dns.IPOption @@ -81,7 +81,7 @@ func New(ctx context.Context, config *Config) (*DNS, error) { hosts, err := NewStaticHosts(config.StaticHosts, config.Hosts) if err != nil { - return nil, newError("failed to create hosts").Base(err) + return nil, errors.New("failed to create hosts").Base(err) } clients := []*Client{} @@ -99,7 +99,7 @@ func New(ctx context.Context, config *Config) (*DNS, error) { features.PrintDeprecatedFeatureWarning("simple DNS server") client, err := NewSimpleClient(ctx, endpoint, clientIP) if err != nil { - return nil, newError("failed to create client").Base(err) + return nil, errors.New("failed to create client").Base(err) } clients = append(clients, client) } @@ -122,7 +122,7 @@ func New(ctx context.Context, config *Config) (*DNS, error) { } client, err := NewClient(ctx, ns, myClientIP, geoipContainer, &matcherInfos, updateDomain) if err != nil { - return nil, newError("failed to create client").Base(err) + return nil, errors.New("failed to create client").Base(err) } clients = append(clients, client) } @@ -170,7 +170,7 @@ func (s *DNS) IsOwnLink(ctx context.Context) bool { // LookupIP implements dns.Client. func (s *DNS) LookupIP(domain string, option dns.IPOption) ([]net.IP, error) { if domain == "" { - return nil, newError("empty domain name") + return nil, errors.New("empty domain name") } option.IPv4Enable = option.IPv4Enable && s.ipOption.IPv4Enable @@ -190,10 +190,10 @@ func (s *DNS) LookupIP(domain string, option dns.IPOption) ([]net.IP, error) { case len(addrs) == 0: // Domain recorded, but no valid IP returned (e.g. IPv4 address with only IPv6 enabled) return nil, dns.ErrEmptyResponse case len(addrs) == 1 && addrs[0].Family().IsDomain(): // Domain replacement - newError("domain replaced: ", domain, " -> ", addrs[0].Domain()).WriteToLog() + errors.LogInfo(s.ctx, "domain replaced: ", domain, " -> ", addrs[0].Domain()) domain = addrs[0].Domain() default: // Successfully found ip records in static host - newError("returning ", len(addrs), " IP(s) for domain ", domain, " -> ", addrs).WriteToLog() + errors.LogInfo(s.ctx, "returning ", len(addrs), " IP(s) for domain ", domain, " -> ", addrs) return toNetIP(addrs) } @@ -202,7 +202,7 @@ func (s *DNS) LookupIP(domain string, option dns.IPOption) ([]net.IP, error) { ctx := session.ContextWithInbound(s.ctx, &session.Inbound{Tag: s.tag}) for _, client := range s.sortClients(domain) { if !option.FakeEnable && strings.EqualFold(client.Name(), "FakeDNS") { - newError("skip DNS resolution for domain ", domain, " at server ", client.Name()).AtDebug().WriteToLog() + errors.LogDebug(s.ctx, "skip DNS resolution for domain ", domain, " at server ", client.Name()) continue } ips, err := client.QueryIP(ctx, domain, option, s.disableCache) @@ -210,7 +210,7 @@ func (s *DNS) LookupIP(domain string, option dns.IPOption) ([]net.IP, error) { return ips, nil } if err != nil { - newError("failed to lookup ip for domain ", domain, " at server ", client.Name()).Base(err).WriteToLog() + errors.LogInfoInner(s.ctx, err, "failed to lookup ip for domain ", domain, " at server ", client.Name()) errs = append(errs, err) } // 5 for RcodeRefused in miekg/dns, hardcode to reduce binary size @@ -219,7 +219,7 @@ func (s *DNS) LookupIP(domain string, option dns.IPOption) ([]net.IP, error) { } } - return nil, newError("returning nil for domain ", domain).Base(errors.Combine(errs...)) + return nil, errors.New("returning nil for domain ", domain).Base(errors.Combine(errs...)) } // LookupHosts implements dns.HostsLookup. @@ -231,7 +231,7 @@ func (s *DNS) LookupHosts(domain string) *net.Address { // Normalize the FQDN form query addrs := s.hosts.Lookup(domain, *s.ipOption) if len(addrs) > 0 { - newError("domain replaced: ", domain, " -> ", addrs[0].String()).AtInfo().WriteToLog() + errors.LogInfo(s.ctx, "domain replaced: ", domain, " -> ", addrs[0].String()) return &addrs[0] } @@ -289,16 +289,16 @@ func (s *DNS) sortClients(domain string) []*Client { } if len(domainRules) > 0 { - newError("domain ", domain, " matches following rules: ", domainRules).AtDebug().WriteToLog() + errors.LogDebug(s.ctx, "domain ", domain, " matches following rules: ", domainRules) } if len(clientNames) > 0 { - newError("domain ", domain, " will use DNS in order: ", clientNames).AtDebug().WriteToLog() + errors.LogDebug(s.ctx, "domain ", domain, " will use DNS in order: ", clientNames) } if len(clients) == 0 { clients = append(clients, s.clients[0]) clientNames = append(clientNames, s.clients[0].Name()) - newError("domain ", domain, " will use the first DNS: ", clientNames).AtDebug().WriteToLog() + errors.LogDebug(s.ctx, "domain ", domain, " will use the first DNS: ", clientNames) } return clients diff --git a/xray-core/app/dns/dnscommon.go b/xray-core/app/dns/dnscommon.go index df1b17afc8..42f9da2ce0 100644 --- a/xray-core/app/dns/dnscommon.go +++ b/xray-core/app/dns/dnscommon.go @@ -171,10 +171,10 @@ func parseResponse(payload []byte) (*IPRecord, error) { var parser dnsmessage.Parser h, err := parser.Start(payload) if err != nil { - return nil, newError("failed to parse DNS response").Base(err).AtWarning() + return nil, errors.New("failed to parse DNS response").Base(err).AtWarning() } if err := parser.SkipAllQuestions(); err != nil { - return nil, newError("failed to skip questions in DNS response").Base(err).AtWarning() + return nil, errors.New("failed to skip questions in DNS response").Base(err).AtWarning() } now := time.Now() @@ -189,7 +189,7 @@ L: ah, err := parser.AnswerHeader() if err != nil { if err != dnsmessage.ErrSectionDone { - newError("failed to parse answer section for domain: ", ah.Name.String()).Base(err).WriteToLog() + errors.LogInfoInner(context.Background(), err, "failed to parse answer section for domain: ", ah.Name.String()) } break } @@ -207,20 +207,20 @@ L: case dnsmessage.TypeA: ans, err := parser.AResource() if err != nil { - newError("failed to parse A record for domain: ", ah.Name).Base(err).WriteToLog() + errors.LogInfoInner(context.Background(), err, "failed to parse A record for domain: ", ah.Name) break L } ipRecord.IP = append(ipRecord.IP, net.IPAddress(ans.A[:])) case dnsmessage.TypeAAAA: ans, err := parser.AAAAResource() if err != nil { - newError("failed to parse AAAA record for domain: ", ah.Name).Base(err).WriteToLog() + errors.LogInfoInner(context.Background(), err, "failed to parse AAAA record for domain: ", ah.Name) break L } ipRecord.IP = append(ipRecord.IP, net.IPAddress(ans.AAAA[:])) default: if err := parser.SkipAnswer(); err != nil { - newError("failed to skip answer").Base(err).WriteToLog() + errors.LogInfoInner(context.Background(), err, "failed to skip answer") break L } continue diff --git a/xray-core/app/dns/errors.generated.go b/xray-core/app/dns/errors.generated.go deleted file mode 100644 index d7375a9b94..0000000000 --- a/xray-core/app/dns/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package dns - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/app/dns/fakedns/errors.generated.go b/xray-core/app/dns/fakedns/errors.generated.go deleted file mode 100644 index 84e0448c64..0000000000 --- a/xray-core/app/dns/fakedns/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package fakedns - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/app/dns/fakedns/fake.go b/xray-core/app/dns/fakedns/fake.go index e555007481..20e4bffa60 100644 --- a/xray-core/app/dns/fakedns/fake.go +++ b/xray-core/app/dns/fakedns/fake.go @@ -10,6 +10,7 @@ import ( "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/cache" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/features/dns" ) @@ -45,7 +46,7 @@ func (fkdns *Holder) Start() error { if fkdns.config != nil && fkdns.config.IpPool != "" && fkdns.config.LruSize != 0 { return fkdns.initializeFromConfig() } - return newError("invalid fakeDNS setting") + return errors.New("invalid fakeDNS setting") } func (fkdns *Holder) Close() error { @@ -60,7 +61,7 @@ func NewFakeDNSHolder() (*Holder, error) { var err error if fkdns, err = NewFakeDNSHolderConfigOnly(nil); err != nil { - return nil, newError("Unable to create Fake Dns Engine").Base(err).AtError() + return nil, errors.New("Unable to create Fake Dns Engine").Base(err).AtError() } err = fkdns.initialize(dns.FakeIPv4Pool, 65535) if err != nil { @@ -82,13 +83,13 @@ func (fkdns *Holder) initialize(ipPoolCidr string, lruSize int) error { var err error if _, ipRange, err = gonet.ParseCIDR(ipPoolCidr); err != nil { - return newError("Unable to parse CIDR for Fake DNS IP assignment").Base(err).AtError() + return errors.New("Unable to parse CIDR for Fake DNS IP assignment").Base(err).AtError() } ones, bits := ipRange.Mask.Size() rooms := bits - ones if math.Log2(float64(lruSize)) >= float64(rooms) { - return newError("LRU size is bigger than subnet size").AtError() + return errors.New("LRU size is bigger than subnet size").AtError() } fkdns.domainToIP = cache.NewLru(lruSize) fkdns.ipRange = ipRange @@ -137,7 +138,7 @@ func (fkdns *Holder) GetDomainFromFakeDNS(ip net.Address) string { if k, ok := fkdns.domainToIP.GetKeyFromValue(ip); ok { return k.(string) } - newError("A fake ip request to ", ip, ", however there is no matching domain name in fake DNS").AtInfo().WriteToLog() + errors.LogInfo(context.Background(), "A fake ip request to ", ip, ", however there is no matching domain name in fake DNS") return "" } @@ -192,10 +193,10 @@ func (h *HolderMulti) Start() error { for _, v := range h.holders { if v.config != nil && v.config.IpPool != "" && v.config.LruSize != 0 { if err := v.Start(); err != nil { - return newError("Cannot start all fake dns pools").Base(err) + return errors.New("Cannot start all fake dns pools").Base(err) } } else { - return newError("invalid fakeDNS setting") + return errors.New("invalid fakeDNS setting") } } return nil @@ -204,7 +205,7 @@ func (h *HolderMulti) Start() error { func (h *HolderMulti) Close() error { for _, v := range h.holders { if err := v.Close(); err != nil { - return newError("Cannot close all fake dns pools").Base(err) + return errors.New("Cannot close all fake dns pools").Base(err) } } return nil diff --git a/xray-core/app/dns/hosts.go b/xray-core/app/dns/hosts.go index 6441348181..a60d251468 100644 --- a/xray-core/app/dns/hosts.go +++ b/xray-core/app/dns/hosts.go @@ -1,7 +1,10 @@ package dns import ( + "context" + "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/strmatcher" "github.com/xtls/xray-core/features" @@ -32,7 +35,7 @@ func NewStaticHosts(hosts []*Config_HostMapping, legacy map[string]*net.IPOrDoma address := ip.AsAddress() if address.Family().IsDomain() { - return nil, newError("invalid domain address in static hosts: ", address.Domain()).AtWarning() + return nil, errors.New("invalid domain address in static hosts: ", address.Domain()).AtWarning() } sh.ips[id] = []net.Address{address} @@ -42,7 +45,7 @@ func NewStaticHosts(hosts []*Config_HostMapping, legacy map[string]*net.IPOrDoma for _, mapping := range hosts { matcher, err := toStrMatcher(mapping.Type, mapping.Domain) if err != nil { - return nil, newError("failed to create domain matcher").Base(err) + return nil, errors.New("failed to create domain matcher").Base(err) } id := g.Add(matcher) ips := make([]net.Address, 0, len(mapping.Ip)+1) @@ -53,12 +56,12 @@ func NewStaticHosts(hosts []*Config_HostMapping, legacy map[string]*net.IPOrDoma for _, ip := range mapping.Ip { addr := net.IPAddress(ip) if addr == nil { - return nil, newError("invalid IP address in static hosts: ", ip).AtWarning() + return nil, errors.New("invalid IP address in static hosts: ", ip).AtWarning() } ips = append(ips, addr) } default: - return nil, newError("neither IP address nor proxied domain specified for domain: ", mapping.Domain).AtWarning() + return nil, errors.New("neither IP address nor proxied domain specified for domain: ", mapping.Domain).AtWarning() } sh.ips[id] = ips @@ -90,7 +93,7 @@ func (h *StaticHosts) lookup(domain string, option dns.IPOption, maxDepth int) [ case len(addrs) == 0: // Not recorded in static hosts, return nil return nil case len(addrs) == 1 && addrs[0].Family().IsDomain(): // Try to unwrap domain - newError("found replaced domain: ", domain, " -> ", addrs[0].Domain(), ". Try to unwrap it").AtDebug().WriteToLog() + errors.LogDebug(context.Background(), "found replaced domain: ", domain, " -> ", addrs[0].Domain(), ". Try to unwrap it") if maxDepth > 0 { unwrapped := h.lookup(addrs[0].Domain(), option, maxDepth-1) if unwrapped != nil { diff --git a/xray-core/app/dns/nameserver.go b/xray-core/app/dns/nameserver.go index d5423b84a1..52ab7a91c7 100644 --- a/xray-core/app/dns/nameserver.go +++ b/xray-core/app/dns/nameserver.go @@ -64,7 +64,7 @@ func NewServer(dest net.Destination, dispatcher routing.Dispatcher, queryStrateg if dest.Network == net.Network_UDP { // UDP classic DNS mode return NewClassicNameServer(dest, dispatcher), nil } - return nil, newError("No available name server could be created from ", dest).AtWarning() + return nil, errors.New("No available name server could be created from ", dest).AtWarning() } // NewClient creates a DNS client managing a name server with client IP, domain rules and expected IPs. @@ -82,7 +82,7 @@ func NewClient( // Create a new server for each client for now server, err := NewServer(ns.Address.AsDestination(), dispatcher, ns.GetQueryStrategy()) if err != nil { - return newError("failed to create nameserver").Base(err).AtWarning() + return errors.New("failed to create nameserver").Base(err).AtWarning() } // Priotize local domains with specific TLDs or without any dot to local DNS @@ -111,7 +111,7 @@ func NewClient( for _, domain := range ns.PrioritizedDomain { domainRule, err := toStrMatcher(domain.Type, domain.Domain) if err != nil { - return newError("failed to create prioritized domain").Base(err).AtWarning() + return errors.New("failed to create prioritized domain").Base(err).AtWarning() } originalRuleIdx := ruleCurr if ruleCurr < len(ns.OriginalRules) { @@ -130,7 +130,7 @@ func NewClient( } err = updateDomainRule(domainRule, originalRuleIdx, *matcherInfos) if err != nil { - return newError("failed to create prioritized domain").Base(err).AtWarning() + return errors.New("failed to create prioritized domain").Base(err).AtWarning() } } @@ -139,7 +139,7 @@ func NewClient( for _, geoip := range ns.Geoip { matcher, err := container.Add(geoip) if err != nil { - return newError("failed to create ip matcher").Base(err).AtWarning() + return errors.New("failed to create ip matcher").Base(err).AtWarning() } matchers = append(matchers, matcher) } @@ -147,9 +147,9 @@ func NewClient( if len(clientIP) > 0 { switch ns.Address.Address.GetAddress().(type) { case *net.IPOrDomain_Domain: - newError("DNS: client ", ns.Address.Address.GetDomain(), " uses clientIP ", clientIP.String()).AtInfo().WriteToLog() + errors.LogInfo(ctx, "DNS: client ", ns.Address.Address.GetDomain(), " uses clientIP ", clientIP.String()) case *net.IPOrDomain_Ip: - newError("DNS: client ", ns.Address.Address.GetIp(), " uses clientIP ", clientIP.String()).AtInfo().WriteToLog() + errors.LogInfo(ctx, "DNS: client ", ns.Address.Address.GetIp(), " uses clientIP ", clientIP.String()) } } @@ -169,7 +169,7 @@ func NewSimpleClient(ctx context.Context, endpoint *net.Endpoint, clientIP net.I err := core.RequireFeatures(ctx, func(dispatcher routing.Dispatcher) error { server, err := NewServer(endpoint.AsDestination(), dispatcher, QueryStrategy_USE_IP) if err != nil { - return newError("failed to create nameserver").Base(err).AtWarning() + return errors.New("failed to create nameserver").Base(err).AtWarning() } client.server = server client.clientIP = clientIP @@ -179,9 +179,9 @@ func NewSimpleClient(ctx context.Context, endpoint *net.Endpoint, clientIP net.I if len(clientIP) > 0 { switch endpoint.Address.GetAddress().(type) { case *net.IPOrDomain_Domain: - newError("DNS: client ", endpoint.Address.GetDomain(), " uses clientIP ", clientIP.String()).AtInfo().WriteToLog() + errors.LogInfo(ctx, "DNS: client ", endpoint.Address.GetDomain(), " uses clientIP ", clientIP.String()) case *net.IPOrDomain_Ip: - newError("DNS: client ", endpoint.Address.GetIp(), " uses clientIP ", clientIP.String()).AtInfo().WriteToLog() + errors.LogInfo(ctx, "DNS: client ", endpoint.Address.GetIp(), " uses clientIP ", clientIP.String()) } } @@ -222,7 +222,7 @@ func (c *Client) MatchExpectedIPs(domain string, ips []net.IP) ([]net.IP, error) if len(newIps) == 0 { return nil, errExpectedIPNonMatch } - newError("domain ", domain, " expectIPs ", newIps, " matched at server ", c.Name()).AtDebug().WriteToLog() + errors.LogDebug(context.Background(), "domain ", domain, " expectIPs ", newIps, " matched at server ", c.Name()) return newIps, nil } diff --git a/xray-core/app/dns/nameserver_doh.go b/xray-core/app/dns/nameserver_doh.go index 8657e3fb7a..01e7ede1b4 100644 --- a/xray-core/app/dns/nameserver_doh.go +++ b/xray-core/app/dns/nameserver_doh.go @@ -12,6 +12,7 @@ import ( "time" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/log" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/net/cnc" @@ -43,7 +44,7 @@ type DoHNameServer struct { // NewDoHNameServer creates DOH server object for remote resolving. func NewDoHNameServer(url *url.URL, dispatcher routing.Dispatcher, queryStrategy QueryStrategy) (*DoHNameServer, error) { - newError("DNS: created Remote DOH client for ", url.String()).AtInfo().WriteToLog() + errors.LogInfo(context.Background(), "DNS: created Remote DOH client for ", url.String()) s := baseDOHNameServer(url, "DOH", queryStrategy) s.dispatcher = dispatcher @@ -119,7 +120,7 @@ func NewDoHLocalNameServer(url *url.URL, queryStrategy QueryStrategy) *DoHNameSe Timeout: time.Second * 180, Transport: tr, } - newError("DNS: created Local DOH client for ", url.String()).AtInfo().WriteToLog() + errors.LogInfo(context.Background(), "DNS: created Local DOH client for ", url.String()) return s } @@ -150,7 +151,7 @@ func (s *DoHNameServer) Cleanup() error { defer s.Unlock() if len(s.ips) == 0 { - return newError("nothing to do. stopping...") + return errors.New("nothing to do. stopping...") } for domain, record := range s.ips { @@ -162,7 +163,7 @@ func (s *DoHNameServer) Cleanup() error { } if record.A == nil && record.AAAA == nil { - newError(s.name, " cleanup ", domain).AtDebug().WriteToLog() + errors.LogDebug(context.Background(), s.name, " cleanup ", domain) delete(s.ips, domain) } else { s.ips[domain] = record @@ -205,7 +206,7 @@ func (s *DoHNameServer) updateIP(req *dnsRequest, ipRec *IPRecord) { updated = true } } - newError(s.name, " got answer: ", req.domain, " ", req.reqType, " -> ", ipRec.IP, " ", elapsed).AtInfo().WriteToLog() + errors.LogInfo(context.Background(), s.name, " got answer: ", req.domain, " ", req.reqType, " -> ", ipRec.IP, " ", elapsed) if updated { s.ips[req.domain] = rec @@ -225,10 +226,10 @@ func (s *DoHNameServer) newReqID() uint16 { } func (s *DoHNameServer) sendQuery(ctx context.Context, domain string, clientIP net.IP, option dns_feature.IPOption) { - newError(s.name, " querying: ", domain).AtInfo().WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, s.name, " querying: ", domain) if s.name+"." == "DOH//"+domain { - newError(s.name, " tries to resolve itself! Use IP or set \"hosts\" instead.").AtError().WriteToLog(session.ExportIDToError(ctx)) + errors.LogError(ctx, s.name, " tries to resolve itself! Use IP or set \"hosts\" instead.") return } @@ -266,17 +267,17 @@ func (s *DoHNameServer) sendQuery(ctx context.Context, domain string, clientIP n b, err := dns.PackMessage(r.msg) if err != nil { - newError("failed to pack dns query for ", domain).Base(err).AtError().WriteToLog() + errors.LogErrorInner(ctx, err, "failed to pack dns query for ", domain) return } resp, err := s.dohHTTPSContext(dnsCtx, b.Bytes()) if err != nil { - newError("failed to retrieve response for ", domain).Base(err).AtError().WriteToLog() + errors.LogErrorInner(ctx, err, "failed to retrieve response for ", domain) return } rec, err := parseResponse(resp) if err != nil { - newError("failed to handle DOH response for ", domain).Base(err).AtError().WriteToLog() + errors.LogErrorInner(ctx, err, "failed to handle DOH response for ", domain) return } s.updateIP(r, rec) @@ -361,11 +362,11 @@ func (s *DoHNameServer) QueryIP(ctx context.Context, domain string, clientIP net } if disableCache { - newError("DNS cache is disabled. Querying IP for ", domain, " at ", s.name).AtDebug().WriteToLog() + errors.LogDebug(ctx, "DNS cache is disabled. Querying IP for ", domain, " at ", s.name) } else { ips, err := s.findIPsForDomain(fqdn, option) if err != errRecordNotFound { - newError(s.name, " cache HIT ", domain, " -> ", ips).Base(err).AtDebug().WriteToLog() + errors.LogDebugInner(ctx, err, s.name, " cache HIT ", domain, " -> ", ips) log.Record(&log.DNSLog{Server: s.name, Domain: domain, Result: ips, Status: log.DNSCacheHit, Elapsed: 0, Error: err}) return ips, err } diff --git a/xray-core/app/dns/nameserver_fakedns.go b/xray-core/app/dns/nameserver_fakedns.go index 44dcb01cf5..531417da68 100644 --- a/xray-core/app/dns/nameserver_fakedns.go +++ b/xray-core/app/dns/nameserver_fakedns.go @@ -3,6 +3,7 @@ package dns import ( "context" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/core" "github.com/xtls/xray-core/features/dns" @@ -25,7 +26,7 @@ func (f *FakeDNSServer) QueryIP(ctx context.Context, domain string, _ net.IP, op if err := core.RequireFeatures(ctx, func(fd dns.FakeDNSEngine) { f.fakeDNSEngine = fd }); err != nil { - return nil, newError("Unable to locate a fake DNS Engine").Base(err).AtError() + return nil, errors.New("Unable to locate a fake DNS Engine").Base(err).AtError() } } var ips []net.Address @@ -37,10 +38,10 @@ func (f *FakeDNSServer) QueryIP(ctx context.Context, domain string, _ net.IP, op netIP, err := toNetIP(ips) if err != nil { - return nil, newError("Unable to convert IP to net ip").Base(err).AtError() + return nil, errors.New("Unable to convert IP to net ip").Base(err).AtError() } - newError(f.Name(), " got answer: ", domain, " -> ", ips).AtInfo().WriteToLog() + errors.LogInfo(ctx, f.Name(), " got answer: ", domain, " -> ", ips) if len(netIP) > 0 { return netIP, nil diff --git a/xray-core/app/dns/nameserver_local.go b/xray-core/app/dns/nameserver_local.go index bf741c2369..f204981f3e 100644 --- a/xray-core/app/dns/nameserver_local.go +++ b/xray-core/app/dns/nameserver_local.go @@ -5,6 +5,7 @@ import ( "strings" "time" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/log" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/features/dns" @@ -19,7 +20,7 @@ type LocalNameServer struct { const errEmptyResponse = "No address associated with hostname" // QueryIP implements Server. -func (s *LocalNameServer) QueryIP(_ context.Context, domain string, _ net.IP, option dns.IPOption, _ bool) (ips []net.IP, err error) { +func (s *LocalNameServer) QueryIP(ctx context.Context, domain string, _ net.IP, option dns.IPOption, _ bool) (ips []net.IP, err error) { start := time.Now() ips, err = s.client.LookupIP(domain, option) @@ -28,7 +29,7 @@ func (s *LocalNameServer) QueryIP(_ context.Context, domain string, _ net.IP, op } if len(ips) > 0 { - newError("Localhost got answer: ", domain, " -> ", ips).AtInfo().WriteToLog() + errors.LogInfo(ctx, "Localhost got answer: ", domain, " -> ", ips) log.Record(&log.DNSLog{Server: s.Name(), Domain: domain, Result: ips, Status: log.DNSQueried, Elapsed: time.Since(start), Error: err}) } @@ -42,7 +43,7 @@ func (s *LocalNameServer) Name() string { // NewLocalNameServer creates localdns server object for directly lookup in system DNS. func NewLocalNameServer() *LocalNameServer { - newError("DNS: created localhost client").AtInfo().WriteToLog() + errors.LogInfo(context.Background(), "DNS: created localhost client") return &LocalNameServer{ client: localdns.New(), } diff --git a/xray-core/app/dns/nameserver_quic.go b/xray-core/app/dns/nameserver_quic.go index 817402f97d..2d56f43e69 100644 --- a/xray-core/app/dns/nameserver_quic.go +++ b/xray-core/app/dns/nameserver_quic.go @@ -12,6 +12,7 @@ import ( "github.com/quic-go/quic-go" "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/log" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/protocol/dns" @@ -45,7 +46,7 @@ type QUICNameServer struct { // NewQUICNameServer creates DNS-over-QUIC client object for local resolving func NewQUICNameServer(url *url.URL, queryStrategy QueryStrategy) (*QUICNameServer, error) { - newError("DNS: created Local DNS-over-QUIC client for ", url.String()).AtInfo().WriteToLog() + errors.LogInfo(context.Background(), "DNS: created Local DNS-over-QUIC client for ", url.String()) var err error port := net.Port(853) @@ -84,7 +85,7 @@ func (s *QUICNameServer) Cleanup() error { defer s.Unlock() if len(s.ips) == 0 { - return newError("nothing to do. stopping...") + return errors.New("nothing to do. stopping...") } for domain, record := range s.ips { @@ -96,7 +97,7 @@ func (s *QUICNameServer) Cleanup() error { } if record.A == nil && record.AAAA == nil { - newError(s.name, " cleanup ", domain).AtDebug().WriteToLog() + errors.LogDebug(context.Background(), s.name, " cleanup ", domain) delete(s.ips, domain) } else { s.ips[domain] = record @@ -139,7 +140,7 @@ func (s *QUICNameServer) updateIP(req *dnsRequest, ipRec *IPRecord) { updated = true } } - newError(s.name, " got answer: ", req.domain, " ", req.reqType, " -> ", ipRec.IP, " ", elapsed).AtInfo().WriteToLog() + errors.LogInfo(context.Background(), s.name, " got answer: ", req.domain, " ", req.reqType, " -> ", ipRec.IP, " ", elapsed) if updated { s.ips[req.domain] = rec @@ -159,7 +160,7 @@ func (s *QUICNameServer) newReqID() uint16 { } func (s *QUICNameServer) sendQuery(ctx context.Context, domain string, clientIP net.IP, option dns_feature.IPOption) { - newError(s.name, " querying: ", domain).AtInfo().WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, s.name, " querying: ", domain) reqs := buildReqMsgs(domain, option, s.newReqID, genEDNS0Options(clientIP)) @@ -192,7 +193,7 @@ func (s *QUICNameServer) sendQuery(ctx context.Context, domain string, clientIP b, err := dns.PackMessage(r.msg) if err != nil { - newError("failed to pack dns query").Base(err).AtError().WriteToLog() + errors.LogErrorInner(ctx, err, "failed to pack dns query") return } @@ -203,13 +204,13 @@ func (s *QUICNameServer) sendQuery(ctx context.Context, domain string, clientIP conn, err := s.openStream(dnsCtx) if err != nil { - newError("failed to open quic connection").Base(err).AtError().WriteToLog() + errors.LogErrorInner(ctx, err, "failed to open quic connection") return } _, err = conn.Write(dnsReqBuf.Bytes()) if err != nil { - newError("failed to send query").Base(err).AtError().WriteToLog() + errors.LogErrorInner(ctx, err, "failed to send query") return } @@ -219,25 +220,25 @@ func (s *QUICNameServer) sendQuery(ctx context.Context, domain string, clientIP defer respBuf.Release() n, err := respBuf.ReadFullFrom(conn, 2) if err != nil && n == 0 { - newError("failed to read response length").Base(err).AtError().WriteToLog() + errors.LogErrorInner(ctx, err, "failed to read response length") return } var length int16 err = binary.Read(bytes.NewReader(respBuf.Bytes()), binary.BigEndian, &length) if err != nil { - newError("failed to parse response length").Base(err).AtError().WriteToLog() + errors.LogErrorInner(ctx, err, "failed to parse response length") return } respBuf.Clear() n, err = respBuf.ReadFullFrom(conn, int32(length)) if err != nil && n == 0 { - newError("failed to read response length").Base(err).AtError().WriteToLog() + errors.LogErrorInner(ctx, err, "failed to read response length") return } rec, err := parseResponse(respBuf.Bytes()) if err != nil { - newError("failed to handle response").Base(err).AtError().WriteToLog() + errors.LogErrorInner(ctx, err, "failed to handle response") return } s.updateIP(r, rec) @@ -296,11 +297,11 @@ func (s *QUICNameServer) QueryIP(ctx context.Context, domain string, clientIP ne } if disableCache { - newError("DNS cache is disabled. Querying IP for ", domain, " at ", s.name).AtDebug().WriteToLog() + errors.LogDebug(ctx, "DNS cache is disabled. Querying IP for ", domain, " at ", s.name) } else { ips, err := s.findIPsForDomain(fqdn, option) if err != errRecordNotFound { - newError(s.name, " cache HIT ", domain, " -> ", ips).Base(err).AtDebug().WriteToLog() + errors.LogDebugInner(ctx, err, s.name, " cache HIT ", domain, " -> ", ips) log.Record(&log.DNSLog{Server: s.name, Domain: domain, Result: ips, Status: log.DNSCacheHit, Elapsed: 0, Error: err}) return ips, err } diff --git a/xray-core/app/dns/nameserver_tcp.go b/xray-core/app/dns/nameserver_tcp.go index 4ed723e114..bc5bab440c 100644 --- a/xray-core/app/dns/nameserver_tcp.go +++ b/xray-core/app/dns/nameserver_tcp.go @@ -11,6 +11,7 @@ import ( "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/log" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/net/cnc" @@ -114,7 +115,7 @@ func (s *TCPNameServer) Cleanup() error { defer s.Unlock() if len(s.ips) == 0 { - return newError("nothing to do. stopping...") + return errors.New("nothing to do. stopping...") } for domain, record := range s.ips { @@ -126,7 +127,7 @@ func (s *TCPNameServer) Cleanup() error { } if record.A == nil && record.AAAA == nil { - newError(s.name, " cleanup ", domain).AtDebug().WriteToLog() + errors.LogDebug(context.Background(), s.name, " cleanup ", domain) delete(s.ips, domain) } else { s.ips[domain] = record @@ -169,7 +170,7 @@ func (s *TCPNameServer) updateIP(req *dnsRequest, ipRec *IPRecord) { updated = true } } - newError(s.name, " got answer: ", req.domain, " ", req.reqType, " -> ", ipRec.IP, " ", elapsed).AtInfo().WriteToLog() + errors.LogInfo(context.Background(), s.name, " got answer: ", req.domain, " ", req.reqType, " -> ", ipRec.IP, " ", elapsed) if updated { s.ips[req.domain] = rec @@ -189,7 +190,7 @@ func (s *TCPNameServer) newReqID() uint16 { } func (s *TCPNameServer) sendQuery(ctx context.Context, domain string, clientIP net.IP, option dns_feature.IPOption) { - newError(s.name, " querying DNS for: ", domain).AtDebug().WriteToLog(session.ExportIDToError(ctx)) + errors.LogDebug(ctx, s.name, " querying DNS for: ", domain) reqs := buildReqMsgs(domain, option, s.newReqID, genEDNS0Options(clientIP)) @@ -219,13 +220,13 @@ func (s *TCPNameServer) sendQuery(ctx context.Context, domain string, clientIP n b, err := dns.PackMessage(r.msg) if err != nil { - newError("failed to pack dns query").Base(err).AtError().WriteToLog() + errors.LogErrorInner(ctx, err, "failed to pack dns query") return } conn, err := s.dial(dnsCtx) if err != nil { - newError("failed to dial namesever").Base(err).AtError().WriteToLog() + errors.LogErrorInner(ctx, err, "failed to dial namesever") return } defer conn.Close() @@ -236,7 +237,7 @@ func (s *TCPNameServer) sendQuery(ctx context.Context, domain string, clientIP n _, err = conn.Write(dnsReqBuf.Bytes()) if err != nil { - newError("failed to send query").Base(err).AtError().WriteToLog() + errors.LogErrorInner(ctx, err, "failed to send query") return } dnsReqBuf.Release() @@ -245,25 +246,25 @@ func (s *TCPNameServer) sendQuery(ctx context.Context, domain string, clientIP n defer respBuf.Release() n, err := respBuf.ReadFullFrom(conn, 2) if err != nil && n == 0 { - newError("failed to read response length").Base(err).AtError().WriteToLog() + errors.LogErrorInner(ctx, err, "failed to read response length") return } var length int16 err = binary.Read(bytes.NewReader(respBuf.Bytes()), binary.BigEndian, &length) if err != nil { - newError("failed to parse response length").Base(err).AtError().WriteToLog() + errors.LogErrorInner(ctx, err, "failed to parse response length") return } respBuf.Clear() n, err = respBuf.ReadFullFrom(conn, int32(length)) if err != nil && n == 0 { - newError("failed to read response length").Base(err).AtError().WriteToLog() + errors.LogErrorInner(ctx, err, "failed to read response length") return } rec, err := parseResponse(respBuf.Bytes()) if err != nil { - newError("failed to parse DNS over TCP response").Base(err).AtError().WriteToLog() + errors.LogErrorInner(ctx, err, "failed to parse DNS over TCP response") return } @@ -319,11 +320,11 @@ func (s *TCPNameServer) QueryIP(ctx context.Context, domain string, clientIP net } if disableCache { - newError("DNS cache is disabled. Querying IP for ", domain, " at ", s.name).AtDebug().WriteToLog() + errors.LogDebug(ctx, "DNS cache is disabled. Querying IP for ", domain, " at ", s.name) } else { ips, err := s.findIPsForDomain(fqdn, option) if err != errRecordNotFound { - newError(s.name, " cache HIT ", domain, " -> ", ips).Base(err).AtDebug().WriteToLog() + errors.LogDebugInner(ctx, err, s.name, " cache HIT ", domain, " -> ", ips) log.Record(&log.DNSLog{Server: s.name, Domain: domain, Result: ips, Status: log.DNSCacheHit, Elapsed: 0, Error: err}) return ips, err } diff --git a/xray-core/app/dns/nameserver_udp.go b/xray-core/app/dns/nameserver_udp.go index d511df5beb..67e1d73a6c 100644 --- a/xray-core/app/dns/nameserver_udp.go +++ b/xray-core/app/dns/nameserver_udp.go @@ -8,11 +8,11 @@ import ( "time" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/log" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/protocol/dns" udp_proto "github.com/xtls/xray-core/common/protocol/udp" - "github.com/xtls/xray-core/common/session" "github.com/xtls/xray-core/common/signal/pubsub" "github.com/xtls/xray-core/common/task" dns_feature "github.com/xtls/xray-core/features/dns" @@ -53,7 +53,7 @@ func NewClassicNameServer(address net.Destination, dispatcher routing.Dispatcher Execute: s.Cleanup, } s.udpServer = udp.NewDispatcher(dispatcher, s.HandleResponse) - newError("DNS: created UDP client initialized for ", address.NetAddr()).AtInfo().WriteToLog() + errors.LogInfo(context.Background(), "DNS: created UDP client initialized for ", address.NetAddr()) return s } @@ -69,7 +69,7 @@ func (s *ClassicNameServer) Cleanup() error { defer s.Unlock() if len(s.ips) == 0 && len(s.requests) == 0 { - return newError(s.name, " nothing to do. stopping...") + return errors.New(s.name, " nothing to do. stopping...") } for domain, record := range s.ips { @@ -81,7 +81,7 @@ func (s *ClassicNameServer) Cleanup() error { } if record.A == nil && record.AAAA == nil { - newError(s.name, " cleanup ", domain).AtDebug().WriteToLog() + errors.LogDebug(context.Background(), s.name, " cleanup ", domain) delete(s.ips, domain) } else { s.ips[domain] = record @@ -109,7 +109,7 @@ func (s *ClassicNameServer) Cleanup() error { func (s *ClassicNameServer) HandleResponse(ctx context.Context, packet *udp_proto.Packet) { ipRec, err := parseResponse(packet.Payload.Bytes()) if err != nil { - newError(s.name, " fail to parse responded DNS udp").AtError().WriteToLog() + errors.LogError(ctx, s.name, " fail to parse responded DNS udp") return } @@ -122,7 +122,7 @@ func (s *ClassicNameServer) HandleResponse(ctx context.Context, packet *udp_prot } s.Unlock() if !ok { - newError(s.name, " cannot find the pending request").AtError().WriteToLog() + errors.LogError(ctx, s.name, " cannot find the pending request") return } @@ -135,7 +135,7 @@ func (s *ClassicNameServer) HandleResponse(ctx context.Context, packet *udp_prot } elapsed := time.Since(req.start) - newError(s.name, " got answer: ", req.domain, " ", req.reqType, " -> ", ipRec.IP, " ", elapsed).AtInfo().WriteToLog() + errors.LogInfo(ctx, s.name, " got answer: ", req.domain, " ", req.reqType, " -> ", ipRec.IP, " ", elapsed) if len(req.domain) > 0 && (rec.A != nil || rec.AAAA != nil) { s.updateIP(req.domain, &rec) } @@ -160,7 +160,7 @@ func (s *ClassicNameServer) updateIP(domain string, newRec *record) { } if updated { - newError(s.name, " updating IP records for domain:", domain).AtDebug().WriteToLog() + errors.LogDebug(context.Background(), s.name, " updating IP records for domain:", domain) s.ips[domain] = rec } if newRec.A != nil { @@ -187,7 +187,7 @@ func (s *ClassicNameServer) addPendingRequest(req *dnsRequest) { } func (s *ClassicNameServer) sendQuery(ctx context.Context, domain string, clientIP net.IP, option dns_feature.IPOption) { - newError(s.name, " querying DNS for: ", domain).AtDebug().WriteToLog(session.ExportIDToError(ctx)) + errors.LogDebug(ctx, s.name, " querying DNS for: ", domain) reqs := buildReqMsgs(domain, option, s.newReqID, genEDNS0Options(clientIP)) @@ -241,11 +241,11 @@ func (s *ClassicNameServer) QueryIP(ctx context.Context, domain string, clientIP fqdn := Fqdn(domain) if disableCache { - newError("DNS cache is disabled. Querying IP for ", domain, " at ", s.name).AtDebug().WriteToLog() + errors.LogDebug(ctx, "DNS cache is disabled. Querying IP for ", domain, " at ", s.name) } else { ips, err := s.findIPsForDomain(fqdn, option) if err != errRecordNotFound { - newError(s.name, " cache HIT ", domain, " -> ", ips).Base(err).AtDebug().WriteToLog() + errors.LogDebugInner(ctx, err, s.name, " cache HIT ", domain, " -> ", ips) log.Record(&log.DNSLog{Server: s.name, Domain: domain, Result: ips, Status: log.DNSCacheHit, Elapsed: 0, Error: err}) return ips, err } diff --git a/xray-core/app/log/command/command.go b/xray-core/app/log/command/command.go index 74a02d7715..74ce2d5b87 100644 --- a/xray-core/app/log/command/command.go +++ b/xray-core/app/log/command/command.go @@ -7,6 +7,7 @@ import ( "github.com/xtls/xray-core/app/log" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/core" grpc "google.golang.org/grpc" ) @@ -19,13 +20,13 @@ type LoggerServer struct { func (s *LoggerServer) RestartLogger(ctx context.Context, request *RestartLoggerRequest) (*RestartLoggerResponse, error) { logger := s.V.GetFeature((*log.Instance)(nil)) if logger == nil { - return nil, newError("unable to get logger instance") + return nil, errors.New("unable to get logger instance") } if err := logger.Close(); err != nil { - return nil, newError("failed to close logger").Base(err) + return nil, errors.New("failed to close logger").Base(err) } if err := logger.Start(); err != nil { - return nil, newError("failed to start logger").Base(err) + return nil, errors.New("failed to start logger").Base(err) } return &RestartLoggerResponse{}, nil } diff --git a/xray-core/app/log/command/errors.generated.go b/xray-core/app/log/command/errors.generated.go deleted file mode 100644 index a13059329d..0000000000 --- a/xray-core/app/log/command/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package command - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/app/log/errors.generated.go b/xray-core/app/log/errors.generated.go deleted file mode 100644 index e09634a972..0000000000 --- a/xray-core/app/log/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package log - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/app/log/log.go b/xray-core/app/log/log.go index 7cdd5390c4..88bac44fdf 100644 --- a/xray-core/app/log/log.go +++ b/xray-core/app/log/log.go @@ -7,6 +7,7 @@ import ( "sync" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/log" ) @@ -35,7 +36,7 @@ func New(ctx context.Context, config *Config) (*Instance, error) { return nil, err } - newError("Logger started").AtDebug().WriteToLog() + errors.LogDebug(ctx, "Logger started") return g, nil } @@ -77,10 +78,10 @@ func (g *Instance) startInternal() error { g.active = true if err := g.initAccessLogger(); err != nil { - return newError("failed to initialize access logger").Base(err).AtWarning() + return errors.New("failed to initialize access logger").Base(err).AtWarning() } if err := g.initErrorLogger(); err != nil { - return newError("failed to initialize error logger").Base(err).AtWarning() + return errors.New("failed to initialize error logger").Base(err).AtWarning() } return nil @@ -120,7 +121,7 @@ func (g *Instance) Handle(msg log.Message) { // Close implements common.Closable.Close(). func (g *Instance) Close() error { - newError("Logger closing").AtDebug().WriteToLog() + errors.LogDebug(context.Background(), "Logger closing") g.Lock() defer g.Unlock() diff --git a/xray-core/app/log/log_creator.go b/xray-core/app/log/log_creator.go index 9db8e1c7ee..4828727121 100644 --- a/xray-core/app/log/log_creator.go +++ b/xray-core/app/log/log_creator.go @@ -4,6 +4,7 @@ import ( "sync" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/log" ) @@ -19,7 +20,7 @@ var handlerCreatorMapLock = &sync.RWMutex{} func RegisterHandlerCreator(logType LogType, f HandlerCreator) error { if f == nil { - return newError("nil HandlerCreator") + return errors.New("nil HandlerCreator") } handlerCreatorMapLock.Lock() @@ -35,7 +36,7 @@ func createHandler(logType LogType, options HandlerCreatorOptions) (log.Handler, creator, found := handlerCreatorMap[logType] if !found { - return nil, newError("unable to create log handler for ", logType) + return nil, errors.New("unable to create log handler for ", logType) } return creator(logType, options) } diff --git a/xray-core/app/metrics/errors.generated.go b/xray-core/app/metrics/errors.generated.go deleted file mode 100644 index dee6b31608..0000000000 --- a/xray-core/app/metrics/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package metrics - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/app/metrics/metrics.go b/xray-core/app/metrics/metrics.go index 9b0ba07120..757d673d78 100644 --- a/xray-core/app/metrics/metrics.go +++ b/xray-core/app/metrics/metrics.go @@ -10,6 +10,7 @@ import ( "github.com/xtls/xray-core/app/observatory" "github.com/xtls/xray-core/app/stats" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/signal/done" "github.com/xtls/xray-core/core" @@ -93,12 +94,12 @@ func (p *MetricsHandler) Start() error { go func() { if err := http.Serve(listener, http.DefaultServeMux); err != nil { - newError("failed to start metrics server").Base(err).AtError().WriteToLog() + errors.LogErrorInner(context.Background(), err, "failed to start metrics server") } }() if err := p.ohm.RemoveHandler(context.Background(), p.tag); err != nil { - newError("failed to remove existing handler").WriteToLog() + errors.LogInfo(context.Background(), "failed to remove existing handler") } return p.ohm.AddHandler(context.Background(), &Outbound{ diff --git a/xray-core/app/metrics/outbound.go b/xray-core/app/metrics/outbound.go index 32c0192b1d..40f1938304 100644 --- a/xray-core/app/metrics/outbound.go +++ b/xray-core/app/metrics/outbound.go @@ -5,6 +5,7 @@ import ( "sync" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/net/cnc" "github.com/xtls/xray-core/common/signal/done" @@ -31,7 +32,7 @@ func (l *OutboundListener) add(conn net.Conn) { func (l *OutboundListener) Accept() (net.Conn, error) { select { case <-l.done.Wait(): - return nil, newError("listen closed") + return nil, errors.New("listen closed") case c := <-l.buffer: return c, nil } diff --git a/xray-core/app/observatory/burst/burstobserver.go b/xray-core/app/observatory/burst/burstobserver.go index 6b7dbc7c65..f2204c00fa 100644 --- a/xray-core/app/observatory/burst/burstobserver.go +++ b/xray-core/app/observatory/burst/burstobserver.go @@ -2,15 +2,17 @@ package burst import ( "context" - - "github.com/xtls/xray-core/core" + + "sync" + "github.com/xtls/xray-core/app/observatory" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/signal/done" + "github.com/xtls/xray-core/core" "github.com/xtls/xray-core/features/extension" "github.com/xtls/xray-core/features/outbound" "google.golang.org/protobuf/proto" - "sync" ) type Observer struct { @@ -66,7 +68,7 @@ func (o *Observer) Start() error { hs, ok := o.ohm.(outbound.HandlerSelector) if !ok { - return nil, newError("outbound.Manager is not a HandlerSelector") + return nil, errors.New("outbound.Manager is not a HandlerSelector") } outbounds := hs.Select(o.config.SubjectSelector) @@ -90,7 +92,7 @@ func New(ctx context.Context, config *Config) (*Observer, error) { outboundManager = om }) if err != nil { - return nil, newError("Cannot get depended features").Base(err) + return nil, errors.New("Cannot get depended features").Base(err) } hp := NewHealthPing(ctx, config.PingConfig) return &Observer{ diff --git a/xray-core/app/observatory/burst/errors.generated.go b/xray-core/app/observatory/burst/errors.generated.go deleted file mode 100644 index 35638eec2d..0000000000 --- a/xray-core/app/observatory/burst/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package burst - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/app/observatory/burst/healthping.go b/xray-core/app/observatory/burst/healthping.go index 2f0bbcc667..34690f58e3 100644 --- a/xray-core/app/observatory/burst/healthping.go +++ b/xray-core/app/observatory/burst/healthping.go @@ -8,6 +8,7 @@ import ( "time" "github.com/xtls/xray-core/common/dice" + "github.com/xtls/xray-core/common/errors" ) // HealthPingSettings holds settings for health Checker @@ -51,7 +52,7 @@ func NewHealthPing(ctx context.Context, config *HealthPingConfig) *HealthPing { if settings.Interval == 0 { settings.Interval = time.Duration(1) * time.Minute } else if settings.Interval < 10 { - newError("health check interval is too small, 10s is applied").AtWarning().WriteToLog() + errors.LogWarning(ctx, "health check interval is too small, 10s is applied") settings.Interval = time.Duration(10) * time.Second } if settings.SamplingCount <= 0 { @@ -82,7 +83,7 @@ func (h *HealthPing) StartScheduler(selector func() ([]string, error)) { go func() { tags, err := selector() if err != nil { - newError("error select outbounds for initial health check: ", err).AtWarning().WriteToLog() + errors.LogWarning(h.ctx, "error select outbounds for initial health check: ", err) return } h.Check(tags) @@ -93,7 +94,7 @@ func (h *HealthPing) StartScheduler(selector func() ([]string, error)) { go func() { tags, err := selector() if err != nil { - newError("error select outbounds for scheduled health check: ", err).AtWarning().WriteToLog() + errors.LogWarning(h.ctx, "error select outbounds for scheduled health check: ", err) return } h.doCheck(tags, interval, h.Settings.SamplingCount) @@ -125,7 +126,7 @@ func (h *HealthPing) Check(tags []string) error { if len(tags) == 0 { return nil } - newError("perform one-time health check for tags ", tags).AtInfo().WriteToLog() + errors.LogInfo(h.ctx, "perform one-time health check for tags ", tags) h.doCheck(tags, 0, 1) return nil } @@ -158,7 +159,7 @@ func (h *HealthPing) doCheck(tags []string, duration time.Duration, rounds int) delay = time.Duration(dice.Roll(int(duration))) } time.AfterFunc(delay, func() { - newError("checking ", handler).AtDebug().WriteToLog() + errors.LogDebug(h.ctx, "checking ", handler) delay, err := client.MeasureDelay() if err == nil { ch <- &rtt{ @@ -168,19 +169,19 @@ func (h *HealthPing) doCheck(tags []string, duration time.Duration, rounds int) return } if !h.checkConnectivity() { - newError("network is down").AtWarning().WriteToLog() + errors.LogWarning(h.ctx, "network is down") ch <- &rtt{ handler: handler, value: 0, } return } - newError(fmt.Sprintf( + errors.LogWarning(h.ctx, fmt.Sprintf( "error ping %s with %s: %s", h.Settings.Destination, handler, err, - )).AtWarning().WriteToLog() + )) ch <- &rtt{ handler: handler, value: rttFailed, diff --git a/xray-core/app/observatory/errors.generated.go b/xray-core/app/observatory/errors.generated.go deleted file mode 100644 index 5cd4408a9f..0000000000 --- a/xray-core/app/observatory/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package observatory - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/app/observatory/explainErrors.go b/xray-core/app/observatory/explainErrors.go index 9aba792329..287a78ef48 100644 --- a/xray-core/app/observatory/explainErrors.go +++ b/xray-core/app/observatory/explainErrors.go @@ -8,10 +8,10 @@ type errorCollector struct { func (e *errorCollector) SubmitError(err error) { if e.errors == nil { - e.errors = newError("underlying connection error").Base(err) + e.errors = errors.New("underlying connection error").Base(err) return } - e.errors = e.errors.Base(newError("underlying connection error").Base(err)) + e.errors = e.errors.Base(errors.New("underlying connection error").Base(err)) } func newErrorCollector() *errorCollector { @@ -20,7 +20,7 @@ func newErrorCollector() *errorCollector { func (e *errorCollector) UnderlyingError() error { if e.errors == nil { - return newError("failed to produce report") + return errors.New("failed to produce report") } return e.errors } diff --git a/xray-core/app/observatory/observer.go b/xray-core/app/observatory/observer.go index 9d961f66b9..f29856db0b 100644 --- a/xray-core/app/observatory/observer.go +++ b/xray-core/app/observatory/observer.go @@ -10,6 +10,7 @@ import ( "time" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" v2net "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/session" "github.com/xtls/xray-core/common/signal/done" @@ -60,7 +61,7 @@ func (o *Observer) background() { for !o.finished.Done() { hs, ok := o.ohm.(outbound.HandlerSelector) if !ok { - newError("outbound.Manager is not a HandlerSelector").WriteToLog() + errors.LogInfo(o.ctx, "outbound.Manager is not a HandlerSelector") return } @@ -127,18 +128,18 @@ func (o *Observer) probe(outbound string) ProbeResult { // MUST use Xray's built in context system dest, err := v2net.ParseDestination(network + ":" + addr) if err != nil { - return newError("cannot understand address").Base(err) + return errors.New("cannot understand address").Base(err) } trackedCtx := session.TrackedConnectionError(o.ctx, errorCollectorForRequest) conn, err := tagged.Dialer(trackedCtx, dest, outbound) if err != nil { - return newError("cannot dial remote address ", dest).Base(err) + return errors.New("cannot dial remote address ", dest).Base(err) } connection = conn return nil }) if taskErr != nil { - return nil, newError("cannot finish connection").Base(taskErr) + return nil, errors.New("cannot finish connection").Base(taskErr) } return connection, nil }, @@ -161,7 +162,7 @@ func (o *Observer) probe(outbound string) ProbeResult { } response, err := httpClient.Get(probeURL) if err != nil { - return newError("outbound failed to relay connection").Base(err) + return errors.New("outbound failed to relay connection").Base(err) } if response.Body != nil { response.Body.Close() @@ -171,15 +172,11 @@ func (o *Observer) probe(outbound string) ProbeResult { return nil }) if err != nil { - fullerr := newError("underlying connection failed").Base(errorCollectorForRequest.UnderlyingError()) - fullerr = newError("with outbound handler report").Base(fullerr) - fullerr = newError("GET request failed:", err).Base(fullerr) - fullerr = newError("the outbound ", outbound, " is dead:").Base(fullerr) - fullerr = fullerr.AtInfo() - fullerr.WriteToLog() - return ProbeResult{Alive: false, LastErrorReason: fullerr.Error()} + var errorMessage = "the outbound " + outbound + " is dead: GET request failed:" + err.Error() + "with outbound handler report underlying connection failed" + errors.LogInfoInner(o.ctx, errorCollectorForRequest.UnderlyingError(), errorMessage) + return ProbeResult{Alive: false, LastErrorReason: errorMessage} } - newError("the outbound ", outbound, " is alive:", GETTime.Seconds()).AtInfo().WriteToLog() + errors.LogInfo(o.ctx, "the outbound ", outbound, " is alive:", GETTime.Seconds()) return ProbeResult{Alive: true, Delay: GETTime.Milliseconds()} } @@ -222,7 +219,7 @@ func New(ctx context.Context, config *Config) (*Observer, error) { outboundManager = om }) if err != nil { - return nil, newError("Cannot get depended features").Base(err) + return nil, errors.New("Cannot get depended features").Base(err) } return &Observer{ config: config, diff --git a/xray-core/app/policy/errors.generated.go b/xray-core/app/policy/errors.generated.go deleted file mode 100644 index 1fe4d613a8..0000000000 --- a/xray-core/app/policy/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package policy - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/app/proxyman/command/command.go b/xray-core/app/proxyman/command/command.go index 9782d6c102..4554f32bfb 100644 --- a/xray-core/app/proxyman/command/command.go +++ b/xray-core/app/proxyman/command/command.go @@ -4,6 +4,7 @@ import ( "context" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/core" "github.com/xtls/xray-core/features/inbound" "github.com/xtls/xray-core/features/outbound" @@ -26,7 +27,7 @@ type OutboundOperation interface { func getInbound(handler inbound.Handler) (proxy.Inbound, error) { gi, ok := handler.(proxy.GetInbound) if !ok { - return nil, newError("can't get inbound proxy from handler.") + return nil, errors.New("can't get inbound proxy from handler.") } return gi.GetInbound(), nil } @@ -39,11 +40,11 @@ func (op *AddUserOperation) ApplyInbound(ctx context.Context, handler inbound.Ha } um, ok := p.(proxy.UserManager) if !ok { - return newError("proxy is not a UserManager") + return errors.New("proxy is not a UserManager") } mUser, err := op.User.ToMemoryUser() if err != nil { - return newError("failed to parse user").Base(err) + return errors.New("failed to parse user").Base(err) } return um.AddUser(ctx, mUser) } @@ -56,7 +57,7 @@ func (op *RemoveUserOperation) ApplyInbound(ctx context.Context, handler inbound } um, ok := p.(proxy.UserManager) if !ok { - return newError("proxy is not a UserManager") + return errors.New("proxy is not a UserManager") } return um.RemoveUser(ctx, op.Email) } @@ -82,16 +83,16 @@ func (s *handlerServer) RemoveInbound(ctx context.Context, request *RemoveInboun func (s *handlerServer) AlterInbound(ctx context.Context, request *AlterInboundRequest) (*AlterInboundResponse, error) { rawOperation, err := request.Operation.GetInstance() if err != nil { - return nil, newError("unknown operation").Base(err) + return nil, errors.New("unknown operation").Base(err) } operation, ok := rawOperation.(InboundOperation) if !ok { - return nil, newError("not an inbound operation") + return nil, errors.New("not an inbound operation") } handler, err := s.ihm.GetHandler(ctx, request.Tag) if err != nil { - return nil, newError("failed to get handler: ", request.Tag).Base(err) + return nil, errors.New("failed to get handler: ", request.Tag).Base(err) } return &AlterInboundResponse{}, operation.ApplyInbound(ctx, handler) @@ -111,11 +112,11 @@ func (s *handlerServer) RemoveOutbound(ctx context.Context, request *RemoveOutbo func (s *handlerServer) AlterOutbound(ctx context.Context, request *AlterOutboundRequest) (*AlterOutboundResponse, error) { rawOperation, err := request.Operation.GetInstance() if err != nil { - return nil, newError("unknown operation").Base(err) + return nil, errors.New("unknown operation").Base(err) } operation, ok := rawOperation.(OutboundOperation) if !ok { - return nil, newError("not an outbound operation") + return nil, errors.New("not an outbound operation") } handler := s.ohm.GetHandler(request.Tag) diff --git a/xray-core/app/proxyman/command/errors.generated.go b/xray-core/app/proxyman/command/errors.generated.go deleted file mode 100644 index a13059329d..0000000000 --- a/xray-core/app/proxyman/command/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package command - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/app/proxyman/inbound/always.go b/xray-core/app/proxyman/inbound/always.go index f422e626e5..ff585c87d3 100644 --- a/xray-core/app/proxyman/inbound/always.go +++ b/xray-core/app/proxyman/inbound/always.go @@ -55,7 +55,7 @@ func NewAlwaysOnInboundHandler(ctx context.Context, tag string, receiverConfig * } p, ok := rawProxy.(proxy.Inbound) if !ok { - return nil, newError("not an inbound proxy.") + return nil, errors.New("not an inbound proxy.") } h := &AlwaysOnInboundHandler{ @@ -75,7 +75,7 @@ func NewAlwaysOnInboundHandler(ctx context.Context, tag string, receiverConfig * mss, err := internet.ToMemoryStreamConfig(receiverConfig.StreamSettings) if err != nil { - return nil, newError("failed to parse stream config").Base(err).AtWarning() + return nil, errors.New("failed to parse stream config").Base(err).AtWarning() } if receiverConfig.ReceiveOriginalDestination { @@ -89,7 +89,7 @@ func NewAlwaysOnInboundHandler(ctx context.Context, tag string, receiverConfig * } if pl == nil { if net.HasNetwork(nl, net.Network_UNIX) { - newError("creating unix domain socket worker on ", address).AtDebug().WriteToLog() + errors.LogDebug(ctx, "creating unix domain socket worker on ", address) worker := &dsWorker{ address: address, @@ -109,7 +109,7 @@ func NewAlwaysOnInboundHandler(ctx context.Context, tag string, receiverConfig * for _, pr := range pl.Range { for port := pr.From; port <= pr.To; port++ { if net.HasNetwork(nl, net.Network_TCP) { - newError("creating stream worker on ", address, ":", port).AtDebug().WriteToLog() + errors.LogDebug(ctx, "creating stream worker on ", address, ":", port) worker := &tcpWorker{ address: address, @@ -167,7 +167,7 @@ func (h *AlwaysOnInboundHandler) Close() error { } errs = append(errs, h.mux.Close()) if err := errors.Combine(errs...); err != nil { - return newError("failed to close all resources").Base(err) + return errors.New("failed to close all resources").Base(err) } return nil } diff --git a/xray-core/app/proxyman/inbound/dynamic.go b/xray-core/app/proxyman/inbound/dynamic.go index 0f81c26e7d..0a98b88850 100644 --- a/xray-core/app/proxyman/inbound/dynamic.go +++ b/xray-core/app/proxyman/inbound/dynamic.go @@ -7,6 +7,7 @@ import ( "github.com/xtls/xray-core/app/proxyman" "github.com/xtls/xray-core/common/dice" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/mux" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/task" @@ -46,7 +47,7 @@ func NewDynamicInboundHandler(ctx context.Context, tag string, receiverConfig *p mss, err := internet.ToMemoryStreamConfig(receiverConfig.StreamSettings) if err != nil { - return nil, newError("failed to parse stream settings").Base(err).AtWarning() + return nil, errors.New("failed to parse stream settings").Base(err).AtWarning() } if receiverConfig.ReceiveOriginalDestination { if mss.SocketSettings == nil { @@ -94,7 +95,7 @@ func (h *DynamicInboundHandler) closeWorkers(workers []worker) { for idx, worker := range workers { ports2Del[idx] = worker.Port() if err := worker.Close(); err != nil { - newError("failed to close worker").Base(err).WriteToLog() + errors.LogInfoInner(h.ctx, err, "failed to close worker") } } @@ -123,7 +124,7 @@ func (h *DynamicInboundHandler) refresh() error { port := h.allocatePort() rawProxy, err := core.CreateObject(h.v, h.proxyConfig) if err != nil { - newError("failed to create proxy instance").Base(err).AtWarning().WriteToLog() + errors.LogWarningInner(h.ctx, err, "failed to create proxy instance") continue } p := rawProxy.(proxy.Inbound) @@ -143,7 +144,7 @@ func (h *DynamicInboundHandler) refresh() error { ctx: h.ctx, } if err := worker.Start(); err != nil { - newError("failed to create TCP worker").Base(err).AtWarning().WriteToLog() + errors.LogWarningInner(h.ctx, err, "failed to create TCP worker") continue } workers = append(workers, worker) @@ -163,7 +164,7 @@ func (h *DynamicInboundHandler) refresh() error { ctx: h.ctx, } if err := worker.Start(); err != nil { - newError("failed to create UDP worker").Base(err).AtWarning().WriteToLog() + errors.LogWarningInner(h.ctx, err, "failed to create UDP worker") continue } workers = append(workers, worker) diff --git a/xray-core/app/proxyman/inbound/errors.generated.go b/xray-core/app/proxyman/inbound/errors.generated.go deleted file mode 100644 index c2d7295e46..0000000000 --- a/xray-core/app/proxyman/inbound/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package inbound - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/app/proxyman/inbound/inbound.go b/xray-core/app/proxyman/inbound/inbound.go index 3c9fb46723..1881283ab7 100644 --- a/xray-core/app/proxyman/inbound/inbound.go +++ b/xray-core/app/proxyman/inbound/inbound.go @@ -8,6 +8,7 @@ import ( "github.com/xtls/xray-core/app/proxyman" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/serial" "github.com/xtls/xray-core/common/session" "github.com/xtls/xray-core/core" @@ -43,7 +44,7 @@ func (m *Manager) AddHandler(ctx context.Context, handler inbound.Handler) error tag := handler.Tag() if len(tag) > 0 { if _, found := m.taggedHandlers[tag]; found { - return newError("existing tag found: " + tag) + return errors.New("existing tag found: " + tag) } m.taggedHandlers[tag] = handler } else { @@ -64,7 +65,7 @@ func (m *Manager) GetHandler(ctx context.Context, tag string) (inbound.Handler, handler, found := m.taggedHandlers[tag] if !found { - return nil, newError("handler not found: ", tag) + return nil, errors.New("handler not found: ", tag) } return handler, nil } @@ -80,7 +81,7 @@ func (m *Manager) RemoveHandler(ctx context.Context, tag string) error { if handler, found := m.taggedHandlers[tag]; found { if err := handler.Close(); err != nil { - newError("failed to close handler ", tag).Base(err).AtWarning().WriteToLog(session.ExportIDToError(ctx)) + errors.LogWarningInner(ctx, err, "failed to close handler ", tag) } delete(m.taggedHandlers, tag) return nil @@ -117,20 +118,20 @@ func (m *Manager) Close() error { m.running = false - var errors []interface{} + var errs []interface{} for _, handler := range m.taggedHandlers { if err := handler.Close(); err != nil { - errors = append(errors, err) + errs = append(errs, err) } } for _, handler := range m.untaggedHandler { if err := handler.Close(); err != nil { - errors = append(errors, err) + errs = append(errs, err) } } - if len(errors) > 0 { - return newError("failed to close all handlers").Base(newError(serial.Concat(errors...))) + if len(errs) > 0 { + return errors.New("failed to close all handlers").Base(errors.New(serial.Concat(errs...))) } return nil @@ -150,7 +151,7 @@ func NewHandler(ctx context.Context, config *core.InboundHandlerConfig) (inbound receiverSettings, ok := rawReceiverSettings.(*proxyman.ReceiverConfig) if !ok { - return nil, newError("not a ReceiverConfig").AtError() + return nil, errors.New("not a ReceiverConfig").AtError() } streamSettings := receiverSettings.StreamSettings @@ -168,7 +169,7 @@ func NewHandler(ctx context.Context, config *core.InboundHandlerConfig) (inbound if allocStrategy.Type == proxyman.AllocationStrategy_Random { return NewDynamicInboundHandler(ctx, tag, receiverSettings, proxySettings) } - return nil, newError("unknown allocation strategy: ", receiverSettings.AllocationStrategy.Type).AtError() + return nil, errors.New("unknown allocation strategy: ", receiverSettings.AllocationStrategy.Type).AtError() } func init() { diff --git a/xray-core/app/proxyman/inbound/worker.go b/xray-core/app/proxyman/inbound/worker.go index 539508e19d..a14a338f45 100644 --- a/xray-core/app/proxyman/inbound/worker.go +++ b/xray-core/app/proxyman/inbound/worker.go @@ -9,6 +9,8 @@ import ( "github.com/xtls/xray-core/app/proxyman" "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/buf" + c "github.com/xtls/xray-core/common/ctx" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/serial" "github.com/xtls/xray-core/common/session" @@ -58,7 +60,7 @@ func getTProxyType(s *internet.MemoryStreamConfig) internet.SocketConfig_TProxyM func (w *tcpWorker) callback(conn stat.Connection) { ctx, cancel := context.WithCancel(w.ctx) sid := session.NewID() - ctx = session.ContextWithID(ctx, sid) + ctx = c.ContextWithID(ctx, sid) outbounds := []*session.Outbound{{}} if w.recvOrigDest { @@ -67,7 +69,7 @@ func (w *tcpWorker) callback(conn stat.Connection) { case internet.SocketConfig_Redirect: d, err := tcp.GetOriginalDestination(conn) if err != nil { - newError("failed to get original destination").Base(err).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfoInner(ctx, err, "failed to get original destination") } else { dest = d } @@ -105,7 +107,7 @@ func (w *tcpWorker) callback(conn stat.Connection) { ctx = session.ContextWithContent(ctx, content) if err := w.proxy.Process(ctx, net.Network_TCP, conn, w.dispatcher); err != nil { - newError("connection ends").Base(err).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfoInner(ctx, err, "connection ends") } cancel() conn.Close() @@ -121,24 +123,24 @@ func (w *tcpWorker) Start() error { go w.callback(conn) }) if err != nil { - return newError("failed to listen TCP on ", w.port).AtWarning().Base(err) + return errors.New("failed to listen TCP on ", w.port).AtWarning().Base(err) } w.hub = hub return nil } func (w *tcpWorker) Close() error { - var errors []interface{} + var errs []interface{} if w.hub != nil { if err := common.Close(w.hub); err != nil { - errors = append(errors, err) + errs = append(errs, err) } if err := common.Close(w.proxy); err != nil { - errors = append(errors, err) + errs = append(errs, err) } } - if len(errors) > 0 { - return newError("failed to close all resources").Base(newError(serial.Concat(errors...))) + if len(errs) > 0 { + return errors.New("failed to close all resources").Base(errors.New(serial.Concat(errs...))) } return nil @@ -306,7 +308,7 @@ func (w *udpWorker) callback(b *buf.Buffer, source net.Destination, originalDest go func() { ctx := w.ctx sid := session.NewID() - ctx = session.ContextWithID(ctx, sid) + ctx = c.ContextWithID(ctx, sid) outbounds := []*session.Outbound{{}} if originalDest.IsValid() { @@ -327,7 +329,7 @@ func (w *udpWorker) callback(b *buf.Buffer, source net.Destination, originalDest } ctx = session.ContextWithContent(ctx, content) if err := w.proxy.Process(ctx, net.Network_UDP, conn, w.dispatcher); err != nil { - newError("connection ends").Base(err).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfoInner(ctx, err, "connection ends") } conn.Close() // conn not removed by checker TODO may be lock worker here is better @@ -358,7 +360,7 @@ func (w *udpWorker) clean() error { defer w.Unlock() if len(w.activeConn) == 0 { - return newError("no more connections. stopping...") + return errors.New("no more connections. stopping...") } for addr, conn := range w.activeConn { @@ -402,26 +404,26 @@ func (w *udpWorker) Close() error { w.Lock() defer w.Unlock() - var errors []interface{} + var errs []interface{} if w.hub != nil { if err := w.hub.Close(); err != nil { - errors = append(errors, err) + errs = append(errs, err) } } if w.checker != nil { if err := w.checker.Close(); err != nil { - errors = append(errors, err) + errs = append(errs, err) } } if err := common.Close(w.proxy); err != nil { - errors = append(errors, err) + errs = append(errs, err) } - if len(errors) > 0 { - return newError("failed to close all resources").Base(newError(serial.Concat(errors...))) + if len(errs) > 0 { + return errors.New("failed to close all resources").Base(errors.New(serial.Concat(errs...))) } return nil } @@ -452,7 +454,7 @@ type dsWorker struct { func (w *dsWorker) callback(conn stat.Connection) { ctx, cancel := context.WithCancel(w.ctx) sid := session.NewID() - ctx = session.ContextWithID(ctx, sid) + ctx = c.ContextWithID(ctx, sid) if w.uplinkCounter != nil || w.downlinkCounter != nil { conn = &stat.CounterConnection{ @@ -479,11 +481,11 @@ func (w *dsWorker) callback(conn stat.Connection) { ctx = session.ContextWithContent(ctx, content) if err := w.proxy.Process(ctx, net.Network_UNIX, conn, w.dispatcher); err != nil { - newError("connection ends").Base(err).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfoInner(ctx, err, "connection ends") } cancel() if err := conn.Close(); err != nil { - newError("failed to close connection").Base(err).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfoInner(ctx, err, "failed to close connection") } } @@ -501,24 +503,24 @@ func (w *dsWorker) Start() error { go w.callback(conn) }) if err != nil { - return newError("failed to listen Unix Domain Socket on ", w.address).AtWarning().Base(err) + return errors.New("failed to listen Unix Domain Socket on ", w.address).AtWarning().Base(err) } w.hub = hub return nil } func (w *dsWorker) Close() error { - var errors []interface{} + var errs []interface{} if w.hub != nil { if err := common.Close(w.hub); err != nil { - errors = append(errors, err) + errs = append(errs, err) } if err := common.Close(w.proxy); err != nil { - errors = append(errors, err) + errs = append(errs, err) } } - if len(errors) > 0 { - return newError("failed to close all resources").Base(newError(serial.Concat(errors...))) + if len(errs) > 0 { + return errors.New("failed to close all resources").Base(errors.New(serial.Concat(errs...))) } return nil diff --git a/xray-core/app/proxyman/outbound/errors.generated.go b/xray-core/app/proxyman/outbound/errors.generated.go deleted file mode 100644 index 0796682364..0000000000 --- a/xray-core/app/proxyman/outbound/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package outbound - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/app/proxyman/outbound/handler.go b/xray-core/app/proxyman/outbound/handler.go index 4262c76a5e..47d7d6bf10 100644 --- a/xray-core/app/proxyman/outbound/handler.go +++ b/xray-core/app/proxyman/outbound/handler.go @@ -3,9 +3,15 @@ package outbound import ( "context" "crypto/rand" - "errors" + goerrors "errors" + "io" + "math/big" + gonet "net" + "os" + "github.com/xtls/xray-core/app/proxyman" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/buf" "github.com/xtls/xray-core/common/mux" "github.com/xtls/xray-core/common/net" @@ -21,10 +27,6 @@ import ( "github.com/xtls/xray-core/transport/internet/stat" "github.com/xtls/xray-core/transport/internet/tls" "github.com/xtls/xray-core/transport/pipe" - "io" - "math/big" - gonet "net" - "os" ) func getStatCounter(v *core.Instance, tag string) (stats.Counter, stats.Counter) { @@ -87,11 +89,11 @@ func NewHandler(ctx context.Context, config *core.OutboundHandlerConfig) (outbou h.senderSettings = s mss, err := internet.ToMemoryStreamConfig(s.StreamSettings) if err != nil { - return nil, newError("failed to parse stream settings").Base(err).AtWarning() + return nil, errors.New("failed to parse stream settings").Base(err).AtWarning() } h.streamSettings = mss default: - return nil, newError("settings is not SenderConfig") + return nil, errors.New("settings is not SenderConfig") } } @@ -107,7 +109,7 @@ func NewHandler(ctx context.Context, config *core.OutboundHandlerConfig) (outbou proxyHandler, ok := rawProxyHandler.(proxy.Outbound) if !ok { - return nil, newError("not an outbound handler") + return nil, errors.New("not an outbound handler") } if h.senderSettings != nil && h.senderSettings.MultiplexSettings != nil { @@ -170,7 +172,7 @@ func (h *Handler) Tag() string { // Dispatch implements proxy.Outbound.Dispatch. func (h *Handler) Dispatch(ctx context.Context, link *transport.Link) { outbounds := session.OutboundsFromContext(ctx) - ob := outbounds[len(outbounds) - 1] + ob := outbounds[len(outbounds)-1] if ob.Target.Network == net.Network_UDP && ob.OriginalTarget.Address != nil && ob.OriginalTarget.Address != ob.Target.Address { link.Reader = &buf.EndpointOverrideReader{Reader: link.Reader, Dest: ob.Target.Address, OriginalDest: ob.OriginalTarget.Address} link.Writer = &buf.EndpointOverrideWriter{Writer: link.Writer, Dest: ob.Target.Address, OriginalDest: ob.OriginalTarget.Address} @@ -178,16 +180,16 @@ func (h *Handler) Dispatch(ctx context.Context, link *transport.Link) { if h.mux != nil { test := func(err error) { if err != nil { - err := newError("failed to process mux outbound traffic").Base(err) + err := errors.New("failed to process mux outbound traffic").Base(err) session.SubmitOutboundErrorToOriginator(ctx, err) - err.WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, err.Error()) common.Interrupt(link.Writer) } } if ob.Target.Network == net.Network_UDP && ob.Target.Port == 443 { switch h.udp443 { case "reject": - test(newError("XUDP rejected UDP/443 traffic").AtInfo()) + test(errors.New("XUDP rejected UDP/443 traffic").AtInfo()) return case "skip": goto out @@ -208,15 +210,15 @@ func (h *Handler) Dispatch(ctx context.Context, link *transport.Link) { out: err := h.proxy.Process(ctx, link, h) if err != nil { - if errors.Is(err, io.EOF) || errors.Is(err, io.ErrClosedPipe) || errors.Is(err, context.Canceled) { + if goerrors.Is(err, io.EOF) || goerrors.Is(err, io.ErrClosedPipe) || goerrors.Is(err, context.Canceled) { err = nil } } if err != nil { // Ensure outbound ray is properly closed. - err := newError("failed to process outbound traffic").Base(err) + err := errors.New("failed to process outbound traffic").Base(err) session.SubmitOutboundErrorToOriginator(ctx, err) - err.WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, err.Error()) common.Interrupt(link.Writer) } else { common.Close(link.Writer) @@ -243,11 +245,11 @@ func (h *Handler) Dial(ctx context.Context, dest net.Destination) (stat.Connecti tag := h.senderSettings.ProxySettings.Tag handler := h.outboundManager.GetHandler(tag) if handler != nil { - newError("proxying to ", tag, " for dest ", dest).AtDebug().WriteToLog(session.ExportIDToError(ctx)) + errors.LogDebug(ctx, "proxying to ", tag, " for dest ", dest) outbounds := session.OutboundsFromContext(ctx) ctx = session.ContextWithOutbounds(ctx, append(outbounds, &session.Outbound{ Target: dest, - Tag: tag, + Tag: tag, })) // add another outbound in session ctx opts := pipe.OptionsFromContext(ctx) uplinkReader, uplinkWriter := pipe.New(opts...) @@ -264,12 +266,12 @@ func (h *Handler) Dial(ctx context.Context, dest net.Destination) (stat.Connecti return h.getStatCouterConnection(conn), nil } - newError("failed to get outbound handler with tag: ", tag).AtWarning().WriteToLog(session.ExportIDToError(ctx)) + errors.LogWarning(ctx, "failed to get outbound handler with tag: ", tag) } if h.senderSettings.Via != nil { outbounds := session.OutboundsFromContext(ctx) - ob := outbounds[len(outbounds) - 1] + ob := outbounds[len(outbounds)-1] if h.senderSettings.ViaCidr == "" { ob.Gateway = h.senderSettings.Via.AsAddress() } else { //Get a random address. @@ -285,7 +287,7 @@ func (h *Handler) Dial(ctx context.Context, dest net.Destination) (stat.Connecti conn, err := internet.Dial(ctx, dest, h.streamSettings) conn = h.getStatCouterConnection(conn) outbounds := session.OutboundsFromContext(ctx) - ob := outbounds[len(outbounds) - 1] + ob := outbounds[len(outbounds)-1] ob.Conn = conn return conn, err } @@ -317,7 +319,6 @@ func (h *Handler) Close() error { return nil } - func ParseRandomIPv6(address net.Address, prefix string) net.Address { _, network, _ := gonet.ParseCIDR(address.IP().String() + "/" + prefix) diff --git a/xray-core/app/proxyman/outbound/outbound.go b/xray-core/app/proxyman/outbound/outbound.go index 40f329652c..f697801ac0 100644 --- a/xray-core/app/proxyman/outbound/outbound.go +++ b/xray-core/app/proxyman/outbound/outbound.go @@ -115,7 +115,7 @@ func (m *Manager) AddHandler(ctx context.Context, handler outbound.Handler) erro tag := handler.Tag() if len(tag) > 0 { if _, found := m.taggedHandler[tag]; found { - return newError("existing tag found: " + tag) + return errors.New("existing tag found: " + tag) } m.taggedHandler[tag] = handler } else { diff --git a/xray-core/app/proxyman/outbound/uot.go b/xray-core/app/proxyman/outbound/uot.go index f3c7426e68..659f65a114 100644 --- a/xray-core/app/proxyman/outbound/uot.go +++ b/xray-core/app/proxyman/outbound/uot.go @@ -5,6 +5,7 @@ import ( "os" "github.com/sagernet/sing/common/uot" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/transport/internet" "github.com/xtls/xray-core/transport/internet/stat" @@ -12,7 +13,7 @@ import ( func (h *Handler) getUoTConnection(ctx context.Context, dest net.Destination) (stat.Connection, error) { if dest.Address == nil { - return nil, newError("nil destination address") + return nil, errors.New("nil destination address") } if !dest.Address.Family().IsDomain() { return nil, os.ErrInvalid @@ -27,7 +28,7 @@ func (h *Handler) getUoTConnection(ctx context.Context, dest net.Destination) (s } packetConn, err := internet.ListenSystemPacket(ctx, &net.UDPAddr{IP: net.AnyIP.IP(), Port: 0}, h.streamSettings.SocketSettings) if err != nil { - return nil, newError("unable to listen socket").Base(err) + return nil, errors.New("unable to listen socket").Base(err) } conn := uot.NewServerConn(packetConn, uotVersion) return h.getStatCouterConnection(conn), nil diff --git a/xray-core/app/reverse/bridge.go b/xray-core/app/reverse/bridge.go index be0fdcd977..3e46cc6ca4 100644 --- a/xray-core/app/reverse/bridge.go +++ b/xray-core/app/reverse/bridge.go @@ -4,6 +4,7 @@ import ( "context" "time" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/mux" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/session" @@ -26,10 +27,10 @@ type Bridge struct { // NewBridge creates a new Bridge instance. func NewBridge(config *BridgeConfig, dispatcher routing.Dispatcher) (*Bridge, error) { if config.Tag == "" { - return nil, newError("bridge tag is empty") + return nil, errors.New("bridge tag is empty") } if config.Domain == "" { - return nil, newError("bridge domain is empty") + return nil, errors.New("bridge domain is empty") } b := &Bridge{ @@ -74,7 +75,7 @@ func (b *Bridge) monitor() error { if numWorker == 0 || numConnections/numWorker > 16 { worker, err := NewBridgeWorker(b.domain, b.tag, b.dispatcher) if err != nil { - newError("failed to create bridge worker").Base(err).AtWarning().WriteToLog() + errors.LogWarningInner(context.Background(), err, "failed to create bridge worker") return nil } b.workers = append(b.workers, worker) @@ -157,7 +158,7 @@ func (w *BridgeWorker) handleInternalConn(link *transport.Link) { for _, b := range mb { var ctl Control if err := proto.Unmarshal(b.Bytes(), &ctl); err != nil { - newError("failed to parse proto message").Base(err).WriteToLog() + errors.LogInfoInner(context.Background(), err, "failed to parse proto message") break } if ctl.State != w.state { diff --git a/xray-core/app/reverse/errors.generated.go b/xray-core/app/reverse/errors.generated.go deleted file mode 100644 index 5dc907a230..0000000000 --- a/xray-core/app/reverse/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package reverse - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/app/reverse/portal.go b/xray-core/app/reverse/portal.go index 456de550db..d57ac29a00 100644 --- a/xray-core/app/reverse/portal.go +++ b/xray-core/app/reverse/portal.go @@ -7,6 +7,7 @@ import ( "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/mux" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/session" @@ -27,11 +28,11 @@ type Portal struct { func NewPortal(config *PortalConfig, ohm outbound.Manager) (*Portal, error) { if config.Tag == "" { - return nil, newError("portal tag is empty") + return nil, errors.New("portal tag is empty") } if config.Domain == "" { - return nil, newError("portal domain is empty") + return nil, errors.New("portal domain is empty") } picker, err := NewStaticMuxPicker() @@ -63,20 +64,20 @@ func (p *Portal) Close() error { func (p *Portal) HandleConnection(ctx context.Context, link *transport.Link) error { outbounds := session.OutboundsFromContext(ctx) - ob := outbounds[len(outbounds) - 1] + ob := outbounds[len(outbounds)-1] if ob == nil { - return newError("outbound metadata not found").AtError() + return errors.New("outbound metadata not found").AtError() } if isDomain(ob.Target, p.domain) { muxClient, err := mux.NewClientWorker(*link, mux.ClientStrategy{}) if err != nil { - return newError("failed to create mux client worker").Base(err).AtWarning() + return errors.New("failed to create mux client worker").Base(err).AtWarning() } worker, err := NewPortalWorker(muxClient) if err != nil { - return newError("failed to create portal worker").Base(err) + return errors.New("failed to create portal worker").Base(err) } p.picker.AddWorker(worker) @@ -97,7 +98,7 @@ func (o *Outbound) Tag() string { func (o *Outbound) Dispatch(ctx context.Context, link *transport.Link) { if err := o.portal.HandleConnection(ctx, link); err != nil { - newError("failed to process reverse connection").Base(err).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfoInner(ctx, err, "failed to process reverse connection") common.Interrupt(link.Writer) } } @@ -149,7 +150,7 @@ func (p *StaticMuxPicker) PickAvailable() (*mux.ClientWorker, error) { defer p.access.Unlock() if len(p.workers) == 0 { - return nil, newError("empty worker list") + return nil, errors.New("empty worker list") } var minIdx int = -1 @@ -183,7 +184,7 @@ func (p *StaticMuxPicker) PickAvailable() (*mux.ClientWorker, error) { return p.workers[minIdx].client, nil } - return nil, newError("no mux client worker available") + return nil, errors.New("no mux client worker available") } func (p *StaticMuxPicker) AddWorker(worker *PortalWorker) { @@ -216,7 +217,7 @@ func NewPortalWorker(client *mux.ClientWorker) (*PortalWorker, error) { Writer: downlinkWriter, }) if !f { - return nil, newError("unable to dispatch control connection") + return nil, errors.New("unable to dispatch control connection") } w := &PortalWorker{ client: client, @@ -233,11 +234,11 @@ func NewPortalWorker(client *mux.ClientWorker) (*PortalWorker, error) { func (w *PortalWorker) heartbeat() error { if w.client.Closed() { - return newError("client worker stopped") + return errors.New("client worker stopped") } if w.draining || w.writer == nil { - return newError("already disposed") + return errors.New("already disposed") } msg := &Control{} diff --git a/xray-core/app/router/balancing.go b/xray-core/app/router/balancing.go index c2eefe840c..14f8e21f57 100644 --- a/xray-core/app/router/balancing.go +++ b/xray-core/app/router/balancing.go @@ -6,6 +6,7 @@ import ( "github.com/xtls/xray-core/app/observatory" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/core" "github.com/xtls/xray-core/features/extension" "github.com/xtls/xray-core/features/outbound" @@ -24,8 +25,8 @@ type RoundRobinStrategy struct { ctx context.Context observatory extension.Observatory - mu sync.Mutex - index int + mu sync.Mutex + index int } func (s *RoundRobinStrategy) InjectContext(ctx context.Context) { @@ -95,7 +96,7 @@ func (b *Balancer) PickOutbound() (string, error) { candidates, err := b.SelectOutbounds() if err != nil { if b.fallbackTag != "" { - newError("fallback to [", b.fallbackTag, "], due to error: ", err).AtInfo().WriteToLog() + errors.LogInfo(context.Background(), "fallback to [", b.fallbackTag, "], due to error: ", err) return b.fallbackTag, nil } return "", err @@ -108,11 +109,11 @@ func (b *Balancer) PickOutbound() (string, error) { } if tag == "" { if b.fallbackTag != "" { - newError("fallback to [", b.fallbackTag, "], due to empty tag returned").AtInfo().WriteToLog() + errors.LogInfo(context.Background(), "fallback to [", b.fallbackTag, "], due to empty tag returned") return b.fallbackTag, nil } // will use default handler - return "", newError("balancing strategy returns empty tag") + return "", errors.New("balancing strategy returns empty tag") } return tag, nil } @@ -127,7 +128,7 @@ func (b *Balancer) InjectContext(ctx context.Context) { func (b *Balancer) SelectOutbounds() ([]string, error) { hs, ok := b.ohm.(outbound.HandlerSelector) if !ok { - return nil, newError("outbound.Manager is not a HandlerSelector") + return nil, errors.New("outbound.Manager is not a HandlerSelector") } tags := hs.Select(b.selectors) return tags, nil @@ -139,13 +140,13 @@ func (r *Router) GetPrincipleTarget(tag string) ([]string, error) { if s, ok := b.strategy.(BalancingPrincipleTarget); ok { candidates, err := b.SelectOutbounds() if err != nil { - return nil, newError("unable to select outbounds").Base(err) + return nil, errors.New("unable to select outbounds").Base(err) } return s.GetPrincipleTarget(candidates), nil } - return nil, newError("unsupported GetPrincipleTarget") + return nil, errors.New("unsupported GetPrincipleTarget") } - return nil, newError("cannot find tag") + return nil, errors.New("cannot find tag") } // SetOverrideTarget implements routing.BalancerOverrider @@ -154,7 +155,7 @@ func (r *Router) SetOverrideTarget(tag, target string) error { b.override.Put(target) return nil } - return newError("cannot find tag") + return errors.New("cannot find tag") } // GetOverrideTarget implements routing.BalancerOverrider @@ -162,5 +163,5 @@ func (r *Router) GetOverrideTarget(tag string) (string, error) { if b, ok := r.balancers[tag]; ok { return b.override.Get(), nil } - return "", newError("cannot find tag") + return "", errors.New("cannot find tag") } diff --git a/xray-core/app/router/balancing_override.go b/xray-core/app/router/balancing_override.go index 30769f6bae..96c0aea169 100644 --- a/xray-core/app/router/balancing_override.go +++ b/xray-core/app/router/balancing_override.go @@ -2,6 +2,8 @@ package router import ( sync "sync" + + "github.com/xtls/xray-core/common/errors" ) func (r *Router) OverrideBalancer(balancer string, target string) error { @@ -13,7 +15,7 @@ func (r *Router) OverrideBalancer(balancer string, target string) error { } } if b == nil { - return newError("balancer '", balancer, "' not found") + return errors.New("balancer '", balancer, "' not found") } b.override.Put(target) return nil diff --git a/xray-core/app/router/command/command.go b/xray-core/app/router/command/command.go index 520b9a302d..515e2614ec 100644 --- a/xray-core/app/router/command/command.go +++ b/xray-core/app/router/command/command.go @@ -7,6 +7,7 @@ import ( "time" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/core" "github.com/xtls/xray-core/features/routing" "github.com/xtls/xray-core/features/stats" @@ -38,7 +39,7 @@ func (s *routingServer) GetBalancerInfo(ctx context.Context, request *GetBalance { res, err := pt.GetPrincipleTarget(request.GetTag()) if err != nil { - newError("unable to obtain principle target").Base(err).AtInfo().WriteToLog() + errors.LogInfoInner(ctx, err, "unable to obtain principle target") } else { ret.Balancer.PrincipleTarget = &PrincipleTargetInfo{Tag: res} } @@ -51,21 +52,21 @@ func (s *routingServer) OverrideBalancerTarget(ctx context.Context, request *Ove if bo, ok := s.router.(routing.BalancerOverrider); ok { return &OverrideBalancerTargetResponse{}, bo.SetOverrideTarget(request.BalancerTag, request.Target) } - return nil, newError("unsupported router implementation") + return nil, errors.New("unsupported router implementation") } func (s *routingServer) AddRule(ctx context.Context, request *AddRuleRequest) (*AddRuleResponse, error) { if bo, ok := s.router.(routing.Router); ok { return &AddRuleResponse{}, bo.AddRule(request.Config, request.ShouldAppend) } - return nil, newError("unsupported router implementation") + return nil, errors.New("unsupported router implementation") } func (s *routingServer) RemoveRule(ctx context.Context, request *RemoveRuleRequest) (*RemoveRuleResponse, error) { if bo, ok := s.router.(routing.Router); ok { return &RemoveRuleResponse{}, bo.RemoveRule(request.RuleTag) } - return nil, newError("unsupported router implementation") + return nil, errors.New("unsupported router implementation") } // NewRoutingServer creates a statistics service with statistics manager. @@ -78,7 +79,7 @@ func NewRoutingServer(router routing.Router, routingStats stats.Channel) Routing func (s *routingServer) TestRoute(ctx context.Context, request *TestRouteRequest) (*RoutingContext, error) { if request.RoutingContext == nil { - return nil, newError("Invalid routing request.") + return nil, errors.New("Invalid routing request.") } route, err := s.router.PickRoute(AsRoutingContext(request.RoutingContext)) if err != nil { @@ -93,7 +94,7 @@ func (s *routingServer) TestRoute(ctx context.Context, request *TestRouteRequest func (s *routingServer) SubscribeRoutingStats(request *SubscribeRoutingStatsRequest, stream RoutingService_SubscribeRoutingStatsServer) error { if s.routingStats == nil { - return newError("Routing statistics not enabled.") + return errors.New("Routing statistics not enabled.") } genMessage := AsProtobufMessage(request.FieldSelectors) subscriber, err := stats.SubscribeRunnableChannel(s.routingStats) @@ -105,11 +106,11 @@ func (s *routingServer) SubscribeRoutingStats(request *SubscribeRoutingStatsRequ select { case value, ok := <-subscriber: if !ok { - return newError("Upstream closed the subscriber channel.") + return errors.New("Upstream closed the subscriber channel.") } route, ok := value.(routing.Route) if !ok { - return newError("Upstream sent malformed statistics.") + return errors.New("Upstream sent malformed statistics.") } err := stream.Send(genMessage(route)) if err != nil { diff --git a/xray-core/app/router/command/errors.generated.go b/xray-core/app/router/command/errors.generated.go deleted file mode 100644 index a13059329d..0000000000 --- a/xray-core/app/router/command/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package command - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/app/router/condition.go b/xray-core/app/router/condition.go index 29056555e2..d53530e09a 100644 --- a/xray-core/app/router/condition.go +++ b/xray-core/app/router/condition.go @@ -4,6 +4,7 @@ import ( "regexp" "strings" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/strmatcher" "github.com/xtls/xray-core/features/routing" @@ -49,12 +50,12 @@ var matcherTypeMap = map[Domain_Type]strmatcher.Type{ func domainToMatcher(domain *Domain) (strmatcher.Matcher, error) { matcherType, f := matcherTypeMap[domain.Type] if !f { - return nil, newError("unsupported domain type", domain.Type) + return nil, errors.New("unsupported domain type", domain.Type) } matcher, err := matcherType.New(domain.Value) if err != nil { - return nil, newError("failed to create domain matcher").Base(err) + return nil, errors.New("failed to create domain matcher").Base(err) } return matcher, nil @@ -69,7 +70,7 @@ func NewMphMatcherGroup(domains []*Domain) (*DomainMatcher, error) { for _, d := range domains { matcherType, f := matcherTypeMap[d.Type] if !f { - return nil, newError("unsupported domain type", d.Type) + return nil, errors.New("unsupported domain type", d.Type) } _, err := g.AddPattern(d.Value, matcherType) if err != nil { diff --git a/xray-core/app/router/config.go b/xray-core/app/router/config.go index e7c2af679f..f2bad88f3f 100644 --- a/xray-core/app/router/config.go +++ b/xray-core/app/router/config.go @@ -1,9 +1,11 @@ package router import ( + "context" "regexp" "strings" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/features/outbound" "github.com/xtls/xray-core/features/routing" @@ -36,7 +38,7 @@ func (rr *RoutingRule) BuildCondition() (Condition, error) { case "linear": matcher, err := NewDomainMatcher(rr.Domain) if err != nil { - return nil, newError("failed to build domain condition").Base(err) + return nil, errors.New("failed to build domain condition").Base(err) } conds.Add(matcher) case "mph", "hybrid": @@ -44,9 +46,9 @@ func (rr *RoutingRule) BuildCondition() (Condition, error) { default: matcher, err := NewMphMatcherGroup(rr.Domain) if err != nil { - return nil, newError("failed to build domain condition with MphDomainMatcher").Base(err) + return nil, errors.New("failed to build domain condition with MphDomainMatcher").Base(err) } - newError("MphDomainMatcher is enabled for ", len(rr.Domain), " domain rule(s)").AtDebug().WriteToLog() + errors.LogDebug(context.Background(), "MphDomainMatcher is enabled for ", len(rr.Domain), " domain rule(s)") conds.Add(matcher) } } @@ -116,7 +118,7 @@ func (rr *RoutingRule) BuildCondition() (Condition, error) { } if conds.Len() == 0 { - return nil, newError("this rule has no effective fields").AtWarning() + return nil, errors.New("this rule has no effective fields").AtWarning() } return conds, nil @@ -146,7 +148,7 @@ func (br *BalancingRule) Build(ohm outbound.Manager, dispatcher routing.Dispatch } s, ok := i.(*StrategyLeastLoadConfig) if !ok { - return nil, newError("not a StrategyLeastLoadConfig").AtError() + return nil, errors.New("not a StrategyLeastLoadConfig").AtError() } leastLoadStrategy := NewLeastLoadStrategy(s) return &Balancer{ @@ -165,6 +167,6 @@ func (br *BalancingRule) Build(ohm outbound.Manager, dispatcher routing.Dispatch strategy: &RandomStrategy{FallbackTag: br.FallbackTag}, }, nil default: - return nil, newError("unrecognized balancer type") + return nil, errors.New("unrecognized balancer type") } } diff --git a/xray-core/app/router/errors.generated.go b/xray-core/app/router/errors.generated.go deleted file mode 100644 index 1e5d74baf7..0000000000 --- a/xray-core/app/router/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package router - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/app/router/router.go b/xray-core/app/router/router.go index a45a60168e..753ddfa8c9 100644 --- a/xray-core/app/router/router.go +++ b/xray-core/app/router/router.go @@ -7,6 +7,7 @@ import ( sync "sync" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/serial" "github.com/xtls/xray-core/core" "github.com/xtls/xray-core/features/dns" @@ -68,7 +69,7 @@ func (r *Router) Init(ctx context.Context, config *Config, d dns.Client, ohm out if len(btag) > 0 { brule, found := r.balancers[btag] if !found { - return newError("balancer ", btag, " not found") + return errors.New("balancer ", btag, " not found") } rr.Balancer = brule } @@ -101,7 +102,7 @@ func (r *Router) AddRule(config *serial.TypedMessage, shouldAppend bool) error { if c, ok := inst.(*Config); ok { return r.ReloadRules(c, shouldAppend) } - return newError("AddRule: config type error") + return errors.New("AddRule: config type error") } func (r *Router) ReloadRules(config *Config, shouldAppend bool) error { @@ -115,7 +116,7 @@ func (r *Router) ReloadRules(config *Config, shouldAppend bool) error { for _, rule := range config.BalancingRule { _, found := r.balancers[rule.Tag] if found { - return newError("duplicate balancer tag") + return errors.New("duplicate balancer tag") } balancer, err := rule.Build(r.ohm, r.dispatcher) if err != nil { @@ -127,7 +128,7 @@ func (r *Router) ReloadRules(config *Config, shouldAppend bool) error { for _, rule := range config.Rule { if r.RuleExists(rule.GetRuleTag()) { - return newError("duplicate ruleTag ", rule.GetRuleTag()) + return errors.New("duplicate ruleTag ", rule.GetRuleTag()) } cond, err := rule.BuildCondition() if err != nil { @@ -142,7 +143,7 @@ func (r *Router) ReloadRules(config *Config, shouldAppend bool) error { if len(btag) > 0 { brule, found := r.balancers[btag] if !found { - return newError("balancer ", btag, " not found") + return errors.New("balancer ", btag, " not found") } rr.Balancer = brule } @@ -178,7 +179,7 @@ func (r *Router) RemoveRule(tag string) error { r.rules = newRules return nil } - return newError("empty tag name!") + return errors.New("empty tag name!") } func (r *Router) pickRouteInternal(ctx routing.Context) (*Rule, routing.Context, error) { diff --git a/xray-core/app/router/strategy_leastload.go b/xray-core/app/router/strategy_leastload.go index e8eb5567de..bfdfd878fd 100644 --- a/xray-core/app/router/strategy_leastload.go +++ b/xray-core/app/router/strategy_leastload.go @@ -9,6 +9,7 @@ import ( "github.com/xtls/xray-core/app/observatory" "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/dice" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/core" "github.com/xtls/xray-core/features/extension" ) @@ -95,7 +96,7 @@ func (s *LeastLoadStrategy) pickOutbounds(candidates []string) []*node { // with 'balancer.fallbackTag', it means: selects qualified nodes or use the fallback. func (s *LeastLoadStrategy) selectLeastLoad(nodes []*node) []*node { if len(nodes) == 0 { - newError("least load: no qualified outbound").AtInfo().WriteToLog() + errors.LogInfo(s.ctx, "least load: no qualified outbound") return nil } expected := int(s.settings.Expected) @@ -123,7 +124,7 @@ func (s *LeastLoadStrategy) selectLeastLoad(nodes []*node) []*node { } // don't continue if find expected selects if count >= expected { - newError("applied baseline: ", baseline).AtDebug().WriteToLog() + errors.LogDebug(s.ctx, "applied baseline: ", baseline) break } } @@ -142,7 +143,7 @@ func (s *LeastLoadStrategy) getNodes(candidates []string, maxRTT time.Duration) } observeResult, err := s.observer.GetObservation(s.ctx) if err != nil { - newError("cannot get observation").Base(err).WriteToLog() + errors.LogInfoInner(s.ctx, err, "cannot get observation") return make([]*node, 0) } diff --git a/xray-core/app/router/strategy_leastping.go b/xray-core/app/router/strategy_leastping.go index 09ff845f57..28efe386cd 100644 --- a/xray-core/app/router/strategy_leastping.go +++ b/xray-core/app/router/strategy_leastping.go @@ -5,6 +5,7 @@ import ( "github.com/xtls/xray-core/app/observatory" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/core" "github.com/xtls/xray-core/features/extension" ) @@ -32,7 +33,7 @@ func (l *LeastPingStrategy) PickOutbound(strings []string) string { observeReport, err := l.observatory.GetObservation(l.ctx) if err != nil { - newError("cannot get observe report").Base(err).WriteToLog() + errors.LogInfoInner(l.ctx, err, "cannot get observe report") return "" } outboundsList := outboundList(strings) diff --git a/xray-core/app/router/weight.go b/xray-core/app/router/weight.go index c235740d9c..1bba645e28 100644 --- a/xray-core/app/router/weight.go +++ b/xray-core/app/router/weight.go @@ -1,10 +1,13 @@ package router import ( + "context" "regexp" "strconv" "strings" "sync" + + "github.com/xtls/xray-core/common/errors" ) type weightScaler func(value, weight float64) float64 @@ -64,7 +67,7 @@ func (s *WeightManager) findValue(tag string) float64 { } weight, err := strconv.ParseFloat(numStr, 64) if err != nil { - newError("unexpected error from ParseFloat: ", err).AtError().WriteToLog() + errors.LogError(context.Background(), "unexpected error from ParseFloat: ", err) return s.defaultWeight } return weight @@ -82,7 +85,7 @@ func (s *WeightManager) getMatch(tag, find string, isRegexp bool) string { } r, err := regexp.Compile(find) if err != nil { - newError("invalid regexp: ", find, "err: ", err).AtError().WriteToLog() + errors.LogError(context.Background(), "invalid regexp: ", find, "err: ", err) return "" } return r.FindString(tag) diff --git a/xray-core/app/stats/channel.go b/xray-core/app/stats/channel.go index 99f3890cff..b32850d36b 100644 --- a/xray-core/app/stats/channel.go +++ b/xray-core/app/stats/channel.go @@ -5,6 +5,7 @@ import ( "sync" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" ) // Channel is an implementation of stats.Channel. @@ -44,7 +45,7 @@ func (c *Channel) Subscribe() (chan interface{}, error) { c.access.Lock() defer c.access.Unlock() if c.subsLimit > 0 && len(c.subscribers) >= c.subsLimit { - return nil, newError("Number of subscribers has reached limit") + return nil, errors.New("Number of subscribers has reached limit") } subscriber := make(chan interface{}, c.bufferSize) c.subscribers = append(c.subscribers, subscriber) diff --git a/xray-core/app/stats/command/command.go b/xray-core/app/stats/command/command.go index 24dc3db69d..2c603ca2e7 100644 --- a/xray-core/app/stats/command/command.go +++ b/xray-core/app/stats/command/command.go @@ -9,6 +9,7 @@ import ( "github.com/xtls/xray-core/app/stats" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/strmatcher" "github.com/xtls/xray-core/core" feature_stats "github.com/xtls/xray-core/features/stats" @@ -31,7 +32,7 @@ func NewStatsServer(manager feature_stats.Manager) StatsServiceServer { func (s *statsServer) GetStats(ctx context.Context, request *GetStatsRequest) (*GetStatsResponse, error) { c := s.stats.GetCounter(request.Name) if c == nil { - return nil, newError(request.Name, " not found.") + return nil, errors.New(request.Name, " not found.") } var value int64 if request.Reset_ { @@ -57,7 +58,7 @@ func (s *statsServer) QueryStats(ctx context.Context, request *QueryStatsRequest manager, ok := s.stats.(*stats.Manager) if !ok { - return nil, newError("QueryStats only works its own stats.Manager.") + return nil, errors.New("QueryStats only works its own stats.Manager.") } manager.VisitCounters(func(name string, c feature_stats.Counter) bool { diff --git a/xray-core/app/stats/command/errors.generated.go b/xray-core/app/stats/command/errors.generated.go deleted file mode 100644 index a13059329d..0000000000 --- a/xray-core/app/stats/command/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package command - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/app/stats/errors.generated.go b/xray-core/app/stats/errors.generated.go deleted file mode 100644 index c64386f323..0000000000 --- a/xray-core/app/stats/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package stats - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/app/stats/stats.go b/xray-core/app/stats/stats.go index c82277c3cc..95d5ae9c5d 100644 --- a/xray-core/app/stats/stats.go +++ b/xray-core/app/stats/stats.go @@ -40,9 +40,9 @@ func (m *Manager) RegisterCounter(name string) (stats.Counter, error) { defer m.access.Unlock() if _, found := m.counters[name]; found { - return nil, newError("Counter ", name, " already registered.") + return nil, errors.New("Counter ", name, " already registered.") } - newError("create new counter ", name).AtDebug().WriteToLog() + errors.LogDebug(context.Background(), "create new counter ", name) c := new(Counter) m.counters[name] = c return c, nil @@ -54,7 +54,7 @@ func (m *Manager) UnregisterCounter(name string) error { defer m.access.Unlock() if _, found := m.counters[name]; found { - newError("remove counter ", name).AtDebug().WriteToLog() + errors.LogDebug(context.Background(), "remove counter ", name) delete(m.counters, name) } return nil @@ -89,9 +89,9 @@ func (m *Manager) RegisterChannel(name string) (stats.Channel, error) { defer m.access.Unlock() if _, found := m.channels[name]; found { - return nil, newError("Channel ", name, " already registered.") + return nil, errors.New("Channel ", name, " already registered.") } - newError("create new channel ", name).AtDebug().WriteToLog() + errors.LogDebug(context.Background(), "create new channel ", name) c := NewChannel(&ChannelConfig{BufferSize: 64, Blocking: false}) m.channels[name] = c if m.running { @@ -106,7 +106,7 @@ func (m *Manager) UnregisterChannel(name string) error { defer m.access.Unlock() if c, found := m.channels[name]; found { - newError("remove channel ", name).AtDebug().WriteToLog() + errors.LogDebug(context.Background(), "remove channel ", name) delete(m.channels, name) return c.Close() } @@ -148,7 +148,7 @@ func (m *Manager) Close() error { m.running = false errs := []error{} for name, channel := range m.channels { - newError("remove channel ", name).AtDebug().WriteToLog() + errors.LogDebug(context.Background(), "remove channel ", name) delete(m.channels, name) if err := channel.Close(); err != nil { errs = append(errs, err) diff --git a/xray-core/common/buf/buffer.go b/xray-core/common/buf/buffer.go index 82795b98c7..57105d67c1 100644 --- a/xray-core/common/buf/buffer.go +++ b/xray-core/common/buf/buffer.go @@ -4,6 +4,7 @@ import ( "io" "github.com/xtls/xray-core/common/bytespool" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" ) @@ -226,7 +227,7 @@ func (b *Buffer) Write(data []byte) (int, error) { // WriteByte writes a single byte into the buffer. func (b *Buffer) WriteByte(v byte) error { if b.IsFull() { - return newError("buffer full") + return errors.New("buffer full") } b.v[b.end] = v b.end++ @@ -286,7 +287,7 @@ func (b *Buffer) ReadFullFrom(reader io.Reader, size int32) (int64, error) { end := b.end + size if end > int32(len(b.v)) { v := end - return 0, newError("out of bound: ", v) + return 0, errors.New("out of bound: ", v) } n, err := io.ReadFull(reader, b.v[b.end:end]) b.end += int32(n) diff --git a/xray-core/common/buf/copy.go b/xray-core/common/buf/copy.go index 3096dc57c1..4cc3be881d 100644 --- a/xray-core/common/buf/copy.go +++ b/xray-core/common/buf/copy.go @@ -120,7 +120,7 @@ func Copy(reader Reader, writer Writer, options ...CopyOption) error { return nil } -var ErrNotTimeoutReader = newError("not a TimeoutReader") +var ErrNotTimeoutReader = errors.New("not a TimeoutReader") func CopyOnceTimeout(reader Reader, writer Writer, timeout time.Duration) error { timeoutReader, ok := reader.(TimeoutReader) diff --git a/xray-core/common/buf/copy_test.go b/xray-core/common/buf/copy_test.go index cb2f831b11..3c896801bf 100644 --- a/xray-core/common/buf/copy_test.go +++ b/xray-core/common/buf/copy_test.go @@ -27,7 +27,7 @@ func TestReadError(t *testing.T) { t.Error("expected to be ReadError, but not") } - if err.Error() != "error" { + if err.Error() != "common/buf_test: error" { t.Fatal("unexpected error message: ", err.Error()) } } @@ -48,7 +48,7 @@ func TestWriteError(t *testing.T) { t.Error("expected to be WriteError, but not") } - if err.Error() != "error" { + if err.Error() != "common/buf_test: error" { t.Fatal("unexpected error message: ", err.Error()) } } diff --git a/xray-core/common/buf/errors.generated.go b/xray-core/common/buf/errors.generated.go deleted file mode 100644 index 032c0701cc..0000000000 --- a/xray-core/common/buf/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package buf - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/common/buf/io.go b/xray-core/common/buf/io.go index f0b7689ce9..0974b4f361 100644 --- a/xray-core/common/buf/io.go +++ b/xray-core/common/buf/io.go @@ -1,12 +1,14 @@ package buf import ( + "context" "io" "net" "os" "syscall" "time" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/features/stats" "github.com/xtls/xray-core/transport/internet/stat" ) @@ -18,7 +20,7 @@ type Reader interface { } // ErrReadTimeout is an error that happens with IO timeout. -var ErrReadTimeout = newError("IO timeout") +var ErrReadTimeout = errors.New("IO timeout") // TimeoutReader is a reader that returns error if Read() operation takes longer than the given timeout. type TimeoutReader interface { @@ -74,7 +76,7 @@ func NewReader(reader io.Reader) Reader { if sc, ok := reader.(syscall.Conn); ok { rawConn, err := sc.SyscallConn() if err != nil { - newError("failed to get sysconn").Base(err).WriteToLog() + errors.LogInfoInner(context.Background(), err, "failed to get sysconn") } else { var counter stats.Counter diff --git a/xray-core/common/buf/reader.go b/xray-core/common/buf/reader.go index 3e35ad6293..c6c502741c 100644 --- a/xray-core/common/buf/reader.go +++ b/xray-core/common/buf/reader.go @@ -21,7 +21,7 @@ func readOneUDP(r io.Reader) (*Buffer, error) { } b.Release() - return nil, newError("Reader returns too many empty payloads.") + return nil, errors.New("Reader returns too many empty payloads.") } // ReadBuffer reads a Buffer from the given reader. diff --git a/xray-core/common/crypto/auth.go b/xray-core/common/crypto/auth.go index 0bc8e71d06..6259e2a767 100644 --- a/xray-core/common/crypto/auth.go +++ b/xray-core/common/crypto/auth.go @@ -8,6 +8,7 @@ import ( "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/buf" "github.com/xtls/xray-core/common/bytespool" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/protocol" ) @@ -63,7 +64,7 @@ type AEADAuthenticator struct { func (v *AEADAuthenticator) Open(dst, cipherText []byte) ([]byte, error) { iv := v.NonceGenerator() if len(iv) != v.AEAD.NonceSize() { - return nil, newError("invalid AEAD nonce size: ", len(iv)) + return nil, errors.New("invalid AEAD nonce size: ", len(iv)) } var additionalData []byte @@ -76,7 +77,7 @@ func (v *AEADAuthenticator) Open(dst, cipherText []byte) ([]byte, error) { func (v *AEADAuthenticator) Seal(dst, plainText []byte) ([]byte, error) { iv := v.NonceGenerator() if len(iv) != v.AEAD.NonceSize() { - return nil, newError("invalid AEAD nonce size: ", len(iv)) + return nil, errors.New("invalid AEAD nonce size: ", len(iv)) } var additionalData []byte @@ -131,7 +132,7 @@ func (r *AuthenticationReader) readSize() (uint16, uint16, error) { return size, padding, err } -var errSoft = newError("waiting for more data") +var errSoft = errors.New("waiting for more data") func (r *AuthenticationReader) readBuffer(size int32, padding int32) (*buf.Buffer, error) { b := buf.New() @@ -255,7 +256,7 @@ func (w *AuthenticationWriter) seal(b []byte) (*buf.Buffer, error) { sizeBytes := w.sizeParser.SizeBytes() totalSize := sizeBytes + encryptedSize + paddingSize if totalSize > buf.Size { - return nil, newError("size too large: ", totalSize) + return nil, errors.New("size too large: ", totalSize) } eb := buf.New() diff --git a/xray-core/common/crypto/errors.generated.go b/xray-core/common/crypto/errors.generated.go deleted file mode 100644 index 2d983f89af..0000000000 --- a/xray-core/common/crypto/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package crypto - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/common/ctx/context.go b/xray-core/common/ctx/context.go new file mode 100644 index 0000000000..94a57902d1 --- /dev/null +++ b/xray-core/common/ctx/context.go @@ -0,0 +1,25 @@ +package ctx + +import "context" + +type SessionKey int + +// ID of a session. +type ID uint32 + +const( + idSessionKey SessionKey = 0 +) + +// ContextWithID returns a new context with the given ID. +func ContextWithID(ctx context.Context, id ID) context.Context { + return context.WithValue(ctx, idSessionKey, id) +} + +// IDFromContext returns ID in this context, or 0 if not contained. +func IDFromContext(ctx context.Context) ID { + if id, ok := ctx.Value(idSessionKey).(ID); ok { + return id + } + return 0 +} diff --git a/xray-core/common/drain/drainer.go b/xray-core/common/drain/drainer.go index bb1ae68aaa..16ed1f23ce 100644 --- a/xray-core/common/drain/drainer.go +++ b/xray-core/common/drain/drainer.go @@ -4,6 +4,7 @@ import ( "io" "github.com/xtls/xray-core/common/dice" + "github.com/xtls/xray-core/common/errors" ) type BehaviorSeedLimitedDrainer struct { @@ -27,9 +28,9 @@ func (d *BehaviorSeedLimitedDrainer) Drain(reader io.Reader) error { if d.DrainSize > 0 { err := drainReadN(reader, d.DrainSize) if err == nil { - return newError("drained connection") + return errors.New("drained connection") } - return newError("unable to drain connection").Base(err) + return errors.New("unable to drain connection").Base(err) } return nil } @@ -44,7 +45,7 @@ func WithError(drainer Drainer, reader io.Reader, err error) error { if drainErr == nil { return err } - return newError(drainErr).Base(err) + return errors.New(drainErr).Base(err) } type NopDrainer struct{} diff --git a/xray-core/common/drain/errors.generated.go b/xray-core/common/drain/errors.generated.go deleted file mode 100644 index 1535361e94..0000000000 --- a/xray-core/common/drain/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package drain - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/common/errors.generated.go b/xray-core/common/errors.generated.go deleted file mode 100644 index 28b9a62552..0000000000 --- a/xray-core/common/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package common - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/common/errors/errorgen/main.go b/xray-core/common/errors/errorgen/main.go deleted file mode 100644 index 4532fd8d9b..0000000000 --- a/xray-core/common/errors/errorgen/main.go +++ /dev/null @@ -1,37 +0,0 @@ -package main - -import ( - "fmt" - "os" - "path/filepath" -) - -func main() { - pwd, err := os.Getwd() - if err != nil { - fmt.Println("can not get current working directory") - os.Exit(1) - } - pkg := filepath.Base(pwd) - if pkg == "xray-core" { - pkg = "core" - } - - file, err := os.OpenFile("errors.generated.go", os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0o644) - if err != nil { - fmt.Printf("Failed to generate errors.generated.go: %v", err) - os.Exit(1) - } - defer file.Close() - - fmt.Fprintf(file, `package %s - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} -`, pkg) -} diff --git a/xray-core/common/errors/errors.go b/xray-core/common/errors/errors.go index ef1dd6f963..1915144af1 100644 --- a/xray-core/common/errors/errors.go +++ b/xray-core/common/errors/errors.go @@ -2,9 +2,11 @@ package errors // import "github.com/xtls/xray-core/common/errors" import ( - "reflect" + "context" + "runtime" "strings" + c "github.com/xtls/xray-core/common/ctx" "github.com/xtls/xray-core/common/log" "github.com/xtls/xray-core/common/serial" ) @@ -22,29 +24,13 @@ type hasSeverity interface { // Error is an error object with underlying error. type Error struct { - pathObj interface{} prefix []interface{} message []interface{} + caller string inner error severity log.Severity } -func (err *Error) WithPathObj(obj interface{}) *Error { - err.pathObj = obj - return err -} - -func (err *Error) pkgPath() string { - if err.pathObj == nil { - return "" - } - path := reflect.TypeOf(err.pathObj).PkgPath() - if len(path) >= trim { - return path[trim:] - } - return path -} - // Error implements error.Error(). func (err *Error) Error() string { builder := strings.Builder{} @@ -54,9 +40,8 @@ func (err *Error) Error() string { builder.WriteString("] ") } - path := err.pkgPath() - if len(path) > 0 { - builder.WriteString(path) + if len(err.caller) > 0 { + builder.WriteString(err.caller) builder.WriteString(": ") } @@ -129,24 +114,6 @@ func (err *Error) String() string { return err.Error() } -// WriteToLog writes current error into log. -func (err *Error) WriteToLog(opts ...ExportOption) { - var holder ExportOptionHolder - - for _, opt := range opts { - opt(&holder) - } - - if holder.SessionID > 0 { - err.prefix = append(err.prefix, holder.SessionID) - } - - log.Record(&log.GeneralMessage{ - Severity: GetSeverity(err), - Content: err, - }) -} - type ExportOptionHolder struct { SessionID uint32 } @@ -155,12 +122,82 @@ type ExportOption func(*ExportOptionHolder) // New returns a new error object with message formed from given arguments. func New(msg ...interface{}) *Error { + pc, _, _, _ := runtime.Caller(1) + details := runtime.FuncForPC(pc).Name() + if len(details) >= trim { + details = details[trim:] + } + i := strings.Index(details, ".") + if i > 0 { + details = details[:i] + } return &Error{ message: msg, severity: log.Severity_Info, + caller: details, } } +func LogDebug(ctx context.Context, msg ...interface{}) { + doLog(ctx, nil, log.Severity_Debug, msg...) +} + +func LogDebugInner(ctx context.Context, inner error, msg ...interface{}) { + doLog(ctx, inner, log.Severity_Debug, msg...) +} + +func LogInfo(ctx context.Context, msg ...interface{}) { + doLog(ctx, nil, log.Severity_Info, msg...) +} + +func LogInfoInner(ctx context.Context, inner error, msg ...interface{}) { + doLog(ctx, inner, log.Severity_Debug, msg...) +} + +func LogWarning(ctx context.Context, msg ...interface{}) { + doLog(ctx, nil, log.Severity_Warning, msg...) +} + +func LogWarningInner(ctx context.Context, inner error, msg ...interface{}) { + doLog(ctx, inner, log.Severity_Debug, msg...) +} + +func LogError(ctx context.Context, msg ...interface{}) { + doLog(ctx, nil, log.Severity_Error, msg...) +} + +func LogErrorInner(ctx context.Context, inner error, msg ...interface{}) { + doLog(ctx, inner, log.Severity_Debug, msg...) +} + +func doLog(ctx context.Context, inner error, severity log.Severity, msg ...interface{}) { + pc, _, _, _ := runtime.Caller(2) + details := runtime.FuncForPC(pc).Name() + if len(details) >= trim { + details = details[trim:] + } + i := strings.Index(details, ".") + if i > 0 { + details = details[:i] + } + err := &Error{ + message: msg, + severity: severity, + caller: details, + inner: inner, + } + if ctx != nil && ctx != context.Background() { + id := uint32(c.IDFromContext(ctx)) + if id > 0 { + err.prefix = append(err.prefix, id) + } + } + log.Record(&log.GeneralMessage{ + Severity: GetSeverity(err), + Content: err, + }) +} + // Cause returns the root cause of this error. func Cause(err error) error { if err == nil { diff --git a/xray-core/common/errors/errors_test.go b/xray-core/common/errors/errors_test.go index a38e87330a..3a1cb134f5 100644 --- a/xray-core/common/errors/errors_test.go +++ b/xray-core/common/errors/errors_test.go @@ -36,20 +36,14 @@ func TestError(t *testing.T) { } } -type e struct{} - func TestErrorMessage(t *testing.T) { data := []struct { err error msg string }{ { - err: New("a").Base(New("b")).WithPathObj(e{}), - msg: "common/errors_test: a > b", - }, - { - err: New("a").Base(New("b").WithPathObj(e{})), - msg: "a > common/errors_test: b", + err: New("a").Base(New("b")), + msg: "common/errors_test: a > common/errors_test: b", }, } diff --git a/xray-core/common/mux/client.go b/xray-core/common/mux/client.go index 2537f02b6d..1cbc530aec 100644 --- a/xray-core/common/mux/client.go +++ b/xray-core/common/mux/client.go @@ -37,7 +37,7 @@ func (m *ClientManager) Dispatch(ctx context.Context, link *transport.Link) erro } } - return newError("unable to find an available mux client").AtWarning() + return errors.New("unable to find an available mux client").AtWarning() } type WorkerPicker interface { @@ -57,7 +57,7 @@ func (p *IncrementalWorkerPicker) cleanupFunc() error { defer p.access.Unlock() if len(p.workers) == 0 { - return newError("no worker") + return errors.New("no worker") } p.cleanup() @@ -155,7 +155,7 @@ func (f *DialingWorkerFactory) Create() (*ClientWorker, error) { ctx, cancel := context.WithCancel(ctx) if err := p.Process(ctx, &transport.Link{Reader: uplinkReader, Writer: downlinkWriter}, d); err != nil { - errors.New("failed to handler mux client connection").Base(err).WriteToLog() + errors.LogInfoInner(ctx, err, "failed to handler mux client connection") } common.Must(c.Close()) cancel() @@ -244,7 +244,7 @@ func writeFirstPayload(reader buf.Reader, writer *Writer) error { func fetchInput(ctx context.Context, s *Session, output buf.Writer) { outbounds := session.OutboundsFromContext(ctx) - ob := outbounds[len(outbounds) - 1] + ob := outbounds[len(outbounds)-1] transferType := protocol.TransferTypeStream if ob.Target.Network == net.Network_UDP { transferType = protocol.TransferTypePacket @@ -254,15 +254,15 @@ func fetchInput(ctx context.Context, s *Session, output buf.Writer) { defer s.Close(false) defer writer.Close() - newError("dispatching request to ", ob.Target).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "dispatching request to ", ob.Target) if err := writeFirstPayload(s.input, writer); err != nil { - newError("failed to write first payload").Base(err).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfoInner(ctx, err, "failed to write first payload") writer.hasError = true return } if err := buf.Copy(s.input, writer); err != nil { - newError("failed to fetch all input").Base(err).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfoInner(ctx, err, "failed to fetch all input") writer.hasError = true return } @@ -335,7 +335,7 @@ func (m *ClientWorker) handleStatusKeep(meta *FrameMetadata, reader *buf.Buffere rr := s.NewReader(reader, &meta.Target) err := buf.Copy(rr, s.output) if err != nil && buf.IsWriteError(err) { - newError("failed to write to downstream. closing session ", s.ID).Base(err).WriteToLog() + errors.LogInfoInner(context.Background(), err, "failed to write to downstream. closing session ", s.ID) s.Close(false) return buf.Copy(rr, buf.Discard) } @@ -365,7 +365,7 @@ func (m *ClientWorker) fetchOutput() { err := meta.Unmarshal(reader) if err != nil { if errors.Cause(err) != io.EOF { - newError("failed to read metadata").Base(err).WriteToLog() + errors.LogInfoInner(context.Background(), err, "failed to read metadata") } break } @@ -381,12 +381,12 @@ func (m *ClientWorker) fetchOutput() { err = m.handleStatusKeep(&meta, reader) default: status := meta.SessionStatus - newError("unknown status: ", status).AtError().WriteToLog() + errors.LogError(context.Background(), "unknown status: ", status) return } if err != nil { - newError("failed to process data").Base(err).WriteToLog() + errors.LogInfoInner(context.Background(), err, "failed to process data") return } } diff --git a/xray-core/common/mux/errors.generated.go b/xray-core/common/mux/errors.generated.go deleted file mode 100644 index 9318ceac24..0000000000 --- a/xray-core/common/mux/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package mux - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/common/mux/frame.go b/xray-core/common/mux/frame.go index d53ac2020f..bdf5cc8cdd 100644 --- a/xray-core/common/mux/frame.go +++ b/xray-core/common/mux/frame.go @@ -7,6 +7,7 @@ import ( "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/bitmask" "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/protocol" "github.com/xtls/xray-core/common/serial" @@ -102,7 +103,7 @@ func (f *FrameMetadata) Unmarshal(reader io.Reader) error { return err } if metaLen > 512 { - return newError("invalid metalen ", metaLen).AtError() + return errors.New("invalid metalen ", metaLen).AtError() } b := buf.New() @@ -118,7 +119,7 @@ func (f *FrameMetadata) Unmarshal(reader io.Reader) error { // Visible for testing only. func (f *FrameMetadata) UnmarshalFromBuffer(b *buf.Buffer) error { if b.Len() < 4 { - return newError("insufficient buffer: ", b.Len()) + return errors.New("insufficient buffer: ", b.Len()) } f.SessionID = binary.BigEndian.Uint16(b.BytesTo(2)) @@ -129,14 +130,14 @@ func (f *FrameMetadata) UnmarshalFromBuffer(b *buf.Buffer) error { if f.SessionStatus == SessionStatusNew || (f.SessionStatus == SessionStatusKeep && b.Len() > 4 && TargetNetwork(b.Byte(4)) == TargetNetworkUDP) { // MUST check the flag first if b.Len() < 8 { - return newError("insufficient buffer: ", b.Len()) + return errors.New("insufficient buffer: ", b.Len()) } network := TargetNetwork(b.Byte(4)) b.Advance(5) addr, port, err := addrParser.ReadAddressPort(nil, b) if err != nil { - return newError("failed to parse address and port").Base(err) + return errors.New("failed to parse address and port").Base(err) } switch network { @@ -145,7 +146,7 @@ func (f *FrameMetadata) UnmarshalFromBuffer(b *buf.Buffer) error { case TargetNetworkUDP: f.Target = net.UDPDestination(addr, port) default: - return newError("unknown network type: ", network) + return errors.New("unknown network type: ", network) } } diff --git a/xray-core/common/mux/reader.go b/xray-core/common/mux/reader.go index 31c008c337..b9714cdf99 100644 --- a/xray-core/common/mux/reader.go +++ b/xray-core/common/mux/reader.go @@ -5,6 +5,7 @@ import ( "github.com/xtls/xray-core/common/buf" "github.com/xtls/xray-core/common/crypto" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/serial" ) @@ -37,7 +38,7 @@ func (r *PacketReader) ReadMultiBuffer() (buf.MultiBuffer, error) { } if size > buf.Size { - return nil, newError("packet size too large: ", size) + return nil, errors.New("packet size too large: ", size) } b := buf.New() diff --git a/xray-core/common/mux/server.go b/xray-core/common/mux/server.go index 2d33189fbd..5a4e9974d9 100644 --- a/xray-core/common/mux/server.go +++ b/xray-core/common/mux/server.go @@ -94,7 +94,7 @@ func NewServerWorker(ctx context.Context, d routing.Dispatcher, link *transport. func handle(ctx context.Context, s *Session, output buf.Writer) { writer := NewResponseWriter(s.ID, output, s.transferType) if err := buf.Copy(s.input, writer); err != nil { - newError("session ", s.ID, " ends.").Base(err).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfoInner(ctx, err, "session ", s.ID, " ends.") writer.hasError = true } @@ -118,7 +118,7 @@ func (w *ServerWorker) handleStatusKeepAlive(meta *FrameMetadata, reader *buf.Bu } func (w *ServerWorker) handleStatusNew(ctx context.Context, meta *FrameMetadata, reader *buf.BufferedReader) error { - newError("received request for ", meta.Target).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "received request for ", meta.Target) { msg := &log.AccessMessage{ To: meta.Target, @@ -134,7 +134,7 @@ func (w *ServerWorker) handleStatusNew(ctx context.Context, meta *FrameMetadata, if network := session.AllowedNetworkFromContext(ctx); network != net.Network_Unknown { if meta.Target.Network != network { - return newError("unexpected network ", meta.Target.Network) // it will break the whole Mux connection + return errors.New("unexpected network ", meta.Target.Network) // it will break the whole Mux connection } } @@ -152,7 +152,7 @@ func (w *ServerWorker) handleStatusNew(ctx context.Context, meta *FrameMetadata, } else { if x.Status == Initializing { // nearly impossible XUDPManager.Unlock() - newError("XUDP hit ", meta.GlobalID).Base(errors.New("conflict")).AtWarning().WriteToLog(session.ExportIDToError(ctx)) + errors.LogWarningInner(ctx, errors.New("conflict"), "XUDP hit ", meta.GlobalID) // It's not a good idea to return an err here, so just let client wait. // Client will receive an End frame after sending a Keep frame. return nil @@ -170,7 +170,7 @@ func (w *ServerWorker) handleStatusNew(ctx context.Context, meta *FrameMetadata, b.Release() mb = nil } - newError("XUDP hit ", meta.GlobalID).Base(err).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfoInner(ctx, err,"XUDP hit ", meta.GlobalID) } if mb != nil { ctx = session.ContextWithTimeoutOnly(ctx, true) @@ -180,7 +180,7 @@ func (w *ServerWorker) handleStatusNew(ctx context.Context, meta *FrameMetadata, XUDPManager.Lock() delete(XUDPManager.Map, x.GlobalID) XUDPManager.Unlock() - err = newError("XUDP new ", meta.GlobalID).Base(errors.New("failed to dispatch request to ", meta.Target).Base(err)) + err = errors.New("XUDP new ", meta.GlobalID).Base(errors.New("failed to dispatch request to ", meta.Target).Base(err)) return err // it will break the whole Mux connection } link.Writer.WriteMultiBuffer(mb) // it's meaningless to test a new pipe @@ -188,7 +188,7 @@ func (w *ServerWorker) handleStatusNew(ctx context.Context, meta *FrameMetadata, input: link.Reader, output: link.Writer, } - newError("XUDP new ", meta.GlobalID).Base(err).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfoInner(ctx, err, "XUDP new ", meta.GlobalID) } x.Mux = &Session{ input: x.Mux.input, @@ -211,7 +211,7 @@ func (w *ServerWorker) handleStatusNew(ctx context.Context, meta *FrameMetadata, if meta.Option.Has(OptionData) { buf.Copy(NewStreamReader(reader), buf.Discard) } - return newError("failed to dispatch request.").Base(err) + return errors.New("failed to dispatch request.").Base(err) } s := &Session{ input: link.Reader, @@ -255,7 +255,7 @@ func (w *ServerWorker) handleStatusKeep(meta *FrameMetadata, reader *buf.Buffere err := buf.Copy(rr, s.output) if err != nil && buf.IsWriteError(err) { - newError("failed to write to downstream writer. closing session ", s.ID).Base(err).WriteToLog() + errors.LogInfoInner(context.Background(), err, "failed to write to downstream writer. closing session ", s.ID) s.Close(false) return buf.Copy(rr, buf.Discard) } @@ -277,7 +277,7 @@ func (w *ServerWorker) handleFrame(ctx context.Context, reader *buf.BufferedRead var meta FrameMetadata err := meta.Unmarshal(reader) if err != nil { - return newError("failed to read metadata").Base(err) + return errors.New("failed to read metadata").Base(err) } switch meta.SessionStatus { @@ -291,11 +291,11 @@ func (w *ServerWorker) handleFrame(ctx context.Context, reader *buf.BufferedRead err = w.handleStatusKeep(&meta, reader) default: status := meta.SessionStatus - return newError("unknown status: ", status).AtError() + return errors.New("unknown status: ", status).AtError() } if err != nil { - return newError("failed to process data").Base(err) + return errors.New("failed to process data").Base(err) } return nil } @@ -314,7 +314,7 @@ func (w *ServerWorker) run(ctx context.Context) { err := w.handleFrame(ctx, reader) if err != nil { if errors.Cause(err) != io.EOF { - newError("unexpected EOF").Base(err).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfoInner(ctx, err, "unexpected EOF") common.Interrupt(input) } return diff --git a/xray-core/common/mux/session.go b/xray-core/common/mux/session.go index 695974402d..5e4b69caad 100644 --- a/xray-core/common/mux/session.go +++ b/xray-core/common/mux/session.go @@ -1,6 +1,7 @@ package mux import ( + "context" "io" "runtime" "sync" @@ -8,6 +9,7 @@ import ( "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/protocol" "github.com/xtls/xray-core/transport/pipe" @@ -180,7 +182,7 @@ func (s *Session) Close(locked bool) error { if s.XUDP.Status == Active { s.XUDP.Expire = time.Now().Add(time.Minute) s.XUDP.Status = Expiring - newError("XUDP put ", s.XUDP.GlobalID).AtDebug().WriteToLog() + errors.LogDebug(context.Background(), "XUDP put ", s.XUDP.GlobalID) } XUDPManager.Unlock() } @@ -230,7 +232,7 @@ func init() { if x.Status == Expiring && now.After(x.Expire) { x.Interrupt() delete(XUDPManager.Map, id) - newError("XUDP del ", id).AtDebug().WriteToLog() + errors.LogDebug(context.Background(), "XUDP del ", id) } } XUDPManager.Unlock() diff --git a/xray-core/common/net/address.go b/xray-core/common/net/address.go index 9ba8c47340..a5f7c16082 100644 --- a/xray-core/common/net/address.go +++ b/xray-core/common/net/address.go @@ -2,8 +2,11 @@ package net import ( "bytes" + "context" "net" "strings" + + "github.com/xtls/xray-core/common/errors" ) var ( @@ -112,7 +115,7 @@ func IPAddress(ip []byte) Address { } return addr default: - newError("invalid IP format: ", ip).AtError().WriteToLog() + errors.LogError(context.Background(), "invalid IP format: ", ip) return nil } } diff --git a/xray-core/common/net/errors.generated.go b/xray-core/common/net/errors.generated.go deleted file mode 100644 index fb64eac507..0000000000 --- a/xray-core/common/net/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package net - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/common/net/port.go b/xray-core/common/net/port.go index 2a0bf63705..d4a6514c1d 100644 --- a/xray-core/common/net/port.go +++ b/xray-core/common/net/port.go @@ -3,6 +3,8 @@ package net import ( "encoding/binary" "strconv" + + "github.com/xtls/xray-core/common/errors" ) // Port represents a network port in TCP and UDP protocol. @@ -18,7 +20,7 @@ func PortFromBytes(port []byte) Port { // @error when the integer is not positive or larger then 65535 func PortFromInt(val uint32) (Port, error) { if val > 65535 { - return Port(0), newError("invalid port range: ", val) + return Port(0), errors.New("invalid port range: ", val) } return Port(val), nil } @@ -28,7 +30,7 @@ func PortFromInt(val uint32) (Port, error) { func PortFromString(s string) (Port, error) { val, err := strconv.ParseUint(s, 10, 32) if err != nil { - return Port(0), newError("invalid port range: ", s) + return Port(0), errors.New("invalid port range: ", s) } return PortFromInt(uint32(val)) } diff --git a/xray-core/common/ocsp/errors.generated.go b/xray-core/common/ocsp/errors.generated.go deleted file mode 100644 index 4bdbc25c0a..0000000000 --- a/xray-core/common/ocsp/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package ocsp - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/common/ocsp/ocsp.go b/xray-core/common/ocsp/ocsp.go index b2c0bc58e2..d67670af53 100644 --- a/xray-core/common/ocsp/ocsp.go +++ b/xray-core/common/ocsp/ocsp.go @@ -8,6 +8,7 @@ import ( "net/http" "os" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/platform/filesystem" "golang.org/x/crypto/ocsp" ) @@ -63,26 +64,26 @@ func GetOCSPForCert(cert [][]byte) ([]byte, error) { } issuedCert := certificates[0] if len(issuedCert.OCSPServer) == 0 { - return nil, newError("no OCSP server specified in cert") + return nil, errors.New("no OCSP server specified in cert") } if len(certificates) == 1 { if len(issuedCert.IssuingCertificateURL) == 0 { - return nil, newError("no issuing certificate URL") + return nil, errors.New("no issuing certificate URL") } resp, errC := http.Get(issuedCert.IssuingCertificateURL[0]) if errC != nil { - return nil, newError("no issuing certificate URL") + return nil, errors.New("no issuing certificate URL") } defer resp.Body.Close() issuerBytes, errC := io.ReadAll(resp.Body) if errC != nil { - return nil, newError(errC) + return nil, errors.New(errC) } issuerCert, errC := x509.ParseCertificate(issuerBytes) if errC != nil { - return nil, newError(errC) + return nil, errors.New(errC) } certificates = append(certificates, issuerCert) @@ -96,12 +97,12 @@ func GetOCSPForCert(cert [][]byte) ([]byte, error) { reader := bytes.NewReader(ocspReq) req, err := http.Post(issuedCert.OCSPServer[0], "application/ocsp-request", reader) if err != nil { - return nil, newError(err) + return nil, errors.New(err) } defer req.Body.Close() ocspResBytes, err := io.ReadAll(req.Body) if err != nil { - return nil, newError(err) + return nil, errors.New(err) } return ocspResBytes, nil } @@ -128,7 +129,7 @@ func parsePEMBundle(bundle []byte) ([]*x509.Certificate, error) { } if len(certificates) == 0 { - return nil, newError("no certificates were found while parsing the bundle") + return nil, errors.New("no certificates were found while parsing the bundle") } return certificates, nil diff --git a/xray-core/common/platform/ctlcmd/ctlcmd.go b/xray-core/common/platform/ctlcmd/ctlcmd.go index ad9550fabc..a5c21872fe 100644 --- a/xray-core/common/platform/ctlcmd/ctlcmd.go +++ b/xray-core/common/platform/ctlcmd/ctlcmd.go @@ -1,12 +1,14 @@ package ctlcmd import ( + "context" "io" "os" "os/exec" "strings" "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/platform" ) @@ -15,7 +17,7 @@ import ( func Run(args []string, input io.Reader) (buf.MultiBuffer, error) { xctl := platform.GetToolLocation("xctl") if _, err := os.Stat(xctl); err != nil { - return nil, newError("xctl doesn't exist").Base(err) + return nil, errors.New("xctl doesn't exist").Base(err) } var errBuffer buf.MultiBufferContainer @@ -30,7 +32,7 @@ func Run(args []string, input io.Reader) (buf.MultiBuffer, error) { } if err := cmd.Start(); err != nil { - return nil, newError("failed to start xctl").Base(err) + return nil, errors.New("failed to start xctl").Base(err) } if err := cmd.Wait(); err != nil { @@ -38,12 +40,12 @@ func Run(args []string, input io.Reader) (buf.MultiBuffer, error) { if errBuffer.Len() > 0 { msg += ": \n" + strings.TrimSpace(errBuffer.MultiBuffer.String()) } - return nil, newError(msg).Base(err) + return nil, errors.New(msg).Base(err) } // log stderr, info message if !errBuffer.IsEmpty() { - newError(" \n", strings.TrimSpace(errBuffer.MultiBuffer.String())).AtInfo().WriteToLog() + errors.LogInfo(context.Background(), " \n", strings.TrimSpace(errBuffer.MultiBuffer.String())) } return outBuffer.MultiBuffer, nil diff --git a/xray-core/common/platform/ctlcmd/errors.generated.go b/xray-core/common/platform/ctlcmd/errors.generated.go deleted file mode 100644 index c861825c5b..0000000000 --- a/xray-core/common/platform/ctlcmd/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package ctlcmd - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/common/protocol/address.go b/xray-core/common/protocol/address.go index cf52a3803a..0dcb816517 100644 --- a/xray-core/common/protocol/address.go +++ b/xray-core/common/protocol/address.go @@ -5,6 +5,7 @@ import ( "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/serial" ) @@ -181,12 +182,12 @@ func (p *addressParser) readAddress(b *buf.Buffer, reader io.Reader) (net.Addres } if addrType >= 16 { - return nil, newError("unknown address type: ", addrType) + return nil, errors.New("unknown address type: ", addrType) } addrFamily := p.addrTypeMap[addrType] if addrFamily == net.AddressFamily(afInvalid) { - return nil, newError("unknown address type: ", addrType) + return nil, errors.New("unknown address type: ", addrType) } switch addrFamily { @@ -216,7 +217,7 @@ func (p *addressParser) readAddress(b *buf.Buffer, reader io.Reader) (net.Addres } } if !isValidDomain(domain) { - return nil, newError("invalid domain name: ", domain) + return nil, errors.New("invalid domain name: ", domain) } return net.DomainAddress(domain), nil default: @@ -227,7 +228,7 @@ func (p *addressParser) readAddress(b *buf.Buffer, reader io.Reader) (net.Addres func (p *addressParser) writeAddress(writer io.Writer, address net.Address) error { tb := p.addrByteMap[address.Family()] if tb == afInvalid { - return newError("unknown address family", address.Family()) + return errors.New("unknown address family", address.Family()) } switch address.Family() { @@ -241,7 +242,7 @@ func (p *addressParser) writeAddress(writer io.Writer, address net.Address) erro case net.AddressFamilyDomain: domain := address.Domain() if isDomainTooLong(domain) { - return newError("Super long domain is not supported: ", domain) + return errors.New("Super long domain is not supported: ", domain) } if _, err := writer.Write([]byte{tb, byte(len(domain))}); err != nil { diff --git a/xray-core/common/protocol/dns/errors.generated.go b/xray-core/common/protocol/dns/errors.generated.go deleted file mode 100644 index d7375a9b94..0000000000 --- a/xray-core/common/protocol/dns/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package dns - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/common/protocol/dns/io.go b/xray-core/common/protocol/dns/io.go index 0c215a702d..dd88b61d4e 100644 --- a/xray-core/common/protocol/dns/io.go +++ b/xray-core/common/protocol/dns/io.go @@ -6,6 +6,7 @@ import ( "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/serial" "golang.org/x/net/dns/dnsmessage" ) @@ -96,7 +97,7 @@ func (r *TCPReader) ReadMessage() (*buf.Buffer, error) { return nil, err } if size > buf.Size { - return nil, newError("message size too large: ", size) + return nil, errors.New("message size too large: ", size) } b := buf.New() if _, err := b.ReadFullFrom(r.reader, int32(size)); err != nil { diff --git a/xray-core/common/protocol/errors.generated.go b/xray-core/common/protocol/errors.generated.go deleted file mode 100644 index 694dd66770..0000000000 --- a/xray-core/common/protocol/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package protocol - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/common/protocol/tls/cert/cert.go b/xray-core/common/protocol/tls/cert/cert.go index cd8e56f5e5..5bd92a5c43 100644 --- a/xray-core/common/protocol/tls/cert/cert.go +++ b/xray-core/common/protocol/tls/cert/cert.go @@ -13,6 +13,7 @@ import ( "time" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" ) //go:generate go run github.com/xtls/xray-core/common/errors/errorgen @@ -27,11 +28,11 @@ type Certificate struct { func ParseCertificate(certPEM []byte, keyPEM []byte) (*Certificate, error) { certBlock, _ := pem.Decode(certPEM) if certBlock == nil { - return nil, newError("failed to decode certificate") + return nil, errors.New("failed to decode certificate") } keyBlock, _ := pem.Decode(keyPEM) if keyBlock == nil { - return nil, newError("failed to decode key") + return nil, errors.New("failed to decode key") } return &Certificate{ Certificate: certBlock.Bytes, @@ -116,7 +117,7 @@ func Generate(parent *Certificate, opts ...Option) (*Certificate, error) { // higher signing performance than RSA2048 selfKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) if err != nil { - return nil, newError("failed to generate self private key").Base(err) + return nil, errors.New("failed to generate self private key").Base(err) } parentKey = selfKey if parent != nil { @@ -128,7 +129,7 @@ func Generate(parent *Certificate, opts ...Option) (*Certificate, error) { pKey, err = x509.ParsePKCS1PrivateKey(parent.PrivateKey) } if err != nil { - return nil, newError("failed to parse parent private key").Base(err) + return nil, errors.New("failed to parse parent private key").Base(err) } parentKey = pKey } @@ -136,7 +137,7 @@ func Generate(parent *Certificate, opts ...Option) (*Certificate, error) { serialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128) serialNumber, err := rand.Int(rand.Reader, serialNumberLimit) if err != nil { - return nil, newError("failed to generate serial number").Base(err) + return nil, errors.New("failed to generate serial number").Base(err) } template := &x509.Certificate{ @@ -156,19 +157,19 @@ func Generate(parent *Certificate, opts ...Option) (*Certificate, error) { if parent != nil { pCert, err := x509.ParseCertificate(parent.Certificate) if err != nil { - return nil, newError("failed to parse parent certificate").Base(err) + return nil, errors.New("failed to parse parent certificate").Base(err) } parentCert = pCert } derBytes, err := x509.CreateCertificate(rand.Reader, template, parentCert, publicKey(selfKey), parentKey) if err != nil { - return nil, newError("failed to create certificate").Base(err) + return nil, errors.New("failed to create certificate").Base(err) } privateKey, err := x509.MarshalPKCS8PrivateKey(selfKey) if err != nil { - return nil, newError("Unable to marshal private key").Base(err) + return nil, errors.New("Unable to marshal private key").Base(err) } return &Certificate{ diff --git a/xray-core/common/protocol/tls/cert/cert_test.go b/xray-core/common/protocol/tls/cert/cert_test.go index f4bfe09065..e06e61d79e 100644 --- a/xray-core/common/protocol/tls/cert/cert_test.go +++ b/xray-core/common/protocol/tls/cert/cert_test.go @@ -10,6 +10,7 @@ import ( "time" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/task" ) @@ -41,7 +42,7 @@ func generate(domainNames []string, isCA bool, jsonOutput bool, fileOutput strin cert, err := Generate(nil, opts...) if err != nil { - return newError("failed to generate TLS certificate").Base(err) + return errors.New("failed to generate TLS certificate").Base(err) } if jsonOutput { diff --git a/xray-core/common/protocol/tls/cert/errors.generated.go b/xray-core/common/protocol/tls/cert/errors.generated.go deleted file mode 100644 index 6a4677f4da..0000000000 --- a/xray-core/common/protocol/tls/cert/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package cert - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/common/protocol/user.go b/xray-core/common/protocol/user.go index 8325f55518..d6e3a1310c 100644 --- a/xray-core/common/protocol/user.go +++ b/xray-core/common/protocol/user.go @@ -1,8 +1,10 @@ package protocol +import "github.com/xtls/xray-core/common/errors" + func (u *User) GetTypedAccount() (Account, error) { if u.GetAccount() == nil { - return nil, newError("Account missing").AtWarning() + return nil, errors.New("Account missing").AtWarning() } rawAccount, err := u.Account.GetInstance() @@ -15,7 +17,7 @@ func (u *User) GetTypedAccount() (Account, error) { if account, ok := rawAccount.(Account); ok { return account, nil } - return nil, newError("Unknown account type: ", u.Account.Type) + return nil, errors.New("Unknown account type: ", u.Account.Type) } func (u *User) ToMemoryUser() (*MemoryUser, error) { diff --git a/xray-core/common/retry/errors.generated.go b/xray-core/common/retry/errors.generated.go deleted file mode 100644 index d93432136f..0000000000 --- a/xray-core/common/retry/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package retry - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/common/retry/retry.go b/xray-core/common/retry/retry.go index ec1ad69618..346caf0c81 100644 --- a/xray-core/common/retry/retry.go +++ b/xray-core/common/retry/retry.go @@ -4,9 +4,11 @@ package retry // import "github.com/xtls/xray-core/common/retry" import ( "time" + + "github.com/xtls/xray-core/common/errors" ) -var ErrRetryFailed = newError("all retry attempts failed") +var ErrRetryFailed = errors.New("all retry attempts failed") // Strategy is a way to retry on a specific function. type Strategy interface { @@ -36,7 +38,7 @@ func (r *retryer) On(method func() error) error { time.Sleep(time.Duration(delay) * time.Millisecond) attempt++ } - return newError(accumulatedError).Base(ErrRetryFailed) + return errors.New(accumulatedError).Base(ErrRetryFailed) } // Timed returns a retry strategy with fixed interval. diff --git a/xray-core/common/session/context.go b/xray-core/common/session/context.go index fc37bd72e0..da3ad4a83a 100644 --- a/xray-core/common/session/context.go +++ b/xray-core/common/session/context.go @@ -4,6 +4,7 @@ import ( "context" _ "unsafe" + "github.com/xtls/xray-core/common/ctx" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/features/routing" ) @@ -11,35 +12,19 @@ import ( //go:linkname IndependentCancelCtx context.newCancelCtx func IndependentCancelCtx(parent context.Context) context.Context -type sessionKey int - const ( - idSessionKey sessionKey = iota - inboundSessionKey - outboundSessionKey - contentSessionKey - muxPreferedSessionKey - sockoptSessionKey - trackedConnectionErrorKey - dispatcherKey - timeoutOnlyKey - allowedNetworkKey - handlerSessionKey + inboundSessionKey ctx.SessionKey = 1 + outboundSessionKey ctx.SessionKey = 2 + contentSessionKey ctx.SessionKey = 3 + muxPreferedSessionKey ctx.SessionKey = 4 + sockoptSessionKey ctx.SessionKey = 5 + trackedConnectionErrorKey ctx.SessionKey = 6 + dispatcherKey ctx.SessionKey = 7 + timeoutOnlyKey ctx.SessionKey = 8 + allowedNetworkKey ctx.SessionKey = 9 + handlerSessionKey ctx.SessionKey = 10 ) -// ContextWithID returns a new context with the given ID. -func ContextWithID(ctx context.Context, id ID) context.Context { - return context.WithValue(ctx, idSessionKey, id) -} - -// IDFromContext returns ID in this context, or 0 if not contained. -func IDFromContext(ctx context.Context) ID { - if id, ok := ctx.Value(idSessionKey).(ID); ok { - return id - } - return 0 -} - func ContextWithInbound(ctx context.Context, inbound *Inbound) context.Context { return context.WithValue(ctx, inboundSessionKey, inbound) } diff --git a/xray-core/common/session/session.go b/xray-core/common/session/session.go index d8ab1ec423..c926a8834c 100644 --- a/xray-core/common/session/session.go +++ b/xray-core/common/session/session.go @@ -5,20 +5,18 @@ import ( "context" "math/rand" + c "github.com/xtls/xray-core/common/ctx" "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/protocol" "github.com/xtls/xray-core/common/signal" ) -// ID of a session. -type ID uint32 - // NewID generates a new ID. The generated ID is high likely to be unique, but not cryptographically secure. // The generated ID will never be 0. -func NewID() ID { +func NewID() c.ID { for { - id := ID(rand.Uint32()) + id := c.ID(rand.Uint32()) if id != 0 { return id } @@ -28,7 +26,7 @@ func NewID() ID { // ExportIDToError transfers session.ID into an error object, for logging purpose. // This can be used with error.WriteToLog(). func ExportIDToError(ctx context.Context) errors.ExportOption { - id := IDFromContext(ctx) + id := c.IDFromContext(ctx) return func(h *errors.ExportOptionHolder) { h.SessionID = uint32(id) } diff --git a/xray-core/common/singbridge/handler.go b/xray-core/common/singbridge/handler.go index 18d4ad71aa..f200075c2e 100644 --- a/xray-core/common/singbridge/handler.go +++ b/xray-core/common/singbridge/handler.go @@ -9,7 +9,6 @@ import ( "github.com/xtls/xray-core/common/buf" "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" - "github.com/xtls/xray-core/common/session" "github.com/xtls/xray-core/features/routing" "github.com/xtls/xray-core/transport" ) @@ -47,5 +46,5 @@ func (d *Dispatcher) NewPacketConnection(ctx context.Context, conn N.PacketConn, } func (d *Dispatcher) NewError(ctx context.Context, err error) { - d.newErrorFunc(err).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, err.Error()) } diff --git a/xray-core/common/singbridge/logger.go b/xray-core/common/singbridge/logger.go index c170236370..16ff29cc3c 100644 --- a/xray-core/common/singbridge/logger.go +++ b/xray-core/common/singbridge/logger.go @@ -5,7 +5,6 @@ import ( "github.com/sagernet/sing/common/logger" "github.com/xtls/xray-core/common/errors" - "github.com/xtls/xray-core/common/session" ) var _ logger.ContextLogger = (*XrayLogger)(nil) @@ -24,19 +23,19 @@ func (l *XrayLogger) Trace(args ...any) { } func (l *XrayLogger) Debug(args ...any) { - l.newError(args...).AtDebug().WriteToLog() + errors.LogDebug(context.Background(), args...) } func (l *XrayLogger) Info(args ...any) { - l.newError(args...).AtInfo().WriteToLog() + errors.LogInfo(context.Background(), args...) } func (l *XrayLogger) Warn(args ...any) { - l.newError(args...).AtWarning().WriteToLog() + errors.LogWarning(context.Background(), args...) } func (l *XrayLogger) Error(args ...any) { - l.newError(args...).AtError().WriteToLog() + errors.LogError(context.Background(), args...) } func (l *XrayLogger) Fatal(args ...any) { @@ -49,19 +48,19 @@ func (l *XrayLogger) TraceContext(ctx context.Context, args ...any) { } func (l *XrayLogger) DebugContext(ctx context.Context, args ...any) { - l.newError(args...).AtDebug().WriteToLog(session.ExportIDToError(ctx)) + errors.LogDebug(ctx, args...) } func (l *XrayLogger) InfoContext(ctx context.Context, args ...any) { - l.newError(args...).AtInfo().WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, args...) } func (l *XrayLogger) WarnContext(ctx context.Context, args ...any) { - l.newError(args...).AtWarning().WriteToLog(session.ExportIDToError(ctx)) + errors.LogWarning(ctx, args...) } func (l *XrayLogger) ErrorContext(ctx context.Context, args ...any) { - l.newError(args...).AtError().WriteToLog(session.ExportIDToError(ctx)) + errors.LogError(ctx, args...) } func (l *XrayLogger) FatalContext(ctx context.Context, args ...any) { diff --git a/xray-core/common/type.go b/xray-core/common/type.go index 1f85b4ef12..8ee8745c71 100644 --- a/xray-core/common/type.go +++ b/xray-core/common/type.go @@ -3,6 +3,8 @@ package common import ( "context" "reflect" + + "github.com/xtls/xray-core/common/errors" ) // ConfigCreator is a function to create an object by a config. @@ -14,7 +16,7 @@ var typeCreatorRegistry = make(map[reflect.Type]ConfigCreator) func RegisterConfig(config interface{}, configCreator ConfigCreator) error { configType := reflect.TypeOf(config) if _, found := typeCreatorRegistry[configType]; found { - return newError(configType.Name() + " is already registered").AtError() + return errors.New(configType.Name() + " is already registered").AtError() } typeCreatorRegistry[configType] = configCreator return nil @@ -25,7 +27,7 @@ func CreateObject(ctx context.Context, config interface{}) (interface{}, error) configType := reflect.TypeOf(config) creator, found := typeCreatorRegistry[configType] if !found { - return nil, newError(configType.String() + " is not registered").AtError() + return nil, errors.New(configType.String() + " is not registered").AtError() } return creator(ctx, config) } diff --git a/xray-core/common/xudp/errors.generated.go b/xray-core/common/xudp/errors.generated.go deleted file mode 100644 index e14625a870..0000000000 --- a/xray-core/common/xudp/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package xudp - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/common/xudp/xudp.go b/xray-core/common/xudp/xudp.go index 566ba7495e..1dfff16af0 100644 --- a/xray-core/common/xudp/xudp.go +++ b/xray-core/common/xudp/xudp.go @@ -11,6 +11,7 @@ import ( "time" "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/platform" "github.com/xtls/xray-core/common/protocol" @@ -36,7 +37,7 @@ func init() { } rand.Read(BaseKey) go func() { - time.Sleep(100 * time.Millisecond) // this is not nice, but need to give some time for Android to setup ENV + time.Sleep(100 * time.Millisecond) // this is not nice, but need to give some time for Android to setup ENV if raw := platform.NewEnvFlag(platform.XUDPBaseKey).GetValue(func() string { return "" }); raw != "" { if BaseKey, _ = base64.RawURLEncoding.DecodeString(raw); len(BaseKey) == 32 { return @@ -56,7 +57,7 @@ func GetGlobalID(ctx context.Context) (globalID [8]byte) { h.Write([]byte(inbound.Source.String())) copy(globalID[:], h.Sum(nil)) if Show { - newError(fmt.Sprintf("XUDP inbound.Source.String(): %v\tglobalID: %v\n", inbound.Source.String(), globalID)).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, fmt.Sprintf("XUDP inbound.Source.String(): %v\tglobalID: %v\n", inbound.Source.String(), globalID)) } } return diff --git a/xray-core/core/config.go b/xray-core/core/config.go index 1a5fa33f21..32fea49e3e 100644 --- a/xray-core/core/config.go +++ b/xray-core/core/config.go @@ -7,6 +7,7 @@ import ( "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/buf" "github.com/xtls/xray-core/common/cmdarg" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/main/confloader" "google.golang.org/protobuf/proto" ) @@ -38,14 +39,14 @@ var ( func RegisterConfigLoader(format *ConfigFormat) error { name := strings.ToLower(format.Name) if _, found := configLoaderByName[name]; found { - return newError(format.Name, " already registered.") + return errors.New(format.Name, " already registered.") } configLoaderByName[name] = format for _, ext := range format.Extension { lext := strings.ToLower(ext) if f, found := configLoaderByExt[lext]; found { - return newError(ext, " already registered to ", f.Name) + return errors.New(ext, " already registered to ", f.Name) } configLoaderByExt[lext] = format } @@ -116,7 +117,7 @@ func LoadConfig(formatName string, input interface{}) (*Config, error) { } if f == "" { - return nil, newError("Failed to get format of ", file).AtWarning() + return nil, errors.New("Failed to get format of ", file).AtWarning() } if f == "protobuf" { @@ -130,7 +131,7 @@ func LoadConfig(formatName string, input interface{}) (*Config, error) { if len(v) == 1 { return configLoaderByName["protobuf"].Loader(v) } else { - return nil, newError("Only one protobuf config file is allowed").AtWarning() + return nil, errors.New("Only one protobuf config file is allowed").AtWarning() } } @@ -141,11 +142,11 @@ func LoadConfig(formatName string, input interface{}) (*Config, error) { if f, found := configLoaderByName[formatName]; found { return f.Loader(v) } else { - return nil, newError("Unable to load config in", formatName).AtWarning() + return nil, errors.New("Unable to load config in", formatName).AtWarning() } } - return nil, newError("Unable to load config").AtWarning() + return nil, errors.New("Unable to load config").AtWarning() } func loadProtobufConfig(data []byte) (*Config, error) { @@ -173,7 +174,7 @@ func init() { common.Must(err) return loadProtobufConfig(data) default: - return nil, newError("unknow type") + return nil, errors.New("unknow type") } }, })) diff --git a/xray-core/core/errors.generated.go b/xray-core/core/errors.generated.go deleted file mode 100644 index 47636b9c70..0000000000 --- a/xray-core/core/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package core - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/core/functions.go b/xray-core/core/functions.go index 7885fd1478..09c4b5ddfe 100644 --- a/xray-core/core/functions.go +++ b/xray-core/core/functions.go @@ -5,6 +5,7 @@ import ( "context" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/net/cnc" "github.com/xtls/xray-core/features/routing" @@ -50,7 +51,7 @@ func Dial(ctx context.Context, v *Instance, dest net.Destination) (net.Conn, err dispatcher := v.GetFeature(routing.DispatcherType()) if dispatcher == nil { - return nil, newError("routing.Dispatcher is not registered in Xray core") + return nil, errors.New("routing.Dispatcher is not registered in Xray core") } r, err := dispatcher.(routing.Dispatcher).Dispatch(ctx, dest) @@ -77,7 +78,7 @@ func DialUDP(ctx context.Context, v *Instance) (net.PacketConn, error) { dispatcher := v.GetFeature(routing.DispatcherType()) if dispatcher == nil { - return nil, newError("routing.Dispatcher is not registered in Xray core") + return nil, errors.New("routing.Dispatcher is not registered in Xray core") } return udp.DialDispatcher(ctx, dispatcher.(routing.Dispatcher)) } diff --git a/xray-core/core/xray.go b/xray-core/core/xray.go index 20484c609d..a81cf19b92 100644 --- a/xray-core/core/xray.go +++ b/xray-core/core/xray.go @@ -6,6 +6,7 @@ import ( "sync" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/platform" "github.com/xtls/xray-core/common/serial" "github.com/xtls/xray-core/features" @@ -104,7 +105,7 @@ func AddInboundHandler(server *Instance, config *InboundHandlerConfig) error { } handler, ok := rawHandler.(inbound.Handler) if !ok { - return newError("not an InboundHandler") + return errors.New("not an InboundHandler") } if err := inboundManager.AddHandler(server.ctx, handler); err != nil { return err @@ -130,7 +131,7 @@ func AddOutboundHandler(server *Instance, config *OutboundHandlerConfig) error { } handler, ok := rawHandler.(outbound.Handler) if !ok { - return newError("not an OutboundHandler") + return errors.New("not an OutboundHandler") } if err := outboundManager.AddHandler(server.ctx, handler); err != nil { return err @@ -181,7 +182,7 @@ func NewWithContext(ctx context.Context, config *Config) (*Instance, error) { } func initInstanceWithConfig(config *Config, server *Instance) (bool, error) { - server.ctx = context.WithValue(server.ctx, "cone", + server.ctx = context.WithValue(server.ctx, "cone", platform.NewEnvFlag(platform.UseCone).GetValue(func() string { return "" }) != "true") if config.Transport != nil { @@ -234,7 +235,7 @@ func initInstanceWithConfig(config *Config, server *Instance) (bool, error) { ) if server.featureResolutions != nil { - return true, newError("not all dependency are resolved.") + return true, errors.New("not all dependency are resolved.") } if err := addInboundHandlers(server, config.Inbound); err != nil { @@ -259,14 +260,14 @@ func (s *Instance) Close() error { s.running = false - var errors []interface{} + var errs []interface{} for _, f := range s.features { if err := f.Close(); err != nil { - errors = append(errors, err) + errs = append(errs, err) } } - if len(errors) > 0 { - return newError("failed to close all features").Base(newError(serial.Concat(errors...))) + if len(errs) > 0 { + return errors.New("failed to close all features").Base(errors.New(serial.Concat(errs...))) } return nil @@ -302,7 +303,7 @@ func (s *Instance) AddFeature(feature features.Feature) error { if s.running { if err := feature.Start(); err != nil { - newError("failed to start feature").Base(err).WriteToLog() + errors.LogInfoInner(s.ctx, err, "failed to start feature") } return nil } @@ -350,7 +351,7 @@ func (s *Instance) Start() error { } } - newError("Xray ", Version(), " started").AtWarning().WriteToLog() + errors.LogWarning(s.ctx, "Xray ", Version(), " started") return nil } diff --git a/xray-core/features/dns/localdns/errors.generated.go b/xray-core/features/dns/localdns/errors.generated.go deleted file mode 100644 index a501d5e6e8..0000000000 --- a/xray-core/features/dns/localdns/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package localdns - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/features/errors.generated.go b/xray-core/features/errors.generated.go deleted file mode 100644 index ee8a5182fb..0000000000 --- a/xray-core/features/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package features - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/features/feature.go b/xray-core/features/feature.go index 1288a86b0c..7c7496229b 100644 --- a/xray-core/features/feature.go +++ b/xray-core/features/feature.go @@ -1,6 +1,11 @@ package features -import "github.com/xtls/xray-core/common" +import ( + "context" + + "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" +) //go:generate go run github.com/xtls/xray-core/common/errors/errorgen @@ -13,5 +18,5 @@ type Feature interface { // PrintDeprecatedFeatureWarning prints a warning for deprecated feature. func PrintDeprecatedFeatureWarning(feature string) { - newError("You are using a deprecated feature: " + feature + ". Please update your config file with latest configuration format, or update your client software.").WriteToLog() + errors.LogInfo(context.Background(), "You are using a deprecated feature: " + feature + ". Please update your config file with latest configuration format, or update your client software.") } diff --git a/xray-core/features/routing/dns/context.go b/xray-core/features/routing/dns/context.go index 7b7fe92823..4ad7d267db 100644 --- a/xray-core/features/routing/dns/context.go +++ b/xray-core/features/routing/dns/context.go @@ -3,6 +3,9 @@ package dns //go:generate go run github.com/xtls/xray-core/common/errors/errorgen import ( + "context" + + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/features/dns" "github.com/xtls/xray-core/features/routing" @@ -31,7 +34,7 @@ func (ctx *ResolvableContext) GetTargetIPs() []net.IP { ctx.resolvedIPs = ips return ips } - newError("resolve ip for ", domain).Base(err).WriteToLog() + errors.LogInfoInner(context.Background(), err, "resolve ip for ", domain) } if ips := ctx.Context.GetTargetIPs(); len(ips) != 0 { diff --git a/xray-core/features/routing/dns/errors.generated.go b/xray-core/features/routing/dns/errors.generated.go deleted file mode 100644 index d7375a9b94..0000000000 --- a/xray-core/features/routing/dns/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package dns - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/features/stats/errors.generated.go b/xray-core/features/stats/errors.generated.go deleted file mode 100644 index c64386f323..0000000000 --- a/xray-core/features/stats/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package stats - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/features/stats/stats.go b/xray-core/features/stats/stats.go index bf83df7828..a6c1f6beb8 100644 --- a/xray-core/features/stats/stats.go +++ b/xray-core/features/stats/stats.go @@ -6,6 +6,7 @@ import ( "context" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/features" ) @@ -116,7 +117,7 @@ func (NoopManager) Type() interface{} { // RegisterCounter implements Manager. func (NoopManager) RegisterCounter(string) (Counter, error) { - return nil, newError("not implemented") + return nil, errors.New("not implemented") } // UnregisterCounter implements Manager. @@ -131,7 +132,7 @@ func (NoopManager) GetCounter(string) Counter { // RegisterChannel implements Manager. func (NoopManager) RegisterChannel(string) (Channel, error) { - return nil, newError("not implemented") + return nil, errors.New("not implemented") } // UnregisterChannel implements Manager. diff --git a/xray-core/infra/conf/api.go b/xray-core/infra/conf/api.go index e7f3298017..dca34910b4 100644 --- a/xray-core/infra/conf/api.go +++ b/xray-core/infra/conf/api.go @@ -9,6 +9,7 @@ import ( handlerservice "github.com/xtls/xray-core/app/proxyman/command" routerservice "github.com/xtls/xray-core/app/router/command" statsservice "github.com/xtls/xray-core/app/stats/command" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/serial" ) @@ -20,7 +21,7 @@ type APIConfig struct { func (c *APIConfig) Build() (*commander.Config, error) { if c.Tag == "" { - return nil, newError("API tag can't be empty.") + return nil, errors.New("API tag can't be empty.") } services := make([]*serial.TypedMessage, 0, 16) diff --git a/xray-core/infra/conf/blackhole.go b/xray-core/infra/conf/blackhole.go index 5044a8c022..7b78742f71 100644 --- a/xray-core/infra/conf/blackhole.go +++ b/xray-core/infra/conf/blackhole.go @@ -3,6 +3,7 @@ package conf import ( "encoding/json" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/serial" "github.com/xtls/xray-core/proxy/blackhole" "google.golang.org/protobuf/proto" @@ -29,7 +30,7 @@ func (v *BlackholeConfig) Build() (proto.Message, error) { if v.Response != nil { response, _, err := configLoader.Load(v.Response) if err != nil { - return nil, newError("Config: Failed to parse Blackhole response config.").Base(err) + return nil, errors.New("Config: Failed to parse Blackhole response config.").Base(err) } responseSettings, err := response.(Buildable).Build() if err != nil { diff --git a/xray-core/infra/conf/common.go b/xray-core/infra/conf/common.go index 20868b83d2..9f9c006829 100644 --- a/xray-core/infra/conf/common.go +++ b/xray-core/infra/conf/common.go @@ -4,6 +4,7 @@ import ( "encoding/json" "strings" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/platform" "github.com/xtls/xray-core/common/protocol" @@ -33,7 +34,7 @@ func (v *StringList) UnmarshalJSON(data []byte) error { *v = *NewStringList(strlist) return nil } - return newError("unknown format of a string list: " + string(data)) + return errors.New("unknown format of a string list: " + string(data)) } type Address struct { @@ -43,7 +44,7 @@ type Address struct { func (v *Address) UnmarshalJSON(data []byte) error { var rawStr string if err := json.Unmarshal(data, &rawStr); err != nil { - return newError("invalid address: ", string(data)).Base(err) + return errors.New("invalid address: ", string(data)).Base(err) } if strings.HasPrefix(rawStr, "env:") { rawStr = platform.NewEnvFlag(rawStr[4:]).GetValue(func() string { return "" }) @@ -92,7 +93,7 @@ func (v *NetworkList) UnmarshalJSON(data []byte) error { *v = nl return nil } - return newError("unknown format of a string list: " + string(data)) + return errors.New("unknown format of a string list: " + string(data)) } func (v *NetworkList) Build() []net.Network { @@ -123,7 +124,7 @@ func parseStringPort(s string) (net.Port, net.Port, error) { pair := strings.SplitN(s, "-", 2) if len(pair) == 0 { - return net.Port(0), net.Port(0), newError("invalid port range: ", s) + return net.Port(0), net.Port(0), errors.New("invalid port range: ", s) } if len(pair) == 1 { port, err := net.PortFromString(pair[0]) @@ -176,12 +177,12 @@ func (v *PortRange) UnmarshalJSON(data []byte) error { v.From = uint32(from) v.To = uint32(to) if v.From > v.To { - return newError("invalid port range ", v.From, " -> ", v.To) + return errors.New("invalid port range ", v.From, " -> ", v.To) } return nil } - return newError("invalid port range: ", string(data)) + return errors.New("invalid port range: ", string(data)) } type PortList struct { @@ -202,7 +203,7 @@ func (list *PortList) UnmarshalJSON(data []byte) error { var number uint32 if err := json.Unmarshal(data, &listStr); err != nil { if err2 := json.Unmarshal(data, &number); err2 != nil { - return newError("invalid port: ", string(data)).Base(err2) + return errors.New("invalid port: ", string(data)).Base(err2) } } rangelist := strings.Split(listStr, ",") @@ -212,13 +213,13 @@ func (list *PortList) UnmarshalJSON(data []byte) error { if strings.Contains(trimmed, "-") || strings.Contains(trimmed, "env:") { from, to, err := parseStringPort(trimmed) if err != nil { - return newError("invalid port range: ", trimmed).Base(err) + return errors.New("invalid port range: ", trimmed).Base(err) } list.Range = append(list.Range, PortRange{From: uint32(from), To: uint32(to)}) } else { port, err := parseIntPort([]byte(trimmed)) if err != nil { - return newError("invalid port: ", trimmed).Base(err) + return errors.New("invalid port: ", trimmed).Base(err) } list.Range = append(list.Range, PortRange{From: uint32(port), To: uint32(port)}) } diff --git a/xray-core/infra/conf/dns.go b/xray-core/infra/conf/dns.go index a0f3155c92..d9ed9ab554 100644 --- a/xray-core/infra/conf/dns.go +++ b/xray-core/infra/conf/dns.go @@ -7,6 +7,7 @@ import ( "github.com/xtls/xray-core/app/dns" "github.com/xtls/xray-core/app/router" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" ) @@ -47,7 +48,7 @@ func (c *NameServerConfig) UnmarshalJSON(data []byte) error { return nil } - return newError("failed to parse name server: ", string(data)) + return errors.New("failed to parse name server: ", string(data)) } func toDomainMatchingType(t router.Domain_Type) dns.DomainMatchingType { @@ -67,7 +68,7 @@ func toDomainMatchingType(t router.Domain_Type) dns.DomainMatchingType { func (c *NameServerConfig) Build() (*dns.NameServer, error) { if c.Address == nil { - return nil, newError("NameServer address is not specified.") + return nil, errors.New("NameServer address is not specified.") } var domains []*dns.NameServer_PriorityDomain @@ -76,7 +77,7 @@ func (c *NameServerConfig) Build() (*dns.NameServer, error) { for _, rule := range c.Domains { parsedDomain, err := parseDomainRule(rule) if err != nil { - return nil, newError("invalid domain rule: ", rule).Base(err) + return nil, errors.New("invalid domain rule: ", rule).Base(err) } for _, pd := range parsedDomain { @@ -93,13 +94,13 @@ func (c *NameServerConfig) Build() (*dns.NameServer, error) { geoipList, err := ToCidrList(c.ExpectIPs) if err != nil { - return nil, newError("invalid IP rule: ", c.ExpectIPs).Base(err) + return nil, errors.New("invalid IP rule: ", c.ExpectIPs).Base(err) } var myClientIP []byte if c.ClientIP != nil { if !c.ClientIP.Family().IsIP() { - return nil, newError("not an IP address:", c.ClientIP.String()) + return nil, errors.New("not an IP address:", c.ClientIP.String()) } myClientIP = []byte(c.ClientIP.IP()) } @@ -153,7 +154,7 @@ func (h *HostAddress) UnmarshalJSON(data []byte) error { case json.Unmarshal(data, &addrs) == nil: h.addrs = addrs default: - return newError("invalid address") + return errors.New("invalid address") } return nil } @@ -196,7 +197,7 @@ func (m *HostsWrapper) UnmarshalJSON(data []byte) error { m.Hosts = hosts return nil } - return newError("invalid DNS hosts").Base(err) + return errors.New("invalid DNS hosts").Base(err) } // Build implements Buildable @@ -214,7 +215,7 @@ func (m *HostsWrapper) Build() ([]*dns.Config_HostMapping, error) { case strings.HasPrefix(domain, "domain:"): domainName := domain[7:] if len(domainName) == 0 { - return nil, newError("empty domain type of rule: ", domain) + return nil, errors.New("empty domain type of rule: ", domain) } mapping := getHostMapping(m.Hosts[domain]) mapping.Type = dns.DomainMatchingType_Subdomain @@ -224,11 +225,11 @@ func (m *HostsWrapper) Build() ([]*dns.Config_HostMapping, error) { case strings.HasPrefix(domain, "geosite:"): listName := domain[8:] if len(listName) == 0 { - return nil, newError("empty geosite rule: ", domain) + return nil, errors.New("empty geosite rule: ", domain) } geositeList, err := loadGeositeWithAttr("geosite.dat", listName) if err != nil { - return nil, newError("failed to load geosite: ", listName).Base(err) + return nil, errors.New("failed to load geosite: ", listName).Base(err) } for _, d := range geositeList { mapping := getHostMapping(m.Hosts[domain]) @@ -240,7 +241,7 @@ func (m *HostsWrapper) Build() ([]*dns.Config_HostMapping, error) { case strings.HasPrefix(domain, "regexp:"): regexpVal := domain[7:] if len(regexpVal) == 0 { - return nil, newError("empty regexp type of rule: ", domain) + return nil, errors.New("empty regexp type of rule: ", domain) } mapping := getHostMapping(m.Hosts[domain]) mapping.Type = dns.DomainMatchingType_Regex @@ -250,7 +251,7 @@ func (m *HostsWrapper) Build() ([]*dns.Config_HostMapping, error) { case strings.HasPrefix(domain, "keyword:"): keywordVal := domain[8:] if len(keywordVal) == 0 { - return nil, newError("empty keyword type of rule: ", domain) + return nil, errors.New("empty keyword type of rule: ", domain) } mapping := getHostMapping(m.Hosts[domain]) mapping.Type = dns.DomainMatchingType_Keyword @@ -260,7 +261,7 @@ func (m *HostsWrapper) Build() ([]*dns.Config_HostMapping, error) { case strings.HasPrefix(domain, "full:"): fullVal := domain[5:] if len(fullVal) == 0 { - return nil, newError("empty full domain type of rule: ", domain) + return nil, errors.New("empty full domain type of rule: ", domain) } mapping := getHostMapping(m.Hosts[domain]) mapping.Type = dns.DomainMatchingType_Full @@ -276,20 +277,20 @@ func (m *HostsWrapper) Build() ([]*dns.Config_HostMapping, error) { case !strings.Contains(substr, "."): mapping.Domain = "^[^.]*" + substr + "[^.]*$" default: - return nil, newError("substr in dotless rule should not contain a dot: ", substr) + return nil, errors.New("substr in dotless rule should not contain a dot: ", substr) } mappings = append(mappings, mapping) case strings.HasPrefix(domain, "ext:"): kv := strings.Split(domain[4:], ":") if len(kv) != 2 { - return nil, newError("invalid external resource: ", domain) + return nil, errors.New("invalid external resource: ", domain) } filename := kv[0] list := kv[1] geositeList, err := loadGeositeWithAttr(filename, list) if err != nil { - return nil, newError("failed to load domain list: ", list, " from ", filename).Base(err) + return nil, errors.New("failed to load domain list: ", list, " from ", filename).Base(err) } for _, d := range geositeList { mapping := getHostMapping(m.Hosts[domain]) @@ -320,7 +321,7 @@ func (c *DNSConfig) Build() (*dns.Config, error) { if c.ClientIP != nil { if !c.ClientIP.Family().IsIP() { - return nil, newError("not an IP address:", c.ClientIP.String()) + return nil, errors.New("not an IP address:", c.ClientIP.String()) } config.ClientIp = []byte(c.ClientIP.IP()) } @@ -328,7 +329,7 @@ func (c *DNSConfig) Build() (*dns.Config, error) { for _, server := range c.Servers { ns, err := server.Build() if err != nil { - return nil, newError("failed to build nameserver").Base(err) + return nil, errors.New("failed to build nameserver").Base(err) } config.NameServer = append(config.NameServer, ns) } @@ -336,7 +337,7 @@ func (c *DNSConfig) Build() (*dns.Config, error) { if c.Hosts != nil { staticHosts, err := c.Hosts.Build() if err != nil { - return nil, newError("failed to build hosts").Base(err) + return nil, errors.New("failed to build hosts").Base(err) } config.StaticHosts = append(config.StaticHosts, staticHosts...) } diff --git a/xray-core/infra/conf/dns_proxy.go b/xray-core/infra/conf/dns_proxy.go index 13a445972b..712f4b1f96 100644 --- a/xray-core/infra/conf/dns_proxy.go +++ b/xray-core/infra/conf/dns_proxy.go @@ -1,6 +1,7 @@ package conf import ( + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/proxy/dns" "google.golang.org/protobuf/proto" @@ -30,7 +31,7 @@ func (c *DNSOutboundConfig) Build() (proto.Message, error) { c.NonIPQuery = "drop" case "drop", "skip": default: - return nil, newError(`unknown "nonIPQuery": `, c.NonIPQuery) + return nil, errors.New(`unknown "nonIPQuery": `, c.NonIPQuery) } config.Non_IPQuery = c.NonIPQuery return config, nil diff --git a/xray-core/infra/conf/errors.generated.go b/xray-core/infra/conf/errors.generated.go deleted file mode 100644 index a80cc14050..0000000000 --- a/xray-core/infra/conf/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package conf - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/infra/conf/fakedns.go b/xray-core/infra/conf/fakedns.go index ca42545775..862403668c 100644 --- a/xray-core/infra/conf/fakedns.go +++ b/xray-core/infra/conf/fakedns.go @@ -1,10 +1,12 @@ package conf import ( + "context" "encoding/json" "strings" "github.com/xtls/xray-core/app/dns/fakedns" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/features/dns" ) @@ -28,7 +30,7 @@ func (f *FakeDNSConfig) UnmarshalJSON(data []byte) error { case json.Unmarshal(data, &pools) == nil: f.pools = pools default: - return newError("invalid fakedns config") + return errors.New("invalid fakedns config") } return nil } @@ -51,7 +53,7 @@ func (f *FakeDNSConfig) Build() (*fakedns.FakeDnsPoolMulti, error) { return &fakeDNSPool, nil } - return nil, newError("no valid FakeDNS config") + return nil, errors.New("no valid FakeDNS config") } type FakeDNSPostProcessingStage struct{} @@ -122,7 +124,7 @@ func (FakeDNSPostProcessingStage) Process(config *Config) error { } } if !found { - newError("Defined FakeDNS but haven't enabled FakeDNS destOverride at any inbound.").AtWarning().WriteToLog() + errors.LogWarning(context.Background(), "Defined FakeDNS but haven't enabled FakeDNS destOverride at any inbound.") } } diff --git a/xray-core/infra/conf/freedom.go b/xray-core/infra/conf/freedom.go index 90c99b37c1..d90b7c2d6e 100644 --- a/xray-core/infra/conf/freedom.go +++ b/xray-core/infra/conf/freedom.go @@ -5,6 +5,7 @@ import ( "strconv" "strings" + "github.com/xtls/xray-core/common/errors" v2net "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/protocol" "github.com/xtls/xray-core/proxy/freedom" @@ -53,7 +54,7 @@ func (c *FreedomConfig) Build() (proto.Message, error) { case "forceipv6v4": config.DomainStrategy = freedom.Config_FORCE_IP64 default: - return nil, newError("unsupported domain strategy: ", c.DomainStrategy) + return nil, errors.New("unsupported domain strategy: ", c.DomainStrategy) } if c.Fragment != nil { @@ -80,22 +81,22 @@ func (c *FreedomConfig) Build() (proto.Message, error) { config.Fragment.PacketsTo = config.Fragment.PacketsFrom } if err != nil { - return nil, newError("Invalid PacketsFrom").Base(err) + return nil, errors.New("Invalid PacketsFrom").Base(err) } if err2 != nil { - return nil, newError("Invalid PacketsTo").Base(err2) + return nil, errors.New("Invalid PacketsTo").Base(err2) } if config.Fragment.PacketsFrom > config.Fragment.PacketsTo { config.Fragment.PacketsFrom, config.Fragment.PacketsTo = config.Fragment.PacketsTo, config.Fragment.PacketsFrom } if config.Fragment.PacketsFrom == 0 { - return nil, newError("PacketsFrom can't be 0") + return nil, errors.New("PacketsFrom can't be 0") } } { if c.Fragment.Length == "" { - return nil, newError("Length can't be empty") + return nil, errors.New("Length can't be empty") } lengthMinMax := strings.Split(c.Fragment.Length, "-") if len(lengthMinMax) == 2 { @@ -106,22 +107,22 @@ func (c *FreedomConfig) Build() (proto.Message, error) { config.Fragment.LengthMax = config.Fragment.LengthMin } if err != nil { - return nil, newError("Invalid LengthMin").Base(err) + return nil, errors.New("Invalid LengthMin").Base(err) } if err2 != nil { - return nil, newError("Invalid LengthMax").Base(err2) + return nil, errors.New("Invalid LengthMax").Base(err2) } if config.Fragment.LengthMin > config.Fragment.LengthMax { config.Fragment.LengthMin, config.Fragment.LengthMax = config.Fragment.LengthMax, config.Fragment.LengthMin } if config.Fragment.LengthMin == 0 { - return nil, newError("LengthMin can't be 0") + return nil, errors.New("LengthMin can't be 0") } } { if c.Fragment.Interval == "" { - return nil, newError("Interval can't be empty") + return nil, errors.New("Interval can't be empty") } intervalMinMax := strings.Split(c.Fragment.Interval, "-") if len(intervalMinMax) == 2 { @@ -132,10 +133,10 @@ func (c *FreedomConfig) Build() (proto.Message, error) { config.Fragment.IntervalMax = config.Fragment.IntervalMin } if err != nil { - return nil, newError("Invalid IntervalMin").Base(err) + return nil, errors.New("Invalid IntervalMin").Base(err) } if err2 != nil { - return nil, newError("Invalid IntervalMax").Base(err2) + return nil, errors.New("Invalid IntervalMax").Base(err2) } if config.Fragment.IntervalMin > config.Fragment.IntervalMax { config.Fragment.IntervalMin, config.Fragment.IntervalMax = config.Fragment.IntervalMax, config.Fragment.IntervalMin @@ -150,11 +151,11 @@ func (c *FreedomConfig) Build() (proto.Message, error) { if len(c.Redirect) > 0 { host, portStr, err := net.SplitHostPort(c.Redirect) if err != nil { - return nil, newError("invalid redirect address: ", c.Redirect, ": ", err).Base(err) + return nil, errors.New("invalid redirect address: ", c.Redirect, ": ", err).Base(err) } port, err := v2net.PortFromString(portStr) if err != nil { - return nil, newError("invalid redirect port: ", c.Redirect, ": ", err).Base(err) + return nil, errors.New("invalid redirect port: ", c.Redirect, ": ", err).Base(err) } config.DestinationOverride = &freedom.DestinationOverride{ Server: &protocol.ServerEndpoint{ diff --git a/xray-core/infra/conf/http.go b/xray-core/infra/conf/http.go index b391dbf258..ef16cac791 100644 --- a/xray-core/infra/conf/http.go +++ b/xray-core/infra/conf/http.go @@ -3,6 +3,7 @@ package conf import ( "encoding/json" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/protocol" "github.com/xtls/xray-core/common/serial" "github.com/xtls/xray-core/proxy/http" @@ -67,11 +68,11 @@ func (v *HTTPClientConfig) Build() (proto.Message, error) { for _, rawUser := range serverConfig.Users { user := new(protocol.User) if err := json.Unmarshal(rawUser, user); err != nil { - return nil, newError("failed to parse HTTP user").Base(err).AtError() + return nil, errors.New("failed to parse HTTP user").Base(err).AtError() } account := new(HTTPAccount) if err := json.Unmarshal(rawUser, account); err != nil { - return nil, newError("failed to parse HTTP account").Base(err).AtError() + return nil, errors.New("failed to parse HTTP account").Base(err).AtError() } user.Account = serial.ToTypedMessage(account.Build()) server.User = append(server.User, user) diff --git a/xray-core/infra/conf/lint.go b/xray-core/infra/conf/lint.go index 93da35d407..f8a6b38c16 100644 --- a/xray-core/infra/conf/lint.go +++ b/xray-core/infra/conf/lint.go @@ -1,5 +1,7 @@ package conf +import "github.com/xtls/xray-core/common/errors" + type ConfigureFilePostProcessingStage interface { Process(conf *Config) error } @@ -16,7 +18,7 @@ func RegisterConfigureFilePostProcessingStage(name string, stage ConfigureFilePo func PostProcessConfigureFile(conf *Config) error { for k, v := range configureFilePostProcessingStages { if err := v.Process(conf); err != nil { - return newError("Rejected by Postprocessing Stage ", k).AtError().Base(err) + return errors.New("Rejected by Postprocessing Stage ", k).AtError().Base(err) } } return nil diff --git a/xray-core/infra/conf/loader.go b/xray-core/infra/conf/loader.go index 51f268a3e6..1dc2de23bf 100644 --- a/xray-core/infra/conf/loader.go +++ b/xray-core/infra/conf/loader.go @@ -3,6 +3,8 @@ package conf import ( "encoding/json" "strings" + + "github.com/xtls/xray-core/common/errors" ) type ConfigCreator func() interface{} @@ -11,7 +13,7 @@ type ConfigCreatorCache map[string]ConfigCreator func (v ConfigCreatorCache) RegisterCreator(id string, creator ConfigCreator) error { if _, found := v[id]; found { - return newError(id, " already registered.").AtError() + return errors.New(id, " already registered.").AtError() } v[id] = creator @@ -21,7 +23,7 @@ func (v ConfigCreatorCache) RegisterCreator(id string, creator ConfigCreator) er func (v ConfigCreatorCache) CreateConfig(id string) (interface{}, error) { creator, found := v[id] if !found { - return nil, newError("unknown config id: ", id) + return nil, errors.New("unknown config id: ", id) } return creator(), nil } @@ -59,7 +61,7 @@ func (v *JSONConfigLoader) Load(raw []byte) (interface{}, string, error) { } rawID, found := obj[v.idKey] if !found { - return nil, "", newError(v.idKey, " not found in JSON context").AtError() + return nil, "", errors.New(v.idKey, " not found in JSON context").AtError() } var id string if err := json.Unmarshal(rawID, &id); err != nil { diff --git a/xray-core/infra/conf/metrics.go b/xray-core/infra/conf/metrics.go index 2a0c8ef9c9..3f550e88ea 100644 --- a/xray-core/infra/conf/metrics.go +++ b/xray-core/infra/conf/metrics.go @@ -2,6 +2,7 @@ package conf import ( "github.com/xtls/xray-core/app/metrics" + "github.com/xtls/xray-core/common/errors" ) type MetricsConfig struct { @@ -10,7 +11,7 @@ type MetricsConfig struct { func (c *MetricsConfig) Build() (*metrics.Config, error) { if c.Tag == "" { - return nil, newError("metrics tag can't be empty.") + return nil, errors.New("metrics tag can't be empty.") } return &metrics.Config{ diff --git a/xray-core/infra/conf/router.go b/xray-core/infra/conf/router.go index 6ae39d45f3..44f9e8fa47 100644 --- a/xray-core/infra/conf/router.go +++ b/xray-core/infra/conf/router.go @@ -7,6 +7,7 @@ import ( "strings" "github.com/xtls/xray-core/app/router" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/platform/filesystem" "github.com/xtls/xray-core/common/serial" @@ -34,10 +35,10 @@ type BalancingRule struct { // Build builds the balancing rule func (r *BalancingRule) Build() (*router.BalancingRule, error) { if r.Tag == "" { - return nil, newError("empty balancer tag") + return nil, errors.New("empty balancer tag") } if len(r.Selectors) == 0 { - return nil, newError("empty selector list") + return nil, errors.New("empty selector list") } r.Strategy.Type = strings.ToLower(r.Strategy.Type) @@ -46,7 +47,7 @@ func (r *BalancingRule) Build() (*router.BalancingRule, error) { r.Strategy.Type = strategyRandom case strategyRandom, strategyLeastLoad, strategyLeastPing, strategyRoundRobin: default: - return nil, newError("unknown balancing strategy: " + r.Strategy.Type) + return nil, errors.New("unknown balancing strategy: " + r.Strategy.Type) } settings := []byte("{}") @@ -55,7 +56,7 @@ func (r *BalancingRule) Build() (*router.BalancingRule, error) { } rawConfig, err := strategyConfigLoader.LoadWithID(settings, r.Strategy.Type) if err != nil { - return nil, newError("failed to parse to strategy config.").Base(err) + return nil, errors.New("failed to parse to strategy config.").Base(err) } var ts proto.Message if builder, ok := rawConfig.(Buildable); ok { @@ -163,12 +164,12 @@ func ParseIP(s string) (*router.CIDR, error) { if len(mask) > 0 { bits64, err := strconv.ParseUint(mask, 10, 32) if err != nil { - return nil, newError("invalid network mask for router: ", mask).Base(err) + return nil, errors.New("invalid network mask for router: ", mask).Base(err) } bits = uint32(bits64) } if bits > 32 { - return nil, newError("invalid network mask for router: ", bits) + return nil, errors.New("invalid network mask for router: ", bits) } return &router.CIDR{ Ip: []byte(ip.IP()), @@ -179,19 +180,19 @@ func ParseIP(s string) (*router.CIDR, error) { if len(mask) > 0 { bits64, err := strconv.ParseUint(mask, 10, 32) if err != nil { - return nil, newError("invalid network mask for router: ", mask).Base(err) + return nil, errors.New("invalid network mask for router: ", mask).Base(err) } bits = uint32(bits64) } if bits > 128 { - return nil, newError("invalid network mask for router: ", bits) + return nil, errors.New("invalid network mask for router: ", bits) } return &router.CIDR{ Ip: []byte(ip.IP()), Prefix: bits, }, nil default: - return nil, newError("unsupported address for router: ", s) + return nil, errors.New("unsupported address for router: ", s) } } @@ -209,10 +210,10 @@ func loadFile(file string) ([]byte, error) { if FileCache[file] == nil { bs, err := filesystem.ReadAsset(file) if err != nil { - return nil, newError("failed to open file: ", file).Base(err) + return nil, errors.New("failed to open file: ", file).Base(err) } if len(bs) == 0 { - return nil, newError("empty file: ", file) + return nil, errors.New("empty file: ", file) } // Do not cache file, may save RAM when there // are many files, but consume CPU each time. @@ -227,15 +228,15 @@ func loadIP(file, code string) ([]*router.CIDR, error) { if IPCache[index] == nil { bs, err := loadFile(file) if err != nil { - return nil, newError("failed to load file: ", file).Base(err) + return nil, errors.New("failed to load file: ", file).Base(err) } bs = find(bs, []byte(code)) if bs == nil { - return nil, newError("code not found in ", file, ": ", code) + return nil, errors.New("code not found in ", file, ": ", code) } var geoip router.GeoIP if err := proto.Unmarshal(bs, &geoip); err != nil { - return nil, newError("error unmarshal IP in ", file, ": ", code).Base(err) + return nil, errors.New("error unmarshal IP in ", file, ": ", code).Base(err) } defer runtime.GC() // or debug.FreeOSMemory() return geoip.Cidr, nil // do not cache geoip @@ -249,15 +250,15 @@ func loadSite(file, code string) ([]*router.Domain, error) { if SiteCache[index] == nil { bs, err := loadFile(file) if err != nil { - return nil, newError("failed to load file: ", file).Base(err) + return nil, errors.New("failed to load file: ", file).Base(err) } bs = find(bs, []byte(code)) if bs == nil { - return nil, newError("list not found in ", file, ": ", code) + return nil, errors.New("list not found in ", file, ": ", code) } var geosite router.GeoSite if err := proto.Unmarshal(bs, &geosite); err != nil { - return nil, newError("error unmarshal Site in ", file, ": ", code).Base(err) + return nil, errors.New("error unmarshal Site in ", file, ": ", code).Base(err) } defer runtime.GC() // or debug.FreeOSMemory() return geosite.Domain, nil // do not cache geosite @@ -361,7 +362,7 @@ func parseAttrs(attrs []string) *AttributeList { func loadGeositeWithAttr(file string, siteWithAttr string) ([]*router.Domain, error) { parts := strings.Split(siteWithAttr, "@") if len(parts) == 0 { - return nil, newError("empty site") + return nil, errors.New("empty site") } country := strings.ToUpper(parts[0]) attrs := parseAttrs(parts[1:]) @@ -389,7 +390,7 @@ func parseDomainRule(domain string) ([]*router.Domain, error) { country := strings.ToUpper(domain[8:]) domains, err := loadGeositeWithAttr("geosite.dat", country) if err != nil { - return nil, newError("failed to load geosite: ", country).Base(err) + return nil, errors.New("failed to load geosite: ", country).Base(err) } return domains, nil } @@ -407,13 +408,13 @@ func parseDomainRule(domain string) ([]*router.Domain, error) { if isExtDatFile != 0 { kv := strings.Split(domain[isExtDatFile:], ":") if len(kv) != 2 { - return nil, newError("invalid external resource: ", domain) + return nil, errors.New("invalid external resource: ", domain) } filename := kv[0] country := kv[1] domains, err := loadGeositeWithAttr(filename, country) if err != nil { - return nil, newError("failed to load external sites: ", country, " from ", filename).Base(err) + return nil, errors.New("failed to load external sites: ", country, " from ", filename).Base(err) } return domains, nil } @@ -444,7 +445,7 @@ func parseDomainRule(domain string) ([]*router.Domain, error) { case !strings.Contains(substr, "."): domainRule.Value = "^[^.]*" + substr + "[^.]*$" default: - return nil, newError("substr in dotless rule should not contain a dot: ", substr) + return nil, errors.New("substr in dotless rule should not contain a dot: ", substr) } default: @@ -467,11 +468,11 @@ func ToCidrList(ips StringList) ([]*router.GeoIP, error) { isReverseMatch = true } if len(country) == 0 { - return nil, newError("empty country name in rule") + return nil, errors.New("empty country name in rule") } geoip, err := loadGeoIP(strings.ToUpper(country)) if err != nil { - return nil, newError("failed to load GeoIP: ", country).Base(err) + return nil, errors.New("failed to load GeoIP: ", country).Base(err) } geoipList = append(geoipList, &router.GeoIP{ @@ -495,13 +496,13 @@ func ToCidrList(ips StringList) ([]*router.GeoIP, error) { if isExtDatFile != 0 { kv := strings.Split(ip[isExtDatFile:], ":") if len(kv) != 2 { - return nil, newError("invalid external resource: ", ip) + return nil, errors.New("invalid external resource: ", ip) } filename := kv[0] country := kv[1] if len(filename) == 0 || len(country) == 0 { - return nil, newError("empty filename or empty country in rule") + return nil, errors.New("empty filename or empty country in rule") } isReverseMatch := false @@ -511,7 +512,7 @@ func ToCidrList(ips StringList) ([]*router.GeoIP, error) { } geoip, err := loadIP(filename, strings.ToUpper(country)) if err != nil { - return nil, newError("failed to load IPs: ", country, " from ", filename).Base(err) + return nil, errors.New("failed to load IPs: ", country, " from ", filename).Base(err) } geoipList = append(geoipList, &router.GeoIP{ @@ -525,7 +526,7 @@ func ToCidrList(ips StringList) ([]*router.GeoIP, error) { ipRule, err := ParseIP(ip) if err != nil { - return nil, newError("invalid IP: ", ip).Base(err) + return nil, errors.New("invalid IP: ", ip).Base(err) } customCidrs = append(customCidrs, ipRule) } @@ -572,7 +573,7 @@ func parseFieldRule(msg json.RawMessage) (*router.RoutingRule, error) { BalancingTag: rawFieldRule.BalancerTag, } default: - return nil, newError("neither outboundTag nor balancerTag is specified in routing rule") + return nil, errors.New("neither outboundTag nor balancerTag is specified in routing rule") } if rawFieldRule.DomainMatcher != "" { @@ -583,7 +584,7 @@ func parseFieldRule(msg json.RawMessage) (*router.RoutingRule, error) { for _, domain := range *rawFieldRule.Domain { rules, err := parseDomainRule(domain) if err != nil { - return nil, newError("failed to parse domain rule: ", domain).Base(err) + return nil, errors.New("failed to parse domain rule: ", domain).Base(err) } rule.Domain = append(rule.Domain, rules...) } @@ -593,7 +594,7 @@ func parseFieldRule(msg json.RawMessage) (*router.RoutingRule, error) { for _, domain := range *rawFieldRule.Domains { rules, err := parseDomainRule(domain) if err != nil { - return nil, newError("failed to parse domain rule: ", domain).Base(err) + return nil, errors.New("failed to parse domain rule: ", domain).Base(err) } rule.Domain = append(rule.Domain, rules...) } @@ -656,14 +657,14 @@ func ParseRule(msg json.RawMessage) (*router.RoutingRule, error) { rawRule := new(RouterRule) err := json.Unmarshal(msg, rawRule) if err != nil { - return nil, newError("invalid router rule").Base(err) + return nil, errors.New("invalid router rule").Base(err) } if rawRule.Type == "" || strings.EqualFold(rawRule.Type, "field") { fieldrule, err := parseFieldRule(msg) if err != nil { - return nil, newError("invalid field rule").Base(err) + return nil, errors.New("invalid field rule").Base(err) } return fieldrule, nil } - return nil, newError("unknown router rule type: ", rawRule.Type) + return nil, errors.New("unknown router rule type: ", rawRule.Type) } diff --git a/xray-core/infra/conf/serial/builder.go b/xray-core/infra/conf/serial/builder.go index 88ea9e65ae..1ff4ed8a9f 100644 --- a/xray-core/infra/conf/serial/builder.go +++ b/xray-core/infra/conf/serial/builder.go @@ -1,8 +1,10 @@ package serial import ( + "context" "io" + "github.com/xtls/xray-core/common/errors" creflect "github.com/xtls/xray-core/common/reflect" "github.com/xtls/xray-core/core" "github.com/xtls/xray-core/infra/conf" @@ -18,20 +20,20 @@ func MergeConfigFromFiles(files []string, formats []string) (string, error) { if j, ok := creflect.MarshalToJson(c); ok { return j, nil } - return "", newError("marshal to json failed.").AtError() + return "", errors.New("marshal to json failed.").AtError() } func mergeConfigs(files []string, formats []string) (*conf.Config, error) { cf := &conf.Config{} for i, file := range files { - newError("Reading config: ", file).AtInfo().WriteToLog() + errors.LogInfo(context.Background(), "Reading config: ", file) r, err := confloader.LoadConfig(file) if err != nil { - return nil, newError("failed to read config: ", file).Base(err) + return nil, errors.New("failed to read config: ", file).Base(err) } c, err := ReaderDecoderByFormat[formats[i]](r) if err != nil { - return nil, newError("failed to decode config: ", file).Base(err) + return nil, errors.New("failed to decode config: ", file).Base(err) } if i == 0 { *cf = *c diff --git a/xray-core/infra/conf/serial/errors.generated.go b/xray-core/infra/conf/serial/errors.generated.go deleted file mode 100644 index e78fc61ea5..0000000000 --- a/xray-core/infra/conf/serial/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package serial - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/infra/conf/serial/loader.go b/xray-core/infra/conf/serial/loader.go index e3235675d4..ef9963df6f 100644 --- a/xray-core/infra/conf/serial/loader.go +++ b/xray-core/infra/conf/serial/loader.go @@ -61,9 +61,9 @@ func DecodeJSONConfig(reader io.Reader) (*conf.Config, error) { pos = findOffset(jsonContent.Bytes(), int(tErr.Offset)) } if pos != nil { - return nil, newError("failed to read config file at line ", pos.line, " char ", pos.char).Base(err) + return nil, errors.New("failed to read config file at line ", pos.line, " char ", pos.char).Base(err) } - return nil, newError("failed to read config file").Base(err) + return nil, errors.New("failed to read config file").Base(err) } return jsonConfig, nil @@ -77,7 +77,7 @@ func LoadJSONConfig(reader io.Reader) (*core.Config, error) { pbConfig, err := jsonConfig.Build() if err != nil { - return nil, newError("failed to parse json config").Base(err) + return nil, errors.New("failed to parse json config").Base(err) } return pbConfig, nil @@ -88,17 +88,17 @@ func LoadJSONConfig(reader io.Reader) (*core.Config, error) { func DecodeTOMLConfig(reader io.Reader) (*conf.Config, error) { tomlFile, err := io.ReadAll(reader) if err != nil { - return nil, newError("failed to read config file").Base(err) + return nil, errors.New("failed to read config file").Base(err) } configMap := make(map[string]interface{}) if err := toml.Unmarshal(tomlFile, &configMap); err != nil { - return nil, newError("failed to convert toml to map").Base(err) + return nil, errors.New("failed to convert toml to map").Base(err) } jsonFile, err := json.Marshal(&configMap) if err != nil { - return nil, newError("failed to convert map to json").Base(err) + return nil, errors.New("failed to convert map to json").Base(err) } return DecodeJSONConfig(bytes.NewReader(jsonFile)) @@ -112,7 +112,7 @@ func LoadTOMLConfig(reader io.Reader) (*core.Config, error) { pbConfig, err := tomlConfig.Build() if err != nil { - return nil, newError("failed to parse toml config").Base(err) + return nil, errors.New("failed to parse toml config").Base(err) } return pbConfig, nil @@ -123,12 +123,12 @@ func LoadTOMLConfig(reader io.Reader) (*core.Config, error) { func DecodeYAMLConfig(reader io.Reader) (*conf.Config, error) { yamlFile, err := io.ReadAll(reader) if err != nil { - return nil, newError("failed to read config file").Base(err) + return nil, errors.New("failed to read config file").Base(err) } jsonFile, err := yaml.YAMLToJSON(yamlFile) if err != nil { - return nil, newError("failed to convert yaml to json").Base(err) + return nil, errors.New("failed to convert yaml to json").Base(err) } return DecodeJSONConfig(bytes.NewReader(jsonFile)) @@ -142,7 +142,7 @@ func LoadYAMLConfig(reader io.Reader) (*core.Config, error) { pbConfig, err := yamlConfig.Build() if err != nil { - return nil, newError("failed to parse yaml config").Base(err) + return nil, errors.New("failed to parse yaml config").Base(err) } return pbConfig, nil diff --git a/xray-core/infra/conf/shadowsocks.go b/xray-core/infra/conf/shadowsocks.go index 3dcbb2f3c1..1bd6462c80 100644 --- a/xray-core/infra/conf/shadowsocks.go +++ b/xray-core/infra/conf/shadowsocks.go @@ -5,6 +5,7 @@ import ( "github.com/sagernet/sing-shadowsocks/shadowaead_2022" C "github.com/sagernet/sing/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/protocol" "github.com/xtls/xray-core/common/serial" "github.com/xtls/xray-core/proxy/shadowsocks" @@ -64,11 +65,11 @@ func (v *ShadowsocksServerConfig) Build() (proto.Message, error) { IvCheck: v.IVCheck, } if account.Password == "" { - return nil, newError("Shadowsocks password is not specified.") + return nil, errors.New("Shadowsocks password is not specified.") } if account.CipherType < shadowsocks.CipherType_AES_128_GCM || account.CipherType > shadowsocks.CipherType_XCHACHA20_POLY1305 { - return nil, newError("unsupported cipher method: ", user.Cipher) + return nil, errors.New("unsupported cipher method: ", user.Cipher) } config.Users = append(config.Users, &protocol.User{ Email: user.Email, @@ -83,10 +84,10 @@ func (v *ShadowsocksServerConfig) Build() (proto.Message, error) { IvCheck: v.IVCheck, } if account.Password == "" { - return nil, newError("Shadowsocks password is not specified.") + return nil, errors.New("Shadowsocks password is not specified.") } if account.CipherType == shadowsocks.CipherType_UNKNOWN { - return nil, newError("unknown cipher method: ", v.Cipher) + return nil, errors.New("unknown cipher method: ", v.Cipher) } config.Users = append(config.Users, &protocol.User{ Email: v.Email, @@ -109,10 +110,10 @@ func buildShadowsocks2022(v *ShadowsocksServerConfig) (proto.Message, error) { } if v.Cipher == "" { - return nil, newError("shadowsocks 2022 (multi-user): missing server method") + return nil, errors.New("shadowsocks 2022 (multi-user): missing server method") } if !strings.Contains(v.Cipher, "aes") { - return nil, newError("shadowsocks 2022 (multi-user): only blake3-aes-*-gcm methods are supported") + return nil, errors.New("shadowsocks 2022 (multi-user): only blake3-aes-*-gcm methods are supported") } if v.Users[0].Address == nil { @@ -123,7 +124,7 @@ func buildShadowsocks2022(v *ShadowsocksServerConfig) (proto.Message, error) { for _, user := range v.Users { if user.Cipher != "" { - return nil, newError("shadowsocks 2022 (multi-user): users must have empty method") + return nil, errors.New("shadowsocks 2022 (multi-user): users must have empty method") } config.Users = append(config.Users, &shadowsocks_2022.User{ Key: user.Password, @@ -139,10 +140,10 @@ func buildShadowsocks2022(v *ShadowsocksServerConfig) (proto.Message, error) { config.Network = v.NetworkList.Build() for _, user := range v.Users { if user.Cipher != "" { - return nil, newError("shadowsocks 2022 (relay): users must have empty method") + return nil, errors.New("shadowsocks 2022 (relay): users must have empty method") } if user.Address == nil { - return nil, newError("shadowsocks 2022 (relay): all users must have relay address") + return nil, errors.New("shadowsocks 2022 (relay): all users must have relay address") } config.Destinations = append(config.Destinations, &shadowsocks_2022.RelayDestination{ Key: user.Password, @@ -172,20 +173,20 @@ type ShadowsocksClientConfig struct { func (v *ShadowsocksClientConfig) Build() (proto.Message, error) { if len(v.Servers) == 0 { - return nil, newError("0 Shadowsocks server configured.") + return nil, errors.New("0 Shadowsocks server configured.") } if len(v.Servers) == 1 { server := v.Servers[0] if C.Contains(shadowaead_2022.List, server.Cipher) { if server.Address == nil { - return nil, newError("Shadowsocks server address is not set.") + return nil, errors.New("Shadowsocks server address is not set.") } if server.Port == 0 { - return nil, newError("Invalid Shadowsocks port.") + return nil, errors.New("Invalid Shadowsocks port.") } if server.Password == "" { - return nil, newError("Shadowsocks password is not specified.") + return nil, errors.New("Shadowsocks password is not specified.") } config := new(shadowsocks_2022.ClientConfig) @@ -203,23 +204,23 @@ func (v *ShadowsocksClientConfig) Build() (proto.Message, error) { serverSpecs := make([]*protocol.ServerEndpoint, len(v.Servers)) for idx, server := range v.Servers { if C.Contains(shadowaead_2022.List, server.Cipher) { - return nil, newError("Shadowsocks 2022 accept no multi servers") + return nil, errors.New("Shadowsocks 2022 accept no multi servers") } if server.Address == nil { - return nil, newError("Shadowsocks server address is not set.") + return nil, errors.New("Shadowsocks server address is not set.") } if server.Port == 0 { - return nil, newError("Invalid Shadowsocks port.") + return nil, errors.New("Invalid Shadowsocks port.") } if server.Password == "" { - return nil, newError("Shadowsocks password is not specified.") + return nil, errors.New("Shadowsocks password is not specified.") } account := &shadowsocks.Account{ Password: server.Password, } account.CipherType = cipherFromString(server.Cipher) if account.CipherType == shadowsocks.CipherType_UNKNOWN { - return nil, newError("unknown cipher method: ", server.Cipher) + return nil, errors.New("unknown cipher method: ", server.Cipher) } account.IvCheck = server.IVCheck diff --git a/xray-core/infra/conf/socks.go b/xray-core/infra/conf/socks.go index 61f6fae255..52fbe4c650 100644 --- a/xray-core/infra/conf/socks.go +++ b/xray-core/infra/conf/socks.go @@ -4,6 +4,7 @@ import ( "encoding/json" "strings" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/protocol" "github.com/xtls/xray-core/common/serial" "github.com/xtls/xray-core/proxy/socks" @@ -44,7 +45,7 @@ func (v *SocksServerConfig) Build() (proto.Message, error) { case AuthMethodUserPass: config.AuthType = socks.AuthType_PASSWORD default: - // newError("unknown socks auth method: ", v.AuthMethod, ". Default to noauth.").AtWarning().WriteToLog() + // errors.New("unknown socks auth method: ", v.AuthMethod, ". Default to noauth.").AtWarning().WriteToLog() config.AuthType = socks.AuthType_NO_AUTH } @@ -87,7 +88,7 @@ func (v *SocksClientConfig) Build() (proto.Message, error) { case "", "5": config.Version = socks.Version_SOCKS5 default: - return nil, newError("failed to parse socks server version: ", v.Version).AtError() + return nil, errors.New("failed to parse socks server version: ", v.Version).AtError() } for idx, serverConfig := range v.Servers { server := &protocol.ServerEndpoint{ @@ -97,14 +98,14 @@ func (v *SocksClientConfig) Build() (proto.Message, error) { for _, rawUser := range serverConfig.Users { user := new(protocol.User) if err := json.Unmarshal(rawUser, user); err != nil { - return nil, newError("failed to parse Socks user").Base(err).AtError() + return nil, errors.New("failed to parse Socks user").Base(err).AtError() } account := new(SocksAccount) if err := json.Unmarshal(rawUser, account); err != nil { - return nil, newError("failed to parse socks account").Base(err).AtError() + return nil, errors.New("failed to parse socks account").Base(err).AtError() } if config.Version != socks.Version_SOCKS5 && account.Password != "" { - return nil, newError("password is only supported in socks5").AtError() + return nil, errors.New("password is only supported in socks5").AtError() } user.Account = serial.ToTypedMessage(account.Build()) server.User = append(server.User, user) diff --git a/xray-core/infra/conf/transport.go b/xray-core/infra/conf/transport.go index 1e0e70de89..b401dcabba 100644 --- a/xray-core/infra/conf/transport.go +++ b/xray-core/infra/conf/transport.go @@ -1,6 +1,7 @@ package conf import ( + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/serial" "github.com/xtls/xray-core/transport/global" "github.com/xtls/xray-core/transport/internet" @@ -26,7 +27,7 @@ func (c *TransportConfig) Build() (*global.Config, error) { if c.TCPConfig != nil { ts, err := c.TCPConfig.Build() if err != nil { - return nil, newError("failed to build TCP config").Base(err).AtError() + return nil, errors.New("failed to build TCP config").Base(err).AtError() } config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{ ProtocolName: "tcp", @@ -37,7 +38,7 @@ func (c *TransportConfig) Build() (*global.Config, error) { if c.KCPConfig != nil { ts, err := c.KCPConfig.Build() if err != nil { - return nil, newError("failed to build mKCP config").Base(err).AtError() + return nil, errors.New("failed to build mKCP config").Base(err).AtError() } config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{ ProtocolName: "mkcp", @@ -48,7 +49,7 @@ func (c *TransportConfig) Build() (*global.Config, error) { if c.WSConfig != nil { ts, err := c.WSConfig.Build() if err != nil { - return nil, newError("failed to build WebSocket config").Base(err) + return nil, errors.New("failed to build WebSocket config").Base(err) } config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{ ProtocolName: "websocket", @@ -59,7 +60,7 @@ func (c *TransportConfig) Build() (*global.Config, error) { if c.HTTPConfig != nil { ts, err := c.HTTPConfig.Build() if err != nil { - return nil, newError("Failed to build HTTP config.").Base(err) + return nil, errors.New("Failed to build HTTP config.").Base(err) } config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{ ProtocolName: "http", @@ -70,7 +71,7 @@ func (c *TransportConfig) Build() (*global.Config, error) { if c.DSConfig != nil { ds, err := c.DSConfig.Build() if err != nil { - return nil, newError("Failed to build DomainSocket config.").Base(err) + return nil, errors.New("Failed to build DomainSocket config.").Base(err) } config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{ ProtocolName: "domainsocket", @@ -81,7 +82,7 @@ func (c *TransportConfig) Build() (*global.Config, error) { if c.QUICConfig != nil { qs, err := c.QUICConfig.Build() if err != nil { - return nil, newError("Failed to build QUIC config.").Base(err) + return nil, errors.New("Failed to build QUIC config.").Base(err) } config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{ ProtocolName: "quic", @@ -95,7 +96,7 @@ func (c *TransportConfig) Build() (*global.Config, error) { if c.GRPCConfig != nil { gs, err := c.GRPCConfig.Build() if err != nil { - return nil, newError("Failed to build gRPC config.").Base(err) + return nil, errors.New("Failed to build gRPC config.").Base(err) } config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{ ProtocolName: "grpc", @@ -106,7 +107,7 @@ func (c *TransportConfig) Build() (*global.Config, error) { if c.HTTPUPGRADEConfig != nil { hs, err := c.HTTPUPGRADEConfig.Build() if err != nil { - return nil, newError("failed to build HttpUpgrade config").Base(err) + return nil, errors.New("failed to build HttpUpgrade config").Base(err) } config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{ ProtocolName: "httpupgrade", @@ -117,7 +118,7 @@ func (c *TransportConfig) Build() (*global.Config, error) { if c.SplitHTTPConfig != nil { shs, err := c.SplitHTTPConfig.Build() if err != nil { - return nil, newError("failed to build SplitHTTP config").Base(err) + return nil, errors.New("failed to build SplitHTTP config").Base(err) } config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{ ProtocolName: "splithttp", diff --git a/xray-core/infra/conf/transport_authenticators.go b/xray-core/infra/conf/transport_authenticators.go index db9f4a726e..4004b26b86 100644 --- a/xray-core/infra/conf/transport_authenticators.go +++ b/xray-core/infra/conf/transport_authenticators.go @@ -3,6 +3,7 @@ package conf import ( "sort" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/transport/internet/headers/dns" "github.com/xtls/xray-core/transport/internet/headers/http" "github.com/xtls/xray-core/transport/internet/headers/noop" @@ -133,7 +134,7 @@ func (v *AuthenticatorRequest) Build() (*http.RequestConfig, error) { for _, key := range headerNames { value := v.Headers[key] if value == nil { - return nil, newError("empty HTTP header value: " + key).AtError() + return nil, errors.New("empty HTTP header value: " + key).AtError() } config.Header = append(config.Header, &http.Header{ Name: key, @@ -201,7 +202,7 @@ func (v *AuthenticatorResponse) Build() (*http.ResponseConfig, error) { for _, key := range headerNames { value := v.Headers[key] if value == nil { - return nil, newError("empty HTTP header value: " + key).AtError() + return nil, errors.New("empty HTTP header value: " + key).AtError() } config.Header = append(config.Header, &http.Header{ Name: key, diff --git a/xray-core/infra/conf/transport_internet.go b/xray-core/infra/conf/transport_internet.go index 12ed419702..fe80c64764 100644 --- a/xray-core/infra/conf/transport_internet.go +++ b/xray-core/infra/conf/transport_internet.go @@ -11,6 +11,7 @@ import ( "strings" "syscall" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/platform/filesystem" "github.com/xtls/xray-core/common/protocol" @@ -66,14 +67,14 @@ func (c *KCPConfig) Build() (proto.Message, error) { if c.Mtu != nil { mtu := *c.Mtu if mtu < 576 || mtu > 1460 { - return nil, newError("invalid mKCP MTU size: ", mtu).AtError() + return nil, errors.New("invalid mKCP MTU size: ", mtu).AtError() } config.Mtu = &kcp.MTU{Value: mtu} } if c.Tti != nil { tti := *c.Tti if tti < 10 || tti > 100 { - return nil, newError("invalid mKCP TTI: ", tti).AtError() + return nil, errors.New("invalid mKCP TTI: ", tti).AtError() } config.Tti = &kcp.TTI{Value: tti} } @@ -105,11 +106,11 @@ func (c *KCPConfig) Build() (proto.Message, error) { if len(c.HeaderConfig) > 0 { headerConfig, _, err := kcpHeaderLoader.Load(c.HeaderConfig) if err != nil { - return nil, newError("invalid mKCP header config.").Base(err).AtError() + return nil, errors.New("invalid mKCP header config.").Base(err).AtError() } ts, err := headerConfig.(Buildable).Build() if err != nil { - return nil, newError("invalid mKCP header config").Base(err).AtError() + return nil, errors.New("invalid mKCP header config").Base(err).AtError() } config.HeaderConfig = serial.ToTypedMessage(ts) } @@ -132,11 +133,11 @@ func (c *TCPConfig) Build() (proto.Message, error) { if len(c.HeaderConfig) > 0 { headerConfig, _, err := tcpHeaderLoader.Load(c.HeaderConfig) if err != nil { - return nil, newError("invalid TCP header config").Base(err).AtError() + return nil, errors.New("invalid TCP header config").Base(err).AtError() } ts, err := headerConfig.(Buildable).Build() if err != nil { - return nil, newError("invalid TCP header config").Base(err).AtError() + return nil, errors.New("invalid TCP header config").Base(err).AtError() } config.HeaderSettings = serial.ToTypedMessage(ts) } @@ -209,10 +210,10 @@ func (c *HttpUpgradeConfig) Build() (proto.Message, error) { // Host priority: Host field > headers field > address. if c.Host == "" && c.Headers["host"] != "" { c.Host = c.Headers["host"] - delete(c.Headers,"host") + delete(c.Headers, "host") } else if c.Host == "" && c.Headers["Host"] != "" { c.Host = c.Headers["Host"] - delete(c.Headers,"Host") + delete(c.Headers, "Host") } config := &httpupgrade.Config{ Path: path, @@ -286,7 +287,7 @@ func (c *HTTPConfig) Build() (proto.Message, error) { for _, key := range headerNames { value := c.Headers[key] if value == nil { - return nil, newError("empty HTTP header value: " + key).AtError() + return nil, errors.New("empty HTTP header value: " + key).AtError() } config.Header = append(config.Header, &httpheader.Header{ Name: key, @@ -312,11 +313,11 @@ func (c *QUICConfig) Build() (proto.Message, error) { if len(c.Header) > 0 { headerConfig, _, err := kcpHeaderLoader.Load(c.Header) if err != nil { - return nil, newError("invalid QUIC header config.").Base(err).AtError() + return nil, errors.New("invalid QUIC header config.").Base(err).AtError() } ts, err := headerConfig.(Buildable).Build() if err != nil { - return nil, newError("invalid QUIC header config").Base(err).AtError() + return nil, errors.New("invalid QUIC header config").Base(err).AtError() } config.Header = serial.ToTypedMessage(ts) } @@ -360,7 +361,7 @@ func readFileOrString(f string, s []string) ([]byte, error) { if len(s) > 0 { return []byte(strings.Join(s, "\n")), nil } - return nil, newError("both file and bytes are empty.") + return nil, errors.New("both file and bytes are empty.") } type TLSCertConfig struct { @@ -379,7 +380,7 @@ func (c *TLSCertConfig) Build() (*tls.Certificate, error) { cert, err := readFileOrString(c.CertFile, c.CertStr) if err != nil { - return nil, newError("failed to parse certificate").Base(err) + return nil, errors.New("failed to parse certificate").Base(err) } certificate.Certificate = cert certificate.CertificatePath = c.CertFile @@ -387,7 +388,7 @@ func (c *TLSCertConfig) Build() (*tls.Certificate, error) { if len(c.KeyFile) > 0 || len(c.KeyStr) > 0 { key, err := readFileOrString(c.KeyFile, c.KeyStr) if err != nil { - return nil, newError("failed to parse key").Base(err) + return nil, errors.New("failed to parse key").Base(err) } certificate.Key = key certificate.KeyPath = c.KeyFile @@ -456,7 +457,7 @@ func (c *TLSConfig) Build() (proto.Message, error) { config.CipherSuites = c.CipherSuites config.Fingerprint = strings.ToLower(c.Fingerprint) if config.Fingerprint != "" && tls.GetFingerprint(config.Fingerprint) == nil { - return nil, newError(`unknown fingerprint: `, config.Fingerprint) + return nil, errors.New(`unknown fingerprint: `, config.Fingerprint) } config.RejectUnknownSni = c.RejectUnknownSNI @@ -539,29 +540,29 @@ func (c *REALITYConfig) Build() (proto.Message, error) { } } if c.Type == "" { - return nil, newError(`please fill in a valid value for "dest"`) + return nil, errors.New(`please fill in a valid value for "dest"`) } if c.Xver > 2 { - return nil, newError(`invalid PROXY protocol version, "xver" only accepts 0, 1, 2`) + return nil, errors.New(`invalid PROXY protocol version, "xver" only accepts 0, 1, 2`) } if len(c.ServerNames) == 0 { - return nil, newError(`empty "serverNames"`) + return nil, errors.New(`empty "serverNames"`) } if c.PrivateKey == "" { - return nil, newError(`empty "privateKey"`) + return nil, errors.New(`empty "privateKey"`) } if config.PrivateKey, err = base64.RawURLEncoding.DecodeString(c.PrivateKey); err != nil || len(config.PrivateKey) != 32 { - return nil, newError(`invalid "privateKey": `, c.PrivateKey) + return nil, errors.New(`invalid "privateKey": `, c.PrivateKey) } if c.MinClientVer != "" { config.MinClientVer = make([]byte, 3) var u uint64 for i, s := range strings.Split(c.MinClientVer, ".") { if i == 3 { - return nil, newError(`invalid "minClientVer": `, c.MinClientVer) + return nil, errors.New(`invalid "minClientVer": `, c.MinClientVer) } if u, err = strconv.ParseUint(s, 10, 8); err != nil { - return nil, newError(`"minClientVer[`, i, `]" should be lesser than 256`) + return nil, errors.New(`"minClientVer[`, i, `]" should be lesser than 256`) } else { config.MinClientVer[i] = byte(u) } @@ -572,23 +573,23 @@ func (c *REALITYConfig) Build() (proto.Message, error) { var u uint64 for i, s := range strings.Split(c.MaxClientVer, ".") { if i == 3 { - return nil, newError(`invalid "maxClientVer": `, c.MaxClientVer) + return nil, errors.New(`invalid "maxClientVer": `, c.MaxClientVer) } if u, err = strconv.ParseUint(s, 10, 8); err != nil { - return nil, newError(`"maxClientVer[`, i, `]" should be lesser than 256`) + return nil, errors.New(`"maxClientVer[`, i, `]" should be lesser than 256`) } else { config.MaxClientVer[i] = byte(u) } } } if len(c.ShortIds) == 0 { - return nil, newError(`empty "shortIds"`) + return nil, errors.New(`empty "shortIds"`) } config.ShortIds = make([][]byte, len(c.ShortIds)) for i, s := range c.ShortIds { config.ShortIds[i] = make([]byte, 8) if _, err = hex.Decode(config.ShortIds[i], []byte(s)); err != nil { - return nil, newError(`invalid "shortIds[`, i, `]": `, s) + return nil, errors.New(`invalid "shortIds[`, i, `]": `, s) } } config.Dest = s @@ -598,35 +599,35 @@ func (c *REALITYConfig) Build() (proto.Message, error) { config.MaxTimeDiff = c.MaxTimeDiff } else { if c.Fingerprint == "" { - return nil, newError(`empty "fingerprint"`) + return nil, errors.New(`empty "fingerprint"`) } if config.Fingerprint = strings.ToLower(c.Fingerprint); tls.GetFingerprint(config.Fingerprint) == nil { - return nil, newError(`unknown "fingerprint": `, config.Fingerprint) + return nil, errors.New(`unknown "fingerprint": `, config.Fingerprint) } if config.Fingerprint == "hellogolang" { - return nil, newError(`invalid "fingerprint": `, config.Fingerprint) + return nil, errors.New(`invalid "fingerprint": `, config.Fingerprint) } if len(c.ServerNames) != 0 { - return nil, newError(`non-empty "serverNames", please use "serverName" instead`) + return nil, errors.New(`non-empty "serverNames", please use "serverName" instead`) } if c.PublicKey == "" { - return nil, newError(`empty "publicKey"`) + return nil, errors.New(`empty "publicKey"`) } if config.PublicKey, err = base64.RawURLEncoding.DecodeString(c.PublicKey); err != nil || len(config.PublicKey) != 32 { - return nil, newError(`invalid "publicKey": `, c.PublicKey) + return nil, errors.New(`invalid "publicKey": `, c.PublicKey) } if len(c.ShortIds) != 0 { - return nil, newError(`non-empty "shortIds", please use "shortId" instead`) + return nil, errors.New(`non-empty "shortIds", please use "shortId" instead`) } config.ShortId = make([]byte, 8) if _, err = hex.Decode(config.ShortId, []byte(c.ShortId)); err != nil { - return nil, newError(`invalid "shortId": `, c.ShortId) + return nil, errors.New(`invalid "shortId": `, c.ShortId) } if c.SpiderX == "" { c.SpiderX = "/" } if c.SpiderX[0] != '/' { - return nil, newError(`invalid "spiderX": `, c.SpiderX) + return nil, errors.New(`invalid "spiderX": `, c.SpiderX) } config.SpiderY = make([]int64, 10) u, _ := url.Parse(c.SpiderX) @@ -680,7 +681,7 @@ func (p TransportProtocol) Build() (string, error) { case "splithttp": return "splithttp", nil default: - return "", newError("Config: unknown transport protocol: ", p) + return "", errors.New("Config: unknown transport protocol: ", p) } } @@ -717,7 +718,7 @@ func (c *SocketConfig) Build() (*internet.SocketConfig, error) { case float64: tfo = int32(math.Min(v, math.MaxInt32)) default: - return nil, newError("tcpFastOpen: only boolean and integer value is acceptable") + return nil, errors.New("tcpFastOpen: only boolean and integer value is acceptable") } } var tproxy internet.SocketConfig_TProxyMode @@ -755,7 +756,7 @@ func (c *SocketConfig) Build() (*internet.SocketConfig, error) { case "forceipv6v4": dStrategy = internet.DomainStrategy_FORCE_IP64 default: - return nil, newError("unsupported domain strategy: ", c.DomainStrategy) + return nil, errors.New("unsupported domain strategy: ", c.DomainStrategy) } return &internet.SocketConfig{ @@ -817,34 +818,34 @@ func (c *StreamConfig) Build() (*internet.StreamConfig, error) { } ts, err := tlsSettings.Build() if err != nil { - return nil, newError("Failed to build TLS config.").Base(err) + return nil, errors.New("Failed to build TLS config.").Base(err) } tm := serial.ToTypedMessage(ts) config.SecuritySettings = append(config.SecuritySettings, tm) config.SecurityType = tm.Type case "reality": if config.ProtocolName != "tcp" && config.ProtocolName != "http" && config.ProtocolName != "grpc" && config.ProtocolName != "domainsocket" { - return nil, newError("REALITY only supports TCP, H2, gRPC and DomainSocket for now.") + return nil, errors.New("REALITY only supports TCP, H2, gRPC and DomainSocket for now.") } if c.REALITYSettings == nil { - return nil, newError(`REALITY: Empty "realitySettings".`) + return nil, errors.New(`REALITY: Empty "realitySettings".`) } ts, err := c.REALITYSettings.Build() if err != nil { - return nil, newError("Failed to build REALITY config.").Base(err) + return nil, errors.New("Failed to build REALITY config.").Base(err) } tm := serial.ToTypedMessage(ts) config.SecuritySettings = append(config.SecuritySettings, tm) config.SecurityType = tm.Type case "xtls": - return nil, newError(`Please use VLESS flow "xtls-rprx-vision" with TLS or REALITY.`) + return nil, errors.New(`Please use VLESS flow "xtls-rprx-vision" with TLS or REALITY.`) default: - return nil, newError(`Unknown security "` + c.Security + `".`) + return nil, errors.New(`Unknown security "` + c.Security + `".`) } if c.TCPSettings != nil { ts, err := c.TCPSettings.Build() if err != nil { - return nil, newError("Failed to build TCP config.").Base(err) + return nil, errors.New("Failed to build TCP config.").Base(err) } config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{ ProtocolName: "tcp", @@ -854,7 +855,7 @@ func (c *StreamConfig) Build() (*internet.StreamConfig, error) { if c.KCPSettings != nil { ts, err := c.KCPSettings.Build() if err != nil { - return nil, newError("Failed to build mKCP config.").Base(err) + return nil, errors.New("Failed to build mKCP config.").Base(err) } config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{ ProtocolName: "mkcp", @@ -864,7 +865,7 @@ func (c *StreamConfig) Build() (*internet.StreamConfig, error) { if c.WSSettings != nil { ts, err := c.WSSettings.Build() if err != nil { - return nil, newError("Failed to build WebSocket config.").Base(err) + return nil, errors.New("Failed to build WebSocket config.").Base(err) } config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{ ProtocolName: "websocket", @@ -874,7 +875,7 @@ func (c *StreamConfig) Build() (*internet.StreamConfig, error) { if c.HTTPSettings != nil { ts, err := c.HTTPSettings.Build() if err != nil { - return nil, newError("Failed to build HTTP config.").Base(err) + return nil, errors.New("Failed to build HTTP config.").Base(err) } config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{ ProtocolName: "http", @@ -884,7 +885,7 @@ func (c *StreamConfig) Build() (*internet.StreamConfig, error) { if c.DSSettings != nil { ds, err := c.DSSettings.Build() if err != nil { - return nil, newError("Failed to build DomainSocket config.").Base(err) + return nil, errors.New("Failed to build DomainSocket config.").Base(err) } config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{ ProtocolName: "domainsocket", @@ -894,7 +895,7 @@ func (c *StreamConfig) Build() (*internet.StreamConfig, error) { if c.QUICSettings != nil { qs, err := c.QUICSettings.Build() if err != nil { - return nil, newError("Failed to build QUIC config").Base(err) + return nil, errors.New("Failed to build QUIC config").Base(err) } config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{ ProtocolName: "quic", @@ -907,7 +908,7 @@ func (c *StreamConfig) Build() (*internet.StreamConfig, error) { if c.GRPCConfig != nil { gs, err := c.GRPCConfig.Build() if err != nil { - return nil, newError("Failed to build gRPC config.").Base(err) + return nil, errors.New("Failed to build gRPC config.").Base(err) } config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{ ProtocolName: "grpc", @@ -917,7 +918,7 @@ func (c *StreamConfig) Build() (*internet.StreamConfig, error) { if c.HTTPUPGRADESettings != nil { hs, err := c.HTTPUPGRADESettings.Build() if err != nil { - return nil, newError("Failed to build HttpUpgrade config.").Base(err) + return nil, errors.New("Failed to build HttpUpgrade config.").Base(err) } config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{ ProtocolName: "httpupgrade", @@ -927,7 +928,7 @@ func (c *StreamConfig) Build() (*internet.StreamConfig, error) { if c.SplitHTTPSettings != nil { hs, err := c.SplitHTTPSettings.Build() if err != nil { - return nil, newError("Failed to build SplitHTTP config.").Base(err) + return nil, errors.New("Failed to build SplitHTTP config.").Base(err) } config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{ ProtocolName: "splithttp", @@ -937,7 +938,7 @@ func (c *StreamConfig) Build() (*internet.StreamConfig, error) { if c.SocketSettings != nil { ss, err := c.SocketSettings.Build() if err != nil { - return nil, newError("Failed to build sockopt").Base(err) + return nil, errors.New("Failed to build sockopt").Base(err) } config.SocketSettings = ss } @@ -954,7 +955,7 @@ type ProxyConfig struct { // Build implements Buildable. func (v *ProxyConfig) Build() (*internet.ProxyConfig, error) { if v.Tag == "" { - return nil, newError("Proxy tag is not set.") + return nil, errors.New("Proxy tag is not set.") } return &internet.ProxyConfig{ Tag: v.Tag, diff --git a/xray-core/infra/conf/trojan.go b/xray-core/infra/conf/trojan.go index 6bc2385f74..13a1df7365 100644 --- a/xray-core/infra/conf/trojan.go +++ b/xray-core/infra/conf/trojan.go @@ -8,6 +8,7 @@ import ( "strings" "syscall" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/protocol" "github.com/xtls/xray-core/common/serial" @@ -33,7 +34,7 @@ type TrojanClientConfig struct { // Build implements Buildable func (c *TrojanClientConfig) Build() (proto.Message, error) { if len(c.Servers) == 0 { - return nil, newError("0 Trojan server configured.") + return nil, errors.New("0 Trojan server configured.") } config := &trojan.ClientConfig{ @@ -42,16 +43,16 @@ func (c *TrojanClientConfig) Build() (proto.Message, error) { for idx, rec := range c.Servers { if rec.Address == nil { - return nil, newError("Trojan server address is not set.") + return nil, errors.New("Trojan server address is not set.") } if rec.Port == 0 { - return nil, newError("Invalid Trojan port.") + return nil, errors.New("Invalid Trojan port.") } if rec.Password == "" { - return nil, newError("Trojan password is not specified.") + return nil, errors.New("Trojan password is not specified.") } if rec.Flow != "" { - return nil, newError(`Trojan doesn't support "flow" anymore.`) + return nil, errors.New(`Trojan doesn't support "flow" anymore.`) } config.Server[idx] = &protocol.ServerEndpoint{ @@ -105,7 +106,7 @@ func (c *TrojanServerConfig) Build() (proto.Message, error) { for idx, rawUser := range c.Clients { if rawUser.Flow != "" { - return nil, newError(`Trojan doesn't support "flow" anymore.`) + return nil, errors.New(`Trojan doesn't support "flow" anymore.`) } config.Users[idx] = &protocol.User{ @@ -118,7 +119,7 @@ func (c *TrojanServerConfig) Build() (proto.Message, error) { } if c.Fallback != nil { - return nil, newError(`Trojan settings: please use "fallbacks":[{}] instead of "fallback":{}`) + return nil, errors.New(`Trojan settings: please use "fallbacks":[{}] instead of "fallback":{}`) } for _, fb := range c.Fallbacks { var i uint16 @@ -140,11 +141,11 @@ func (c *TrojanServerConfig) Build() (proto.Message, error) { for _, fb := range config.Fallbacks { /* if fb.Alpn == "h2" && fb.Path != "" { - return nil, newError(`Trojan fallbacks: "alpn":"h2" doesn't support "path"`) + return nil, errors.New(`Trojan fallbacks: "alpn":"h2" doesn't support "path"`) } */ if fb.Path != "" && fb.Path[0] != '/' { - return nil, newError(`Trojan fallbacks: "path" must be empty or start with "/"`) + return nil, errors.New(`Trojan fallbacks: "path" must be empty or start with "/"`) } if fb.Type == "" && fb.Dest != "" { if fb.Dest == "serve-ws-none" { @@ -166,10 +167,10 @@ func (c *TrojanServerConfig) Build() (proto.Message, error) { } } if fb.Type == "" { - return nil, newError(`Trojan fallbacks: please fill in a valid value for every "dest"`) + return nil, errors.New(`Trojan fallbacks: please fill in a valid value for every "dest"`) } if fb.Xver > 2 { - return nil, newError(`Trojan fallbacks: invalid PROXY protocol version, "xver" only accepts 0, 1, 2`) + return nil, errors.New(`Trojan fallbacks: invalid PROXY protocol version, "xver" only accepts 0, 1, 2`) } } diff --git a/xray-core/infra/conf/vless.go b/xray-core/infra/conf/vless.go index 9d2935555b..e9517614e3 100644 --- a/xray-core/infra/conf/vless.go +++ b/xray-core/infra/conf/vless.go @@ -8,6 +8,7 @@ import ( "strings" "syscall" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/protocol" "github.com/xtls/xray-core/common/serial" @@ -41,11 +42,11 @@ func (c *VLessInboundConfig) Build() (proto.Message, error) { for idx, rawUser := range c.Clients { user := new(protocol.User) if err := json.Unmarshal(rawUser, user); err != nil { - return nil, newError(`VLESS clients: invalid user`).Base(err) + return nil, errors.New(`VLESS clients: invalid user`).Base(err) } account := new(vless.Account) if err := json.Unmarshal(rawUser, account); err != nil { - return nil, newError(`VLESS clients: invalid user`).Base(err) + return nil, errors.New(`VLESS clients: invalid user`).Base(err) } u, err := uuid.ParseString(account.Id) @@ -57,11 +58,11 @@ func (c *VLessInboundConfig) Build() (proto.Message, error) { switch account.Flow { case "", vless.XRV: default: - return nil, newError(`VLESS clients: "flow" doesn't support "` + account.Flow + `" in this version`) + return nil, errors.New(`VLESS clients: "flow" doesn't support "` + account.Flow + `" in this version`) } if account.Encryption != "" { - return nil, newError(`VLESS clients: "encryption" should not in inbound settings`) + return nil, errors.New(`VLESS clients: "encryption" should not in inbound settings`) } user.Account = serial.ToTypedMessage(account) @@ -69,12 +70,12 @@ func (c *VLessInboundConfig) Build() (proto.Message, error) { } if c.Decryption != "none" { - return nil, newError(`VLESS settings: please add/set "decryption":"none" to every settings`) + return nil, errors.New(`VLESS settings: please add/set "decryption":"none" to every settings`) } config.Decryption = c.Decryption if c.Fallback != nil { - return nil, newError(`VLESS settings: please use "fallbacks":[{}] instead of "fallback":{}`) + return nil, errors.New(`VLESS settings: please use "fallbacks":[{}] instead of "fallback":{}`) } for _, fb := range c.Fallbacks { var i uint16 @@ -96,11 +97,11 @@ func (c *VLessInboundConfig) Build() (proto.Message, error) { for _, fb := range config.Fallbacks { /* if fb.Alpn == "h2" && fb.Path != "" { - return nil, newError(`VLESS fallbacks: "alpn":"h2" doesn't support "path"`) + return nil, errors.New(`VLESS fallbacks: "alpn":"h2" doesn't support "path"`) } */ if fb.Path != "" && fb.Path[0] != '/' { - return nil, newError(`VLESS fallbacks: "path" must be empty or start with "/"`) + return nil, errors.New(`VLESS fallbacks: "path" must be empty or start with "/"`) } if fb.Type == "" && fb.Dest != "" { if fb.Dest == "serve-ws-none" { @@ -122,10 +123,10 @@ func (c *VLessInboundConfig) Build() (proto.Message, error) { } } if fb.Type == "" { - return nil, newError(`VLESS fallbacks: please fill in a valid value for every "dest"`) + return nil, errors.New(`VLESS fallbacks: please fill in a valid value for every "dest"`) } if fb.Xver > 2 { - return nil, newError(`VLESS fallbacks: invalid PROXY protocol version, "xver" only accepts 0, 1, 2`) + return nil, errors.New(`VLESS fallbacks: invalid PROXY protocol version, "xver" only accepts 0, 1, 2`) } } @@ -147,15 +148,15 @@ func (c *VLessOutboundConfig) Build() (proto.Message, error) { config := new(outbound.Config) if len(c.Vnext) == 0 { - return nil, newError(`VLESS settings: "vnext" is empty`) + return nil, errors.New(`VLESS settings: "vnext" is empty`) } config.Vnext = make([]*protocol.ServerEndpoint, len(c.Vnext)) for idx, rec := range c.Vnext { if rec.Address == nil { - return nil, newError(`VLESS vnext: "address" is not set`) + return nil, errors.New(`VLESS vnext: "address" is not set`) } if len(rec.Users) == 0 { - return nil, newError(`VLESS vnext: "users" is empty`) + return nil, errors.New(`VLESS vnext: "users" is empty`) } spec := &protocol.ServerEndpoint{ Address: rec.Address.Build(), @@ -165,11 +166,11 @@ func (c *VLessOutboundConfig) Build() (proto.Message, error) { for idx, rawUser := range rec.Users { user := new(protocol.User) if err := json.Unmarshal(rawUser, user); err != nil { - return nil, newError(`VLESS users: invalid user`).Base(err) + return nil, errors.New(`VLESS users: invalid user`).Base(err) } account := new(vless.Account) if err := json.Unmarshal(rawUser, account); err != nil { - return nil, newError(`VLESS users: invalid user`).Base(err) + return nil, errors.New(`VLESS users: invalid user`).Base(err) } u, err := uuid.ParseString(account.Id) @@ -181,11 +182,11 @@ func (c *VLessOutboundConfig) Build() (proto.Message, error) { switch account.Flow { case "", vless.XRV, vless.XRV + "-udp443": default: - return nil, newError(`VLESS users: "flow" doesn't support "` + account.Flow + `" in this version`) + return nil, errors.New(`VLESS users: "flow" doesn't support "` + account.Flow + `" in this version`) } if account.Encryption != "none" { - return nil, newError(`VLESS users: please add/set "encryption":"none" for every user`) + return nil, errors.New(`VLESS users: please add/set "encryption":"none" for every user`) } user.Account = serial.ToTypedMessage(account) diff --git a/xray-core/infra/conf/vmess.go b/xray-core/infra/conf/vmess.go index ba31935636..23eb694838 100644 --- a/xray-core/infra/conf/vmess.go +++ b/xray-core/infra/conf/vmess.go @@ -4,6 +4,7 @@ import ( "encoding/json" "strings" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/protocol" "github.com/xtls/xray-core/common/serial" "github.com/xtls/xray-core/common/uuid" @@ -96,11 +97,11 @@ func (c *VMessInboundConfig) Build() (proto.Message, error) { for idx, rawData := range c.Users { user := new(protocol.User) if err := json.Unmarshal(rawData, user); err != nil { - return nil, newError("invalid VMess user").Base(err) + return nil, errors.New("invalid VMess user").Base(err) } account := new(VMessAccount) if err := json.Unmarshal(rawData, account); err != nil { - return nil, newError("invalid VMess user").Base(err) + return nil, errors.New("invalid VMess user").Base(err) } u, err := uuid.ParseString(account.ID) @@ -131,15 +132,15 @@ func (c *VMessOutboundConfig) Build() (proto.Message, error) { config := new(outbound.Config) if len(c.Receivers) == 0 { - return nil, newError("0 VMess receiver configured") + return nil, errors.New("0 VMess receiver configured") } serverSpecs := make([]*protocol.ServerEndpoint, len(c.Receivers)) for idx, rec := range c.Receivers { if len(rec.Users) == 0 { - return nil, newError("0 user configured for VMess outbound") + return nil, errors.New("0 user configured for VMess outbound") } if rec.Address == nil { - return nil, newError("address is not set in VMess outbound config") + return nil, errors.New("address is not set in VMess outbound config") } spec := &protocol.ServerEndpoint{ Address: rec.Address.Build(), @@ -148,11 +149,11 @@ func (c *VMessOutboundConfig) Build() (proto.Message, error) { for _, rawUser := range rec.Users { user := new(protocol.User) if err := json.Unmarshal(rawUser, user); err != nil { - return nil, newError("invalid VMess user").Base(err) + return nil, errors.New("invalid VMess user").Base(err) } account := new(VMessAccount) if err := json.Unmarshal(rawUser, account); err != nil { - return nil, newError("invalid VMess user").Base(err) + return nil, errors.New("invalid VMess user").Base(err) } u, err := uuid.ParseString(account.ID) diff --git a/xray-core/infra/conf/wireguard.go b/xray-core/infra/conf/wireguard.go index adf5184196..d06bf6890e 100644 --- a/xray-core/infra/conf/wireguard.go +++ b/xray-core/infra/conf/wireguard.go @@ -1,10 +1,12 @@ package conf import ( + "context" "encoding/base64" "encoding/hex" "strings" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/proxy/wireguard" "google.golang.org/protobuf/proto" ) @@ -97,7 +99,7 @@ func (c *WireGuardConfig) Build() (proto.Message, error) { config.NumWorkers = c.NumWorkers if len(c.Reserved) != 0 && len(c.Reserved) != 3 { - return nil, newError(`"reserved" should be empty or 3 bytes`) + return nil, errors.New(`"reserved" should be empty or 3 bytes`) } config.Reserved = c.Reserved @@ -113,19 +115,19 @@ func (c *WireGuardConfig) Build() (proto.Message, error) { case "forceipv6v4": config.DomainStrategy = wireguard.DeviceConfig_FORCE_IP64 default: - return nil, newError("unsupported domain strategy: ", c.DomainStrategy) + return nil, errors.New("unsupported domain strategy: ", c.DomainStrategy) } config.IsClient = c.IsClient if c.KernelMode != nil { config.KernelMode = *c.KernelMode if config.KernelMode && !wireguard.KernelTunSupported() { - newError("kernel mode is not supported on your OS or permission is insufficient").AtWarning().WriteToLog() + errors.LogWarning(context.Background(), "kernel mode is not supported on your OS or permission is insufficient") } } else { config.KernelMode = wireguard.KernelTunSupported() if config.KernelMode { - newError("kernel mode is enabled as it's supported and permission is sufficient").AtDebug().WriteToLog() + errors.LogDebug(context.Background(), "kernel mode is enabled as it's supported and permission is sufficient") } } @@ -153,5 +155,5 @@ func ParseWireGuardKey(str string) (string, error) { return hex.EncodeToString(dat), nil } - return "", newError("failed to deserialize key").Base(err) + return "", errors.New("failed to deserialize key").Base(err) } diff --git a/xray-core/infra/conf/xray.go b/xray-core/infra/conf/xray.go index 5e1adcbc6e..29616ef342 100644 --- a/xray-core/infra/conf/xray.go +++ b/xray-core/infra/conf/xray.go @@ -1,6 +1,7 @@ package conf import ( + "context" "encoding/json" "fmt" "log" @@ -11,6 +12,7 @@ import ( "github.com/xtls/xray-core/app/dispatcher" "github.com/xtls/xray-core/app/proxyman" "github.com/xtls/xray-core/app/stats" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/serial" core "github.com/xtls/xray-core/core" @@ -55,7 +57,7 @@ func toProtocolList(s []string) ([]proxyman.KnownProtocols, error) { case "https", "tls", "ssl": kp = append(kp, proxyman.KnownProtocols_TLS) default: - return nil, newError("Unknown protocol: ", p) + return nil, errors.New("Unknown protocol: ", p) } } return kp, nil @@ -86,7 +88,7 @@ func (c *SniffingConfig) Build() (*proxyman.SniffingConfig, error) { case "fakedns+others": p = append(p, "fakedns+others") default: - return nil, newError("unknown protocol: ", protocol) + return nil, errors.New("unknown protocol: ", protocol) } } } @@ -121,7 +123,7 @@ func (m *MuxConfig) Build() (*proxyman.MultiplexingConfig, error) { m.XudpProxyUDP443 = "reject" case "reject", "allow", "skip": default: - return nil, newError(`unknown "xudpProxyUDP443": `, m.XudpProxyUDP443) + return nil, errors.New(`unknown "xudpProxyUDP443": `, m.XudpProxyUDP443) } return &proxyman.MultiplexingConfig{ Enabled: m.Enabled, @@ -148,7 +150,7 @@ func (c *InboundDetourAllocationConfig) Build() (*proxyman.AllocationStrategy, e case "external": config.Type = proxyman.AllocationStrategy_External default: - return nil, newError("unknown allocation strategy: ", c.Strategy) + return nil, errors.New("unknown allocation strategy: ", c.Strategy) } if c.Concurrency != nil { config.Concurrency = &proxyman.AllocationStrategy_AllocationStrategyConcurrency{ @@ -184,7 +186,7 @@ func (c *InboundDetourConfig) Build() (*core.InboundHandlerConfig, error) { if c.ListenOn == nil { // Listen on anyip, must set PortList if c.PortList == nil { - return nil, newError("Listen on AnyIP but no Port(s) set in InboundDetour.") + return nil, errors.New("Listen on AnyIP but no Port(s) set in InboundDetour.") } receiverSettings.PortList = c.PortList.Build() } else { @@ -195,7 +197,7 @@ func (c *InboundDetourConfig) Build() (*core.InboundHandlerConfig, error) { if listenIP { // Listen on specific IP, must set PortList if c.PortList == nil { - return nil, newError("Listen on specific ip without port in InboundDetour.") + return nil, errors.New("Listen on specific ip without port in InboundDetour.") } // Listen on IP:Port receiverSettings.PortList = c.PortList.Build() @@ -205,7 +207,7 @@ func (c *InboundDetourConfig) Build() (*core.InboundHandlerConfig, error) { receiverSettings.PortList = nil } } else { - return nil, newError("unable to listen on domain address: ", c.ListenOn.Domain()) + return nil, errors.New("unable to listen on domain address: ", c.ListenOn.Domain()) } } @@ -224,7 +226,7 @@ func (c *InboundDetourConfig) Build() (*core.InboundHandlerConfig, error) { for _, pr := range c.PortList.Range { fmt.Fprintf(&ports, "%d-%d ", pr.From, pr.To) } - return nil, newError("not enough ports. concurrency = ", concurrency, " ports: ", ports.String()) + return nil, errors.New("not enough ports. concurrency = ", concurrency, " ports: ", ports.String()) } as, err := c.Allocation.Build() @@ -243,14 +245,14 @@ func (c *InboundDetourConfig) Build() (*core.InboundHandlerConfig, error) { if c.SniffingConfig != nil { s, err := c.SniffingConfig.Build() if err != nil { - return nil, newError("failed to build sniffing config").Base(err) + return nil, errors.New("failed to build sniffing config").Base(err) } receiverSettings.SniffingSettings = s } if c.DomainOverride != nil { kp, err := toProtocolList(*c.DomainOverride) if err != nil { - return nil, newError("failed to parse inbound detour config").Base(err) + return nil, errors.New("failed to parse inbound detour config").Base(err) } receiverSettings.DomainOverride = kp } @@ -261,7 +263,7 @@ func (c *InboundDetourConfig) Build() (*core.InboundHandlerConfig, error) { } rawConfig, err := inboundConfigLoader.LoadWithID(settings, c.Protocol) if err != nil { - return nil, newError("failed to load inbound detour config.").Base(err) + return nil, errors.New("failed to load inbound detour config.").Base(err) } if dokodemoConfig, ok := rawConfig.(*DokodemoConfig); ok { receiverSettings.ReceiveOriginalDestination = dokodemoConfig.Redirect @@ -293,7 +295,7 @@ func (c *OutboundDetourConfig) checkChainProxyConfig() error { return nil } if len(c.ProxySettings.Tag) > 0 && len(c.StreamSetting.SocketSettings.DialerProxy) > 0 { - return newError("proxySettings.tag is conflicted with sockopt.dialerProxy").AtWarning() + return errors.New("proxySettings.tag is conflicted with sockopt.dialerProxy").AtWarning() } return nil } @@ -312,7 +314,7 @@ func (c *OutboundDetourConfig) Build() (*core.OutboundHandlerConfig, error) { senderSettings.ViaCidr = strings.Split(*c.SendThrough, "/")[1] } else { if address.Family().IsDomain() { - return nil, newError("unable to send through: " + address.String()) + return nil, errors.New("unable to send through: " + address.String()) } } senderSettings.Via = address.Build() @@ -329,7 +331,7 @@ func (c *OutboundDetourConfig) Build() (*core.OutboundHandlerConfig, error) { if c.ProxySettings != nil { ps, err := c.ProxySettings.Build() if err != nil { - return nil, newError("invalid outbound detour proxy settings.").Base(err) + return nil, errors.New("invalid outbound detour proxy settings.").Base(err) } if ps.TransportLayerProxy { if senderSettings.StreamSettings != nil { @@ -349,7 +351,7 @@ func (c *OutboundDetourConfig) Build() (*core.OutboundHandlerConfig, error) { if c.MuxSettings != nil { ms, err := c.MuxSettings.Build() if err != nil { - return nil, newError("failed to build Mux config.").Base(err) + return nil, errors.New("failed to build Mux config.").Base(err) } senderSettings.MultiplexSettings = ms } @@ -360,7 +362,7 @@ func (c *OutboundDetourConfig) Build() (*core.OutboundHandlerConfig, error) { } rawConfig, err := outboundConfigLoader.LoadWithID(settings, c.Protocol) if err != nil { - return nil, newError("failed to parse to outbound detour config.").Base(err) + return nil, errors.New("failed to parse to outbound detour config.").Base(err) } ts, err := rawConfig.(Buildable).Build() if err != nil { @@ -505,11 +507,11 @@ func (c *Config) Override(o *Config, fn string) { for i := range o.InboundConfigs { if idx := c.findInboundTag(o.InboundConfigs[i].Tag); idx > -1 { c.InboundConfigs[idx] = o.InboundConfigs[i] - newError("[", fn, "] updated inbound with tag: ", o.InboundConfigs[i].Tag).AtInfo().WriteToLog() + errors.LogInfo(context.Background(), "[", fn, "] updated inbound with tag: ", o.InboundConfigs[i].Tag) } else { c.InboundConfigs = append(c.InboundConfigs, o.InboundConfigs[i]) - newError("[", fn, "] appended inbound with tag: ", o.InboundConfigs[i].Tag).AtInfo().WriteToLog() + errors.LogInfo(context.Background(), "[", fn, "] appended inbound with tag: ", o.InboundConfigs[i].Tag) } } @@ -521,14 +523,14 @@ func (c *Config) Override(o *Config, fn string) { for i := range o.OutboundConfigs { if idx := c.findOutboundTag(o.OutboundConfigs[i].Tag); idx > -1 { c.OutboundConfigs[idx] = o.OutboundConfigs[i] - newError("[", fn, "] updated outbound with tag: ", o.OutboundConfigs[i].Tag).AtInfo().WriteToLog() + errors.LogInfo(context.Background(), "[", fn, "] updated outbound with tag: ", o.OutboundConfigs[i].Tag) } else { if strings.Contains(strings.ToLower(fn), "tail") { c.OutboundConfigs = append(c.OutboundConfigs, o.OutboundConfigs[i]) - newError("[", fn, "] appended outbound with tag: ", o.OutboundConfigs[i].Tag).AtInfo().WriteToLog() + errors.LogInfo(context.Background(), "[", fn, "] appended outbound with tag: ", o.OutboundConfigs[i].Tag) } else { outboundPrepends = append(outboundPrepends, o.OutboundConfigs[i]) - newError("[", fn, "] prepend outbound with tag: ", o.OutboundConfigs[i].Tag).AtInfo().WriteToLog() + errors.LogInfo(context.Background(), "[", fn, "] prepend outbound with tag: ", o.OutboundConfigs[i].Tag) } } } @@ -619,7 +621,7 @@ func (c *Config) Build() (*core.Config, error) { if c.DNSConfig != nil { dnsApp, err := c.DNSConfig.Build() if err != nil { - return nil, newError("failed to parse DNS config").Base(err) + return nil, errors.New("failed to parse DNS config").Base(err) } config.App = append(config.App, serial.ToTypedMessage(dnsApp)) } diff --git a/xray-core/main/commands/all/convert.go b/xray-core/main/commands/all/convert.go index 2ed25a1351..eab66d1445 100644 --- a/xray-core/main/commands/all/convert.go +++ b/xray-core/main/commands/all/convert.go @@ -12,6 +12,7 @@ import ( "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/infra/conf" "github.com/xtls/xray-core/infra/conf/serial" "github.com/xtls/xray-core/main/commands/base" @@ -92,11 +93,11 @@ func loadArg(arg string) (out io.Reader, err error) { func FetchHTTPContent(target string) ([]byte, error) { parsedTarget, err := url.Parse(target) if err != nil { - return nil, newError("invalid URL: ", target).Base(err) + return nil, errors.New("invalid URL: ", target).Base(err) } if s := strings.ToLower(parsedTarget.Scheme); s != "http" && s != "https" { - return nil, newError("invalid scheme: ", parsedTarget.Scheme) + return nil, errors.New("invalid scheme: ", parsedTarget.Scheme) } client := &http.Client{ @@ -108,17 +109,17 @@ func FetchHTTPContent(target string) ([]byte, error) { Close: true, }) if err != nil { - return nil, newError("failed to dial to ", target).Base(err) + return nil, errors.New("failed to dial to ", target).Base(err) } defer resp.Body.Close() if resp.StatusCode != 200 { - return nil, newError("unexpected HTTP status code: ", resp.StatusCode) + return nil, errors.New("unexpected HTTP status code: ", resp.StatusCode) } content, err := buf.ReadAllToBytes(resp.Body) if err != nil { - return nil, newError("failed to read HTTP response").Base(err) + return nil, errors.New("failed to read HTTP response").Base(err) } return content, nil diff --git a/xray-core/main/commands/all/errors.generated.go b/xray-core/main/commands/all/errors.generated.go deleted file mode 100644 index ff138a8a2e..0000000000 --- a/xray-core/main/commands/all/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package all - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/main/confloader/confloader.go b/xray-core/main/confloader/confloader.go index 80b3b306bf..315c500e24 100644 --- a/xray-core/main/confloader/confloader.go +++ b/xray-core/main/confloader/confloader.go @@ -1,8 +1,11 @@ package confloader import ( + "context" "io" "os" + + "github.com/xtls/xray-core/common/errors" ) type ( @@ -19,7 +22,7 @@ var ( // actual work is in external module func LoadConfig(file string) (io.Reader, error) { if EffectiveConfigFileLoader == nil { - newError("external config module not loaded, reading from stdin").AtInfo().WriteToLog() + errors.LogInfo(context.Background(), "external config module not loaded, reading from stdin") return os.Stdin, nil } return EffectiveConfigFileLoader(file) @@ -29,7 +32,7 @@ func LoadConfig(file string) (io.Reader, error) { // the actual work also in external module func LoadExtConfig(files []string, reader io.Reader) (io.Reader, error) { if EffectiveExtConfigLoader == nil { - return nil, newError("external config module not loaded").AtError() + return nil, errors.New("external config module not loaded").AtError() } return EffectiveExtConfigLoader(files, reader) diff --git a/xray-core/main/confloader/errors.generated.go b/xray-core/main/confloader/errors.generated.go deleted file mode 100644 index 1c234856bb..0000000000 --- a/xray-core/main/confloader/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package confloader - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/main/confloader/external/errors.generated.go b/xray-core/main/confloader/external/errors.generated.go deleted file mode 100644 index 992674b746..0000000000 --- a/xray-core/main/confloader/external/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package external - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/main/confloader/external/external.go b/xray-core/main/confloader/external/external.go index 20afa141ad..1e349ebfe6 100644 --- a/xray-core/main/confloader/external/external.go +++ b/xray-core/main/confloader/external/external.go @@ -12,6 +12,7 @@ import ( "time" "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/platform/ctlcmd" "github.com/xtls/xray-core/main/confloader" ) @@ -39,11 +40,11 @@ func ConfigLoader(arg string) (out io.Reader, err error) { func FetchHTTPContent(target string) ([]byte, error) { parsedTarget, err := url.Parse(target) if err != nil { - return nil, newError("invalid URL: ", target).Base(err) + return nil, errors.New("invalid URL: ", target).Base(err) } if s := strings.ToLower(parsedTarget.Scheme); s != "http" && s != "https" { - return nil, newError("invalid scheme: ", parsedTarget.Scheme) + return nil, errors.New("invalid scheme: ", parsedTarget.Scheme) } client := &http.Client{ @@ -55,17 +56,17 @@ func FetchHTTPContent(target string) ([]byte, error) { Close: true, }) if err != nil { - return nil, newError("failed to dial to ", target).Base(err) + return nil, errors.New("failed to dial to ", target).Base(err) } defer resp.Body.Close() if resp.StatusCode != 200 { - return nil, newError("unexpected HTTP status code: ", resp.StatusCode) + return nil, errors.New("unexpected HTTP status code: ", resp.StatusCode) } content, err := buf.ReadAllToBytes(resp.Body) if err != nil { - return nil, newError("failed to read HTTP response").Base(err) + return nil, errors.New("failed to read HTTP response").Base(err) } return content, nil diff --git a/xray-core/main/errors.generated.go b/xray-core/main/errors.generated.go deleted file mode 100644 index e898cb5f58..0000000000 --- a/xray-core/main/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package main - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/main/json/errors.generated.go b/xray-core/main/json/errors.generated.go deleted file mode 100644 index 2c1b1452ad..0000000000 --- a/xray-core/main/json/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package json - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/main/json/json.go b/xray-core/main/json/json.go index 2e4168c374..f14b0eec59 100644 --- a/xray-core/main/json/json.go +++ b/xray-core/main/json/json.go @@ -1,10 +1,12 @@ package json import ( + "context" "io" "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/cmdarg" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/core" "github.com/xtls/xray-core/infra/conf" "github.com/xtls/xray-core/infra/conf/serial" @@ -20,14 +22,14 @@ func init() { case cmdarg.Arg: cf := &conf.Config{} for i, arg := range v { - newError("Reading config: ", arg).AtInfo().WriteToLog() + errors.LogInfo(context.Background(), "Reading config: ", arg) r, err := confloader.LoadConfig(arg) if err != nil { - return nil, newError("failed to read config: ", arg).Base(err) + return nil, errors.New("failed to read config: ", arg).Base(err) } c, err := serial.DecodeJSONConfig(r) if err != nil { - return nil, newError("failed to decode config: ", arg).Base(err) + return nil, errors.New("failed to decode config: ", arg).Base(err) } if i == 0 { // This ensure even if the muti-json parser do not support a setting, @@ -41,7 +43,7 @@ func init() { case io.Reader: return serial.LoadJSONConfig(v) default: - return nil, newError("unknow type") + return nil, errors.New("unknow type") } }, })) diff --git a/xray-core/main/run.go b/xray-core/main/run.go index f54d74803b..4134fb6458 100644 --- a/xray-core/main/run.go +++ b/xray-core/main/run.go @@ -15,6 +15,7 @@ import ( "time" "github.com/xtls/xray-core/common/cmdarg" + "github.com/xtls/xray-core/common/errors" clog "github.com/xtls/xray-core/common/log" "github.com/xtls/xray-core/common/platform" "github.com/xtls/xray-core/core" @@ -217,12 +218,12 @@ func startXray() (core.Server, error) { c, err := core.LoadConfig(getConfigFormat(), configFiles) if err != nil { - return nil, newError("failed to load config files: [", configFiles.String(), "]").Base(err) + return nil, errors.New("failed to load config files: [", configFiles.String(), "]").Base(err) } server, err := core.New(c) if err != nil { - return nil, newError("failed to create server").Base(err) + return nil, errors.New("failed to create server").Base(err) } return server, nil diff --git a/xray-core/main/toml/errors.generated.go b/xray-core/main/toml/errors.generated.go deleted file mode 100644 index 0bad202e55..0000000000 --- a/xray-core/main/toml/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package toml - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/main/toml/toml.go b/xray-core/main/toml/toml.go index e52077f331..22e1c3dc86 100644 --- a/xray-core/main/toml/toml.go +++ b/xray-core/main/toml/toml.go @@ -1,10 +1,12 @@ package toml import ( + "context" "io" "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/cmdarg" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/core" "github.com/xtls/xray-core/infra/conf" "github.com/xtls/xray-core/infra/conf/serial" @@ -20,14 +22,14 @@ func init() { case cmdarg.Arg: cf := &conf.Config{} for i, arg := range v { - newError("Reading config: ", arg).AtInfo().WriteToLog() + errors.LogInfo(context.Background(), "Reading config: ", arg) r, err := confloader.LoadConfig(arg) if err != nil { - return nil, newError("failed to read config: ", arg).Base(err) + return nil, errors.New("failed to read config: ", arg).Base(err) } c, err := serial.DecodeTOMLConfig(r) if err != nil { - return nil, newError("failed to decode config: ", arg).Base(err) + return nil, errors.New("failed to decode config: ", arg).Base(err) } if i == 0 { // This ensure even if the muti-json parser do not support a setting, @@ -41,7 +43,7 @@ func init() { case io.Reader: return serial.LoadTOMLConfig(v) default: - return nil, newError("unknow type") + return nil, errors.New("unknow type") } }, })) diff --git a/xray-core/main/yaml/errors.generated.go b/xray-core/main/yaml/errors.generated.go deleted file mode 100644 index c4da8fa963..0000000000 --- a/xray-core/main/yaml/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package yaml - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/main/yaml/yaml.go b/xray-core/main/yaml/yaml.go index 760a5717d4..59bab8fafe 100644 --- a/xray-core/main/yaml/yaml.go +++ b/xray-core/main/yaml/yaml.go @@ -1,10 +1,12 @@ package yaml import ( + "context" "io" "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/cmdarg" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/core" "github.com/xtls/xray-core/infra/conf" "github.com/xtls/xray-core/infra/conf/serial" @@ -20,14 +22,14 @@ func init() { case cmdarg.Arg: cf := &conf.Config{} for i, arg := range v { - newError("Reading config: ", arg).AtInfo().WriteToLog() + errors.LogInfo(context.Background(), "Reading config: ", arg) r, err := confloader.LoadConfig(arg) if err != nil { - return nil, newError("failed to read config: ", arg).Base(err) + return nil, errors.New("failed to read config: ", arg).Base(err) } c, err := serial.DecodeYAMLConfig(r) if err != nil { - return nil, newError("failed to decode config: ", arg).Base(err) + return nil, errors.New("failed to decode config: ", arg).Base(err) } if i == 0 { // This ensure even if the muti-json parser do not support a setting, @@ -41,7 +43,7 @@ func init() { case io.Reader: return serial.LoadYAMLConfig(v) default: - return nil, newError("unknow type") + return nil, errors.New("unknow type") } }, })) diff --git a/xray-core/proxy/blackhole/errors.generated.go b/xray-core/proxy/blackhole/errors.generated.go deleted file mode 100644 index 344f86cbb4..0000000000 --- a/xray-core/proxy/blackhole/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package blackhole - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/proxy/dns/dns.go b/xray-core/proxy/dns/dns.go index 86790f7674..d797ca8602 100644 --- a/xray-core/proxy/dns/dns.go +++ b/xray-core/proxy/dns/dns.go @@ -74,14 +74,14 @@ func parseIPQuery(b []byte) (r bool, domain string, id uint16, qType dnsmessage. var parser dnsmessage.Parser header, err := parser.Start(b) if err != nil { - newError("parser start").Base(err).WriteToLog() + errors.LogInfoInner(context.Background(), err, "parser start") return } id = header.ID q, err := parser.Question() if err != nil { - newError("question").Base(err).WriteToLog() + errors.LogInfoInner(context.Background(), err, "question") return } qType = q.Type @@ -97,9 +97,9 @@ func parseIPQuery(b []byte) (r bool, domain string, id uint16, qType dnsmessage. // Process implements proxy.Outbound. func (h *Handler) Process(ctx context.Context, link *transport.Link, d internet.Dialer) error { outbounds := session.OutboundsFromContext(ctx) - ob := outbounds[len(outbounds) - 1] + ob := outbounds[len(outbounds)-1] if !ob.Target.IsValid() { - return newError("invalid outbound") + return errors.New("invalid outbound") } ob.Name = "dns" @@ -116,7 +116,7 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, d internet. dest.Port = h.server.Port } - newError("handling DNS traffic to ", dest).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "handling DNS traffic to ", dest) conn := &outboundConn{ dialer: func() (stat.Connection, error) { @@ -216,7 +216,7 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, d internet. } if err := task.Run(ctx, request, response); err != nil { - return newError("connection ends").Base(err) + return errors.New("connection ends").Base(err) } return nil @@ -245,7 +245,7 @@ func (h *Handler) handleIPQuery(id uint16, qType dnsmessage.Type, domain string, rcode := dns.RCodeFromError(err) if rcode == 0 && len(ips) == 0 && !errors.AllEqual(dns.ErrEmptyResponse, errors.Cause(err)) { - newError("ip query").Base(err).WriteToLog() + errors.LogInfoInner(context.Background(), err, "ip query") return } @@ -297,14 +297,14 @@ func (h *Handler) handleIPQuery(id uint16, qType dnsmessage.Type, domain string, } msgBytes, err := builder.Finish() if err != nil { - newError("pack message").Base(err).WriteToLog() + errors.LogInfoInner(context.Background(), err, "pack message") b.Release() return } b.Resize(0, int32(len(msgBytes))) if err := writer.WriteMessage(b); err != nil { - newError("write IP answer").Base(err).WriteToLog() + errors.LogInfoInner(context.Background(), err, "write IP answer") } } @@ -332,7 +332,7 @@ func (c *outboundConn) Write(b []byte) (int, error) { if c.conn == nil { if err := c.dial(); err != nil { c.access.Unlock() - newError("failed to dial outbound connection").Base(err).AtWarning().WriteToLog() + errors.LogWarningInner(context.Background(), err, "failed to dial outbound connection") return len(b), nil } } diff --git a/xray-core/proxy/dns/errors.generated.go b/xray-core/proxy/dns/errors.generated.go deleted file mode 100644 index d7375a9b94..0000000000 --- a/xray-core/proxy/dns/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package dns - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/proxy/dokodemo/dokodemo.go b/xray-core/proxy/dokodemo/dokodemo.go index 5a07df5cbe..14ff7c7232 100644 --- a/xray-core/proxy/dokodemo/dokodemo.go +++ b/xray-core/proxy/dokodemo/dokodemo.go @@ -9,6 +9,7 @@ import ( "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/log" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/protocol" @@ -42,7 +43,7 @@ type DokodemoDoor struct { // Init initializes the DokodemoDoor instance with necessary parameters. func (d *DokodemoDoor) Init(config *Config, pm policy.Manager, sockopt *session.Sockopt) error { if (config.NetworkList == nil || len(config.NetworkList.Network) == 0) && len(config.Networks) == 0 { - return newError("no network specified") + return errors.New("no network specified") } d.config = config d.address = config.GetPredefinedAddress() @@ -77,7 +78,7 @@ type hasHandshakeAddressContext interface { // Process implements proxy.Inbound. func (d *DokodemoDoor) Process(ctx context.Context, network net.Network, conn stat.Connection, dispatcher routing.Dispatcher) error { - newError("processing connection from: ", conn.RemoteAddr()).AtDebug().WriteToLog(session.ExportIDToError(ctx)) + errors.LogDebug(ctx, "processing connection from: ", conn.RemoteAddr()) dest := net.Destination{ Network: network, Address: d.address, @@ -88,7 +89,7 @@ func (d *DokodemoDoor) Process(ctx context.Context, network net.Network, conn st if d.config.FollowRedirect { outbounds := session.OutboundsFromContext(ctx) if len(outbounds) > 0 { - ob := outbounds[len(outbounds) - 1] + ob := outbounds[len(outbounds)-1] if ob.Target.IsValid() { dest = ob.Target destinationOverridden = true @@ -103,7 +104,7 @@ func (d *DokodemoDoor) Process(ctx context.Context, network net.Network, conn st } } if !dest.IsValid() || dest.Address == nil { - return newError("unable to get destination") + return errors.New("unable to get destination") } inbound := session.InboundFromContext(ctx) @@ -119,7 +120,7 @@ func (d *DokodemoDoor) Process(ctx context.Context, network net.Network, conn st Status: log.AccessAccepted, Reason: "", }) - newError("received request for ", conn.RemoteAddr()).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "received request for ", conn.RemoteAddr()) plcy := d.policy() ctx, cancel := context.WithCancel(ctx) @@ -132,7 +133,7 @@ func (d *DokodemoDoor) Process(ctx context.Context, network net.Network, conn st ctx = policy.ContextWithBufferPolicy(ctx, plcy.Buffer) link, err := dispatcher.Dispatch(ctx, dest) if err != nil { - return newError("failed to dispatch request").Base(err) + return errors.New("failed to dispatch request").Base(err) } requestCount := int32(1) @@ -150,7 +151,7 @@ func (d *DokodemoDoor) Process(ctx context.Context, network net.Network, conn st reader = buf.NewReader(conn) } if err := buf.Copy(reader, link.Writer, buf.UpdateActivity(timer)); err != nil { - return newError("failed to transport request").Base(err) + return errors.New("failed to transport request").Base(err) } return nil @@ -217,7 +218,7 @@ func (d *DokodemoDoor) Process(ctx context.Context, network net.Network, conn st } }() if err := buf.Copy(tReader, link.Writer, buf.UpdateActivity(timer)); err != nil { - return newError("failed to transport request (TPROXY conn)").Base(err) + return errors.New("failed to transport request (TPROXY conn)").Base(err) } return nil } @@ -229,7 +230,7 @@ func (d *DokodemoDoor) Process(ctx context.Context, network net.Network, conn st defer timer.SetTimeout(plcy.Timeouts.UplinkOnly) if err := buf.Copy(link.Reader, writer, buf.UpdateActivity(timer)); err != nil { - return newError("failed to transport response").Base(err) + return errors.New("failed to transport response").Base(err) } return nil } @@ -239,7 +240,7 @@ func (d *DokodemoDoor) Process(ctx context.Context, network net.Network, conn st }, task.Close(link.Writer)), responseDone); err != nil { common.Interrupt(link.Reader) common.Interrupt(link.Writer) - return newError("connection ends").Base(err) + return errors.New("connection ends").Base(err) } return nil @@ -282,7 +283,7 @@ func (w *PacketWriter) WriteMultiBuffer(mb buf.MultiBuffer) error { w.mark, ) if err != nil { - newError(err).WriteToLog() + errors.LogInfo(context.Background(), err.Error()) b.Release() continue } @@ -290,7 +291,7 @@ func (w *PacketWriter) WriteMultiBuffer(mb buf.MultiBuffer) error { } _, err = conn.WriteTo(b.Bytes(), w.back) if err != nil { - newError(err).WriteToLog() + errors.LogInfo(context.Background(), err.Error()) w.conns[*b.UDP] = nil conn.Close() } diff --git a/xray-core/proxy/dokodemo/errors.generated.go b/xray-core/proxy/dokodemo/errors.generated.go deleted file mode 100644 index cc4fd09ca1..0000000000 --- a/xray-core/proxy/dokodemo/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package dokodemo - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/proxy/errors.generated.go b/xray-core/proxy/errors.generated.go deleted file mode 100644 index 1a64389659..0000000000 --- a/xray-core/proxy/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package proxy - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/proxy/freedom/errors.generated.go b/xray-core/proxy/freedom/errors.generated.go deleted file mode 100644 index 344fbb2fd5..0000000000 --- a/xray-core/proxy/freedom/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package freedom - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/proxy/freedom/freedom.go b/xray-core/proxy/freedom/freedom.go index 29621c0ec8..dcb72b040c 100644 --- a/xray-core/proxy/freedom/freedom.go +++ b/xray-core/proxy/freedom/freedom.go @@ -13,6 +13,7 @@ import ( "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/buf" "github.com/xtls/xray-core/common/dice" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/platform" "github.com/xtls/xray-core/common/retry" @@ -87,7 +88,7 @@ func (h *Handler) resolveIP(ctx context.Context, domain string, localAddr net.Ad } } if err != nil { - newError("failed to get IP address for domain ", domain).Base(err).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfoInner(ctx, err, "failed to get IP address for domain ", domain) } if len(ips) == 0 { return nil @@ -107,9 +108,9 @@ func isValidAddress(addr *net.IPOrDomain) bool { // Process implements proxy.Outbound. func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer internet.Dialer) error { outbounds := session.OutboundsFromContext(ctx) - ob := outbounds[len(outbounds) - 1] + ob := outbounds[len(outbounds)-1] if !ob.Target.IsValid() { - return newError("target not specified.") + return errors.New("target not specified.") } ob.Name = "freedom" ob.CanSpliceCopy = 1 @@ -143,7 +144,7 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte Address: ip, Port: dialDest.Port, } - newError("dialing to ", dialDest).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "dialing to ", dialDest) } else if h.config.forceIP() { return dns.ErrEmptyResponse } @@ -169,10 +170,10 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte return nil }) if err != nil { - return newError("failed to open connection to ", destination).Base(err) + return errors.New("failed to open connection to ", destination).Base(err) } defer conn.Close() - newError("connection opened to ", destination, ", local endpoint ", conn.LocalAddr(), ", remote endpoint ", conn.RemoteAddr()).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "connection opened to ", destination, ", local endpoint ", conn.LocalAddr(), ", remote endpoint ", conn.RemoteAddr()) var newCtx context.Context var newCancel context.CancelFunc @@ -195,8 +196,8 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte var writer buf.Writer if destination.Network == net.Network_TCP { if h.config.Fragment != nil { - newError("FRAGMENT", h.config.Fragment.PacketsFrom, h.config.Fragment.PacketsTo, h.config.Fragment.LengthMin, h.config.Fragment.LengthMax, - h.config.Fragment.IntervalMin, h.config.Fragment.IntervalMax).AtDebug().WriteToLog(session.ExportIDToError(ctx)) + errors.LogDebug(ctx, "FRAGMENT", h.config.Fragment.PacketsFrom, h.config.Fragment.PacketsTo, h.config.Fragment.LengthMin, h.config.Fragment.LengthMax, + h.config.Fragment.IntervalMin, h.config.Fragment.IntervalMax) writer = buf.NewWriter(&FragmentWriter{ fragment: h.config.Fragment, writer: conn, @@ -209,7 +210,7 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte } if err := buf.Copy(input, writer, buf.UpdateActivity(timer)); err != nil { - return newError("failed to process request").Base(err) + return errors.New("failed to process request").Base(err) } return nil @@ -228,7 +229,7 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte } reader := NewPacketReader(conn, UDPOverride) if err := buf.Copy(reader, output, buf.UpdateActivity(timer)); err != nil { - return newError("failed to process response").Base(err) + return errors.New("failed to process response").Base(err) } return nil } @@ -238,7 +239,7 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte } if err := task.Run(ctx, requestDone, task.OnSuccess(responseDone, task.Close(output))); err != nil { - return newError("connection ends").Base(err) + return errors.New("connection ends").Base(err) } return nil diff --git a/xray-core/proxy/http/client.go b/xray-core/proxy/http/client.go index 80a0328a76..862ca418eb 100644 --- a/xray-core/proxy/http/client.go +++ b/xray-core/proxy/http/client.go @@ -14,6 +14,7 @@ import ( "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/buf" "github.com/xtls/xray-core/common/bytespool" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/protocol" "github.com/xtls/xray-core/common/retry" @@ -51,12 +52,12 @@ func NewClient(ctx context.Context, config *ClientConfig) (*Client, error) { for _, rec := range config.Server { s, err := protocol.NewServerSpecFromPB(rec) if err != nil { - return nil, newError("failed to get server spec").Base(err) + return nil, errors.New("failed to get server spec").Base(err) } serverList.AddServer(s) } if serverList.Size() == 0 { - return nil, newError("0 target server") + return nil, errors.New("0 target server") } v := core.MustFromContext(ctx) @@ -70,9 +71,9 @@ func NewClient(ctx context.Context, config *ClientConfig) (*Client, error) { // Process implements proxy.Outbound.Process. We first create a socket tunnel via HTTP CONNECT method, then redirect all inbound traffic to that tunnel. func (c *Client) Process(ctx context.Context, link *transport.Link, dialer internet.Dialer) error { outbounds := session.OutboundsFromContext(ctx) - ob := outbounds[len(outbounds) - 1] + ob := outbounds[len(outbounds)-1] if !ob.Target.IsValid() { - return newError("target not specified.") + return errors.New("target not specified.") } ob.Name = "http" ob.CanSpliceCopy = 2 @@ -80,7 +81,7 @@ func (c *Client) Process(ctx context.Context, link *transport.Link, dialer inter targetAddr := target.NetAddr() if target.Network == net.Network_UDP { - return newError("UDP is not supported by HTTP outbound") + return errors.New("UDP is not supported by HTTP outbound") } var user *protocol.MemoryUser @@ -97,7 +98,7 @@ func (c *Client) Process(ctx context.Context, link *transport.Link, dialer inter header, err := fillRequestHeader(ctx, c.header) if err != nil { - return newError("failed to fill out header").Base(err) + return errors.New("failed to fill out header").Base(err) } if err := retry.ExponentialBackoff(5, 100).On(func() error { @@ -117,12 +118,12 @@ func (c *Client) Process(ctx context.Context, link *transport.Link, dialer inter } return err }); err != nil { - return newError("failed to find an available destination").Base(err) + return errors.New("failed to find an available destination").Base(err) } defer func() { if err := conn.Close(); err != nil { - newError("failed to closed connection").Base(err).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfoInner(ctx, err, "failed to closed connection") } }() @@ -160,7 +161,7 @@ func (c *Client) Process(ctx context.Context, link *transport.Link, dialer inter responseDonePost := task.OnSuccess(responseFunc, task.Close(link.Writer)) if err := task.Run(ctx, requestFunc, responseDonePost); err != nil { - return newError("connection ends").Base(err) + return errors.New("connection ends").Base(err) } return nil @@ -174,10 +175,10 @@ func fillRequestHeader(ctx context.Context, header []*Header) ([]*Header, error) inbound := session.InboundFromContext(ctx) outbounds := session.OutboundsFromContext(ctx) - ob := outbounds[len(outbounds) - 1] + ob := outbounds[len(outbounds)-1] if inbound == nil || ob == nil { - return nil, newError("missing inbound or outbound metadata from context") + return nil, errors.New("missing inbound or outbound metadata from context") } data := struct { @@ -242,7 +243,7 @@ func setUpHTTPTunnel(ctx context.Context, dest net.Destination, target string, u if resp.StatusCode != http.StatusOK { rawConn.Close() - return nil, newError("Proxy responded with non 200 code: " + resp.Status) + return nil, errors.New("Proxy responded with non 200 code: " + resp.Status) } return rawConn, nil } @@ -274,7 +275,7 @@ func setUpHTTPTunnel(ctx context.Context, dest net.Destination, target string, u if resp.StatusCode != http.StatusOK { rawConn.Close() - return nil, newError("Proxy responded with non 200 code: " + resp.Status) + return nil, errors.New("Proxy responded with non 200 code: " + resp.Status) } return newHTTP2Conn(rawConn, pw, resp.Body), nil } @@ -344,7 +345,7 @@ func setUpHTTPTunnel(ctx context.Context, dest net.Destination, target string, u return proxyConn, err default: - return nil, newError("negotiated unsupported application layer protocol: " + nextProto) + return nil, errors.New("negotiated unsupported application layer protocol: " + nextProto) } } diff --git a/xray-core/proxy/http/errors.generated.go b/xray-core/proxy/http/errors.generated.go deleted file mode 100644 index f00481654c..0000000000 --- a/xray-core/proxy/http/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package http - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/proxy/http/server.go b/xray-core/proxy/http/server.go index a7df317dc0..60a0174790 100644 --- a/xray-core/proxy/http/server.go +++ b/xray-core/proxy/http/server.go @@ -94,12 +94,12 @@ func (s *Server) Process(ctx context.Context, network net.Network, conn stat.Con Start: if err := conn.SetReadDeadline(time.Now().Add(s.policy().Timeouts.Handshake)); err != nil { - newError("failed to set read deadline").Base(err).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfoInner(ctx, err, "failed to set read deadline") } request, err := http.ReadRequest(reader) if err != nil { - trace := newError("failed to read http request").Base(err) + trace := errors.New("failed to read http request").Base(err) if errors.Cause(err) != io.EOF && !isTimeout(errors.Cause(err)) { trace.AtWarning() } @@ -116,9 +116,9 @@ Start: } } - newError("request to Method [", request.Method, "] Host [", request.Host, "] with URL [", request.URL, "]").WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "request to Method [", request.Method, "] Host [", request.Host, "] with URL [", request.URL, "]") if err := conn.SetReadDeadline(time.Time{}); err != nil { - newError("failed to clear read deadline").Base(err).WriteToLog(session.ExportIDToError(ctx)) + errors.LogDebugInner(ctx, err, "failed to clear read deadline") } defaultPort := net.Port(80) @@ -131,7 +131,7 @@ Start: } dest, err := http_proto.ParseHost(host, defaultPort) if err != nil { - return newError("malformed proxy host: ", host).AtWarning().Base(err) + return errors.New("malformed proxy host: ", host).AtWarning().Base(err) } ctx = log.ContextWithAccessMessage(ctx, &log.AccessMessage{ From: conn.RemoteAddr(), @@ -160,7 +160,7 @@ Start: func (s *Server) handleConnect(ctx context.Context, _ *http.Request, reader *bufio.Reader, conn stat.Connection, dest net.Destination, dispatcher routing.Dispatcher, inbound *session.Inbound) error { _, err := conn.Write([]byte("HTTP/1.1 200 Connection established\r\n\r\n")) if err != nil { - return newError("failed to write back OK response").Base(err) + return errors.New("failed to write back OK response").Base(err) } plcy := s.policy() @@ -209,13 +209,13 @@ func (s *Server) handleConnect(ctx context.Context, _ *http.Request, reader *buf if err := task.Run(ctx, closeWriter, responseDone); err != nil { common.Interrupt(link.Reader) common.Interrupt(link.Writer) - return newError("connection ends").Base(err) + return errors.New("connection ends").Base(err) } return nil } -var errWaitAnother = newError("keep alive") +var errWaitAnother = errors.New("keep alive") func (s *Server) handlePlainHTTP(ctx context.Context, request *http.Request, writer io.Writer, dest net.Destination, dispatcher routing.Dispatcher) error { if !s.config.AllowTransparent && request.URL.Host == "" { @@ -274,7 +274,7 @@ func (s *Server) handlePlainHTTP(ctx context.Context, request *http.Request, wri requestWriter := buf.NewBufferedWriter(link.Writer) common.Must(requestWriter.SetBuffered(false)) if err := request.Write(requestWriter); err != nil { - return newError("failed to write whole request").Base(err).AtWarning() + return errors.New("failed to write whole request").Base(err).AtWarning() } return nil } @@ -295,7 +295,7 @@ func (s *Server) handlePlainHTTP(ctx context.Context, request *http.Request, wri } defer response.Body.Close() } else { - newError("failed to read response from ", request.Host).Base(err).AtWarning().WriteToLog(session.ExportIDToError(ctx)) + errors.LogWarningInner(ctx, err, "failed to read response from ", request.Host) response = &http.Response{ Status: "Service Unavailable", StatusCode: 503, @@ -311,7 +311,7 @@ func (s *Server) handlePlainHTTP(ctx context.Context, request *http.Request, wri response.Header.Set("Proxy-Connection", "close") } if err := response.Write(writer); err != nil { - return newError("failed to write response").Base(err).AtWarning() + return errors.New("failed to write response").Base(err).AtWarning() } return nil } @@ -319,7 +319,7 @@ func (s *Server) handlePlainHTTP(ctx context.Context, request *http.Request, wri if err := task.Run(ctx, requestDone, responseDone); err != nil { common.Interrupt(link.Reader) common.Interrupt(link.Writer) - return newError("connection ends").Base(err) + return errors.New("connection ends").Base(err) } return result diff --git a/xray-core/proxy/loopback/errors.generated.go b/xray-core/proxy/loopback/errors.generated.go deleted file mode 100644 index 0db02932b6..0000000000 --- a/xray-core/proxy/loopback/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package loopback - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/proxy/loopback/loopback.go b/xray-core/proxy/loopback/loopback.go index f3be5a95d7..e1cac3c630 100644 --- a/xray-core/proxy/loopback/loopback.go +++ b/xray-core/proxy/loopback/loopback.go @@ -5,6 +5,7 @@ import ( "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/net/cnc" "github.com/xtls/xray-core/common/retry" @@ -23,14 +24,14 @@ type Loopback struct { func (l *Loopback) Process(ctx context.Context, link *transport.Link, _ internet.Dialer) error { outbounds := session.OutboundsFromContext(ctx) - ob := outbounds[len(outbounds) - 1] + ob := outbounds[len(outbounds)-1] if !ob.Target.IsValid() { - return newError("target not specified.") + return errors.New("target not specified.") } ob.Name = "loopback" destination := ob.Target - newError("opening connection to ", destination).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "opening connection to ", destination) input := link.Reader output := link.Writer @@ -66,7 +67,7 @@ func (l *Loopback) Process(ctx context.Context, link *transport.Link, _ internet return nil }) if err != nil { - return newError("failed to open connection to ", destination).Base(err) + return errors.New("failed to open connection to ", destination).Base(err) } defer conn.Close() @@ -79,7 +80,7 @@ func (l *Loopback) Process(ctx context.Context, link *transport.Link, _ internet } if err := buf.Copy(input, writer); err != nil { - return newError("failed to process request").Base(err) + return errors.New("failed to process request").Base(err) } return nil @@ -93,14 +94,14 @@ func (l *Loopback) Process(ctx context.Context, link *transport.Link, _ internet reader = buf.NewPacketReader(conn) } if err := buf.Copy(reader, output); err != nil { - return newError("failed to process response").Base(err) + return errors.New("failed to process response").Base(err) } return nil } if err := task.Run(ctx, requestDone, task.OnSuccess(responseDone, task.Close(output))); err != nil { - return newError("connection ends").Base(err) + return errors.New("connection ends").Base(err) } return nil diff --git a/xray-core/proxy/proxy.go b/xray-core/proxy/proxy.go index db92051074..87abd1a2b1 100644 --- a/xray-core/proxy/proxy.go +++ b/xray-core/proxy/proxy.go @@ -102,7 +102,7 @@ type TrafficState struct { // reader link state WithinPaddingBuffers bool ReaderSwitchToDirectCopy bool - RemainingCommand int32 + RemainingCommand int32 RemainingContent int32 RemainingPadding int32 CurrentCommand int @@ -168,7 +168,7 @@ func (w *VisionReader) ReadMultiBuffer() (buf.MultiBuffer, error) { w.trafficState.WithinPaddingBuffers = false w.trafficState.ReaderSwitchToDirectCopy = true } else { - newError("XtlsRead unknown command ", w.trafficState.CurrentCommand, buffer.Len()).WriteToLog(session.ExportIDToError(w.ctx)) + errors.LogInfo(w.ctx, "XtlsRead unknown command ", w.trafficState.CurrentCommand, buffer.Len()) } } if w.trafficState.NumberOfPacketToFilter > 0 { @@ -215,7 +215,7 @@ func (w *VisionWriter) WriteMultiBuffer(mb buf.MultiBuffer) error { w.trafficState.WriterSwitchToDirectCopy = true } var command byte = CommandPaddingContinue - if i == len(mb) - 1 { + if i == len(mb)-1 { command = CommandPaddingEnd if w.trafficState.EnableXtls { command = CommandPaddingDirect @@ -231,7 +231,7 @@ func (w *VisionWriter) WriteMultiBuffer(mb buf.MultiBuffer) error { break } var command byte = CommandPaddingContinue - if i == len(mb) - 1 && !w.trafficState.IsPadding { + if i == len(mb)-1 && !w.trafficState.IsPadding { command = CommandPaddingEnd if w.trafficState.EnableXtls { command = CommandPaddingDirect @@ -274,7 +274,7 @@ func ReshapeMultiBuffer(ctx context.Context, buffer buf.MultiBuffer) buf.MultiBu buffer[i] = nil } buffer = buffer[:0] - newError("ReshapeMultiBuffer ", toPrint).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "ReshapeMultiBuffer ", toPrint) return mb2 } @@ -288,13 +288,13 @@ func XtlsPadding(b *buf.Buffer, command byte, userUUID *[]byte, longPadding bool if contentLen < 900 && longPadding { l, err := rand.Int(rand.Reader, big.NewInt(500)) if err != nil { - newError("failed to generate padding").Base(err).WriteToLog(session.ExportIDToError(ctx)) + errors.LogDebugInner(ctx, err, "failed to generate padding") } paddingLen = int32(l.Int64()) + 900 - contentLen } else { l, err := rand.Int(rand.Reader, big.NewInt(256)) if err != nil { - newError("failed to generate padding").Base(err).WriteToLog(session.ExportIDToError(ctx)) + errors.LogDebugInner(ctx, err, "failed to generate padding") } paddingLen = int32(l.Int64()) } @@ -313,7 +313,7 @@ func XtlsPadding(b *buf.Buffer, command byte, userUUID *[]byte, longPadding bool b = nil } newbuffer.Extend(paddingLen) - newError("XtlsPadding ", contentLen, " ", paddingLen, " ", command).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "XtlsPadding ", contentLen, " ", paddingLen, " ", command) return newbuffer } @@ -338,14 +338,14 @@ func XtlsUnpadding(b *buf.Buffer, s *TrafficState, ctx context.Context) *buf.Buf case 5: s.CurrentCommand = int(data) case 4: - s.RemainingContent = int32(data)<<8 + s.RemainingContent = int32(data) << 8 case 3: s.RemainingContent = s.RemainingContent | int32(data) case 2: - s.RemainingPadding = int32(data)<<8 + s.RemainingPadding = int32(data) << 8 case 1: s.RemainingPadding = s.RemainingPadding | int32(data) - newError("Xtls Unpadding new block, content ", s.RemainingContent, " padding ", s.RemainingPadding, " command ", s.CurrentCommand).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "Xtls Unpadding new block, content ", s.RemainingContent, " padding ", s.RemainingPadding, " command ", s.CurrentCommand) } s.RemainingCommand-- } else if s.RemainingContent > 0 { @@ -404,11 +404,11 @@ func XtlsFilterTls(buffer buf.MultiBuffer, trafficState *TrafficState, ctx conte cipherSuite := b.BytesRange(43+sessionIdLen+1, 43+sessionIdLen+3) trafficState.Cipher = uint16(cipherSuite[0])<<8 | uint16(cipherSuite[1]) } else { - newError("XtlsFilterTls short server hello, tls 1.2 or older? ", b.Len(), " ", trafficState.RemainingServerHello).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "XtlsFilterTls short server hello, tls 1.2 or older? ", b.Len(), " ", trafficState.RemainingServerHello) } } else if bytes.Equal(TlsClientHandShakeStart, startsBytes[:2]) && startsBytes[5] == TlsHandshakeTypeClientHello { trafficState.IsTLS = true - newError("XtlsFilterTls found tls client hello! ", buffer.Len()).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "XtlsFilterTls found tls client hello! ", buffer.Len()) } } if trafficState.RemainingServerHello > 0 { @@ -424,18 +424,18 @@ func XtlsFilterTls(buffer buf.MultiBuffer, trafficState *TrafficState, ctx conte } else if v != "TLS_AES_128_CCM_8_SHA256" { trafficState.EnableXtls = true } - newError("XtlsFilterTls found tls 1.3! ", b.Len(), " ", v).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "XtlsFilterTls found tls 1.3! ", b.Len(), " ", v) trafficState.NumberOfPacketToFilter = 0 return } else if trafficState.RemainingServerHello <= 0 { - newError("XtlsFilterTls found tls 1.2! ", b.Len()).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "XtlsFilterTls found tls 1.2! ", b.Len()) trafficState.NumberOfPacketToFilter = 0 return } - newError("XtlsFilterTls inconclusive server hello ", b.Len(), " ", trafficState.RemainingServerHello).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "XtlsFilterTls inconclusive server hello ", b.Len(), " ", trafficState.RemainingServerHello) } if trafficState.NumberOfPacketToFilter <= 0 { - newError("XtlsFilterTls stop filtering", buffer.Len()).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "XtlsFilterTls stop filtering", buffer.Len()) } } } @@ -505,10 +505,10 @@ func CopyRawConnIfExist(ctx context.Context, readerConn net.Conn, writerConn net } } if splice { - newError("CopyRawConn splice").WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "CopyRawConn splice") statWriter, _ := writer.(*dispatcher.SizeStatWriter) //runtime.Gosched() // necessary - time.Sleep(time.Millisecond) // without this, there will be a rare ssl error for freedom splice + time.Sleep(time.Millisecond) // without this, there will be a rare ssl error for freedom splice timer.SetTimeout(8 * time.Hour) // prevent leak, just in case if inTimer != nil { inTimer.SetTimeout(8 * time.Hour) @@ -545,9 +545,9 @@ func CopyRawConnIfExist(ctx context.Context, readerConn net.Conn, writerConn net } func readV(ctx context.Context, reader buf.Reader, writer buf.Writer, timer signal.ActivityUpdater, readCounter stats.Counter) error { - newError("CopyRawConn readv").WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "CopyRawConn readv") if err := buf.Copy(reader, writer, buf.UpdateActivity(timer), buf.AddToStatCounter(readCounter)); err != nil { - return newError("failed to process response").Base(err) + return errors.New("failed to process response").Base(err) } return nil } diff --git a/xray-core/proxy/shadowsocks/client.go b/xray-core/proxy/shadowsocks/client.go index 8ebe7631b7..c2ad1c1c39 100644 --- a/xray-core/proxy/shadowsocks/client.go +++ b/xray-core/proxy/shadowsocks/client.go @@ -6,6 +6,7 @@ import ( "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/protocol" "github.com/xtls/xray-core/common/retry" @@ -31,12 +32,12 @@ func NewClient(ctx context.Context, config *ClientConfig) (*Client, error) { for _, rec := range config.Server { s, err := protocol.NewServerSpecFromPB(rec) if err != nil { - return nil, newError("failed to parse server spec").Base(err) + return nil, errors.New("failed to parse server spec").Base(err) } serverList.AddServer(s) } if serverList.Size() == 0 { - return nil, newError("0 server") + return nil, errors.New("0 server") } v := core.MustFromContext(ctx) @@ -50,9 +51,9 @@ func NewClient(ctx context.Context, config *ClientConfig) (*Client, error) { // Process implements OutboundHandler.Process(). func (c *Client) Process(ctx context.Context, link *transport.Link, dialer internet.Dialer) error { outbounds := session.OutboundsFromContext(ctx) - ob := outbounds[len(outbounds) - 1] + ob := outbounds[len(outbounds)-1] if !ob.Target.IsValid() { - return newError("target not specified") + return errors.New("target not specified") } ob.Name = "shadowsocks" ob.CanSpliceCopy = 3 @@ -75,9 +76,9 @@ func (c *Client) Process(ctx context.Context, link *transport.Link, dialer inter return nil }) if err != nil { - return newError("failed to find an available destination").AtWarning().Base(err) + return errors.New("failed to find an available destination").AtWarning().Base(err) } - newError("tunneling request to ", destination, " via ", network, ":", server.Destination().NetAddr()).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "tunneling request to ", destination, " via ", network, ":", server.Destination().NetAddr()) defer conn.Close() @@ -95,7 +96,7 @@ func (c *Client) Process(ctx context.Context, link *transport.Link, dialer inter user := server.PickUser() _, ok := user.Account.(*MemoryAccount) if !ok { - return newError("user account is not valid") + return errors.New("user account is not valid") } request.User = user @@ -124,11 +125,11 @@ func (c *Client) Process(ctx context.Context, link *transport.Link, dialer inter bufferedWriter := buf.NewBufferedWriter(buf.NewWriter(conn)) bodyWriter, err := WriteTCPRequest(request, bufferedWriter) if err != nil { - return newError("failed to write request").Base(err) + return errors.New("failed to write request").Base(err) } if err = buf.CopyOnceTimeout(link.Reader, bodyWriter, time.Millisecond*100); err != nil && err != buf.ErrNotTimeoutReader && err != buf.ErrReadTimeout { - return newError("failed to write A request payload").Base(err).AtWarning() + return errors.New("failed to write A request payload").Base(err).AtWarning() } if err := bufferedWriter.SetBuffered(false); err != nil { @@ -151,7 +152,7 @@ func (c *Client) Process(ctx context.Context, link *transport.Link, dialer inter responseDoneAndCloseWriter := task.OnSuccess(responseDone, task.Close(link.Writer)) if err := task.Run(ctx, requestDone, responseDoneAndCloseWriter); err != nil { - return newError("connection ends").Base(err) + return errors.New("connection ends").Base(err) } return nil @@ -168,7 +169,7 @@ func (c *Client) Process(ctx context.Context, link *transport.Link, dialer inter } if err := buf.Copy(link.Reader, writer, buf.UpdateActivity(timer)); err != nil { - return newError("failed to transport all UDP request").Base(err) + return errors.New("failed to transport all UDP request").Base(err) } return nil } @@ -182,14 +183,14 @@ func (c *Client) Process(ctx context.Context, link *transport.Link, dialer inter } if err := buf.Copy(reader, link.Writer, buf.UpdateActivity(timer)); err != nil { - return newError("failed to transport all UDP response").Base(err) + return errors.New("failed to transport all UDP response").Base(err) } return nil } responseDoneAndCloseWriter := task.OnSuccess(responseDone, task.Close(link.Writer)) if err := task.Run(ctx, requestDone, responseDoneAndCloseWriter); err != nil { - return newError("connection ends").Base(err) + return errors.New("connection ends").Base(err) } return nil diff --git a/xray-core/proxy/shadowsocks/config.go b/xray-core/proxy/shadowsocks/config.go index 1b977dede8..396e59be81 100644 --- a/xray-core/proxy/shadowsocks/config.go +++ b/xray-core/proxy/shadowsocks/config.go @@ -12,6 +12,7 @@ import ( "github.com/xtls/xray-core/common/antireplay" "github.com/xtls/xray-core/common/buf" "github.com/xtls/xray-core/common/crypto" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/protocol" "golang.org/x/crypto/chacha20poly1305" "golang.org/x/crypto/hkdf" @@ -25,7 +26,7 @@ type MemoryAccount struct { replayFilter antireplay.GeneralizedReplayFilter } -var ErrIVNotUnique = newError("IV is not unique") +var ErrIVNotUnique = errors.New("IV is not unique") // Equals implements protocol.Account.Equals(). func (a *MemoryAccount) Equals(another protocol.Account) bool { @@ -94,7 +95,7 @@ func (a *Account) getCipher() (Cipher, error) { case CipherType_NONE: return NoneCipher{}, nil default: - return nil, newError("Unsupported cipher.") + return nil, errors.New("Unsupported cipher.") } } @@ -102,7 +103,7 @@ func (a *Account) getCipher() (Cipher, error) { func (a *Account) AsAccount() (protocol.Account, error) { Cipher, err := a.getCipher() if err != nil { - return nil, newError("failed to get cipher").Base(err) + return nil, errors.New("failed to get cipher").Base(err) } return &MemoryAccount{ Cipher: Cipher, @@ -182,7 +183,7 @@ func (c *AEADCipher) EncodePacket(key []byte, b *buf.Buffer) error { func (c *AEADCipher) DecodePacket(key []byte, b *buf.Buffer) error { if b.Len() <= c.IVSize() { - return newError("insufficient data: ", b.Len()) + return errors.New("insufficient data: ", b.Len()) } ivLen := c.IVSize() payloadLen := b.Len() diff --git a/xray-core/proxy/shadowsocks/errors.generated.go b/xray-core/proxy/shadowsocks/errors.generated.go deleted file mode 100644 index dd33902bd7..0000000000 --- a/xray-core/proxy/shadowsocks/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package shadowsocks - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/proxy/shadowsocks/protocol.go b/xray-core/proxy/shadowsocks/protocol.go index 3a0c7e2222..00855c7336 100644 --- a/xray-core/proxy/shadowsocks/protocol.go +++ b/xray-core/proxy/shadowsocks/protocol.go @@ -4,12 +4,13 @@ import ( "crypto/hmac" "crypto/rand" "crypto/sha256" - "errors" + goerrors "errors" "hash/crc32" "io" "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/crypto" "github.com/xtls/xray-core/common/drain" "github.com/xtls/xray-core/common/net" @@ -58,7 +59,7 @@ func ReadTCPSession(validator *Validator, reader io.Reader) (*protocol.RequestHe drainer, errDrain := drain.NewBehaviorSeedLimitedDrainer(int64(behaviorSeed), 16+38, 3266, 64) if errDrain != nil { - return nil, nil, newError("failed to initialize drainer").Base(errDrain) + return nil, nil, errors.New("failed to initialize drainer").Base(errDrain) } var r buf.Reader @@ -67,7 +68,7 @@ func ReadTCPSession(validator *Validator, reader io.Reader) (*protocol.RequestHe if _, err := buffer.ReadFullFrom(reader, 50); err != nil { drainer.AcknowledgeReceive(int(buffer.Len())) - return nil, nil, drain.WithError(drainer, reader, newError("failed to read 50 bytes").Base(err)) + return nil, nil, drain.WithError(drainer, reader, errors.New("failed to read 50 bytes").Base(err)) } bs := buffer.Bytes() @@ -76,10 +77,10 @@ func ReadTCPSession(validator *Validator, reader io.Reader) (*protocol.RequestHe switch err { case ErrNotFound: drainer.AcknowledgeReceive(int(buffer.Len())) - return nil, nil, drain.WithError(drainer, reader, newError("failed to match an user").Base(err)) + return nil, nil, drain.WithError(drainer, reader, errors.New("failed to match an user").Base(err)) case ErrIVNotUnique: drainer.AcknowledgeReceive(int(buffer.Len())) - return nil, nil, drain.WithError(drainer, reader, newError("failed iv check").Base(err)) + return nil, nil, drain.WithError(drainer, reader, errors.New("failed iv check").Base(err)) default: reader = &FullReader{reader, bs[ivLen:]} drainer.AcknowledgeReceive(int(ivLen)) @@ -97,7 +98,7 @@ func ReadTCPSession(validator *Validator, reader io.Reader) (*protocol.RequestHe iv := append([]byte(nil), buffer.BytesTo(ivLen)...) r, err = account.Cipher.NewDecryptionReader(account.Key, iv, reader) if err != nil { - return nil, nil, drain.WithError(drainer, reader, newError("failed to initialize decoding stream").Base(err).AtError()) + return nil, nil, drain.WithError(drainer, reader, errors.New("failed to initialize decoding stream").Base(err).AtError()) } } } @@ -115,7 +116,7 @@ func ReadTCPSession(validator *Validator, reader io.Reader) (*protocol.RequestHe addr, port, err := addrParser.ReadAddressPort(buffer, br) if err != nil { drainer.AcknowledgeReceive(int(buffer.Len())) - return nil, nil, drain.WithError(drainer, reader, newError("failed to read address").Base(err)) + return nil, nil, drain.WithError(drainer, reader, errors.New("failed to read address").Base(err)) } request.Address = addr @@ -123,7 +124,7 @@ func ReadTCPSession(validator *Validator, reader io.Reader) (*protocol.RequestHe if request.Address == nil { drainer.AcknowledgeReceive(int(buffer.Len())) - return nil, nil, drain.WithError(drainer, reader, newError("invalid remote address.")) + return nil, nil, drain.WithError(drainer, reader, errors.New("invalid remote address.")) } return request, br, nil @@ -139,26 +140,26 @@ func WriteTCPRequest(request *protocol.RequestHeader, writer io.Writer) (buf.Wri iv = make([]byte, account.Cipher.IVSize()) common.Must2(rand.Read(iv)) if ivError := account.CheckIV(iv); ivError != nil { - return nil, newError("failed to mark outgoing iv").Base(ivError) + return nil, errors.New("failed to mark outgoing iv").Base(ivError) } if err := buf.WriteAllBytes(writer, iv, nil); err != nil { - return nil, newError("failed to write IV") + return nil, errors.New("failed to write IV") } } w, err := account.Cipher.NewEncryptionWriter(account.Key, iv, writer) if err != nil { - return nil, newError("failed to create encoding stream").Base(err).AtError() + return nil, errors.New("failed to create encoding stream").Base(err).AtError() } header := buf.New() if err := addrParser.WriteAddressPort(header, request.Address, request.Port); err != nil { - return nil, newError("failed to write address").Base(err) + return nil, errors.New("failed to write address").Base(err) } if err := w.WriteMultiBuffer(buf.MultiBuffer{header}); err != nil { - return nil, newError("failed to write header").Base(err) + return nil, errors.New("failed to write header").Base(err) } return w, nil @@ -174,21 +175,21 @@ func ReadTCPResponse(user *protocol.MemoryUser, reader io.Reader) (buf.Reader, e drainer, err := drain.NewBehaviorSeedLimitedDrainer(int64(behaviorSeed), 16+38, 3266, 64) if err != nil { - return nil, newError("failed to initialize drainer").Base(err) + return nil, errors.New("failed to initialize drainer").Base(err) } var iv []byte if account.Cipher.IVSize() > 0 { iv = make([]byte, account.Cipher.IVSize()) if n, err := io.ReadFull(reader, iv); err != nil { - return nil, newError("failed to read IV").Base(err) + return nil, errors.New("failed to read IV").Base(err) } else { // nolint: golint drainer.AcknowledgeReceive(n) } } if ivError := account.CheckIV(iv); ivError != nil { - return nil, drain.WithError(drainer, reader, newError("failed iv check").Base(ivError)) + return nil, drain.WithError(drainer, reader, errors.New("failed iv check").Base(ivError)) } return account.Cipher.NewDecryptionReader(account.Key, iv, reader) @@ -203,10 +204,10 @@ func WriteTCPResponse(request *protocol.RequestHeader, writer io.Writer) (buf.Wr iv = make([]byte, account.Cipher.IVSize()) common.Must2(rand.Read(iv)) if ivError := account.CheckIV(iv); ivError != nil { - return nil, newError("failed to mark outgoing iv").Base(ivError) + return nil, errors.New("failed to mark outgoing iv").Base(ivError) } if err := buf.WriteAllBytes(writer, iv, nil); err != nil { - return nil, newError("failed to write IV.").Base(err) + return nil, errors.New("failed to write IV.").Base(err) } } @@ -224,13 +225,13 @@ func EncodeUDPPacket(request *protocol.RequestHeader, payload []byte) (*buf.Buff } if err := addrParser.WriteAddressPort(buffer, request.Address, request.Port); err != nil { - return nil, newError("failed to write address").Base(err) + return nil, errors.New("failed to write address").Base(err) } buffer.Write(payload) if err := account.Cipher.EncodePacket(account.Key, buffer); err != nil { - return nil, newError("failed to encrypt UDP payload").Base(err) + return nil, errors.New("failed to encrypt UDP payload").Base(err) } return buffer, nil @@ -240,21 +241,21 @@ func DecodeUDPPacket(validator *Validator, payload *buf.Buffer) (*protocol.Reque rawPayload := payload.Bytes() user, _, d, _, err := validator.Get(rawPayload, protocol.RequestCommandUDP) - if errors.Is(err, ErrIVNotUnique) { - return nil, nil, newError("failed iv check").Base(err) + if goerrors.Is(err, ErrIVNotUnique) { + return nil, nil, errors.New("failed iv check").Base(err) } - if errors.Is(err, ErrNotFound) { - return nil, nil, newError("failed to match an user").Base(err) + if goerrors.Is(err, ErrNotFound) { + return nil, nil, errors.New("failed to match an user").Base(err) } if err != nil { - return nil, nil, newError("unexpected error").Base(err) + return nil, nil, errors.New("unexpected error").Base(err) } account, ok := user.Account.(*MemoryAccount) if !ok { - return nil, nil, newError("expected MemoryAccount returned from validator") + return nil, nil, errors.New("expected MemoryAccount returned from validator") } if account.Cipher.IsAEAD() { @@ -266,7 +267,7 @@ func DecodeUDPPacket(validator *Validator, payload *buf.Buffer) (*protocol.Reque copy(iv, payload.BytesTo(account.Cipher.IVSize())) } if err = account.Cipher.DecodePacket(account.Key, payload); err != nil { - return nil, nil, newError("failed to decrypt UDP payload").Base(err) + return nil, nil, errors.New("failed to decrypt UDP payload").Base(err) } } @@ -274,7 +275,7 @@ func DecodeUDPPacket(validator *Validator, payload *buf.Buffer) (*protocol.Reque addr, port, err := addrParser.ReadAddressPort(nil, payload) if err != nil { - return nil, nil, newError("failed to parse address").Base(err) + return nil, nil, errors.New("failed to parse address").Base(err) } request := &protocol.RequestHeader{ diff --git a/xray-core/proxy/shadowsocks/server.go b/xray-core/proxy/shadowsocks/server.go index 8253506a6f..e6135a456e 100644 --- a/xray-core/proxy/shadowsocks/server.go +++ b/xray-core/proxy/shadowsocks/server.go @@ -6,6 +6,7 @@ import ( "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/log" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/protocol" @@ -33,11 +34,11 @@ func NewServer(ctx context.Context, config *ServerConfig) (*Server, error) { for _, user := range config.Users { u, err := user.ToMemoryUser() if err != nil { - return nil, newError("failed to get shadowsocks user").Base(err).AtError() + return nil, errors.New("failed to get shadowsocks user").Base(err).AtError() } if err := validator.Add(u); err != nil { - return nil, newError("failed to add user").Base(err).AtError() + return nil, errors.New("failed to add user").Base(err).AtError() } } @@ -74,14 +75,14 @@ func (s *Server) Process(ctx context.Context, network net.Network, conn stat.Con inbound := session.InboundFromContext(ctx) inbound.Name = "shadowsocks" inbound.CanSpliceCopy = 3 - + switch network { case net.Network_TCP: return s.handleConnection(ctx, conn, dispatcher) case net.Network_UDP: return s.handleUDPPayload(ctx, conn, dispatcher) default: - return newError("unknown network: ", network) + return errors.New("unknown network: ", network) } } @@ -105,7 +106,7 @@ func (s *Server) handleUDPPayload(ctx context.Context, conn stat.Connection, dis data, err := EncodeUDPPacket(request, payload.Bytes()) payload.Release() if err != nil { - newError("failed to encode UDP packet").Base(err).AtWarning().WriteToLog(session.ExportIDToError(ctx)) + errors.LogWarningInner(ctx, err, "failed to encode UDP packet") return } defer data.Release() @@ -140,7 +141,7 @@ func (s *Server) handleUDPPayload(ctx context.Context, conn stat.Connection, dis if err != nil { if inbound.Source.IsValid() { - newError("dropping invalid UDP packet from: ", inbound.Source).Base(err).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfoInner(ctx, err, "dropping invalid UDP packet from: ", inbound.Source) log.Record(&log.AccessMessage{ From: inbound.Source, To: "", @@ -164,7 +165,7 @@ func (s *Server) handleUDPPayload(ctx context.Context, conn stat.Connection, dis Email: request.User.Email, }) } - newError("tunnelling request to ", destination).WriteToLog(session.ExportIDToError(currentPacketCtx)) + errors.LogInfo(ctx, "tunnelling request to ", destination) data.UDP = &destination @@ -183,7 +184,7 @@ func (s *Server) handleUDPPayload(ctx context.Context, conn stat.Connection, dis func (s *Server) handleConnection(ctx context.Context, conn stat.Connection, dispatcher routing.Dispatcher) error { sessionPolicy := s.policyManager.ForLevel(0) if err := conn.SetReadDeadline(time.Now().Add(sessionPolicy.Timeouts.Handshake)); err != nil { - return newError("unable to set read deadline").Base(err).AtWarning() + return errors.New("unable to set read deadline").Base(err).AtWarning() } bufferedReader := buf.BufferedReader{Reader: buf.NewReader(conn)} @@ -195,7 +196,7 @@ func (s *Server) handleConnection(ctx context.Context, conn stat.Connection, dis Status: log.AccessRejected, Reason: err, }) - return newError("failed to create request from: ", conn.RemoteAddr()).Base(err) + return errors.New("failed to create request from: ", conn.RemoteAddr()).Base(err) } conn.SetReadDeadline(time.Time{}) @@ -213,7 +214,7 @@ func (s *Server) handleConnection(ctx context.Context, conn stat.Connection, dis Reason: "", Email: request.User.Email, }) - newError("tunnelling request to ", dest).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "tunnelling request to ", dest) sessionPolicy = s.policyManager.ForLevel(request.User.Level) ctx, cancel := context.WithCancel(ctx) @@ -231,7 +232,7 @@ func (s *Server) handleConnection(ctx context.Context, conn stat.Connection, dis bufferedWriter := buf.NewBufferedWriter(buf.NewWriter(conn)) responseWriter, err := WriteTCPResponse(request, bufferedWriter) if err != nil { - return newError("failed to write response").Base(err) + return errors.New("failed to write response").Base(err) } { @@ -249,7 +250,7 @@ func (s *Server) handleConnection(ctx context.Context, conn stat.Connection, dis } if err := buf.Copy(link.Reader, responseWriter, buf.UpdateActivity(timer)); err != nil { - return newError("failed to transport all TCP response").Base(err) + return errors.New("failed to transport all TCP response").Base(err) } return nil @@ -259,7 +260,7 @@ func (s *Server) handleConnection(ctx context.Context, conn stat.Connection, dis defer timer.SetTimeout(sessionPolicy.Timeouts.DownlinkOnly) if err := buf.Copy(bodyReader, link.Writer, buf.UpdateActivity(timer)); err != nil { - return newError("failed to transport all TCP request").Base(err) + return errors.New("failed to transport all TCP request").Base(err) } return nil @@ -269,7 +270,7 @@ func (s *Server) handleConnection(ctx context.Context, conn stat.Connection, dis if err := task.Run(ctx, requestDoneAndCloseWriter, responseDone); err != nil { common.Interrupt(link.Reader) common.Interrupt(link.Writer) - return newError("connection ends").Base(err) + return errors.New("connection ends").Base(err) } return nil diff --git a/xray-core/proxy/shadowsocks/validator.go b/xray-core/proxy/shadowsocks/validator.go index 8888a1c084..ae92a8dc07 100644 --- a/xray-core/proxy/shadowsocks/validator.go +++ b/xray-core/proxy/shadowsocks/validator.go @@ -9,6 +9,7 @@ import ( "sync" "github.com/xtls/xray-core/common/dice" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/protocol" ) @@ -21,7 +22,7 @@ type Validator struct { behaviorFused bool } -var ErrNotFound = newError("Not Found") +var ErrNotFound = errors.New("Not Found") // Add a Shadowsocks user. func (v *Validator) Add(u *protocol.MemoryUser) error { @@ -30,7 +31,7 @@ func (v *Validator) Add(u *protocol.MemoryUser) error { account := u.Account.(*MemoryAccount) if !account.Cipher.IsAEAD() && len(v.users) > 0 { - return newError("The cipher is not support Single-port Multi-user") + return errors.New("The cipher is not support Single-port Multi-user") } v.users = append(v.users, u) @@ -46,7 +47,7 @@ func (v *Validator) Add(u *protocol.MemoryUser) error { // Del a Shadowsocks user with a non-empty Email. func (v *Validator) Del(email string) error { if email == "" { - return newError("Email must not be empty.") + return errors.New("Email must not be empty.") } v.Lock() @@ -62,7 +63,7 @@ func (v *Validator) Del(email string) error { } if idx == -1 { - return newError("User ", email, " not found.") + return errors.New("User ", email, " not found.") } ulen := len(v.users) diff --git a/xray-core/proxy/shadowsocks_2022/errors.generated.go b/xray-core/proxy/shadowsocks_2022/errors.generated.go deleted file mode 100644 index 90db3d5e17..0000000000 --- a/xray-core/proxy/shadowsocks_2022/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package shadowsocks_2022 - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/proxy/shadowsocks_2022/inbound.go b/xray-core/proxy/shadowsocks_2022/inbound.go index f1eb76a5a2..a889fa0fdf 100644 --- a/xray-core/proxy/shadowsocks_2022/inbound.go +++ b/xray-core/proxy/shadowsocks_2022/inbound.go @@ -13,6 +13,7 @@ import ( N "github.com/sagernet/sing/common/network" "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/log" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/protocol" @@ -49,11 +50,11 @@ func NewServer(ctx context.Context, config *ServerConfig) (*Inbound, error) { level: int(config.Level), } if !C.Contains(shadowaead_2022.List, config.Method) { - return nil, newError("unsupported method ", config.Method) + return nil, errors.New("unsupported method ", config.Method) } service, err := shadowaead_2022.NewServiceWithPassword(config.Method, config.Key, 500, inbound, nil) if err != nil { - return nil, newError("create service").Base(err) + return nil, errors.New("create service").Base(err) } inbound.service = service return inbound, nil @@ -112,7 +113,7 @@ func (i *Inbound) NewConnection(ctx context.Context, conn net.Conn, metadata M.M Status: log.AccessAccepted, Email: i.email, }) - newError("tunnelling request to tcp:", metadata.Destination).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "tunnelling request to tcp:", metadata.Destination) dispatcher := session.DispatcherFromContext(ctx) link, err := dispatcher.Dispatch(ctx, singbridge.ToDestination(metadata.Destination, net.Network_TCP)) if err != nil { @@ -133,7 +134,7 @@ func (i *Inbound) NewPacketConnection(ctx context.Context, conn N.PacketConn, me Status: log.AccessAccepted, Email: i.email, }) - newError("tunnelling request to udp:", metadata.Destination).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "tunnelling request to udp:", metadata.Destination) dispatcher := session.DispatcherFromContext(ctx) destination := singbridge.ToDestination(metadata.Destination, net.Network_UDP) link, err := dispatcher.Dispatch(ctx, destination) @@ -152,7 +153,7 @@ func (i *Inbound) NewError(ctx context.Context, err error) { if E.IsClosed(err) { return } - newError(err).AtWarning().WriteToLog() + errors.LogWarning(ctx, err.Error()) } type natPacketConn struct { diff --git a/xray-core/proxy/shadowsocks_2022/inbound_multi.go b/xray-core/proxy/shadowsocks_2022/inbound_multi.go index f80ec6d11b..8cb2d65ebb 100644 --- a/xray-core/proxy/shadowsocks_2022/inbound_multi.go +++ b/xray-core/proxy/shadowsocks_2022/inbound_multi.go @@ -17,6 +17,7 @@ import ( N "github.com/sagernet/sing/common/network" "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/log" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/protocol" @@ -53,15 +54,15 @@ func NewMultiServer(ctx context.Context, config *MultiUserServerConfig) (*MultiU users: config.Users, } if config.Key == "" { - return nil, newError("missing key") + return nil, errors.New("missing key") } psk, err := base64.StdEncoding.DecodeString(config.Key) if err != nil { - return nil, newError("parse config").Base(err) + return nil, errors.New("parse config").Base(err) } service, err := shadowaead_2022.NewMultiService[int](config.Method, psk, 500, inbound, nil) if err != nil { - return nil, newError("create service").Base(err) + return nil, errors.New("create service").Base(err) } for i, user := range config.Users { @@ -75,7 +76,7 @@ func NewMultiServer(ctx context.Context, config *MultiUserServerConfig) (*MultiU C.Map(config.Users, func(it *User) string { return it.Key }), ) if err != nil { - return nil, newError("create service").Base(err) + return nil, errors.New("create service").Base(err) } inbound.service = service @@ -91,7 +92,7 @@ func (i *MultiUserInbound) AddUser(ctx context.Context, u *protocol.MemoryUser) if account.Email != "" { for idx := range i.users { if i.users[idx].Email == account.Email { - return newError("User ", account.Email, " already exists.") + return errors.New("User ", account.Email, " already exists.") } } } @@ -114,7 +115,7 @@ func (i *MultiUserInbound) AddUser(ctx context.Context, u *protocol.MemoryUser) // RemoveUser implements proxy.UserManager.RemoveUser(). func (i *MultiUserInbound) RemoveUser(ctx context.Context, email string) error { if email == "" { - return newError("Email must not be empty.") + return errors.New("Email must not be empty.") } i.Lock() @@ -129,7 +130,7 @@ func (i *MultiUserInbound) RemoveUser(ctx context.Context, email string) error { } if idx == -1 { - return newError("User ", email, " not found.") + return errors.New("User ", email, " not found.") } ulen := len(i.users) @@ -203,11 +204,11 @@ func (i *MultiUserInbound) NewConnection(ctx context.Context, conn net.Conn, met Status: log.AccessAccepted, Email: user.Email, }) - newError("tunnelling request to tcp:", metadata.Destination).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "tunnelling request to tcp:", metadata.Destination) dispatcher := session.DispatcherFromContext(ctx) destination := singbridge.ToDestination(metadata.Destination, net.Network_TCP) if !destination.IsValid() { - return newError("invalid destination") + return errors.New("invalid destination") } link, err := dispatcher.Dispatch(ctx, destination) @@ -231,7 +232,7 @@ func (i *MultiUserInbound) NewPacketConnection(ctx context.Context, conn N.Packe Status: log.AccessAccepted, Email: user.Email, }) - newError("tunnelling request to udp:", metadata.Destination).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "tunnelling request to udp:", metadata.Destination) dispatcher := session.DispatcherFromContext(ctx) destination := singbridge.ToDestination(metadata.Destination, net.Network_UDP) link, err := dispatcher.Dispatch(ctx, destination) @@ -250,5 +251,5 @@ func (i *MultiUserInbound) NewError(ctx context.Context, err error) { if E.IsClosed(err) { return } - newError(err).AtWarning().WriteToLog() + errors.LogWarning(ctx, err.Error()) } diff --git a/xray-core/proxy/shadowsocks_2022/inbound_relay.go b/xray-core/proxy/shadowsocks_2022/inbound_relay.go index 1c4b824870..19afd4620b 100644 --- a/xray-core/proxy/shadowsocks_2022/inbound_relay.go +++ b/xray-core/proxy/shadowsocks_2022/inbound_relay.go @@ -15,6 +15,7 @@ import ( N "github.com/sagernet/sing/common/network" "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/log" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/protocol" @@ -50,11 +51,11 @@ func NewRelayServer(ctx context.Context, config *RelayServerConfig) (*RelayInbou destinations: config.Destinations, } if !C.Contains(shadowaead_2022.List, config.Method) || !strings.Contains(config.Method, "aes") { - return nil, newError("unsupported method ", config.Method) + return nil, errors.New("unsupported method ", config.Method) } service, err := shadowaead_2022.NewRelayServiceWithPassword[int](config.Method, config.Key, 500, inbound) if err != nil { - return nil, newError("create service").Base(err) + return nil, errors.New("create service").Base(err) } for i, destination := range config.Destinations { @@ -74,7 +75,7 @@ func NewRelayServer(ctx context.Context, config *RelayServerConfig) (*RelayInbou }), ) if err != nil { - return nil, newError("create service").Base(err) + return nil, errors.New("create service").Base(err) } inbound.service = service return inbound, nil @@ -135,7 +136,7 @@ func (i *RelayInbound) NewConnection(ctx context.Context, conn net.Conn, metadat Status: log.AccessAccepted, Email: user.Email, }) - newError("tunnelling request to tcp:", metadata.Destination).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "tunnelling request to tcp:", metadata.Destination) dispatcher := session.DispatcherFromContext(ctx) link, err := dispatcher.Dispatch(ctx, singbridge.ToDestination(metadata.Destination, net.Network_TCP)) if err != nil { @@ -158,7 +159,7 @@ func (i *RelayInbound) NewPacketConnection(ctx context.Context, conn N.PacketCon Status: log.AccessAccepted, Email: user.Email, }) - newError("tunnelling request to udp:", metadata.Destination).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "tunnelling request to udp:", metadata.Destination) dispatcher := session.DispatcherFromContext(ctx) destination := singbridge.ToDestination(metadata.Destination, net.Network_UDP) link, err := dispatcher.Dispatch(ctx, destination) @@ -177,5 +178,5 @@ func (i *RelayInbound) NewError(ctx context.Context, err error) { if E.IsClosed(err) { return } - newError(err).AtWarning().WriteToLog() + errors.LogWarning(ctx, err.Error()) } diff --git a/xray-core/proxy/shadowsocks_2022/outbound.go b/xray-core/proxy/shadowsocks_2022/outbound.go index cac9a91bbb..dd2e425986 100644 --- a/xray-core/proxy/shadowsocks_2022/outbound.go +++ b/xray-core/proxy/shadowsocks_2022/outbound.go @@ -13,6 +13,7 @@ import ( "github.com/sagernet/sing/common/uot" "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/session" "github.com/xtls/xray-core/common/singbridge" @@ -44,15 +45,15 @@ func NewClient(ctx context.Context, config *ClientConfig) (*Outbound, error) { } if C.Contains(shadowaead_2022.List, config.Method) { if config.Key == "" { - return nil, newError("missing psk") + return nil, errors.New("missing psk") } method, err := shadowaead_2022.NewWithPassword(config.Method, config.Key, nil) if err != nil { - return nil, newError("create method").Base(err) + return nil, errors.New("create method").Base(err) } o.method = method } else { - return nil, newError("unknown method ", config.Method) + return nil, errors.New("unknown method ", config.Method) } if config.UdpOverTcp { o.uotClient = &uot.Client{Version: uint8(config.UdpOverTcpVersion)} @@ -68,16 +69,16 @@ func (o *Outbound) Process(ctx context.Context, link *transport.Link, dialer int } outbounds := session.OutboundsFromContext(ctx) - ob := outbounds[len(outbounds) - 1] + ob := outbounds[len(outbounds)-1] if !ob.Target.IsValid() { - return newError("target not specified") + return errors.New("target not specified") } ob.Name = "shadowsocks-2022" ob.CanSpliceCopy = 3 destination := ob.Target network := destination.Network - newError("tunneling request to ", destination, " via ", o.server.NetAddr()).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "tunneling request to ", destination, " via ", o.server.NetAddr()) serverDestination := o.server if o.uotClient != nil { @@ -87,7 +88,7 @@ func (o *Outbound) Process(ctx context.Context, link *transport.Link, dialer int } connection, err := dialer.Dial(ctx, serverDestination) if err != nil { - return newError("failed to connect to server").Base(err) + return errors.New("failed to connect to server").Base(err) } if session.TimeoutOnlyFromContext(ctx) { @@ -100,7 +101,7 @@ func (o *Outbound) Process(ctx context.Context, link *transport.Link, dialer int if timeoutReader, isTimeoutReader := link.Reader.(buf.TimeoutReader); isTimeoutReader { mb, err := timeoutReader.ReadMultiBufferTimeout(time.Millisecond * 100) if err != nil && err != buf.ErrNotTimeoutReader && err != buf.ErrReadTimeout { - return newError("read payload").Base(err) + return errors.New("read payload").Base(err) } payload := B.New() for { @@ -111,7 +112,7 @@ func (o *Outbound) Process(ctx context.Context, link *transport.Link, dialer int _, err = serverConn.Write(payload.Bytes()) if err != nil { payload.Release() - return newError("write payload").Base(err) + return errors.New("write payload").Base(err) } handshake = true } @@ -125,7 +126,7 @@ func (o *Outbound) Process(ctx context.Context, link *transport.Link, dialer int if !handshake { _, err = serverConn.Write(nil) if err != nil { - return newError("client handshake").Base(err) + return errors.New("client handshake").Base(err) } } return singbridge.CopyConn(ctx, inboundConn, link, serverConn) diff --git a/xray-core/proxy/socks/client.go b/xray-core/proxy/socks/client.go index b283eb6506..ec1a3ce1f9 100644 --- a/xray-core/proxy/socks/client.go +++ b/xray-core/proxy/socks/client.go @@ -6,6 +6,7 @@ import ( "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/protocol" "github.com/xtls/xray-core/common/retry" @@ -34,12 +35,12 @@ func NewClient(ctx context.Context, config *ClientConfig) (*Client, error) { for _, rec := range config.Server { s, err := protocol.NewServerSpecFromPB(rec) if err != nil { - return nil, newError("failed to get server spec").Base(err) + return nil, errors.New("failed to get server spec").Base(err) } serverList.AddServer(s) } if serverList.Size() == 0 { - return nil, newError("0 target server") + return nil, errors.New("0 target server") } v := core.MustFromContext(ctx) @@ -58,9 +59,9 @@ func NewClient(ctx context.Context, config *ClientConfig) (*Client, error) { // Process implements proxy.Outbound.Process. func (c *Client) Process(ctx context.Context, link *transport.Link, dialer internet.Dialer) error { outbounds := session.OutboundsFromContext(ctx) - ob := outbounds[len(outbounds) - 1] + ob := outbounds[len(outbounds)-1] if !ob.Target.IsValid() { - return newError("target not specified.") + return errors.New("target not specified.") } ob.Name = "socks" ob.CanSpliceCopy = 2 @@ -85,12 +86,12 @@ func (c *Client) Process(ctx context.Context, link *transport.Link, dialer inter return nil }); err != nil { - return newError("failed to find an available destination").Base(err) + return errors.New("failed to find an available destination").Base(err) } defer func() { if err := conn.Close(); err != nil { - newError("failed to closed connection").Base(err).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfoInner(ctx, err, "failed to closed connection") } }() @@ -121,9 +122,9 @@ func (c *Client) Process(ctx context.Context, link *transport.Link, dialer inter request.Version = socks4Version if destination.Network == net.Network_UDP { - return newError("udp is not supported in socks4") + return errors.New("udp is not supported in socks4") } else if destination.Address.Family().IsIPv6() { - return newError("ipv6 is not supported in socks4") + return errors.New("ipv6 is not supported in socks4") } } @@ -138,11 +139,11 @@ func (c *Client) Process(ctx context.Context, link *transport.Link, dialer inter } if err := conn.SetDeadline(time.Now().Add(p.Timeouts.Handshake)); err != nil { - newError("failed to set deadline for handshake").Base(err).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfoInner(ctx, err, "failed to set deadline for handshake") } udpRequest, err := ClientHandshake(request, conn, conn) if err != nil { - return newError("failed to establish connection to server").AtWarning().Base(err) + return errors.New("failed to establish connection to server").AtWarning().Base(err) } if udpRequest != nil { if udpRequest.Address == net.AnyIP || udpRequest.Address == net.AnyIPv6 { @@ -151,7 +152,7 @@ func (c *Client) Process(ctx context.Context, link *transport.Link, dialer inter } if err := conn.SetDeadline(time.Time{}); err != nil { - newError("failed to clear deadline after handshake").Base(err).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfoInner(ctx, err, "failed to clear deadline after handshake") } var newCtx context.Context @@ -182,7 +183,7 @@ func (c *Client) Process(ctx context.Context, link *transport.Link, dialer inter } else if request.Command == protocol.RequestCommandUDP { udpConn, err := dialer.Dial(ctx, udpRequest.Destination()) if err != nil { - return newError("failed to create UDP connection").Base(err) + return errors.New("failed to create UDP connection").Base(err) } defer udpConn.Close() requestFunc = func() error { @@ -203,7 +204,7 @@ func (c *Client) Process(ctx context.Context, link *transport.Link, dialer inter responseDonePost := task.OnSuccess(responseFunc, task.Close(link.Writer)) if err := task.Run(ctx, requestFunc, responseDonePost); err != nil { - return newError("connection ends").Base(err) + return errors.New("connection ends").Base(err) } return nil diff --git a/xray-core/proxy/socks/errors.generated.go b/xray-core/proxy/socks/errors.generated.go deleted file mode 100644 index f466011df4..0000000000 --- a/xray-core/proxy/socks/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package socks - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/proxy/socks/protocol.go b/xray-core/proxy/socks/protocol.go index 3f371d57f9..fe13f24f9d 100644 --- a/xray-core/proxy/socks/protocol.go +++ b/xray-core/proxy/socks/protocol.go @@ -6,6 +6,7 @@ import ( "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/protocol" ) @@ -48,7 +49,7 @@ type ServerSession struct { func (s *ServerSession) handshake4(cmd byte, reader io.Reader, writer io.Writer) (*protocol.RequestHeader, error) { if s.config.AuthType == AuthType_PASSWORD { writeSocks4Response(writer, socks4RequestRejected, net.AnyIP, net.Port(0)) - return nil, newError("socks 4 is not allowed when auth is required.") + return nil, errors.New("socks 4 is not allowed when auth is required.") } var port net.Port @@ -58,7 +59,7 @@ func (s *ServerSession) handshake4(cmd byte, reader io.Reader, writer io.Writer) buffer := buf.StackNew() if _, err := buffer.ReadFullFrom(reader, 6); err != nil { buffer.Release() - return nil, newError("insufficient header").Base(err) + return nil, errors.New("insufficient header").Base(err) } port = net.PortFromBytes(buffer.BytesRange(0, 2)) address = net.IPAddress(buffer.BytesRange(2, 6)) @@ -71,7 +72,7 @@ func (s *ServerSession) handshake4(cmd byte, reader io.Reader, writer io.Writer) if address.IP()[0] == 0x00 { domain, err := ReadUntilNull(reader) if err != nil { - return nil, newError("failed to read domain for socks 4a").Base(err) + return nil, errors.New("failed to read domain for socks 4a").Base(err) } address = net.DomainAddress(domain) } @@ -90,7 +91,7 @@ func (s *ServerSession) handshake4(cmd byte, reader io.Reader, writer io.Writer) return request, nil default: writeSocks4Response(writer, socks4RequestRejected, net.AnyIP, net.Port(0)) - return nil, newError("unsupported command: ", cmd) + return nil, errors.New("unsupported command: ", cmd) } } @@ -99,7 +100,7 @@ func (s *ServerSession) auth5(nMethod byte, reader io.Reader, writer io.Writer) defer buffer.Release() if _, err = buffer.ReadFullFrom(reader, int32(nMethod)); err != nil { - return "", newError("failed to read auth methods").Base(err) + return "", errors.New("failed to read auth methods").Base(err) } var expectedAuth byte = authNotRequired @@ -109,26 +110,26 @@ func (s *ServerSession) auth5(nMethod byte, reader io.Reader, writer io.Writer) if !hasAuthMethod(expectedAuth, buffer.BytesRange(0, int32(nMethod))) { writeSocks5AuthenticationResponse(writer, socks5Version, authNoMatchingMethod) - return "", newError("no matching auth method") + return "", errors.New("no matching auth method") } if err := writeSocks5AuthenticationResponse(writer, socks5Version, expectedAuth); err != nil { - return "", newError("failed to write auth response").Base(err) + return "", errors.New("failed to write auth response").Base(err) } if expectedAuth == authPassword { username, password, err := ReadUsernamePassword(reader) if err != nil { - return "", newError("failed to read username and password for authentication").Base(err) + return "", errors.New("failed to read username and password for authentication").Base(err) } if !s.config.HasAccount(username, password) { writeSocks5AuthenticationResponse(writer, 0x01, 0xFF) - return "", newError("invalid username or password") + return "", errors.New("invalid username or password") } if err := writeSocks5AuthenticationResponse(writer, 0x01, 0x00); err != nil { - return "", newError("failed to write auth response").Base(err) + return "", errors.New("failed to write auth response").Base(err) } return username, nil } @@ -150,7 +151,7 @@ func (s *ServerSession) handshake5(nMethod byte, reader io.Reader, writer io.Wri buffer := buf.StackNew() if _, err := buffer.ReadFullFrom(reader, 3); err != nil { buffer.Release() - return nil, newError("failed to read request").Base(err) + return nil, errors.New("failed to read request").Base(err) } cmd = buffer.Byte(1) buffer.Release() @@ -167,22 +168,22 @@ func (s *ServerSession) handshake5(nMethod byte, reader io.Reader, writer io.Wri case cmdUDPAssociate: if !s.config.UdpEnabled { writeSocks5Response(writer, statusCmdNotSupport, net.AnyIP, net.Port(0)) - return nil, newError("UDP is not enabled.") + return nil, errors.New("UDP is not enabled.") } request.Command = protocol.RequestCommandUDP case cmdTCPBind: writeSocks5Response(writer, statusCmdNotSupport, net.AnyIP, net.Port(0)) - return nil, newError("TCP bind is not supported.") + return nil, errors.New("TCP bind is not supported.") default: writeSocks5Response(writer, statusCmdNotSupport, net.AnyIP, net.Port(0)) - return nil, newError("unknown command ", cmd) + return nil, errors.New("unknown command ", cmd) } request.Version = socks5Version addr, port, err := addrParser.ReadAddressPort(nil, reader) if err != nil { - return nil, newError("failed to read address").Base(err) + return nil, errors.New("failed to read address").Base(err) } request.Address = addr request.Port = port @@ -211,7 +212,7 @@ func (s *ServerSession) Handshake(reader io.Reader, writer io.Writer) (*protocol buffer := buf.StackNew() if _, err := buffer.ReadFullFrom(reader, 2); err != nil { buffer.Release() - return nil, newError("insufficient header").Base(err) + return nil, errors.New("insufficient header").Base(err) } version := buffer.Byte(0) @@ -224,7 +225,7 @@ func (s *ServerSession) Handshake(reader io.Reader, writer io.Writer) (*protocol case socks5Version: return s.handshake5(cmd, reader, writer) default: - return nil, newError("unknown Socks version: ", version) + return nil, errors.New("unknown Socks version: ", version) } } @@ -278,7 +279,7 @@ func ReadUntilNull(reader io.Reader) (string, error) { return b.String(), nil } if b.IsFull() { - return "", newError("buffer overrun") + return "", errors.New("buffer overrun") } } } @@ -322,7 +323,7 @@ func writeSocks4Response(writer io.Writer, errCode byte, address net.Address, po func DecodeUDPPacket(packet *buf.Buffer) (*protocol.RequestHeader, error) { if packet.Len() < 5 { - return nil, newError("insufficient length of packet.") + return nil, errors.New("insufficient length of packet.") } request := &protocol.RequestHeader{ Version: socks5Version, @@ -331,14 +332,14 @@ func DecodeUDPPacket(packet *buf.Buffer) (*protocol.RequestHeader, error) { // packet[0] and packet[1] are reserved if packet.Byte(2) != 0 /* fragments */ { - return nil, newError("discarding fragmented payload.") + return nil, errors.New("discarding fragmented payload.") } packet.Advance(3) addr, port, err := addrParser.ReadAddressPort(nil, packet) if err != nil { - return nil, newError("failed to read UDP header").Base(err) + return nil, errors.New("failed to read UDP header").Base(err) } request.Address = addr request.Port = port @@ -432,10 +433,10 @@ func ClientHandshake(request *protocol.RequestHeader, reader io.Reader, writer i } if b.Byte(0) != socks5Version { - return nil, newError("unexpected server version: ", b.Byte(0)).AtWarning() + return nil, errors.New("unexpected server version: ", b.Byte(0)).AtWarning() } if b.Byte(1) != authByte { - return nil, newError("auth method not supported.").AtWarning() + return nil, errors.New("auth method not supported.").AtWarning() } if authByte == authPassword { @@ -455,7 +456,7 @@ func ClientHandshake(request *protocol.RequestHeader, reader io.Reader, writer i return nil, err } if b.Byte(1) != 0x00 { - return nil, newError("server rejects account: ", b.Byte(1)) + return nil, errors.New("server rejects account: ", b.Byte(1)) } } @@ -485,7 +486,7 @@ func ClientHandshake(request *protocol.RequestHeader, reader io.Reader, writer i resp := b.Byte(1) if resp != 0x00 { - return nil, newError("server rejects request: ", resp) + return nil, errors.New("server rejects request: ", resp) } b.Clear() diff --git a/xray-core/proxy/socks/server.go b/xray-core/proxy/socks/server.go index 1808486494..19c6c90644 100644 --- a/xray-core/proxy/socks/server.go +++ b/xray-core/proxy/socks/server.go @@ -7,6 +7,7 @@ import ( "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/log" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/protocol" @@ -80,19 +81,19 @@ func (s *Server) Process(ctx context.Context, network net.Network, conn stat.Con case net.Network_UDP: return s.handleUDPPayload(ctx, conn, dispatcher) default: - return newError("unknown network: ", network) + return errors.New("unknown network: ", network) } } func (s *Server) processTCP(ctx context.Context, conn stat.Connection, dispatcher routing.Dispatcher) error { plcy := s.policy() if err := conn.SetReadDeadline(time.Now().Add(plcy.Timeouts.Handshake)); err != nil { - newError("failed to set deadline").Base(err).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfoInner(ctx, err, "failed to set deadline") } inbound := session.InboundFromContext(ctx) if inbound == nil || !inbound.Gateway.IsValid() { - return newError("inbound gateway not specified") + return errors.New("inbound gateway not specified") } svrSession := &ServerSession{ @@ -113,19 +114,19 @@ func (s *Server) processTCP(ctx context.Context, conn stat.Connection, dispatche Reason: err, }) } - return newError("failed to read request").Base(err) + return errors.New("failed to read request").Base(err) } if request.User != nil { inbound.User.Email = request.User.Email } if err := conn.SetReadDeadline(time.Time{}); err != nil { - newError("failed to clear deadline").Base(err).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfoInner(ctx, err, "failed to clear deadline") } if request.Command == protocol.RequestCommandTCP { dest := request.Destination() - newError("TCP Connect request to ", dest).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "TCP Connect request to ", dest) if inbound.Source.IsValid() { ctx = log.ContextWithAccessMessage(ctx, &log.AccessMessage{ From: inbound.Source, @@ -172,7 +173,7 @@ func (s *Server) transport(ctx context.Context, reader io.Reader, writer io.Writ requestDone := func() error { defer timer.SetTimeout(plcy.Timeouts.DownlinkOnly) if err := buf.Copy(buf.NewReader(reader), link.Writer, buf.UpdateActivity(timer)); err != nil { - return newError("failed to transport all TCP request").Base(err) + return errors.New("failed to transport all TCP request").Base(err) } return nil @@ -183,7 +184,7 @@ func (s *Server) transport(ctx context.Context, reader io.Reader, writer io.Writ v2writer := buf.NewWriter(writer) if err := buf.Copy(link.Reader, v2writer, buf.UpdateActivity(timer)); err != nil { - return newError("failed to transport all TCP response").Base(err) + return errors.New("failed to transport all TCP response").Base(err) } return nil @@ -193,7 +194,7 @@ func (s *Server) transport(ctx context.Context, reader io.Reader, writer io.Writ if err := task.Run(ctx, requestDonePost, responseDone); err != nil { common.Interrupt(link.Reader) common.Interrupt(link.Writer) - return newError("connection ends").Base(err) + return errors.New("connection ends").Base(err) } return nil @@ -201,12 +202,12 @@ func (s *Server) transport(ctx context.Context, reader io.Reader, writer io.Writ func (s *Server) handleUDPPayload(ctx context.Context, conn stat.Connection, dispatcher routing.Dispatcher) error { if s.udpFilter != nil && !s.udpFilter.Check(conn.RemoteAddr()) { - newError("Unauthorized UDP access from ", conn.RemoteAddr().String()).AtDebug().WriteToLog(session.ExportIDToError(ctx)) + errors.LogDebug(ctx, "Unauthorized UDP access from ", conn.RemoteAddr().String()) return nil } udpServer := udp.NewDispatcher(dispatcher, func(ctx context.Context, packet *udp_proto.Packet) { payload := packet.Payload - newError("writing back UDP response with ", payload.Len(), " bytes").AtDebug().WriteToLog(session.ExportIDToError(ctx)) + errors.LogDebug(ctx, "writing back UDP response with ", payload.Len(), " bytes") request := protocol.RequestHeaderFromContext(ctx) if request == nil { @@ -226,7 +227,7 @@ func (s *Server) handleUDPPayload(ctx context.Context, conn stat.Connection, dis defer udpMessage.Release() if err != nil { - newError("failed to write UDP response").AtWarning().Base(err).WriteToLog(session.ExportIDToError(ctx)) + errors.LogWarningInner(ctx, err, "failed to write UDP response") } conn.Write(udpMessage.Bytes()) @@ -234,7 +235,7 @@ func (s *Server) handleUDPPayload(ctx context.Context, conn stat.Connection, dis inbound := session.InboundFromContext(ctx) if inbound != nil && inbound.Source.IsValid() { - newError("client UDP connection from ", inbound.Source).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "client UDP connection from ", inbound.Source) } var dest *net.Destination @@ -249,7 +250,7 @@ func (s *Server) handleUDPPayload(ctx context.Context, conn stat.Connection, dis for _, payload := range mpayload { request, err := DecodeUDPPacket(payload) if err != nil { - newError("failed to parse UDP request").Base(err).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfoInner(ctx, err, "failed to parse UDP request") payload.Release() continue } @@ -262,7 +263,7 @@ func (s *Server) handleUDPPayload(ctx context.Context, conn stat.Connection, dis destination := request.Destination() currentPacketCtx := ctx - newError("send packet to ", destination, " with ", payload.Len(), " bytes").AtDebug().WriteToLog(session.ExportIDToError(ctx)) + errors.LogDebug(ctx, "send packet to ", destination, " with ", payload.Len(), " bytes") if inbound != nil && inbound.Source.IsValid() { currentPacketCtx = log.ContextWithAccessMessage(ctx, &log.AccessMessage{ From: inbound.Source, diff --git a/xray-core/proxy/trojan/client.go b/xray-core/proxy/trojan/client.go index 3a4d838ae5..21b7d73e16 100644 --- a/xray-core/proxy/trojan/client.go +++ b/xray-core/proxy/trojan/client.go @@ -32,12 +32,12 @@ func NewClient(ctx context.Context, config *ClientConfig) (*Client, error) { for _, rec := range config.Server { s, err := protocol.NewServerSpecFromPB(rec) if err != nil { - return nil, newError("failed to parse server spec").Base(err) + return nil, errors.New("failed to parse server spec").Base(err) } serverList.AddServer(s) } if serverList.Size() == 0 { - return nil, newError("0 server") + return nil, errors.New("0 server") } v := core.MustFromContext(ctx) @@ -51,9 +51,9 @@ func NewClient(ctx context.Context, config *ClientConfig) (*Client, error) { // Process implements OutboundHandler.Process(). func (c *Client) Process(ctx context.Context, link *transport.Link, dialer internet.Dialer) error { outbounds := session.OutboundsFromContext(ctx) - ob := outbounds[len(outbounds) - 1] + ob := outbounds[len(outbounds)-1] if !ob.Target.IsValid() { - return newError("target not specified") + return errors.New("target not specified") } ob.Name = "trojan" ob.CanSpliceCopy = 3 @@ -74,16 +74,16 @@ func (c *Client) Process(ctx context.Context, link *transport.Link, dialer inter return nil }) if err != nil { - return newError("failed to find an available destination").AtWarning().Base(err) + return errors.New("failed to find an available destination").AtWarning().Base(err) } - newError("tunneling request to ", destination, " via ", server.Destination().NetAddr()).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "tunneling request to ", destination, " via ", server.Destination().NetAddr()) defer conn.Close() user := server.PickUser() account, ok := user.Account.(*MemoryAccount) if !ok { - return newError("user account is not valid") + return errors.New("user account is not valid") } var newCtx context.Context @@ -121,12 +121,12 @@ func (c *Client) Process(ctx context.Context, link *transport.Link, dialer inter // write some request payload to buffer if err = buf.CopyOnceTimeout(link.Reader, bodyWriter, time.Millisecond*100); err != nil && err != buf.ErrNotTimeoutReader && err != buf.ErrReadTimeout { - return newError("failed to write A request payload").Base(err).AtWarning() + return errors.New("failed to write A request payload").Base(err).AtWarning() } // Flush; bufferWriter.WriteMultiBufer now is bufferWriter.writer.WriteMultiBuffer if err = bufferWriter.SetBuffered(false); err != nil { - return newError("failed to flush payload").Base(err).AtWarning() + return errors.New("failed to flush payload").Base(err).AtWarning() } // Send header if not sent yet @@ -135,7 +135,7 @@ func (c *Client) Process(ctx context.Context, link *transport.Link, dialer inter } if err = buf.Copy(link.Reader, bodyWriter, buf.UpdateActivity(timer)); err != nil { - return newError("failed to transfer request payload").Base(err).AtInfo() + return errors.New("failed to transfer request payload").Base(err).AtInfo() } return nil @@ -161,7 +161,7 @@ func (c *Client) Process(ctx context.Context, link *transport.Link, dialer inter responseDoneAndCloseWriter := task.OnSuccess(getResponse, task.Close(link.Writer)) if err := task.Run(ctx, postRequest, responseDoneAndCloseWriter); err != nil { - return newError("connection ends").Base(err) + return errors.New("connection ends").Base(err) } return nil diff --git a/xray-core/proxy/trojan/errors.generated.go b/xray-core/proxy/trojan/errors.generated.go deleted file mode 100644 index 7fb812794a..0000000000 --- a/xray-core/proxy/trojan/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package trojan - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/proxy/trojan/protocol.go b/xray-core/proxy/trojan/protocol.go index 6fcfb4d4ae..96a166381c 100644 --- a/xray-core/proxy/trojan/protocol.go +++ b/xray-core/proxy/trojan/protocol.go @@ -5,6 +5,7 @@ import ( "io" "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/protocol" ) @@ -38,7 +39,7 @@ type ConnWriter struct { func (c *ConnWriter) Write(p []byte) (n int, err error) { if !c.headerSent { if err := c.writeHeader(); err != nil { - return 0, newError("failed to write request header").Base(err) + return 0, errors.New("failed to write request header").Base(err) } } @@ -160,15 +161,15 @@ func (c *ConnReader) ParseHeader() error { var command [1]byte var hash [56]byte if _, err := io.ReadFull(c.Reader, hash[:]); err != nil { - return newError("failed to read user hash").Base(err) + return errors.New("failed to read user hash").Base(err) } if _, err := io.ReadFull(c.Reader, crlf[:]); err != nil { - return newError("failed to read crlf").Base(err) + return errors.New("failed to read crlf").Base(err) } if _, err := io.ReadFull(c.Reader, command[:]); err != nil { - return newError("failed to read command").Base(err) + return errors.New("failed to read command").Base(err) } network := net.Network_TCP @@ -178,12 +179,12 @@ func (c *ConnReader) ParseHeader() error { addr, port, err := addrParser.ReadAddressPort(nil, c.Reader) if err != nil { - return newError("failed to read address and port").Base(err) + return errors.New("failed to read address and port").Base(err) } c.Target = net.Destination{Network: network, Address: addr, Port: port} if _, err := io.ReadFull(c.Reader, crlf[:]); err != nil { - return newError("failed to read crlf").Base(err) + return errors.New("failed to read crlf").Base(err) } c.headerParsed = true @@ -217,22 +218,22 @@ type PacketReader struct { func (r *PacketReader) ReadMultiBuffer() (buf.MultiBuffer, error) { addr, port, err := addrParser.ReadAddressPort(nil, r) if err != nil { - return nil, newError("failed to read address and port").Base(err) + return nil, errors.New("failed to read address and port").Base(err) } var lengthBuf [2]byte if _, err := io.ReadFull(r, lengthBuf[:]); err != nil { - return nil, newError("failed to read payload length").Base(err) + return nil, errors.New("failed to read payload length").Base(err) } remain := int(binary.BigEndian.Uint16(lengthBuf[:])) if remain > maxLength { - return nil, newError("oversize payload") + return nil, errors.New("oversize payload") } var crlf [2]byte if _, err := io.ReadFull(r, crlf[:]); err != nil { - return nil, newError("failed to read crlf").Base(err) + return nil, errors.New("failed to read crlf").Base(err) } dest := net.UDPDestination(addr, port) @@ -249,7 +250,7 @@ func (r *PacketReader) ReadMultiBuffer() (buf.MultiBuffer, error) { n, err := b.ReadFullFrom(r, int32(length)) if err != nil { buf.ReleaseMulti(mb) - return nil, newError("failed to read payload").Base(err) + return nil, errors.New("failed to read payload").Base(err) } remain -= int(n) diff --git a/xray-core/proxy/trojan/server.go b/xray-core/proxy/trojan/server.go index bc52c2b146..6110eec0a4 100644 --- a/xray-core/proxy/trojan/server.go +++ b/xray-core/proxy/trojan/server.go @@ -47,11 +47,11 @@ func NewServer(ctx context.Context, config *ServerConfig) (*Server, error) { for _, user := range config.Users { u, err := user.ToMemoryUser() if err != nil { - return nil, newError("failed to get trojan user").Base(err).AtError() + return nil, errors.New("failed to get trojan user").Base(err).AtError() } if err := validator.Add(u); err != nil { - return nil, newError("failed to add user").Base(err).AtError() + return nil, errors.New("failed to add user").Base(err).AtError() } } @@ -132,8 +132,6 @@ func (s *Server) Network() []net.Network { // Process implements proxy.Inbound.Process(). func (s *Server) Process(ctx context.Context, network net.Network, conn stat.Connection, dispatcher routing.Dispatcher) error { - sid := session.ExportIDToError(ctx) - iConn := conn statConn, ok := iConn.(*stat.CounterConnection) if ok { @@ -142,16 +140,16 @@ func (s *Server) Process(ctx context.Context, network net.Network, conn stat.Con sessionPolicy := s.policyManager.ForLevel(0) if err := conn.SetReadDeadline(time.Now().Add(sessionPolicy.Timeouts.Handshake)); err != nil { - return newError("unable to set read deadline").Base(err).AtWarning() + return errors.New("unable to set read deadline").Base(err).AtWarning() } first := buf.FromBytes(make([]byte, buf.Size)) first.Clear() firstLen, err := first.ReadFrom(conn) if err != nil { - return newError("failed to read first request").Base(err) + return errors.New("failed to read first request").Base(err) } - newError("firstLen = ", firstLen).AtInfo().WriteToLog(sid) + errors.LogInfo(ctx, "firstLen = ", firstLen) bufferedReader := &buf.BufferedReader{ Reader: buf.NewReader(conn), @@ -166,7 +164,7 @@ func (s *Server) Process(ctx context.Context, network net.Network, conn stat.Con shouldFallback := false if firstLen < 58 || first.Byte(56) != '\r' { // invalid protocol - err = newError("not trojan protocol") + err = errors.New("not trojan protocol") log.Record(&log.AccessMessage{ From: conn.RemoteAddr(), To: "", @@ -179,7 +177,7 @@ func (s *Server) Process(ctx context.Context, network net.Network, conn stat.Con user = s.validator.Get(hexString(first.BytesTo(56))) if user == nil { // invalid user, let's fallback - err = newError("not a valid user") + err = errors.New("not a valid user") log.Record(&log.AccessMessage{ From: conn.RemoteAddr(), To: "", @@ -192,9 +190,9 @@ func (s *Server) Process(ctx context.Context, network net.Network, conn stat.Con } if isfb && shouldFallback { - return s.fallback(ctx, sid, err, sessionPolicy, conn, iConn, napfb, first, firstLen, bufferedReader) + return s.fallback(ctx, err, sessionPolicy, conn, iConn, napfb, first, firstLen, bufferedReader) } else if shouldFallback { - return newError("invalid protocol or invalid user") + return errors.New("invalid protocol or invalid user") } clientReader := &ConnReader{Reader: bufferedReader} @@ -205,12 +203,12 @@ func (s *Server) Process(ctx context.Context, network net.Network, conn stat.Con Status: log.AccessRejected, Reason: err, }) - return newError("failed to create request from: ", conn.RemoteAddr()).Base(err) + return errors.New("failed to create request from: ", conn.RemoteAddr()).Base(err) } destination := clientReader.Target if err := conn.SetReadDeadline(time.Time{}); err != nil { - return newError("unable to set read deadline").Base(err).AtWarning() + return errors.New("unable to set read deadline").Base(err).AtWarning() } inbound := session.InboundFromContext(ctx) @@ -231,7 +229,7 @@ func (s *Server) Process(ctx context.Context, network net.Network, conn stat.Con Email: user.Email, }) - newError("received request for ", destination).WriteToLog(sid) + errors.LogInfo(ctx, "received request for ", destination) return s.handleConnection(ctx, sessionPolicy, destination, clientReader, buf.NewWriter(conn), dispatcher) } @@ -243,7 +241,7 @@ func (s *Server) handleUDPPayload(ctx context.Context, clientReader *PacketReade } if err := clientWriter.WriteMultiBuffer(buf.MultiBuffer{udpPayload}); err != nil { - newError("failed to write response").Base(err).AtWarning().WriteToLog(session.ExportIDToError(ctx)) + errors.LogWarningInner(ctx, err, "failed to write response") } }) @@ -260,7 +258,7 @@ func (s *Server) handleUDPPayload(ctx context.Context, clientReader *PacketReade mb, err := clientReader.ReadMultiBuffer() if err != nil { if errors.Cause(err) != io.EOF { - return newError("unexpected EOF").Base(err) + return errors.New("unexpected EOF").Base(err) } return nil } @@ -281,7 +279,7 @@ func (s *Server) handleUDPPayload(ctx context.Context, clientReader *PacketReade Email: user.Email, }) } - newError("tunnelling request to ", destination).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "tunnelling request to ", destination) if !s.cone || dest == nil { dest = &destination @@ -306,13 +304,13 @@ func (s *Server) handleConnection(ctx context.Context, sessionPolicy policy.Sess link, err := dispatcher.Dispatch(ctx, destination) if err != nil { - return newError("failed to dispatch request to ", destination).Base(err) + return errors.New("failed to dispatch request to ", destination).Base(err) } requestDone := func() error { defer timer.SetTimeout(sessionPolicy.Timeouts.DownlinkOnly) if buf.Copy(clientReader, link.Writer, buf.UpdateActivity(timer)) != nil { - return newError("failed to transfer request").Base(err) + return errors.New("failed to transfer request").Base(err) } return nil } @@ -321,7 +319,7 @@ func (s *Server) handleConnection(ctx context.Context, sessionPolicy policy.Sess defer timer.SetTimeout(sessionPolicy.Timeouts.UplinkOnly) if err := buf.Copy(link.Reader, clientWriter, buf.UpdateActivity(timer)); err != nil { - return newError("failed to write response").Base(err) + return errors.New("failed to write response").Base(err) } return nil } @@ -330,17 +328,17 @@ func (s *Server) handleConnection(ctx context.Context, sessionPolicy policy.Sess if err := task.Run(ctx, requestDonePost, responseDone); err != nil { common.Must(common.Interrupt(link.Reader)) common.Must(common.Interrupt(link.Writer)) - return newError("connection ends").Base(err) + return errors.New("connection ends").Base(err) } return nil } -func (s *Server) fallback(ctx context.Context, sid errors.ExportOption, err error, sessionPolicy policy.Session, connection stat.Connection, iConn stat.Connection, napfb map[string]map[string]map[string]*Fallback, first *buf.Buffer, firstLen int64, reader buf.Reader) error { +func (s *Server) fallback(ctx context.Context, err error, sessionPolicy policy.Session, connection stat.Connection, iConn stat.Connection, napfb map[string]map[string]map[string]*Fallback, first *buf.Buffer, firstLen int64, reader buf.Reader) error { if err := connection.SetReadDeadline(time.Time{}); err != nil { - newError("unable to set back read deadline").Base(err).AtWarning().WriteToLog(sid) + errors.LogWarningInner(ctx, err, "unable to set back read deadline") } - newError("fallback starts").Base(err).AtInfo().WriteToLog(sid) + errors.LogInfoInner(ctx, err, "fallback starts") name := "" alpn := "" @@ -348,14 +346,14 @@ func (s *Server) fallback(ctx context.Context, sid errors.ExportOption, err erro cs := tlsConn.ConnectionState() name = cs.ServerName alpn = cs.NegotiatedProtocol - newError("realName = " + name).AtInfo().WriteToLog(sid) - newError("realAlpn = " + alpn).AtInfo().WriteToLog(sid) + errors.LogInfo(ctx, "realName = " + name) + errors.LogInfo(ctx, "realAlpn = " + alpn) } else if realityConn, ok := iConn.(*reality.Conn); ok { cs := realityConn.ConnectionState() name = cs.ServerName alpn = cs.NegotiatedProtocol - newError("realName = " + name).AtInfo().WriteToLog(sid) - newError("realAlpn = " + alpn).AtInfo().WriteToLog(sid) + errors.LogInfo(ctx, "realName = " + name) + errors.LogInfo(ctx, "realAlpn = " + alpn) } name = strings.ToLower(name) alpn = strings.ToLower(alpn) @@ -377,7 +375,7 @@ func (s *Server) fallback(ctx context.Context, sid errors.ExportOption, err erro } apfb := napfb[name] if apfb == nil { - return newError(`failed to find the default "name" config`).AtWarning() + return errors.New(`failed to find the default "name" config`).AtWarning() } if apfb[alpn] == nil { @@ -385,7 +383,7 @@ func (s *Server) fallback(ctx context.Context, sid errors.ExportOption, err erro } pfb := apfb[alpn] if pfb == nil { - return newError(`failed to find the default "alpn" config`).AtWarning() + return errors.New(`failed to find the default "alpn" config`).AtWarning() } path := "" @@ -405,7 +403,7 @@ func (s *Server) fallback(ctx context.Context, sid errors.ExportOption, err erro } if k == '?' || k == ' ' { path = string(firstBytes[i:j]) - newError("realPath = " + path).AtInfo().WriteToLog(sid) + errors.LogInfo(ctx, "realPath = " + path) if pfb[path] == nil { path = "" } @@ -419,7 +417,7 @@ func (s *Server) fallback(ctx context.Context, sid errors.ExportOption, err erro } fb := pfb[path] if fb == nil { - return newError(`failed to find the default "path" config`).AtWarning() + return errors.New(`failed to find the default "path" config`).AtWarning() } ctx, cancel := context.WithCancel(ctx) @@ -435,7 +433,7 @@ func (s *Server) fallback(ctx context.Context, sid errors.ExportOption, err erro } return nil }); err != nil { - return newError("failed to dial to " + fb.Dest).Base(err).AtWarning() + return errors.New("failed to dial to " + fb.Dest).Base(err).AtWarning() } defer conn.Close() @@ -495,11 +493,11 @@ func (s *Server) fallback(ctx context.Context, sid errors.ExportOption, err erro common.Must2(pro.Write([]byte{byte(p1 >> 8), byte(p1), byte(p2 >> 8), byte(p2)})) } if err := serverWriter.WriteMultiBuffer(buf.MultiBuffer{pro}); err != nil { - return newError("failed to set PROXY protocol v", fb.Xver).Base(err).AtWarning() + return errors.New("failed to set PROXY protocol v", fb.Xver).Base(err).AtWarning() } } if err := buf.Copy(reader, serverWriter, buf.UpdateActivity(timer)); err != nil { - return newError("failed to fallback request payload").Base(err).AtInfo() + return errors.New("failed to fallback request payload").Base(err).AtInfo() } return nil } @@ -509,7 +507,7 @@ func (s *Server) fallback(ctx context.Context, sid errors.ExportOption, err erro getResponse := func() error { defer timer.SetTimeout(sessionPolicy.Timeouts.UplinkOnly) if err := buf.Copy(serverReader, writer, buf.UpdateActivity(timer)); err != nil { - return newError("failed to deliver response payload").Base(err).AtInfo() + return errors.New("failed to deliver response payload").Base(err).AtInfo() } return nil } @@ -517,7 +515,7 @@ func (s *Server) fallback(ctx context.Context, sid errors.ExportOption, err erro if err := task.Run(ctx, task.OnSuccess(postRequest, task.Close(serverWriter)), task.OnSuccess(getResponse, task.Close(writer))); err != nil { common.Must(common.Interrupt(serverReader)) common.Must(common.Interrupt(serverWriter)) - return newError("fallback ends").Base(err).AtInfo() + return errors.New("fallback ends").Base(err).AtInfo() } return nil diff --git a/xray-core/proxy/trojan/validator.go b/xray-core/proxy/trojan/validator.go index 26167e4bf7..4ffe41a1b0 100644 --- a/xray-core/proxy/trojan/validator.go +++ b/xray-core/proxy/trojan/validator.go @@ -4,6 +4,7 @@ import ( "strings" "sync" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/protocol" ) @@ -19,7 +20,7 @@ func (v *Validator) Add(u *protocol.MemoryUser) error { if u.Email != "" { _, loaded := v.email.LoadOrStore(strings.ToLower(u.Email), u) if loaded { - return newError("User ", u.Email, " already exists.") + return errors.New("User ", u.Email, " already exists.") } } v.users.Store(hexString(u.Account.(*MemoryAccount).Key), u) @@ -29,12 +30,12 @@ func (v *Validator) Add(u *protocol.MemoryUser) error { // Del a trojan user with a non-empty Email. func (v *Validator) Del(e string) error { if e == "" { - return newError("Email must not be empty.") + return errors.New("Email must not be empty.") } le := strings.ToLower(e) u, _ := v.email.Load(le) if u == nil { - return newError("User ", e, " not found.") + return errors.New("User ", e, " not found.") } v.email.Delete(le) v.users.Delete(hexString(u.(*protocol.MemoryUser).Account.(*MemoryAccount).Key)) diff --git a/xray-core/proxy/vless/account.go b/xray-core/proxy/vless/account.go index b20a9539b3..5349a3bd7b 100644 --- a/xray-core/proxy/vless/account.go +++ b/xray-core/proxy/vless/account.go @@ -1,6 +1,7 @@ package vless import ( + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/protocol" "github.com/xtls/xray-core/common/uuid" ) @@ -9,7 +10,7 @@ import ( func (a *Account) AsAccount() (protocol.Account, error) { id, err := uuid.ParseString(a.Id) if err != nil { - return nil, newError("failed to parse ID").Base(err).AtError() + return nil, errors.New("failed to parse ID").Base(err).AtError() } return &MemoryAccount{ ID: protocol.NewID(id), diff --git a/xray-core/proxy/vless/encoding/addons.go b/xray-core/proxy/vless/encoding/addons.go index 9426f6a04a..1bf1817dbc 100644 --- a/xray-core/proxy/vless/encoding/addons.go +++ b/xray-core/proxy/vless/encoding/addons.go @@ -5,6 +5,7 @@ import ( "io" "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/protocol" "github.com/xtls/xray-core/proxy" "github.com/xtls/xray-core/proxy/vless" @@ -16,17 +17,17 @@ func EncodeHeaderAddons(buffer *buf.Buffer, addons *Addons) error { case vless.XRV: bytes, err := proto.Marshal(addons) if err != nil { - return newError("failed to marshal addons protobuf value").Base(err) + return errors.New("failed to marshal addons protobuf value").Base(err) } if err := buffer.WriteByte(byte(len(bytes))); err != nil { - return newError("failed to write addons protobuf length").Base(err) + return errors.New("failed to write addons protobuf length").Base(err) } if _, err := buffer.Write(bytes); err != nil { - return newError("failed to write addons protobuf value").Base(err) + return errors.New("failed to write addons protobuf value").Base(err) } default: if err := buffer.WriteByte(0); err != nil { - return newError("failed to write addons protobuf length").Base(err) + return errors.New("failed to write addons protobuf length").Base(err) } } @@ -37,17 +38,17 @@ func DecodeHeaderAddons(buffer *buf.Buffer, reader io.Reader) (*Addons, error) { addons := new(Addons) buffer.Clear() if _, err := buffer.ReadFullFrom(reader, 1); err != nil { - return nil, newError("failed to read addons protobuf length").Base(err) + return nil, errors.New("failed to read addons protobuf length").Base(err) } if length := int32(buffer.Byte(0)); length != 0 { buffer.Clear() if _, err := buffer.ReadFullFrom(reader, length); err != nil { - return nil, newError("failed to read addons protobuf value").Base(err) + return nil, errors.New("failed to read addons protobuf value").Base(err) } if err := proto.Unmarshal(buffer.Bytes(), addons); err != nil { - return nil, newError("failed to unmarshal addons protobuf value").Base(err) + return nil, errors.New("failed to unmarshal addons protobuf value").Base(err) } // Verification. @@ -149,7 +150,7 @@ func (w *LengthPacketWriter) WriteMultiBuffer(mb buf.MultiBuffer) error { mb[i] = nil } if _, err := w.Write(w.cache); err != nil { - return newError("failed to write a packet").Base(err) + return errors.New("failed to write a packet").Base(err) } return nil } @@ -168,7 +169,7 @@ type LengthPacketReader struct { func (r *LengthPacketReader) ReadMultiBuffer() (buf.MultiBuffer, error) { if _, err := io.ReadFull(r.Reader, r.cache); err != nil { // maybe EOF - return nil, newError("failed to read packet length").Base(err) + return nil, errors.New("failed to read packet length").Base(err) } length := int32(r.cache[0])<<8 | int32(r.cache[1]) // fmt.Println("Read", length) @@ -181,7 +182,7 @@ func (r *LengthPacketReader) ReadMultiBuffer() (buf.MultiBuffer, error) { length -= size b := buf.New() if _, err := b.ReadFullFrom(r.Reader, size); err != nil { - return nil, newError("failed to read packet payload").Base(err) + return nil, errors.New("failed to read packet payload").Base(err) } mb = append(mb, b) } diff --git a/xray-core/proxy/vless/encoding/encoding.go b/xray-core/proxy/vless/encoding/encoding.go index 5954746eac..038c0ed3e4 100644 --- a/xray-core/proxy/vless/encoding/encoding.go +++ b/xray-core/proxy/vless/encoding/encoding.go @@ -35,29 +35,29 @@ func EncodeRequestHeader(writer io.Writer, request *protocol.RequestHeader, requ defer buffer.Release() if err := buffer.WriteByte(request.Version); err != nil { - return newError("failed to write request version").Base(err) + return errors.New("failed to write request version").Base(err) } if _, err := buffer.Write(request.User.Account.(*vless.MemoryAccount).ID.Bytes()); err != nil { - return newError("failed to write request user id").Base(err) + return errors.New("failed to write request user id").Base(err) } if err := EncodeHeaderAddons(&buffer, requestAddons); err != nil { - return newError("failed to encode request header addons").Base(err) + return errors.New("failed to encode request header addons").Base(err) } if err := buffer.WriteByte(byte(request.Command)); err != nil { - return newError("failed to write request command").Base(err) + return errors.New("failed to write request command").Base(err) } if request.Command != protocol.RequestCommandMux { if err := addrParser.WriteAddressPort(&buffer, request.Address, request.Port); err != nil { - return newError("failed to write request address and port").Base(err) + return errors.New("failed to write request address and port").Base(err) } } if _, err := writer.Write(buffer.Bytes()); err != nil { - return newError("failed to write request header").Base(err) + return errors.New("failed to write request header").Base(err) } return nil @@ -74,7 +74,7 @@ func DecodeRequestHeader(isfb bool, first *buf.Buffer, reader io.Reader, validat request.Version = first.Byte(0) } else { if _, err := buffer.ReadFullFrom(reader, 1); err != nil { - return nil, nil, false, newError("failed to read request version").Base(err) + return nil, nil, false, errors.New("failed to read request version").Base(err) } request.Version = buffer.Byte(0) } @@ -89,13 +89,13 @@ func DecodeRequestHeader(isfb bool, first *buf.Buffer, reader io.Reader, validat } else { buffer.Clear() if _, err := buffer.ReadFullFrom(reader, 16); err != nil { - return nil, nil, false, newError("failed to read request user id").Base(err) + return nil, nil, false, errors.New("failed to read request user id").Base(err) } copy(id[:], buffer.Bytes()) } if request.User = validator.Get(id); request.User == nil { - return nil, nil, isfb, newError("invalid request user id") + return nil, nil, isfb, errors.New("invalid request user id") } if isfb { @@ -104,12 +104,12 @@ func DecodeRequestHeader(isfb bool, first *buf.Buffer, reader io.Reader, validat requestAddons, err := DecodeHeaderAddons(&buffer, reader) if err != nil { - return nil, nil, false, newError("failed to decode request header addons").Base(err) + return nil, nil, false, errors.New("failed to decode request header addons").Base(err) } buffer.Clear() if _, err := buffer.ReadFullFrom(reader, 1); err != nil { - return nil, nil, false, newError("failed to read request command").Base(err) + return nil, nil, false, errors.New("failed to read request command").Base(err) } request.Command = protocol.RequestCommand(buffer.Byte(0)) @@ -124,11 +124,11 @@ func DecodeRequestHeader(isfb bool, first *buf.Buffer, reader io.Reader, validat } } if request.Address == nil { - return nil, nil, false, newError("invalid request address") + return nil, nil, false, errors.New("invalid request address") } return request, requestAddons, false, nil default: - return nil, nil, isfb, newError("invalid request version") + return nil, nil, isfb, errors.New("invalid request version") } } @@ -138,15 +138,15 @@ func EncodeResponseHeader(writer io.Writer, request *protocol.RequestHeader, res defer buffer.Release() if err := buffer.WriteByte(request.Version); err != nil { - return newError("failed to write response version").Base(err) + return errors.New("failed to write response version").Base(err) } if err := EncodeHeaderAddons(&buffer, responseAddons); err != nil { - return newError("failed to encode response header addons").Base(err) + return errors.New("failed to encode response header addons").Base(err) } if _, err := writer.Write(buffer.Bytes()); err != nil { - return newError("failed to write response header").Base(err) + return errors.New("failed to write response header").Base(err) } return nil @@ -158,16 +158,16 @@ func DecodeResponseHeader(reader io.Reader, request *protocol.RequestHeader) (*A defer buffer.Release() if _, err := buffer.ReadFullFrom(reader, 1); err != nil { - return nil, newError("failed to read response version").Base(err) + return nil, errors.New("failed to read response version").Base(err) } if buffer.Byte(0) != request.Version { - return nil, newError("unexpected response version. Expecting ", int(request.Version), " but actually ", int(buffer.Byte(0))) + return nil, errors.New("unexpected response version. Expecting ", int(request.Version), " but actually ", int(buffer.Byte(0))) } responseAddons, err := DecodeHeaderAddons(&buffer, reader) if err != nil { - return nil, newError("failed to decode response header addons").Base(err) + return nil, errors.New("failed to decode response header addons").Base(err) } return responseAddons, nil diff --git a/xray-core/proxy/vless/encoding/errors.generated.go b/xray-core/proxy/vless/encoding/errors.generated.go deleted file mode 100644 index 267711d941..0000000000 --- a/xray-core/proxy/vless/encoding/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package encoding - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/proxy/vless/errors.generated.go b/xray-core/proxy/vless/errors.generated.go deleted file mode 100644 index 9487ff0e6f..0000000000 --- a/xray-core/proxy/vless/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package vless - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/proxy/vless/inbound/errors.generated.go b/xray-core/proxy/vless/inbound/errors.generated.go deleted file mode 100644 index c2d7295e46..0000000000 --- a/xray-core/proxy/vless/inbound/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package inbound - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/proxy/vless/inbound/inbound.go b/xray-core/proxy/vless/inbound/inbound.go index 1b31751c48..891f725d3b 100644 --- a/xray-core/proxy/vless/inbound/inbound.go +++ b/xray-core/proxy/vless/inbound/inbound.go @@ -72,10 +72,10 @@ func New(ctx context.Context, config *Config, dc dns.Client) (*Handler, error) { for _, user := range config.Clients { u, err := user.ToMemoryUser() if err != nil { - return nil, newError("failed to get VLESS user").Base(err).AtError() + return nil, errors.New("failed to get VLESS user").Base(err).AtError() } if err := handler.AddUser(ctx, u); err != nil { - return nil, newError("failed to initiate user").Base(err).AtError() + return nil, errors.New("failed to initiate user").Base(err).AtError() } } @@ -93,7 +93,7 @@ func New(ctx context.Context, config *Config, dc dns.Client) (*Handler, error) { /* if fb.Path != "" { if r, err := regexp.Compile(fb.Path); err != nil { - return nil, newError("invalid path regexp").Base(err).AtError() + return nil, errors.New("invalid path regexp").Base(err).AtError() } else { handler.regexps[fb.Path] = r } @@ -177,8 +177,6 @@ func (*Handler) Network() []net.Network { // Process implements proxy.Inbound.Process(). func (h *Handler) Process(ctx context.Context, network net.Network, connection stat.Connection, dispatcher routing.Dispatcher) error { - sid := session.ExportIDToError(ctx) - iConn := connection if statConn, ok := iConn.(*stat.CounterConnection); ok { iConn = statConn.Connection @@ -186,13 +184,13 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s sessionPolicy := h.policyManager.ForLevel(0) if err := connection.SetReadDeadline(time.Now().Add(sessionPolicy.Timeouts.Handshake)); err != nil { - return newError("unable to set read deadline").Base(err).AtWarning() + return errors.New("unable to set read deadline").Base(err).AtWarning() } first := buf.FromBytes(make([]byte, buf.Size)) first.Clear() firstLen, _ := first.ReadFrom(connection) - newError("firstLen = ", firstLen).AtInfo().WriteToLog(sid) + errors.LogInfo(ctx, "firstLen = ", firstLen) reader := &buf.BufferedReader{ Reader: buf.NewReader(connection), @@ -207,7 +205,7 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s isfb := napfb != nil if isfb && firstLen < 18 { - err = newError("fallback directly") + err = errors.New("fallback directly") } else { request, requestAddons, isfb, err = encoding.DecodeRequestHeader(isfb, first, reader, h.validator) } @@ -215,9 +213,9 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s if err != nil { if isfb { if err := connection.SetReadDeadline(time.Time{}); err != nil { - newError("unable to set back read deadline").Base(err).AtWarning().WriteToLog(sid) + errors.LogWarningInner(ctx, err, "unable to set back read deadline") } - newError("fallback starts").Base(err).AtInfo().WriteToLog(sid) + errors.LogInfoInner(ctx, err, "fallback starts") name := "" alpn := "" @@ -225,14 +223,14 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s cs := tlsConn.ConnectionState() name = cs.ServerName alpn = cs.NegotiatedProtocol - newError("realName = " + name).AtInfo().WriteToLog(sid) - newError("realAlpn = " + alpn).AtInfo().WriteToLog(sid) + errors.LogInfo(ctx, "realName = " + name) + errors.LogInfo(ctx, "realAlpn = " + alpn) } else if realityConn, ok := iConn.(*reality.Conn); ok { cs := realityConn.ConnectionState() name = cs.ServerName alpn = cs.NegotiatedProtocol - newError("realName = " + name).AtInfo().WriteToLog(sid) - newError("realAlpn = " + alpn).AtInfo().WriteToLog(sid) + errors.LogInfo(ctx, "realName = " + name) + errors.LogInfo(ctx, "realAlpn = " + alpn) } name = strings.ToLower(name) alpn = strings.ToLower(alpn) @@ -254,7 +252,7 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s } apfb := napfb[name] if apfb == nil { - return newError(`failed to find the default "name" config`).AtWarning() + return errors.New(`failed to find the default "name" config`).AtWarning() } if apfb[alpn] == nil { @@ -262,7 +260,7 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s } pfb := apfb[alpn] if pfb == nil { - return newError(`failed to find the default "alpn" config`).AtWarning() + return errors.New(`failed to find the default "alpn" config`).AtWarning() } path := "" @@ -271,7 +269,7 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s if lines := bytes.Split(firstBytes, []byte{'\r', '\n'}); len(lines) > 1 { if s := bytes.Split(lines[0], []byte{' '}); len(s) == 3 { if len(s[0]) < 8 && len(s[1]) > 0 && len(s[2]) == 8 { - newError("realPath = " + string(s[1])).AtInfo().WriteToLog(sid) + errors.New("realPath = " + string(s[1])).AtInfo().WriteToLog(sid) for _, fb := range pfb { if fb.Path != "" && h.regexps[fb.Path].Match(s[1]) { path = fb.Path @@ -297,7 +295,7 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s } if k == '?' || k == ' ' { path = string(firstBytes[i:j]) - newError("realPath = " + path).AtInfo().WriteToLog(sid) + errors.LogInfo(ctx, "realPath = " + path) if pfb[path] == nil { path = "" } @@ -311,7 +309,7 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s } fb := pfb[path] if fb == nil { - return newError(`failed to find the default "path" config`).AtWarning() + return errors.New(`failed to find the default "path" config`).AtWarning() } ctx, cancel := context.WithCancel(ctx) @@ -327,7 +325,7 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s } return nil }); err != nil { - return newError("failed to dial to " + fb.Dest).Base(err).AtWarning() + return errors.New("failed to dial to " + fb.Dest).Base(err).AtWarning() } defer conn.Close() @@ -387,11 +385,11 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s pro.Write([]byte{byte(p1 >> 8), byte(p1), byte(p2 >> 8), byte(p2)}) } if err := serverWriter.WriteMultiBuffer(buf.MultiBuffer{pro}); err != nil { - return newError("failed to set PROXY protocol v", fb.Xver).Base(err).AtWarning() + return errors.New("failed to set PROXY protocol v", fb.Xver).Base(err).AtWarning() } } if err := buf.Copy(reader, serverWriter, buf.UpdateActivity(timer)); err != nil { - return newError("failed to fallback request payload").Base(err).AtInfo() + return errors.New("failed to fallback request payload").Base(err).AtInfo() } return nil } @@ -401,7 +399,7 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s getResponse := func() error { defer timer.SetTimeout(sessionPolicy.Timeouts.UplinkOnly) if err := buf.Copy(serverReader, writer, buf.UpdateActivity(timer)); err != nil { - return newError("failed to deliver response payload").Base(err).AtInfo() + return errors.New("failed to deliver response payload").Base(err).AtInfo() } return nil } @@ -409,7 +407,7 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s if err := task.Run(ctx, task.OnSuccess(postRequest, task.Close(serverWriter)), task.OnSuccess(getResponse, task.Close(writer))); err != nil { common.Interrupt(serverReader) common.Interrupt(serverWriter) - return newError("fallback ends").Base(err).AtInfo() + return errors.New("fallback ends").Base(err).AtInfo() } return nil } @@ -421,15 +419,15 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s Status: log.AccessRejected, Reason: err, }) - err = newError("invalid request from ", connection.RemoteAddr()).Base(err).AtInfo() + err = errors.New("invalid request from ", connection.RemoteAddr()).Base(err).AtInfo() } return err } if err := connection.SetReadDeadline(time.Time{}); err != nil { - newError("unable to set back read deadline").Base(err).AtWarning().WriteToLog(sid) + errors.LogWarningInner(ctx, err, "unable to set back read deadline") } - newError("received request for ", request.Destination()).AtInfo().WriteToLog(sid) + errors.LogInfo(ctx, "received request for ", request.Destination()) inbound := session.InboundFromContext(ctx) if inbound == nil { @@ -452,7 +450,7 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s inbound.CanSpliceCopy = 2 switch request.Command { case protocol.RequestCommandUDP: - return newError(requestAddons.Flow + " doesn't support UDP").AtWarning() + return errors.New(requestAddons.Flow + " doesn't support UDP").AtWarning() case protocol.RequestCommandMux: fallthrough // we will break Mux connections that contain TCP requests case protocol.RequestCommandTCP: @@ -460,7 +458,7 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s var p uintptr if tlsConn, ok := iConn.(*tls.Conn); ok { if tlsConn.ConnectionState().Version != gotls.VersionTLS13 { - return newError(`failed to use `+requestAddons.Flow+`, found outer tls version `, tlsConn.ConnectionState().Version).AtWarning() + return errors.New(`failed to use `+requestAddons.Flow+`, found outer tls version `, tlsConn.ConnectionState().Version).AtWarning() } t = reflect.TypeOf(tlsConn.Conn).Elem() p = uintptr(unsafe.Pointer(tlsConn.Conn)) @@ -468,7 +466,7 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s t = reflect.TypeOf(realityConn.Conn).Elem() p = uintptr(unsafe.Pointer(realityConn.Conn)) } else { - return newError("XTLS only supports TLS and REALITY directly for now.").AtWarning() + return errors.New("XTLS only supports TLS and REALITY directly for now.").AtWarning() } i, _ := t.FieldByName("input") r, _ := t.FieldByName("rawInput") @@ -476,15 +474,15 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s rawInput = (*bytes.Buffer)(unsafe.Pointer(p + r.Offset)) } } else { - return newError(account.ID.String() + " is not able to use " + requestAddons.Flow).AtWarning() + return errors.New(account.ID.String() + " is not able to use " + requestAddons.Flow).AtWarning() } case "": inbound.CanSpliceCopy = 3 if account.Flow == vless.XRV && (request.Command == protocol.RequestCommandTCP || isMuxAndNotXUDP(request, first)) { - return newError(account.ID.String() + " is not able to use \"\". Note that the pure TLS proxy has certain TLS in TLS characters.").AtWarning() + return errors.New(account.ID.String() + " is not able to use \"\". Note that the pure TLS proxy has certain TLS in TLS characters.").AtWarning() } default: - return newError("unknown request flow " + requestAddons.Flow).AtWarning() + return errors.New("unknown request flow " + requestAddons.Flow).AtWarning() } if request.Command != protocol.RequestCommandMux { @@ -507,7 +505,7 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s link, err := dispatcher.Dispatch(ctx, request.Destination()) if err != nil { - return newError("failed to dispatch request to ", request.Destination()).Base(err).AtWarning() + return errors.New("failed to dispatch request to ", request.Destination()).Base(err).AtWarning() } serverReader := link.Reader // .(*pipe.Reader) @@ -531,7 +529,7 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s } if err != nil { - return newError("failed to transfer request payload").Base(err).AtInfo() + return errors.New("failed to transfer request payload").Base(err).AtInfo() } return nil @@ -542,7 +540,7 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s bufferWriter := buf.NewBufferedWriter(buf.NewWriter(connection)) if err := encoding.EncodeResponseHeader(bufferWriter, request, responseAddons); err != nil { - return newError("failed to encode response header").Base(err).AtWarning() + return errors.New("failed to encode response header").Base(err).AtWarning() } // default: clientWriter := bufferWriter @@ -556,7 +554,7 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s } // Flush; bufferWriter.WriteMultiBufer now is bufferWriter.writer.WriteMultiBuffer if err := bufferWriter.SetBuffered(false); err != nil { - return newError("failed to write A response payload").Base(err).AtWarning() + return errors.New("failed to write A response payload").Base(err).AtWarning() } var err error @@ -567,7 +565,7 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s err = buf.Copy(serverReader, clientWriter, buf.UpdateActivity(timer)) } if err != nil { - return newError("failed to transfer response payload").Base(err).AtInfo() + return errors.New("failed to transfer response payload").Base(err).AtInfo() } // Indicates the end of response payload. switch responseAddons.Flow { @@ -580,7 +578,7 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s if err := task.Run(ctx, task.OnSuccess(postRequest, task.Close(serverWriter)), getResponse); err != nil { common.Interrupt(serverReader) common.Interrupt(serverWriter) - return newError("connection ends").Base(err).AtInfo() + return errors.New("connection ends").Base(err).AtInfo() } return nil diff --git a/xray-core/proxy/vless/outbound/errors.generated.go b/xray-core/proxy/vless/outbound/errors.generated.go deleted file mode 100644 index 0796682364..0000000000 --- a/xray-core/proxy/vless/outbound/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package outbound - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/proxy/vless/outbound/outbound.go b/xray-core/proxy/vless/outbound/outbound.go index bf98253b45..0c9e472164 100644 --- a/xray-core/proxy/vless/outbound/outbound.go +++ b/xray-core/proxy/vless/outbound/outbound.go @@ -13,6 +13,7 @@ import ( utls "github.com/refraction-networking/utls" "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/protocol" "github.com/xtls/xray-core/common/retry" @@ -52,7 +53,7 @@ func New(ctx context.Context, config *Config) (*Handler, error) { for _, rec := range config.Vnext { s, err := protocol.NewServerSpecFromPB(rec) if err != nil { - return nil, newError("failed to parse server spec").Base(err).AtError() + return nil, errors.New("failed to parse server spec").Base(err).AtError() } serverList.AddServer(s) } @@ -71,9 +72,9 @@ func New(ctx context.Context, config *Config) (*Handler, error) { // Process implements proxy.Outbound.Process(). func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer internet.Dialer) error { outbounds := session.OutboundsFromContext(ctx) - ob := outbounds[len(outbounds) - 1] + ob := outbounds[len(outbounds)-1] if !ob.Target.IsValid() { - return newError("target not specified").AtError() + return errors.New("target not specified").AtError() } ob.Name = "vless" @@ -88,7 +89,7 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte } return nil }); err != nil { - return newError("failed to find an available destination").Base(err).AtWarning() + return errors.New("failed to find an available destination").Base(err).AtWarning() } defer conn.Close() @@ -97,7 +98,7 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte iConn = statConn.Connection } target := ob.Target - newError("tunneling request to ", target, " via ", rec.Destination().NetAddr()).AtInfo().WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "tunneling request to ", target, " via ", rec.Destination().NetAddr()) command := protocol.RequestCommandTCP if target.Network == net.Network_UDP { @@ -134,7 +135,7 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte switch request.Command { case protocol.RequestCommandUDP: if !allowUDP443 && request.Port == 443 { - return newError("XTLS rejected UDP/443 traffic").AtInfo() + return errors.New("XTLS rejected UDP/443 traffic").AtInfo() } case protocol.RequestCommandMux: fallthrough // let server break Mux connections that contain TCP requests @@ -151,7 +152,7 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte t = reflect.TypeOf(realityConn.Conn).Elem() p = uintptr(unsafe.Pointer(realityConn.Conn)) } else { - return newError("XTLS only supports TLS and REALITY directly for now.").AtWarning() + return errors.New("XTLS only supports TLS and REALITY directly for now.").AtWarning() } i, _ := t.FieldByName("input") r, _ := t.FieldByName("rawInput") @@ -191,7 +192,7 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte bufferWriter := buf.NewBufferedWriter(buf.NewWriter(conn)) if err := encoding.EncodeRequestHeader(bufferWriter, request, requestAddons); err != nil { - return newError("failed to encode request header").Base(err).AtWarning() + return errors.New("failed to encode request header").Base(err).AtWarning() } // default: serverWriter := bufferWriter @@ -210,28 +211,28 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte return err1 } else if requestAddons.Flow == vless.XRV { mb := make(buf.MultiBuffer, 1) - newError("Insert padding with empty content to camouflage VLESS header ", mb.Len()).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "Insert padding with empty content to camouflage VLESS header ", mb.Len()) if err := serverWriter.WriteMultiBuffer(mb); err != nil { return err // ... } } } else { - newError("Reader is not timeout reader, will send out vless header separately from first payload").AtDebug().WriteToLog(session.ExportIDToError(ctx)) + errors.LogDebug(ctx, "Reader is not timeout reader, will send out vless header separately from first payload") } // Flush; bufferWriter.WriteMultiBufer now is bufferWriter.writer.WriteMultiBuffer if err := bufferWriter.SetBuffered(false); err != nil { - return newError("failed to write A request payload").Base(err).AtWarning() + return errors.New("failed to write A request payload").Base(err).AtWarning() } var err error if requestAddons.Flow == vless.XRV { if tlsConn, ok := iConn.(*tls.Conn); ok { if tlsConn.ConnectionState().Version != gotls.VersionTLS13 { - return newError(`failed to use `+requestAddons.Flow+`, found outer tls version `, tlsConn.ConnectionState().Version).AtWarning() + return errors.New(`failed to use `+requestAddons.Flow+`, found outer tls version `, tlsConn.ConnectionState().Version).AtWarning() } } else if utlsConn, ok := iConn.(*tls.UConn); ok { if utlsConn.ConnectionState().Version != utls.VersionTLS13 { - return newError(`failed to use `+requestAddons.Flow+`, found outer tls version `, utlsConn.ConnectionState().Version).AtWarning() + return errors.New(`failed to use `+requestAddons.Flow+`, found outer tls version `, utlsConn.ConnectionState().Version).AtWarning() } } ctx1 := session.ContextWithInbound(ctx, nil) // TODO enable splice @@ -241,7 +242,7 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte err = buf.Copy(clientReader, serverWriter, buf.UpdateActivity(timer)) } if err != nil { - return newError("failed to transfer request payload").Base(err).AtInfo() + return errors.New("failed to transfer request payload").Base(err).AtInfo() } // Indicates the end of request payload. @@ -256,7 +257,7 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte responseAddons, err := encoding.DecodeResponseHeader(conn, request) if err != nil { - return newError("failed to decode response header").Base(err).AtInfo() + return errors.New("failed to decode response header").Base(err).AtInfo() } // default: serverReader := buf.NewReader(conn) @@ -280,7 +281,7 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte } if err != nil { - return newError("failed to transfer response payload").Base(err).AtInfo() + return errors.New("failed to transfer response payload").Base(err).AtInfo() } return nil @@ -291,7 +292,7 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte } if err := task.Run(ctx, postRequest, task.OnSuccess(getResponse, task.Close(clientWriter))); err != nil { - return newError("connection ends").Base(err).AtInfo() + return errors.New("connection ends").Base(err).AtInfo() } return nil diff --git a/xray-core/proxy/vless/validator.go b/xray-core/proxy/vless/validator.go index c294eceffa..72038cab85 100644 --- a/xray-core/proxy/vless/validator.go +++ b/xray-core/proxy/vless/validator.go @@ -4,6 +4,7 @@ import ( "strings" "sync" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/protocol" "github.com/xtls/xray-core/common/uuid" ) @@ -20,7 +21,7 @@ func (v *Validator) Add(u *protocol.MemoryUser) error { if u.Email != "" { _, loaded := v.email.LoadOrStore(strings.ToLower(u.Email), u) if loaded { - return newError("User ", u.Email, " already exists.") + return errors.New("User ", u.Email, " already exists.") } } v.users.Store(u.Account.(*MemoryAccount).ID.UUID(), u) @@ -30,12 +31,12 @@ func (v *Validator) Add(u *protocol.MemoryUser) error { // Del a VLESS user with a non-empty Email. func (v *Validator) Del(e string) error { if e == "" { - return newError("Email must not be empty.") + return errors.New("Email must not be empty.") } le := strings.ToLower(e) u, _ := v.email.Load(le) if u == nil { - return newError("User ", e, " not found.") + return errors.New("User ", e, " not found.") } v.email.Delete(le) v.users.Delete(u.(*protocol.MemoryUser).Account.(*MemoryAccount).ID.UUID()) diff --git a/xray-core/proxy/vmess/account.go b/xray-core/proxy/vmess/account.go index d0a776e6d3..5ece7a57c7 100644 --- a/xray-core/proxy/vmess/account.go +++ b/xray-core/proxy/vmess/account.go @@ -3,6 +3,7 @@ package vmess import ( "strings" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/protocol" "github.com/xtls/xray-core/common/uuid" ) @@ -31,7 +32,7 @@ func (a *MemoryAccount) Equals(account protocol.Account) bool { func (a *Account) AsAccount() (protocol.Account, error) { id, err := uuid.ParseString(a.Id) if err != nil { - return nil, newError("failed to parse ID").Base(err).AtError() + return nil, errors.New("failed to parse ID").Base(err).AtError() } protoID := protocol.NewID(id) var AuthenticatedLength, NoTerminationSignal bool diff --git a/xray-core/proxy/vmess/encoding/client.go b/xray-core/proxy/vmess/encoding/client.go index 0b7a009814..d678646b64 100644 --- a/xray-core/proxy/vmess/encoding/client.go +++ b/xray-core/proxy/vmess/encoding/client.go @@ -17,6 +17,7 @@ import ( "github.com/xtls/xray-core/common/crypto" "github.com/xtls/xray-core/common/dice" "github.com/xtls/xray-core/common/drain" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/protocol" "github.com/xtls/xray-core/proxy/vmess" vmessaead "github.com/xtls/xray-core/proxy/vmess/aead" @@ -53,7 +54,7 @@ func NewClientSession(ctx context.Context, behaviorSeed int64) *ClientSession { var err error session.readDrainer, err = drain.NewBehaviorSeedLimitedDrainer(behaviorSeed, 18, 3266, 64) if err != nil { - newError("unable to initialize drainer").Base(err).WriteToLog() + errors.LogInfoInner(ctx, err, "unable to initialize drainer") session.readDrainer = drain.NewNopDrainer() } } @@ -79,7 +80,7 @@ func (c *ClientSession) EncodeRequestHeader(header *protocol.RequestHeader, writ if header.Command != protocol.RequestCommandMux { if err := addrParser.WriteAddressPort(buffer, header.Address, header.Port); err != nil { - return newError("failed to writer address and port").Base(err) + return errors.New("failed to writer address and port").Base(err) } } @@ -112,7 +113,7 @@ func (c *ClientSession) EncodeRequestBody(request *protocol.RequestHeader, write var ok bool padding, ok = sizeParser.(crypto.PaddingLengthGenerator) if !ok { - return nil, newError("invalid option: RequestOptionGlobalPadding") + return nil, errors.New("invalid option: RequestOptionGlobalPadding") } } @@ -173,7 +174,7 @@ func (c *ClientSession) EncodeRequestBody(request *protocol.RequestHeader, write } return crypto.NewAuthenticationWriter(auth, sizeParser, writer, request.Command.TransferType(), padding), nil default: - return nil, newError("invalid option: Security") + return nil, errors.New("invalid option: Security") } } @@ -190,12 +191,12 @@ func (c *ClientSession) DecodeResponseHeader(reader io.Reader) (*protocol.Respon if n, err := io.ReadFull(reader, aeadEncryptedResponseHeaderLength[:]); err != nil { c.readDrainer.AcknowledgeReceive(n) - return nil, drain.WithError(c.readDrainer, reader, newError("Unable to Read Header Len").Base(err)) + return nil, drain.WithError(c.readDrainer, reader, errors.New("Unable to Read Header Len").Base(err)) } else { // nolint: golint c.readDrainer.AcknowledgeReceive(n) } if decryptedResponseHeaderLengthBinaryBuffer, err := aeadResponseHeaderLengthEncryptionAEAD.Open(nil, aeadResponseHeaderLengthEncryptionIV, aeadEncryptedResponseHeaderLength[:], nil); err != nil { - return nil, drain.WithError(c.readDrainer, reader, newError("Failed To Decrypt Length").Base(err)) + return nil, drain.WithError(c.readDrainer, reader, errors.New("Failed To Decrypt Length").Base(err)) } else { // nolint: golint common.Must(binary.Read(bytes.NewReader(decryptedResponseHeaderLengthBinaryBuffer), binary.BigEndian, &decryptedResponseHeaderLengthBinaryDeserializeBuffer)) decryptedResponseHeaderLength = int(decryptedResponseHeaderLengthBinaryDeserializeBuffer) @@ -211,13 +212,13 @@ func (c *ClientSession) DecodeResponseHeader(reader io.Reader) (*protocol.Respon if n, err := io.ReadFull(reader, encryptedResponseHeaderBuffer); err != nil { c.readDrainer.AcknowledgeReceive(n) - return nil, drain.WithError(c.readDrainer, reader, newError("Unable to Read Header Data").Base(err)) + return nil, drain.WithError(c.readDrainer, reader, errors.New("Unable to Read Header Data").Base(err)) } else { // nolint: golint c.readDrainer.AcknowledgeReceive(n) } if decryptedResponseHeaderBuffer, err := aeadResponseHeaderPayloadEncryptionAEAD.Open(nil, aeadResponseHeaderPayloadEncryptionIV, encryptedResponseHeaderBuffer, nil); err != nil { - return nil, drain.WithError(c.readDrainer, reader, newError("Failed To Decrypt Payload").Base(err)) + return nil, drain.WithError(c.readDrainer, reader, errors.New("Failed To Decrypt Payload").Base(err)) } else { // nolint: golint c.responseReader = bytes.NewReader(decryptedResponseHeaderBuffer) } @@ -226,11 +227,11 @@ func (c *ClientSession) DecodeResponseHeader(reader io.Reader) (*protocol.Respon defer buffer.Release() if _, err := buffer.ReadFullFrom(c.responseReader, 4); err != nil { - return nil, newError("failed to read response header").Base(err).AtWarning() + return nil, errors.New("failed to read response header").Base(err).AtWarning() } if buffer.Byte(0) != c.responseHeader { - return nil, newError("unexpected response header. Expecting ", int(c.responseHeader), " but actually ", int(buffer.Byte(0))) + return nil, errors.New("unexpected response header. Expecting ", int(c.responseHeader), " but actually ", int(buffer.Byte(0))) } header := &protocol.ResponseHeader{ @@ -243,7 +244,7 @@ func (c *ClientSession) DecodeResponseHeader(reader io.Reader) (*protocol.Respon buffer.Clear() if _, err := buffer.ReadFullFrom(c.responseReader, dataLen); err != nil { - return nil, newError("failed to read response command").Base(err) + return nil, errors.New("failed to read response command").Base(err) } command, err := UnmarshalCommand(cmdID, buffer.Bytes()) if err == nil { @@ -265,7 +266,7 @@ func (c *ClientSession) DecodeResponseBody(request *protocol.RequestHeader, read var ok bool padding, ok = sizeParser.(crypto.PaddingLengthGenerator) if !ok { - return nil, newError("invalid option: RequestOptionGlobalPadding") + return nil, errors.New("invalid option: RequestOptionGlobalPadding") } } @@ -328,7 +329,7 @@ func (c *ClientSession) DecodeResponseBody(request *protocol.RequestHeader, read } return crypto.NewAuthenticationReader(auth, sizeParser, reader, request.Command.TransferType(), padding), nil default: - return nil, newError("invalid option: Security") + return nil, errors.New("invalid option: Security") } } diff --git a/xray-core/proxy/vmess/encoding/commands.go b/xray-core/proxy/vmess/encoding/commands.go index 5a4d370882..cdab871bd1 100644 --- a/xray-core/proxy/vmess/encoding/commands.go +++ b/xray-core/proxy/vmess/encoding/commands.go @@ -6,6 +6,7 @@ import ( "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/protocol" "github.com/xtls/xray-core/common/serial" @@ -13,11 +14,11 @@ import ( ) var ( - ErrCommandTooLarge = newError("Command too large.") - ErrCommandTypeMismatch = newError("Command type mismatch.") - ErrInvalidAuth = newError("Invalid auth.") - ErrInsufficientLength = newError("Insufficient length.") - ErrUnknownCommand = newError("Unknown command.") + ErrCommandTooLarge = errors.New("Command too large.") + ErrCommandTypeMismatch = errors.New("Command type mismatch.") + ErrInvalidAuth = errors.New("Invalid auth.") + ErrInsufficientLength = errors.New("Insufficient length.") + ErrUnknownCommand = errors.New("Unknown command.") ) func MarshalCommand(command interface{}, writer io.Writer) error { diff --git a/xray-core/proxy/vmess/encoding/errors.generated.go b/xray-core/proxy/vmess/encoding/errors.generated.go deleted file mode 100644 index 267711d941..0000000000 --- a/xray-core/proxy/vmess/encoding/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package encoding - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/proxy/vmess/encoding/server.go b/xray-core/proxy/vmess/encoding/server.go index 371bfdc0a0..99e7abc908 100644 --- a/xray-core/proxy/vmess/encoding/server.go +++ b/xray-core/proxy/vmess/encoding/server.go @@ -16,6 +16,7 @@ import ( "github.com/xtls/xray-core/common/buf" "github.com/xtls/xray-core/common/crypto" "github.com/xtls/xray-core/common/drain" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/protocol" "github.com/xtls/xray-core/common/task" @@ -75,7 +76,7 @@ func (h *SessionHistory) removeExpiredEntries() error { defer h.Unlock() if len(h.cache) == 0 { - return newError("nothing to do") + return errors.New("nothing to do") } for session, expire := range h.cache { @@ -130,7 +131,7 @@ func (s *ServerSession) DecodeRequestHeader(reader io.Reader, isDrain bool) (*pr drainer, err := drain.NewBehaviorSeedLimitedDrainer(int64(s.userValidator.GetBehaviorSeed()), 16+38, 3266, 64) if err != nil { - return nil, newError("failed to initialize drainer").Base(err) + return nil, errors.New("failed to initialize drainer").Base(err) } drainConnection := func(e error) error { @@ -147,7 +148,7 @@ func (s *ServerSession) DecodeRequestHeader(reader io.Reader, isDrain bool) (*pr }() if _, err := buffer.ReadFullFrom(reader, protocol.IDBytesLen); err != nil { - return nil, newError("failed to read request header").Base(err) + return nil, errors.New("failed to read request header").Base(err) } var decryptor io.Reader @@ -167,20 +168,20 @@ func (s *ServerSession) DecodeRequestHeader(reader io.Reader, isDrain bool) (*pr if errorReason != nil { if shouldDrain { drainer.AcknowledgeReceive(bytesRead) - return nil, drainConnection(newError("AEAD read failed").Base(errorReason)) + return nil, drainConnection(errors.New("AEAD read failed").Base(errorReason)) } else { - return nil, drainConnection(newError("AEAD read failed, drain skipped").Base(errorReason)) + return nil, drainConnection(errors.New("AEAD read failed, drain skipped").Base(errorReason)) } } decryptor = bytes.NewReader(aeadData) default: - return nil, drainConnection(newError("invalid user").Base(errorAEAD)) + return nil, drainConnection(errors.New("invalid user").Base(errorAEAD)) } drainer.AcknowledgeReceive(int(buffer.Len())) buffer.Clear() if _, err := buffer.ReadFullFrom(decryptor, 38); err != nil { - return nil, newError("failed to read request header").Base(err) + return nil, errors.New("failed to read request header").Base(err) } request := &protocol.RequestHeader{ @@ -195,7 +196,7 @@ func (s *ServerSession) DecodeRequestHeader(reader io.Reader, isDrain bool) (*pr sid.key = s.requestBodyKey sid.nonce = s.requestBodyIV if !s.sessionHistory.addIfNotExits(sid) { - return nil, newError("duplicated session id, possibly under replay attack, but this is a AEAD request") + return nil, errors.New("duplicated session id, possibly under replay attack, but this is a AEAD request") } s.responseHeader = buffer.Byte(33) // 1 byte @@ -219,12 +220,12 @@ func (s *ServerSession) DecodeRequestHeader(reader io.Reader, isDrain bool) (*pr if paddingLen > 0 { if _, err := buffer.ReadFullFrom(decryptor, int32(paddingLen)); err != nil { - return nil, newError("failed to read padding").Base(err) + return nil, errors.New("failed to read padding").Base(err) } } if _, err := buffer.ReadFullFrom(decryptor, 4); err != nil { - return nil, newError("failed to read checksum").Base(err) + return nil, errors.New("failed to read checksum").Base(err) } fnv1a := fnv.New32a() @@ -233,15 +234,15 @@ func (s *ServerSession) DecodeRequestHeader(reader io.Reader, isDrain bool) (*pr expectedHash := binary.BigEndian.Uint32(buffer.BytesFrom(-4)) if actualHash != expectedHash { - return nil, newError("invalid auth, but this is a AEAD request") + return nil, errors.New("invalid auth, but this is a AEAD request") } if request.Address == nil { - return nil, newError("invalid remote address") + return nil, errors.New("invalid remote address") } if request.Security == protocol.SecurityType_UNKNOWN || request.Security == protocol.SecurityType_AUTO { - return nil, newError("unknown security type: ", request.Security) + return nil, errors.New("unknown security type: ", request.Security) } return request, nil @@ -258,7 +259,7 @@ func (s *ServerSession) DecodeRequestBody(request *protocol.RequestHeader, reade var ok bool padding, ok = sizeParser.(crypto.PaddingLengthGenerator) if !ok { - return nil, newError("invalid option: RequestOptionGlobalPadding") + return nil, errors.New("invalid option: RequestOptionGlobalPadding") } } @@ -321,7 +322,7 @@ func (s *ServerSession) DecodeRequestBody(request *protocol.RequestHeader, reade return crypto.NewAuthenticationReader(auth, sizeParser, reader, request.Command.TransferType(), padding), nil default: - return nil, newError("invalid option: Security") + return nil, errors.New("invalid option: Security") } } @@ -382,7 +383,7 @@ func (s *ServerSession) EncodeResponseBody(request *protocol.RequestHeader, writ var ok bool padding, ok = sizeParser.(crypto.PaddingLengthGenerator) if !ok { - return nil, newError("invalid option: RequestOptionGlobalPadding") + return nil, errors.New("invalid option: RequestOptionGlobalPadding") } } @@ -445,6 +446,6 @@ func (s *ServerSession) EncodeResponseBody(request *protocol.RequestHeader, writ return crypto.NewAuthenticationWriter(auth, sizeParser, writer, request.Command.TransferType(), padding), nil default: - return nil, newError("invalid option: Security") + return nil, errors.New("invalid option: Security") } } diff --git a/xray-core/proxy/vmess/errors.generated.go b/xray-core/proxy/vmess/errors.generated.go deleted file mode 100644 index 29d69d743c..0000000000 --- a/xray-core/proxy/vmess/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package vmess - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/proxy/vmess/inbound/errors.generated.go b/xray-core/proxy/vmess/inbound/errors.generated.go deleted file mode 100644 index c2d7295e46..0000000000 --- a/xray-core/proxy/vmess/inbound/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package inbound - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/proxy/vmess/inbound/inbound.go b/xray-core/proxy/vmess/inbound/inbound.go index f5340f20c4..77db249ffc 100644 --- a/xray-core/proxy/vmess/inbound/inbound.go +++ b/xray-core/proxy/vmess/inbound/inbound.go @@ -120,11 +120,11 @@ func New(ctx context.Context, config *Config) (*Handler, error) { for _, user := range config.User { mUser, err := user.ToMemoryUser() if err != nil { - return nil, newError("failed to get VMess user").Base(err) + return nil, errors.New("failed to get VMess user").Base(err) } if err := handler.AddUser(ctx, mUser); err != nil { - return nil, newError("failed to initiate user").Base(err) + return nil, errors.New("failed to initiate user").Base(err) } } @@ -153,17 +153,17 @@ func (h *Handler) GetUser(email string) *protocol.MemoryUser { func (h *Handler) AddUser(ctx context.Context, user *protocol.MemoryUser) error { if len(user.Email) > 0 && !h.usersByEmail.Add(user) { - return newError("User ", user.Email, " already exists.") + return errors.New("User ", user.Email, " already exists.") } return h.clients.Add(user) } func (h *Handler) RemoveUser(ctx context.Context, email string) error { if email == "" { - return newError("Email must not be empty.") + return errors.New("Email must not be empty.") } if !h.usersByEmail.Remove(email) { - return newError("User ", email, " not found.") + return errors.New("User ", email, " not found.") } h.clients.Remove(email) return nil @@ -174,7 +174,7 @@ func transferResponse(timer signal.ActivityUpdater, session *encoding.ServerSess bodyWriter, err := session.EncodeResponseBody(request, output) if err != nil { - return newError("failed to start decoding response").Base(err) + return errors.New("failed to start decoding response").Base(err) } { // Optimize for small response packet @@ -211,7 +211,7 @@ func transferResponse(timer signal.ActivityUpdater, session *encoding.ServerSess func (h *Handler) Process(ctx context.Context, network net.Network, connection stat.Connection, dispatcher routing.Dispatcher) error { sessionPolicy := h.policyManager.ForLevel(0) if err := connection.SetReadDeadline(time.Now().Add(sessionPolicy.Timeouts.Handshake)); err != nil { - return newError("unable to set read deadline").Base(err).AtWarning() + return errors.New("unable to set read deadline").Base(err).AtWarning() } iConn := connection @@ -234,7 +234,7 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s Status: log.AccessRejected, Reason: err, }) - err = newError("invalid request from ", connection.RemoteAddr()).Base(err).AtInfo() + err = errors.New("invalid request from ", connection.RemoteAddr()).Base(err).AtInfo() } return err } @@ -249,10 +249,10 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s }) } - newError("received request for ", request.Destination()).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "received request for ", request.Destination()) if err := connection.SetReadDeadline(time.Time{}); err != nil { - newError("unable to set back read deadline").Base(err).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfoInner(ctx, err, "unable to set back read deadline") } inbound := session.InboundFromContext(ctx) @@ -268,7 +268,7 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s ctx = policy.ContextWithBufferPolicy(ctx, sessionPolicy.Buffer) link, err := dispatcher.Dispatch(ctx, request.Destination()) if err != nil { - return newError("failed to dispatch request to ", request.Destination()).Base(err) + return errors.New("failed to dispatch request to ", request.Destination()).Base(err) } requestDone := func() error { @@ -276,10 +276,10 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s bodyReader, err := svrSession.DecodeRequestBody(request, reader) if err != nil { - return newError("failed to start decoding").Base(err) + return errors.New("failed to start decoding").Base(err) } if err := buf.Copy(bodyReader, link.Writer, buf.UpdateActivity(timer)); err != nil { - return newError("failed to transfer request").Base(err) + return errors.New("failed to transfer request").Base(err) } return nil } @@ -300,7 +300,7 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s if err := task.Run(ctx, requestDonePost, responseDone); err != nil { common.Interrupt(link.Reader) common.Interrupt(link.Writer) - return newError("connection ends").Base(err) + return errors.New("connection ends").Base(err) } return nil @@ -312,7 +312,7 @@ func (h *Handler) generateCommand(ctx context.Context, request *protocol.Request if h.inboundHandlerManager != nil { handler, err := h.inboundHandlerManager.GetHandler(ctx, tag) if err != nil { - newError("failed to get detour handler: ", tag).Base(err).AtWarning().WriteToLog(session.ExportIDToError(ctx)) + errors.LogWarningInner(ctx, err, "failed to get detour handler: ", tag) return nil } proxyHandler, port, availableMin := handler.GetRandomInboundProxy() @@ -322,7 +322,7 @@ func (h *Handler) generateCommand(ctx context.Context, request *protocol.Request availableMin = 255 } - newError("pick detour handler for port ", port, " for ", availableMin, " minutes.").AtDebug().WriteToLog(session.ExportIDToError(ctx)) + errors.LogDebug(ctx, "pick detour handler for port ", port, " for ", availableMin, " minutes.") user := inboundHandler.GetUser(request.User.Email) if user == nil { return nil diff --git a/xray-core/proxy/vmess/outbound/errors.generated.go b/xray-core/proxy/vmess/outbound/errors.generated.go deleted file mode 100644 index 0796682364..0000000000 --- a/xray-core/proxy/vmess/outbound/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package outbound - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/proxy/vmess/outbound/outbound.go b/xray-core/proxy/vmess/outbound/outbound.go index 8f102dbb11..2c339e4280 100644 --- a/xray-core/proxy/vmess/outbound/outbound.go +++ b/xray-core/proxy/vmess/outbound/outbound.go @@ -11,6 +11,7 @@ import ( "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/platform" "github.com/xtls/xray-core/common/protocol" @@ -42,7 +43,7 @@ func New(ctx context.Context, config *Config) (*Handler, error) { for _, rec := range config.Receiver { s, err := protocol.NewServerSpecFromPB(rec) if err != nil { - return nil, newError("failed to parse server spec").Base(err) + return nil, errors.New("failed to parse server spec").Base(err) } serverList.AddServer(s) } @@ -61,9 +62,9 @@ func New(ctx context.Context, config *Config) (*Handler, error) { // Process implements proxy.Outbound.Process(). func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer internet.Dialer) error { outbounds := session.OutboundsFromContext(ctx) - ob := outbounds[len(outbounds) - 1] + ob := outbounds[len(outbounds)-1] if !ob.Target.IsValid() { - return newError("target not specified").AtError() + return errors.New("target not specified").AtError() } ob.Name = "vmess" ob.CanSpliceCopy = 3 @@ -81,12 +82,12 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte return nil }) if err != nil { - return newError("failed to find an available destination").Base(err).AtWarning() + return errors.New("failed to find an available destination").Base(err).AtWarning() } defer conn.Close() target := ob.Target - newError("tunneling request to ", target, " via ", rec.Destination().NetAddr()).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "tunneling request to ", target, " via ", rec.Destination().NetAddr()) command := protocol.RequestCommandTCP if target.Network == net.Network_UDP { @@ -163,19 +164,19 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte writer := buf.NewBufferedWriter(buf.NewWriter(conn)) if err := session.EncodeRequestHeader(request, writer); err != nil { - return newError("failed to encode request").Base(err).AtWarning() + return errors.New("failed to encode request").Base(err).AtWarning() } bodyWriter, err := session.EncodeRequestBody(request, writer) if err != nil { - return newError("failed to start encoding").Base(err) + return errors.New("failed to start encoding").Base(err) } bodyWriter2 := bodyWriter if request.Command == protocol.RequestCommandMux && request.Port == 666 { bodyWriter = xudp.NewPacketWriter(bodyWriter, target, xudp.GetGlobalID(ctx)) } if err := buf.CopyOnceTimeout(input, bodyWriter, time.Millisecond*100); err != nil && err != buf.ErrNotTimeoutReader && err != buf.ErrReadTimeout { - return newError("failed to write first payload").Base(err) + return errors.New("failed to write first payload").Base(err) } if err := writer.SetBuffered(false); err != nil { @@ -201,13 +202,13 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte reader := &buf.BufferedReader{Reader: buf.NewReader(conn)} header, err := session.DecodeResponseHeader(reader) if err != nil { - return newError("failed to read header").Base(err) + return errors.New("failed to read header").Base(err) } h.handleCommand(rec.Destination(), header.Command) bodyReader, err := session.DecodeResponseBody(request, reader) if err != nil { - return newError("failed to start encoding response").Base(err) + return errors.New("failed to start encoding response").Base(err) } if request.Command == protocol.RequestCommandMux && request.Port == 666 { bodyReader = xudp.NewPacketReader(&buf.BufferedReader{Reader: bodyReader}) @@ -222,7 +223,7 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte responseDonePost := task.OnSuccess(responseDone, task.Close(output)) if err := task.Run(ctx, requestDone, responseDonePost); err != nil { - return newError("connection ends").Base(err) + return errors.New("connection ends").Base(err) } return nil diff --git a/xray-core/proxy/vmess/validator.go b/xray-core/proxy/vmess/validator.go index bc844061b9..00e49ae260 100644 --- a/xray-core/proxy/vmess/validator.go +++ b/xray-core/proxy/vmess/validator.go @@ -8,6 +8,7 @@ import ( "sync" "github.com/xtls/xray-core/common/dice" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/protocol" "github.com/xtls/xray-core/proxy/vmess/aead" ) @@ -104,6 +105,6 @@ func (v *TimedUserValidator) GetBehaviorSeed() uint64 { return v.behaviorSeed } -var ErrNotFound = newError("Not Found") +var ErrNotFound = errors.New("Not Found") -var ErrTainted = newError("ErrTainted") +var ErrTainted = errors.New("ErrTainted") diff --git a/xray-core/proxy/wireguard/bind.go b/xray-core/proxy/wireguard/bind.go index aaca93ffa7..80ab6a8d9e 100644 --- a/xray-core/proxy/wireguard/bind.go +++ b/xray-core/proxy/wireguard/bind.go @@ -202,7 +202,7 @@ func (bind *netBindServer) Send(buff [][]byte, endpoint conn.Endpoint) error { } if nend.conn == nil { - return newError("connection not open yet") + return errors.New("connection not open yet") } for _, buff := range buff { diff --git a/xray-core/proxy/wireguard/client.go b/xray-core/proxy/wireguard/client.go index 04a7265042..56c91cefa9 100644 --- a/xray-core/proxy/wireguard/client.go +++ b/xray-core/proxy/wireguard/client.go @@ -29,6 +29,7 @@ import ( "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/dice" "github.com/xtls/xray-core/common/log" "github.com/xtls/xray-core/common/net" @@ -120,7 +121,7 @@ func (h *Handler) processWireGuard(ctx context.Context, dialer internet.Dialer) h.net, err = h.makeVirtualTun(bind) if err != nil { - return newError("failed to create virtual tun interface").Base(err) + return errors.New("failed to create virtual tun interface").Base(err) } h.bind = bind return nil @@ -129,9 +130,9 @@ func (h *Handler) processWireGuard(ctx context.Context, dialer internet.Dialer) // Process implements OutboundHandler.Dispatch(). func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer internet.Dialer) error { outbounds := session.OutboundsFromContext(ctx) - ob := outbounds[len(outbounds) - 1] + ob := outbounds[len(outbounds)-1] if !ob.Target.IsValid() { - return newError("target not specified") + return errors.New("target not specified") } ob.Name = "wireguard" ob.CanSpliceCopy = 3 @@ -163,7 +164,7 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte } } if err != nil { - return newError("failed to lookup DNS").Base(err) + return errors.New("failed to lookup DNS").Base(err) } else if len(ips) == 0 { return dns.ErrEmptyResponse } @@ -193,7 +194,7 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte if command == protocol.RequestCommandTCP { conn, err := h.net.DialContextTCPAddrPort(ctx, addrPort) if err != nil { - return newError("failed to create TCP connection").Base(err) + return errors.New("failed to create TCP connection").Base(err) } defer conn.Close() @@ -208,7 +209,7 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte } else if command == protocol.RequestCommandUDP { conn, err := h.net.DialUDPAddrPort(netip.AddrPort{}, addrPort) if err != nil { - return newError("failed to create UDP connection").Base(err) + return errors.New("failed to create UDP connection").Base(err) } defer conn.Close() @@ -230,7 +231,7 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte if err := task.Run(ctx, requestFunc, responseDonePost); err != nil { common.Interrupt(link.Reader) common.Interrupt(link.Writer) - return newError("connection ends").Base(err) + return errors.New("connection ends").Base(err) } return nil @@ -275,14 +276,14 @@ func (h *Handler) createIPCRequest(bind *netBindClient, conf *DeviceConfig) stri address, port, err := net.SplitHostPort(peer.Endpoint) if err != nil { - newError("failed to split endpoint ", peer.Endpoint, " into address and port").AtError().WriteToLog() + errors.LogError(h.bind.ctx, "failed to split endpoint ", peer.Endpoint, " into address and port") } addr := net.ParseAddress(address) if addr.Family().IsDomain() { dialerIp := bind.dialer.DestIpAddress() if dialerIp != nil { addr = net.ParseAddress(dialerIp.String()) - newError("createIPCRequest use dialer dest ip: ", addr).WriteToLog() + errors.LogInfo(h.bind.ctx, "createIPCRequest use dialer dest ip: ", addr) } else { ips, err := h.dns.LookupIP(addr.Domain(), dns.IPOption{ IPv4Enable: h.hasIPv4 && h.conf.preferIP4(), @@ -297,9 +298,9 @@ func (h *Handler) createIPCRequest(bind *netBindClient, conf *DeviceConfig) stri } } if err != nil { - newError("createIPCRequest failed to lookup DNS").Base(err).WriteToLog() + errors.LogInfoInner(h.bind.ctx, err, "createIPCRequest failed to lookup DNS") } else if len(ips) == 0 { - newError("createIPCRequest empty lookup DNS").WriteToLog() + errors.LogInfo(h.bind.ctx, "createIPCRequest empty lookup DNS") } else { addr = net.IPAddress(ips[dice.Roll(len(ips))]) } diff --git a/xray-core/proxy/wireguard/errors.generated.go b/xray-core/proxy/wireguard/errors.generated.go deleted file mode 100644 index 8319e07d9e..0000000000 --- a/xray-core/proxy/wireguard/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package wireguard - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/proxy/wireguard/server.go b/xray-core/proxy/wireguard/server.go index 3d3b584cec..77aa4985b9 100644 --- a/xray-core/proxy/wireguard/server.go +++ b/xray-core/proxy/wireguard/server.go @@ -2,11 +2,12 @@ package wireguard import ( "context" - "errors" + goerrors "errors" "io" "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/log" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/session" @@ -81,7 +82,7 @@ func (s *Server) Process(ctx context.Context, network net.Network, conn stat.Con inbound.Name = "wireguard" inbound.CanSpliceCopy = 3 outbounds := session.OutboundsFromContext(ctx) - ob := outbounds[len(outbounds) - 1] + ob := outbounds[len(outbounds)-1] s.info = routingInfo{ ctx: core.ToBackgroundDetachedContext(ctx), @@ -117,7 +118,7 @@ func (s *Server) Process(ctx context.Context, network net.Network, conn stat.Con v.endpoint = nep v.err = err v.waiter.Done() - if err != nil && errors.Is(err, io.EOF) { + if err != nil && goerrors.Is(err, io.EOF) { nep.conn = nil return nil } @@ -127,7 +128,7 @@ func (s *Server) Process(ctx context.Context, network net.Network, conn stat.Con func (s *Server) forwardConnection(dest net.Destination, conn net.Conn) { if s.info.dispatcher == nil { - newError("unexpected: dispatcher == nil").AtError().WriteToLog() + errors.LogError(s.info.ctx, "unexpected: dispatcher == nil") return } defer conn.Close() @@ -155,14 +156,14 @@ func (s *Server) forwardConnection(dest net.Destination, conn net.Conn) { link, err := s.info.dispatcher.Dispatch(ctx, dest) if err != nil { - newError("dispatch connection").Base(err).AtError().WriteToLog() + errors.LogErrorInner(s.info.ctx, err, "dispatch connection") } defer cancel() requestDone := func() error { defer timer.SetTimeout(plcy.Timeouts.DownlinkOnly) if err := buf.Copy(buf.NewReader(conn), link.Writer, buf.UpdateActivity(timer)); err != nil { - return newError("failed to transport all TCP request").Base(err) + return errors.New("failed to transport all TCP request").Base(err) } return nil @@ -171,7 +172,7 @@ func (s *Server) forwardConnection(dest net.Destination, conn net.Conn) { responseDone := func() error { defer timer.SetTimeout(plcy.Timeouts.UplinkOnly) if err := buf.Copy(link.Reader, buf.NewWriter(conn), buf.UpdateActivity(timer)); err != nil { - return newError("failed to transport all TCP response").Base(err) + return errors.New("failed to transport all TCP response").Base(err) } return nil @@ -181,7 +182,7 @@ func (s *Server) forwardConnection(dest net.Destination, conn net.Conn) { if err := task.Run(ctx, requestDonePost, responseDone); err != nil { common.Interrupt(link.Reader) common.Interrupt(link.Writer) - newError("connection ends").Base(err).AtDebug().WriteToLog() + errors.LogDebugInner(s.info.ctx, err, "connection ends") return } } diff --git a/xray-core/proxy/wireguard/tun.go b/xray-core/proxy/wireguard/tun.go index c2d3032364..7fd8a817d6 100644 --- a/xray-core/proxy/wireguard/tun.go +++ b/xray-core/proxy/wireguard/tun.go @@ -2,7 +2,6 @@ package wireguard import ( "context" - "errors" "fmt" "net" "net/netip" @@ -12,6 +11,7 @@ import ( "sync" "time" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/log" xnet "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/proxy/wireguard/gvisortun" @@ -158,7 +158,7 @@ func createGVisorTun(localAddresses []netip.Addr, mtu int, handler promiscuousMo // Perform a TCP three-way handshake. ep, err := r.CreateEndpoint(&wq) if err != nil { - newError(err.String()).AtError().WriteToLog() + errors.LogError(context.Background(), err.String()) r.Complete(true) return } @@ -183,7 +183,7 @@ func createGVisorTun(localAddresses []netip.Addr, mtu int, handler promiscuousMo ep, err := r.CreateEndpoint(&wq) if err != nil { - newError(err.String()).AtError().WriteToLog() + errors.LogError(context.Background(), err.String()) return } defer ep.Close() diff --git a/xray-core/proxy/wireguard/tun_linux.go b/xray-core/proxy/wireguard/tun_linux.go index 5ec40ffe83..88446339fc 100644 --- a/xray-core/proxy/wireguard/tun_linux.go +++ b/xray-core/proxy/wireguard/tun_linux.go @@ -73,7 +73,7 @@ func (d *deviceNet) Close() (err error) { func createKernelTun(localAddresses []netip.Addr, mtu int, handler promiscuousModeHandler) (t Tunnel, err error) { if handler != nil { - return nil, newError("TODO: support promiscuous mode") + return nil, errors.New("TODO: support promiscuous mode") } var v4, v6 *netip.Addr diff --git a/xray-core/proxy/wireguard/wireguard.go b/xray-core/proxy/wireguard/wireguard.go index 2b3c3007b1..16a73ca239 100644 --- a/xray-core/proxy/wireguard/wireguard.go +++ b/xray-core/proxy/wireguard/wireguard.go @@ -2,6 +2,7 @@ package wireguard import ( "context" + "errors" "fmt" "net/netip" "strings" @@ -53,7 +54,7 @@ func parseEndpoints(conf *DeviceConfig) ([]netip.Addr, bool, bool, error) { } addr = prefix.Addr() if prefix.Bits() != addr.BitLen() { - return nil, false, false, newError("interface address subnet should be /32 for IPv4 and /128 for IPv6") + return nil, false, false, errors.New("interface address subnet should be /32 for IPv4 and /128 for IPv6") } } else { var err error diff --git a/xray-core/transport/internet/config.go b/xray-core/transport/internet/config.go index dc0b95e55a..80353f3902 100644 --- a/xray-core/transport/internet/config.go +++ b/xray-core/transport/internet/config.go @@ -1,6 +1,7 @@ package internet import ( + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/serial" "github.com/xtls/xray-core/features" ) @@ -52,7 +53,7 @@ func transportProtocolToString(protocol TransportProtocol) string { func RegisterProtocolConfigCreator(name string, creator ConfigCreator) error { if _, found := globalTransportConfigCreatorCache[name]; found { - return newError("protocol ", name, " is already registered").AtError() + return errors.New("protocol ", name, " is already registered").AtError() } globalTransportConfigCreatorCache[name] = creator return nil @@ -63,7 +64,7 @@ func RegisterProtocolConfigCreator(name string, creator ConfigCreator) error { func CreateTransportConfig(name string) (interface{}, error) { creator, ok := globalTransportConfigCreatorCache[name] if !ok { - return nil, newError("unknown transport protocol: ", name) + return nil, errors.New("unknown transport protocol: ", name) } return creator(), nil } diff --git a/xray-core/transport/internet/dialer.go b/xray-core/transport/internet/dialer.go index ffa868a303..989bfa03e3 100644 --- a/xray-core/transport/internet/dialer.go +++ b/xray-core/transport/internet/dialer.go @@ -5,6 +5,7 @@ import ( "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/dice" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/net/cnc" "github.com/xtls/xray-core/common/session" @@ -35,7 +36,7 @@ var transportDialerCache = make(map[string]dialFunc) // RegisterTransportDialer registers a Dialer with given name. func RegisterTransportDialer(protocol string, dialer dialFunc) error { if _, found := transportDialerCache[protocol]; found { - return newError(protocol, " dialer already registered").AtError() + return errors.New(protocol, " dialer already registered").AtError() } transportDialerCache[protocol] = dialer return nil @@ -47,7 +48,7 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *MemoryStrea if streamSettings == nil { s, err := ToMemoryStreamConfig(nil) if err != nil { - return nil, newError("failed to create default stream settings").Base(err) + return nil, errors.New("failed to create default stream settings").Base(err) } streamSettings = s } @@ -55,7 +56,7 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *MemoryStrea protocol := streamSettings.ProtocolName dialer := transportDialerCache[protocol] if dialer == nil { - return nil, newError(protocol, " dialer not registered").AtError() + return nil, errors.New(protocol, " dialer not registered").AtError() } return dialer(ctx, dest, streamSettings) } @@ -63,12 +64,12 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *MemoryStrea if dest.Network == net.Network_UDP { udpDialer := transportDialerCache["udp"] if udpDialer == nil { - return nil, newError("UDP dialer not registered").AtError() + return nil, errors.New("UDP dialer not registered").AtError() } return udpDialer(ctx, dest, streamSettings) } - return nil, newError("unknown network ", dest.Network) + return nil, errors.New("unknown network ", dest.Network) } // DestIpAddress returns the ip of proxy server. It is useful in case of Android client, which prepare an IP before proxy connection is established @@ -110,13 +111,13 @@ func canLookupIP(ctx context.Context, dst net.Destination, sockopt *SocketConfig } func redirect(ctx context.Context, dst net.Destination, obt string) net.Conn { - newError("redirecting request " + dst.String() + " to " + obt).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "redirecting request " + dst.String() + " to " + obt) h := obm.GetHandler(obt) outbounds := session.OutboundsFromContext(ctx) - ctx = session.ContextWithOutbounds(ctx, append(outbounds, &session.Outbound{ - Target: dst, + ctx = session.ContextWithOutbounds(ctx, append(outbounds, &session.Outbound{ + Target: dst, Gateway: nil, - Tag: obt, + Tag: obt, })) // add another outbound in session ctx if h != nil { ur, uw := pipe.New(pipe.OptionsFromContext(ctx)...) @@ -138,7 +139,7 @@ func DialSystem(ctx context.Context, dest net.Destination, sockopt *SocketConfig var src net.Address outbounds := session.OutboundsFromContext(ctx) if len(outbounds) > 0 { - ob := outbounds[len(outbounds) - 1] + ob := outbounds[len(outbounds)-1] src = ob.Gateway } if sockopt == nil { @@ -149,9 +150,9 @@ func DialSystem(ctx context.Context, dest net.Destination, sockopt *SocketConfig ips, err := lookupIP(dest.Address.String(), sockopt.DomainStrategy, src) if err == nil && len(ips) > 0 { dest.Address = net.IPAddress(ips[dice.Roll(len(ips))]) - newError("replace destination with " + dest.String()).AtInfo().WriteToLog() + errors.LogInfo(ctx, "replace destination with " + dest.String()) } else if err != nil { - newError("failed to resolve ip").Base(err).AtWarning().WriteToLog() + errors.LogWarningInner(ctx, err, "failed to resolve ip") } } diff --git a/xray-core/transport/internet/domainsocket/config.go b/xray-core/transport/internet/domainsocket/config.go index 7dfb5ec49f..7f80a5951b 100644 --- a/xray-core/transport/internet/domainsocket/config.go +++ b/xray-core/transport/internet/domainsocket/config.go @@ -2,6 +2,7 @@ package domainsocket import ( "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/transport/internet" ) @@ -14,7 +15,7 @@ const ( func (c *Config) GetUnixAddr() (*net.UnixAddr, error) { path := c.Path if path == "" { - return nil, newError("empty domain socket path") + return nil, errors.New("empty domain socket path") } if c.Abstract && path[0] != '@' { path = "@" + path diff --git a/xray-core/transport/internet/domainsocket/dial.go b/xray-core/transport/internet/domainsocket/dial.go index a0032b3669..a060da782d 100644 --- a/xray-core/transport/internet/domainsocket/dial.go +++ b/xray-core/transport/internet/domainsocket/dial.go @@ -7,6 +7,7 @@ import ( "context" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/transport/internet" "github.com/xtls/xray-core/transport/internet/reality" @@ -23,7 +24,7 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me conn, err := net.DialUnix("unix", nil, addr) if err != nil { - return nil, newError("failed to dial unix: ", settings.Path).Base(err).AtWarning() + return nil, errors.New("failed to dial unix: ", settings.Path).Base(err).AtWarning() } if config := tls.ConfigFromStreamSettings(streamSettings); config != nil { diff --git a/xray-core/transport/internet/domainsocket/errors.generated.go b/xray-core/transport/internet/domainsocket/errors.generated.go deleted file mode 100644 index 451b1aa6ce..0000000000 --- a/xray-core/transport/internet/domainsocket/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package domainsocket - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/transport/internet/domainsocket/listener.go b/xray-core/transport/internet/domainsocket/listener.go index 323321e4de..0b19c681ee 100644 --- a/xray-core/transport/internet/domainsocket/listener.go +++ b/xray-core/transport/internet/domainsocket/listener.go @@ -11,6 +11,7 @@ import ( goreality "github.com/xtls/reality" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/transport/internet" "github.com/xtls/xray-core/transport/internet/reality" @@ -38,7 +39,7 @@ func Listen(ctx context.Context, address net.Address, port net.Port, streamSetti unixListener, err := net.ListenUnix("unix", addr) if err != nil { - return nil, newError("failed to listen domain socket").Base(err).AtWarning() + return nil, errors.New("failed to listen domain socket").Base(err).AtWarning() } ln := &Listener{ @@ -88,7 +89,7 @@ func (ln *Listener) run() { if strings.Contains(err.Error(), "closed") { break } - newError("failed to accepted raw connections").Base(err).AtWarning().WriteToLog() + errors.LogWarningInner(context.Background(), err, "failed to accepted raw connections") continue } go func() { @@ -96,7 +97,7 @@ func (ln *Listener) run() { conn = tls.Server(conn, ln.tlsConfig) } else if ln.realityConfig != nil { if conn, err = reality.Server(conn, ln.realityConfig); err != nil { - newError(err).AtInfo().WriteToLog() + errors.LogInfo(context.Background(), err.Error()) return } } @@ -117,7 +118,7 @@ func (fl *fileLocker) Acquire() error { } if err := unix.Flock(int(f.Fd()), unix.LOCK_EX); err != nil { f.Close() - return newError("failed to lock file: ", fl.path).Base(err) + return errors.New("failed to lock file: ", fl.path).Base(err) } fl.file = f return nil @@ -125,13 +126,13 @@ func (fl *fileLocker) Acquire() error { func (fl *fileLocker) Release() { if err := unix.Flock(int(fl.file.Fd()), unix.LOCK_UN); err != nil { - newError("failed to unlock file: ", fl.path).Base(err).WriteToLog() + errors.LogInfoInner(context.Background(), err, "failed to unlock file: ", fl.path) } if err := fl.file.Close(); err != nil { - newError("failed to close file: ", fl.path).Base(err).WriteToLog() + errors.LogInfoInner(context.Background(), err, "failed to close file: ", fl.path) } if err := os.Remove(fl.path); err != nil { - newError("failed to remove file: ", fl.path).Base(err).WriteToLog() + errors.LogInfoInner(context.Background(), err, "failed to remove file: ", fl.path) } } diff --git a/xray-core/transport/internet/errors.generated.go b/xray-core/transport/internet/errors.generated.go deleted file mode 100644 index caf158a11a..0000000000 --- a/xray-core/transport/internet/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package internet - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/transport/internet/filelocker_other.go b/xray-core/transport/internet/filelocker_other.go index 28fc0f58da..36d937c134 100644 --- a/xray-core/transport/internet/filelocker_other.go +++ b/xray-core/transport/internet/filelocker_other.go @@ -4,8 +4,10 @@ package internet import ( + "context" "os" + "github.com/xtls/xray-core/common/errors" "golang.org/x/sys/unix" ) @@ -17,7 +19,7 @@ func (fl *FileLocker) Acquire() error { } if err := unix.Flock(int(f.Fd()), unix.LOCK_EX); err != nil { f.Close() - return newError("failed to lock file: ", fl.path).Base(err) + return errors.New("failed to lock file: ", fl.path).Base(err) } fl.file = f return nil @@ -26,12 +28,12 @@ func (fl *FileLocker) Acquire() error { // Release lock func (fl *FileLocker) Release() { if err := unix.Flock(int(fl.file.Fd()), unix.LOCK_UN); err != nil { - newError("failed to unlock file: ", fl.path).Base(err).WriteToLog() + errors.LogInfoInner(context.Background(), err, "failed to unlock file: ", fl.path) } if err := fl.file.Close(); err != nil { - newError("failed to close file: ", fl.path).Base(err).WriteToLog() + errors.LogInfoInner(context.Background(), err, "failed to close file: ", fl.path) } if err := os.Remove(fl.path); err != nil { - newError("failed to remove file: ", fl.path).Base(err).WriteToLog() + errors.LogInfoInner(context.Background(), err, "failed to remove file: ", fl.path) } } diff --git a/xray-core/transport/internet/grpc/dial.go b/xray-core/transport/internet/grpc/dial.go index a4b03cedc8..24ae8ad08b 100644 --- a/xray-core/transport/internet/grpc/dial.go +++ b/xray-core/transport/internet/grpc/dial.go @@ -7,6 +7,8 @@ import ( "time" "github.com/xtls/xray-core/common" + c "github.com/xtls/xray-core/common/ctx" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/session" "github.com/xtls/xray-core/transport/internet" @@ -22,11 +24,11 @@ import ( ) func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.MemoryStreamConfig) (stat.Connection, error) { - newError("creating connection to ", dest).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "creating connection to ", dest) conn, err := dialgRPC(ctx, dest, streamSettings) if err != nil { - return nil, newError("failed to dial gRPC").Base(err) + return nil, errors.New("failed to dial gRPC").Base(err) } return stat.Connection(conn), nil } @@ -50,22 +52,22 @@ func dialgRPC(ctx context.Context, dest net.Destination, streamSettings *interne conn, err := getGrpcClient(ctx, dest, streamSettings) if err != nil { - return nil, newError("Cannot dial gRPC").Base(err) + return nil, errors.New("Cannot dial gRPC").Base(err) } client := encoding.NewGRPCServiceClient(conn) if grpcSettings.MultiMode { - newError("using gRPC multi mode service name: `" + grpcSettings.getServiceName() + "` stream name: `" + grpcSettings.getTunMultiStreamName() + "`").AtDebug().WriteToLog() + errors.LogDebug(ctx, "using gRPC multi mode service name: `" + grpcSettings.getServiceName() + "` stream name: `" + grpcSettings.getTunMultiStreamName() + "`") grpcService, err := client.(encoding.GRPCServiceClientX).TunMultiCustomName(ctx, grpcSettings.getServiceName(), grpcSettings.getTunMultiStreamName()) if err != nil { - return nil, newError("Cannot dial gRPC").Base(err) + return nil, errors.New("Cannot dial gRPC").Base(err) } return encoding.NewMultiHunkConn(grpcService, nil), nil } - newError("using gRPC tun mode service name: `" + grpcSettings.getServiceName() + "` stream name: `" + grpcSettings.getTunStreamName() + "`").AtDebug().WriteToLog() + errors.LogDebug(ctx, "using gRPC tun mode service name: `" + grpcSettings.getServiceName() + "` stream name: `" + grpcSettings.getTunStreamName() + "`") grpcService, err := client.(encoding.GRPCServiceClientX).TunCustomName(ctx, grpcSettings.getServiceName(), grpcSettings.getTunStreamName()) if err != nil { - return nil, newError("Cannot dial gRPC").Base(err) + return nil, errors.New("Cannot dial gRPC").Base(err) } return encoding.NewHunkConn(grpcService, nil), nil @@ -117,7 +119,7 @@ func getGrpcClient(ctx context.Context, dest net.Destination, streamSettings *in } address := net.ParseAddress(rawHost) - gctx = session.ContextWithID(gctx, session.IDFromContext(ctx)) + gctx = c.ContextWithID(gctx, c.IDFromContext(ctx)) gctx = session.ContextWithOutbounds(gctx, session.OutboundsFromContext(ctx)) gctx = session.ContextWithTimeoutOnly(gctx, true) diff --git a/xray-core/transport/internet/grpc/encoding/errors.generated.go b/xray-core/transport/internet/grpc/encoding/errors.generated.go deleted file mode 100644 index 267711d941..0000000000 --- a/xray-core/transport/internet/grpc/encoding/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package encoding - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/transport/internet/grpc/encoding/hunkconn.go b/xray-core/transport/internet/grpc/encoding/hunkconn.go index cfa0d5279d..f295f33a6b 100644 --- a/xray-core/transport/internet/grpc/encoding/hunkconn.go +++ b/xray-core/transport/internet/grpc/encoding/hunkconn.go @@ -6,6 +6,7 @@ import ( "net" "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/errors" xnet "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/net/cnc" "github.com/xtls/xray-core/common/signal/done" @@ -79,7 +80,7 @@ func (h *HunkReaderWriter) forceFetch() error { return err } - return newError("failed to fetch hunk from gRPC tunnel").Base(err) + return errors.New("failed to fetch hunk from gRPC tunnel").Base(err) } h.buf = hunk.Data @@ -135,7 +136,7 @@ func (h *HunkReaderWriter) Write(buf []byte) (int, error) { err := h.hc.Send(&Hunk{Data: buf[:]}) if err != nil { - return 0, newError("failed to send data over gRPC tunnel").Base(err) + return 0, errors.New("failed to send data over gRPC tunnel").Base(err) } return len(buf), nil } diff --git a/xray-core/transport/internet/grpc/encoding/multiconn.go b/xray-core/transport/internet/grpc/encoding/multiconn.go index ec50394708..fa95cba8cc 100644 --- a/xray-core/transport/internet/grpc/encoding/multiconn.go +++ b/xray-core/transport/internet/grpc/encoding/multiconn.go @@ -6,6 +6,7 @@ import ( "net" "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/errors" xnet "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/net/cnc" "github.com/xtls/xray-core/common/signal/done" @@ -74,7 +75,7 @@ func (h *MultiHunkReaderWriter) forceFetch() error { return err } - return newError("failed to fetch hunk from gRPC tunnel").Base(err) + return errors.New("failed to fetch hunk from gRPC tunnel").Base(err) } h.buf = hunk.Data diff --git a/xray-core/transport/internet/grpc/errors.generated.go b/xray-core/transport/internet/grpc/errors.generated.go deleted file mode 100644 index 290cc82f3a..0000000000 --- a/xray-core/transport/internet/grpc/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package grpc - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/transport/internet/grpc/hub.go b/xray-core/transport/internet/grpc/hub.go index e55f6f77c2..b07c3b752f 100644 --- a/xray-core/transport/internet/grpc/hub.go +++ b/xray-core/transport/internet/grpc/hub.go @@ -6,8 +6,8 @@ import ( goreality "github.com/xtls/reality" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" - "github.com/xtls/xray-core/common/session" "github.com/xtls/xray-core/transport/internet" "github.com/xtls/xray-core/transport/internet/grpc/encoding" "github.com/xtls/xray-core/transport/internet/reality" @@ -94,7 +94,7 @@ func Listen(ctx context.Context, address net.Address, port net.Port, settings *i listener.s = s if settings.SocketSettings != nil && settings.SocketSettings.AcceptProxyProtocol { - newError("accepting PROXY protocol").AtWarning().WriteToLog(session.ExportIDToError(ctx)) + errors.LogWarning(ctx, "accepting PROXY protocol") } go func() { @@ -106,7 +106,7 @@ func Listen(ctx context.Context, address net.Address, port net.Port, settings *i Net: "unix", }, settings.SocketSettings) if err != nil { - newError("failed to listen on ", address).Base(err).AtError().WriteToLog(session.ExportIDToError(ctx)) + errors.LogErrorInner(ctx, err, "failed to listen on ", address) return } } else { // tcp @@ -115,19 +115,19 @@ func Listen(ctx context.Context, address net.Address, port net.Port, settings *i Port: int(port), }, settings.SocketSettings) if err != nil { - newError("failed to listen on ", address, ":", port).Base(err).AtError().WriteToLog(session.ExportIDToError(ctx)) + errors.LogErrorInner(ctx, err, "failed to listen on ", address, ":", port) return } } - newError("gRPC listen for service name `" + grpcSettings.getServiceName() + "` tun `" + grpcSettings.getTunStreamName() + "` multi tun `" + grpcSettings.getTunMultiStreamName() + "`").AtDebug().WriteToLog() + errors.LogDebug(ctx, "gRPC listen for service name `" + grpcSettings.getServiceName() + "` tun `" + grpcSettings.getTunStreamName() + "` multi tun `" + grpcSettings.getTunMultiStreamName() + "`") encoding.RegisterGRPCServiceServerX(s, listener, grpcSettings.getServiceName(), grpcSettings.getTunStreamName(), grpcSettings.getTunMultiStreamName()) if config := reality.ConfigFromStreamSettings(settings); config != nil { streamListener = goreality.NewListener(streamListener, config.GetREALITYConfig()) } if err = s.Serve(streamListener); err != nil { - newError("Listener for gRPC ended").Base(err).WriteToLog() + errors.LogInfoInner(ctx, err, "Listener for gRPC ended") } }() diff --git a/xray-core/transport/internet/header.go b/xray-core/transport/internet/header.go index 1fc67133f0..95c763438b 100644 --- a/xray-core/transport/internet/header.go +++ b/xray-core/transport/internet/header.go @@ -5,6 +5,7 @@ import ( "net" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" ) type PacketHeader interface { @@ -20,7 +21,7 @@ func CreatePacketHeader(config interface{}) (PacketHeader, error) { if h, ok := header.(PacketHeader); ok { return h, nil } - return nil, newError("not a packet header") + return nil, errors.New("not a packet header") } type ConnectionAuthenticator interface { @@ -36,5 +37,5 @@ func CreateConnectionAuthenticator(config interface{}) (ConnectionAuthenticator, if a, ok := auth.(ConnectionAuthenticator); ok { return a, nil } - return nil, newError("not a ConnectionAuthenticator") + return nil, errors.New("not a ConnectionAuthenticator") } diff --git a/xray-core/transport/internet/headers/http/errors.generated.go b/xray-core/transport/internet/headers/http/errors.generated.go deleted file mode 100644 index f00481654c..0000000000 --- a/xray-core/transport/internet/headers/http/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package http - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/transport/internet/headers/http/http.go b/xray-core/transport/internet/headers/http/http.go index b9afb23038..01168808ca 100644 --- a/xray-core/transport/internet/headers/http/http.go +++ b/xray-core/transport/internet/headers/http/http.go @@ -14,6 +14,7 @@ import ( "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/errors" ) const ( @@ -28,9 +29,9 @@ const ( ) var ( - ErrHeaderToLong = newError("Header too long.") + ErrHeaderToLong = errors.New("Header too long.") - ErrHeaderMisMatch = newError("Header Mismatch.") + ErrHeaderMisMatch = errors.New("Header Mismatch.") ) type Reader interface { diff --git a/xray-core/transport/internet/http/dialer.go b/xray-core/transport/internet/http/dialer.go index 0148658c5b..a1421d3f9f 100644 --- a/xray-core/transport/internet/http/dialer.go +++ b/xray-core/transport/internet/http/dialer.go @@ -11,6 +11,8 @@ import ( "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/buf" + c "github.com/xtls/xray-core/common/ctx" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/net/cnc" "github.com/xtls/xray-core/common/session" @@ -44,7 +46,7 @@ func getHTTPClient(ctx context.Context, dest net.Destination, streamSettings *in tlsConfigs := tls.ConfigFromStreamSettings(streamSettings) realityConfigs := reality.ConfigFromStreamSettings(streamSettings) if tlsConfigs == nil && realityConfigs == nil { - return nil, newError("TLS or REALITY must be enabled for http transport.").AtWarning() + return nil, errors.New("TLS or REALITY must be enabled for http transport.").AtWarning() } sockopt := streamSettings.SocketSettings @@ -67,13 +69,13 @@ func getHTTPClient(ctx context.Context, dest net.Destination, streamSettings *in } address := net.ParseAddress(rawHost) - hctx = session.ContextWithID(hctx, session.IDFromContext(ctx)) + hctx = c.ContextWithID(hctx, c.IDFromContext(ctx)) hctx = session.ContextWithOutbounds(hctx, session.OutboundsFromContext(ctx)) hctx = session.ContextWithTimeoutOnly(hctx, true) pconn, err := internet.DialSystem(hctx, net.TCPDestination(address, port), sockopt) if err != nil { - newError("failed to dial to " + addr).Base(err).AtError().WriteToLog() + errors.LogErrorInner(ctx, err, "failed to dial to " + addr) return nil, err } @@ -88,18 +90,18 @@ func getHTTPClient(ctx context.Context, dest net.Destination, streamSettings *in cn = tls.Client(pconn, tlsConfig).(*tls.Conn) } if err := cn.HandshakeContext(ctx); err != nil { - newError("failed to dial to " + addr).Base(err).AtError().WriteToLog() + errors.LogErrorInner(ctx, err, "failed to dial to " + addr) return nil, err } if !tlsConfig.InsecureSkipVerify { if err := cn.VerifyHostname(tlsConfig.ServerName); err != nil { - newError("failed to dial to " + addr).Base(err).AtError().WriteToLog() + errors.LogErrorInner(ctx, err, "failed to dial to " + addr) return nil, err } } negotiatedProtocol := cn.NegotiatedProtocol() if negotiatedProtocol != http2.NextProtoTLS { - return nil, newError("http2: unexpected ALPN protocol " + negotiatedProtocol + "; want q" + http2.NextProtoTLS).AtError() + return nil, errors.New("http2: unexpected ALPN protocol " + negotiatedProtocol + "; want q" + http2.NextProtoTLS).AtError() } return cn, nil }, @@ -168,7 +170,7 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me go func() { response, err := client.Do(request) if err != nil { - newError("failed to dial to ", dest).Base(err).AtWarning().WriteToLog(session.ExportIDToError(ctx)) + errors.LogWarningInner(ctx, err, "failed to dial to ", dest) wrc.Close() { // Abandon `client` if `client.Do(request)` failed @@ -182,7 +184,7 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me return } if response.StatusCode != 200 { - newError("unexpected status", response.StatusCode).AtWarning().WriteToLog(session.ExportIDToError(ctx)) + errors.LogWarning(ctx, "unexpected status", response.StatusCode) wrc.Close() return } diff --git a/xray-core/transport/internet/http/errors.generated.go b/xray-core/transport/internet/http/errors.generated.go deleted file mode 100644 index f00481654c..0000000000 --- a/xray-core/transport/internet/http/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package http - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/transport/internet/http/hub.go b/xray-core/transport/internet/http/hub.go index f0260460d7..3421ae649d 100644 --- a/xray-core/transport/internet/http/hub.go +++ b/xray-core/transport/internet/http/hub.go @@ -9,11 +9,11 @@ import ( goreality "github.com/xtls/reality" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/net/cnc" http_proto "github.com/xtls/xray-core/common/protocol/http" "github.com/xtls/xray-core/common/serial" - "github.com/xtls/xray-core/common/session" "github.com/xtls/xray-core/common/signal/done" "github.com/xtls/xray-core/transport/internet" "github.com/xtls/xray-core/transport/internet/reality" @@ -89,7 +89,7 @@ func (l *Listener) ServeHTTP(writer http.ResponseWriter, request *http.Request) remoteAddr := l.Addr() dest, err := net.ParseDestination(request.RemoteAddr) if err != nil { - newError("failed to parse request remote addr: ", request.RemoteAddr).Base(err).WriteToLog() + errors.LogInfoInner(context.Background(), err, "failed to parse request remote addr: ", request.RemoteAddr) } else { remoteAddr = &net.TCPAddr{ IP: dest.Address.IP(), @@ -160,7 +160,7 @@ func Listen(ctx context.Context, address net.Address, port net.Port, streamSetti } if streamSettings.SocketSettings != nil && streamSettings.SocketSettings.AcceptProxyProtocol { - newError("accepting PROXY protocol").AtWarning().WriteToLog(session.ExportIDToError(ctx)) + errors.LogWarning(ctx, "accepting PROXY protocol") } listener.server = server @@ -173,7 +173,7 @@ func Listen(ctx context.Context, address net.Address, port net.Port, streamSetti Net: "unix", }, streamSettings.SocketSettings) if err != nil { - newError("failed to listen on ", address).Base(err).AtError().WriteToLog(session.ExportIDToError(ctx)) + errors.LogErrorInner(ctx, err, "failed to listen on ", address) return } } else { // tcp @@ -182,7 +182,7 @@ func Listen(ctx context.Context, address net.Address, port net.Port, streamSetti Port: int(port), }, streamSettings.SocketSettings) if err != nil { - newError("failed to listen on ", address, ":", port).Base(err).AtError().WriteToLog(session.ExportIDToError(ctx)) + errors.LogErrorInner(ctx, err, "failed to listen on ", address, ":", port) return } } @@ -193,12 +193,12 @@ func Listen(ctx context.Context, address net.Address, port net.Port, streamSetti } err = server.Serve(streamListener) if err != nil { - newError("stopping serving H2C or REALITY H2").Base(err).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfoInner(ctx, err, "stopping serving H2C or REALITY H2") } } else { err = server.ServeTLS(streamListener, "", "") if err != nil { - newError("stopping serving TLS H2").Base(err).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfoInner(ctx, err, "stopping serving TLS H2") } } }() diff --git a/xray-core/transport/internet/httpupgrade/dialer.go b/xray-core/transport/internet/httpupgrade/dialer.go index d1a8bb0d22..013f4f282c 100644 --- a/xray-core/transport/internet/httpupgrade/dialer.go +++ b/xray-core/transport/internet/httpupgrade/dialer.go @@ -8,8 +8,8 @@ import ( "strings" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" - "github.com/xtls/xray-core/common/session" "github.com/xtls/xray-core/transport/internet" "github.com/xtls/xray-core/transport/internet/stat" "github.com/xtls/xray-core/transport/internet/tls" @@ -34,7 +34,7 @@ func (c *ConnRF) Read(b []byte) (int, error) { if resp.Status != "101 Switching Protocols" || strings.ToLower(resp.Header.Get("Upgrade")) != "websocket" || strings.ToLower(resp.Header.Get("Connection")) != "upgrade" { - return 0, newError("unrecognized reply") + return 0, errors.New("unrecognized reply") } // drain remaining bufreader return reader.Read(b[:reader.Buffered()]) @@ -47,7 +47,7 @@ func dialhttpUpgrade(ctx context.Context, dest net.Destination, streamSettings * pconn, err := internet.DialSystem(ctx, dest, streamSettings.SocketSettings) if err != nil { - newError("failed to dial to ", dest).Base(err).AtError().WriteToLog() + errors.LogErrorInner(ctx, err, "failed to dial to ", dest) return nil, err } @@ -104,19 +104,19 @@ func dialhttpUpgrade(ctx context.Context, dest net.Destination, streamSettings * return connRF, nil } -//http.Header.Add() will convert headers to MIME header format. -//Some people don't like this because they want to send "Web*S*ocket". -//So we add a simple function to replace that method. +// http.Header.Add() will convert headers to MIME header format. +// Some people don't like this because they want to send "Web*S*ocket". +// So we add a simple function to replace that method. func AddHeader(header http.Header, key, value string) { header[key] = append(header[key], value) } func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.MemoryStreamConfig) (stat.Connection, error) { - newError("creating connection to ", dest).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "creating connection to ", dest) conn, err := dialhttpUpgrade(ctx, dest, streamSettings) if err != nil { - return nil, newError("failed to dial request to ", dest).Base(err) + return nil, errors.New("failed to dial request to ", dest).Base(err) } return stat.Connection(conn), nil } diff --git a/xray-core/transport/internet/httpupgrade/errors.generated.go b/xray-core/transport/internet/httpupgrade/errors.generated.go deleted file mode 100644 index 9a3440c0ee..0000000000 --- a/xray-core/transport/internet/httpupgrade/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package httpupgrade - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/transport/internet/httpupgrade/httpupgrade.go b/xray-core/transport/internet/httpupgrade/httpupgrade.go index c1410c61df..e949f8711e 100644 --- a/xray-core/transport/internet/httpupgrade/httpupgrade.go +++ b/xray-core/transport/internet/httpupgrade/httpupgrade.go @@ -4,6 +4,7 @@ import ( "context" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" ) //go:generate go run github.com/xtls/xray-core/common/errors/errorgen @@ -12,6 +13,6 @@ const protocolName = "httpupgrade" func init() { common.Must(common.RegisterConfig((*Config)(nil), func(ctx context.Context, config interface{}) (interface{}, error) { - return nil, newError("httpupgrade is a transport protocol.") + return nil, errors.New("httpupgrade is a transport protocol.") })) } diff --git a/xray-core/transport/internet/httpupgrade/hub.go b/xray-core/transport/internet/httpupgrade/hub.go index 7f873d7b8f..52e260a4d0 100644 --- a/xray-core/transport/internet/httpupgrade/hub.go +++ b/xray-core/transport/internet/httpupgrade/hub.go @@ -8,9 +8,9 @@ import ( "strings" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" http_proto "github.com/xtls/xray-core/common/protocol/http" - "github.com/xtls/xray-core/common/session" "github.com/xtls/xray-core/transport/internet" "github.com/xtls/xray-core/transport/internet/stat" v2tls "github.com/xtls/xray-core/transport/internet/tls" @@ -40,11 +40,11 @@ func (s *server) Handle(conn net.Conn) (stat.Connection, error) { if s.config != nil { host := req.Host if len(s.config.Host) > 0 && host != s.config.Host { - return nil, newError("bad host: ", host) + return nil, errors.New("bad host: ", host) } path := s.config.GetNormalizedPath() if req.URL.Path != path { - return nil, newError("bad path: ", req.URL.Path) + return nil, errors.New("bad path: ", req.URL.Path) } } @@ -52,7 +52,7 @@ func (s *server) Handle(conn net.Conn) (stat.Connection, error) { upgrade := strings.ToLower(req.Header.Get("Upgrade")) if connection != "upgrade" || upgrade != "websocket" { _ = conn.Close() - return nil, newError("unrecognized request") + return nil, errors.New("unrecognized request") } resp := &http.Response{ Status: "101 Switching Protocols", @@ -90,7 +90,7 @@ func (s *server) keepAccepting() { } handledConn, err := s.Handle(conn) if err != nil { - newError("failed to handle request").Base(err).WriteToLog() + errors.LogInfoInner(context.Background(), err, "failed to handle request") continue } s.addConn(handledConn) @@ -113,22 +113,22 @@ func ListenHTTPUpgrade(ctx context.Context, address net.Address, port net.Port, Net: "unix", }, streamSettings.SocketSettings) if err != nil { - return nil, newError("failed to listen unix domain socket(for HttpUpgrade) on ", address).Base(err) + return nil, errors.New("failed to listen unix domain socket(for HttpUpgrade) on ", address).Base(err) } - newError("listening unix domain socket(for HttpUpgrade) on ", address).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "listening unix domain socket(for HttpUpgrade) on ", address) } else { // tcp listener, err = internet.ListenSystem(ctx, &net.TCPAddr{ IP: address.IP(), Port: int(port), }, streamSettings.SocketSettings) if err != nil { - return nil, newError("failed to listen TCP(for HttpUpgrade) on ", address, ":", port).Base(err) + return nil, errors.New("failed to listen TCP(for HttpUpgrade) on ", address, ":", port).Base(err) } - newError("listening TCP(for HttpUpgrade) on ", address, ":", port).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "listening TCP(for HttpUpgrade) on ", address, ":", port) } if streamSettings.SocketSettings != nil && streamSettings.SocketSettings.AcceptProxyProtocol { - newError("accepting PROXY protocol").AtWarning().WriteToLog(session.ExportIDToError(ctx)) + errors.LogWarning(ctx, "accepting PROXY protocol") } if config := v2tls.ConfigFromStreamSettings(streamSettings); config != nil { diff --git a/xray-core/transport/internet/kcp/connection.go b/xray-core/transport/internet/kcp/connection.go index b0df75f01f..ffedcfc7e4 100644 --- a/xray-core/transport/internet/kcp/connection.go +++ b/xray-core/transport/internet/kcp/connection.go @@ -2,6 +2,7 @@ package kcp import ( "bytes" + "context" "io" "net" "runtime" @@ -10,14 +11,15 @@ import ( "time" "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/signal" "github.com/xtls/xray-core/common/signal/semaphore" ) var ( - ErrIOTimeout = newError("Read/Write timeout") - ErrClosedListener = newError("Listener closed.") - ErrClosedConnection = newError("Connection closed.") + ErrIOTimeout = errors.New("Read/Write timeout") + ErrClosedListener = errors.New("Listener closed.") + ErrClosedConnection = errors.New("Connection closed.") ) // State of the connection @@ -203,7 +205,7 @@ type Connection struct { // NewConnection create a new KCP connection between local and remote. func NewConnection(meta ConnMetadata, writer PacketWriter, closer io.Closer, config *Config) *Connection { - newError("#", meta.Conversation, " creating connection to ", meta.RemoteAddr).WriteToLog() + errors.LogInfo(context.Background(), "#", meta.Conversation, " creating connection to ", meta.RemoteAddr) conn := &Connection{ meta: meta, @@ -428,7 +430,7 @@ func (c *Connection) SetState(state State) { current := c.Elapsed() atomic.StoreInt32((*int32)(&c.state), int32(state)) atomic.StoreUint32(&c.stateBeginTime, current) - newError("#", c.meta.Conversation, " entering state ", state, " at ", current).AtDebug().WriteToLog() + errors.LogDebug(context.Background(), "#", c.meta.Conversation, " entering state ", state, " at ", current) switch state { case StateReadyToClose: @@ -472,7 +474,7 @@ func (c *Connection) Close() error { c.SetState(StateTerminated) } - newError("#", c.meta.Conversation, " closing connection to ", c.meta.RemoteAddr).WriteToLog() + errors.LogInfo(context.Background(), "#", c.meta.Conversation, " closing connection to ", c.meta.RemoteAddr) return nil } @@ -528,7 +530,7 @@ func (c *Connection) Terminate() { if c == nil { return } - newError("#", c.meta.Conversation, " terminating connection to ", c.RemoteAddr()).WriteToLog() + errors.LogInfo(context.Background(), "#", c.meta.Conversation, " terminating connection to ", c.RemoteAddr()) // v.SetState(StateTerminated) c.dataInput.Signal() @@ -616,7 +618,7 @@ func (c *Connection) flush() { } if c.State() == StateTerminating { - newError("#", c.meta.Conversation, " sending terminating cmd.").AtDebug().WriteToLog() + errors.LogDebug(context.Background(), "#", c.meta.Conversation, " sending terminating cmd.") c.Ping(current, CommandTerminate) if current-atomic.LoadUint32(&c.stateBeginTime) > 8000 { diff --git a/xray-core/transport/internet/kcp/crypt.go b/xray-core/transport/internet/kcp/crypt.go index 0a5930f0b9..2843379a8b 100644 --- a/xray-core/transport/internet/kcp/crypt.go +++ b/xray-core/transport/internet/kcp/crypt.go @@ -6,6 +6,7 @@ import ( "hash/fnv" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" ) // SimpleAuthenticator is a legacy AEAD used for KCP encryption. @@ -64,12 +65,12 @@ func (a *SimpleAuthenticator) Open(dst, nonce, cipherText, extra []byte) ([]byte fnvHash := fnv.New32a() common.Must2(fnvHash.Write(dst[4:])) if binary.BigEndian.Uint32(dst[:4]) != fnvHash.Sum32() { - return nil, newError("invalid auth") + return nil, errors.New("invalid auth") } length := binary.BigEndian.Uint16(dst[4:6]) if len(dst)-6 != int(length) { - return nil, newError("invalid auth") + return nil, errors.New("invalid auth") } return dst[6:], nil diff --git a/xray-core/transport/internet/kcp/dialer.go b/xray-core/transport/internet/kcp/dialer.go index 3e8d1220e3..0a3968dc4b 100644 --- a/xray-core/transport/internet/kcp/dialer.go +++ b/xray-core/transport/internet/kcp/dialer.go @@ -8,6 +8,7 @@ import ( "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/buf" "github.com/xtls/xray-core/common/dice" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/transport/internet" "github.com/xtls/xray-core/transport/internet/stat" @@ -46,22 +47,22 @@ func fetchInput(_ context.Context, input io.Reader, reader PacketReader, conn *C // DialKCP dials a new KCP connections to the specific destination. func DialKCP(ctx context.Context, dest net.Destination, streamSettings *internet.MemoryStreamConfig) (stat.Connection, error) { dest.Network = net.Network_UDP - newError("dialing mKCP to ", dest).WriteToLog() + errors.LogInfo(ctx, "dialing mKCP to ", dest) rawConn, err := internet.DialSystem(ctx, dest, streamSettings.SocketSettings) if err != nil { - return nil, newError("failed to dial to dest: ", err).AtWarning().Base(err) + return nil, errors.New("failed to dial to dest: ", err).AtWarning().Base(err) } kcpSettings := streamSettings.ProtocolSettings.(*Config) header, err := kcpSettings.GetPackerHeader() if err != nil { - return nil, newError("failed to create packet header").Base(err) + return nil, errors.New("failed to create packet header").Base(err) } security, err := kcpSettings.GetSecurity() if err != nil { - return nil, newError("failed to create security").Base(err) + return nil, errors.New("failed to create security").Base(err) } reader := &KCPPacketReader{ Header: header, diff --git a/xray-core/transport/internet/kcp/errors.generated.go b/xray-core/transport/internet/kcp/errors.generated.go deleted file mode 100644 index 63c51c6ff5..0000000000 --- a/xray-core/transport/internet/kcp/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package kcp - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/transport/internet/kcp/listener.go b/xray-core/transport/internet/kcp/listener.go index 82b5a3bc90..71ce646283 100644 --- a/xray-core/transport/internet/kcp/listener.go +++ b/xray-core/transport/internet/kcp/listener.go @@ -8,6 +8,7 @@ import ( "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/transport/internet" "github.com/xtls/xray-core/transport/internet/stat" @@ -38,11 +39,11 @@ func NewListener(ctx context.Context, address net.Address, port net.Port, stream kcpSettings := streamSettings.ProtocolSettings.(*Config) header, err := kcpSettings.GetPackerHeader() if err != nil { - return nil, newError("failed to create packet header").Base(err).AtError() + return nil, errors.New("failed to create packet header").Base(err).AtError() } security, err := kcpSettings.GetSecurity() if err != nil { - return nil, newError("failed to create security").Base(err).AtError() + return nil, errors.New("failed to create security").Base(err).AtError() } l := &Listener{ header: header, @@ -67,7 +68,7 @@ func NewListener(ctx context.Context, address net.Address, port net.Port, stream l.Lock() l.hub = hub l.Unlock() - newError("listening on ", address, ":", port).WriteToLog() + errors.LogInfo(ctx, "listening on ", address, ":", port) go l.handlePackets() @@ -86,7 +87,7 @@ func (l *Listener) OnReceive(payload *buf.Buffer, src net.Destination) { payload.Release() if len(segments) == 0 { - newError("discarding invalid payload from ", src).WriteToLog() + errors.LogInfo(context.Background(), "discarding invalid payload from ", src) return } diff --git a/xray-core/transport/internet/quic/config.go b/xray-core/transport/internet/quic/config.go index fe13eec608..364ada7c27 100644 --- a/xray-core/transport/internet/quic/config.go +++ b/xray-core/transport/internet/quic/config.go @@ -4,6 +4,7 @@ import ( "crypto/aes" "crypto/cipher" "crypto/sha256" + "errors" "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/protocol" @@ -30,7 +31,7 @@ func getAuth(config *Config) (cipher.AEAD, error) { return chacha20poly1305.New(key[:]) } - return nil, newError("unsupported security type") + return nil, errors.New("unsupported security type") } func getHeader(config *Config) (internet.PacketHeader, error) { diff --git a/xray-core/transport/internet/quic/dialer.go b/xray-core/transport/internet/quic/dialer.go index 7c8122b6a5..df73e169d4 100644 --- a/xray-core/transport/internet/quic/dialer.go +++ b/xray-core/transport/internet/quic/dialer.go @@ -9,6 +9,7 @@ import ( "github.com/quic-go/quic-go/logging" "github.com/quic-go/quic-go/qlog" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/task" "github.com/xtls/xray-core/transport/internet" @@ -21,7 +22,7 @@ type connectionContext struct { conn quic.Connection } -var errConnectionClosed = newError("connection closed") +var errConnectionClosed = errors.New("connection closed") func (c *connectionContext) openStream(destAddr net.Addr) (*interConn, error) { if !isActive(c.conn) { @@ -65,17 +66,17 @@ func removeInactiveConnections(conns []*connectionContext) []*connectionContext continue } - newError("closing quic connection at index: ", i).WriteToLog() + errors.LogInfo(context.Background(), "closing quic connection at index: ", i) if err := s.conn.CloseWithError(0, ""); err != nil { - newError("failed to close connection").Base(err).WriteToLog() + errors.LogInfoInner(context.Background(), err, "failed to close connection") } if err := s.rawConn.Close(); err != nil { - newError("failed to close raw connection").Base(err).WriteToLog() + errors.LogInfoInner(context.Background(), err, "failed to close raw connection") } } if len(activeConnections) < len(conns) { - newError("active quic connection reduced from ", len(conns), " to ", len(activeConnections)).WriteToLog() + errors.LogInfo(context.Background(), "active quic connection reduced from ", len(conns), " to ", len(activeConnections)) return activeConnections } @@ -125,17 +126,17 @@ func (s *clientConnections) openConnection(ctx context.Context, destAddr net.Add if err == nil { return conn, nil } - newError("failed to openStream: ").Base(err).WriteToLog() + errors.LogInfoInner(ctx, err, "failed to openStream: ") } else { - newError("current quic connection is not active!").WriteToLog() + errors.LogInfo(ctx, "current quic connection is not active!") } } conns = removeInactiveConnections(conns) - newError("dialing quic to ", dest).WriteToLog() + errors.LogInfo(ctx, "dialing quic to ", dest) rawConn, err := internet.DialSystem(ctx, dest, sockopt) if err != nil { - return nil, newError("failed to dial to dest: ", err).AtWarning().Base(err) + return nil, errors.New("failed to dial to dest: ", err).AtWarning().Base(err) } quicConfig := &quic.Config{ @@ -156,7 +157,7 @@ func (s *clientConnections) openConnection(ctx context.Context, destAddr net.Add default: // TODO: Support sockopt for QUIC rawConn.Close() - return nil, newError("QUIC with sockopt is unsupported").AtWarning() + return nil, errors.New("QUIC with sockopt is unsupported").AtWarning() } sysConn, err := wrapSysConn(udpConn, config) @@ -208,14 +209,14 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me IP: dest.Address.IP(), Port: int(dest.Port), } - } else { + } else { dialerIp := internet.DestIpAddress() if dialerIp != nil { destAddr = &net.UDPAddr{ IP: dialerIp, Port: int(dest.Port), } - newError("quic Dial use dialer dest addr: ", destAddr).WriteToLog() + errors.LogInfo(ctx, "quic Dial use dialer dest addr: ", destAddr) } else { addr, err := net.ResolveUDPAddr("udp", dest.NetAddr()) if err != nil { diff --git a/xray-core/transport/internet/quic/errors.generated.go b/xray-core/transport/internet/quic/errors.generated.go deleted file mode 100644 index 808fd980e3..0000000000 --- a/xray-core/transport/internet/quic/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package quic - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/transport/internet/quic/hub.go b/xray-core/transport/internet/quic/hub.go index 7f7ea86f4f..de8919fdb1 100644 --- a/xray-core/transport/internet/quic/hub.go +++ b/xray-core/transport/internet/quic/hub.go @@ -8,6 +8,7 @@ import ( "github.com/quic-go/quic-go/logging" "github.com/quic-go/quic-go/qlog" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/protocol/tls/cert" "github.com/xtls/xray-core/common/signal/done" @@ -27,13 +28,13 @@ func (l *Listener) acceptStreams(conn quic.Connection) { for { stream, err := conn.AcceptStream(context.Background()) if err != nil { - newError("failed to accept stream").Base(err).WriteToLog() + errors.LogInfoInner(context.Background(), err, "failed to accept stream") select { case <-conn.Context().Done(): return case <-l.done.Wait(): if err := conn.CloseWithError(0, ""); err != nil { - newError("failed to close connection").Base(err).WriteToLog() + errors.LogInfoInner(context.Background(), err, "failed to close connection") } return default: @@ -56,7 +57,7 @@ func (l *Listener) keepAccepting() { for { conn, err := l.listener.Accept(context.Background()) if err != nil { - newError("failed to accept QUIC connection").Base(err).WriteToLog() + errors.LogInfoInner(context.Background(), err, "failed to accept QUIC connection") if l.done.Done() { break } @@ -83,7 +84,7 @@ func (l *Listener) Close() error { // Listen creates a new Listener based on configurations. func Listen(ctx context.Context, address net.Address, port net.Port, streamSettings *internet.MemoryStreamConfig, handler internet.ConnHandler) (internet.Listener, error) { if address.Family().IsDomain() { - return nil, newError("domain address is not allows for listening quic") + return nil, errors.New("domain address is not allows for listening quic") } tlsConfig := tls.ConfigFromStreamSettings(streamSettings) diff --git a/xray-core/transport/internet/reality/config.go b/xray-core/transport/internet/reality/config.go index be3611e51e..406494da2f 100644 --- a/xray-core/transport/internet/reality/config.go +++ b/xray-core/transport/internet/reality/config.go @@ -1,12 +1,14 @@ package reality import ( + "context" "io" "net" "os" "time" "github.com/xtls/reality" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/transport/internet" ) @@ -48,7 +50,7 @@ func KeyLogWriterFromConfig(c *Config) io.Writer { writer, err := os.OpenFile(c.MasterKeyLog, os.O_CREATE|os.O_RDWR|os.O_APPEND, 0644) if err != nil { - newError("failed to open ", c.MasterKeyLog, " as master key log").AtError().Base(err).WriteToLog() + errors.LogErrorInner(context.Background(), err, "failed to open ", c.MasterKeyLog, " as master key log") } return writer diff --git a/xray-core/transport/internet/reality/errors.generated.go b/xray-core/transport/internet/reality/errors.generated.go deleted file mode 100644 index e578015f52..0000000000 --- a/xray-core/transport/internet/reality/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package reality - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/transport/internet/reality/reality.go b/xray-core/transport/internet/reality/reality.go index 011bb907b8..8c77e79f40 100644 --- a/xray-core/transport/internet/reality/reality.go +++ b/xray-core/transport/internet/reality/reality.go @@ -29,7 +29,6 @@ import ( "github.com/xtls/reality" "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" - "github.com/xtls/xray-core/common/session" "github.com/xtls/xray-core/core" "github.com/xtls/xray-core/transport/internet/tls" "golang.org/x/crypto/chacha20poly1305" @@ -120,7 +119,7 @@ func UClient(c net.Conn, config *Config, ctx context.Context, dest net.Destinati uConn.ServerName = utlsConfig.ServerName fingerprint := tls.GetFingerprint(config.Fingerprint) if fingerprint == nil { - return nil, newError("REALITY: failed to get fingerprint").AtError() + return nil, errors.New("REALITY: failed to get fingerprint").AtError() } uConn.UConn = utls.UClient(c, utlsConfig, *fingerprint) { @@ -135,7 +134,7 @@ func UClient(c net.Conn, config *Config, ctx context.Context, dest net.Destinati binary.BigEndian.PutUint32(hello.SessionId[4:], uint32(time.Now().Unix())) copy(hello.SessionId[8:], config.ShortId) if config.Show { - newError(fmt.Sprintf("REALITY localAddr: %v\thello.SessionId[:16]: %v\n", localAddr, hello.SessionId[:16])).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, fmt.Sprintf("REALITY localAddr: %v\thello.SessionId[:16]: %v\n", localAddr, hello.SessionId[:16])) } publicKey, err := ecdh.X25519().NewPublicKey(config.PublicKey) if err != nil { @@ -156,7 +155,7 @@ func UClient(c net.Conn, config *Config, ctx context.Context, dest net.Destinati aead, _ = chacha20poly1305.New(uConn.AuthKey) } if config.Show { - newError(fmt.Sprintf("REALITY localAddr: %v\tuConn.AuthKey[:16]: %v\tAEAD: %T\n", localAddr, uConn.AuthKey[:16], aead)).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, fmt.Sprintf("REALITY localAddr: %v\tuConn.AuthKey[:16]: %v\tAEAD: %T\n", localAddr, uConn.AuthKey[:16], aead)) } aead.Seal(hello.SessionId[:0], hello.Random[20:], hello.SessionId[:16], hello.Raw) copy(hello.Raw[39:], hello.SessionId) @@ -165,14 +164,14 @@ func UClient(c net.Conn, config *Config, ctx context.Context, dest net.Destinati return nil, err } if config.Show { - newError(fmt.Sprintf("REALITY localAddr: %v\tuConn.Verified: %v\n", localAddr, uConn.Verified)).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, fmt.Sprintf("REALITY localAddr: %v\tuConn.Verified: %v\n", localAddr, uConn.Verified)) } if !uConn.Verified { go func() { client := &http.Client{ Transport: &http2.Transport{ DialTLSContext: func(ctx context.Context, network, addr string, cfg *gotls.Config) (net.Conn, error) { - newError(fmt.Sprintf("REALITY localAddr: %v\tDialTLSContext\n", localAddr)).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, fmt.Sprintf("REALITY localAddr: %v\tDialTLSContext\n", localAddr)) return uConn, nil }, }, @@ -209,7 +208,7 @@ func UClient(c net.Conn, config *Config, ctx context.Context, dest net.Destinati } req.Header.Set("User-Agent", fingerprint.Client) // TODO: User-Agent map if first && config.Show { - newError(fmt.Sprintf("REALITY localAddr: %v\treq.UserAgent(): %v\n", localAddr, req.UserAgent())).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, fmt.Sprintf("REALITY localAddr: %v\treq.UserAgent(): %v\n", localAddr, req.UserAgent())) } times := 1 if !first { @@ -237,9 +236,9 @@ func UClient(c net.Conn, config *Config, ctx context.Context, dest net.Destinati } req.URL.Path = getPathLocked(paths) if config.Show { - newError(fmt.Sprintf("REALITY localAddr: %v\treq.Referer(): %v\n", localAddr, req.Referer())).WriteToLog(session.ExportIDToError(ctx)) - newError(fmt.Sprintf("REALITY localAddr: %v\tlen(body): %v\n", localAddr, len(body))).WriteToLog(session.ExportIDToError(ctx)) - newError(fmt.Sprintf("REALITY localAddr: %v\tlen(paths): %v\n", localAddr, len(paths))).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, fmt.Sprintf("REALITY localAddr: %v\treq.Referer(): %v\n", localAddr, req.Referer())) + errors.LogInfo(ctx, fmt.Sprintf("REALITY localAddr: %v\tlen(body): %v\n", localAddr, len(body))) + errors.LogInfo(ctx, fmt.Sprintf("REALITY localAddr: %v\tlen(paths): %v\n", localAddr, len(paths))) } maps.Unlock() if !first { diff --git a/xray-core/transport/internet/sockopt_darwin.go b/xray-core/transport/internet/sockopt_darwin.go index de40553834..82e0efbb03 100644 --- a/xray-core/transport/internet/sockopt_darwin.go +++ b/xray-core/transport/internet/sockopt_darwin.go @@ -6,6 +6,7 @@ import ( "syscall" "unsafe" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "golang.org/x/sys/unix" ) @@ -36,7 +37,7 @@ const ( func OriginalDst(la, ra net.Addr) (net.IP, int, error) { f, err := os.Open("/dev/pf") if err != nil { - return net.IP{}, -1, newError("failed to open device /dev/pf").Base(err) + return net.IP{}, -1, errors.New("failed to open device /dev/pf").Base(err) } defer f.Close() fd := f.Fd() @@ -111,7 +112,7 @@ func applyOutboundSocketOptions(network string, address string, fd uintptr, conf InterfaceIndex := getInterfaceIndexByName(config.Interface) if InterfaceIndex != 0 { if err := unix.SetsockoptInt(int(fd), syscall.IPPROTO_IP, syscall.IP_BOUND_IF, InterfaceIndex); err != nil { - return newError("failed to set Interface").Base(err) + return errors.New("failed to set Interface").Base(err) } } } @@ -119,26 +120,26 @@ func applyOutboundSocketOptions(network string, address string, fd uintptr, conf if config.TcpKeepAliveIdle > 0 || config.TcpKeepAliveInterval > 0 { if config.TcpKeepAliveIdle > 0 { if err := unix.SetsockoptInt(int(fd), unix.IPPROTO_TCP, unix.TCP_KEEPALIVE, int(config.TcpKeepAliveInterval)); err != nil { - return newError("failed to set TCP_KEEPINTVL", err) + return errors.New("failed to set TCP_KEEPINTVL", err) } } if config.TcpKeepAliveInterval > 0 { if err := unix.SetsockoptInt(int(fd), unix.IPPROTO_TCP, sysTCP_KEEPINTVL, int(config.TcpKeepAliveIdle)); err != nil { - return newError("failed to set TCP_KEEPIDLE", err) + return errors.New("failed to set TCP_KEEPIDLE", err) } } if err := unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_KEEPALIVE, 1); err != nil { - return newError("failed to set SO_KEEPALIVE", err) + return errors.New("failed to set SO_KEEPALIVE", err) } } else if config.TcpKeepAliveInterval < 0 || config.TcpKeepAliveIdle < 0 { if err := unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_KEEPALIVE, 0); err != nil { - return newError("failed to unset SO_KEEPALIVE", err) + return errors.New("failed to unset SO_KEEPALIVE", err) } } if config.TcpNoDelay { if err := unix.SetsockoptInt(int(fd), unix.IPPROTO_TCP, unix.TCP_NODELAY, 1); err != nil { - return newError("failed to set TCP_NODELAY", err) + return errors.New("failed to set TCP_NODELAY", err) } } } @@ -161,7 +162,7 @@ func applyInboundSocketOptions(network string, fd uintptr, config *SocketConfig) InterfaceIndex := getInterfaceIndexByName(config.Interface) if InterfaceIndex != 0 { if err := unix.SetsockoptInt(int(fd), syscall.IPPROTO_IP, syscall.IP_BOUND_IF, InterfaceIndex); err != nil { - return newError("failed to set Interface").Base(err) + return errors.New("failed to set Interface").Base(err) } } } @@ -169,20 +170,20 @@ func applyInboundSocketOptions(network string, fd uintptr, config *SocketConfig) if config.TcpKeepAliveIdle > 0 || config.TcpKeepAliveInterval > 0 { if config.TcpKeepAliveIdle > 0 { if err := unix.SetsockoptInt(int(fd), unix.IPPROTO_TCP, unix.TCP_KEEPALIVE, int(config.TcpKeepAliveInterval)); err != nil { - return newError("failed to set TCP_KEEPINTVL", err) + return errors.New("failed to set TCP_KEEPINTVL", err) } } if config.TcpKeepAliveInterval > 0 { if err := unix.SetsockoptInt(int(fd), unix.IPPROTO_TCP, sysTCP_KEEPINTVL, int(config.TcpKeepAliveIdle)); err != nil { - return newError("failed to set TCP_KEEPIDLE", err) + return errors.New("failed to set TCP_KEEPIDLE", err) } } if err := unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_KEEPALIVE, 1); err != nil { - return newError("failed to set SO_KEEPALIVE", err) + return errors.New("failed to set SO_KEEPALIVE", err) } } else if config.TcpKeepAliveInterval < 0 || config.TcpKeepAliveIdle < 0 { if err := unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_KEEPALIVE, 0); err != nil { - return newError("failed to unset SO_KEEPALIVE", err) + return errors.New("failed to unset SO_KEEPALIVE", err) } } } @@ -210,7 +211,7 @@ func bindAddr(fd uintptr, address []byte, port uint32) error { copy(a6.Addr[:], address) sockaddr = a6 default: - return newError("unexpected length of ip") + return errors.New("unexpected length of ip") } return unix.Bind(int(fd), sockaddr) @@ -218,14 +219,14 @@ func bindAddr(fd uintptr, address []byte, port uint32) error { func setReuseAddr(fd uintptr) error { if err := unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_REUSEADDR, 1); err != nil { - return newError("failed to set SO_REUSEADDR").Base(err).AtWarning() + return errors.New("failed to set SO_REUSEADDR").Base(err).AtWarning() } return nil } func setReusePort(fd uintptr) error { if err := unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_REUSEPORT, 1); err != nil { - return newError("failed to set SO_REUSEPORT").Base(err).AtWarning() + return errors.New("failed to set SO_REUSEPORT").Base(err).AtWarning() } return nil } diff --git a/xray-core/transport/internet/sockopt_freebsd.go b/xray-core/transport/internet/sockopt_freebsd.go index 66db4be3dc..4d490a40b5 100644 --- a/xray-core/transport/internet/sockopt_freebsd.go +++ b/xray-core/transport/internet/sockopt_freebsd.go @@ -7,6 +7,7 @@ import ( "syscall" "unsafe" + "github.com/xtls/xray-core/common/errors" "golang.org/x/sys/unix" ) @@ -59,7 +60,7 @@ func (nl *pfiocNatlook) setPort(remote, local int) { func OriginalDst(la, ra net.Addr) (net.IP, int, error) { f, err := os.Open("/dev/pf") if err != nil { - return net.IP{}, -1, newError("failed to open device /dev/pf").Base(err) + return net.IP{}, -1, errors.New("failed to open device /dev/pf").Base(err) } defer f.Close() fd := f.Fd() @@ -126,7 +127,7 @@ func OriginalDst(la, ra net.Addr) (net.IP, int, error) { func applyOutboundSocketOptions(network string, address string, fd uintptr, config *SocketConfig) error { if config.Mark != 0 { if err := syscall.SetsockoptInt(int(fd), syscall.SOL_SOCKET, syscall.SO_USER_COOKIE, int(config.Mark)); err != nil { - return newError("failed to set SO_USER_COOKIE").Base(err) + return errors.New("failed to set SO_USER_COOKIE").Base(err) } } @@ -137,26 +138,26 @@ func applyOutboundSocketOptions(network string, address string, fd uintptr, conf } if tfo >= 0 { if err := syscall.SetsockoptInt(int(fd), syscall.IPPROTO_TCP, unix.TCP_FASTOPEN, tfo); err != nil { - return newError("failed to set TCP_FASTOPEN_CONNECT=", tfo).Base(err) + return errors.New("failed to set TCP_FASTOPEN_CONNECT=", tfo).Base(err) } } if config.TcpKeepAliveIdle > 0 || config.TcpKeepAliveInterval > 0 { if config.TcpKeepAliveIdle > 0 { if err := syscall.SetsockoptInt(int(fd), syscall.IPPROTO_TCP, syscall.TCP_KEEPIDLE, int(config.TcpKeepAliveIdle)); err != nil { - return newError("failed to set TCP_KEEPIDLE", err) + return errors.New("failed to set TCP_KEEPIDLE", err) } } if config.TcpKeepAliveInterval > 0 { if err := syscall.SetsockoptInt(int(fd), syscall.IPPROTO_TCP, syscall.TCP_KEEPINTVL, int(config.TcpKeepAliveInterval)); err != nil { - return newError("failed to set TCP_KEEPINTVL", err) + return errors.New("failed to set TCP_KEEPINTVL", err) } } if err := syscall.SetsockoptInt(int(fd), syscall.SOL_SOCKET, syscall.SO_KEEPALIVE, 1); err != nil { - return newError("failed to set SO_KEEPALIVE", err) + return errors.New("failed to set SO_KEEPALIVE", err) } } else if config.TcpKeepAliveInterval < 0 || config.TcpKeepAliveIdle < 0 { if err := syscall.SetsockoptInt(int(fd), syscall.SOL_SOCKET, syscall.SO_KEEPALIVE, 0); err != nil { - return newError("failed to unset SO_KEEPALIVE", err) + return errors.New("failed to unset SO_KEEPALIVE", err) } } } @@ -165,11 +166,11 @@ func applyOutboundSocketOptions(network string, address string, fd uintptr, conf ip, _, _ := net.SplitHostPort(address) if net.ParseIP(ip).To4() != nil { if err := syscall.SetsockoptInt(int(fd), syscall.IPPROTO_IP, syscall.IP_BINDANY, 1); err != nil { - return newError("failed to set outbound IP_BINDANY").Base(err) + return errors.New("failed to set outbound IP_BINDANY").Base(err) } } else { if err := syscall.SetsockoptInt(int(fd), syscall.IPPROTO_IPV6, syscall.IPV6_BINDANY, 1); err != nil { - return newError("failed to set outbound IPV6_BINDANY").Base(err) + return errors.New("failed to set outbound IPV6_BINDANY").Base(err) } } } @@ -179,33 +180,33 @@ func applyOutboundSocketOptions(network string, address string, fd uintptr, conf func applyInboundSocketOptions(network string, fd uintptr, config *SocketConfig) error { if config.Mark != 0 { if err := syscall.SetsockoptInt(int(fd), syscall.SOL_SOCKET, syscall.SO_USER_COOKIE, int(config.Mark)); err != nil { - return newError("failed to set SO_USER_COOKIE").Base(err) + return errors.New("failed to set SO_USER_COOKIE").Base(err) } } if isTCPSocket(network) { tfo := config.ParseTFOValue() if tfo >= 0 { if err := syscall.SetsockoptInt(int(fd), syscall.IPPROTO_TCP, unix.TCP_FASTOPEN, tfo); err != nil { - return newError("failed to set TCP_FASTOPEN=", tfo).Base(err) + return errors.New("failed to set TCP_FASTOPEN=", tfo).Base(err) } } if config.TcpKeepAliveIdle > 0 || config.TcpKeepAliveInterval > 0 { if config.TcpKeepAliveIdle > 0 { if err := syscall.SetsockoptInt(int(fd), syscall.IPPROTO_TCP, syscall.TCP_KEEPIDLE, int(config.TcpKeepAliveIdle)); err != nil { - return newError("failed to set TCP_KEEPIDLE", err) + return errors.New("failed to set TCP_KEEPIDLE", err) } } if config.TcpKeepAliveInterval > 0 { if err := syscall.SetsockoptInt(int(fd), syscall.IPPROTO_TCP, syscall.TCP_KEEPINTVL, int(config.TcpKeepAliveInterval)); err != nil { - return newError("failed to set TCP_KEEPINTVL", err) + return errors.New("failed to set TCP_KEEPINTVL", err) } } if err := syscall.SetsockoptInt(int(fd), syscall.SOL_SOCKET, syscall.SO_KEEPALIVE, 1); err != nil { - return newError("failed to set SO_KEEPALIVE", err) + return errors.New("failed to set SO_KEEPALIVE", err) } } else if config.TcpKeepAliveInterval < 0 || config.TcpKeepAliveIdle < 0 { if err := syscall.SetsockoptInt(int(fd), syscall.SOL_SOCKET, syscall.SO_KEEPALIVE, 0); err != nil { - return newError("failed to unset SO_KEEPALIVE", err) + return errors.New("failed to unset SO_KEEPALIVE", err) } } } @@ -213,7 +214,7 @@ func applyInboundSocketOptions(network string, fd uintptr, config *SocketConfig) if config.Tproxy.IsEnabled() { if err := syscall.SetsockoptInt(int(fd), syscall.IPPROTO_IPV6, syscall.IPV6_BINDANY, 1); err != nil { if err := syscall.SetsockoptInt(int(fd), syscall.IPPROTO_IP, syscall.IP_BINDANY, 1); err != nil { - return newError("failed to set inbound IP_BINDANY").Base(err) + return errors.New("failed to set inbound IP_BINDANY").Base(err) } } } @@ -241,7 +242,7 @@ func bindAddr(fd uintptr, ip []byte, port uint32) error { copy(a6.Addr[:], ip) sockaddr = a6 default: - return newError("unexpected length of ip") + return errors.New("unexpected length of ip") } return syscall.Bind(int(fd), sockaddr) @@ -249,7 +250,7 @@ func bindAddr(fd uintptr, ip []byte, port uint32) error { func setReuseAddr(fd uintptr) error { if err := syscall.SetsockoptInt(int(fd), syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1); err != nil { - return newError("failed to set SO_REUSEADDR").Base(err).AtWarning() + return errors.New("failed to set SO_REUSEADDR").Base(err).AtWarning() } return nil } @@ -257,7 +258,7 @@ func setReuseAddr(fd uintptr) error { func setReusePort(fd uintptr) error { if err := syscall.SetsockoptInt(int(fd), syscall.SOL_SOCKET, soReUsePortLB, 1); err != nil { if err := syscall.SetsockoptInt(int(fd), syscall.SOL_SOCKET, soReUsePort, 1); err != nil { - return newError("failed to set SO_REUSEPORT").Base(err).AtWarning() + return errors.New("failed to set SO_REUSEPORT").Base(err).AtWarning() } } return nil diff --git a/xray-core/transport/internet/sockopt_linux.go b/xray-core/transport/internet/sockopt_linux.go index 56f24be8ba..5731aeb5fb 100644 --- a/xray-core/transport/internet/sockopt_linux.go +++ b/xray-core/transport/internet/sockopt_linux.go @@ -4,6 +4,7 @@ import ( "net" "syscall" + "github.com/xtls/xray-core/common/errors" "golang.org/x/sys/unix" ) @@ -27,7 +28,7 @@ func bindAddr(fd uintptr, ip []byte, port uint32) error { copy(a6.Addr[:], ip) sockaddr = a6 default: - return newError("unexpected length of ip") + return errors.New("unexpected length of ip") } return syscall.Bind(int(fd), sockaddr) @@ -36,13 +37,13 @@ func bindAddr(fd uintptr, ip []byte, port uint32) error { func applyOutboundSocketOptions(network string, address string, fd uintptr, config *SocketConfig) error { if config.Mark != 0 { if err := syscall.SetsockoptInt(int(fd), syscall.SOL_SOCKET, syscall.SO_MARK, int(config.Mark)); err != nil { - return newError("failed to set SO_MARK").Base(err) + return errors.New("failed to set SO_MARK").Base(err) } } if config.Interface != "" { if err := syscall.BindToDevice(int(fd), config.Interface); err != nil { - return newError("failed to set Interface").Base(err) + return errors.New("failed to set Interface").Base(err) } } @@ -53,57 +54,57 @@ func applyOutboundSocketOptions(network string, address string, fd uintptr, conf } if tfo >= 0 { if err := syscall.SetsockoptInt(int(fd), syscall.SOL_TCP, unix.TCP_FASTOPEN_CONNECT, tfo); err != nil { - return newError("failed to set TCP_FASTOPEN_CONNECT", tfo).Base(err) + return errors.New("failed to set TCP_FASTOPEN_CONNECT", tfo).Base(err) } } if config.TcpKeepAliveInterval > 0 || config.TcpKeepAliveIdle > 0 { if config.TcpKeepAliveInterval > 0 { if err := syscall.SetsockoptInt(int(fd), syscall.IPPROTO_TCP, syscall.TCP_KEEPINTVL, int(config.TcpKeepAliveInterval)); err != nil { - return newError("failed to set TCP_KEEPINTVL", err) + return errors.New("failed to set TCP_KEEPINTVL", err) } } if config.TcpKeepAliveIdle > 0 { if err := syscall.SetsockoptInt(int(fd), syscall.IPPROTO_TCP, syscall.TCP_KEEPIDLE, int(config.TcpKeepAliveIdle)); err != nil { - return newError("failed to set TCP_KEEPIDLE", err) + return errors.New("failed to set TCP_KEEPIDLE", err) } } if err := syscall.SetsockoptInt(int(fd), syscall.SOL_SOCKET, syscall.SO_KEEPALIVE, 1); err != nil { - return newError("failed to set SO_KEEPALIVE", err) + return errors.New("failed to set SO_KEEPALIVE", err) } } else if config.TcpKeepAliveInterval < 0 || config.TcpKeepAliveIdle < 0 { if err := syscall.SetsockoptInt(int(fd), syscall.SOL_SOCKET, syscall.SO_KEEPALIVE, 0); err != nil { - return newError("failed to unset SO_KEEPALIVE", err) + return errors.New("failed to unset SO_KEEPALIVE", err) } } if config.TcpCongestion != "" { if err := syscall.SetsockoptString(int(fd), syscall.SOL_TCP, syscall.TCP_CONGESTION, config.TcpCongestion); err != nil { - return newError("failed to set TCP_CONGESTION", err) + return errors.New("failed to set TCP_CONGESTION", err) } } if config.TcpWindowClamp > 0 { if err := syscall.SetsockoptInt(int(fd), syscall.IPPROTO_TCP, syscall.TCP_WINDOW_CLAMP, int(config.TcpWindowClamp)); err != nil { - return newError("failed to set TCP_WINDOW_CLAMP", err) + return errors.New("failed to set TCP_WINDOW_CLAMP", err) } } if config.TcpUserTimeout > 0 { if err := syscall.SetsockoptInt(int(fd), syscall.IPPROTO_TCP, unix.TCP_USER_TIMEOUT, int(config.TcpUserTimeout)); err != nil { - return newError("failed to set TCP_USER_TIMEOUT", err) + return errors.New("failed to set TCP_USER_TIMEOUT", err) } } if config.TcpMaxSeg > 0 { if err := syscall.SetsockoptInt(int(fd), syscall.IPPROTO_TCP, unix.TCP_MAXSEG, int(config.TcpMaxSeg)); err != nil { - return newError("failed to set TCP_MAXSEG", err) + return errors.New("failed to set TCP_MAXSEG", err) } } if config.TcpNoDelay { if err := syscall.SetsockoptInt(int(fd), syscall.IPPROTO_TCP, unix.TCP_NODELAY, 1); err != nil { - return newError("failed to set TCP_NODELAY", err) + return errors.New("failed to set TCP_NODELAY", err) } } @@ -111,7 +112,7 @@ func applyOutboundSocketOptions(network string, address string, fd uintptr, conf if config.Tproxy.IsEnabled() { if err := syscall.SetsockoptInt(int(fd), syscall.SOL_IP, syscall.IP_TRANSPARENT, 1); err != nil { - return newError("failed to set IP_TRANSPARENT").Base(err) + return errors.New("failed to set IP_TRANSPARENT").Base(err) } } @@ -121,65 +122,65 @@ func applyOutboundSocketOptions(network string, address string, fd uintptr, conf func applyInboundSocketOptions(network string, fd uintptr, config *SocketConfig) error { if config.Mark != 0 { if err := syscall.SetsockoptInt(int(fd), syscall.SOL_SOCKET, syscall.SO_MARK, int(config.Mark)); err != nil { - return newError("failed to set SO_MARK").Base(err) + return errors.New("failed to set SO_MARK").Base(err) } } if isTCPSocket(network) { tfo := config.ParseTFOValue() if tfo >= 0 { if err := syscall.SetsockoptInt(int(fd), syscall.SOL_TCP, unix.TCP_FASTOPEN, tfo); err != nil { - return newError("failed to set TCP_FASTOPEN", tfo).Base(err) + return errors.New("failed to set TCP_FASTOPEN", tfo).Base(err) } } if config.TcpKeepAliveInterval > 0 || config.TcpKeepAliveIdle > 0 { if config.TcpKeepAliveInterval > 0 { if err := syscall.SetsockoptInt(int(fd), syscall.IPPROTO_TCP, syscall.TCP_KEEPINTVL, int(config.TcpKeepAliveInterval)); err != nil { - return newError("failed to set TCP_KEEPINTVL", err) + return errors.New("failed to set TCP_KEEPINTVL", err) } } if config.TcpKeepAliveIdle > 0 { if err := syscall.SetsockoptInt(int(fd), syscall.IPPROTO_TCP, syscall.TCP_KEEPIDLE, int(config.TcpKeepAliveIdle)); err != nil { - return newError("failed to set TCP_KEEPIDLE", err) + return errors.New("failed to set TCP_KEEPIDLE", err) } } if err := syscall.SetsockoptInt(int(fd), syscall.SOL_SOCKET, syscall.SO_KEEPALIVE, 1); err != nil { - return newError("failed to set SO_KEEPALIVE", err) + return errors.New("failed to set SO_KEEPALIVE", err) } } else if config.TcpKeepAliveInterval < 0 || config.TcpKeepAliveIdle < 0 { if err := syscall.SetsockoptInt(int(fd), syscall.SOL_SOCKET, syscall.SO_KEEPALIVE, 0); err != nil { - return newError("failed to unset SO_KEEPALIVE", err) + return errors.New("failed to unset SO_KEEPALIVE", err) } } if config.TcpCongestion != "" { if err := syscall.SetsockoptString(int(fd), syscall.SOL_TCP, syscall.TCP_CONGESTION, config.TcpCongestion); err != nil { - return newError("failed to set TCP_CONGESTION", err) + return errors.New("failed to set TCP_CONGESTION", err) } } if config.TcpWindowClamp > 0 { if err := syscall.SetsockoptInt(int(fd), syscall.IPPROTO_TCP, syscall.TCP_WINDOW_CLAMP, int(config.TcpWindowClamp)); err != nil { - return newError("failed to set TCP_WINDOW_CLAMP", err) + return errors.New("failed to set TCP_WINDOW_CLAMP", err) } } if config.TcpUserTimeout > 0 { if err := syscall.SetsockoptInt(int(fd), syscall.IPPROTO_TCP, unix.TCP_USER_TIMEOUT, int(config.TcpUserTimeout)); err != nil { - return newError("failed to set TCP_USER_TIMEOUT", err) + return errors.New("failed to set TCP_USER_TIMEOUT", err) } } if config.TcpMaxSeg > 0 { if err := syscall.SetsockoptInt(int(fd), syscall.IPPROTO_TCP, unix.TCP_MAXSEG, int(config.TcpMaxSeg)); err != nil { - return newError("failed to set TCP_MAXSEG", err) + return errors.New("failed to set TCP_MAXSEG", err) } } } if config.Tproxy.IsEnabled() { if err := syscall.SetsockoptInt(int(fd), syscall.SOL_IP, syscall.IP_TRANSPARENT, 1); err != nil { - return newError("failed to set IP_TRANSPARENT").Base(err) + return errors.New("failed to set IP_TRANSPARENT").Base(err) } } @@ -193,7 +194,7 @@ func applyInboundSocketOptions(network string, fd uintptr, config *SocketConfig) if config.V6Only { if err := syscall.SetsockoptInt(int(fd), syscall.SOL_IPV6, syscall.IPV6_V6ONLY, 1); err != nil { - return newError("failed to set IPV6_V6ONLY", err) + return errors.New("failed to set IPV6_V6ONLY", err) } } @@ -202,14 +203,14 @@ func applyInboundSocketOptions(network string, fd uintptr, config *SocketConfig) func setReuseAddr(fd uintptr) error { if err := syscall.SetsockoptInt(int(fd), syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1); err != nil { - return newError("failed to set SO_REUSEADDR").Base(err).AtWarning() + return errors.New("failed to set SO_REUSEADDR").Base(err).AtWarning() } return nil } func setReusePort(fd uintptr) error { if err := syscall.SetsockoptInt(int(fd), syscall.SOL_SOCKET, unix.SO_REUSEPORT, 1); err != nil { - return newError("failed to set SO_REUSEPORT").Base(err).AtWarning() + return errors.New("failed to set SO_REUSEPORT").Base(err).AtWarning() } return nil } diff --git a/xray-core/transport/internet/sockopt_windows.go b/xray-core/transport/internet/sockopt_windows.go index e2f1f7967e..c7a79bb607 100644 --- a/xray-core/transport/internet/sockopt_windows.go +++ b/xray-core/transport/internet/sockopt_windows.go @@ -5,6 +5,8 @@ import ( "net" "syscall" "unsafe" + + "github.com/xtls/xray-core/common/errors" ) const ( @@ -29,7 +31,7 @@ func applyOutboundSocketOptions(network string, address string, fd uintptr, conf if config.Interface != "" { inf, err := net.InterfaceByName(config.Interface) if err != nil { - return newError("failed to find the interface").Base(err) + return errors.New("failed to find the interface").Base(err) } isV4 := (network == "tcp4") if isV4 { @@ -37,11 +39,11 @@ func applyOutboundSocketOptions(network string, address string, fd uintptr, conf binary.BigEndian.PutUint32(bytes[:], uint32(inf.Index)) idx := *(*uint32)(unsafe.Pointer(&bytes[0])) if err := syscall.SetsockoptInt(syscall.Handle(fd), syscall.IPPROTO_IP, IP_UNICAST_IF, int(idx)); err != nil { - return newError("failed to set IP_UNICAST_IF").Base(err) + return errors.New("failed to set IP_UNICAST_IF").Base(err) } } else { if err := syscall.SetsockoptInt(syscall.Handle(fd), syscall.IPPROTO_IPV6, IPV6_UNICAST_IF, inf.Index); err != nil { - return newError("failed to set IPV6_UNICAST_IF").Base(err) + return errors.New("failed to set IPV6_UNICAST_IF").Base(err) } } } @@ -52,16 +54,16 @@ func applyOutboundSocketOptions(network string, address string, fd uintptr, conf } if config.TcpKeepAliveIdle > 0 { if err := syscall.SetsockoptInt(syscall.Handle(fd), syscall.SOL_SOCKET, syscall.SO_KEEPALIVE, 1); err != nil { - return newError("failed to set SO_KEEPALIVE", err) + return errors.New("failed to set SO_KEEPALIVE", err) } } else if config.TcpKeepAliveIdle < 0 { if err := syscall.SetsockoptInt(syscall.Handle(fd), syscall.SOL_SOCKET, syscall.SO_KEEPALIVE, 0); err != nil { - return newError("failed to unset SO_KEEPALIVE", err) + return errors.New("failed to unset SO_KEEPALIVE", err) } } if config.TcpNoDelay { if err := syscall.SetsockoptInt(syscall.Handle(fd), syscall.IPPROTO_TCP, syscall.TCP_NODELAY, 1); err != nil { - return newError("failed to set TCP_NODELAY", err) + return errors.New("failed to set TCP_NODELAY", err) } } } @@ -76,11 +78,11 @@ func applyInboundSocketOptions(network string, fd uintptr, config *SocketConfig) } if config.TcpKeepAliveIdle > 0 { if err := syscall.SetsockoptInt(syscall.Handle(fd), syscall.SOL_SOCKET, syscall.SO_KEEPALIVE, 1); err != nil { - return newError("failed to set SO_KEEPALIVE", err) + return errors.New("failed to set SO_KEEPALIVE", err) } } else if config.TcpKeepAliveIdle < 0 { if err := syscall.SetsockoptInt(syscall.Handle(fd), syscall.SOL_SOCKET, syscall.SO_KEEPALIVE, 0); err != nil { - return newError("failed to unset SO_KEEPALIVE", err) + return errors.New("failed to unset SO_KEEPALIVE", err) } } } diff --git a/xray-core/transport/internet/splithttp/dialer.go b/xray-core/transport/internet/splithttp/dialer.go index 899f7810d5..cecab58f24 100644 --- a/xray-core/transport/internet/splithttp/dialer.go +++ b/xray-core/transport/internet/splithttp/dialer.go @@ -14,8 +14,8 @@ import ( "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" - "github.com/xtls/xray-core/common/session" "github.com/xtls/xray-core/common/signal/done" "github.com/xtls/xray-core/common/signal/semaphore" "github.com/xtls/xray-core/common/uuid" @@ -136,7 +136,7 @@ func init() { } func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.MemoryStreamConfig) (stat.Connection, error) { - newError("dialing splithttp to ", dest).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "dialing splithttp to ", dest) var requestURL url.URL @@ -191,7 +191,7 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me nil, ) if err != nil { - newError("failed to construct download http request").Base(err).WriteToLog() + errors.LogInfoInner(ctx, err, "failed to construct download http request") gotDownResponse.Close() return } @@ -201,14 +201,14 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me response, err := httpClient.download.Do(req) gotConn.Close() if err != nil { - newError("failed to send download http request").Base(err).WriteToLog() + errors.LogInfoInner(ctx, err, "failed to send download http request") gotDownResponse.Close() return } if response.StatusCode != 200 { response.Body.Close() - newError("invalid status code on download:", response.Status).WriteToLog() + errors.LogInfo(ctx, "invalid status code on download:", response.Status) gotDownResponse.Close() return } @@ -219,7 +219,7 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me _, err = io.ReadFull(response.Body, trashHeader) if err != nil { response.Body.Close() - newError("failed to read initial response").Base(err).WriteToLog() + errors.LogInfoInner(ctx, err, "failed to read initial response") gotDownResponse.Close() return } @@ -258,7 +258,7 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me defer requestsLimiter.Signal() req, err := http.NewRequest("POST", url, &buf.MultiBufferContainer{MultiBuffer: chunk}) if err != nil { - newError("failed to send upload").Base(err).WriteToLog() + errors.LogInfoInner(ctx, err, "failed to send upload") uploadPipeReader.Interrupt() return } @@ -268,14 +268,14 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me if httpClient.isH2 { resp, err := httpClient.upload.Do(req) if err != nil { - newError("failed to send upload").Base(err).WriteToLog() + errors.LogInfoInner(ctx, err, "failed to send upload") uploadPipeReader.Interrupt() return } defer resp.Body.Close() if resp.StatusCode != 200 { - newError("failed to send upload, bad status code:", resp.Status).WriteToLog() + errors.LogInfo(ctx, "failed to send upload, bad status code:", resp.Status) uploadPipeReader.Interrupt() return } @@ -287,7 +287,7 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me if uploadConn == nil { uploadConn, err = httpClient.dialUploadConn(context.WithoutCancel(ctx)) if err != nil { - newError("failed to connect upload").Base(err).WriteToLog() + errors.LogInfoInner(ctx, err, "failed to connect upload") uploadPipeReader.Interrupt() return } @@ -300,7 +300,7 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me } if err != nil { - newError("failed to send upload").Base(err).WriteToLog() + errors.LogInfoInner(ctx, err, "failed to send upload") uploadPipeReader.Interrupt() return } @@ -324,7 +324,7 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me CreateReader: func() (io.ReadCloser, error) { <-gotDownResponse.Wait() if downResponse == nil { - return nil, newError("downResponse failed") + return nil, errors.New("downResponse failed") } return downResponse, nil }, diff --git a/xray-core/transport/internet/splithttp/errors.generated.go b/xray-core/transport/internet/splithttp/errors.generated.go deleted file mode 100644 index 30fca9f6b4..0000000000 --- a/xray-core/transport/internet/splithttp/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package splithttp - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/transport/internet/splithttp/hub.go b/xray-core/transport/internet/splithttp/hub.go index 1e586eef6b..3dee0b9e0e 100644 --- a/xray-core/transport/internet/splithttp/hub.go +++ b/xray-core/transport/internet/splithttp/hub.go @@ -12,9 +12,9 @@ import ( "time" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" http_proto "github.com/xtls/xray-core/common/protocol/http" - "github.com/xtls/xray-core/common/session" "github.com/xtls/xray-core/common/signal/done" "github.com/xtls/xray-core/transport/internet" "github.com/xtls/xray-core/transport/internet/stat" @@ -73,13 +73,13 @@ func (h *requestHandler) upsertSession(sessionId string) *httpSession { func (h *requestHandler) ServeHTTP(writer http.ResponseWriter, request *http.Request) { if len(h.host) > 0 && request.Host != h.host { - newError("failed to validate host, request:", request.Host, ", config:", h.host).WriteToLog() + errors.LogInfo(context.Background(), "failed to validate host, request:", request.Host, ", config:", h.host) writer.WriteHeader(http.StatusNotFound) return } if !strings.HasPrefix(request.URL.Path, h.path) { - newError("failed to validate path, request:", request.URL.Path, ", config:", h.path).WriteToLog() + errors.LogInfo(context.Background(), "failed to validate path, request:", request.URL.Path, ", config:", h.path) writer.WriteHeader(http.StatusNotFound) return } @@ -91,7 +91,7 @@ func (h *requestHandler) ServeHTTP(writer http.ResponseWriter, request *http.Req } if sessionId == "" { - newError("no sessionid on request:", request.URL.Path).WriteToLog() + errors.LogInfo(context.Background(), "no sessionid on request:", request.URL.Path) writer.WriteHeader(http.StatusBadRequest) return } @@ -117,21 +117,21 @@ func (h *requestHandler) ServeHTTP(writer http.ResponseWriter, request *http.Req } if seq == "" { - newError("no seq on request:", request.URL.Path).WriteToLog() + errors.LogInfo(context.Background(), "no seq on request:", request.URL.Path) writer.WriteHeader(http.StatusBadRequest) return } payload, err := io.ReadAll(request.Body) if err != nil { - newError("failed to upload").Base(err).WriteToLog() + errors.LogInfoInner(context.Background(), err, "failed to upload") writer.WriteHeader(http.StatusInternalServerError) return } seqInt, err := strconv.ParseUint(seq, 10, 64) if err != nil { - newError("failed to upload").Base(err).WriteToLog() + errors.LogInfoInner(context.Background(), err, "failed to upload") writer.WriteHeader(http.StatusInternalServerError) return } @@ -142,7 +142,7 @@ func (h *requestHandler) ServeHTTP(writer http.ResponseWriter, request *http.Req }) if err != nil { - newError("failed to upload").Base(err).WriteToLog() + errors.LogInfoInner(context.Background(), err, "failed to upload") writer.WriteHeader(http.StatusInternalServerError) return } @@ -249,9 +249,9 @@ func ListenSH(ctx context.Context, address net.Address, port net.Port, streamSet Net: "unix", }, streamSettings.SocketSettings) if err != nil { - return nil, newError("failed to listen unix domain socket(for SH) on ", address).Base(err) + return nil, errors.New("failed to listen unix domain socket(for SH) on ", address).Base(err) } - newError("listening unix domain socket(for SH) on ", address).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "listening unix domain socket(for SH) on ", address) } else { // tcp localAddr = gonet.TCPAddr{ IP: address.IP(), @@ -262,9 +262,9 @@ func ListenSH(ctx context.Context, address net.Address, port net.Port, streamSet Port: int(port), }, streamSettings.SocketSettings) if err != nil { - return nil, newError("failed to listen TCP(for SH) on ", address, ":", port).Base(err) + return nil, errors.New("failed to listen TCP(for SH) on ", address, ":", port).Base(err) } - newError("listening TCP(for SH) on ", address, ":", port).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "listening TCP(for SH) on ", address, ":", port) } if config := v2tls.ConfigFromStreamSettings(streamSettings); config != nil { @@ -294,7 +294,7 @@ func ListenSH(ctx context.Context, address net.Address, port net.Port, streamSet go func() { if err := l.server.Serve(l.listener); err != nil { - newError("failed to serve http for splithttp").Base(err).AtWarning().WriteToLog(session.ExportIDToError(ctx)) + errors.LogWarningInner(ctx, err, "failed to serve http for splithttp") } }() diff --git a/xray-core/transport/internet/splithttp/lazy_reader.go b/xray-core/transport/internet/splithttp/lazy_reader.go index 5ae4ed558d..8641cbac0c 100644 --- a/xray-core/transport/internet/splithttp/lazy_reader.go +++ b/xray-core/transport/internet/splithttp/lazy_reader.go @@ -3,6 +3,8 @@ package splithttp import ( "io" "sync" + + "github.com/xtls/xray-core/common/errors" ) type LazyReader struct { @@ -50,7 +52,7 @@ func (r *LazyReader) Close() error { if r.reader != nil { err = r.reader.Close() r.reader = nil - r.readerError = newError("closed reader") + r.readerError = errors.New("closed reader") } return err diff --git a/xray-core/transport/internet/splithttp/splithttp.go b/xray-core/transport/internet/splithttp/splithttp.go index 55d230dfef..6e45861665 100644 --- a/xray-core/transport/internet/splithttp/splithttp.go +++ b/xray-core/transport/internet/splithttp/splithttp.go @@ -4,6 +4,7 @@ import ( "context" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" ) //go:generate go run github.com/xtls/xray-core/common/errors/errorgen @@ -12,6 +13,6 @@ const protocolName = "splithttp" func init() { common.Must(common.RegisterConfig((*Config)(nil), func(ctx context.Context, config interface{}) (interface{}, error) { - return nil, newError("splithttp is a transport protocol.") + return nil, errors.New("splithttp is a transport protocol.") })) } diff --git a/xray-core/transport/internet/splithttp/upload_queue.go b/xray-core/transport/internet/splithttp/upload_queue.go index 62c6941144..4737b811dc 100644 --- a/xray-core/transport/internet/splithttp/upload_queue.go +++ b/xray-core/transport/internet/splithttp/upload_queue.go @@ -6,6 +6,8 @@ package splithttp import ( "container/heap" "io" + + "github.com/xtls/xray-core/common/errors" ) type Packet struct { @@ -33,7 +35,7 @@ func NewUploadQueue(maxPackets int) *UploadQueue { func (h *UploadQueue) Push(p Packet) error { if h.closed { - return newError("splithttp packet queue closed") + return errors.New("splithttp packet queue closed") } h.pushedPackets <- p @@ -84,7 +86,7 @@ func (h *UploadQueue) Read(b []byte) (int, error) { // the "reassembly buffer" is too large, and we want to // constrain memory usage somehow. let's tear down the // connection, and hope the application retries. - return 0, newError("packet queue is too large") + return 0, errors.New("packet queue is too large") } heap.Push(&h.heap, packet) packet2, more := <-h.pushedPackets diff --git a/xray-core/transport/internet/system_dialer.go b/xray-core/transport/internet/system_dialer.go index 3c9239e82b..73379e4102 100644 --- a/xray-core/transport/internet/system_dialer.go +++ b/xray-core/transport/internet/system_dialer.go @@ -6,8 +6,8 @@ import ( "time" "github.com/sagernet/sing/common/control" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" - "github.com/xtls/xray-core/common/session" "github.com/xtls/xray-core/features/dns" "github.com/xtls/xray-core/features/outbound" ) @@ -48,7 +48,7 @@ func hasBindAddr(sockopt *SocketConfig) bool { } func (d *DefaultSystemDialer) Dial(ctx context.Context, src net.Address, dest net.Destination, sockopt *SocketConfig) (net.Conn, error) { - newError("dialing to " + dest.String()).AtDebug().WriteToLog() + errors.LogDebug(ctx, "dialing to " + dest.String()) if dest.Network == net.Network_UDP && !hasBindAddr(sockopt) { srcAddr := resolveSrcAddr(net.Network_UDP, src) @@ -73,7 +73,7 @@ func (d *DefaultSystemDialer) Dial(ctx context.Context, src net.Address, dest ne } sys.Control(func(fd uintptr) { if err := applyOutboundSocketOptions("udp", dest.NetAddr(), fd, sockopt); err != nil { - newError("failed to apply socket options").Base(err).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, err, "failed to apply socket options") } }) } @@ -99,17 +99,17 @@ func (d *DefaultSystemDialer) Dial(ctx context.Context, src net.Address, dest ne dialer.Control = func(network, address string, c syscall.RawConn) error { for _, ctl := range d.controllers { if err := ctl(network, address, c); err != nil { - newError("failed to apply external controller").Base(err).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfoInner(ctx, err, "failed to apply external controller") } } return c.Control(func(fd uintptr) { if sockopt != nil { if err := applyOutboundSocketOptions(network, address, fd, sockopt); err != nil { - newError("failed to apply socket options").Base(err).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfoInner(ctx, err, "failed to apply socket options") } if dest.Network == net.Network_UDP && hasBindAddr(sockopt) { if err := bindAddr(fd, sockopt.BindAddress, sockopt.BindPort); err != nil { - newError("failed to bind source address to ", sockopt.BindAddress).Base(err).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfoInner(ctx, err, "failed to bind source address to ", sockopt.BindAddress) } } } @@ -210,12 +210,12 @@ func UseAlternativeSystemDialer(dialer SystemDialer) { // xray:api:beta func RegisterDialerController(ctl control.Func) error { if ctl == nil { - return newError("nil listener controller") + return errors.New("nil listener controller") } dialer, ok := effectiveSystemDialer.(*DefaultSystemDialer) if !ok { - return newError("RegisterListenerController not supported in custom dialer") + return errors.New("RegisterListenerController not supported in custom dialer") } dialer.controllers = append(dialer.controllers, ctl) diff --git a/xray-core/transport/internet/system_listener.go b/xray-core/transport/internet/system_listener.go index 6593f4bce7..ad7ae892e7 100644 --- a/xray-core/transport/internet/system_listener.go +++ b/xray-core/transport/internet/system_listener.go @@ -11,8 +11,8 @@ import ( "github.com/pires/go-proxyproto" "github.com/sagernet/sing/common/control" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" - "github.com/xtls/xray-core/common/session" ) var effectiveListener = DefaultListener{} @@ -39,13 +39,13 @@ func getControlFunc(ctx context.Context, sockopt *SocketConfig, controllers []co return c.Control(func(fd uintptr) { for _, controller := range controllers { if err := controller(network, address, c); err != nil { - newError("failed to apply external controller").Base(err).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfoInner(ctx, err, "failed to apply external controller") } } if sockopt != nil { if err := applyInboundSocketOptions(network, fd, sockopt); err != nil { - newError("failed to apply socket options to incoming connection").Base(err).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfoInner(ctx, err, "failed to apply socket options to incoming connection") } } @@ -95,7 +95,7 @@ func (dl *DefaultListener) Listen(ctx context.Context, addr net.Addr, sockopt *S address = s[0] perm, perr := strconv.ParseUint(s[1], 8, 32) if perr != nil { - return nil, newError("failed to parse permission: " + s[1]).Base(perr) + return nil, errors.New("failed to parse permission: " + s[1]).Base(perr) } mode := os.FileMode(perm) @@ -122,7 +122,7 @@ func (dl *DefaultListener) Listen(ctx context.Context, addr net.Addr, sockopt *S err = os.Chmod(address, *filePerm) if err != nil { l.Close() - return nil, newError("failed to set permission for " + address).Base(err) + return nil, errors.New("failed to set permission for " + address).Base(err) } return l, nil } @@ -152,7 +152,7 @@ func (dl *DefaultListener) ListenPacket(ctx context.Context, addr net.Addr, sock // xray:api:beta func RegisterListenerController(controller control.Func) error { if controller == nil { - return newError("nil listener controller") + return errors.New("nil listener controller") } effectiveListener.controllers = append(effectiveListener.controllers, controller) diff --git a/xray-core/transport/internet/tagged/taggedimpl/errors.generated.go b/xray-core/transport/internet/tagged/taggedimpl/errors.generated.go deleted file mode 100644 index 178794ccb3..0000000000 --- a/xray-core/transport/internet/tagged/taggedimpl/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package taggedimpl - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/transport/internet/tagged/taggedimpl/impl.go b/xray-core/transport/internet/tagged/taggedimpl/impl.go index 6b66e11fee..29caec7cc6 100644 --- a/xray-core/transport/internet/tagged/taggedimpl/impl.go +++ b/xray-core/transport/internet/tagged/taggedimpl/impl.go @@ -3,6 +3,7 @@ package taggedimpl import ( "context" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/net/cnc" "github.com/xtls/xray-core/common/session" @@ -14,12 +15,12 @@ import ( func DialTaggedOutbound(ctx context.Context, dest net.Destination, tag string) (net.Conn, error) { var dispatcher routing.Dispatcher if core.FromContext(ctx) == nil { - return nil, newError("Instance context variable is not in context, dial denied. ") + return nil, errors.New("Instance context variable is not in context, dial denied. ") } if err := core.RequireFeatures(ctx, func(dispatcherInstance routing.Dispatcher) { dispatcher = dispatcherInstance }); err != nil { - return nil, newError("Required Feature dispatcher not resolved").Base(err) + return nil, errors.New("Required Feature dispatcher not resolved").Base(err) } content := new(session.Content) diff --git a/xray-core/transport/internet/tcp/dialer.go b/xray-core/transport/internet/tcp/dialer.go index 06ee3ecf92..bf50ed728a 100644 --- a/xray-core/transport/internet/tcp/dialer.go +++ b/xray-core/transport/internet/tcp/dialer.go @@ -4,8 +4,8 @@ import ( "context" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" - "github.com/xtls/xray-core/common/session" "github.com/xtls/xray-core/transport/internet" "github.com/xtls/xray-core/transport/internet/reality" "github.com/xtls/xray-core/transport/internet/stat" @@ -14,7 +14,7 @@ import ( // Dial dials a new TCP connection to the given destination. func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.MemoryStreamConfig) (stat.Connection, error) { - newError("dialing TCP to ", dest).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "dialing TCP to ", dest) conn, err := internet.DialSystem(ctx, dest, streamSettings.SocketSettings) if err != nil { return nil, err @@ -40,11 +40,11 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me if tcpSettings.HeaderSettings != nil { headerConfig, err := tcpSettings.HeaderSettings.GetInstance() if err != nil { - return nil, newError("failed to get header settings").Base(err).AtError() + return nil, errors.New("failed to get header settings").Base(err).AtError() } auth, err := internet.CreateConnectionAuthenticator(headerConfig) if err != nil { - return nil, newError("failed to create header authenticator").Base(err).AtError() + return nil, errors.New("failed to create header authenticator").Base(err).AtError() } conn = auth.Client(conn) } diff --git a/xray-core/transport/internet/tcp/errors.generated.go b/xray-core/transport/internet/tcp/errors.generated.go deleted file mode 100644 index 0832d11438..0000000000 --- a/xray-core/transport/internet/tcp/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package tcp - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/transport/internet/tcp/hub.go b/xray-core/transport/internet/tcp/hub.go index d4b4f8b5ef..84e39163d2 100644 --- a/xray-core/transport/internet/tcp/hub.go +++ b/xray-core/transport/internet/tcp/hub.go @@ -8,8 +8,8 @@ import ( goreality "github.com/xtls/reality" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" - "github.com/xtls/xray-core/common/session" "github.com/xtls/xray-core/transport/internet" "github.com/xtls/xray-core/transport/internet/reality" "github.com/xtls/xray-core/transport/internet/stat" @@ -47,22 +47,22 @@ func ListenTCP(ctx context.Context, address net.Address, port net.Port, streamSe Net: "unix", }, streamSettings.SocketSettings) if err != nil { - return nil, newError("failed to listen Unix Domain Socket on ", address).Base(err) + return nil, errors.New("failed to listen Unix Domain Socket on ", address).Base(err) } - newError("listening Unix Domain Socket on ", address).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "listening Unix Domain Socket on ", address) } else { listener, err = internet.ListenSystem(ctx, &net.TCPAddr{ IP: address.IP(), Port: int(port), }, streamSettings.SocketSettings) if err != nil { - return nil, newError("failed to listen TCP on ", address, ":", port).Base(err) + return nil, errors.New("failed to listen TCP on ", address, ":", port).Base(err) } - newError("listening TCP on ", address, ":", port).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "listening TCP on ", address, ":", port) } if streamSettings.SocketSettings != nil && streamSettings.SocketSettings.AcceptProxyProtocol { - newError("accepting PROXY protocol").AtWarning().WriteToLog(session.ExportIDToError(ctx)) + errors.LogWarning(ctx, "accepting PROXY protocol") } l.listener = listener @@ -77,11 +77,11 @@ func ListenTCP(ctx context.Context, address net.Address, port net.Port, streamSe if tcpSettings.HeaderSettings != nil { headerConfig, err := tcpSettings.HeaderSettings.GetInstance() if err != nil { - return nil, newError("invalid header settings").Base(err).AtError() + return nil, errors.New("invalid header settings").Base(err).AtError() } auth, err := internet.CreateConnectionAuthenticator(headerConfig) if err != nil { - return nil, newError("invalid header settings.").Base(err).AtError() + return nil, errors.New("invalid header settings.").Base(err).AtError() } l.authConfig = auth } @@ -98,7 +98,7 @@ func (v *Listener) keepAccepting() { if strings.Contains(errStr, "closed") { break } - newError("failed to accepted raw connections").Base(err).AtWarning().WriteToLog() + errors.LogWarningInner(context.Background(), err, "failed to accepted raw connections") if strings.Contains(errStr, "too many") { time.Sleep(time.Millisecond * 500) } @@ -109,7 +109,7 @@ func (v *Listener) keepAccepting() { conn = tls.Server(conn, v.tlsConfig) } else if v.realityConfig != nil { if conn, err = reality.Server(conn, v.realityConfig); err != nil { - newError(err).AtInfo().WriteToLog() + errors.LogInfo(context.Background(), err.Error()) return } } diff --git a/xray-core/transport/internet/tcp/sockopt_darwin.go b/xray-core/transport/internet/tcp/sockopt_darwin.go index a1905cf436..ec0da29a88 100644 --- a/xray-core/transport/internet/tcp/sockopt_darwin.go +++ b/xray-core/transport/internet/tcp/sockopt_darwin.go @@ -4,6 +4,7 @@ package tcp import ( + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/transport/internet" "github.com/xtls/xray-core/transport/internet/stat" @@ -15,11 +16,11 @@ func GetOriginalDestination(conn stat.Connection) (net.Destination, error) { ra := conn.RemoteAddr() ip, port, err := internet.OriginalDst(la, ra) if err != nil { - return net.Destination{}, newError("failed to get destination").Base(err) + return net.Destination{}, errors.New("failed to get destination").Base(err) } dest := net.TCPDestination(net.IPAddress(ip), net.Port(port)) if !dest.IsValid() { - return net.Destination{}, newError("failed to parse destination.") + return net.Destination{}, errors.New("failed to parse destination.") } return dest, nil } diff --git a/xray-core/transport/internet/tcp/sockopt_freebsd.go b/xray-core/transport/internet/tcp/sockopt_freebsd.go index 906e06eae7..d7ab3ff012 100644 --- a/xray-core/transport/internet/tcp/sockopt_freebsd.go +++ b/xray-core/transport/internet/tcp/sockopt_freebsd.go @@ -4,6 +4,7 @@ package tcp import ( + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/transport/internet" "github.com/xtls/xray-core/transport/internet/stat" @@ -15,11 +16,11 @@ func GetOriginalDestination(conn stat.Connection) (net.Destination, error) { ra := conn.RemoteAddr() ip, port, err := internet.OriginalDst(la, ra) if err != nil { - return net.Destination{}, newError("failed to get destination").Base(err) + return net.Destination{}, errors.New("failed to get destination").Base(err) } dest := net.TCPDestination(net.IPAddress(ip), net.Port(port)) if !dest.IsValid() { - return net.Destination{}, newError("failed to parse destination.") + return net.Destination{}, errors.New("failed to parse destination.") } return dest, nil } diff --git a/xray-core/transport/internet/tcp/sockopt_linux.go b/xray-core/transport/internet/tcp/sockopt_linux.go index 86044a8042..f5648e8fc0 100644 --- a/xray-core/transport/internet/tcp/sockopt_linux.go +++ b/xray-core/transport/internet/tcp/sockopt_linux.go @@ -4,9 +4,11 @@ package tcp import ( + "context" "syscall" "unsafe" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/transport/internet/stat" ) @@ -16,11 +18,11 @@ const SO_ORIGINAL_DST = 80 func GetOriginalDestination(conn stat.Connection) (net.Destination, error) { sysrawconn, f := conn.(syscall.Conn) if !f { - return net.Destination{}, newError("unable to get syscall.Conn") + return net.Destination{}, errors.New("unable to get syscall.Conn") } rawConn, err := sysrawconn.SyscallConn() if err != nil { - return net.Destination{}, newError("failed to get sys fd").Base(err) + return net.Destination{}, errors.New("failed to get sys fd").Base(err) } var dest net.Destination err = rawConn.Control(func(fd uintptr) { @@ -30,7 +32,7 @@ func GetOriginalDestination(conn stat.Connection) (net.Destination, error) { } addr, err := syscall.GetsockoptIPv6MTUInfo(int(fd), level, SO_ORIGINAL_DST) if err != nil { - newError("failed to call getsockopt").Base(err).WriteToLog() + errors.LogInfoInner(context.Background(), err, "failed to call getsockopt") return } ip := (*[4]byte)(unsafe.Pointer(&addr.Addr.Flowinfo))[:4] @@ -41,10 +43,10 @@ func GetOriginalDestination(conn stat.Connection) (net.Destination, error) { dest = net.TCPDestination(net.IPAddress(ip), net.PortFromBytes(port)) }) if err != nil { - return net.Destination{}, newError("failed to control connection").Base(err) + return net.Destination{}, errors.New("failed to control connection").Base(err) } if !dest.IsValid() { - return net.Destination{}, newError("failed to call getsockopt") + return net.Destination{}, errors.New("failed to call getsockopt") } return dest, nil } diff --git a/xray-core/transport/internet/tcp_hub.go b/xray-core/transport/internet/tcp_hub.go index 2ebff9a7c4..0cdd50d1c6 100644 --- a/xray-core/transport/internet/tcp_hub.go +++ b/xray-core/transport/internet/tcp_hub.go @@ -3,6 +3,7 @@ package internet import ( "context" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/transport/internet/stat" ) @@ -11,7 +12,7 @@ var transportListenerCache = make(map[string]ListenFunc) func RegisterTransportListener(protocol string, listener ListenFunc) error { if _, found := transportListenerCache[protocol]; found { - return newError(protocol, " listener already registered.").AtError() + return errors.New(protocol, " listener already registered.").AtError() } transportListenerCache[protocol] = listener return nil @@ -31,7 +32,7 @@ func ListenUnix(ctx context.Context, address net.Address, settings *MemoryStream if settings == nil { s, err := ToMemoryStreamConfig(nil) if err != nil { - return nil, newError("failed to create default unix stream settings").Base(err) + return nil, errors.New("failed to create default unix stream settings").Base(err) } settings = s } @@ -39,11 +40,11 @@ func ListenUnix(ctx context.Context, address net.Address, settings *MemoryStream protocol := settings.ProtocolName listenFunc := transportListenerCache[protocol] if listenFunc == nil { - return nil, newError(protocol, " unix istener not registered.").AtError() + return nil, errors.New(protocol, " unix istener not registered.").AtError() } listener, err := listenFunc(ctx, address, net.Port(0), settings, handler) if err != nil { - return nil, newError("failed to listen on unix address: ", address).Base(err) + return nil, errors.New("failed to listen on unix address: ", address).Base(err) } return listener, nil } @@ -52,7 +53,7 @@ func ListenTCP(ctx context.Context, address net.Address, port net.Port, settings if settings == nil { s, err := ToMemoryStreamConfig(nil) if err != nil { - return nil, newError("failed to create default stream settings").Base(err) + return nil, errors.New("failed to create default stream settings").Base(err) } settings = s } @@ -62,17 +63,17 @@ func ListenTCP(ctx context.Context, address net.Address, port net.Port, settings } if address.Family().IsDomain() { - return nil, newError("domain address is not allowed for listening: ", address.Domain()) + return nil, errors.New("domain address is not allowed for listening: ", address.Domain()) } protocol := settings.ProtocolName listenFunc := transportListenerCache[protocol] if listenFunc == nil { - return nil, newError(protocol, " listener not registered.").AtError() + return nil, errors.New(protocol, " listener not registered.").AtError() } listener, err := listenFunc(ctx, address, port, settings, handler) if err != nil { - return nil, newError("failed to listen on address: ", address, ":", port).Base(err) + return nil, errors.New("failed to listen on address: ", address, ":", port).Base(err) } return listener, nil } diff --git a/xray-core/transport/internet/tls/config.go b/xray-core/transport/internet/tls/config.go index 9d9289c3d5..7adb5a843a 100644 --- a/xray-core/transport/internet/tls/config.go +++ b/xray-core/transport/internet/tls/config.go @@ -1,6 +1,7 @@ package tls import ( + "context" "crypto/hmac" "crypto/tls" "crypto/x509" @@ -10,6 +11,7 @@ import ( "sync" "time" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/ocsp" "github.com/xtls/xray-core/common/platform/filesystem" @@ -35,7 +37,7 @@ func (c *Config) loadSelfCertPool() (*x509.CertPool, error) { root := x509.NewCertPool() for _, cert := range c.Certificate { if !root.AppendCertsFromPEM(cert.Certificate) { - return nil, newError("failed to append cert").AtWarning() + return nil, errors.New("failed to append cert").AtWarning() } } return root, nil @@ -50,12 +52,12 @@ func (c *Config) BuildCertificates() []*tls.Certificate { } keyPair, err := tls.X509KeyPair(entry.Certificate, entry.Key) if err != nil { - newError("ignoring invalid X509 key pair").Base(err).AtWarning().WriteToLog() + errors.LogWarningInner(context.Background(), err, "ignoring invalid X509 key pair") continue } keyPair.Leaf, err = x509.ParseCertificate(keyPair.Certificate[0]) if err != nil { - newError("ignoring invalid certificate").Base(err).AtWarning().WriteToLog() + errors.LogWarningInner(context.Background(), err, "ignoring invalid certificate") continue } certs = append(certs, &keyPair) @@ -73,25 +75,25 @@ func (c *Config) BuildCertificates() []*tls.Certificate { if entry.CertificatePath != "" && entry.KeyPath != "" { newCert, err := filesystem.ReadFile(entry.CertificatePath) if err != nil { - newError("failed to parse certificate").Base(err).AtError().WriteToLog() + errors.LogErrorInner(context.Background(), err, "failed to parse certificate") <-t.C continue } newKey, err := filesystem.ReadFile(entry.KeyPath) if err != nil { - newError("failed to parse key").Base(err).AtError().WriteToLog() + errors.LogErrorInner(context.Background(), err, "failed to parse key") <-t.C continue } if string(newCert) != string(entry.Certificate) && string(newKey) != string(entry.Key) { newKeyPair, err := tls.X509KeyPair(newCert, newKey) if err != nil { - newError("ignoring invalid X509 key pair").Base(err).AtError().WriteToLog() + errors.LogErrorInner(context.Background(), err, "ignoring invalid X509 key pair") <-t.C continue } if newKeyPair.Leaf, err = x509.ParseCertificate(newKeyPair.Certificate[0]); err != nil { - newError("ignoring invalid certificate").Base(err).AtError().WriteToLog() + errors.LogErrorInner(context.Background(), err, "ignoring invalid certificate") <-t.C continue } @@ -100,7 +102,7 @@ func (c *Config) BuildCertificates() []*tls.Certificate { } if isOcspstapling { if newOCSPData, err := ocsp.GetOCSPForCert(cert.Certificate); err != nil { - newError("ignoring invalid OCSP").Base(err).AtWarning().WriteToLog() + errors.LogWarningInner(context.Background(), err, "ignoring invalid OCSP") } else if string(newOCSPData) != string(cert.OCSPStaple) { cert.OCSPStaple = newOCSPData } @@ -128,11 +130,11 @@ func isCertificateExpired(c *tls.Certificate) bool { func issueCertificate(rawCA *Certificate, domain string) (*tls.Certificate, error) { parent, err := cert.ParseCertificate(rawCA.Certificate, rawCA.Key) if err != nil { - return nil, newError("failed to parse raw certificate").Base(err) + return nil, errors.New("failed to parse raw certificate").Base(err) } newCert, err := cert.Generate(parent, cert.CommonName(domain), cert.DNSNames(domain)) if err != nil { - return nil, newError("failed to generate new certificate for ", domain).Base(err) + return nil, errors.New("failed to generate new certificate for ", domain).Base(err) } newCertPEM, newKeyPEM := newCert.ToPEM() cert, err := tls.X509KeyPair(newCertPEM, newKeyPEM) @@ -176,7 +178,7 @@ func getGetCertificateFunc(c *tls.Config, ca []*Certificate) func(hello *tls.Cli newCerts = append(newCerts, certificate) } else if certificate.Leaf != nil { expTime := certificate.Leaf.NotAfter.Format(time.RFC3339) - newError("old certificate for ", domain, " (expire on ", expTime, ") discarded").AtInfo().WriteToLog() + errors.LogInfo(context.Background(), "old certificate for ", domain, " (expire on ", expTime, ") discarded") } } @@ -191,16 +193,16 @@ func getGetCertificateFunc(c *tls.Config, ca []*Certificate) func(hello *tls.Cli if rawCert.Usage == Certificate_AUTHORITY_ISSUE { newCert, err := issueCertificate(rawCert, domain) if err != nil { - newError("failed to issue new certificate for ", domain).Base(err).WriteToLog() + errors.LogInfoInner(context.Background(), err, "failed to issue new certificate for ", domain) continue } parsed, err := x509.ParseCertificate(newCert.Certificate[0]) if err == nil { newCert.Leaf = parsed expTime := parsed.NotAfter.Format(time.RFC3339) - newError("new certificate for ", domain, " (expire on ", expTime, ") issued").AtInfo().WriteToLog() + errors.LogInfo(context.Background(), "new certificate for ", domain, " (expire on ", expTime, ") issued") } else { - newError("failed to parse new certificate for ", domain).Base(err).WriteToLog() + errors.LogInfoInner(context.Background(), err, "failed to parse new certificate for ", domain) } access.Lock() @@ -212,7 +214,7 @@ func getGetCertificateFunc(c *tls.Config, ca []*Certificate) func(hello *tls.Cli } if issuedCertificate == nil { - return nil, newError("failed to create a new certificate for ", domain) + return nil, errors.New("failed to create a new certificate for ", domain) } access.Lock() @@ -265,7 +267,7 @@ func (c *Config) verifyPeerCert(rawCerts [][]byte, verifiedChains [][]*x509.Cert return nil } } - return newError("peer cert is unrecognized: ", base64.StdEncoding.EncodeToString(hashValue)) + return errors.New("peer cert is unrecognized: ", base64.StdEncoding.EncodeToString(hashValue)) } if c.PinnedPeerCertificatePublicKeySha256 != nil { @@ -279,7 +281,7 @@ func (c *Config) verifyPeerCert(rawCerts [][]byte, verifiedChains [][]*x509.Cert } } } - return newError("peer public key is unrecognized.") + return errors.New("peer public key is unrecognized.") } return nil } @@ -288,7 +290,7 @@ func (c *Config) verifyPeerCert(rawCerts [][]byte, verifiedChains [][]*x509.Cert func (c *Config) GetTLSConfig(opts ...Option) *tls.Config { root, err := c.getCertPool() if err != nil { - newError("failed to load system root certificate").AtError().Base(err).WriteToLog() + errors.LogErrorInner(context.Background(), err, "failed to load system root certificate") } if c == nil { @@ -366,7 +368,7 @@ func (c *Config) GetTLSConfig(opts ...Option) *tls.Config { if len(c.MasterKeyLog) > 0 && c.MasterKeyLog != "none" { writer, err := os.OpenFile(c.MasterKeyLog, os.O_CREATE|os.O_RDWR|os.O_APPEND, 0644) if err != nil { - newError("failed to open ", c.MasterKeyLog, " as master key log").AtError().Base(err).WriteToLog() + errors.LogErrorInner(context.Background(), err, "failed to open ", c.MasterKeyLog, " as master key log") } else { config.KeyLogWriter = writer } diff --git a/xray-core/transport/internet/tls/config_other.go b/xray-core/transport/internet/tls/config_other.go index 59e0c15337..daaf39c755 100644 --- a/xray-core/transport/internet/tls/config_other.go +++ b/xray-core/transport/internet/tls/config_other.go @@ -6,6 +6,8 @@ package tls import ( "crypto/x509" "sync" + + "github.com/xtls/xray-core/common/errors" ) type rootCertsCache struct { @@ -42,11 +44,11 @@ func (c *Config) getCertPool() (*x509.CertPool, error) { pool, err := x509.SystemCertPool() if err != nil { - return nil, newError("system root").AtWarning().Base(err) + return nil, errors.New("system root").AtWarning().Base(err) } for _, cert := range c.Certificate { if !pool.AppendCertsFromPEM(cert.Certificate) { - return nil, newError("append cert to root").AtWarning().Base(err) + return nil, errors.New("append cert to root").AtWarning().Base(err) } } return pool, err diff --git a/xray-core/transport/internet/tls/errors.generated.go b/xray-core/transport/internet/tls/errors.generated.go deleted file mode 100644 index ba1851c882..0000000000 --- a/xray-core/transport/internet/tls/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package tls - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/transport/internet/udp/dispatcher.go b/xray-core/transport/internet/udp/dispatcher.go index 9685213bef..e6267d2fd9 100644 --- a/xray-core/transport/internet/udp/dispatcher.go +++ b/xray-core/transport/internet/udp/dispatcher.go @@ -2,16 +2,16 @@ package udp import ( "context" - "errors" + goerrors "errors" "io" "sync" "time" "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/protocol/udp" - "github.com/xtls/xray-core/common/session" "github.com/xtls/xray-core/common/signal" "github.com/xtls/xray-core/common/signal/done" "github.com/xtls/xray-core/features/routing" @@ -59,7 +59,7 @@ func (v *Dispatcher) getInboundRay(ctx context.Context, dest net.Destination) (* return v.conn, nil } - newError("establishing new connection for ", dest).WriteToLog() + errors.LogInfo(ctx, "establishing new connection for ", dest) ctx, cancel := context.WithCancel(ctx) removeRay := func() { @@ -70,7 +70,7 @@ func (v *Dispatcher) getInboundRay(ctx context.Context, dest net.Destination) (* link, err := v.dispatcher.Dispatch(ctx, dest) if err != nil { - return nil, newError("failed to dispatch request to ", dest).Base(err) + return nil, errors.New("failed to dispatch request to ", dest).Base(err) } entry := &connEntry{ @@ -85,17 +85,17 @@ func (v *Dispatcher) getInboundRay(ctx context.Context, dest net.Destination) (* func (v *Dispatcher) Dispatch(ctx context.Context, destination net.Destination, payload *buf.Buffer) { // TODO: Add user to destString - newError("dispatch request to: ", destination).AtDebug().WriteToLog(session.ExportIDToError(ctx)) + errors.LogDebug(ctx, "dispatch request to: ", destination) conn, err := v.getInboundRay(ctx, destination) if err != nil { - newError("failed to get inbound").Base(err).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfoInner(ctx, err, "failed to get inbound") return } outputStream := conn.link.Writer if outputStream != nil { if err := outputStream.WriteMultiBuffer(buf.MultiBuffer{payload}); err != nil { - newError("failed to write first UDP payload").Base(err).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfoInner(ctx, err, "failed to write first UDP payload") conn.cancel() return } @@ -122,8 +122,8 @@ func handleInput(ctx context.Context, conn *connEntry, dest net.Destination, cal mb, err := input.ReadMultiBuffer() if err != nil { - if !errors.Is(err, io.EOF) { - newError("failed to handle UDP input").Base(err).WriteToLog(session.ExportIDToError(ctx)) + if !goerrors.Is(err, io.EOF) { + errors.LogInfoInner(ctx, err, "failed to handle UDP input") } return } diff --git a/xray-core/transport/internet/udp/errors.generated.go b/xray-core/transport/internet/udp/errors.generated.go deleted file mode 100644 index b1b4aa7098..0000000000 --- a/xray-core/transport/internet/udp/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package udp - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/transport/internet/udp/hub.go b/xray-core/transport/internet/udp/hub.go index d91f5536ff..c16085d506 100644 --- a/xray-core/transport/internet/udp/hub.go +++ b/xray-core/transport/internet/udp/hub.go @@ -4,6 +4,7 @@ import ( "context" "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/protocol/udp" "github.com/xtls/xray-core/transport/internet" @@ -54,7 +55,7 @@ func ListenUDP(ctx context.Context, address net.Address, port net.Port, streamSe if err != nil { return nil, err } - newError("listening UDP on ", address, ":", port).WriteToLog() + errors.LogInfo(ctx, "listening UDP on ", address, ":", port) hub.conn = udpConn.(*net.UDPConn) hub.cache = make(chan *udp.Packet, hub.capacity) @@ -89,7 +90,7 @@ func (h *Hub) start() { n, noob, _, addr, err := ReadUDPMsg(h.conn, rawBytes, oobBytes) if err != nil { - newError("failed to read UDP msg").Base(err).WriteToLog() + errors.LogInfoInner(context.Background(), err, "failed to read UDP msg") buffer.Release() break } @@ -107,9 +108,9 @@ func (h *Hub) start() { if h.recvOrigDest && noob > 0 { payload.Target = RetrieveOriginalDest(oobBytes[:noob]) if payload.Target.IsValid() { - newError("UDP original destination: ", payload.Target).AtDebug().WriteToLog() + errors.LogDebug(context.Background(), "UDP original destination: ", payload.Target) } else { - newError("failed to read UDP original destination").WriteToLog() + errors.LogInfo(context.Background(), "failed to read UDP original destination") } } diff --git a/xray-core/transport/internet/websocket/connection.go b/xray-core/transport/internet/websocket/connection.go index ca53b619a2..395c2f012d 100644 --- a/xray-core/transport/internet/websocket/connection.go +++ b/xray-core/transport/internet/websocket/connection.go @@ -74,15 +74,15 @@ func (c *connection) WriteMultiBuffer(mb buf.MultiBuffer) error { } func (c *connection) Close() error { - var errors []interface{} + var errs []interface{} if err := c.conn.WriteControl(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, ""), time.Now().Add(time.Second*5)); err != nil { - errors = append(errors, err) + errs = append(errs, err) } if err := c.conn.Close(); err != nil { - errors = append(errors, err) + errs = append(errs, err) } - if len(errors) > 0 { - return newError("failed to close connection").Base(newError(serial.Concat(errors...))) + if len(errs) > 0 { + return errors.New("failed to close connection").Base(errors.New(serial.Concat(errs...))) } return nil } diff --git a/xray-core/transport/internet/websocket/dialer.go b/xray-core/transport/internet/websocket/dialer.go index 201616889e..7003928b29 100644 --- a/xray-core/transport/internet/websocket/dialer.go +++ b/xray-core/transport/internet/websocket/dialer.go @@ -12,9 +12,9 @@ import ( "github.com/gorilla/websocket" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/platform" - "github.com/xtls/xray-core/common/session" "github.com/xtls/xray-core/common/uuid" "github.com/xtls/xray-core/transport/internet" "github.com/xtls/xray-core/transport/internet/stat" @@ -39,7 +39,7 @@ func init() { if conn, err := upgrader.Upgrade(w, r, nil); err == nil { conns <- conn } else { - newError("Browser dialer http upgrade unexpected error").AtError().WriteToLog() + errors.LogError(context.Background(), "Browser dialer http upgrade unexpected error") } } } else { @@ -51,7 +51,7 @@ func init() { // Dial dials a WebSocket connection to the given destination. func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.MemoryStreamConfig) (stat.Connection, error) { - newError("creating connection to ", dest).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "creating connection to ", dest) var conn net.Conn if streamSettings.ProtocolSettings.(*Config).Ed > 0 { ctx, cancel := context.WithCancel(ctx) @@ -65,7 +65,7 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me } else { var err error if conn, err = dialWebSocket(ctx, dest, streamSettings, nil); err != nil { - return nil, newError("failed to dial WebSocket").Base(err) + return nil, errors.New("failed to dial WebSocket").Base(err) } } return stat.Connection(conn), nil @@ -98,18 +98,18 @@ func dialWebSocket(ctx context.Context, dest net.Destination, streamSettings *in // Like the NetDial in the dialer pconn, err := internet.DialSystem(ctx, dest, streamSettings.SocketSettings) if err != nil { - newError("failed to dial to " + addr).Base(err).AtError().WriteToLog() + errors.LogErrorInner(ctx, err, "failed to dial to " + addr) return nil, err } // TLS and apply the handshake cn := tls.UClient(pconn, tlsConfig, fingerprint).(*tls.UConn) if err := cn.WebsocketHandshakeContext(ctx); err != nil { - newError("failed to dial to " + addr).Base(err).AtError().WriteToLog() + errors.LogErrorInner(ctx, err, "failed to dial to " + addr) return nil, err } if !tlsConfig.InsecureSkipVerify { if err := cn.VerifyHostname(tlsConfig.ServerName); err != nil { - newError("failed to dial to " + addr).Base(err).AtError().WriteToLog() + errors.LogErrorInner(ctx, err, "failed to dial to " + addr) return nil, err } } @@ -143,7 +143,7 @@ func dialWebSocket(ctx context.Context, dest net.Destination, streamSettings *in return nil, err } else if s := string(p); s != "ok" { conn.Close() - return nil, newError(s) + return nil, errors.New(s) } return newConnection(conn, conn.RemoteAddr(), nil), nil } @@ -160,7 +160,7 @@ func dialWebSocket(ctx context.Context, dest net.Destination, streamSettings *in if resp != nil { reason = resp.Status } - return nil, newError("failed to dial to (", uri, "): ", reason).Base(err) + return nil, errors.New("failed to dial to (", uri, "): ", reason).Base(err) } return newConnection(conn, conn.RemoteAddr(), nil), nil @@ -188,7 +188,7 @@ func (d *delayDialConn) Write(b []byte) (int, error) { var err error if d.Conn, err = dialWebSocket(d.ctx, d.dest, d.streamSettings, ed); err != nil { d.Close() - return 0, newError("failed to dial WebSocket").Base(err) + return 0, errors.New("failed to dial WebSocket").Base(err) } d.dialed <- true if ed != nil { diff --git a/xray-core/transport/internet/websocket/errors.generated.go b/xray-core/transport/internet/websocket/errors.generated.go deleted file mode 100644 index 2361d0a6a9..0000000000 --- a/xray-core/transport/internet/websocket/errors.generated.go +++ /dev/null @@ -1,9 +0,0 @@ -package websocket - -import "github.com/xtls/xray-core/common/errors" - -type errPathObjHolder struct{} - -func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) -} diff --git a/xray-core/transport/internet/websocket/hub.go b/xray-core/transport/internet/websocket/hub.go index 60f0739001..2fb893b2ed 100644 --- a/xray-core/transport/internet/websocket/hub.go +++ b/xray-core/transport/internet/websocket/hub.go @@ -13,9 +13,9 @@ import ( "github.com/gorilla/websocket" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" http_proto "github.com/xtls/xray-core/common/protocol/http" - "github.com/xtls/xray-core/common/session" "github.com/xtls/xray-core/transport/internet" v2tls "github.com/xtls/xray-core/transport/internet/tls" ) @@ -39,12 +39,12 @@ var upgrader = &websocket.Upgrader{ func (h *requestHandler) ServeHTTP(writer http.ResponseWriter, request *http.Request) { if len(h.host) > 0 && request.Host != h.host { - newError("failed to validate host, request:", request.Host, ", config:", h.host).WriteToLog() + errors.LogInfo(context.Background(), "failed to validate host, request:", request.Host, ", config:", h.host) writer.WriteHeader(http.StatusNotFound) return } if request.URL.Path != h.path { - newError("failed to validate path, request:", request.URL.Path, ", config:", h.path).WriteToLog() + errors.LogInfo(context.Background(), "failed to validate path, request:", request.URL.Path, ", config:", h.path) writer.WriteHeader(http.StatusNotFound) return } @@ -60,7 +60,7 @@ func (h *requestHandler) ServeHTTP(writer http.ResponseWriter, request *http.Req conn, err := upgrader.Upgrade(writer, request, responseHeader) if err != nil { - newError("failed to convert to WebSocket connection").Base(err).WriteToLog() + errors.LogInfoInner(context.Background(), err, "failed to convert to WebSocket connection") return } @@ -104,22 +104,22 @@ func ListenWS(ctx context.Context, address net.Address, port net.Port, streamSet Net: "unix", }, streamSettings.SocketSettings) if err != nil { - return nil, newError("failed to listen unix domain socket(for WS) on ", address).Base(err) + return nil, errors.New("failed to listen unix domain socket(for WS) on ", address).Base(err) } - newError("listening unix domain socket(for WS) on ", address).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "listening unix domain socket(for WS) on ", address) } else { // tcp listener, err = internet.ListenSystem(ctx, &net.TCPAddr{ IP: address.IP(), Port: int(port), }, streamSettings.SocketSettings) if err != nil { - return nil, newError("failed to listen TCP(for WS) on ", address, ":", port).Base(err) + return nil, errors.New("failed to listen TCP(for WS) on ", address, ":", port).Base(err) } - newError("listening TCP(for WS) on ", address, ":", port).WriteToLog(session.ExportIDToError(ctx)) + errors.LogInfo(ctx, "listening TCP(for WS) on ", address, ":", port) } if streamSettings.SocketSettings != nil && streamSettings.SocketSettings.AcceptProxyProtocol { - newError("accepting PROXY protocol").AtWarning().WriteToLog(session.ExportIDToError(ctx)) + errors.LogWarning(ctx, "accepting PROXY protocol") } if config := v2tls.ConfigFromStreamSettings(streamSettings); config != nil { @@ -142,7 +142,7 @@ func ListenWS(ctx context.Context, address net.Address, port net.Port, streamSet go func() { if err := l.server.Serve(l.listener); err != nil { - newError("failed to serve http for WebSocket").Base(err).AtWarning().WriteToLog(session.ExportIDToError(ctx)) + errors.LogWarningInner(ctx, err, "failed to serve http for WebSocket") } }()