Merge remote-tracking branch 'upstream/master' into owrt
This commit is contained in:
commit
2e0332b7c8
@ -1,2 +1,2 @@
|
||||
LINUX_VERSION-6.6 = .79
|
||||
LINUX_KERNEL_HASH-6.6.79 = 07a6f904470da1a099aa1683e3025a999dd82f2438f78b006b80c6ae2e9dfe8d
|
||||
LINUX_VERSION-6.6 = .80
|
||||
LINUX_KERNEL_HASH-6.6.80 = 6cf911d01324f45c9dd2f44cf06f55bda0ecf383bc498f132a0c549768531327
|
||||
|
@ -23,6 +23,7 @@ ubootenv_add_mmc() {
|
||||
}
|
||||
|
||||
case "$board" in
|
||||
linksys,mr5500|\
|
||||
linksys,mx2000|\
|
||||
linksys,mx5500|\
|
||||
linksys,spnmx56)
|
||||
|
@ -39,6 +39,7 @@ ALLWIFIBOARDS:= \
|
||||
edgecore_eap102 \
|
||||
edimax_cax1800 \
|
||||
linksys_homewrk \
|
||||
linksys_mr5500 \
|
||||
linksys_mr7350 \
|
||||
linksys_mx2000 \
|
||||
linksys_mx4200 \
|
||||
@ -191,6 +192,7 @@ $(eval $(call generate-ipq-wifi-package,dynalink_dl-wrx36,Dynalink DL-WRX36))
|
||||
$(eval $(call generate-ipq-wifi-package,edgecore_eap102,Edgecore EAP102))
|
||||
$(eval $(call generate-ipq-wifi-package,edimax_cax1800,Edimax CAX1800))
|
||||
$(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))
|
||||
$(eval $(call generate-ipq-wifi-package,linksys_mx2000,Linksys MX2000))
|
||||
$(eval $(call generate-ipq-wifi-package,linksys_mx4200,Linksys MX4200))
|
||||
|
@ -10,9 +10,9 @@ include $(TOPDIR)/rules.mk
|
||||
PKG_NAME:=unetd
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL=$(PROJECT_GIT)/project/unetd.git
|
||||
PKG_SOURCE_DATE:=2025-01-29
|
||||
PKG_SOURCE_VERSION:=082b5482b97f20dc4745bc3d645e33b584cc28e4
|
||||
PKG_MIRROR_HASH:=090e7dab3b9a3358706dcee4f1889b7a1f0bdf535f2d6a0580f4160e23ccf9cb
|
||||
PKG_SOURCE_DATE:=2025-02-28
|
||||
PKG_SOURCE_VERSION:=edc8fdae463ad7ce9bfb876af0c653ab1da197df
|
||||
PKG_MIRROR_HASH:=2f0ce439b9e4815b3f20b9aaf4378e3aac114f429bb8bfd06739df118b3da9c8
|
||||
|
||||
PKG_LICENSE:=GPL-2.0
|
||||
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
|
||||
@ -32,7 +32,7 @@ define Package/unetd
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
TITLE:=WireGuard based VPN connection manager for OpenWrt
|
||||
DEPENDS:=+libubox +libubus +libblobmsg-json +libnl-tiny +kmod-wireguard +UNETD_VXLAN_SUPPORT:libbpf
|
||||
DEPENDS:=+libubox +libubus +libudebug +libblobmsg-json +libnl-tiny +kmod-wireguard +UNETD_VXLAN_SUPPORT:libbpf
|
||||
endef
|
||||
|
||||
define Package/unetd/config
|
||||
|
@ -151,7 +151,7 @@ function network_sign_data(ctx, name, network, pw_file, upload)
|
||||
return true;
|
||||
}
|
||||
|
||||
function network_create_uci(name, iface)
|
||||
function network_create_uci(model, name, iface)
|
||||
{
|
||||
let cur = uci.cursor();
|
||||
cur.set("network", name, "interface");
|
||||
@ -344,7 +344,7 @@ function network_create(ctx, argv, named) {
|
||||
if (!network_sign_data(ctx, named.network, network, pw_file))
|
||||
return;
|
||||
|
||||
network_create_uci(named.network, {
|
||||
network_create_uci(ctx.model, named.network, {
|
||||
proto: "unet",
|
||||
metric: named.metric,
|
||||
zone: named.zone,
|
||||
@ -580,7 +580,7 @@ function network_join_peer_update(model, ctx, msg)
|
||||
if (joinreq.connect)
|
||||
iface.connect = joinreq.connect;
|
||||
|
||||
network_create_uci(name, iface);
|
||||
network_create_uci(model, name, iface);
|
||||
|
||||
model.status_msg("Configuration added for interface " + name);
|
||||
|
||||
|
@ -311,7 +311,10 @@ function completion(count) {
|
||||
add = " ";
|
||||
cat = "";
|
||||
|
||||
add += sprintf("%-"+len+"s", entry.name);
|
||||
let name = entry.name;
|
||||
if (entry.incomplete)
|
||||
name += "...";
|
||||
add += sprintf("%-"+len+"s", name);
|
||||
str += add;
|
||||
x += length(add);
|
||||
|
||||
|
@ -355,7 +355,36 @@ function complete_arg_list(e, ctx, arg_info, args, base_args, named_args)
|
||||
for (let i = 0; i <= cur_idx; i++)
|
||||
val = shift(args);
|
||||
|
||||
return complete_param(e, ctx, cur, val, base_args, named_args);
|
||||
let ret = complete_param(e, ctx, cur, val, base_args, named_args);
|
||||
if (!cur.prefix_separator)
|
||||
return ret;
|
||||
|
||||
let prefix_len = length(val);
|
||||
let vals = [];
|
||||
let match_prefix;
|
||||
for (let cur_val in ret.value) {
|
||||
let cur_str = cur_val.name;
|
||||
let cur_suffix = substr(cur_str, prefix_len);
|
||||
let idx = index(cur_suffix, cur.prefix_separator);
|
||||
if (idx < 0) {
|
||||
push(vals, cur_val);
|
||||
continue;
|
||||
}
|
||||
|
||||
let cur_prefix = substr(cur_str, 0, prefix_len + idx + 1);
|
||||
if (cur_prefix == match_prefix)
|
||||
continue;
|
||||
|
||||
match_prefix = cur_prefix;
|
||||
push(vals, {
|
||||
...cur_val,
|
||||
name: cur_prefix,
|
||||
incomplete: true
|
||||
});
|
||||
}
|
||||
ret.value = vals;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
function handle_empty_param(entry, spec, name, argv, named_args)
|
||||
|
@ -122,7 +122,7 @@ function run_hook(name, ...args)
|
||||
return;
|
||||
|
||||
for (let hook in hooks)
|
||||
call(hook, this, {}, ...args);
|
||||
call(hook, this, this.scope, ...args);
|
||||
}
|
||||
|
||||
function init()
|
||||
|
@ -306,34 +306,42 @@ export function new(info, node)
|
||||
|
||||
export function object_destroy_call(ctx, argv, named)
|
||||
{
|
||||
let type_name = argv[0];
|
||||
if (!type_name)
|
||||
return ctx.invalid_argument();
|
||||
|
||||
let type_info, type_name;
|
||||
let info = this.object_info;
|
||||
let type_info = info.types[type_name];
|
||||
if (info.types) {
|
||||
type_name = shift(argv);
|
||||
if (!type_name)
|
||||
return ctx.invalid_argument();
|
||||
|
||||
type_info = info.types[type_name];
|
||||
} else {
|
||||
type_info = info.type;
|
||||
type_name = type_info.name;
|
||||
}
|
||||
if (!type_info)
|
||||
return ctx.invalid_argument();
|
||||
|
||||
let obj_name = type_info.object ?? type_name;
|
||||
|
||||
let name = argv[1];
|
||||
if (type_info.delete)
|
||||
return call(type_info.delete, info, ctx.model.scope, ctx, type, name);
|
||||
let name = shift(argv);
|
||||
if (type_info.delete) {
|
||||
if (!call(type_info.delete, info, ctx.model.scope, ctx, type, name))
|
||||
return;
|
||||
} else {
|
||||
let obj = ctx.data.object_edit[obj_name];
|
||||
if (!obj)
|
||||
return ctx.unknown_error();
|
||||
|
||||
let obj = ctx.data.object_edit[obj_name];
|
||||
if (!obj)
|
||||
return ctx.unknown_error();
|
||||
if (!obj[name])
|
||||
return ctx.not_found();
|
||||
|
||||
if (!obj[name])
|
||||
return ctx.not_found();
|
||||
|
||||
delete obj[name];
|
||||
delete obj[name];
|
||||
}
|
||||
|
||||
if (info.change_cb)
|
||||
call(info.change_cb, info, ctx.model.scope, ctx, argv);
|
||||
|
||||
return ctx.ok(`Deleted ${argv[0]} '${name}'`);
|
||||
return ctx.ok(`Deleted ${type_name} '${name}'`);
|
||||
};
|
||||
|
||||
const create_edit_param = {
|
||||
@ -361,34 +369,38 @@ export function object_create_params(node)
|
||||
|
||||
export function object_create_call(ctx, argv, named)
|
||||
{
|
||||
let type_name = argv[0];
|
||||
if (!type_name)
|
||||
return ctx.invalid_argument();
|
||||
|
||||
let type_info, type_name;
|
||||
let info = this.object_info;
|
||||
let type_info = info.types[type_name];
|
||||
if (info.types) {
|
||||
type_name = shift(argv);
|
||||
if (!type_name)
|
||||
return ctx.invalid_argument();
|
||||
|
||||
type_info = info.types[type_name];
|
||||
} else {
|
||||
type_info = info.type;
|
||||
type_name = type_info.name;
|
||||
}
|
||||
if (!type_info)
|
||||
return ctx.invalid_argument();
|
||||
|
||||
let obj_name = type_info.object ?? type_name;
|
||||
|
||||
let name = argv[1];
|
||||
let name = shift(argv);
|
||||
let obj, data;
|
||||
if (type_info.add) {
|
||||
data = call(type_info.add, info, ctx.model.scope, ctx, type, name);
|
||||
data = call(type_info.add, info, ctx.model.scope, ctx, type_name, name, named);
|
||||
if (!data)
|
||||
return;
|
||||
} else {
|
||||
data = {};
|
||||
}
|
||||
|
||||
ctx.data.object_edit[obj_name] ??= {};
|
||||
obj = ctx.data.object_edit[obj_name];
|
||||
|
||||
let entry = type_info.node.set;
|
||||
if (entry) {
|
||||
ctx.apply_defaults();
|
||||
let subctx = ctx.clone();
|
||||
subctx.data.name = name;
|
||||
subctx.data.edit = data;
|
||||
|
||||
try {
|
||||
@ -404,10 +416,17 @@ export function object_create_call(ctx, argv, named)
|
||||
}
|
||||
}
|
||||
|
||||
obj[name] = data;
|
||||
if (type_info.insert) {
|
||||
if (!call(type_info.insert, info, ctx.model.scope, ctx, type_name, name, data, named))
|
||||
return;
|
||||
} else {
|
||||
ctx.data.object_edit[obj_name] ??= {};
|
||||
obj = ctx.data.object_edit[obj_name];
|
||||
obj[name] = data;
|
||||
}
|
||||
|
||||
if (named.edit)
|
||||
ctx.select(type_name, name);
|
||||
ctx.select(info.type ? "edit" : type_name, name);
|
||||
|
||||
return ctx.ok(`Added ${type_name} '${name}'`);
|
||||
};
|
||||
@ -415,11 +434,19 @@ export function object_create_call(ctx, argv, named)
|
||||
function object_lookup(ctx, entry, type_name)
|
||||
{
|
||||
let info = entry.object_info;
|
||||
let type_info = info.types[type_name];
|
||||
let type_info = info.types ? info.types[type_name] : info.type;
|
||||
if (!type_info)
|
||||
return [];
|
||||
return {};
|
||||
|
||||
let obj_name = type_info.object ?? type_name;
|
||||
if (type_info.get_object) {
|
||||
let objs = call(type_info.get_object, info, ctx.model.scope, ctx, type_name);
|
||||
if (type(objs) != "object")
|
||||
objs = {};
|
||||
|
||||
return objs;
|
||||
}
|
||||
|
||||
let obj_name = type_info.object ?? (info.types ? type_name : type_info.name);
|
||||
|
||||
return ctx.data.object_edit[obj_name];
|
||||
}
|
||||
@ -435,18 +462,65 @@ function object_values(ctx, entry, type_name)
|
||||
|
||||
export function object_list_call(ctx, argv, named)
|
||||
{
|
||||
return ctx.list(argv[0] + " list", object_values(ctx, this, argv[0]));
|
||||
let info = this.object_info;
|
||||
let type_name = info.types ? argv[0] : info.type.name;
|
||||
return ctx.list(type_name + " list", object_values(ctx, this, type_name));
|
||||
};
|
||||
|
||||
function object_show_call_single(ctx, entry, type_info, type_name, name)
|
||||
{
|
||||
let obj = object_lookup(ctx, entry, type_name);
|
||||
if (!obj)
|
||||
return;
|
||||
|
||||
entry = obj[name];
|
||||
if (!entry)
|
||||
return;
|
||||
|
||||
let callctx = ctx.clone();
|
||||
callctx.data.name = name;
|
||||
callctx.data.edit = entry;
|
||||
|
||||
call(type_info.node.show.call, type_info.node.show, ctx.model.scope, callctx, [], {});
|
||||
if (callctx.result.ok)
|
||||
return callctx.result.data;
|
||||
}
|
||||
|
||||
export function object_show_call(ctx, argv, named)
|
||||
{
|
||||
let info = this.object_info;
|
||||
let type_name = info.type.name;
|
||||
|
||||
if (argv[0]) {
|
||||
let data = object_show_call_single(ctx, this, info.type, type_name, argv[0]);
|
||||
if (!data)
|
||||
return;
|
||||
return ctx.table("Values", data);
|
||||
}
|
||||
|
||||
let ret = {};
|
||||
for (let name in object_values(ctx, this, type_name)) {
|
||||
let data = object_show_call_single(ctx, this, info.type, type_name, name);
|
||||
if (!data)
|
||||
continue;
|
||||
ret[type_name + " " + name] = data;
|
||||
}
|
||||
|
||||
return ctx.multi_table(type_name + " list", ret);
|
||||
};
|
||||
|
||||
export function edit_create_destroy(info, node)
|
||||
{
|
||||
let type_arg = {
|
||||
name: "type",
|
||||
help: "Type",
|
||||
type: "enum",
|
||||
required: true,
|
||||
value: keys(info.types),
|
||||
};
|
||||
let type_arg = [];
|
||||
if (info.types)
|
||||
type_arg = [{
|
||||
name: "type",
|
||||
help: "Type",
|
||||
type: "enum",
|
||||
required: true,
|
||||
value: keys(info.types),
|
||||
}];
|
||||
|
||||
let name_arg = {
|
||||
name: "name",
|
||||
help: "Name",
|
||||
@ -460,31 +534,41 @@ export function edit_create_destroy(info, node)
|
||||
return object_values(ctx, this, argv[0]);
|
||||
}
|
||||
};
|
||||
let show_name_arg = {
|
||||
...delete_name_arg,
|
||||
required: false,
|
||||
};
|
||||
|
||||
let create_params = {};
|
||||
for (let name, val in info.types)
|
||||
create_params[name] = object_create_params(val.node);
|
||||
if (info.types) {
|
||||
for (let name, val in info.types)
|
||||
create_params[name] = object_create_params(val.node);
|
||||
} else {
|
||||
create_params = object_create_params(info.type.node);
|
||||
}
|
||||
|
||||
let types_info = " (" + join(", ", keys(info.types)) + ")";
|
||||
let types_info = info.types ? "(" + join(", ", keys(info.types)) + ")" : info.type.name;
|
||||
let cmds = {
|
||||
destroy: {
|
||||
object_info: info,
|
||||
help: "Delete object" + types_info,
|
||||
args: [ type_arg, delete_name_arg ],
|
||||
help: "Delete " + types_info,
|
||||
args: [ ...type_arg, delete_name_arg ],
|
||||
call: object_destroy_call,
|
||||
},
|
||||
list: {
|
||||
object_info: info,
|
||||
help: "List objects" + types_info,
|
||||
args: [ type_arg ],
|
||||
help: "List " + types_info,
|
||||
args: [ ...type_arg ],
|
||||
call: object_list_call,
|
||||
},
|
||||
create: {
|
||||
object_info: info,
|
||||
help: "Create object" + types_info,
|
||||
args: [ type_arg, name_arg ],
|
||||
help: "Create " + types_info,
|
||||
args: [ ...type_arg, name_arg ],
|
||||
type_params: create_params,
|
||||
named_args: function(ctx, argv) {
|
||||
if (!this.object_info.types)
|
||||
return this.type_params;
|
||||
if (!argv[0])
|
||||
return;
|
||||
return this.type_params[argv[0]];
|
||||
@ -493,8 +577,22 @@ export function edit_create_destroy(info, node)
|
||||
},
|
||||
};
|
||||
|
||||
for (let name, val in info.types) {
|
||||
cmds[name] = {
|
||||
|
||||
let info_types = info.types;
|
||||
if (!info_types) {
|
||||
info_types = {};
|
||||
info_types[info.type.name] = info.type;
|
||||
cmds.show = {
|
||||
object_info: info,
|
||||
help: "Show " + types_info,
|
||||
args: [ show_name_arg ],
|
||||
call: object_show_call,
|
||||
};
|
||||
}
|
||||
|
||||
for (let name, val in info_types) {
|
||||
let cmd_name = info.types ? name : "edit";
|
||||
cmds[cmd_name] = {
|
||||
object_name: name,
|
||||
object_info: info,
|
||||
help: "Edit " + name,
|
||||
@ -527,8 +625,6 @@ export function edit_create_destroy(info, node)
|
||||
return;
|
||||
}
|
||||
|
||||
let info = this.object_info;
|
||||
let type_info = info.types[this.object_name];
|
||||
return ctx.set(`${this.object_name} "${name}"`, {
|
||||
name,
|
||||
edit: entry,
|
||||
|
@ -52,6 +52,7 @@ enum vt100_escape {
|
||||
VT100_CURSOR_WORD_LEFT,
|
||||
VT100_CURSOR_RIGHT,
|
||||
VT100_CURSOR_WORD_RIGHT,
|
||||
VT100_CURSOR_POS,
|
||||
VT100_HOME,
|
||||
VT100_END,
|
||||
VT100_INSERT,
|
||||
@ -63,7 +64,7 @@ enum vt100_escape {
|
||||
};
|
||||
|
||||
ssize_t utf8_nsyms(const char *str, size_t len);
|
||||
enum vt100_escape vt100_esc_decode(const char *str);
|
||||
enum vt100_escape vt100_esc_decode(const char *str, uint32_t *data);
|
||||
|
||||
// helpers:
|
||||
void __vt100_csi_num(FILE *out, int num, char code);
|
||||
@ -191,4 +192,15 @@ static inline void vt100_ding(FILE *out)
|
||||
fflush(out);
|
||||
}
|
||||
|
||||
static inline void vt100_request_window_size(FILE *out)
|
||||
{
|
||||
fputs(
|
||||
"\e7" /* save cursor position */
|
||||
"\e[r" /* reset margins */
|
||||
"\e[999;999H" /* move cursor to bottom right */
|
||||
"\e[6n" /* report cursor position */
|
||||
"\e8", /* restore cursor position */
|
||||
out);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -101,13 +101,16 @@ update_window_size(struct uline_state *s, bool init)
|
||||
#ifdef TIOCGWINSZ
|
||||
struct winsize ws = {};
|
||||
|
||||
if (!ioctl(fileno(s->output), TIOCGWINSZ, &ws)) {
|
||||
if (ws.ws_col)
|
||||
cols = ws.ws_col;
|
||||
if (ws.ws_row)
|
||||
rows = ws.ws_row;
|
||||
}
|
||||
if (s->ioctl_winsize &&
|
||||
!ioctl(fileno(s->output), TIOCGWINSZ, &ws) &&
|
||||
ws.ws_col && ws.ws_row) {
|
||||
cols = ws.ws_col;
|
||||
rows = ws.ws_row;
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
s->ioctl_winsize = false;
|
||||
}
|
||||
|
||||
s->sigwinch_count = sigwinch_count;
|
||||
if (s->cols == cols && s->rows == rows)
|
||||
@ -534,7 +537,7 @@ move_word_right(struct uline_state *s, struct linebuf *line)
|
||||
}
|
||||
|
||||
static bool
|
||||
process_esc(struct uline_state *s, enum vt100_escape esc)
|
||||
process_esc(struct uline_state *s, enum vt100_escape esc, uint32_t data)
|
||||
{
|
||||
struct linebuf *line = &s->line;
|
||||
|
||||
@ -552,6 +555,15 @@ process_esc(struct uline_state *s, enum vt100_escape esc)
|
||||
return move_right(s, line);
|
||||
case VT100_CURSOR_WORD_RIGHT:
|
||||
return move_word_right(s, line);
|
||||
case VT100_CURSOR_POS:
|
||||
if (s->rows == (data & 0xffff) &&
|
||||
s->cols == data >> 16)
|
||||
return false;
|
||||
s->rows = data & 0xffff;
|
||||
s->cols = data >> 16;
|
||||
s->full_update = true;
|
||||
s->cb->event(s, EDITLINE_EV_WINDOW_CHANGED);
|
||||
return true;
|
||||
case VT100_HOME:
|
||||
line->pos = 0;
|
||||
return true;
|
||||
@ -682,9 +694,9 @@ process_ctrl(struct uline_state *s, char c)
|
||||
linebuf_reset(line);
|
||||
return true;
|
||||
case KEY_SOH:
|
||||
return process_esc(s, VT100_HOME);
|
||||
return process_esc(s, VT100_HOME, 0);
|
||||
case KEY_ENQ:
|
||||
return process_esc(s, VT100_END);
|
||||
return process_esc(s, VT100_END, 0);
|
||||
case KEY_VT:
|
||||
// TODO: kill
|
||||
return false;
|
||||
@ -718,18 +730,19 @@ static void
|
||||
process_char(struct uline_state *s, char c)
|
||||
{
|
||||
enum vt100_escape esc;
|
||||
uint32_t data = 0;
|
||||
|
||||
check_key_repeat(s, c);
|
||||
if (s->esc_idx >= 0) {
|
||||
s->esc_seq[s->esc_idx++] = c;
|
||||
s->esc_seq[s->esc_idx] = 0;
|
||||
esc = vt100_esc_decode(s->esc_seq);
|
||||
esc = vt100_esc_decode(s->esc_seq, &data);
|
||||
if (esc == VT100_INCOMPLETE &&
|
||||
s->esc_idx < (int)sizeof(s->esc_seq) - 1)
|
||||
return;
|
||||
|
||||
s->esc_idx = -1;
|
||||
if (!process_esc(s, esc))
|
||||
if (!process_esc(s, esc, data))
|
||||
return;
|
||||
} else if (s->cb->key_input &&
|
||||
!check_utf8(s, (unsigned char )c) &&
|
||||
@ -901,7 +914,7 @@ void uline_init(struct uline_state *s, const struct uline_cb *cb,
|
||||
s->utf8 = utf8;
|
||||
s->input = in_fd;
|
||||
s->output = out_stream;
|
||||
update_window_size(s, true);
|
||||
s->ioctl_winsize = true;
|
||||
reset_input_state(s);
|
||||
|
||||
#ifdef USE_SYSTEM_WCHAR
|
||||
@ -916,6 +929,12 @@ void uline_init(struct uline_state *s, const struct uline_cb *cb,
|
||||
s->has_termios = true;
|
||||
termios_set_native_mode(s);
|
||||
}
|
||||
|
||||
update_window_size(s, true);
|
||||
if (!s->ioctl_winsize) {
|
||||
vt100_request_window_size(s->output);
|
||||
fflush(s->output);
|
||||
}
|
||||
}
|
||||
|
||||
void uline_free(struct uline_state *s)
|
||||
|
@ -82,12 +82,13 @@ struct uline_state {
|
||||
unsigned int rows, cols;
|
||||
struct pos cursor_pos;
|
||||
struct pos end_pos;
|
||||
bool ioctl_winsize;
|
||||
bool full_update;
|
||||
bool stop;
|
||||
|
||||
bool utf8;
|
||||
|
||||
char esc_seq[8];
|
||||
char esc_seq[32];
|
||||
int8_t esc_idx;
|
||||
uint8_t utf8_cont;
|
||||
};
|
||||
|
@ -7,10 +7,10 @@
|
||||
#include "uline.h"
|
||||
#include "private.h"
|
||||
|
||||
enum vt100_escape vt100_esc_decode(const char *str)
|
||||
enum vt100_escape vt100_esc_decode(const char *str, uint32_t *data)
|
||||
{
|
||||
unsigned long code;
|
||||
size_t idx;
|
||||
unsigned long code, code2;
|
||||
char *err;
|
||||
|
||||
switch (*(str++)) {
|
||||
case 0:
|
||||
@ -45,23 +45,36 @@ enum vt100_escape vt100_esc_decode(const char *str)
|
||||
case '0' ... '4':
|
||||
case '6' ... '9':
|
||||
str--;
|
||||
idx = strspn(str, "0123456789");
|
||||
if (!str[idx])
|
||||
code = strtoul(str, &err, 10);
|
||||
switch (*err) {
|
||||
case 0:
|
||||
return VT100_INCOMPLETE;
|
||||
if (str[idx] != '~')
|
||||
return VT100_UNKNOWN;
|
||||
code = strtoul(str, NULL, 10);
|
||||
switch (code) {
|
||||
case 1:
|
||||
return VT100_HOME;
|
||||
case 3:
|
||||
return VT100_DELETE;
|
||||
case 4:
|
||||
return VT100_END;
|
||||
case 200:
|
||||
case 201:
|
||||
// paste start/end
|
||||
return VT100_IGNORE;
|
||||
case '~':
|
||||
switch (code) {
|
||||
case 1:
|
||||
return VT100_HOME;
|
||||
case 3:
|
||||
return VT100_DELETE;
|
||||
case 4:
|
||||
return VT100_END;
|
||||
case 200:
|
||||
case 201:
|
||||
// paste start/end
|
||||
return VT100_IGNORE;
|
||||
default:
|
||||
return VT100_UNKNOWN;
|
||||
}
|
||||
case ';':
|
||||
code2 = strtoul(err + 1, &err, 10);
|
||||
switch (*err) {
|
||||
case 0:
|
||||
return VT100_INCOMPLETE;
|
||||
case 'R':
|
||||
*data = (code2 << 16) | (code & 0xffff);
|
||||
return VT100_CURSOR_POS;
|
||||
default:
|
||||
return VT100_UNKNOWN;
|
||||
}
|
||||
default:
|
||||
return VT100_UNKNOWN;
|
||||
}
|
||||
|
@ -751,7 +751,7 @@ SVN-Revision: 35130
|
||||
EXPORT_SYMBOL(xfrm_parse_spi);
|
||||
--- a/net/ipv4/tcp_input.c
|
||||
+++ b/net/ipv4/tcp_input.c
|
||||
@@ -4262,14 +4262,16 @@ static bool tcp_parse_aligned_timestamp(
|
||||
@@ -4268,14 +4268,16 @@ static bool tcp_parse_aligned_timestamp(
|
||||
{
|
||||
const __be32 *ptr = (const __be32 *)(th + 1);
|
||||
|
||||
|
@ -89,7 +89,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
commit->event = kzalloc(sizeof(*commit->event),
|
||||
--- a/drivers/gpu/drm/i915/display/intel_display.c
|
||||
+++ b/drivers/gpu/drm/i915/display/intel_display.c
|
||||
@@ -7280,6 +7280,19 @@ int intel_atomic_commit(struct drm_devic
|
||||
@@ -7298,6 +7298,19 @@ int intel_atomic_commit(struct drm_devic
|
||||
state->base.legacy_cursor_update = false;
|
||||
}
|
||||
|
||||
|
@ -1196,7 +1196,7 @@ Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
|
||||
#include <net/tcx.h>
|
||||
|
||||
#define IS_FD_ARRAY(map) ((map)->map_type == BPF_MAP_TYPE_PERF_EVENT_ARRAY || \
|
||||
@@ -3827,6 +3828,8 @@ attach_type_to_prog_type(enum bpf_attach
|
||||
@@ -3828,6 +3829,8 @@ attach_type_to_prog_type(enum bpf_attach
|
||||
return BPF_PROG_TYPE_LSM;
|
||||
case BPF_TCX_INGRESS:
|
||||
case BPF_TCX_EGRESS:
|
||||
@ -1205,7 +1205,7 @@ Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
|
||||
return BPF_PROG_TYPE_SCHED_CLS;
|
||||
default:
|
||||
return BPF_PROG_TYPE_UNSPEC;
|
||||
@@ -3883,7 +3886,9 @@ static int bpf_prog_attach_check_attach_
|
||||
@@ -3884,7 +3887,9 @@ static int bpf_prog_attach_check_attach_
|
||||
return 0;
|
||||
case BPF_PROG_TYPE_SCHED_CLS:
|
||||
if (attach_type != BPF_TCX_INGRESS &&
|
||||
@ -1216,7 +1216,7 @@ Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
|
||||
return -EINVAL;
|
||||
return 0;
|
||||
default:
|
||||
@@ -3966,7 +3971,11 @@ static int bpf_prog_attach(const union b
|
||||
@@ -3967,7 +3972,11 @@ static int bpf_prog_attach(const union b
|
||||
ret = cgroup_bpf_prog_attach(attr, ptype, prog);
|
||||
break;
|
||||
case BPF_PROG_TYPE_SCHED_CLS:
|
||||
@ -1229,7 +1229,7 @@ Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
|
||||
break;
|
||||
default:
|
||||
ret = -EINVAL;
|
||||
@@ -4027,7 +4036,11 @@ static int bpf_prog_detach(const union b
|
||||
@@ -4028,7 +4037,11 @@ static int bpf_prog_detach(const union b
|
||||
ret = cgroup_bpf_prog_detach(attr, ptype);
|
||||
break;
|
||||
case BPF_PROG_TYPE_SCHED_CLS:
|
||||
@ -1242,7 +1242,7 @@ Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
|
||||
break;
|
||||
default:
|
||||
ret = -EINVAL;
|
||||
@@ -4089,6 +4102,9 @@ static int bpf_prog_query(const union bp
|
||||
@@ -4090,6 +4103,9 @@ static int bpf_prog_query(const union bp
|
||||
case BPF_TCX_INGRESS:
|
||||
case BPF_TCX_EGRESS:
|
||||
return tcx_prog_query(attr, uattr);
|
||||
@ -1252,7 +1252,7 @@ Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
@@ -5070,7 +5086,11 @@ static int link_create(union bpf_attr *a
|
||||
@@ -5071,7 +5087,11 @@ static int link_create(union bpf_attr *a
|
||||
ret = bpf_xdp_link_attach(attr, prog);
|
||||
break;
|
||||
case BPF_PROG_TYPE_SCHED_CLS:
|
||||
|
@ -32,7 +32,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -4483,13 +4483,7 @@ static inline void ____napi_schedule(str
|
||||
@@ -4514,13 +4514,7 @@ static inline void ____napi_schedule(str
|
||||
*/
|
||||
thread = READ_ONCE(napi->thread);
|
||||
if (thread) {
|
||||
@ -47,7 +47,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
wake_up_process(thread);
|
||||
return;
|
||||
}
|
||||
@@ -6645,8 +6639,6 @@ static int napi_poll(struct napi_struct
|
||||
@@ -6676,8 +6670,6 @@ static int napi_poll(struct napi_struct
|
||||
|
||||
static int napi_thread_wait(struct napi_struct *napi)
|
||||
{
|
||||
@ -56,7 +56,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
set_current_state(TASK_INTERRUPTIBLE);
|
||||
|
||||
while (!kthread_should_stop()) {
|
||||
@@ -6655,15 +6647,13 @@ static int napi_thread_wait(struct napi_
|
||||
@@ -6686,15 +6678,13 @@ static int napi_thread_wait(struct napi_
|
||||
* Testing SCHED bit is not enough because SCHED bit might be
|
||||
* set by some other busy poll thread or by napi_disable().
|
||||
*/
|
||||
|
@ -108,7 +108,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
static inline void rps_lock_irqsave(struct softnet_data *sd,
|
||||
unsigned long *flags)
|
||||
{
|
||||
@@ -4451,6 +4477,7 @@ EXPORT_SYMBOL(__dev_direct_xmit);
|
||||
@@ -4482,6 +4508,7 @@ EXPORT_SYMBOL(__dev_direct_xmit);
|
||||
/*************************************************************************
|
||||
* Receiver routines
|
||||
*************************************************************************/
|
||||
@ -116,7 +116,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
int netdev_max_backlog __read_mostly = 1000;
|
||||
EXPORT_SYMBOL(netdev_max_backlog);
|
||||
@@ -4483,12 +4510,16 @@ static inline void ____napi_schedule(str
|
||||
@@ -4514,12 +4541,16 @@ static inline void ____napi_schedule(str
|
||||
*/
|
||||
thread = READ_ONCE(napi->thread);
|
||||
if (thread) {
|
||||
@ -133,7 +133,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
list_add_tail(&napi->poll_list, &sd->poll_list);
|
||||
WRITE_ONCE(napi->list_owner, smp_processor_id());
|
||||
/* If not called from net_rx_action()
|
||||
@@ -4734,6 +4765,11 @@ static void napi_schedule_rps(struct sof
|
||||
@@ -4765,6 +4796,11 @@ static void napi_schedule_rps(struct sof
|
||||
|
||||
#ifdef CONFIG_RPS
|
||||
if (sd != mysd) {
|
||||
@ -145,7 +145,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
sd->rps_ipi_next = mysd->rps_ipi_list;
|
||||
mysd->rps_ipi_list = sd;
|
||||
|
||||
@@ -5957,7 +5993,7 @@ static void net_rps_action_and_irq_enabl
|
||||
@@ -5988,7 +6024,7 @@ static void net_rps_action_and_irq_enabl
|
||||
#ifdef CONFIG_RPS
|
||||
struct softnet_data *remsd = sd->rps_ipi_list;
|
||||
|
||||
@ -154,7 +154,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
sd->rps_ipi_list = NULL;
|
||||
|
||||
local_irq_enable();
|
||||
@@ -5972,7 +6008,7 @@ static void net_rps_action_and_irq_enabl
|
||||
@@ -6003,7 +6039,7 @@ static void net_rps_action_and_irq_enabl
|
||||
static bool sd_has_rps_ipi_waiting(struct softnet_data *sd)
|
||||
{
|
||||
#ifdef CONFIG_RPS
|
||||
@ -163,7 +163,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
@@ -6016,7 +6052,7 @@ static int process_backlog(struct napi_s
|
||||
@@ -6047,7 +6083,7 @@ static int process_backlog(struct napi_s
|
||||
* We can use a plain write instead of clear_bit(),
|
||||
* and we dont need an smp_mb() memory barrier.
|
||||
*/
|
||||
@ -172,7 +172,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
again = false;
|
||||
} else {
|
||||
skb_queue_splice_tail_init(&sd->input_pkt_queue,
|
||||
@@ -6682,43 +6718,48 @@ static void skb_defer_free_flush(struct
|
||||
@@ -6713,43 +6749,48 @@ static void skb_defer_free_flush(struct
|
||||
}
|
||||
}
|
||||
|
||||
@ -250,7 +250,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -11303,7 +11344,7 @@ static int dev_cpu_dead(unsigned int old
|
||||
@@ -11334,7 +11375,7 @@ static int dev_cpu_dead(unsigned int old
|
||||
|
||||
list_del_init(&napi->poll_list);
|
||||
if (napi->poll == process_backlog)
|
||||
@ -259,7 +259,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
else
|
||||
____napi_schedule(sd, napi);
|
||||
}
|
||||
@@ -11311,12 +11352,14 @@ static int dev_cpu_dead(unsigned int old
|
||||
@@ -11342,12 +11383,14 @@ static int dev_cpu_dead(unsigned int old
|
||||
raise_softirq_irqoff(NET_TX_SOFTIRQ);
|
||||
local_irq_enable();
|
||||
|
||||
@ -278,7 +278,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
/* Process offline CPU's input_pkt_queue */
|
||||
while ((skb = __skb_dequeue(&oldsd->process_queue))) {
|
||||
@@ -11579,6 +11622,38 @@ static struct pernet_operations __net_in
|
||||
@@ -11610,6 +11653,38 @@ static struct pernet_operations __net_in
|
||||
*
|
||||
*/
|
||||
|
||||
@ -317,7 +317,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
/*
|
||||
* This is called single threaded during boot, so no need
|
||||
* to take the rtnl semaphore.
|
||||
@@ -11629,7 +11704,10 @@ static int __init net_dev_init(void)
|
||||
@@ -11660,7 +11735,10 @@ static int __init net_dev_init(void)
|
||||
init_gro_hash(&sd->backlog);
|
||||
sd->backlog.poll = process_backlog;
|
||||
sd->backlog.weight = weight_p;
|
||||
|
@ -36,7 +36,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
--- a/include/linux/netdevice.h
|
||||
+++ b/include/linux/netdevice.h
|
||||
@@ -3306,6 +3306,7 @@ static inline void dev_xmit_recursion_de
|
||||
@@ -3308,6 +3308,7 @@ static inline void dev_xmit_recursion_de
|
||||
__this_cpu_dec(softnet_data.xmit.recursion);
|
||||
}
|
||||
|
||||
@ -82,7 +82,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
spin_unlock_irq(&sd->input_pkt_queue.lock);
|
||||
else if (!IS_ENABLED(CONFIG_PREEMPT_RT))
|
||||
local_irq_enable();
|
||||
@@ -4784,6 +4784,23 @@ static void napi_schedule_rps(struct sof
|
||||
@@ -4815,6 +4815,23 @@ static void napi_schedule_rps(struct sof
|
||||
__napi_schedule_irqoff(&mysd->backlog);
|
||||
}
|
||||
|
||||
|
@ -67,7 +67,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
{
|
||||
if (IS_ENABLED(CONFIG_RPS) || use_backlog_threads())
|
||||
spin_unlock_irq(&sd->input_pkt_queue.lock);
|
||||
@@ -4789,12 +4789,12 @@ void kick_defer_list_purge(struct softne
|
||||
@@ -4820,12 +4820,12 @@ void kick_defer_list_purge(struct softne
|
||||
unsigned long flags;
|
||||
|
||||
if (use_backlog_threads()) {
|
||||
@ -82,7 +82,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
} else if (!cmpxchg(&sd->defer_ipi_scheduled, 0, 1)) {
|
||||
smp_call_function_single_async(cpu, &sd->defer_csd);
|
||||
@@ -4856,7 +4856,7 @@ static int enqueue_to_backlog(struct sk_
|
||||
@@ -4887,7 +4887,7 @@ static int enqueue_to_backlog(struct sk_
|
||||
reason = SKB_DROP_REASON_NOT_SPECIFIED;
|
||||
sd = &per_cpu(softnet_data, cpu);
|
||||
|
||||
@ -91,7 +91,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
if (!netif_running(skb->dev))
|
||||
goto drop;
|
||||
qlen = skb_queue_len(&sd->input_pkt_queue);
|
||||
@@ -4865,7 +4865,7 @@ static int enqueue_to_backlog(struct sk_
|
||||
@@ -4896,7 +4896,7 @@ static int enqueue_to_backlog(struct sk_
|
||||
enqueue:
|
||||
__skb_queue_tail(&sd->input_pkt_queue, skb);
|
||||
input_queue_tail_incr_save(sd, qtail);
|
||||
@ -100,7 +100,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
return NET_RX_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -4880,7 +4880,7 @@ enqueue:
|
||||
@@ -4911,7 +4911,7 @@ enqueue:
|
||||
|
||||
drop:
|
||||
sd->dropped++;
|
||||
@ -109,7 +109,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
dev_core_stats_rx_dropped_inc(skb->dev);
|
||||
kfree_skb_reason(skb, reason);
|
||||
@@ -5911,7 +5911,7 @@ static void flush_backlog(struct work_st
|
||||
@@ -5942,7 +5942,7 @@ static void flush_backlog(struct work_st
|
||||
local_bh_disable();
|
||||
sd = this_cpu_ptr(&softnet_data);
|
||||
|
||||
@ -118,7 +118,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
skb_queue_walk_safe(&sd->input_pkt_queue, skb, tmp) {
|
||||
if (skb->dev->reg_state == NETREG_UNREGISTERING) {
|
||||
__skb_unlink(skb, &sd->input_pkt_queue);
|
||||
@@ -5919,7 +5919,7 @@ static void flush_backlog(struct work_st
|
||||
@@ -5950,7 +5950,7 @@ static void flush_backlog(struct work_st
|
||||
input_queue_head_incr(sd);
|
||||
}
|
||||
}
|
||||
@ -127,7 +127,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
skb_queue_walk_safe(&sd->process_queue, skb, tmp) {
|
||||
if (skb->dev->reg_state == NETREG_UNREGISTERING) {
|
||||
@@ -5937,14 +5937,14 @@ static bool flush_required(int cpu)
|
||||
@@ -5968,14 +5968,14 @@ static bool flush_required(int cpu)
|
||||
struct softnet_data *sd = &per_cpu(softnet_data, cpu);
|
||||
bool do_flush;
|
||||
|
||||
@ -144,7 +144,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
return do_flush;
|
||||
#endif
|
||||
@@ -6059,7 +6059,7 @@ static int process_backlog(struct napi_s
|
||||
@@ -6090,7 +6090,7 @@ static int process_backlog(struct napi_s
|
||||
|
||||
}
|
||||
|
||||
@ -153,7 +153,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
if (skb_queue_empty(&sd->input_pkt_queue)) {
|
||||
/*
|
||||
* Inline a custom version of __napi_complete().
|
||||
@@ -6075,7 +6075,7 @@ static int process_backlog(struct napi_s
|
||||
@@ -6106,7 +6106,7 @@ static int process_backlog(struct napi_s
|
||||
skb_queue_splice_tail_init(&sd->input_pkt_queue,
|
||||
&sd->process_queue);
|
||||
}
|
||||
|
@ -20,7 +20,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -9765,6 +9765,15 @@ static void netdev_sync_lower_features(s
|
||||
@@ -9796,6 +9796,15 @@ static void netdev_sync_lower_features(s
|
||||
}
|
||||
}
|
||||
|
||||
@ -36,7 +36,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
static netdev_features_t netdev_fix_features(struct net_device *dev,
|
||||
netdev_features_t features)
|
||||
{
|
||||
@@ -9846,15 +9855,9 @@ static netdev_features_t netdev_fix_feat
|
||||
@@ -9877,15 +9886,9 @@ static netdev_features_t netdev_fix_feat
|
||||
features &= ~NETIF_F_LRO;
|
||||
}
|
||||
|
||||
@ -55,7 +55,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
}
|
||||
|
||||
if ((features & NETIF_F_HW_TLS_RX) && !(features & NETIF_F_RXCSUM)) {
|
||||
@@ -9862,6 +9865,11 @@ static netdev_features_t netdev_fix_feat
|
||||
@@ -9893,6 +9896,11 @@ static netdev_features_t netdev_fix_feat
|
||||
features &= ~NETIF_F_HW_TLS_RX;
|
||||
}
|
||||
|
||||
|
@ -18,7 +18,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -10672,6 +10672,8 @@ struct rtnl_link_stats64 *dev_get_stats(
|
||||
@@ -10703,6 +10703,8 @@ struct rtnl_link_stats64 *dev_get_stats(
|
||||
ops->ndo_get_stats64(dev, storage);
|
||||
} else if (ops->ndo_get_stats) {
|
||||
netdev_stats_to_stats64(storage, ops->ndo_get_stats(dev));
|
||||
|
@ -37,7 +37,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
--- a/include/linux/netdevice.h
|
||||
+++ b/include/linux/netdevice.h
|
||||
@@ -4567,6 +4567,9 @@ static inline void netif_addr_unlock_bh(
|
||||
@@ -4569,6 +4569,9 @@ static inline void netif_addr_unlock_bh(
|
||||
|
||||
void ether_setup(struct net_device *dev);
|
||||
|
||||
@ -49,7 +49,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
unsigned char name_assign_type,
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -10359,25 +10359,12 @@ err_free_name:
|
||||
@@ -10390,25 +10390,12 @@ err_free_name:
|
||||
}
|
||||
EXPORT_SYMBOL(register_netdevice);
|
||||
|
||||
@ -79,7 +79,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
/* make sure we BUG if trying to hit standard
|
||||
* register/unregister code path
|
||||
*/
|
||||
@@ -10397,12 +10384,32 @@ int init_dummy_netdev(struct net_device
|
||||
@@ -10428,12 +10415,32 @@ int init_dummy_netdev(struct net_device
|
||||
* because users of this 'device' dont need to change
|
||||
* its refcount.
|
||||
*/
|
||||
@ -113,7 +113,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
/**
|
||||
* register_netdev - register a network device
|
||||
* @dev: device to register
|
||||
@@ -10996,6 +11003,19 @@ void free_netdev(struct net_device *dev)
|
||||
@@ -11027,6 +11034,19 @@ void free_netdev(struct net_device *dev)
|
||||
EXPORT_SYMBOL(free_netdev);
|
||||
|
||||
/**
|
||||
|
@ -85,7 +85,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
/**
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -6612,7 +6612,7 @@ static int __napi_poll(struct napi_struc
|
||||
@@ -6643,7 +6643,7 @@ static int __napi_poll(struct napi_struc
|
||||
* accidentally calling ->poll() when NAPI is not scheduled.
|
||||
*/
|
||||
work = 0;
|
||||
|
@ -48,7 +48,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
mtd->nvmem = nvmem_register(&config);
|
||||
--- a/drivers/nvmem/core.c
|
||||
+++ b/drivers/nvmem/core.c
|
||||
@@ -940,7 +940,7 @@ struct nvmem_device *nvmem_register(cons
|
||||
@@ -918,7 +918,7 @@ struct nvmem_device *nvmem_register(cons
|
||||
nvmem->nkeepout = config->nkeepout;
|
||||
if (config->of_node)
|
||||
nvmem->dev.of_node = config->of_node;
|
||||
@ -59,7 +59,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
switch (config->id) {
|
||||
--- a/include/linux/nvmem-provider.h
|
||||
+++ b/include/linux/nvmem-provider.h
|
||||
@@ -89,7 +89,6 @@ struct nvmem_cell_info {
|
||||
@@ -91,7 +91,6 @@ struct nvmem_cell_info {
|
||||
* @read_only: Device is read-only.
|
||||
* @root_only: Device is accessibly to root only.
|
||||
* @of_node: If given, this will be used instead of the parent's of_node.
|
||||
@ -67,7 +67,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
* @reg_read: Callback to read data.
|
||||
* @reg_write: Callback to write data.
|
||||
* @size: Device size.
|
||||
@@ -122,7 +121,6 @@ struct nvmem_config {
|
||||
@@ -126,7 +125,6 @@ struct nvmem_config {
|
||||
bool ignore_wp;
|
||||
struct nvmem_layout *layout;
|
||||
struct device_node *of_node;
|
||||
|
@ -25,7 +25,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
--- a/drivers/nvmem/core.c
|
||||
+++ b/drivers/nvmem/core.c
|
||||
@@ -846,14 +846,6 @@ static int nvmem_add_cells_from_layout(s
|
||||
@@ -823,14 +823,6 @@ static int nvmem_add_cells_from_layout(s
|
||||
}
|
||||
|
||||
#if IS_ENABLED(CONFIG_OF)
|
||||
@ -65,7 +65,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
#endif /* ifndef _LINUX_NVMEM_CONSUMER_H */
|
||||
--- a/include/linux/nvmem-provider.h
|
||||
+++ b/include/linux/nvmem-provider.h
|
||||
@@ -244,6 +244,27 @@ nvmem_layout_get_match_data(struct nvmem
|
||||
@@ -241,6 +241,27 @@ nvmem_layout_get_match_data(struct nvmem
|
||||
|
||||
#endif /* CONFIG_NVMEM */
|
||||
|
||||
|
@ -1,91 +0,0 @@
|
||||
From ec9c08a1cb8dc5e8e003f95f5f62de41dde235bb Mon Sep 17 00:00:00 2001
|
||||
From: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||
Date: Fri, 15 Dec 2023 11:15:29 +0000
|
||||
Subject: [PATCH] nvmem: Create a header for internal sharing
|
||||
|
||||
Before adding all the NVMEM layout bus infrastructure to the core, let's
|
||||
move the main nvmem_device structure in an internal header, only
|
||||
available to the core. This way all the additional code can be added in
|
||||
a dedicated file in order to keep the current core file tidy.
|
||||
|
||||
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||
Link: https://lore.kernel.org/r/20231215111536.316972-4-srinivas.kandagatla@linaro.org
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
drivers/nvmem/core.c | 24 +-----------------------
|
||||
drivers/nvmem/internals.h | 35 +++++++++++++++++++++++++++++++++++
|
||||
2 files changed, 36 insertions(+), 23 deletions(-)
|
||||
create mode 100644 drivers/nvmem/internals.h
|
||||
|
||||
--- a/drivers/nvmem/core.c
|
||||
+++ b/drivers/nvmem/core.c
|
||||
@@ -19,29 +19,7 @@
|
||||
#include <linux/of.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
-struct nvmem_device {
|
||||
- struct module *owner;
|
||||
- struct device dev;
|
||||
- int stride;
|
||||
- int word_size;
|
||||
- int id;
|
||||
- struct kref refcnt;
|
||||
- size_t size;
|
||||
- bool read_only;
|
||||
- bool root_only;
|
||||
- int flags;
|
||||
- enum nvmem_type type;
|
||||
- struct bin_attribute eeprom;
|
||||
- struct device *base_dev;
|
||||
- struct list_head cells;
|
||||
- const struct nvmem_keepout *keepout;
|
||||
- unsigned int nkeepout;
|
||||
- nvmem_reg_read_t reg_read;
|
||||
- nvmem_reg_write_t reg_write;
|
||||
- struct gpio_desc *wp_gpio;
|
||||
- struct nvmem_layout *layout;
|
||||
- void *priv;
|
||||
-};
|
||||
+#include "internals.h"
|
||||
|
||||
#define to_nvmem_device(d) container_of(d, struct nvmem_device, dev)
|
||||
|
||||
--- /dev/null
|
||||
+++ b/drivers/nvmem/internals.h
|
||||
@@ -0,0 +1,35 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0 */
|
||||
+
|
||||
+#ifndef _LINUX_NVMEM_INTERNALS_H
|
||||
+#define _LINUX_NVMEM_INTERNALS_H
|
||||
+
|
||||
+#include <linux/device.h>
|
||||
+#include <linux/nvmem-consumer.h>
|
||||
+#include <linux/nvmem-provider.h>
|
||||
+
|
||||
+struct nvmem_device {
|
||||
+ struct module *owner;
|
||||
+ struct device dev;
|
||||
+ struct list_head node;
|
||||
+ int stride;
|
||||
+ int word_size;
|
||||
+ int id;
|
||||
+ struct kref refcnt;
|
||||
+ size_t size;
|
||||
+ bool read_only;
|
||||
+ bool root_only;
|
||||
+ int flags;
|
||||
+ enum nvmem_type type;
|
||||
+ struct bin_attribute eeprom;
|
||||
+ struct device *base_dev;
|
||||
+ struct list_head cells;
|
||||
+ const struct nvmem_keepout *keepout;
|
||||
+ unsigned int nkeepout;
|
||||
+ nvmem_reg_read_t reg_read;
|
||||
+ nvmem_reg_write_t reg_write;
|
||||
+ struct gpio_desc *wp_gpio;
|
||||
+ struct nvmem_layout *layout;
|
||||
+ void *priv;
|
||||
+};
|
||||
+
|
||||
+#endif /* ifndef _LINUX_NVMEM_INTERNALS_H */
|
@ -1,79 +0,0 @@
|
||||
From 1b7c298a4ecbc28cc6ee94005734bff55eb83d22 Mon Sep 17 00:00:00 2001
|
||||
From: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||
Date: Fri, 15 Dec 2023 11:15:30 +0000
|
||||
Subject: [PATCH] nvmem: Simplify the ->add_cells() hook
|
||||
|
||||
The layout entry is not used and will anyway be made useless by the new
|
||||
layout bus infrastructure coming next, so drop it. While at it, clarify
|
||||
the kdoc entry.
|
||||
|
||||
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||
Link: https://lore.kernel.org/r/20231215111536.316972-5-srinivas.kandagatla@linaro.org
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
drivers/nvmem/core.c | 2 +-
|
||||
drivers/nvmem/layouts/onie-tlv.c | 3 +--
|
||||
drivers/nvmem/layouts/sl28vpd.c | 3 +--
|
||||
include/linux/nvmem-provider.h | 8 +++-----
|
||||
4 files changed, 6 insertions(+), 10 deletions(-)
|
||||
|
||||
--- a/drivers/nvmem/core.c
|
||||
+++ b/drivers/nvmem/core.c
|
||||
@@ -815,7 +815,7 @@ static int nvmem_add_cells_from_layout(s
|
||||
int ret;
|
||||
|
||||
if (layout && layout->add_cells) {
|
||||
- ret = layout->add_cells(&nvmem->dev, nvmem, layout);
|
||||
+ ret = layout->add_cells(&nvmem->dev, nvmem);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
--- a/drivers/nvmem/layouts/onie-tlv.c
|
||||
+++ b/drivers/nvmem/layouts/onie-tlv.c
|
||||
@@ -182,8 +182,7 @@ static bool onie_tlv_crc_is_valid(struct
|
||||
return true;
|
||||
}
|
||||
|
||||
-static int onie_tlv_parse_table(struct device *dev, struct nvmem_device *nvmem,
|
||||
- struct nvmem_layout *layout)
|
||||
+static int onie_tlv_parse_table(struct device *dev, struct nvmem_device *nvmem)
|
||||
{
|
||||
struct onie_tlv_hdr hdr;
|
||||
size_t table_len, data_len, hdr_len;
|
||||
--- a/drivers/nvmem/layouts/sl28vpd.c
|
||||
+++ b/drivers/nvmem/layouts/sl28vpd.c
|
||||
@@ -80,8 +80,7 @@ static int sl28vpd_v1_check_crc(struct d
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int sl28vpd_add_cells(struct device *dev, struct nvmem_device *nvmem,
|
||||
- struct nvmem_layout *layout)
|
||||
+static int sl28vpd_add_cells(struct device *dev, struct nvmem_device *nvmem)
|
||||
{
|
||||
const struct nvmem_cell_info *pinfo;
|
||||
struct nvmem_cell_info info = {0};
|
||||
--- a/include/linux/nvmem-provider.h
|
||||
+++ b/include/linux/nvmem-provider.h
|
||||
@@ -156,9 +156,8 @@ struct nvmem_cell_table {
|
||||
*
|
||||
* @name: Layout name.
|
||||
* @of_match_table: Open firmware match table.
|
||||
- * @add_cells: Will be called if a nvmem device is found which
|
||||
- * has this layout. The function will add layout
|
||||
- * specific cells with nvmem_add_one_cell().
|
||||
+ * @add_cells: Called to populate the layout using
|
||||
+ * nvmem_add_one_cell().
|
||||
* @fixup_cell_info: Will be called before a cell is added. Can be
|
||||
* used to modify the nvmem_cell_info.
|
||||
* @owner: Pointer to struct module.
|
||||
@@ -172,8 +171,7 @@ struct nvmem_cell_table {
|
||||
struct nvmem_layout {
|
||||
const char *name;
|
||||
const struct of_device_id *of_match_table;
|
||||
- int (*add_cells)(struct device *dev, struct nvmem_device *nvmem,
|
||||
- struct nvmem_layout *layout);
|
||||
+ int (*add_cells)(struct device *dev, struct nvmem_device *nvmem);
|
||||
void (*fixup_cell_info)(struct nvmem_device *nvmem,
|
||||
struct nvmem_layout *layout,
|
||||
struct nvmem_cell_info *cell);
|
@ -1,169 +0,0 @@
|
||||
From 1172460e716784ac7e1049a537bdca8edbf97360 Mon Sep 17 00:00:00 2001
|
||||
From: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||
Date: Fri, 15 Dec 2023 11:15:31 +0000
|
||||
Subject: [PATCH] nvmem: Move and rename ->fixup_cell_info()
|
||||
|
||||
This hook is meant to be used by any provider and instantiating a layout
|
||||
just for this is useless. Let's instead move this hook to the nvmem
|
||||
device and add it to the config structure to be easily shared by the
|
||||
providers.
|
||||
|
||||
While at moving this hook, rename it ->fixup_dt_cell_info() to clarify
|
||||
its main intended purpose.
|
||||
|
||||
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||
Link: https://lore.kernel.org/r/20231215111536.316972-6-srinivas.kandagatla@linaro.org
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
drivers/nvmem/core.c | 6 +++---
|
||||
drivers/nvmem/imx-ocotp.c | 11 +++--------
|
||||
drivers/nvmem/internals.h | 2 ++
|
||||
drivers/nvmem/mtk-efuse.c | 11 +++--------
|
||||
include/linux/nvmem-provider.h | 9 ++++-----
|
||||
5 files changed, 15 insertions(+), 24 deletions(-)
|
||||
|
||||
--- a/drivers/nvmem/core.c
|
||||
+++ b/drivers/nvmem/core.c
|
||||
@@ -674,7 +674,6 @@ static int nvmem_validate_keepouts(struc
|
||||
|
||||
static int nvmem_add_cells_from_dt(struct nvmem_device *nvmem, struct device_node *np)
|
||||
{
|
||||
- struct nvmem_layout *layout = nvmem->layout;
|
||||
struct device *dev = &nvmem->dev;
|
||||
struct device_node *child;
|
||||
const __be32 *addr;
|
||||
@@ -704,8 +703,8 @@ static int nvmem_add_cells_from_dt(struc
|
||||
|
||||
info.np = of_node_get(child);
|
||||
|
||||
- if (layout && layout->fixup_cell_info)
|
||||
- layout->fixup_cell_info(nvmem, layout, &info);
|
||||
+ if (nvmem->fixup_dt_cell_info)
|
||||
+ nvmem->fixup_dt_cell_info(nvmem, &info);
|
||||
|
||||
ret = nvmem_add_one_cell(nvmem, &info);
|
||||
kfree(info.name);
|
||||
@@ -894,6 +893,7 @@ struct nvmem_device *nvmem_register(cons
|
||||
|
||||
kref_init(&nvmem->refcnt);
|
||||
INIT_LIST_HEAD(&nvmem->cells);
|
||||
+ nvmem->fixup_dt_cell_info = config->fixup_dt_cell_info;
|
||||
|
||||
nvmem->owner = config->owner;
|
||||
if (!nvmem->owner && config->dev->driver)
|
||||
--- a/drivers/nvmem/imx-ocotp.c
|
||||
+++ b/drivers/nvmem/imx-ocotp.c
|
||||
@@ -583,17 +583,12 @@ static const struct of_device_id imx_oco
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, imx_ocotp_dt_ids);
|
||||
|
||||
-static void imx_ocotp_fixup_cell_info(struct nvmem_device *nvmem,
|
||||
- struct nvmem_layout *layout,
|
||||
- struct nvmem_cell_info *cell)
|
||||
+static void imx_ocotp_fixup_dt_cell_info(struct nvmem_device *nvmem,
|
||||
+ struct nvmem_cell_info *cell)
|
||||
{
|
||||
cell->read_post_process = imx_ocotp_cell_pp;
|
||||
}
|
||||
|
||||
-static struct nvmem_layout imx_ocotp_layout = {
|
||||
- .fixup_cell_info = imx_ocotp_fixup_cell_info,
|
||||
-};
|
||||
-
|
||||
static int imx_ocotp_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct device *dev = &pdev->dev;
|
||||
@@ -619,7 +614,7 @@ static int imx_ocotp_probe(struct platfo
|
||||
imx_ocotp_nvmem_config.size = 4 * priv->params->nregs;
|
||||
imx_ocotp_nvmem_config.dev = dev;
|
||||
imx_ocotp_nvmem_config.priv = priv;
|
||||
- imx_ocotp_nvmem_config.layout = &imx_ocotp_layout;
|
||||
+ imx_ocotp_nvmem_config.fixup_dt_cell_info = &imx_ocotp_fixup_dt_cell_info;
|
||||
|
||||
priv->config = &imx_ocotp_nvmem_config;
|
||||
|
||||
--- a/drivers/nvmem/internals.h
|
||||
+++ b/drivers/nvmem/internals.h
|
||||
@@ -23,6 +23,8 @@ struct nvmem_device {
|
||||
struct bin_attribute eeprom;
|
||||
struct device *base_dev;
|
||||
struct list_head cells;
|
||||
+ void (*fixup_dt_cell_info)(struct nvmem_device *nvmem,
|
||||
+ struct nvmem_cell_info *cell);
|
||||
const struct nvmem_keepout *keepout;
|
||||
unsigned int nkeepout;
|
||||
nvmem_reg_read_t reg_read;
|
||||
--- a/drivers/nvmem/mtk-efuse.c
|
||||
+++ b/drivers/nvmem/mtk-efuse.c
|
||||
@@ -45,9 +45,8 @@ static int mtk_efuse_gpu_speedbin_pp(voi
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static void mtk_efuse_fixup_cell_info(struct nvmem_device *nvmem,
|
||||
- struct nvmem_layout *layout,
|
||||
- struct nvmem_cell_info *cell)
|
||||
+static void mtk_efuse_fixup_dt_cell_info(struct nvmem_device *nvmem,
|
||||
+ struct nvmem_cell_info *cell)
|
||||
{
|
||||
size_t sz = strlen(cell->name);
|
||||
|
||||
@@ -61,10 +60,6 @@ static void mtk_efuse_fixup_cell_info(st
|
||||
cell->read_post_process = mtk_efuse_gpu_speedbin_pp;
|
||||
}
|
||||
|
||||
-static struct nvmem_layout mtk_efuse_layout = {
|
||||
- .fixup_cell_info = mtk_efuse_fixup_cell_info,
|
||||
-};
|
||||
-
|
||||
static int mtk_efuse_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct device *dev = &pdev->dev;
|
||||
@@ -91,7 +86,7 @@ static int mtk_efuse_probe(struct platfo
|
||||
econfig.priv = priv;
|
||||
econfig.dev = dev;
|
||||
if (pdata->uses_post_processing)
|
||||
- econfig.layout = &mtk_efuse_layout;
|
||||
+ econfig.fixup_dt_cell_info = &mtk_efuse_fixup_dt_cell_info;
|
||||
nvmem = devm_nvmem_register(dev, &econfig);
|
||||
|
||||
return PTR_ERR_OR_ZERO(nvmem);
|
||||
--- a/include/linux/nvmem-provider.h
|
||||
+++ b/include/linux/nvmem-provider.h
|
||||
@@ -83,6 +83,8 @@ struct nvmem_cell_info {
|
||||
* @cells: Optional array of pre-defined NVMEM cells.
|
||||
* @ncells: Number of elements in cells.
|
||||
* @add_legacy_fixed_of_cells: Read fixed NVMEM cells from old OF syntax.
|
||||
+ * @fixup_dt_cell_info: Will be called before a cell is added. Can be
|
||||
+ * used to modify the nvmem_cell_info.
|
||||
* @keepout: Optional array of keepout ranges (sorted ascending by start).
|
||||
* @nkeepout: Number of elements in the keepout array.
|
||||
* @type: Type of the nvmem storage
|
||||
@@ -113,6 +115,8 @@ struct nvmem_config {
|
||||
const struct nvmem_cell_info *cells;
|
||||
int ncells;
|
||||
bool add_legacy_fixed_of_cells;
|
||||
+ void (*fixup_dt_cell_info)(struct nvmem_device *nvmem,
|
||||
+ struct nvmem_cell_info *cell);
|
||||
const struct nvmem_keepout *keepout;
|
||||
unsigned int nkeepout;
|
||||
enum nvmem_type type;
|
||||
@@ -158,8 +162,6 @@ struct nvmem_cell_table {
|
||||
* @of_match_table: Open firmware match table.
|
||||
* @add_cells: Called to populate the layout using
|
||||
* nvmem_add_one_cell().
|
||||
- * @fixup_cell_info: Will be called before a cell is added. Can be
|
||||
- * used to modify the nvmem_cell_info.
|
||||
* @owner: Pointer to struct module.
|
||||
* @node: List node.
|
||||
*
|
||||
@@ -172,9 +174,6 @@ struct nvmem_layout {
|
||||
const char *name;
|
||||
const struct of_device_id *of_match_table;
|
||||
int (*add_cells)(struct device *dev, struct nvmem_device *nvmem);
|
||||
- void (*fixup_cell_info)(struct nvmem_device *nvmem,
|
||||
- struct nvmem_layout *layout,
|
||||
- struct nvmem_cell_info *cell);
|
||||
|
||||
/* private */
|
||||
struct module *owner;
|
@ -40,7 +40,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
}
|
||||
|
||||
memcpy(val, ((u8 *)p) + skipbytes, bytes);
|
||||
@@ -157,8 +161,30 @@ static const struct ocotp_devtype_data i
|
||||
@@ -179,8 +183,30 @@ static const struct ocotp_devtype_data i
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -23,7 +23,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -10989,7 +10989,8 @@ void free_netdev(struct net_device *dev)
|
||||
@@ -11020,7 +11020,8 @@ void free_netdev(struct net_device *dev)
|
||||
dev->xdp_bulkq = NULL;
|
||||
|
||||
/* Compatibility with error handling in drivers */
|
||||
|
@ -105,7 +105,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
help
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -3597,6 +3597,11 @@ static int xmit_one(struct sk_buff *skb,
|
||||
@@ -3628,6 +3628,11 @@ static int xmit_one(struct sk_buff *skb,
|
||||
if (dev_nit_active(dev))
|
||||
dev_queue_xmit_nit(skb, dev);
|
||||
|
||||
|
@ -31,7 +31,7 @@ Signe-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
static inline void gro_normal_list(struct napi_struct *napi)
|
||||
--- a/include/net/tcp.h
|
||||
+++ b/include/net/tcp.h
|
||||
@@ -2084,7 +2084,10 @@ void tcp_v4_destroy_sock(struct sock *sk
|
||||
@@ -2101,7 +2101,10 @@ void tcp_v4_destroy_sock(struct sock *sk
|
||||
|
||||
struct sk_buff *tcp_gso_segment(struct sk_buff *skb,
|
||||
netdev_features_t features);
|
||||
|
@ -57,7 +57,7 @@ Signed-off-by: Bjorn Andersson <andersson@kernel.org>
|
||||
static int __qcom_scm_set_dload_mode(struct device *dev, bool enable)
|
||||
{
|
||||
struct qcom_scm_desc desc = {
|
||||
@@ -1473,6 +1496,13 @@ static int qcom_scm_probe(struct platfor
|
||||
@@ -1474,6 +1497,13 @@ static int qcom_scm_probe(struct platfor
|
||||
|
||||
__get_convention();
|
||||
|
||||
|
@ -15,7 +15,7 @@ Signed-off-by: Robert Marko <robimarko@gmail.com>
|
||||
|
||||
--- a/drivers/firmware/qcom_scm.c
|
||||
+++ b/drivers/firmware/qcom_scm.c
|
||||
@@ -1528,7 +1528,8 @@ static int qcom_scm_probe(struct platfor
|
||||
@@ -1529,7 +1529,8 @@ static int qcom_scm_probe(struct platfor
|
||||
static void qcom_scm_shutdown(struct platform_device *pdev)
|
||||
{
|
||||
/* Clean shutdown, disable download mode to allow normal restart */
|
||||
|
@ -85,8 +85,22 @@
|
||||
reg = <5>;
|
||||
compatible = "ethernet-phy-ieee802.3-c45";
|
||||
|
||||
/* LED0: Amber ; LED1: nc ; LED2: nc ; LED3: Green */
|
||||
mxl,led-config = <0x3b0 0x0 0x0 0x3c0>;
|
||||
leds {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
led-0 {
|
||||
reg = <0>;
|
||||
color = <LED_COLOR_ID_AMBER>;
|
||||
function = LED_FUNCTION_WAN;
|
||||
};
|
||||
|
||||
led-3 {
|
||||
reg = <3>;
|
||||
color = <LED_COLOR_ID_GREEN>;
|
||||
function = LED_FUNCTION_WAN;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -186,8 +186,23 @@
|
||||
reset-gpios = <&pio 6 GPIO_ACTIVE_LOW>;
|
||||
reset-assert-us = <10000>;
|
||||
reset-deassert-us = <10000>;
|
||||
/* LED0: nc ; LED1: nc ; LED2: amber ; LED3: green */
|
||||
mxl,led-config = <0x0 0x0 0x370 0x380>;
|
||||
|
||||
leds {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
led-2 {
|
||||
reg = <2>;
|
||||
color = <LED_COLOR_ID_AMBER>;
|
||||
function = LED_FUNCTION_WAN;
|
||||
};
|
||||
|
||||
led-3 {
|
||||
reg = <3>;
|
||||
color = <LED_COLOR_ID_GREEN>;
|
||||
function = LED_FUNCTION_WAN;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -172,8 +172,23 @@
|
||||
reset-gpios = <&pio 6 GPIO_ACTIVE_LOW>;
|
||||
reset-assert-us = <10000>;
|
||||
reset-deassert-us = <10000>;
|
||||
/* LED0: nc ; LED1: nc ; LED2: amber ; LED3: green */
|
||||
mxl,led-config = <0x0 0x0 0x370 0x380>;
|
||||
|
||||
leds {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
led-2 {
|
||||
reg = <2>;
|
||||
color = <LED_COLOR_ID_AMBER>;
|
||||
function = LED_FUNCTION_WAN;
|
||||
};
|
||||
|
||||
led-3 {
|
||||
reg = <3>;
|
||||
color = <LED_COLOR_ID_GREEN>;
|
||||
function = LED_FUNCTION_WAN;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -146,16 +146,33 @@
|
||||
compatible = "ethernet-phy-ieee802.3-c45";
|
||||
reg = <5>;
|
||||
|
||||
mxl,led-drive-vdd;
|
||||
mxl,led-config = <0x03f0 0x0 0x0 0x0>;
|
||||
leds {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
led-0 {
|
||||
reg = <0>;
|
||||
active-high;
|
||||
color = <LED_COLOR_ID_WHITE>;
|
||||
function = LED_FUNCTION_LAN;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
phy6: phy@6 {
|
||||
compatible = "ethernet-phy-ieee802.3-c45";
|
||||
reg = <6>;
|
||||
|
||||
/* LED0: CONN (WAN white) */
|
||||
mxl,led-config = <0x03f0 0x0 0x0 0x0>;
|
||||
leds {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
led-0 {
|
||||
reg = <0>;
|
||||
color = <LED_COLOR_ID_WHITE>;
|
||||
function = LED_FUNCTION_WAN;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
switch: switch@1f {
|
||||
|
13
target/linux/mediatek/filogic/base-files/etc/board.d/01_leds
Executable file → Normal file
13
target/linux/mediatek/filogic/base-files/etc/board.d/01_leds
Executable file → Normal file
@ -11,9 +11,18 @@ abt,asr3000)
|
||||
ucidef_set_led_netdev "wlan2g" "WLAN2G" "green:wlan-2ghz" "phy0-ap0"
|
||||
ucidef_set_led_netdev "wlan5g" "WLAN5G" "green:wlan-5ghz" "phy1-ap0"
|
||||
;;
|
||||
acer,predator-w6|\
|
||||
acer,predator-w6d)
|
||||
ucidef_set_led_netdev "internet" "INTERNET" "mdio-bus:06:amber:wan" "eth1" "link_10 link_100 link_1000 tx rx"
|
||||
ucidef_set_led_netdev "internet" "INTERNET" "mdio-bus:06:green:wan" "eth1" "link_2500 tx rx"
|
||||
;;
|
||||
asus,tuf-ax4200)
|
||||
ucidef_set_led_netdev "wan" "WAN" "mdio-bus:06:white:wan" "eth1" "link tx rx"
|
||||
;;
|
||||
asus,tuf-ax6000)
|
||||
ucidef_set_led_netdev "lan5" "LAN5" "mdio-bus:05:white:lan" "lan5" "link tx rx"
|
||||
ucidef_set_led_netdev "wan" "WAN" "mdio-bus:06:white:wan" "eth1" "link tx rx"
|
||||
;;
|
||||
bananapi,bpi-r3-mini)
|
||||
ucidef_set_led_netdev "lan1" "LAN" "mdio-bus:0e:green:lan" "eth0" "link_2500 link_1000 tx rx"
|
||||
ucidef_set_led_netdev "lan2" "LAN" "mdio-bus:0e:yellow:lan" "eth0" "link_2500 link_100 tx rx"
|
||||
@ -161,6 +170,10 @@ zyxel,ex5601-t0-ubootmod)
|
||||
ucidef_set_led_netdev "wifi-24g" "WIFI-2.4G" "green:wifi24g" "phy0-ap0" "link tx rx"
|
||||
ucidef_set_led_netdev "wifi-5g" "WIFI-5G" "green:wifi5g" "phy1-ap0" "link tx rx"
|
||||
;;
|
||||
zyxel,nwa50ax-pro)
|
||||
ucidef_set_led_netdev "uplink" "UPLINK" "mdio-bus:05:amber:wan" "eth0" "link_10 link_100 link_2500 tx rx"
|
||||
ucidef_set_led_netdev "uplink" "UPLINK" "mdio-bus:05:green:wan" "eth0" "link_1000 link_2500 tx rx"
|
||||
;;
|
||||
superbox,s20-plus)
|
||||
ucidef_set_led_netdev "wlan5g" "5G" "blue:wlan-5ghz" "phy1-ap0"
|
||||
ucidef_set_led_netdev "wlan2g" "2.4G" "blue:wlan-2ghz" "phy0-ap0"
|
||||
|
@ -0,0 +1,387 @@
|
||||
/dts-v1/;
|
||||
|
||||
#include "ipq5018.dtsi"
|
||||
#include "ipq5018-mx-base.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Linksys MR5500";
|
||||
compatible = "linksys,mr5500", "qcom,ipq5018";
|
||||
|
||||
gpio-leds {
|
||||
compatible = "gpio-leds";
|
||||
|
||||
usb {
|
||||
color = <LED_COLOR_ID_BLUE>;
|
||||
function = LED_FUNCTION_USB;
|
||||
gpios = <&tlmm 19 GPIO_ACTIVE_HIGH>;
|
||||
trigger-sources = <&usb_port1>;
|
||||
linux,default-trigger = "usbport";
|
||||
};
|
||||
};
|
||||
|
||||
regulator_fixed_5p0: regulator-s0500 {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-min-microvolt = <500000>;
|
||||
regulator-max-microvolt = <500000>;
|
||||
regulator-name = "fixed_5p0";
|
||||
gpio = <&tlmm 17 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
};
|
||||
|
||||
/*
|
||||
* ===============================================================
|
||||
* _______________________ _______________________
|
||||
* | IPQ5018 | | QCA8337 |
|
||||
* | +------+ +--------+ | | +--------+ +------+ |
|
||||
* | | MAC0 |---| GE Phy | | | | Phy0 |---| MAC1 | |
|
||||
* | +------+ +--------+ | | +--------+ +------+ |
|
||||
* | +------+ +--------+ | | +--------+ +------+ |
|
||||
* | | MAC1 |---| Uniphy |-+-SGMII-+-| SerDes |---| MAC6 | |
|
||||
* | +------+ +--------+ | | +--------+ +------+ |
|
||||
* |_______________________| |_______________________|
|
||||
*
|
||||
* ===============================================================
|
||||
*/
|
||||
|
||||
&switch {
|
||||
status = "okay";
|
||||
|
||||
switch_mac_mode = <MAC_MODE_SGMII_CHANNEL0>;
|
||||
|
||||
qcom,port_phyinfo {
|
||||
// MAC0 -> GE Phy
|
||||
port@0 {
|
||||
port_id = <1>;
|
||||
mdiobus = <&mdio0>;
|
||||
phy_address = <7>;
|
||||
};
|
||||
|
||||
// MAC1 ---SGMII---> QCA8337 SerDes
|
||||
port@1 {
|
||||
port_id = <2>;
|
||||
forced-speed = <1000>;
|
||||
forced-duplex = <1>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
// MAC1 ---SGMII---> QCA8337 SerDes
|
||||
&dp2 {
|
||||
status = "okay";
|
||||
|
||||
nvmem-cells = <&hw_mac_addr 0>;
|
||||
nvmem-cell-names = "mac-address";
|
||||
|
||||
fixed-link {
|
||||
speed = <1000>;
|
||||
full-duplex;
|
||||
};
|
||||
};
|
||||
|
||||
&mdio0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&mdio1 {
|
||||
status = "okay";
|
||||
|
||||
pinctrl-0 = <&mdio1_pins>;
|
||||
pinctrl-names = "default";
|
||||
reset-gpios = <&tlmm 39 GPIO_ACTIVE_LOW>;
|
||||
|
||||
switch1: ethernet-switch@17 {
|
||||
compatible = "qca,qca8337";
|
||||
reg = <17>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
port@1 {
|
||||
reg = <1>;
|
||||
label = "lan1";
|
||||
phy-handle = <&qca8337_0>;
|
||||
phy-mode = "internal";
|
||||
|
||||
leds {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
led@0 {
|
||||
reg = <0>;
|
||||
color = <LED_COLOR_ID_GREEN>;
|
||||
function = LED_FUNCTION_LAN;
|
||||
default-state = "keep";
|
||||
};
|
||||
|
||||
led@1 {
|
||||
reg = <1>;
|
||||
color = <LED_COLOR_ID_AMBER>;
|
||||
function = LED_FUNCTION_LAN;
|
||||
default-state = "keep";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
port@2 {
|
||||
reg = <2>;
|
||||
label = "lan2";
|
||||
phy-handle = <&qca8337_1>;
|
||||
phy-mode = "internal";
|
||||
|
||||
leds {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
led@0 {
|
||||
reg = <0>;
|
||||
color = <LED_COLOR_ID_GREEN>;
|
||||
function = LED_FUNCTION_LAN;
|
||||
default-state = "keep";
|
||||
};
|
||||
|
||||
led@1 {
|
||||
reg = <1>;
|
||||
color = <LED_COLOR_ID_AMBER>;
|
||||
function = LED_FUNCTION_LAN;
|
||||
default-state = "keep";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
port@3 {
|
||||
reg = <3>;
|
||||
label = "lan3";
|
||||
phy-handle = <&qca8337_2>;
|
||||
phy-mode = "internal";
|
||||
|
||||
leds {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
led@0 {
|
||||
reg = <0>;
|
||||
color = <LED_COLOR_ID_GREEN>;
|
||||
function = LED_FUNCTION_LAN;
|
||||
default-state = "keep";
|
||||
};
|
||||
|
||||
led@1 {
|
||||
reg = <1>;
|
||||
color = <LED_COLOR_ID_AMBER>;
|
||||
function = LED_FUNCTION_LAN;
|
||||
default-state = "keep";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
port@4 {
|
||||
reg = <4>;
|
||||
label = "lan4";
|
||||
phy-handle = <&qca8337_3>;
|
||||
phy-mode = "internal";
|
||||
|
||||
leds {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
led@0 {
|
||||
reg = <0>;
|
||||
color = <LED_COLOR_ID_GREEN>;
|
||||
function = LED_FUNCTION_LAN;
|
||||
default-state = "keep";
|
||||
};
|
||||
|
||||
led@1 {
|
||||
reg = <1>;
|
||||
color = <LED_COLOR_ID_AMBER>;
|
||||
function = LED_FUNCTION_LAN;
|
||||
default-state = "keep";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
port@5 {
|
||||
reg = <5>;
|
||||
label = "wan";
|
||||
phy-handle = <&qca8337_4>;
|
||||
phy-mode = "internal";
|
||||
|
||||
leds {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
led@0 {
|
||||
reg = <0>;
|
||||
color = <LED_COLOR_ID_GREEN>;
|
||||
function = LED_FUNCTION_WAN;
|
||||
default-state = "keep";
|
||||
};
|
||||
|
||||
led@1 {
|
||||
reg = <1>;
|
||||
color = <LED_COLOR_ID_AMBER>;
|
||||
function = LED_FUNCTION_WAN;
|
||||
default-state = "keep";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
port@6 {
|
||||
reg = <6>;
|
||||
label = "cpu";
|
||||
phy-mode = "sgmii";
|
||||
ethernet = <&dp2>;
|
||||
qca,sgmii-enable-pll;
|
||||
|
||||
fixed-link {
|
||||
speed = <1000>;
|
||||
full-duplex;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
mdio {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
// QCA8337 Phy0 -> LAN1
|
||||
qca8337_0: ethernet-phy@0 {
|
||||
reg = <0>;
|
||||
};
|
||||
|
||||
// QCA8337 Phy1 -> LAN2
|
||||
qca8337_1: ethernet-phy@1 {
|
||||
reg = <1>;
|
||||
};
|
||||
|
||||
// QCA8337 Phy2 -> LAN3
|
||||
qca8337_2: ethernet-phy@2 {
|
||||
reg = <2>;
|
||||
};
|
||||
|
||||
// QCA8337 Phy3 -> LAN4
|
||||
qca8337_3: ethernet-phy@3 {
|
||||
reg = <3>;
|
||||
};
|
||||
|
||||
// QCA8337 Phy4 -> WAN
|
||||
qca8337_4: ethernet-phy@4 {
|
||||
reg = <4>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&usbphy0 {
|
||||
status = "okay";
|
||||
|
||||
vdd-supply = <®ulator_fixed_5p0>;
|
||||
};
|
||||
|
||||
&usb {
|
||||
status = "okay";
|
||||
|
||||
vbus-supply = <®ulator_fixed_5p0>;
|
||||
};
|
||||
|
||||
&usb_dwc {
|
||||
address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
dr_mode = "host";
|
||||
|
||||
usb_port1: port@1 {
|
||||
reg = <1>;
|
||||
#trigger-source-cells = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
&pcie0_phy {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&pcie0 {
|
||||
status = "okay";
|
||||
|
||||
perst-gpios = <&tlmm 15 GPIO_ACTIVE_LOW>;
|
||||
|
||||
bridge@0,0 {
|
||||
reg = <0x00000000 0 0 0 0>;
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
ranges;
|
||||
|
||||
wifi@1,0 {
|
||||
status = "okay";
|
||||
|
||||
/* QCN9074: ath11k lacks DT compatible for PCI cards */
|
||||
compatible = "pci17cb,1104";
|
||||
reg = <0x00010000 0 0 0 0>;
|
||||
|
||||
qcom,ath11k-calibration-variant = "Linksys-MR5500";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&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";
|
||||
|
||||
// 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";
|
||||
};
|
||||
};
|
||||
|
||||
&wifi0 {
|
||||
// IPQ5018
|
||||
qcom,rproc = <&q6_wcss_pd1>;
|
||||
qcom,ath11k-calibration-variant = "Linksys-MR5500";
|
||||
qcom,ath11k-fw-memory-mode = <2>;
|
||||
qcom,bdf-addr = <0x4c400000>;
|
||||
|
||||
status = "okay";
|
||||
};
|
@ -25,6 +25,17 @@ define Device/linksys_ipq50xx_mx_base
|
||||
IMAGE/factory.bin := append-kernel | pad-to $$$$(KERNEL_SIZE) | append-ubi | linksys-image type=$$$$(DEVICE_MODEL)
|
||||
endef
|
||||
|
||||
define Device/linksys_mr5500
|
||||
$(call Device/linksys_ipq50xx_mx_base)
|
||||
DEVICE_MODEL := MR5500
|
||||
DEVICE_DTS_CONFIG := config@mp03.1
|
||||
DEVICE_PACKAGES := kmod-ath11k-pci \
|
||||
ath11k-firmware-qcn9074 \
|
||||
ipq-wifi-linksys_mr5500 \
|
||||
kmod-usb-ledtrig-usbport
|
||||
endef
|
||||
TARGET_DEVICES += linksys_mr5500
|
||||
|
||||
define Device/linksys_mx2000
|
||||
$(call Device/linksys_ipq50xx_mx_base)
|
||||
DEVICE_MODEL := MX2000
|
||||
|
@ -0,0 +1,28 @@
|
||||
#
|
||||
# Copyright (C) 2015 OpenWrt.org
|
||||
#
|
||||
|
||||
. /lib/functions/uci-defaults.sh
|
||||
|
||||
board_config_update
|
||||
|
||||
board=$(board_name)
|
||||
|
||||
case "$board" in
|
||||
linksys,mr5500)
|
||||
ucidef_set_led_netdev "lan1-port-link" "LAN1-PORT-LINK" "qca8k-0.0:00:green:lan" "lan1" "link_10 link_100 link_1000"
|
||||
ucidef_set_led_netdev "lan1-port-activity" "LAN1-PORT-ACTIVITY" "qca8k-0.0:00:amber:lan" "lan1" "tx rx"
|
||||
ucidef_set_led_netdev "lan2-port-link" "LAN2-PORT-LINK" "qca8k-0.0:01:green:lan" "lan2" "link_10 link_100 link_1000"
|
||||
ucidef_set_led_netdev "lan2-port-activity" "LAN2-PORT-ACTIVITY" "qca8k-0.0:01:amber:lan" "lan2" "tx rx"
|
||||
ucidef_set_led_netdev "lan3-port-link" "LAN3-PORT-LINK" "qca8k-0.0:02:green:lan" "lan3" "link_10 link_100 link_1000"
|
||||
ucidef_set_led_netdev "lan3-port-activity" "LAN3-PORT-ACTIVITY" "qca8k-0.0:02:amber:lan" "lan3" "tx rx"
|
||||
ucidef_set_led_netdev "lan4-port-link" "LAN4-PORT-LINK" "qca8k-0.0:03:green:lan" "lan4" "link_10 link_100 link_1000"
|
||||
ucidef_set_led_netdev "lan4-port-activity" "LAN4-PORT-ACTIVITY" "qca8k-0.0:03:amber:lan" "lan4" "tx rx"
|
||||
ucidef_set_led_netdev "wan-port-link" "WAN-PORT-LINK" "qca8k-0.0:04:green:wan" "wan" "link_10 link_100 link_1000"
|
||||
ucidef_set_led_netdev "wan-port-activity" "WAN-PORT-ACTIVITY" "qca8k-0.0:04:amber:wan" "wan" "tx rx"
|
||||
;;
|
||||
esac
|
||||
|
||||
board_config_flush
|
||||
|
||||
exit 0
|
3
target/linux/qualcommax/ipq50xx/base-files/etc/board.d/02_network
Executable file → Normal file
3
target/linux/qualcommax/ipq50xx/base-files/etc/board.d/02_network
Executable file → Normal file
@ -7,6 +7,9 @@ ipq50xx_setup_interfaces()
|
||||
{
|
||||
local board="$1"
|
||||
case $board in
|
||||
linksys,mr5500)
|
||||
ucidef_set_interfaces_lan_wan "lan1 lan2 lan3 lan4" "wan"
|
||||
;;
|
||||
jdcloud,re-cs-03|\
|
||||
linksys,mx2000|\
|
||||
linksys,mx5500|\
|
||||
|
2
target/linux/qualcommax/ipq50xx/base-files/etc/hotplug.d/firmware/11-ath11k-caldata
Executable file → Normal file
2
target/linux/qualcommax/ipq50xx/base-files/etc/hotplug.d/firmware/11-ath11k-caldata
Executable file → Normal file
@ -12,6 +12,7 @@ case "$FIRMWARE" in
|
||||
jdcloud,re-cs-03)
|
||||
caldata_extract_mmc "0:ART" 0x1000 0x20000
|
||||
;;
|
||||
linksys,mr5500|\
|
||||
linksys,mx2000|\
|
||||
linksys,mx5500|\
|
||||
linksys,spnmx56)
|
||||
@ -39,6 +40,7 @@ case "$FIRMWARE" in
|
||||
;;
|
||||
"ath11k/QCN9074/hw1.0/cal-pci-0001:01:00.0.bin")
|
||||
case "$board" in
|
||||
linksys,mr5500|\
|
||||
linksys,mx5500|\
|
||||
linksys,spnmx56)
|
||||
caldata_extract "0:ART" 0x26800 0x20000
|
||||
|
@ -4,6 +4,7 @@ START=99
|
||||
|
||||
boot() {
|
||||
case $(board_name) in
|
||||
linksys,mr5500|\
|
||||
linksys,mx2000|\
|
||||
linksys,mx5500|\
|
||||
linksys,spnmx56)
|
||||
|
1
target/linux/qualcommax/ipq50xx/base-files/lib/upgrade/platform.sh
Executable file → Normal file
1
target/linux/qualcommax/ipq50xx/base-files/lib/upgrade/platform.sh
Executable file → Normal file
@ -76,6 +76,7 @@ platform_do_upgrade() {
|
||||
CI_ROOTPART="rootfs"
|
||||
emmc_do_upgrade "$1"
|
||||
;;
|
||||
linksys,mr5500|\
|
||||
linksys,mx2000|\
|
||||
linksys,mx5500|\
|
||||
linksys,spnmx56)
|
||||
|
@ -7,6 +7,7 @@ CONFIG_MTD_SPI_NAND=y
|
||||
CONFIG_NET_DEVLINK=y
|
||||
CONFIG_NET_DSA=y
|
||||
CONFIG_NET_DSA_QCA8K=y
|
||||
CONFIG_NET_DSA_QCA8K_LEDS_SUPPORT=y
|
||||
CONFIG_NET_DSA_TAG_QCA=y
|
||||
CONFIG_PHYLINK=y
|
||||
CONFIG_PHY_QCOM_M31_USB=y
|
||||
|
@ -57,7 +57,7 @@ Signed-off-by: Bjorn Andersson <andersson@kernel.org>
|
||||
static int __qcom_scm_set_dload_mode(struct device *dev, bool enable)
|
||||
{
|
||||
struct qcom_scm_desc desc = {
|
||||
@@ -1473,6 +1496,13 @@ static int qcom_scm_probe(struct platfor
|
||||
@@ -1474,6 +1497,13 @@ static int qcom_scm_probe(struct platfor
|
||||
|
||||
__get_convention();
|
||||
|
||||
|
@ -234,7 +234,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||
|
||||
/* Format flags */
|
||||
#define UVC_FMT_FLAG_COMPRESSED 0x00000001
|
||||
@@ -587,6 +589,7 @@ struct uvc_device {
|
||||
@@ -591,6 +593,7 @@ struct uvc_device {
|
||||
|
||||
struct input_dev *input;
|
||||
char input_phys[64];
|
||||
|
@ -2,10 +2,34 @@
|
||||
|
||||
#include "rtl8380_netgear_gigabit.dtsi"
|
||||
|
||||
#include <dt-bindings/leds/common.h>
|
||||
|
||||
/ {
|
||||
compatible = "netgear,gs310tp-v1", "realtek,rtl838x-soc";
|
||||
model = "Netgear GS310TP v1";
|
||||
|
||||
aliases {
|
||||
led-boot = &led_power_green;
|
||||
led-failsafe = &led_power_amber;
|
||||
led-running = &led_power_green;
|
||||
led-upgrade = &led_power_amber;
|
||||
};
|
||||
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
|
||||
led_power_amber: led-0 {
|
||||
color = <LED_COLOR_ID_AMBER>;
|
||||
function = LED_FUNCTION_POWER;
|
||||
gpios = <&gpio1 32 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
led_power_green: led-1 {
|
||||
color = <LED_COLOR_ID_GREEN>;
|
||||
function = LED_FUNCTION_POWER;
|
||||
gpios = <&gpio1 31 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&gpio1 {
|
||||
|
@ -17,7 +17,6 @@
|
||||
compatible = "gpio-leds";
|
||||
|
||||
led_power: led-0 {
|
||||
label = "green:power";
|
||||
color = <LED_COLOR_ID_GREEN>;
|
||||
function = LED_FUNCTION_POWER;
|
||||
gpios = <&gpio0 9 GPIO_ACTIVE_HIGH>;
|
||||
|
@ -1,29 +0,0 @@
|
||||
From bc9111d1b82684123e6c48817c04d0f8a08669bf Mon Sep 17 00:00:00 2001
|
||||
From: Tianling Shen <cnsztl@gmail.com>
|
||||
Date: Sun, 19 Jan 2025 16:24:10 +0800
|
||||
Subject: [PATCH] arm64: dts: rockchip: change eth phy mode to rgmii-id for
|
||||
orangepi r1 plus lts
|
||||
|
||||
In general the delay should be added by the PHY instead of the MAC,
|
||||
and this improves network stability on some boards which seem to
|
||||
need different delay.
|
||||
|
||||
Fixes: 387b3bbac5ea ("arm64: dts: rockchip: Add Xunlong OrangePi R1 Plus LTS")
|
||||
Cc: stable@vger.kernel.org # 6.6+
|
||||
Signed-off-by: Tianling Shen <cnsztl@gmail.com>
|
||||
---
|
||||
arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus-lts.dts | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus-lts.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus-lts.dts
|
||||
@@ -16,8 +16,7 @@
|
||||
|
||||
&gmac2io {
|
||||
phy-handle = <&yt8531c>;
|
||||
- tx_delay = <0x19>;
|
||||
- rx_delay = <0x05>;
|
||||
+ phy-mode = "rgmii-id";
|
||||
|
||||
mdio {
|
||||
/delete-node/ ethernet-phy@1;
|
@ -64,7 +64,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus-lts.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus-lts.dts
|
||||
@@ -30,6 +30,7 @@
|
||||
@@ -33,6 +33,7 @@
|
||||
motorcomm,keep-pll-enabled;
|
||||
motorcomm,rx-clk-drv-microamp = <5020>;
|
||||
motorcomm,rx-data-drv-microamp = <5020>;
|
||||
@ -72,7 +72,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
||||
|
||||
pinctrl-0 = <ð_phy_reset_pin>;
|
||||
pinctrl-names = "default";
|
||||
@@ -39,3 +40,7 @@
|
||||
@@ -42,3 +43,7 @@
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -96,8 +96,8 @@ Signed-off-by: hmz007 <hmz007@gmail.com>
|
||||
+};
|
||||
+
|
||||
&gmac2io {
|
||||
phy-handle = <&yt8531c>;
|
||||
phy-mode = "rgmii-id";
|
||||
/delete-property/ tx_delay;
|
||||
/delete-property/ rx_delay;
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts
|
||||
@@ -134,6 +134,64 @@
|
||||
|
Loading…
x
Reference in New Issue
Block a user