kiddin9 4 сар өмнө
parent
commit
033598f429
23 өөрчлөгдсөн 519 нэмэгдсэн , 1200 устгасан
  1. 8 9
      .github/workflows/Openwrt-AutoBuild.yml
  2. 2 0
      devices/common/.config
  3. 2 0
      devices/common/diy.sh
  4. 377 0
      devices/common/patches/crontab.patch
  5. 19 0
      devices/common/patches/luci-base.patch
  6. 29 2
      devices/common/patches/luci-mod-system.patch
  7. 1 0
      devices/mediatek_filogic/diy.sh
  8. 1 1
      devices/mediatek_filogic/diy/target/linux/mediatek/dts/mt7981b-cudy-tr3000-mod.dts
  9. 20 0
      devices/mediatek_filogic/diy/target/linux/mediatek/dts/mt7981b-cudy-tr3000-v2-mod.dts
  10. 17 2
      devices/mediatek_filogic/patches/tr3000-mod.patch
  11. 10 6
      devices/qualcommax_ipq50xx/diy.sh
  12. BIN
      devices/qualcommax_ipq50xx/diy/package/firmware/ipq-wifi/src/board-cmcc_rax3000q.ipq5018
  13. BIN
      devices/qualcommax_ipq50xx/diy/package/firmware/ipq-wifi/src/board-cmcc_rax3000q.qcn6122
  14. BIN
      devices/qualcommax_ipq50xx/diy/package/firmware/ipq-wifi/src/board-jdcloud_re-cs-03.ipq5018
  15. BIN
      devices/qualcommax_ipq50xx/diy/package/firmware/ipq-wifi/src/board-jdcloud_re-cs-03.qcn6122
  16. 0 414
      devices/qualcommax_ipq50xx/diy/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-rax3000q.dts
  17. 0 440
      devices/qualcommax_ipq50xx/diy/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-re-cs-03.dts
  18. 0 249
      devices/qualcommax_ipq50xx/patches/diy.patch
  19. 24 0
      devices/qualcommax_ipq50xx/patches/fix.patch
  20. 0 26
      devices/qualcommax_ipq60xx/.config
  21. 7 4
      devices/qualcommax_ipq60xx/diy.sh
  22. 0 45
      devices/qualcommax_ipq60xx/patches/fix.patch
  23. 2 2
      devices/qualcommax_ipq60xx/settings.ini

+ 8 - 9
.github/workflows/Openwrt-AutoBuild.yml

@@ -304,9 +304,16 @@ jobs:
         Emoji=("🎉" "🤞" "✨" "🎁" "🎈" "🎄" "🎨" "💋" "🍓" "🍕" "🍉" "💐" "🌴" "🚀" "🛸" "🗽" "⛅" "🌈" "🔥" "⛄" "🐶" "🏅" "🦄" "🐤")
         echo "EMOJI=${Emoji[$[$RANDOM % ${#Emoji[@]}]]}" >> $GITHUB_ENV
 
+    - name: Upload firmware for artifact
+      uses: actions/upload-artifact@main
+      if: env.UPLOAD_FIRMWARE_FOR_ARTIFACT == 'true'
+      with:
+        name: ${{ env.VERSION }}_${{matrix.target}}
+        path: |
+          openwrt/bin/targets/
+
     - name: Deploy imagebuilder to server
       uses: easingthemes/ssh-deploy@main
-      continue-on-error: true
       if: env.SSH_PRIVATE_KEY && ! contains(github.event.action, 'noser')
       with:
         SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
@@ -317,14 +324,6 @@ jobs:
         REMOTE_USER: root
         TARGET: "/www/wwwroot/dl.openwrt.ai/releases/tmp/"
 
-    - name: Upload firmware for artifact
-      uses: actions/upload-artifact@main
-      if: env.UPLOAD_FIRMWARE_FOR_ARTIFACT == 'true'
-      with:
-        name: ${{ env.VERSION }}_${{matrix.target}}
-        path: |
-          openwrt/bin/targets/
-
     - name: Create release
       id: create_release
       if: env.REPO_TOKEN && env.UPLOAD_FIRMWARE_FOR_RELEASE == 'true'

+ 2 - 0
devices/common/.config

@@ -39,6 +39,8 @@ CONFIG_IPV6=y
 CONFIG_PACKAGE_luci-theme-bootstrap=y
 
 CONFIG_PACKAGE_procd-seccomp=n
+CONFIG_KERNEL_SECCOMP_FILTER=n
+CONFIG_KERNEL_SECCOMP=n
 
 # 其他需要安装的软件包:
 

+ 2 - 0
devices/common/diy.sh

@@ -87,3 +87,5 @@ sed -i "s/OpenWrt/Kwrt/g" package/base-files/files/bin/config_generate package/b
 
 sed -i -e "s/set \${s}.country='\${country || ''}'/set \${s}.country='\${country || \"CN\"}'/g" -e "s/set \${s}.disabled=.*/set \${s}.disabled='0'/" package/network/config/wifi-scripts/files/lib/wifi/mac80211.uc
 
+rm -rf package/feeds/packages/jool
+

+ 377 - 0
devices/common/patches/crontab.patch

@@ -0,0 +1,377 @@
+From 388238b9baf8375e5474167c987a4a8a3358b559 Mon Sep 17 00:00:00 2001
+From: Paul Donald <[email protected]>
+Date: Wed, 23 Apr 2025 00:03:25 +0200
+Subject: [PATCH] luci-mod-system: give crontab a helper page
+
+Reference: https://github.com/openwrt/luci/pull/7495
+
+Signed-off-by: Paul Donald <[email protected]>
+---
+ .../resources/view/system/crontabhelper.js    | 334 ++++++++++++++++++
+ .../share/luci/menu.d/luci-mod-system.json    |  14 +-
+ 2 files changed, 347 insertions(+), 1 deletion(-)
+ create mode 100644 feeds/luci/modules/luci-mod-system/htdocs/luci-static/resources/view/system/crontabhelper.js
+
+diff --git a/feeds/luci/modules/luci-mod-system/htdocs/luci-static/resources/view/system/crontabhelper.js b/feeds/luci/modules/luci-mod-system/htdocs/luci-static/resources/view/system/crontabhelper.js
+new file mode 100644
+index 000000000000..861d4d1f77a5
+--- /dev/null
++++ b/feeds/luci/modules/luci-mod-system/htdocs/luci-static/resources/view/system/crontabhelper.js
+@@ -0,0 +1,334 @@
++'use strict';
++'require view';
++'require fs';
++'require ui';
++
++var isReadonlyView = !L.hasViewPermission() || null;
++
++
++const yearly  = { minute: '@yearly',  command: '', comment: '', };
++const monthly = { minute: '@monthly', command: '', comment: '', };
++const weekly  = { minute: '@weekly',  command: '', comment: '', };
++const daily   = { minute: '@daily',   command: '', comment: '', };
++const hourly  = { minute: '@hourly',  command: '', comment: '', };
++const a_task  = { minute: '*', hour: '*', day: '*', month: '*', weekday: '*', command: '', comment: '', };
++const alias   = { minute: '@', hour: '*', day: '*', month: '*', weekday: '*', command: '', comment: '', };
++
++const width = 'width:100px;';
++const double_width = 'width:300px';
++const padding = 'padding:3px;';
++const centre = 'text-align:center;';
++
++return view.extend({
++	load() {
++		return L.resolveDefault(fs.read('/etc/crontabs/root'), '');
++	},
++
++	handleSave(ev) {
++		const tasks = Array.from(document.querySelectorAll('.crontab-row')).map(row => {
++			const getFieldValue = (fieldName) => {
++				const mode = row.querySelector(`.${fieldName}-mode`)?.value;
++
++				switch (mode) {
++				case 'custom':
++					const custom = row.querySelector(`.${fieldName}-custom`)?.value?.trim();
++					return custom;
++				case 'ignore':
++					return '*';
++				case 'interval':
++					const interval = row.querySelector(`.${fieldName}-interval`)?.value?.trim();
++					return interval ? `*/${interval}` : '*'; // Every Xth unit
++				case 'specific':
++					const specific = row.querySelector(`.${fieldName}-specific`)?.value?.trim();
++					return specific || '*'; // Specific units
++				}
++			};
++
++			const comment = row.querySelector('.comment')?.value?.trim();
++			const minute  = row.querySelector('.minute')?.value?.trim();
++
++			// if it's a # comment row, just stuff the comment and return
++			if (minute == comment)
++				return { iscomment: true, comment: comment };
++			else
++				return {
++					minute: getFieldValue('minute') || '*',
++					hour: getFieldValue('hour') || '*',
++					day: getFieldValue('day') || '*',
++					month: getFieldValue('month') || '*',
++					weekday: getFieldValue('weekday') || '*',
++					command: row.querySelector('.command')?.value?.trim(),
++					comment: comment ? `# ${comment}` : '',
++				};
++		});
++
++		const value = tasks.map(task => {
++			if (task.iscomment)
++				return `${task.comment}`;
++			else if (task.minute[0] !== '@')
++				return `${task.minute} ${task.hour} ${task.day} ${task.month} ${task.weekday} ${task.command} ${task.comment}`;
++			else
++				return `${task.minute} ${task.command} ${task.comment}`;
++		}).join('\n') + '\n';
++
++		return fs.write('/etc/crontabs/root', value).then(() => {
++			ui.addTimeLimitedNotification(null, E('p', _('Contents have been saved.')), 5000, 'info');
++			return fs.exec('/etc/init.d/cron', [ 'reload' ]);
++		}).catch(e => {
++			ui.addNotification(null, E('p', _('Unable to save contents: %s').format(e.message)));
++		});
++	},
++
++	render(crontab) {
++		const tasks = (crontab || '').split('\n').filter(line => line.trim()).map(line => {
++			if (line.startsWith('#'))
++				return {
++					// stash comment lines for saving later
++					minute:  line,
++					comment: line,
++				};
++			const parts = line.split(/\s+/);
++			const commentIndex = parts.findIndex(part => part.startsWith('#'));
++			// exclude the '#' character from comments existing in valid command rows:
++			if (commentIndex !== -1) parts[commentIndex] = parts[commentIndex].substring(1)?.trim();
++			const comment = commentIndex !== -1 ? parts.slice(commentIndex).join(' ') : '';
++
++			if(parts[0][0] == '@') {
++				const updatedTask = { ...alias };
++				updatedTask.minute = parts[0];
++				updatedTask.command = commentIndex !== -1 ? parts.slice(1, commentIndex).join(' ') : parts.slice(1).join(' ');
++				updatedTask.comment = comment;
++				return updatedTask;
++			}
++
++			return {
++				minute:  parts[0] || '',
++				hour:    parts[1] || '',
++				day:     parts[2] || '',
++				month:   parts[3] || '',
++				weekday: parts[4] || '',
++				command: commentIndex !== -1 ? parts.slice(5, commentIndex).join(' ') : parts.slice(5).join(' ') || '',
++				comment: comment || '',
++			};
++		});
++
++		return E([
++			E('h2', _('Scheduled Tasks')),
++			E('p', { 'class': 'cbi-section-descr' }, _('Define your scheduled tasks for root below.') + '<br/>' + 
++				_('CSV - Comma Separated Value(s)')),
++			E('a', { 'href': 'https://openwrt.org/docs/guide-user/base-system/cron', 'target':'_blank' }, _('Crontab help wiki')),
++			E('table', { 'class': 'table', }, [
++				E('thead', {}, [
++					E('tr', {}, [
++						E('th', {}, _('Minute / Alias', 'minute or crontab alias field')),
++						E('th', {}, _('Hour')),
++						E('th', {}, _('Day')),
++						E('th', {}, _('Month')),
++						E('th', {}, _('Weekday')),
++						E('th', {}, _('Command')),
++						E('th', {}, _('Comment')),
++						E('th', {}, _('Action'))
++					])
++				]),
++				E('tbody', { 'id': 'crontab-rows' }, this.renderTaskRows(tasks)),
++				E('hr', {}),
++				E('tfoot', {}, [
++					E('tr', {}, [
++						E('td', { 'colspan': 1, 'style': padding }, [
++							E('button', { 'class': 'btn', 'click': ui.createHandlerFn(this, 'addTask', alias   ) }, _('Add alias'))
++						]),
++						E('td', { 'colspan': 1, 'style': padding }, [
++							E('button', { 'class': 'btn', 'click': ui.createHandlerFn(this, 'addTask', yearly  ) }, _('Yearly task'))
++						]),
++						E('td', { 'colspan': 1, 'style': padding }, [
++							E('button', { 'class': 'btn', 'click': ui.createHandlerFn(this, 'addTask', monthly ) }, _('Monthly task'))
++						]),
++						E('td', { 'colspan': 1, 'style': padding }, [
++							E('button', { 'class': 'btn', 'click': ui.createHandlerFn(this, 'addTask', weekly  ) }, _('Weekly task'))
++						]),
++						E('td', { 'colspan': 1, 'style': padding }, [
++							E('button', { 'class': 'btn', 'click': ui.createHandlerFn(this, 'addTask', daily   ) }, _('Daily task'))
++						]),
++						E('td', { 'colspan': 1, 'style': padding }, [
++							E('button', { 'class': 'btn', 'click': ui.createHandlerFn(this, 'addTask', hourly  ) }, _('Hourly task'))
++						]),
++						E('td', { 'colspan': 1, 'style': padding }, [
++							E('button', { 'class': 'btn', 'click': ui.createHandlerFn(this, 'addTask') }, _('Add custom task'))
++						]),
++					])
++				])
++			])
++		]);
++	},
++
++	renderTaskRows(tasks) {
++		const rows = [];
++
++		tasks.forEach((task, index) => {
++			if (task?.minute.startsWith('#') && task?.comment){
++				rows.push(this.renderCommentRow(task));
++				return;
++			}
++			rows.push(E('tr', { 'class': 'crontab-hr' }, E('td', { 'colspan': 8 }, E('hr', { 'style': 'margin: 10px 0;' }))));
++			if (task.minute[0] == '@')
++				rows.push(this.renderAliasRow(task));
++			else
++				rows.push(this.renderTaskRow(task));
++		});
++
++		return rows;
++	},
++
++	renderAliasRow(task) {
++		return E('tr', { 'class': 'crontab-row', 'style': padding }, [
++					this.createTimeDropdown('minute', task.minute, 'Minute'),
++					E('td', { 'style': padding + centre }, _('-')), // Hour - empty
++					E('td', { 'style': padding + centre }, _('-')), // Day - empty
++					E('td', { 'style': padding + centre }, _('-')), // Month - empty
++					E('td', { 'style': padding + centre }, _('-')), // Weekday - empty
++					E('td', { 'style': padding + centre },
++						E('div', {}, [
++							E('label', {}, _('Command')),
++							E('input', { 'type': 'text', 'class': 'command', 'style': double_width, 'value': task.command, 'disabled': isReadonlyView }),
++						]),
++					),
++					E('td', { 'style': padding },
++						E('div', {}, [
++							E('label', {}, _('Comment')),
++							E('input', { 'type': 'text', 'class': 'comment', 'style': width, 'value': task.comment, 'disabled': isReadonlyView }),
++						]),
++					),
++					E('td', { 'style': padding }, [
++						E('button', { 'class': 'btn remove-task cbi-button-negative', 'click': ui.createHandlerFn(this, 'removeTask') }, _('Remove'))
++					])
++				]);
++	},
++
++	renderTaskRow(task) {
++		return E('tr', { 'class': 'crontab-row' }, [
++					this.createTimeDropdown('minute', task.minute, 'Minute', 0, 59),
++					this.createTimeDropdown('hour', task.hour, 'Hour', 0, 23),
++					this.createTimeDropdown('day', task.day, 'Day', 0, 31),
++					this.createTimeDropdown('month', task.month, 'Month', 0, 12),
++					this.createTimeDropdown('weekday', task.weekday, 'Weekday', 0, 6),
++					E('td', { 'style': padding }, E('input', { 'type': 'text', 'class': 'command', 'style': double_width, 'value': task.command, 'disabled': isReadonlyView })),
++					E('td', { 'style': padding }, E('input', { 'type': 'text', 'class': 'comment', 'style': width, 'value': task.comment, 'disabled': isReadonlyView })),
++					E('td', { 'style': padding }, [
++						E('button', { 'class': 'btn remove-task cbi-button-negative', 'click': ui.createHandlerFn(this, 'removeTask') }, _('Remove'))
++					])
++				]);
++	},
++
++	/* 
++	hide the comment rows in valid fields, but don't display them.
++	*/
++	renderCommentRow(task) {
++		// 
++		return E('tr', { 'class': 'crontab-row', 'style': 'display: none; ' }, [
++			E('td', { 'style': padding },
++				E('div', {}, [
++					E('label', {}, _('Minute')),
++					E('input', { 'type': 'text', 'class': 'minute', 'style': width, 'value': task.comment, 'disabled': isReadonlyView }),
++				]),
++			),
++			E('td', { 'style': padding },
++				E('div', {}, [
++					E('label', {}, _('Comment')),
++					E('input', { 'type': 'text', 'class': 'comment', 'style': width, 'value': task.comment, 'disabled': isReadonlyView }),
++				]),
++			),
++		]);
++	},
++
++	/* 
++	creates a block of entry fields customisable to the time interval type
++	*/
++	createTimeDropdown(fieldName, value, label, min, max) {
++		const mode = value.includes(',') || parseInt(value, 10) >= 0 || value.startsWith('@')
++			? (value.split(',').filter(v => v.startsWith('*/')).length > 1 || value.startsWith('@') ? 'custom' : 'specific')
++			: value.startsWith('*/')
++			? 'interval'
++			: 'ignore';
++
++		const intervalValue = mode === 'interval' ? value.substring(2) : '';
++		const specificValue = mode === 'specific' ? value : '';
++		const customValue = mode === 'custom' ? value : '';
++
++		return E('td', { 'style': padding }, [
++			E('div', { 'class': 'dropdown-container' }, [
++				E('select', { 
++					'class': `${fieldName}-mode`,
++					'style': width,
++					'change': ev => this.updateDropdownMode(ev, fieldName) 
++				}, [
++					E('option', { 'value': 'ignore', 'style': width,
++						...(mode === 'ignore' ? { 'selected': 'true' } : {})
++					}, _('-')),
++					E('option', { 'value': 'interval', 'style': width,
++						...(mode === 'interval' ? { 'selected': 'true' } : {}) 
++					}, _('Every Xth')),
++					E('option', { 'value': 'specific', 'style': width,
++						...(mode === 'specific' ? { 'selected': 'true' } : {}) 
++					}, _('Specific')),
++					E('option', { 'value': 'custom', 'style': width,
++						...(mode === 'custom' ? { 'selected': 'true' } : {}) 
++					}, _('Custom'))
++				]),
++				E('div', { 'class': `${fieldName}-input ignore-input`, 'style': mode === 'ignore' ? '' : 'display:none;' }, [
++					E('input', { 'type': 'text', 'class': fieldName, 'value': '*', 'style': mode === 'ignore' ? 'display:none;': width,
++					})
++				]),
++				E('div', { 'class': `${fieldName}-input interval-input`, 'style': mode === 'interval' ? width : 'display:none;' }, [
++					E('label', {}, _('Every')),
++					E('input', { 'type': 'number', 'min': min, 'max': max, 'class': `${fieldName}-interval`, 'value': intervalValue, 'style': width }),
++					E('span', {}, _(label.toLowerCase()))
++				]),
++				E('div', { 'class': `${fieldName}-input specific-input`, 'style': mode === 'specific' ? width : 'display:none;' }, [
++					E('label', {}, _('At')),
++					E('input', { 'type': 'text', 'class': `${fieldName}-specific`, 'value': specificValue, 'style': width, 'placeholder': '0,5,10,...' }),
++					E('span', {}, _(label.toLowerCase() + _('s (CSV)', 'pluralisation for hours, minutes, etc')))
++				]),
++				E('div', { 'class': `${fieldName}-input custom-input`, 'style': mode === 'custom' ? width : 'display:none;' }, [
++					E('label', {}, _('Value')),
++					E('input', { 'type': 'text', 'class': `${fieldName}-custom`, 'value': customValue, 'style': width })
++				]),
++			])
++		]);
++	},
++
++	updateDropdownMode(ev, fieldName) {
++		const dropdown = ev.target.closest('.dropdown-container');
++		const mode = ev.target.value;
++
++		dropdown.querySelectorAll(`.${fieldName}-input`).forEach(input => {
++			input.style.display = 'none';
++		});
++
++		dropdown.querySelector(`.${fieldName}-input.${mode}-input`).style.display = '';
++	},
++
++	addTask(param) {
++		const tbody = document.getElementById('crontab-rows');
++
++		let newTask
++		if (param?.type !== 'click') {
++			newTask = param;
++		} else {
++			newTask = a_task; 
++		}
++		const newRows = this.renderTaskRows([newTask]);
++		newRows.forEach(row => {
++			tbody.appendChild(row);
++		})
++	},
++
++	removeTask(ev) {
++		const row = ev.target.closest('.crontab-row');
++		const hr = row.previousElementSibling;
++		if (hr)	hr.remove();
++		if (row) row.remove();
++	},
++
++	handleSaveApply: null,
++	handleReset: null
++});
+diff --git a/feeds/luci/modules/luci-mod-system/root/usr/share/luci/menu.d/luci-mod-system.json b/feeds/luci/modules/luci-mod-system/root/usr/share/luci/menu.d/luci-mod-system.json
+index ebae989d0e00..b4eba7862444 100644
+--- a/feeds/luci/modules/luci-mod-system/root/usr/share/luci/menu.d/luci-mod-system.json
++++ b/feeds/luci/modules/luci-mod-system/root/usr/share/luci/menu.d/luci-mod-system.json
+@@ -98,6 +98,18 @@
+ 		}
+ 	},
+ 
++	"admin/system/crontabhelper": {
++		"title": "Scheduled Tasks Helper",
++		"order": 47,
++		"action": {
++			"type": "view",
++			"path": "system/crontabhelper"
++		},
++		"depends": {
++			"acl": [ "luci-mod-system-cron" ]
++		}
++	},
++
+ 	"admin/system/mounts": {
+ 		"title": "Mount Points",
+ 		"order": 50,

+ 19 - 0
devices/common/patches/luci-base.patch

@@ -288,3 +288,22 @@
  		network() {
  			return this.assert(this.apply('uciname') || this.apply('hostname') || this.apply('ip4addr') || this.apply('ip6addr'),
  				_('valid UCI identifier, hostname or IP address range'));
+
+--- a/package/feeds/luci/luci-base/root/usr/share/luci/menu.d/luci-base.json
++++ b/package/feeds/luci/luci-base/root/usr/share/luci/menu.d/luci-base.json
+@@ -50,6 +50,15 @@
+ 		}
+ 	},
+ 
++	"admin/nas": {
++		"title": "NAS",
++		"order": 60,
++		"action": {
++			"type": "firstchild",
++			"recurse": true
++		}
++	},
++
+ 	"admin/vpn": {
+ 		"title": "VPN",
+ 		"order": 70,

+ 29 - 2
devices/common/patches/luci-mod-system.patch

@@ -1,6 +1,24 @@
 --- a/package/feeds/luci/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js
 +++ b/package/feeds/luci/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js
-@@ -261,6 +261,7 @@ return view.extend({
+@@ -101,7 +101,7 @@ return view.extend({
+ 		/* Currently the sysupgrade rpc call will not return, hence no promise handling */
+ 		fs.exec('/sbin/firstboot', [ '-r', '-y' ]);
+ 
+-		ui.awaitReconnect('192.168.1.1', 'openwrt.lan');
++		ui.awaitReconnect('10.0.0.1', 'kwrt.lan');
+ 	},
+ 
+ 	handleRestore: function(ev) {
+@@ -163,7 +163,7 @@ return view.extend({
+ 					E('p', { 'class': 'spinning' }, _('The system is rebooting now. If the restored configuration changed the current LAN IP address, you might need to reconnect manually.'))
+ 				]);
+ 
+-				ui.awaitReconnect(window.location.host, '192.168.1.1', 'openwrt.lan');
++				ui.awaitReconnect(window.location.host, '10.0.0.1', 'kwrt.lan');
+ 			}, this))
+ 			.catch(function(e) { ui.addNotification(null, E('p', e.message)) })
+ 			.finally(function() { btn.firstChild.data = _('Upload archive...') });
+@@ -263,6 +263,7 @@ return view.extend({
  					body.push(E('p', {}, E('label', { 'class': 'btn' }, [
  						opts.backup_pkgs[0], ' ', _('Include in backup a list of current installed packages at /etc/backup/installed_packages.txt')
  					])));
@@ -8,7 +26,7 @@
  				};
  
  				var cntbtn = E('button', {
-@@ -302,6 +303,10 @@ return view.extend({
+@@ -304,6 +305,10 @@ return view.extend({
  				opts.keep[0].addEventListener('change', function(ev) {
  					opts.skip_orig[0].disabled = !ev.target.checked;
  					opts.backup_pkgs[0].disabled = !ev.target.checked;
@@ -19,3 +37,12 @@
  
  				});
  
+@@ -337,7 +342,7 @@ return view.extend({
+ 		if (opts['keep'][0].checked)
+ 			ui.awaitReconnect(window.location.host);
+ 		else
+-			ui.awaitReconnect('192.168.1.1', 'openwrt.lan');
++			ui.awaitReconnect('10.0.0.1', 'kwrt.lan');
+ 	},
+ 
+ 	handleBackupList: function(ev) {

+ 1 - 0
devices/mediatek_filogic/diy.sh

@@ -14,3 +14,4 @@ sed -i "s/-stock//g" package/boot/uboot-envtools/files/mediatek_filogic
 
 sed -i "s/openwrt-mediatek-filogic/kwrt-mediatek-filogic/g" target/linux/mediatek/image/filogic.mk
 sed -i "s/ fitblk / /g" target/linux/mediatek/image/filogic.mk
+

+ 1 - 1
devices/mediatek_filogic/diy/target/linux/mediatek/dts/mt7981b-cudy-tr3000-mod.dts

@@ -4,7 +4,7 @@
 #include "mt7981b-cudy-tr3000-v1.dts"
 
 / {
-	model = "Cudy TR3000 (U-Boot mod)";
+	model = "Cudy TR3000 v1 112M";
 	compatible = "cudy,tr3000-mod", "mediatek,mt7981";
 };
 

+ 20 - 0
devices/mediatek_filogic/diy/target/linux/mediatek/dts/mt7981b-cudy-tr3000-v2-mod.dts

@@ -0,0 +1,20 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
+/dts-v1/;
+#include "mt7981b-cudy-tr3000-v1.dts"
+
+/ {
+	model = "Cudy TR3000 v2 256MB";
+	compatible = "cudy,tr3000-v2-mod", "mediatek,mt7981";
+};
+
+&spi0 {
+	flash@0 {
+		partitions {
+			partition@5c0000 {
+				label = "ubi";
+				reg = <0x5c0000 0xe280000>;
+			};
+		};
+	};
+};

+ 17 - 2
devices/mediatek_filogic/patches/tr3000-mod.patch

@@ -1,13 +1,13 @@
 --- a/target/linux/mediatek/image/filogic.mk
 +++ b/target/linux/mediatek/image/filogic.mk
-@@ -633,6 +633,21 @@ define Device/cudy_re3000-v1
+@@ -633,6 +633,36 @@ define Device/cudy_re3000-v1
  endef
  TARGET_DEVICES += cudy_re3000-v1
  
 +define Device/cudy_tr3000-mod
 +  DEVICE_VENDOR := Cudy
 +  DEVICE_MODEL := TR3000
-+  DEVICE_VARIANT := 112M
++  DEVICE_VARIANT := v1 112M
 +  DEVICE_DTS := mt7981b-cudy-tr3000-mod
 +  DEVICE_DTS_DIR := ../dts
 +  UBINIZE_OPTS := -E 5
@@ -18,6 +18,21 @@
 +  DEVICE_PACKAGES := kmod-usb3 kmod-mt7915e kmod-mt7981-firmware mt7981-wo-firmware
 +endef
 +TARGET_DEVICES += cudy_tr3000-mod
++
++define Device/cudy_tr3000-v2-mod
++  DEVICE_VENDOR := Cudy
++  DEVICE_MODEL := TR3000
++  DEVICE_VARIANT := v2 256MB
++  DEVICE_DTS := mt7981b-cudy-tr3000-v2-mod
++  DEVICE_DTS_DIR := ../dts
++  UBINIZE_OPTS := -E 5
++  BLOCKSIZE := 128k
++  PAGESIZE := 2048
++  KERNEL_IN_UBI := 1
++  IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
++  DEVICE_PACKAGES := kmod-usb3 kmod-mt7915e kmod-mt7981-firmware mt7981-wo-firmware
++endef
++TARGET_DEVICES += cudy_tr3000-v2-mod
 +
  define Device/cudy_tr3000-v1
    DEVICE_VENDOR := Cudy

+ 10 - 6
devices/qualcommax_ipq50xx/diy.sh

@@ -4,12 +4,16 @@ shopt -s extglob
 
 SHELL_FOLDER=$(dirname $(readlink -f "$0"))
 
-rm -rf package/boot/uboot-envtools package/firmware/ipq-wifi package/firmware/ath11k-firmware target/linux/qualcommax target/linux/generic package/kernel/mac80211 package/kernel/qca-ssdk package/kernel/qca-nss-dp
+rm -rf package/boot package/kernel/qca* package/firmware/ipq-wifi package/firmware/ath11k-firmware target/linux/qualcommax target/linux/generic
 
-git_clone_path main https://github.com/openwrt/openwrt target/linux/qualcommax target/linux/generic package/boot/uboot-tools package/firmware/ipq-wifi package/firmware/ath11k-firmware package/kernel/mac80211 package/kernel/qca-ssdk package/kernel/qca-nss-dp
+git_clone_path master https://github.com/coolsnowwolf/lede target/linux/qualcommax target/linux/generic package/boot package/qca package/firmware/ipq-wifi package/firmware/ath11k-firmware
 
-wget -N https://github.com/openwrt/openwrt/raw/main/target/linux/generic/kernel-6.6 -P include/
+wget -N https://github.com/coolsnowwolf/lede/raw/master/include/kernel-6.6 -P include/
 
-git_clone_path master https://github.com/coolsnowwolf/lede mv target/linux/generic/hack-6.6
-rm -rf target/linux/generic/hack-6.6/{767-net-phy-realtek-add-led*,220-arm-gc_sections.patch}
-wget -N https://raw.githubusercontent.com/coolsnowwolf/lede/master/target/linux/generic/pending-6.6/613-netfilter_optional_tcp_window_check.patch -P target/linux/generic/pending-6.6/
+sed -i "s/wpad-openssl/wpad-basic-mbedtls/" target/linux/qualcommax/Makefile
+sed -i "/KERNEL_TESTING_PATCHVER/d" target/linux/qualcommax/Makefile
+
+sed -i "/ECM_INTERFACE_MAP_T_ENABLE/d"  package/qca/qca-nss-ecm/Makefile
+
+make defconfig
+sed -i "s/\(CONFIG_PACKAGE_kmod-qca.*\)=m/\1=n/g" .config

BIN
devices/qualcommax_ipq50xx/diy/package/firmware/ipq-wifi/src/board-cmcc_rax3000q.ipq5018


BIN
devices/qualcommax_ipq50xx/diy/package/firmware/ipq-wifi/src/board-cmcc_rax3000q.qcn6122


BIN
devices/qualcommax_ipq50xx/diy/package/firmware/ipq-wifi/src/board-jdcloud_re-cs-03.ipq5018


BIN
devices/qualcommax_ipq50xx/diy/package/firmware/ipq-wifi/src/board-jdcloud_re-cs-03.qcn6122


+ 0 - 414
devices/qualcommax_ipq50xx/diy/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-rax3000q.dts

@@ -1,414 +0,0 @@
-// SPDX-License-Identifier: (GPL-2.0+)
-
-/dts-v1/;
-#include "ipq5018.dtsi"
-#include "ipq5018-ess.dtsi"
-#include <dt-bindings/gpio/gpio.h>
-#include <dt-bindings/input/input.h>
-
-/ {
-	#address-cells = <0x2>;
-	#size-cells = <0x2>;
-	model = "CMCC RAX3000Q";
-	compatible = "cmcc,rax3000q", "qcom,ipq5018";
-	interrupt-parent = <&intc>;
-
-	aliases {
-		ethernet1 = &dp2;
-		label-mac-device = &dp2;
-		serial0 = &blsp1_uart1;
-		led-boot = &led_blue;
-		led-failsafe = &led_blue;
-		led-running = &led_blue;
-		led-upgrade = &led_white;
-	};
-
-	chosen {
-		stdout-path = "serial0:115200n8";
-		bootargs-append = " root=/dev/ubiblock0_1";
-	};
-
-	keys {
-		compatible = "gpio-keys";
-		pinctrl-0 = <&button_pins>;
-		pinctrl-names = "default";
-
-		reset {
-			label = "reset";
-			linux,code = <KEY_RESTART>;
-			gpios = <&tlmm 27 GPIO_ACTIVE_LOW>;
-		};
-	};
-
-	leds {
-		compatible = "gpio-leds";
-		pinctrl-0 = <&leds_pins>;
-		pinctrl-names = "default";
-
-		led_blue: status_blue {
-			label = "blue:status";
-			gpio = <&tlmm 24 GPIO_ACTIVE_HIGH>;
-		};
-
-		led_white: status_white {
-			label = "white:status";
-			gpio = <&tlmm 23 GPIO_ACTIVE_HIGH>;
-		};
-	};
-
-	reserved-memory {
-		tz_appps@4a400000 {
-			no-map;
-			reg = <0x0 0x4a400000 0x0 0x400000>;
-		};
-
-		q6_mem_regions: q6_mem_regions@4b000000 {
-			no-map;
-			reg = <0x0 0x4b000000 0x0 0x3000000>;
-		};
-	};
-};
-
-&sleep_clk {
-	clock-frequency = <32000>;
-};
-
-&xo_board_clk {
-	clock-frequency = <24000000>;
-};
-
-&blsp1_uart1 {
-	pinctrl-0 = <&blsp0_uart_pins>;
-	pinctrl-names = "default";
-	status = "okay";
-};
-
-&crypto {
-	status = "okay";
-};
-
-&cryptobam {
-	status = "okay";
-};
-
-&dp1 {
-	status = "okay";
-};
-
-&dp2 {
-	phy-mode = "sgmii";
-	status = "okay";
-
-	fixed-link {
-		speed = <1000>;
-		full-duplex;
-	};
-};
-
-&ge_phy {
-	status = "okay";
-};
-
-&mdio0 {
-	status = "okay";
-};
-
-&mdio1 {
-	pinctrl-0 = <&mdio1_pins>;
-	pinctrl-names = "default";
-	reset-gpios = <&tlmm 39 GPIO_ACTIVE_LOW>;
-	status = "okay";
-
-	// QCA8337 Phy0 -> WAN
-	qca8337_0: ethernet-phy@0 {
-		reg = <0>;
-	};
-	// QCA8337 Phy1 -> LAN1
-	qca8337_1: ethernet-phy@1 {
-		reg = <1>;
-	};
-	// QCA8337 Phy3 -> LAN2
-	qca8337_2: ethernet-phy@2 {
-		reg = <2>;
-	};
-	// QCA8337 Phy2 -> IPQ5018 GE Phy
-	qca8337_3: ethernet-phy@3 {
-		reg = <3>;
-	};
-	// QCA8337 Phy4 -> LAN3
-	qca8337_4: ethernet-phy@4 {
-		reg = <4>;
-	};
-	// QCA8337 switch
-	switch0: ethernet-switch@17 {
-		compatible = "qca,qca8337";
-		reg = <17>;
-		#address-cells = <1>;
-		#size-cells = <0>;
-		switch_cpu_bmp = <0x48>;  // CPU port bitmap: 3 6
-		switch_lan_bmp = <0x34>;  // LAN port bitmap: 2 4 5
-		switch_wan_bmp = <0x02>;  // WAN port bitmap: 1
-
-		ports {
-			#address-cells = <1>;
-			#size-cells = <0>;
-
-			switch0cpu: port@0 {
-				reg = <0>;
-				label = "cpu";
-				phy-mode = "sgmii";
-				ethernet = <&dp2>;
-				qca,sgmii-enable-pll;
-				fixed-link {
-					speed = <1000>;
-					full-duplex;
-				};
-			};
-			// QCA8337 Phy0 -> WAN
-			port@1 {
-				reg = <1>;
-				label = "wan";
-				phy-handle = <&qca8337_0>;
-				port_id = <1>;
-				phy_address = <0>;
-			};
-
-			// QCA8337 Phy1 -> LAN1
-			port@2 {
-				reg = <2>;
-				label = "lan1";
-				phy-handle = <&qca8337_1>;
-				port_id = <2>;
-				phy_address = <1>;
-			};
-			// QCA8337 Phy3 -> LAN2
-			port@3 {
-				reg = <3>;
-				label = "lan2";
-				phy-handle = <&qca8337_2>;
-				port_id = <3>;
-				phy_address = <2>;
-			};
-			// QCA8337 Phy4 -> LAN3
-			port@5 {
-				reg = <5>;
-				label = "lan3";
-				phy-handle = <&qca8337_4>;
-				port_id = <5>;
-				phy_address = <4>;
-			};
-		};
-	};
-};
-
-&prng {
-	status = "okay";
-};
-
-&q6v5_wcss {
-	status = "okay";
-	memory-region = <&q6_mem_regions>;
-	firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt",
-					"ath11k/IPQ5018/hw1.0/m3_fw.mdt",
-					"ath11k/qcn6122/hw1.0/m3_fw.mdt";
-
-	boot-args =
-			</*       type: */ 0x1 /* PCIE0 */
-		     /*     length: */ 4
-		     /*      PD id: */ 3
-		     /* reset GPIO: */ 15
-		     /*   reserved: */ 0 0>;
-
-	// IPQ5018
-	q6_wcss_pd1: pd-1 {
-		firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt";
-		resets =
-			<&gcc GCC_WCSSAON_RESET>,
-			<&gcc GCC_WCSS_BCR>,
-			<&gcc GCC_CE_BCR>;
-		reset-names =
-			"wcss_aon_reset",
-			"wcss_reset",
-			"ce_reset";
-		clocks =
-			<&gcc GCC_WCSS_AHB_S_CLK>,
-			<&gcc GCC_WCSS_ACMT_CLK>,
-			<&gcc GCC_WCSS_AXI_M_CLK>;
-		clock-names =
-			"gcc_wcss_ahb_s_clk",
-			"gcc_wcss_acmt_clk",
-			"gcc_wcss_axi_m_clk";
-
-		interrupts-extended =
-			<&wcss_smp2p_in 8 0>,
-			<&wcss_smp2p_in 9 0>,
-			<&wcss_smp2p_in 12 0>,
-			<&wcss_smp2p_in 11 0>;
-		interrupt-names =
-			"fatal",
-			"ready",
-			"spawn-ack",
-			"stop-ack";
-		qcom,smem-states =
-			<&wcss_smp2p_out 8>,
-			<&wcss_smp2p_out 9>,
-			<&wcss_smp2p_out 10>;
-		qcom,smem-state-names =
-			"shutdown",
-			"stop",
-			"spawn";
-	};
-
-	// QCN6102 5G
-	q6_wcss_pd3: pd-3 {
-		firmware-name = "ath11k/IPQ5018/hw1.0/q6_fw.mdt";
-		interrupts-extended =
-			<&wcss_smp2p_in 24 0>,
-			<&wcss_smp2p_in 25 0>,
-			<&wcss_smp2p_in 28 0>,
-			<&wcss_smp2p_in 27 0>;
-		interrupt-names =
-			"fatal",
-			"ready",
-			"spawn-ack",
-			"stop-ack";
-		qcom,smem-states =
-			<&wcss_smp2p_out 24>,
-			<&wcss_smp2p_out 25>,
-			<&wcss_smp2p_out 26>;
-		qcom,smem-state-names =
-			"shutdown",
-			"stop",
-			"spawn";
-	};
-};
-
-&qpic_bam {
-	status = "okay";
-};
-
-&qpic_nand {
-	pinctrl-0 = <&qpic_pins>;
-	pinctrl-names = "default";
-	status = "okay";
-
-	nand@0 {
-		compatible = "spi-nand";
-		#address-cells = <1>;
-		#size-cells = <1>;
-		reg = <0>;
-
-		nand-ecc-engine = <&qpic_nand>;
-		nand-ecc-strength = <4>;
-		nand-ecc-step-size = <512>;
-		nand-bus-width = <8>;
-
-		partitions {
-			compatible = "qcom,smem-part";
-		};
-	};
-};
-
-&switch {
-	switch_mac_mode = <MAC_MODE_SGMII_CHANNEL0>;
-	status = "okay";
-
-	qcom,port_phyinfo {
-		// MAC0 -> GE Phy -> QCA8337 Phy2
-		port@0 {
-			port_id = <1>;
-			mdiobus = <&mdio0>;
-			phy_address = <7>;
-			phy_dac = <0x10 0x10>;
-		};
-		// MAC1 ---SGMII---> QCA8337 SerDes
-		port@1 {
-			port_id = <2>;
-			forced-speed = <1000>;
-			forced-duplex = <1>;
-		};
-	};
-};
-
-&tlmm {
-	blsp0_uart_pins: uart_pins {
-		blsp0_uart_rx_tx {
-			pins = "gpio20", "gpio21";
-			function = "blsp0_uart0";
-			bias-disable;
-		};
-	};
-
-	button_pins: button_pins {
-		mux {
-			pins = "gpio27";
-			function = "gpio";
-			drive-strength = <8>;
-			bias-pull-up;
-		};
-	};
-
-	leds_pins: leds_pins {
-		mux {
-			pins = "gpio23", "gpio24";
-			function = "gpio";
-			drive-strength = <8>;
-			bias-pull-down;
-		};
-	};
-
-	mdio1_pins: mdio-state {
-		mdc-pins {
-			pins = "gpio36";
-			function = "mdc";
-			drive-strength = <8>;
-			bias-pull-up;
-		};
-		mdio-pins {
-			pins = "gpio37";
-			function = "mdio";
-			drive-strength = <8>;
-			bias-pull-up;
-		};
-	};
-
-	qpic_pins: qpic-state {
-		clock-pins {
-			pins = "gpio9";
-			function = "qspi_clk";
-			drive-strength = <8>;
-			bias-disable;
-		};
-		cs-pins {
-			pins = "gpio8";
-			function = "qspi_cs";
-			drive-strength = <8>;
-			bias-disable;
-		};
-		data-pins {
-			pins = "gpio4", "gpio5", "gpio6", "gpio7";
-			function = "qspi_data";
-			drive-strength = <8>;
-			bias-disable;
-		};
-	};
-};
-
-&wifi0 {
-	qcom,rproc = <&q6_wcss_pd1>;
-	qcom,userpd-subsys-name = "q6v5_wcss_userpd1";
-	qcom,ath11k-calibration-variant = "CMCC-RAX3000Q";
-	qcom,ath11k-fw-memory-mode = <2>;
-	qcom,bdf-addr = <0x4c400000>;
-	status = "okay";
-};
-
-&wifi1 {
-	qcom,rproc = <&q6_wcss_pd3>;
-	qcom,userpd-subsys-name = "q6v5_wcss_userpd3";
-	qcom,ath11k-calibration-variant = "CMCC-RAX3000Q";
-	qcom,ath11k-fw-memory-mode = <2>;
-	qcom,bdf-addr = <0x4d100000>;
-	qcom,m3-dump-addr = <0x4df00000>;
-	status = "okay";
-};

+ 0 - 440
devices/qualcommax_ipq50xx/diy/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-re-cs-03.dts

@@ -1,440 +0,0 @@
-// SPDX-License-Identifier: (GPL-2.0+)
-
-/dts-v1/;
-#include "ipq5018.dtsi"
-#include "ipq5018-ess.dtsi"
-#include <dt-bindings/gpio/gpio.h>
-#include <dt-bindings/input/input.h>
-/ {
-	model = "JDCloud RE-CS-03";
-	compatible = "jdcloud,re-cs-03", "qcom,ipq5018";
-
-	interrupt-parent = <&intc>;
-	
-	aliases {
-		sdhc1 = &sdhc_1;
-		serial0 = &blsp1_uart1;
-		serial1 = &blsp1_uart2;
-		
-		ethernet0 = &dp1;
-		ethernet1 = &dp2;
-		label-mac-device = &dp2;
-		
-		led-boot = &led_status_blue;
-		led-failsafe = &led_status_red;
-		led-running = &led_status_green;
-		led-upgrade = &led_status_red;
-	};
-	chosen {
-		stdout-path = "serial0:115200n8";
-	};
-	
-	leds {
-		compatible = "gpio-leds";
-		pinctrl-0 = <&leds_pins>;
-		pinctrl-names = "default";
-
-		led_status_blue: status-blue {
-			label = "blue:status";
-			gpio = <&tlmm 31 GPIO_ACTIVE_HIGH>;
-		};
-
-		led_status_green: status-green {
-			label = "green:status";
-			gpio = <&tlmm 32 GPIO_ACTIVE_HIGH>;
-		};
-
-		led_status_red: status-red {
-			label = "red:status";
-			gpio = <&tlmm 33 GPIO_ACTIVE_HIGH>;
-		};
-	};
-	
-	keys {
-		compatible = "gpio-keys";
-		pinctrl-0 = <&button_pins>;
-		pinctrl-names = "default";
-
-		reset {
-			label = "reset";
-			linux,code = <KEY_RESTART>;
-			gpios = <&tlmm 25 GPIO_ACTIVE_LOW>;
-			linux,input-type = <1>;
-			debounce-interval = <60>;
-		};
-
-		wps {
-			label = "wps";
-			linux,code = <KEY_WPS_BUTTON>;
-			gpios = <&tlmm 38 GPIO_ACTIVE_LOW>;
-			linux,input-type = <1>;
-			debounce-interval = <60>;
-		};
-	};
-
-	reserved-memory {
-		tz_appps@4a400000 {
-			no-map;
-			reg = <0x0 0x4a400000 0x0 0x400000>;
-		};
-		
-		q6_mem_regions: q6_mem_regions@4b000000 {
-			no-map;
-			reg = <0x0 0x4b000000 0x0 0x3000000>;
-		};
-	};
-};
-&switch {
-	status = "okay";
-	switch_mac_mode = <MAC_MODE_SGMII_CHANNEL0>;
-	qcom,port_phyinfo {
-		// MAC0 -> GE Phy -> QCA8337 Phy2
-		port@0 {
-			port_id = <1>;
-			mdiobus = <&mdio0>;
-			phy_address = <7>;
-			phy_dac = <0x10 0x10>;
-			// status = "disabled";
-		};
-		// MAC1 ---SGMII---> QCA8337 SerDes
-		port@1 {
-			port_id = <2>;
-			forced-speed = <1000>;
-			forced-duplex = <1>;
-		};
-	};
-};
-// MAC0 -> GE Phy
-&dp1 {
-	status = "okay";
-};
-// MAC1 ---SGMII---> QCA8337 SerDes
-&dp2 {
-	status = "okay";
-	phy-mode = "sgmii";
-	fixed-link {
-		speed = <1000>;
-		full-duplex;
-	};
-};
-&mdio0 {
-	status = "okay";
-};
-// IPQ5018 GE Phy -> QCA8337 Phy1
-&ge_phy {
-	status = "okay";
-};
-&mdio1 {
-	status = "okay";
-	pinctrl-0 = <&mdio1_pins>;
-	pinctrl-names = "default";
-	reset-gpios = <&tlmm 39 GPIO_ACTIVE_LOW>;
-	// QCA8337 Phy0 -> LAN3
-	qca8337_0: ethernet-phy@0 {
-		reg = <0>;
-	};
-	// QCA8337 Phy1 -> LAN2
-	qca8337_1: ethernet-phy@1 {
-		reg = <1>;
-	};
-	// QCA8337 Phy3 -> LAN1
-	qca8337_2: ethernet-phy@2 {
-		reg = <2>;
-	};
-	// QCA8337 Phy2 -> IPQ5018 GE Phy
-	qca8337_3: ethernet-phy@3 {
-		reg = <3>;
-	};
-	// QCA8337 Phy2 -> IPQ5018 GE Phy
-	qca8337_4: ethernet-phy@4 {
-		reg = <4>;
-	};
-
-	// QCA8337 switch
-	switch0: ethernet-switch@17 {
-		compatible = "qca,qca8337";
-		reg = <17>;
-		#address-cells = <1>;
-		#size-cells = <0>;
-		switch_cpu_bmp = <0x40>;  /* cpu port bitmap */
-		switch_lan_bmp = <0x1e>; /* lan port bitmap */
-		switch_wan_bmp = <0x0>;  /* wan port bitmap */
-		ports {
-			#address-cells = <1>;
-			#size-cells = <0>;
-			
-			switch0cpu: port@0 {
-				reg = <0>;
-				label = "cpu";
-				phy-mode = "sgmii";
-				ethernet = <&dp2>;
-				qca,sgmii-enable-pll;
-				fixed-link {
-					speed = <1000>;
-					full-duplex;
-				};
-			};
-			// QCA8337 Phy1 -> LAN3
-			port@1 {
-				reg = <1>;
-				label = "lan3";
-				phy-handle = <&qca8337_0>;
-				port_id = <1>;
-				phy_address = <0>;
-			};
-			
-			// QCA8337 Phy2 -> LAN2
-			port@2 {
-				reg = <2>;
-				label = "lan2";
-				phy-handle = <&qca8337_1>;
-				port_id = <2>;
-				phy_address = <1>;
-			};
-			// QCA8337 Phy3 -> LAN1
-			port@3 {
-				reg = <3>;
-				label = "lan1";
-				phy-handle = <&qca8337_2>;
-				port_id = <3>;
-				phy_address = <2>;
-				
-			};
-			// QCA8337 Phy4 -> WAN
-			port@4 {
-				reg = <4>;
-				label = "wan";
-				phy-handle = <&qca8337_3>;
-				port_id = <4>;
-				phy_address = <3>;
-				
-			};
-		};
-	};
-};
-&sleep_clk {
-	clock-frequency = <32000>;
-};
-&xo_board_clk {
-	clock-frequency = <24000000>;
-};
-&blsp1_uart1 {
-	status = "okay";
-	pinctrl-0 = <&blsp_uart0_pins>;
-	pinctrl-names = "default";
-};
-&crypto {
-	status = "okay";
-};
-&cryptobam {
-	status = "okay";
-};
-&qpic_bam {
-	status = "okay";
-};
-
-&sdhc_1 {
-	status = "okay";
-
-	pinctrl-0 = <&emmc_pins>;
-	pinctrl-names = "default";
-	
-	/delete-property/ mmc-hs400-1_8v;
-	mmc-hs200-1_8v;
-	mmc-ddr-1_8v;
-};
-
-&tlmm {
-
-	mdio1_pins: mdio1-pins {
-		mdio1_mdc {
-			pins = "gpio36";
-			function = "mdc";
-			drive-strength = <8>;
-			bias-pull-up;
-		};
-
-		mdio1_mdio {
-			pins = "gpio37";
-			function = "mdio";
-			drive-strength = <8>;
-			bias-pull-up;
-		};
-	};
-	
-	leds_pins: leds-pins {
-		mux {
-			pins = "gpio31", "gpio32", "gpio33";
-			function = "gpio";
-			drive-strength = <8>;
-			bias-pull-down;
-			output-low;
-		};
-	};
-
-	button_pins: button-pins {
-		mux {
-			pins = "gpio25", "gpio38";
-			function = "gpio";
-			drive-strength = <8>;
-			bias-pull-up;
-		};
-	};
-	
-	blsp_uart0_pins: blsp_uart0_pins {
-		pins =
-			"gpio20", // RX
-			"gpio21"; // TX
-		function = "blsp0_uart0";
-		drive-strength = <8>;
-		bias-disable;
-	};
-
-		emmc_pins: emmc-pins {
-		emmc_clk {
-			pins = "gpio9";
-			function = "sdc1_clk";
-			drive-strength = <8>;
-			bias-disable;
-		};
-
-		emmc_cmd {
-			pins = "gpio8";
-			function = "sdc1_cmd";
-			drive-strength = <8>;
-			bias-pull-up;
-		};
-
-		emmc_data_0 {
-			pins = "gpio7";
-			function = "sdc10";
-			drive-strength = <0x08>;
-			bias-disable;
-		};
-
-		emmc_data_1 {
-			pins = "gpio6";
-			function = "sdc11";
-			drive-strength = <0x08>;
-			bias-disable;
-		};
-
-		emmc_data_2 {
-			pins = "gpio5";
-			function = "sdc12";
-			drive-strength = <0x08>;
-			bias-disable;
-		};
-
-		emmc_data_3 {
-			pins = "gpio4";
-			function = "sdc13";
-			drive-strength = <0x08>;
-			bias-disable;
-		};
-	};
-};
-
-&tsens {
-	status = "disabled";
-};
-
-&q6v5_wcss {
-	status = "okay";
-	memory-region = <&q6_mem_regions>;
-	firmware-name = "IPQ5018/hw1.0/q6_fw.mdt",
-					"IPQ5018/hw1.0/m3_fw.mdt",
-					"QCN6122/hw1.0/m3_fw.mdt";
-
-
-//	boot-args = 
-//			</*       type: */ 0x1 /* PCIE0 */
-//		     /*     length: */ 4
-//		     /*      PD id: */ 3
-//		     /* reset GPIO: */ 15
-//		     /*   reserved: */ 0 0>;
-	
-	// IPQ5018
-	q6_wcss_pd1: pd-1 {
-		firmware-name = "IPQ5018/hw1.0/q6_fw.mdt";
-		resets =
-			<&gcc GCC_WCSSAON_RESET>,
-			<&gcc GCC_WCSS_BCR>,
-			<&gcc GCC_CE_BCR>;
-		reset-names =
-			"wcss_aon_reset",
-			"wcss_reset",
-			"ce_reset";
-		clocks =
-			<&gcc GCC_WCSS_AHB_S_CLK>,
-			<&gcc GCC_WCSS_ACMT_CLK>,
-			<&gcc GCC_WCSS_AXI_M_CLK>;
-		clock-names =
-			"gcc_wcss_ahb_s_clk",
-			"gcc_wcss_acmt_clk",
-			"gcc_wcss_axi_m_clk";
-
-		interrupts-extended =
-			<&wcss_smp2p_in 8 0>,
-			<&wcss_smp2p_in 9 0>,
-			<&wcss_smp2p_in 12 0>,
-			<&wcss_smp2p_in 11 0>;
-		interrupt-names =
-			"fatal",
-			"ready",
-			"spawn-ack",
-			"stop-ack";
-		qcom,smem-states =
-			<&wcss_smp2p_out 8>,
-			<&wcss_smp2p_out 9>,
-			<&wcss_smp2p_out 10>;
-		qcom,smem-state-names =
-			"shutdown",
-			"stop",
-			"spawn";
-		status = "okay";
-	};
-
-	// QCN6102 5G
-	q6_wcss_pd2: pd-2 {
-		firmware-name = "IPQ5018/hw1.0/q6_fw.mdt";
-		interrupts-extended =
-			<&wcss_smp2p_in 24 0>,
-			<&wcss_smp2p_in 25 0>,
-			<&wcss_smp2p_in 28 0>,
-			<&wcss_smp2p_in 27 0>;
-		interrupt-names =
-			"fatal",
-			"ready",
-			"spawn-ack",
-			"stop-ack";
-		qcom,smem-states =
-			<&wcss_smp2p_out 24>,
-			<&wcss_smp2p_out 25>,
-			<&wcss_smp2p_out 26>;
-		qcom,smem-state-names =
-			"shutdown",
-			"stop",
-			"spawn";
-
-		status = "okay";
-	};
-};
-&wifi0 {
-	// IPQ5018
-	qcom,rproc = <&q6_wcss_pd1>;
-	qcom,userpd-subsys-name = "q6v5_wcss_userpd1";
-	qcom,ath11k-calibration-variant = "JDC-RE-CS-03";
-	qcom,ath11k-fw-memory-mode = <1>;
-	qcom,bdf-addr = <0x4c400000>;
-	status = "okay";
-};
-&wifi1 {
-	qcom,rproc = <&q6_wcss_pd2>;
-	qcom,userpd-subsys-name = "q6v5_wcss_userpd2";
-	qcom,ath11k-calibration-variant = "JDC-RE-CS-03";
-	qcom,ath11k-fw-memory-mode = <1>;
-	qcom,bdf-addr = <0x4d100000>;
-	qcom,m3-dump-addr = <0x4df00000>;
-	status = "okay";
-};

+ 0 - 249
devices/qualcommax_ipq50xx/patches/diy.patch

@@ -1,249 +0,0 @@
---- a/include/image-commands.mk
-+++ b/include/image-commands.mk
-@@ -502,6 +502,34 @@ define Build/kernel-bin
- 	cp $< $@
- endef
- 
-+define Build/gl-qsdk-factory
-+	$(eval GL_NAME := $(call param_get_default,type,$(1),$(DEVICE_NAME)))
-+	$(eval GL_IMGK := $(KDIR_TMP)/$(DEVICE_IMG_PREFIX)-squashfs-factory.img)
-+	$(eval GL_ITS := $(KDIR_TMP)/$(GL_NAME).its)
-+	$(eval GL_UBI := "ubi")
-+
-+	$(CP) $(BOOT_SCRIPT) $(KDIR_TMP)/
-+	$(shell mv $(GL_IMGK) $(GL_IMGK).tmp)
-+
-+	sed -i "s/rootfs_size/`wc -c $(GL_IMGK) | \
-+	cut -d " " -f 1 | xargs printf "0x%x"`/g" $(KDIR_TMP)/$(BOOT_SCRIPT);
-+
-+	$(TOPDIR)/scripts/mkits-qsdk-ipq-image.sh \
-+		$(GL_ITS) \
-+		$(GL_UBI) \
-+		$(GL_IMGK) \
-+		$(BOOT_SCRIPT)
-+
-+	PATH=$(LINUX_DIR)/scripts/dtc:$(PATH) mkimage -f \
-+		$(GL_ITS) \
-+		$(GL_IMGK)
-+
-+	$(RM) \
-+		$(GL_ITS) \
-+		$(GL_IMGK).tmp \
-+		$(KDIR_TMP)/$(notdir $(BOOT_SCRIPT))
-+endef
-+
- define Build/linksys-image
- 	let \
- 		size="$$(stat -c%s $@)" \
-
---- a/target/linux/qualcommax/image/ipq50xx.mk
-+++ b/target/linux/qualcommax/image/ipq50xx.mk
-@@ -41,6 +41,33 @@ define Device/linksys_mx5500
- endef
- TARGET_DEVICES += linksys_mx5500
- 
-+define Device/cmcc_rax3000q
-+  $(call Device/FitImage)
-+  $(call Device/UbiFit)
-+  SOC := ipq5018
-+  DEVICE_VENDOR := CMCC
-+  DEVICE_MODEL := RAX3000Q
-+  BLOCKSIZE := 128k
-+  PAGESIZE := 2048
-+  DEVICE_DTS_CONFIG := [email protected]
-+  DEVICE_PACKAGES := ath11k-firmware-qcn6122 ipq-wifi-cmcc_rax3000q
-+endef
-+TARGET_DEVICES += cmcc_rax3000q
-+
-+define Device/jdcloud_re-cs-03
-+ 	$(call Device/FitImage)
-+ 	$(call Device/EmmcImage)
-+ 	DEVICE_VENDOR := JDCloud
-+ 	DEVICE_MODEL := AX3000
-+ 	BLOCKSIZE := 128k
-+ 	KERNEL_SIZE := 6144k
-+ 	SOC := ipq5018
-+ 	DEVICE_DTS_CONFIG := [email protected]
-+ 	DEVICE_PACKAGES := ipq-wifi-jdcloud_re-cs-03
-+ 	IMAGE/factory.bin := append-kernel | pad-to $$(KERNEL_SIZE) | append-rootfs | append-metadata
-+ endef
-+ TARGET_DEVICES += jdcloud_re-cs-03
-+
- define Device/linksys_spnmx56
- 	$(call Device/linksys_ipq50xx_mx_base)
- 	DEVICE_MODEL := SPNMX56
-
---- a/target/linux/qualcommax/ipq50xx/base-files/etc/board.d/02_network
-+++ b/target/linux/qualcommax/ipq50xx/base-files/etc/board.d/02_network
-@@ -13,6 +13,8 @@ ipq50xx_setup_interfaces()
- 	linksys,mr5500)
- 		ucidef_set_interfaces_lan_wan "lan1 lan2 lan3 lan4" "wan"
- 		;;
-+	cmcc,rax3000q|\
-+	jdcloud,re-cs-03|\
- 	linksys,mx2000|\
- 	linksys,mx5500|\
- 	linksys,spnmx56)
-
---- a/target/linux/qualcommax/ipq50xx/base-files/lib/upgrade/platform.sh
-+++ b/target/linux/qualcommax/ipq50xx/base-files/lib/upgrade/platform.sh
-@@ -74,6 +74,11 @@ platform_do_upgrade() {
- 	glinet,gl-b3000)
- 		glinet_do_upgrade "$1"
- 		;;
-+	jdcloud,re-cs-03)
-+		CI_KERNPART="0:HLOS"
-+		CI_ROOTPART="rootfs"
-+		emmc_do_upgrade "$1"
-+		;;
- 	linksys,mr5500|\
- 	linksys,mx2000|\
- 	linksys,mx5500|\
-@@ -87,3 +92,13 @@ platform_do_upgrade() {
- 		;;
- 	esac
- }
-+
-+platform_copy_config() {
-+	case "$(board_name)" in
-+	jdcloud,re-cs-03)
-+		emmc_copy_config
-+		;;
-+	esac
-+	return 0;
-+}
-+
-
---- a/target/linux/qualcommax/ipq50xx/base-files/etc/hotplug.d/firmware/11-ath11k-caldata
-+++ b/target/linux/qualcommax/ipq50xx/base-files/etc/hotplug.d/firmware/11-ath11k-caldata
-@@ -15,11 +15,15 @@ case "$FIRMWARE" in
- 		ath11k_patch_mac $wlan_mac 0
- 		ath11k_set_macflag
- 		;;
--	glinet,gl-b3000)
-+	glinet,gl-b3000|\
-+	cmcc,rax3000q)
- 		caldata_extract "0:art" 0x1000 0x20000
- 		ath11k_patch_mac $(macaddr_add $(get_mac_label_dt) 3) 0
- 		ath11k_set_macflag
- 		;;
-+	jdcloud,re-cs-03)
-+		caldata_extract_mmc "0:ART" 0x1000 0x20000
-+		;;
- 	linksys,mr5500|\
- 	linksys,mx2000|\
- 	linksys,mx5500|\
-@@ -40,11 +44,15 @@ case "$FIRMWARE" in
- 		ath11k_patch_mac $wlan_mac 0
- 		ath11k_set_macflag
- 		;;
--	glinet,gl-b3000)
-+	glinet,gl-b3000|\
-+	cmcc,rax3000q)
- 		caldata_extract "0:art" 0x26800 0x20000
- 		ath11k_patch_mac $(macaddr_add $(get_mac_label_dt) 4) 0
- 		ath11k_set_macflag
- 		;;
-+	jdcloud,re-cs-03)
-+		caldata_extract_mmc "0:ART" 0x26800 0x20000
-+		;;
- 	linksys,mx2000)
- 		caldata_extract "0:ART" 0x26800 0x20000
- 		label_mac=$(mtd_get_mac_ascii devinfo hw_mac_addr)
-
---- a/package/firmware/ipq-wifi/Makefile
-+++ b/package/firmware/ipq-wifi/Makefile
-@@ -33,6 +33,7 @@ ALLWIFIBOARDS:= \
- 	asus_rt-ax89x \
- 	buffalo_wxr-5950ax12 \
- 	cambiumnetworks_xe34 \
-+	cmcc_rax3000q \
- 	cmcc_rm2-6 \
- 	compex_wpq873 \
- 	dynalink_dl-wrx36 \
-@@ -41,6 +42,7 @@ ALLWIFIBOARDS:= \
- 	glinet_gl-ax1800 \
- 	glinet_gl-axt1800 \
- 	glinet_gl-b3000 \
-+	jdcloud_re-cs-03 \
- 	linksys_homewrk \
- 	linksys_mr5500 \
- 	linksys_mr7350 \
-@@ -183,6 +185,7 @@ $(eval $(call generate-ipq-wifi-package,arcadyan_aw1000,Arcadyan AW1000))
- $(eval $(call generate-ipq-wifi-package,asus_rt-ax89x,Asus RT-AX89X))
- $(eval $(call generate-ipq-wifi-package,buffalo_wxr-5950ax12,Buffalo WXR-5950AX12))
- $(eval $(call generate-ipq-wifi-package,cambiumnetworks_xe34,Cambium Networks XE3-4))
-+$(eval $(call generate-ipq-wifi-package,cmcc_rax3000q,CMCC RAX3000Q))
- $(eval $(call generate-ipq-wifi-package,cmcc_rm2-6,CMCC RM2-6))
- $(eval $(call generate-ipq-wifi-package,compex_wpq873,Compex WPQ-873))
- $(eval $(call generate-ipq-wifi-package,dynalink_dl-wrx36,Dynalink DL-WRX36))
-@@ -191,6 +194,7 @@ $(eval $(call generate-ipq-wifi-package,edimax_cax1800,Edimax CAX1800))
- $(eval $(call generate-ipq-wifi-package,glinet_gl-ax1800,GL.iNet GL-AX1800))
- $(eval $(call generate-ipq-wifi-package,glinet_gl-axt1800,GL.iNet GL-AXT1800))
- $(eval $(call generate-ipq-wifi-package,glinet_gl-b3000,GL.iNet GL-B3000))
-+$(eval $(call generate-ipq-wifi-package,jdcloud_re-cs-03,JDCloud RE-CS-03))
- $(eval $(call generate-ipq-wifi-package,linksys_homewrk,Linksys HomeWRK))
- $(eval $(call generate-ipq-wifi-package,linksys_mr5500,Linksys MR5500))
- $(eval $(call generate-ipq-wifi-package,linksys_mr7350,Linksys MR7350))
-
---- a/scripts/mkits-qsdk-ipq-image.sh
-+++ b/scripts/mkits-qsdk-ipq-image.sh
-@@ -15,16 +15,19 @@
- #
- 
- usage() {
--	echo "Usage: `basename $0` output img0_name img0_file [[img1_name img1_file] ...]"
-+	echo "Usage: `basename $0` output [[device].bootscript] img0_name img0_file [[img1_name img1_file] ...]"
- 	exit 1
- }
- 
- # We need at least 3 arguments
--[ "$#" -lt 3 ] && usage
-+[ "$#" -lt 3 ] && usage || node_type="firmware"
- 
- # Target output file
- OUTPUT="$1"; shift
- 
-+# check for bootscript
-+[ "${1##*.}" = "bootscript" ] && has_script=true && node_type="script"
-+
- # Create a default, fully populated DTS file
- echo "\
- /dts-v1/;
-@@ -35,17 +38,30 @@ echo "\
- 
- 	images {" > ${OUTPUT}
- 
--while [ -n "$1" -a -n "$2" ]; do
--	[ -f "$2" ] || usage
-+while [ -n "$1" -a -n "$2" ] || [ $has_script ]; do
-+	[ -f "$2" ] || [ $has_script ] && has_script= || usage
- 
--	name="$1"; shift
--	file="$1"; shift
-+	case "$node_type" in
-+	script)
-+		name="$node_type"
-+		file="$1"; shift
-+		desc="${file%.*} uboot ${file##*.}"
-+		type="$node_type"
-+		node_type="firmware"
-+	;;
-+	firmware)
-+		name="$1"; shift
-+		file="$1"; shift
-+		desc="$name"
-+		type="$node_type"
-+	;;
-+	esac
- 
- 	echo \
- "		${name} {
--			description = \"${name}\";
-+			description = \"${desc}\";
- 			data = /incbin/(\"${file}\");
--			type = \"Firmware\";
-+			type = \"${type}\";
- 			arch = \"ARM\";
- 			compression = \"none\";
- 			hash@1 {

+ 24 - 0
devices/qualcommax_ipq50xx/patches/fix.patch

@@ -0,0 +1,24 @@
+--- a/package/kernel/linux/modules/netdevices.mk
++++ b/package/kernel/linux/modules/netdevices.mk
+@@ -450,7 +450,7 @@ define KernelPackage/phy-realtek
+    KCONFIG:=CONFIG_REALTEK_PHY \
+     CONFIG_REALTEK_PHY_HWMON=y
+    DEPENDS:=+kmod-libphy +kmod-hwmon-core
+-   FILES:=$(LINUX_DIR)/drivers/net/phy/realtek/realtek.ko
++   FILES:=$(LINUX_DIR)/drivers/net/phy/realtek.ko
+    AUTOLOAD:=$(call AutoLoad,18,realtek,1)
+ endef
+
+--- a/package/kernel/linux/modules/netfilter.mk
++++ b/package/kernel/linux/modules/netfilter.mk
+@@ -330,7 +330,7 @@ define KernelPackage/ipt-ipopt
+   KCONFIG:=$(KCONFIG_IPT_IPOPT)
+   FILES:=$(foreach mod,$(IPT_IPOPT-m),$(LINUX_DIR)/net/$(mod).ko)
+   AUTOLOAD:=$(call AutoProbe,$(notdir $(IPT_IPOPT-m)))
+-  $(call AddDepends/ipt)
++  $(call AddDepends/ipt,+kmod-nf-conntrack)
+ endef
+ 
+ define KernelPackage/ipt-ipopt/description
+
+ 

+ 0 - 26
devices/qualcommax_ipq60xx/.config

@@ -1,35 +1,9 @@
 CONFIG_TARGET_qualcommax=y
 CONFIG_TARGET_qualcommax_ipq60xx=y
 CONFIG_TARGET_MULTI_PROFILE=y
-CONFIG_TARGET_PER_DEVICE_ROOTFS=y
 CONFIG_TARGET_ALL_PROFILES=y
-CONFIG_TARGET_DEVICE_qualcommax_ipq60xx_DEVICE_8devices_mango-dvk=n
-CONFIG_NSS_FIRMWARE_VERSION_12_2=y
-CONFIG_ATH11K_MEM_PROFILE_512M=y
-CONFIG_IPQ_MEM_PROFILE_512=y
-CONFIG_KERNEL_IPQ_MEM_PROFILE=512
-CONFIG_NSS_DRV_IGS_ENABLE=y
-CONFIG_NSS_DRV_L2TP_ENABLE=y
-CONFIG_NSS_DRV_LAG_ENABLE=y
-CONFIG_NSS_DRV_MAPT_ENABLE=y
-CONFIG_NSS_DRV_PPTP_ENABLE=y
-CONFIG_NSS_DRV_PVXLAN_ENABLE=y
-CONFIG_NSS_DRV_SHAPER_ENABLE=y
-CONFIG_NSS_DRV_VXLAN_ENABLE=y
-CONFIG_PACKAGE_kmod-qca-mcs=y
-CONFIG_PACKAGE_kmod-qca-nss-drv-igs=y
-CONFIG_PACKAGE_kmod-qca-nss-drv-l2tpv2=y
-CONFIG_PACKAGE_kmod-qca-nss-drv-lag-mgr=y
-CONFIG_PACKAGE_kmod-qca-nss-drv-map-t=y
-CONFIG_PACKAGE_kmod-qca-nss-drv-pppoe=y
-CONFIG_PACKAGE_kmod-qca-nss-drv-pptp=y
-CONFIG_PACKAGE_kmod-qca-nss-drv-qdisc=y
-CONFIG_PACKAGE_kmod-qca-nss-macsec=y
 CONFIG_PACKAGE_kmod-qca-nss-drv-tunipip6=n
 CONFIG_PACKAGE_kmod-qca-nss-drv-mirror=n
-CONFIG_PACKAGE_kmod-qca-nss-drv-eogremgr=n
-CONFIG_PACKAGE_kmod-qca-nss-drv-gre=n
 CONFIG_PACKAGE_kmod-qca-nss-drv-match=n
 
-CONFIG_PACKAGE_perf=n
 

+ 7 - 4
devices/qualcommax_ipq60xx/diy.sh

@@ -7,18 +7,21 @@ SHELL_FOLDER=$(dirname $(readlink -f "$0"))
 wget -N https://raw.githubusercontent.com/openwrt/openwrt/refs/heads/openwrt-24.10/target/imagebuilder/files/Makefile -P target/imagebuilder/files/
 wget -N https://raw.githubusercontent.com/openwrt/openwrt/refs/heads/openwrt-24.10/package/base-files/files/sbin/sysupgrade -P package/base-files/files/sbin/
 wget -N https://github.com/openwrt/openwrt/raw/refs/heads/openwrt-24.10/package/network/config/firewall/Makefile -P package/network/config/firewall/
+wget -N https://github.com/openwrt/openwrt/raw/refs/heads/openwrt-24.10/package/network/services/dnsmasq/files/dnsmasq.init -P package/network/services/dnsmasq/files/
+wget -N https://github.com/openwrt/openwrt/raw/refs/heads/openwrt-24.10/package/network/config/wifi-scripts/files/lib/netifd/hostapd.sh -P package/network/config/wifi-scripts/files/lib/netifd/
+wget -N https://raw.githubusercontent.com/openwrt/openwrt/refs/heads/main/include/target.mk -P include/
 
 git clone https://github.com/LiBwrt/nss-packages nss-packages
 
 mv -f nss-packages/* package/feeds/kiddin9/
 
-rm -rf feeds/kiddin9/shortcut-fe feeds/kiddin9/fibocom_QMI_WWAN feeds/kiddin9/quectel_QMI_WWAN feeds/kiddin9/xtables-wgobfs feeds/kiddin9/fullconenat-nft/
+sed -i "/ECM_INTERFACE_RAWIP_ENABLE/d"  package/feeds/kiddin9/qca-nss-ecm/Makefile
 
-rm -rf package/feeds/packages/ovpn-dco package/feeds/packages/xr_usb_serial_common package/feeds/packages/openvswitch package/feeds/packages/xtables-addons
+rm -rf feeds/kiddin9/{fullconenat-nft,xtables-wgobfs,shortcut-fe} package/devel/perf package/feeds/packages/{libpfring,ovpn-dco,xr_usb_serial_common,openvswitch,xtables-addons}
 
-rm -rf package/libs/libnftnl/patches/001-libnftnl-add-fullcone-expression-support.patch package/network/config/firewall4/patches/001-firewall4-Add-fullcone-support.patch
+rm -rf target/linux/generic/hack-6.6/220-arm-gc_sections.patch
 
-sed -i 's/DEFAULT_PACKAGES +=/DEFAULT_PACKAGES += kmod-qca-mcs kmod-qca-nss-drv-igs kmod-qca-nss-drv-l2tpv2 kmod-qca-nss-drv-lag-mgr kmod-qca-nss-drv-map-t kmod-qca-nss-drv-pppoe kmod-qca-nss-drv-pptp kmod-qca-nss-drv-qdisc kmod-qca-nss-macsec/' target/linux/qualcommax/Makefile
+sed -i "s/wpad-openssl/wpad-basic-mbedtls/" target/linux/qualcommax/Makefile
 
 sed -i "s/LiBwrt/Kwrt/Ig" package/base-files/files/bin/config_generate package/base-files/image-config.in package/network/config/wifi-scripts/files/lib/wifi/mac80211.uc config/Config-images.in Config.in include/u-boot.mk include/version.mk || true
 

+ 0 - 45
devices/qualcommax_ipq60xx/patches/fix.patch

@@ -10,51 +10,6 @@
    $(call AddDepends/crypto)
  endef
 
---- a/package/feeds/kiddin9/qca-nss-ecm/Makefile
-+++ b/package/feeds/kiddin9/qca-nss-ecm/Makefile
-@@ -119,10 +119,6 @@ ifneq ($(CONFIG_PACKAGE_kmod-nat46),)
- ECM_MAKE_OPTS+=ECM_INTERFACE_MAP_T_ENABLE=y
- endif
- 
--ifneq ($(CONFIG_PACKAGE_kmod-ipsec),)
--ECM_MAKE_OPTS+=ECM_INTERFACE_IPSEC_ENABLE=y
--endif
--
- ifneq ($(CONFIG_PACKAGE_kmod-pppoe),)
- ECM_MAKE_OPTS+=ECM_INTERFACE_PPPOE_ENABLE=y \
- 			   ECM_INTERFACE_PPTP_ENABLE=y \
-
---- a/package/feeds/kiddin9/qca-nss-drv/Makefile
-+++ b/package/feeds/kiddin9/qca-nss-drv/Makefile
-@@ -186,10 +186,8 @@ ifndef CONFIG_NSS_DRV_IGS_ENABLE
- endif
- 
- ifndef CONFIG_NSS_DRV_IPSEC_ENABLE
--ifndef CONFIG_PACKAGE_kmod-ipsec
-    DRV_MAKE_OPTS += NSS_DRV_IPSEC_ENABLE=n
- endif
--endif
- 
- ifndef CONFIG_NSS_DRV_IPV4_REASM_ENABLE
-    DRV_MAKE_OPTS += NSS_DRV_IPV4_REASM_ENABLE=n
-
-new file mode 100644
-index 0000000000..2456fad245
---- /dev/null
-+++ b/target/linux/qualcommax/patches-6.12/9999-fix-net_dev_struct_check.patch
-@@ -0,0 +1,11 @@
-+--- a/net/core/dev.c
-++++ b/net/core/dev.c
-+@@ -12105,7 +12105,7 @@ static void __init net_dev_struct_check(void)
-+ #ifdef CONFIG_NET_XGRESS
-+ 	CACHELINE_ASSERT_GROUP_MEMBER(struct net_device, net_device_read_tx, tcx_egress);
-+ #endif
-+-	CACHELINE_ASSERT_GROUP_SIZE(struct net_device, net_device_read_tx, 160);
-++	CACHELINE_ASSERT_GROUP_SIZE(struct net_device, net_device_read_tx, 256);
-+ 
-+ 	/* TXRX read-mostly hotpath */
-+ 	CACHELINE_ASSERT_GROUP_MEMBER(struct net_device, net_device_read_txrx, lstats);
-
 --- a/target/linux/qualcommax/image/ipq60xx.mk
 +++ b/target/linux/qualcommax/image/ipq60xx.mk
 @@ -236,7 +236,7 @@ define Device/jdcloud_re-ss-01

+ 2 - 2
devices/qualcommax_ipq60xx/settings.ini

@@ -1,5 +1,5 @@
-REPO_URL="https://github.com/LiBwrt-op/openwrt-6.x"
-REPO_BRANCH="kernel-6.12"
+REPO_URL="https://github.com/LiBwrt/openwrt-6.x"
+REPO_BRANCH=""
 CONFIG_FILE=".config"
 DIY_SH="diy.sh"
 FREE_UP_DISK="false"