Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
This commit is contained in:
commit
06a6df4340
@ -1195,9 +1195,11 @@ endif
|
||||
|
||||
config KERNEL_NET_L3_MASTER_DEV
|
||||
bool "L3 Master device support"
|
||||
default y if !SMALL_FLASH
|
||||
help
|
||||
This module provides glue between core networking code and device
|
||||
drivers to support L3 master devices like VRF.
|
||||
Increases the compressed kernel size by ~4kB (as of Linux 6.6).
|
||||
|
||||
config KERNEL_XDP_SOCKETS
|
||||
bool "XDP sockets support"
|
||||
|
@ -936,7 +936,8 @@ UBOOT_TARGETS := \
|
||||
UBOOT_CUSTOMIZE_CONFIG := \
|
||||
--disable TOOLS_KWBIMAGE \
|
||||
--disable TOOLS_LIBCRYPTO \
|
||||
--disable TOOLS_MKEFICAPSULE
|
||||
--disable TOOLS_MKEFICAPSULE \
|
||||
--enable SERIAL_RX_BUFFER
|
||||
|
||||
ifdef CONFIG_TARGET_mediatek
|
||||
UBOOT_MAKE_FLAGS += $(UBOOT_IMAGE:.fip=.bin)
|
||||
|
@ -0,0 +1,63 @@
|
||||
From 72b4ba8417d33516b8489bac3c90dbbbf781a3d2 Mon Sep 17 00:00:00 2001
|
||||
From: Weijie Gao <weijie.gao@mediatek.com>
|
||||
Date: Tue, 29 Oct 2024 17:47:10 +0800
|
||||
Subject: [PATCH 1/3] menu: fix the logic checking whether ESC key is pressed
|
||||
|
||||
It's observed that the bootmenu on a serial console sometimes
|
||||
incorrectly quitted with superfluous characters filled to command
|
||||
line input:
|
||||
|
||||
> *** U-Boot Boot Menu ***
|
||||
>
|
||||
> 1. Startup system (Default)
|
||||
> 2. Upgrade firmware
|
||||
> 3. Upgrade ATF BL2
|
||||
> 4. Upgrade ATF FIP
|
||||
> 5. Load image
|
||||
> 0. U-Boot console
|
||||
>
|
||||
>
|
||||
> Press UP/DOWN to move, ENTER to select, ESC to quit
|
||||
>MT7988> [B
|
||||
|
||||
Analysis shows it was caused by the wrong logic of bootmenu_loop:
|
||||
|
||||
At first the bootmenu_loop received the first ESC char correctly.
|
||||
|
||||
However, during the second call to bootmenu_loop, there's no data
|
||||
in the UART Rx FIFO. Due to the low baudrate, the second char of
|
||||
the down array key sequence hasn't be fully received.
|
||||
|
||||
But bootmenu_loop just did a mdelay(10), and then treated it as a
|
||||
single ESC key press event. It didn't even try tstc() again after
|
||||
the 10ms timeout.
|
||||
|
||||
This patch fixes this issue by letting bootmenu_loop check tstc()
|
||||
twice.
|
||||
|
||||
Tested-By: E Shattow <lucent@gmail.com>
|
||||
Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>
|
||||
---
|
||||
common/menu.c | 5 +++--
|
||||
1 file changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/common/menu.c
|
||||
+++ b/common/menu.c
|
||||
@@ -525,14 +525,15 @@ enum bootmenu_key bootmenu_loop(struct b
|
||||
struct cli_ch_state *cch)
|
||||
{
|
||||
enum bootmenu_key key;
|
||||
- int c;
|
||||
+ int c, errchar = 0;
|
||||
|
||||
c = cli_ch_process(cch, 0);
|
||||
if (!c) {
|
||||
while (!c && !tstc()) {
|
||||
schedule();
|
||||
mdelay(10);
|
||||
- c = cli_ch_process(cch, -ETIMEDOUT);
|
||||
+ c = cli_ch_process(cch, errchar);
|
||||
+ errchar = -ETIMEDOUT;
|
||||
}
|
||||
if (!c) {
|
||||
c = getchar();
|
@ -0,0 +1,112 @@
|
||||
From f1cbdd3330f0055dfbff0ef7d86276c4cc3cff2a Mon Sep 17 00:00:00 2001
|
||||
From: Weijie Gao <weijie.gao@mediatek.com>
|
||||
Date: Tue, 29 Oct 2024 17:47:16 +0800
|
||||
Subject: [PATCH 2/3] menu: add support to check if menu needs to be reprinted
|
||||
|
||||
This patch adds a new callback named need_reprint for menu.
|
||||
The need_reprint will be called before printing the menu. If the
|
||||
callback exists and returns FALSE, menu printing will be canceled.
|
||||
|
||||
This is very useful if the menu was not changed. It can save time
|
||||
for serial-based menu to handle more input data.
|
||||
|
||||
Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>
|
||||
---
|
||||
boot/pxe_utils.c | 2 +-
|
||||
cmd/bootmenu.c | 2 +-
|
||||
cmd/eficonfig.c | 2 +-
|
||||
common/menu.c | 11 +++++++++++
|
||||
include/menu.h | 1 +
|
||||
5 files changed, 15 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/boot/pxe_utils.c
|
||||
+++ b/boot/pxe_utils.c
|
||||
@@ -1449,7 +1449,7 @@ static struct menu *pxe_menu_to_menu(str
|
||||
* Create a menu and add items for all the labels.
|
||||
*/
|
||||
m = menu_create(cfg->title, DIV_ROUND_UP(cfg->timeout, 10),
|
||||
- cfg->prompt, NULL, label_print, NULL, NULL);
|
||||
+ cfg->prompt, NULL, label_print, NULL, NULL, NULL);
|
||||
if (!m)
|
||||
return NULL;
|
||||
|
||||
--- a/cmd/bootmenu.c
|
||||
+++ b/cmd/bootmenu.c
|
||||
@@ -506,7 +506,7 @@ static enum bootmenu_ret bootmenu_show(i
|
||||
|
||||
menu = menu_create(NULL, bootmenu->delay, 1, menu_display_statusline,
|
||||
bootmenu_print_entry, bootmenu_choice_entry,
|
||||
- bootmenu);
|
||||
+ NULL, bootmenu);
|
||||
if (!menu) {
|
||||
bootmenu_destroy(bootmenu);
|
||||
return BOOTMENU_RET_FAIL;
|
||||
--- a/cmd/eficonfig.c
|
||||
+++ b/cmd/eficonfig.c
|
||||
@@ -443,7 +443,7 @@ efi_status_t eficonfig_process_common(st
|
||||
efi_menu->menu_desc = menu_desc;
|
||||
|
||||
menu = menu_create(NULL, 0, 1, display_statusline, item_data_print,
|
||||
- item_choice, efi_menu);
|
||||
+ item_choice, NULL, efi_menu);
|
||||
if (!menu)
|
||||
return EFI_INVALID_PARAMETER;
|
||||
|
||||
--- a/common/menu.c
|
||||
+++ b/common/menu.c
|
||||
@@ -43,6 +43,7 @@ struct menu {
|
||||
void (*display_statusline)(struct menu *);
|
||||
void (*item_data_print)(void *);
|
||||
char *(*item_choice)(void *);
|
||||
+ bool (*need_reprint)(void *);
|
||||
void *item_choice_data;
|
||||
struct list_head items;
|
||||
int item_cnt;
|
||||
@@ -117,6 +118,11 @@ static inline void *menu_item_destroy(st
|
||||
*/
|
||||
static inline void menu_display(struct menu *m)
|
||||
{
|
||||
+ if (m->need_reprint) {
|
||||
+ if (!m->need_reprint(m->item_choice_data))
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
if (m->title) {
|
||||
puts(m->title);
|
||||
putc('\n');
|
||||
@@ -362,6 +368,9 @@ int menu_item_add(struct menu *m, char *
|
||||
* item. Returns a key string corresponding to the chosen item or NULL if
|
||||
* no item has been selected.
|
||||
*
|
||||
+ * need_reprint - If not NULL, will be called before printing the menu.
|
||||
+ * Returning FALSE means the menu does not need reprint.
|
||||
+ *
|
||||
* item_choice_data - Will be passed as the argument to the item_choice function
|
||||
*
|
||||
* Returns a pointer to the menu if successful, or NULL if there is
|
||||
@@ -371,6 +380,7 @@ struct menu *menu_create(char *title, in
|
||||
void (*display_statusline)(struct menu *),
|
||||
void (*item_data_print)(void *),
|
||||
char *(*item_choice)(void *),
|
||||
+ bool (*need_reprint)(void *),
|
||||
void *item_choice_data)
|
||||
{
|
||||
struct menu *m;
|
||||
@@ -386,6 +396,7 @@ struct menu *menu_create(char *title, in
|
||||
m->display_statusline = display_statusline;
|
||||
m->item_data_print = item_data_print;
|
||||
m->item_choice = item_choice;
|
||||
+ m->need_reprint = need_reprint;
|
||||
m->item_choice_data = item_choice_data;
|
||||
m->item_cnt = 0;
|
||||
|
||||
--- a/include/menu.h
|
||||
+++ b/include/menu.h
|
||||
@@ -13,6 +13,7 @@ struct menu *menu_create(char *title, in
|
||||
void (*display_statusline)(struct menu *),
|
||||
void (*item_data_print)(void *),
|
||||
char *(*item_choice)(void *),
|
||||
+ bool (*need_reprint)(void *),
|
||||
void *item_choice_data);
|
||||
int menu_default_set(struct menu *m, char *item_key);
|
||||
int menu_get_choice(struct menu *m, void **choice);
|
@ -0,0 +1,75 @@
|
||||
From 702752cfae954648d6133bdff19283343b3339ef Mon Sep 17 00:00:00 2001
|
||||
From: Weijie Gao <weijie.gao@mediatek.com>
|
||||
Date: Tue, 29 Oct 2024 17:47:22 +0800
|
||||
Subject: [PATCH 3/3] bootmenu: add reprint check
|
||||
|
||||
Record the last active menu item and check if it equals to the
|
||||
current selected item before reprint.
|
||||
|
||||
Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>
|
||||
---
|
||||
cmd/bootmenu.c | 16 +++++++++++++++-
|
||||
include/menu.h | 1 +
|
||||
2 files changed, 16 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/cmd/bootmenu.c
|
||||
+++ b/cmd/bootmenu.c
|
||||
@@ -103,11 +103,13 @@ static char *bootmenu_choice_entry(void
|
||||
|
||||
switch (key) {
|
||||
case BKEY_UP:
|
||||
+ menu->last_active = menu->active;
|
||||
if (menu->active > 0)
|
||||
--menu->active;
|
||||
/* no menu key selected, regenerate menu */
|
||||
return NULL;
|
||||
case BKEY_DOWN:
|
||||
+ menu->last_active = menu->active;
|
||||
if (menu->active < menu->count - 1)
|
||||
++menu->active;
|
||||
/* no menu key selected, regenerate menu */
|
||||
@@ -133,6 +135,17 @@ static char *bootmenu_choice_entry(void
|
||||
return NULL;
|
||||
}
|
||||
|
||||
+static bool bootmenu_need_reprint(void *data)
|
||||
+{
|
||||
+ struct bootmenu_data *menu = data;
|
||||
+ bool need_reprint;
|
||||
+
|
||||
+ need_reprint = menu->last_active != menu->active;
|
||||
+ menu->last_active = menu->active;
|
||||
+
|
||||
+ return need_reprint;
|
||||
+}
|
||||
+
|
||||
static void bootmenu_destroy(struct bootmenu_data *menu)
|
||||
{
|
||||
struct bootmenu_entry *iter = menu->first;
|
||||
@@ -332,6 +345,7 @@ static struct bootmenu_data *bootmenu_cr
|
||||
|
||||
menu->delay = delay;
|
||||
menu->active = 0;
|
||||
+ menu->last_active = -1;
|
||||
menu->first = NULL;
|
||||
|
||||
default_str = env_get("bootmenu_default");
|
||||
@@ -506,7 +520,7 @@ static enum bootmenu_ret bootmenu_show(i
|
||||
|
||||
menu = menu_create(NULL, bootmenu->delay, 1, menu_display_statusline,
|
||||
bootmenu_print_entry, bootmenu_choice_entry,
|
||||
- NULL, bootmenu);
|
||||
+ bootmenu_need_reprint, bootmenu);
|
||||
if (!menu) {
|
||||
bootmenu_destroy(bootmenu);
|
||||
return BOOTMENU_RET_FAIL;
|
||||
--- a/include/menu.h
|
||||
+++ b/include/menu.h
|
||||
@@ -40,6 +40,7 @@ int menu_show(int bootdelay);
|
||||
struct bootmenu_data {
|
||||
int delay; /* delay for autoboot */
|
||||
int active; /* active menu entry */
|
||||
+ int last_active; /* last active menu entry */
|
||||
int count; /* total count of menu entries */
|
||||
struct bootmenu_entry *first; /* first menu entry */
|
||||
};
|
@ -35,7 +35,7 @@ Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>
|
||||
}
|
||||
|
||||
switch (key) {
|
||||
@@ -112,6 +113,12 @@ static char *bootmenu_choice_entry(void
|
||||
@@ -114,6 +115,12 @@ static char *bootmenu_choice_entry(void
|
||||
++menu->active;
|
||||
/* no menu key selected, regenerate menu */
|
||||
return NULL;
|
||||
@ -48,7 +48,7 @@ Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>
|
||||
case BKEY_SELECT:
|
||||
iter = menu->first;
|
||||
for (i = 0; i < menu->active; ++i)
|
||||
@@ -169,6 +176,9 @@ static int prepare_bootmenu_entry(struct
|
||||
@@ -182,6 +189,9 @@ static int prepare_bootmenu_entry(struct
|
||||
unsigned short int i = *index;
|
||||
struct bootmenu_entry *entry = NULL;
|
||||
struct bootmenu_entry *iter = *current;
|
||||
@ -58,7 +58,7 @@ Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>
|
||||
|
||||
while ((option = bootmenu_getoption(i))) {
|
||||
|
||||
@@ -183,11 +193,24 @@ static int prepare_bootmenu_entry(struct
|
||||
@@ -196,11 +206,24 @@ static int prepare_bootmenu_entry(struct
|
||||
if (!entry)
|
||||
return -ENOMEM;
|
||||
|
||||
@ -84,15 +84,15 @@ Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>
|
||||
|
||||
entry->command = strdup(sep + 1);
|
||||
if (!entry->command) {
|
||||
@@ -333,6 +356,7 @@ static struct bootmenu_data *bootmenu_cr
|
||||
menu->delay = delay;
|
||||
@@ -347,6 +370,7 @@ static struct bootmenu_data *bootmenu_cr
|
||||
menu->active = 0;
|
||||
menu->last_active = -1;
|
||||
menu->first = NULL;
|
||||
+ menu->last_choiced = false;
|
||||
|
||||
default_str = env_get("bootmenu_default");
|
||||
if (default_str)
|
||||
@@ -368,9 +392,9 @@ static struct bootmenu_data *bootmenu_cr
|
||||
@@ -382,9 +406,9 @@ static struct bootmenu_data *bootmenu_cr
|
||||
|
||||
/* Add Quit entry if exiting bootmenu is disabled */
|
||||
if (!IS_ENABLED(CONFIG_BOOTMENU_DISABLE_UBOOT_CONSOLE))
|
||||
@ -106,7 +106,7 @@ Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>
|
||||
free(entry);
|
||||
--- a/common/menu.c
|
||||
+++ b/common/menu.c
|
||||
@@ -48,6 +48,33 @@ struct menu {
|
||||
@@ -49,6 +49,33 @@ struct menu {
|
||||
int item_cnt;
|
||||
};
|
||||
|
||||
@ -140,7 +140,7 @@ Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>
|
||||
/*
|
||||
* An iterator function for menu items. callback will be called for each item
|
||||
* in m, with m, a pointer to the item, and extra being passed to callback. If
|
||||
@@ -426,7 +453,7 @@ int menu_destroy(struct menu *m)
|
||||
@@ -437,7 +464,7 @@ int menu_destroy(struct menu *m)
|
||||
}
|
||||
|
||||
enum bootmenu_key bootmenu_autoboot_loop(struct bootmenu_data *menu,
|
||||
@ -149,7 +149,7 @@ Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>
|
||||
{
|
||||
enum bootmenu_key key = BKEY_NONE;
|
||||
int i, c;
|
||||
@@ -461,6 +488,19 @@ enum bootmenu_key bootmenu_autoboot_loop
|
||||
@@ -472,6 +499,19 @@ enum bootmenu_key bootmenu_autoboot_loop
|
||||
break;
|
||||
default:
|
||||
key = BKEY_NONE;
|
||||
@ -169,7 +169,7 @@ Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>
|
||||
break;
|
||||
}
|
||||
break;
|
||||
@@ -481,7 +521,8 @@ enum bootmenu_key bootmenu_autoboot_loop
|
||||
@@ -492,7 +532,8 @@ enum bootmenu_key bootmenu_autoboot_loop
|
||||
return key;
|
||||
}
|
||||
|
||||
@ -179,7 +179,7 @@ Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>
|
||||
{
|
||||
enum bootmenu_key key;
|
||||
|
||||
@@ -513,6 +554,20 @@ enum bootmenu_key bootmenu_conv_key(int
|
||||
@@ -524,6 +565,20 @@ enum bootmenu_key bootmenu_conv_key(int
|
||||
case ' ':
|
||||
key = BKEY_SPACE;
|
||||
break;
|
||||
@ -200,15 +200,16 @@ Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>
|
||||
default:
|
||||
key = BKEY_NONE;
|
||||
break;
|
||||
@@ -522,11 +577,16 @@ enum bootmenu_key bootmenu_conv_key(int
|
||||
@@ -533,11 +588,17 @@ enum bootmenu_key bootmenu_conv_key(int
|
||||
}
|
||||
|
||||
enum bootmenu_key bootmenu_loop(struct bootmenu_data *menu,
|
||||
- struct cli_ch_state *cch)
|
||||
+ struct cli_ch_state *cch, int *choice)
|
||||
+ struct cli_ch_state *cch,
|
||||
+ int *choice)
|
||||
{
|
||||
enum bootmenu_key key;
|
||||
int c;
|
||||
int c, errchar = 0;
|
||||
|
||||
+ if (menu->last_choiced) {
|
||||
+ menu->last_choiced = false;
|
||||
@ -218,7 +219,7 @@ Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>
|
||||
c = cli_ch_process(cch, 0);
|
||||
if (!c) {
|
||||
while (!c && !tstc()) {
|
||||
@@ -540,7 +600,7 @@ enum bootmenu_key bootmenu_loop(struct b
|
||||
@@ -552,7 +613,7 @@ enum bootmenu_key bootmenu_loop(struct b
|
||||
}
|
||||
}
|
||||
|
||||
@ -238,7 +239,7 @@ Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>
|
||||
struct cli_ch_state;
|
||||
struct menu;
|
||||
|
||||
@@ -19,6 +21,8 @@ int menu_get_choice(struct menu *m, void
|
||||
@@ -20,6 +22,8 @@ int menu_get_choice(struct menu *m, void
|
||||
int menu_item_add(struct menu *m, char *item_key, void *item_data);
|
||||
int menu_destroy(struct menu *m);
|
||||
int menu_default_choice(struct menu *m, void **choice);
|
||||
@ -247,15 +248,15 @@ Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>
|
||||
|
||||
/**
|
||||
* menu_show() Show a boot menu
|
||||
@@ -41,6 +45,7 @@ struct bootmenu_data {
|
||||
int active; /* active menu entry */
|
||||
@@ -43,6 +47,7 @@ struct bootmenu_data {
|
||||
int last_active; /* last active menu entry */
|
||||
int count; /* total count of menu entries */
|
||||
struct bootmenu_entry *first; /* first menu entry */
|
||||
+ bool last_choiced;
|
||||
};
|
||||
|
||||
/** enum bootmenu_key - keys that can be returned by the bootmenu */
|
||||
@@ -51,6 +56,7 @@ enum bootmenu_key {
|
||||
@@ -53,6 +58,7 @@ enum bootmenu_key {
|
||||
BKEY_SELECT,
|
||||
BKEY_QUIT,
|
||||
BKEY_SAVE,
|
||||
@ -263,7 +264,7 @@ Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>
|
||||
|
||||
/* 'extra' keys, which are used by menus but not cedit */
|
||||
BKEY_PLUS,
|
||||
@@ -81,7 +87,7 @@ enum bootmenu_key {
|
||||
@@ -83,7 +89,7 @@ enum bootmenu_key {
|
||||
* anything else: KEY_NONE
|
||||
*/
|
||||
enum bootmenu_key bootmenu_autoboot_loop(struct bootmenu_data *menu,
|
||||
@ -272,7 +273,7 @@ Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>
|
||||
|
||||
/**
|
||||
* bootmenu_loop() - handle waiting for a keypress when autoboot is disabled
|
||||
@@ -107,7 +113,7 @@ enum bootmenu_key bootmenu_autoboot_loop
|
||||
@@ -109,7 +115,7 @@ enum bootmenu_key bootmenu_autoboot_loop
|
||||
* Space: BKEY_SPACE
|
||||
*/
|
||||
enum bootmenu_key bootmenu_loop(struct bootmenu_data *menu,
|
||||
@ -281,7 +282,7 @@ Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>
|
||||
|
||||
/**
|
||||
* bootmenu_conv_key() - Convert a U-Boot keypress into a menu key
|
||||
@@ -115,6 +121,7 @@ enum bootmenu_key bootmenu_loop(struct b
|
||||
@@ -117,6 +123,7 @@ enum bootmenu_key bootmenu_loop(struct b
|
||||
* @ichar: Keypress to convert (ASCII, including control characters)
|
||||
* Returns: Menu key that corresponds to @ichar, or BKEY_NONE if none
|
||||
*/
|
||||
|
@ -1,6 +1,6 @@
|
||||
--- a/cmd/bootmenu.c
|
||||
+++ b/cmd/bootmenu.c
|
||||
@@ -451,7 +451,11 @@ static void menu_display_statusline(stru
|
||||
@@ -465,7 +465,11 @@ static void menu_display_statusline(stru
|
||||
printf(ANSI_CURSOR_POSITION, 1, 1);
|
||||
puts(ANSI_CLEAR_LINE);
|
||||
printf(ANSI_CURSOR_POSITION, 2, 3);
|
||||
@ -13,7 +13,7 @@
|
||||
puts(ANSI_CLEAR_LINE_TO_END);
|
||||
printf(ANSI_CURSOR_POSITION, 3, 1);
|
||||
puts(ANSI_CLEAR_LINE);
|
||||
@@ -536,6 +540,7 @@ static enum bootmenu_ret bootmenu_show(i
|
||||
@@ -550,6 +554,7 @@ static enum bootmenu_ret bootmenu_show(i
|
||||
return BOOTMENU_RET_FAIL;
|
||||
}
|
||||
|
||||
@ -23,8 +23,8 @@
|
||||
goto cleanup;
|
||||
--- a/include/menu.h
|
||||
+++ b/include/menu.h
|
||||
@@ -45,6 +45,7 @@ struct bootmenu_data {
|
||||
int active; /* active menu entry */
|
||||
@@ -47,6 +47,7 @@ struct bootmenu_data {
|
||||
int last_active; /* last active menu entry */
|
||||
int count; /* total count of menu entries */
|
||||
struct bootmenu_entry *first; /* first menu entry */
|
||||
+ char *mtitle; /* custom menu title */
|
||||
|
@ -4,7 +4,7 @@ include $(INCLUDE_DIR)/kernel.mk
|
||||
PKG_NAME:=bcm27xx-gpu-fw
|
||||
PKG_VERSION:=2024.10.08
|
||||
PKG_VERSION_REAL:=1.$(subst .,,$(PKG_VERSION))
|
||||
PKG_RELEASE:=1
|
||||
PKG_RELEASE:=2
|
||||
|
||||
PKG_SOURCE:=raspi-firmware_$(PKG_VERSION_REAL).orig.tar.xz
|
||||
PKG_SOURCE_URL:=https://github.com/raspberrypi/firmware/releases/download/$(PKG_VERSION_REAL)
|
||||
@ -33,6 +33,10 @@ define Build/Compile
|
||||
true
|
||||
endef
|
||||
|
||||
define Package/bcm27xx-gpu-fw/install
|
||||
true
|
||||
endef
|
||||
|
||||
define Build/InstallDev
|
||||
$(CP) $(PKG_BUILD_DIR)/boot/bootcode.bin $(KERNEL_BUILD_DIR)
|
||||
$(CP) $(PKG_BUILD_DIR)/boot/LICENCE.broadcom $(KERNEL_BUILD_DIR)
|
||||
|
@ -87,7 +87,7 @@ Signed-off-by: Robert Marko <robert.marko@sartura.hr>
|
||||
if (!dsa_port_offloads_bridge(dsa_to_port(ds, i), &bridge))
|
||||
--- /dev/null
|
||||
+++ b/drivers/net/dsa/qca/qca8k-ipq4019.c
|
||||
@@ -0,0 +1,946 @@
|
||||
@@ -0,0 +1,948 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0
|
||||
+/*
|
||||
+ * Copyright (C) 2009 Felix Fietkau <nbd@nbd.name>
|
||||
@ -989,7 +989,9 @@ Signed-off-by: Robert Marko <robert.marko@sartura.hr>
|
||||
+ priv->ds->num_ports = QCA8K_IPQ4019_NUM_PORTS;
|
||||
+ priv->ds->priv = priv;
|
||||
+ priv->ds->ops = &qca8k_ipq4019_switch_ops;
|
||||
+ mutex_init(&priv->reg_mutex);
|
||||
+ ret = devm_mutex_init(dev, &priv->reg_mutex);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+ platform_set_drvdata(pdev, priv);
|
||||
+
|
||||
+ return dsa_register_switch(priv->ds);
|
||||
|
@ -297,11 +297,22 @@
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&pio {
|
||||
pwm0_pins: pwm0-pins {
|
||||
mux {
|
||||
groups = "pwm0";
|
||||
function = "pwm";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&pwm {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&fan {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pwm0_pins>;
|
||||
pwms = <&pwm 0 50000>;
|
||||
status = "okay";
|
||||
};
|
||||
|
@ -776,21 +776,39 @@ static int mt7988_pwm1_funcs[] = { 1 };
|
||||
static int mt7988_pwm2_pins[] = { 80 };
|
||||
static int mt7988_pwm2_funcs[] = { 2 };
|
||||
|
||||
static int mt7988_pwm2_0_pins[] = { 58 };
|
||||
static int mt7988_pwm2_0_funcs[] = { 5 };
|
||||
|
||||
static int mt7988_pwm3_pins[] = { 81 };
|
||||
static int mt7988_pwm3_funcs[] = { 2 };
|
||||
|
||||
static int mt7988_pwm3_0_pins[] = { 59 };
|
||||
static int mt7988_pwm3_0_funcs[] = { 5 };
|
||||
|
||||
static int mt7988_pwm4_pins[] = { 82 };
|
||||
static int mt7988_pwm4_funcs[] = { 2 };
|
||||
|
||||
static int mt7988_pwm4_0_pins[] = { 60 };
|
||||
static int mt7988_pwm4_0_funcs[] = { 5 };
|
||||
|
||||
static int mt7988_pwm5_pins[] = { 83 };
|
||||
static int mt7988_pwm5_funcs[] = { 2 };
|
||||
|
||||
static int mt7988_pwm5_0_pins[] = { 61 };
|
||||
static int mt7988_pwm5_0_funcs[] = { 5 };
|
||||
|
||||
static int mt7988_pwm6_pins[] = { 69 };
|
||||
static int mt7988_pwm6_funcs[] = { 3 };
|
||||
|
||||
static int mt7988_pwm6_0_pins[] = { 62 };
|
||||
static int mt7988_pwm6_0_funcs[] = { 5 };
|
||||
|
||||
static int mt7988_pwm7_pins[] = { 70 };
|
||||
static int mt7988_pwm7_funcs[] = { 3 };
|
||||
|
||||
static int mt7988_pwm7_0_pins[] = { 4 };
|
||||
static int mt7988_pwm7_0_funcs[] = { 3 };
|
||||
|
||||
/* dfd */
|
||||
static int mt7988_dfd_pins[] = { 0, 1, 2, 3, 4 };
|
||||
static int mt7988_dfd_funcs[] = { 4, 4, 4, 4, 4 };
|
||||
@ -1113,6 +1131,8 @@ static const struct group_desc mt7988_groups[] = {
|
||||
PINCTRL_PIN_GROUP("xfi_phy_pll_i2c0", mt7988_xfi_phy_pll_i2c0),
|
||||
/* @GPIO(3,4): xfi_phy_pll_i2c1 */
|
||||
PINCTRL_PIN_GROUP("xfi_phy_pll_i2c1", mt7988_xfi_phy_pll_i2c1),
|
||||
/* @GPIO(4): pwm7 */
|
||||
PINCTRL_PIN_GROUP("pwm7_0", mt7988_pwm7_0),
|
||||
/* @GPIO(5,6) i2c0_0 */
|
||||
PINCTRL_PIN_GROUP("i2c0_0", mt7988_i2c0_0),
|
||||
/* @GPIO(5,6) i2c1_sfp */
|
||||
@ -1243,6 +1263,14 @@ static const struct group_desc mt7988_groups[] = {
|
||||
PINCTRL_PIN_GROUP("wo2_jtag", mt7988_wo2_jtag),
|
||||
/* @GPIO(57) pwm0 */
|
||||
PINCTRL_PIN_GROUP("pwm0", mt7988_pwm0),
|
||||
/* @GPIO(58) pwm2_0 */
|
||||
PINCTRL_PIN_GROUP("pwm2_0", mt7988_pwm2_0),
|
||||
/* @GPIO(59) pwm3_0 */
|
||||
PINCTRL_PIN_GROUP("pwm3_0", mt7988_pwm3_0),
|
||||
/* @GPIO(60) pwm4_0 */
|
||||
PINCTRL_PIN_GROUP("pwm4_0", mt7988_pwm4_0),
|
||||
/* @GPIO(61) pwm5_0 */
|
||||
PINCTRL_PIN_GROUP("pwm5_0", mt7988_pwm5_0),
|
||||
/* @GPIO(58,59,60,61,62) jtag */
|
||||
PINCTRL_PIN_GROUP("jtag", mt7988_jtag),
|
||||
/* @GPIO(58,59,60,61,62) tops_jtag0_1 */
|
||||
@ -1256,6 +1284,8 @@ static const struct group_desc mt7988_groups[] = {
|
||||
PINCTRL_PIN_GROUP("gbe1_led1", mt7988_gbe1_led1),
|
||||
PINCTRL_PIN_GROUP("gbe2_led1", mt7988_gbe2_led1),
|
||||
PINCTRL_PIN_GROUP("gbe3_led1", mt7988_gbe3_led1),
|
||||
/* @GPIO(62) pwm6_0 */
|
||||
PINCTRL_PIN_GROUP("pwm6_0", mt7988_pwm6_0),
|
||||
/* @GPIO(62) 2p5gbe_led1 */
|
||||
PINCTRL_PIN_GROUP("2p5gbe_led1", mt7988_2p5gbe_led1),
|
||||
/* @GPIO(64,65,66,67) gbe_led0 */
|
||||
@ -1336,7 +1366,8 @@ static const char * const mt7988_int_usxgmii_groups[] = {
|
||||
"int_usxgmii",
|
||||
};
|
||||
static const char * const mt7988_pwm_groups[] = {
|
||||
"pwm0", "pwm1", "pwm2", "pwm3", "pwm4", "pwm5", "pwm6", "pwm7"
|
||||
"pwm0", "pwm1", "pwm2", "pwm2_0", "pwm3", "pwm3_0", "pwm4", "pwm4_0",
|
||||
"pwm5", "pwm5_0", "pwm6", "pwm6_0", "pwm7", "pwm7_0",
|
||||
};
|
||||
static const char * const mt7988_dfd_groups[] = {
|
||||
"dfd",
|
||||
|
@ -1,6 +1,6 @@
|
||||
--- a/drivers/net/phy/Kconfig
|
||||
+++ b/drivers/net/phy/Kconfig
|
||||
@@ -334,6 +334,8 @@ config REALTEK_PHY
|
||||
@@ -399,6 +399,8 @@ config REALTEK_PHY
|
||||
help
|
||||
Supports the Realtek 821x PHY.
|
||||
|
||||
@ -11,11 +11,11 @@
|
||||
help
|
||||
--- a/drivers/net/phy/Makefile
|
||||
+++ b/drivers/net/phy/Makefile
|
||||
@@ -85,6 +85,7 @@ obj-$(CONFIG_ADIN_PHY) += adin.o
|
||||
@@ -100,6 +100,7 @@ obj-$(CONFIG_NXP_TJA11XX_PHY) += nxp-tja
|
||||
obj-y += qcom/
|
||||
obj-$(CONFIG_QSEMI_PHY) += qsemi.o
|
||||
obj-$(CONFIG_REALTEK_PHY) += realtek.o
|
||||
+obj-y += rtl8261n/
|
||||
obj-$(CONFIG_RENESAS_PHY) += uPD60620.o
|
||||
obj-$(CONFIG_ROCKCHIP_PHY) += rockchip.o
|
||||
obj-$(CONFIG_SMSC_PHY) += smsc.o
|
||||
obj-$(CONFIG_RTL8367S_GSW) += rtk/
|
||||
|
@ -1,5 +1,3 @@
|
||||
diff --git a/drivers/net/pcs/pcs-mtk-usxgmii.c b/drivers/net/pcs/pcs-mtk-usxgmii.c
|
||||
index 9af9035..9caab92 100644
|
||||
--- a/drivers/net/pcs/pcs-mtk-usxgmii.c
|
||||
+++ b/drivers/net/pcs/pcs-mtk-usxgmii.c
|
||||
@@ -52,6 +52,12 @@
|
||||
@ -23,7 +21,7 @@ index 9af9035..9caab92 100644
|
||||
unsigned int neg_mode;
|
||||
struct list_head node;
|
||||
};
|
||||
@@ -155,6 +162,10 @@ static int mtk_usxgmii_pcs_config(struct phylink_pcs *pcs, unsigned int neg_mode
|
||||
@@ -155,6 +162,10 @@ static int mtk_usxgmii_pcs_config(struct
|
||||
|
||||
mtk_usxgmii_reset(mpcs);
|
||||
|
||||
@ -34,7 +32,7 @@ index 9af9035..9caab92 100644
|
||||
/* Setup USXGMII AN ctrl */
|
||||
mtk_m32(mpcs, RG_PCS_AN_CTRL0,
|
||||
USXGMII_AN_SYNC_CNT | USXGMII_AN_ENABLE,
|
||||
@@ -332,6 +343,7 @@ static const struct phylink_pcs_ops mtk_usxgmii_pcs_ops = {
|
||||
@@ -332,6 +343,7 @@ static const struct phylink_pcs_ops mtk_
|
||||
static int mtk_usxgmii_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct device *dev = &pdev->dev;
|
||||
@ -42,7 +40,7 @@ index 9af9035..9caab92 100644
|
||||
struct mtk_usxgmii_pcs *mpcs;
|
||||
|
||||
mpcs = devm_kzalloc(dev, sizeof(*mpcs), GFP_KERNEL);
|
||||
@@ -342,6 +354,13 @@ static int mtk_usxgmii_probe(struct platform_device *pdev)
|
||||
@@ -342,6 +354,13 @@ static int mtk_usxgmii_probe(struct plat
|
||||
if (IS_ERR(mpcs->base))
|
||||
return PTR_ERR(mpcs->base);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user