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
|
config KERNEL_NET_L3_MASTER_DEV
|
||||||
bool "L3 Master device support"
|
bool "L3 Master device support"
|
||||||
|
default y if !SMALL_FLASH
|
||||||
help
|
help
|
||||||
This module provides glue between core networking code and device
|
This module provides glue between core networking code and device
|
||||||
drivers to support L3 master devices like VRF.
|
drivers to support L3 master devices like VRF.
|
||||||
|
Increases the compressed kernel size by ~4kB (as of Linux 6.6).
|
||||||
|
|
||||||
config KERNEL_XDP_SOCKETS
|
config KERNEL_XDP_SOCKETS
|
||||||
bool "XDP sockets support"
|
bool "XDP sockets support"
|
||||||
|
@ -936,7 +936,8 @@ UBOOT_TARGETS := \
|
|||||||
UBOOT_CUSTOMIZE_CONFIG := \
|
UBOOT_CUSTOMIZE_CONFIG := \
|
||||||
--disable TOOLS_KWBIMAGE \
|
--disable TOOLS_KWBIMAGE \
|
||||||
--disable TOOLS_LIBCRYPTO \
|
--disable TOOLS_LIBCRYPTO \
|
||||||
--disable TOOLS_MKEFICAPSULE
|
--disable TOOLS_MKEFICAPSULE \
|
||||||
|
--enable SERIAL_RX_BUFFER
|
||||||
|
|
||||||
ifdef CONFIG_TARGET_mediatek
|
ifdef CONFIG_TARGET_mediatek
|
||||||
UBOOT_MAKE_FLAGS += $(UBOOT_IMAGE:.fip=.bin)
|
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) {
|
switch (key) {
|
||||||
@@ -112,6 +113,12 @@ static char *bootmenu_choice_entry(void
|
@@ -114,6 +115,12 @@ static char *bootmenu_choice_entry(void
|
||||||
++menu->active;
|
++menu->active;
|
||||||
/* no menu key selected, regenerate menu */
|
/* no menu key selected, regenerate menu */
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -48,7 +48,7 @@ Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>
|
|||||||
case BKEY_SELECT:
|
case BKEY_SELECT:
|
||||||
iter = menu->first;
|
iter = menu->first;
|
||||||
for (i = 0; i < menu->active; ++i)
|
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;
|
unsigned short int i = *index;
|
||||||
struct bootmenu_entry *entry = NULL;
|
struct bootmenu_entry *entry = NULL;
|
||||||
struct bootmenu_entry *iter = *current;
|
struct bootmenu_entry *iter = *current;
|
||||||
@ -58,7 +58,7 @@ Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>
|
|||||||
|
|
||||||
while ((option = bootmenu_getoption(i))) {
|
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)
|
if (!entry)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
@ -84,15 +84,15 @@ Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>
|
|||||||
|
|
||||||
entry->command = strdup(sep + 1);
|
entry->command = strdup(sep + 1);
|
||||||
if (!entry->command) {
|
if (!entry->command) {
|
||||||
@@ -333,6 +356,7 @@ static struct bootmenu_data *bootmenu_cr
|
@@ -347,6 +370,7 @@ static struct bootmenu_data *bootmenu_cr
|
||||||
menu->delay = delay;
|
|
||||||
menu->active = 0;
|
menu->active = 0;
|
||||||
|
menu->last_active = -1;
|
||||||
menu->first = NULL;
|
menu->first = NULL;
|
||||||
+ menu->last_choiced = false;
|
+ menu->last_choiced = false;
|
||||||
|
|
||||||
default_str = env_get("bootmenu_default");
|
default_str = env_get("bootmenu_default");
|
||||||
if (default_str)
|
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 */
|
/* Add Quit entry if exiting bootmenu is disabled */
|
||||||
if (!IS_ENABLED(CONFIG_BOOTMENU_DISABLE_UBOOT_CONSOLE))
|
if (!IS_ENABLED(CONFIG_BOOTMENU_DISABLE_UBOOT_CONSOLE))
|
||||||
@ -106,7 +106,7 @@ Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>
|
|||||||
free(entry);
|
free(entry);
|
||||||
--- a/common/menu.c
|
--- a/common/menu.c
|
||||||
+++ b/common/menu.c
|
+++ b/common/menu.c
|
||||||
@@ -48,6 +48,33 @@ struct menu {
|
@@ -49,6 +49,33 @@ struct menu {
|
||||||
int item_cnt;
|
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
|
* 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
|
* 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,
|
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;
|
enum bootmenu_key key = BKEY_NONE;
|
||||||
int i, c;
|
int i, c;
|
||||||
@@ -461,6 +488,19 @@ enum bootmenu_key bootmenu_autoboot_loop
|
@@ -472,6 +499,19 @@ enum bootmenu_key bootmenu_autoboot_loop
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
key = BKEY_NONE;
|
key = BKEY_NONE;
|
||||||
@ -169,7 +169,7 @@ Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -481,7 +521,8 @@ enum bootmenu_key bootmenu_autoboot_loop
|
@@ -492,7 +532,8 @@ enum bootmenu_key bootmenu_autoboot_loop
|
||||||
return key;
|
return key;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -179,7 +179,7 @@ Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>
|
|||||||
{
|
{
|
||||||
enum bootmenu_key key;
|
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 ' ':
|
case ' ':
|
||||||
key = BKEY_SPACE;
|
key = BKEY_SPACE;
|
||||||
break;
|
break;
|
||||||
@ -200,15 +200,16 @@ Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>
|
|||||||
default:
|
default:
|
||||||
key = BKEY_NONE;
|
key = BKEY_NONE;
|
||||||
break;
|
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,
|
enum bootmenu_key bootmenu_loop(struct bootmenu_data *menu,
|
||||||
- struct cli_ch_state *cch)
|
- struct cli_ch_state *cch)
|
||||||
+ struct cli_ch_state *cch, int *choice)
|
+ struct cli_ch_state *cch,
|
||||||
|
+ int *choice)
|
||||||
{
|
{
|
||||||
enum bootmenu_key key;
|
enum bootmenu_key key;
|
||||||
int c;
|
int c, errchar = 0;
|
||||||
|
|
||||||
+ if (menu->last_choiced) {
|
+ if (menu->last_choiced) {
|
||||||
+ menu->last_choiced = false;
|
+ menu->last_choiced = false;
|
||||||
@ -218,7 +219,7 @@ Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>
|
|||||||
c = cli_ch_process(cch, 0);
|
c = cli_ch_process(cch, 0);
|
||||||
if (!c) {
|
if (!c) {
|
||||||
while (!c && !tstc()) {
|
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 cli_ch_state;
|
||||||
struct menu;
|
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_item_add(struct menu *m, char *item_key, void *item_data);
|
||||||
int menu_destroy(struct menu *m);
|
int menu_destroy(struct menu *m);
|
||||||
int menu_default_choice(struct menu *m, void **choice);
|
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
|
* menu_show() Show a boot menu
|
||||||
@@ -41,6 +45,7 @@ struct bootmenu_data {
|
@@ -43,6 +47,7 @@ struct bootmenu_data {
|
||||||
int active; /* active menu entry */
|
int last_active; /* last active menu entry */
|
||||||
int count; /* total count of menu entries */
|
int count; /* total count of menu entries */
|
||||||
struct bootmenu_entry *first; /* first menu entry */
|
struct bootmenu_entry *first; /* first menu entry */
|
||||||
+ bool last_choiced;
|
+ bool last_choiced;
|
||||||
};
|
};
|
||||||
|
|
||||||
/** enum bootmenu_key - keys that can be returned by the bootmenu */
|
/** 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_SELECT,
|
||||||
BKEY_QUIT,
|
BKEY_QUIT,
|
||||||
BKEY_SAVE,
|
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 */
|
/* 'extra' keys, which are used by menus but not cedit */
|
||||||
BKEY_PLUS,
|
BKEY_PLUS,
|
||||||
@@ -81,7 +87,7 @@ enum bootmenu_key {
|
@@ -83,7 +89,7 @@ enum bootmenu_key {
|
||||||
* anything else: KEY_NONE
|
* anything else: KEY_NONE
|
||||||
*/
|
*/
|
||||||
enum bootmenu_key bootmenu_autoboot_loop(struct bootmenu_data *menu,
|
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
|
* 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
|
* Space: BKEY_SPACE
|
||||||
*/
|
*/
|
||||||
enum bootmenu_key bootmenu_loop(struct bootmenu_data *menu,
|
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
|
* 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)
|
* @ichar: Keypress to convert (ASCII, including control characters)
|
||||||
* Returns: Menu key that corresponds to @ichar, or BKEY_NONE if none
|
* Returns: Menu key that corresponds to @ichar, or BKEY_NONE if none
|
||||||
*/
|
*/
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/cmd/bootmenu.c
|
--- a/cmd/bootmenu.c
|
||||||
+++ b/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);
|
printf(ANSI_CURSOR_POSITION, 1, 1);
|
||||||
puts(ANSI_CLEAR_LINE);
|
puts(ANSI_CLEAR_LINE);
|
||||||
printf(ANSI_CURSOR_POSITION, 2, 3);
|
printf(ANSI_CURSOR_POSITION, 2, 3);
|
||||||
@ -13,7 +13,7 @@
|
|||||||
puts(ANSI_CLEAR_LINE_TO_END);
|
puts(ANSI_CLEAR_LINE_TO_END);
|
||||||
printf(ANSI_CURSOR_POSITION, 3, 1);
|
printf(ANSI_CURSOR_POSITION, 3, 1);
|
||||||
puts(ANSI_CLEAR_LINE);
|
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;
|
return BOOTMENU_RET_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -23,8 +23,8 @@
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
--- a/include/menu.h
|
--- a/include/menu.h
|
||||||
+++ b/include/menu.h
|
+++ b/include/menu.h
|
||||||
@@ -45,6 +45,7 @@ struct bootmenu_data {
|
@@ -47,6 +47,7 @@ struct bootmenu_data {
|
||||||
int active; /* active menu entry */
|
int last_active; /* last active menu entry */
|
||||||
int count; /* total count of menu entries */
|
int count; /* total count of menu entries */
|
||||||
struct bootmenu_entry *first; /* first menu entry */
|
struct bootmenu_entry *first; /* first menu entry */
|
||||||
+ char *mtitle; /* custom menu title */
|
+ char *mtitle; /* custom menu title */
|
||||||
|
@ -4,7 +4,7 @@ include $(INCLUDE_DIR)/kernel.mk
|
|||||||
PKG_NAME:=bcm27xx-gpu-fw
|
PKG_NAME:=bcm27xx-gpu-fw
|
||||||
PKG_VERSION:=2024.10.08
|
PKG_VERSION:=2024.10.08
|
||||||
PKG_VERSION_REAL:=1.$(subst .,,$(PKG_VERSION))
|
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:=raspi-firmware_$(PKG_VERSION_REAL).orig.tar.xz
|
||||||
PKG_SOURCE_URL:=https://github.com/raspberrypi/firmware/releases/download/$(PKG_VERSION_REAL)
|
PKG_SOURCE_URL:=https://github.com/raspberrypi/firmware/releases/download/$(PKG_VERSION_REAL)
|
||||||
@ -33,6 +33,10 @@ define Build/Compile
|
|||||||
true
|
true
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
define Package/bcm27xx-gpu-fw/install
|
||||||
|
true
|
||||||
|
endef
|
||||||
|
|
||||||
define Build/InstallDev
|
define Build/InstallDev
|
||||||
$(CP) $(PKG_BUILD_DIR)/boot/bootcode.bin $(KERNEL_BUILD_DIR)
|
$(CP) $(PKG_BUILD_DIR)/boot/bootcode.bin $(KERNEL_BUILD_DIR)
|
||||||
$(CP) $(PKG_BUILD_DIR)/boot/LICENCE.broadcom $(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))
|
if (!dsa_port_offloads_bridge(dsa_to_port(ds, i), &bridge))
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/drivers/net/dsa/qca/qca8k-ipq4019.c
|
+++ b/drivers/net/dsa/qca/qca8k-ipq4019.c
|
||||||
@@ -0,0 +1,946 @@
|
@@ -0,0 +1,948 @@
|
||||||
+// SPDX-License-Identifier: GPL-2.0
|
+// SPDX-License-Identifier: GPL-2.0
|
||||||
+/*
|
+/*
|
||||||
+ * Copyright (C) 2009 Felix Fietkau <nbd@nbd.name>
|
+ * 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->num_ports = QCA8K_IPQ4019_NUM_PORTS;
|
||||||
+ priv->ds->priv = priv;
|
+ priv->ds->priv = priv;
|
||||||
+ priv->ds->ops = &qca8k_ipq4019_switch_ops;
|
+ 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);
|
+ platform_set_drvdata(pdev, priv);
|
||||||
+
|
+
|
||||||
+ return dsa_register_switch(priv->ds);
|
+ return dsa_register_switch(priv->ds);
|
||||||
|
@ -297,11 +297,22 @@
|
|||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&pio {
|
||||||
|
pwm0_pins: pwm0-pins {
|
||||||
|
mux {
|
||||||
|
groups = "pwm0";
|
||||||
|
function = "pwm";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
&pwm {
|
&pwm {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
&fan {
|
&fan {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pwm0_pins>;
|
||||||
pwms = <&pwm 0 50000>;
|
pwms = <&pwm 0 50000>;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
@ -776,21 +776,39 @@ static int mt7988_pwm1_funcs[] = { 1 };
|
|||||||
static int mt7988_pwm2_pins[] = { 80 };
|
static int mt7988_pwm2_pins[] = { 80 };
|
||||||
static int mt7988_pwm2_funcs[] = { 2 };
|
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_pins[] = { 81 };
|
||||||
static int mt7988_pwm3_funcs[] = { 2 };
|
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_pins[] = { 82 };
|
||||||
static int mt7988_pwm4_funcs[] = { 2 };
|
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_pins[] = { 83 };
|
||||||
static int mt7988_pwm5_funcs[] = { 2 };
|
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_pins[] = { 69 };
|
||||||
static int mt7988_pwm6_funcs[] = { 3 };
|
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_pins[] = { 70 };
|
||||||
static int mt7988_pwm7_funcs[] = { 3 };
|
static int mt7988_pwm7_funcs[] = { 3 };
|
||||||
|
|
||||||
|
static int mt7988_pwm7_0_pins[] = { 4 };
|
||||||
|
static int mt7988_pwm7_0_funcs[] = { 3 };
|
||||||
|
|
||||||
/* dfd */
|
/* dfd */
|
||||||
static int mt7988_dfd_pins[] = { 0, 1, 2, 3, 4 };
|
static int mt7988_dfd_pins[] = { 0, 1, 2, 3, 4 };
|
||||||
static int mt7988_dfd_funcs[] = { 4, 4, 4, 4, 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),
|
PINCTRL_PIN_GROUP("xfi_phy_pll_i2c0", mt7988_xfi_phy_pll_i2c0),
|
||||||
/* @GPIO(3,4): xfi_phy_pll_i2c1 */
|
/* @GPIO(3,4): xfi_phy_pll_i2c1 */
|
||||||
PINCTRL_PIN_GROUP("xfi_phy_pll_i2c1", mt7988_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 */
|
/* @GPIO(5,6) i2c0_0 */
|
||||||
PINCTRL_PIN_GROUP("i2c0_0", mt7988_i2c0_0),
|
PINCTRL_PIN_GROUP("i2c0_0", mt7988_i2c0_0),
|
||||||
/* @GPIO(5,6) i2c1_sfp */
|
/* @GPIO(5,6) i2c1_sfp */
|
||||||
@ -1243,6 +1263,14 @@ static const struct group_desc mt7988_groups[] = {
|
|||||||
PINCTRL_PIN_GROUP("wo2_jtag", mt7988_wo2_jtag),
|
PINCTRL_PIN_GROUP("wo2_jtag", mt7988_wo2_jtag),
|
||||||
/* @GPIO(57) pwm0 */
|
/* @GPIO(57) pwm0 */
|
||||||
PINCTRL_PIN_GROUP("pwm0", mt7988_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 */
|
/* @GPIO(58,59,60,61,62) jtag */
|
||||||
PINCTRL_PIN_GROUP("jtag", mt7988_jtag),
|
PINCTRL_PIN_GROUP("jtag", mt7988_jtag),
|
||||||
/* @GPIO(58,59,60,61,62) tops_jtag0_1 */
|
/* @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("gbe1_led1", mt7988_gbe1_led1),
|
||||||
PINCTRL_PIN_GROUP("gbe2_led1", mt7988_gbe2_led1),
|
PINCTRL_PIN_GROUP("gbe2_led1", mt7988_gbe2_led1),
|
||||||
PINCTRL_PIN_GROUP("gbe3_led1", mt7988_gbe3_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 */
|
/* @GPIO(62) 2p5gbe_led1 */
|
||||||
PINCTRL_PIN_GROUP("2p5gbe_led1", mt7988_2p5gbe_led1),
|
PINCTRL_PIN_GROUP("2p5gbe_led1", mt7988_2p5gbe_led1),
|
||||||
/* @GPIO(64,65,66,67) gbe_led0 */
|
/* @GPIO(64,65,66,67) gbe_led0 */
|
||||||
@ -1336,7 +1366,8 @@ static const char * const mt7988_int_usxgmii_groups[] = {
|
|||||||
"int_usxgmii",
|
"int_usxgmii",
|
||||||
};
|
};
|
||||||
static const char * const mt7988_pwm_groups[] = {
|
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[] = {
|
static const char * const mt7988_dfd_groups[] = {
|
||||||
"dfd",
|
"dfd",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/drivers/net/phy/Kconfig
|
--- a/drivers/net/phy/Kconfig
|
||||||
+++ b/drivers/net/phy/Kconfig
|
+++ b/drivers/net/phy/Kconfig
|
||||||
@@ -334,6 +334,8 @@ config REALTEK_PHY
|
@@ -399,6 +399,8 @@ config REALTEK_PHY
|
||||||
help
|
help
|
||||||
Supports the Realtek 821x PHY.
|
Supports the Realtek 821x PHY.
|
||||||
|
|
||||||
@ -11,11 +11,11 @@
|
|||||||
help
|
help
|
||||||
--- a/drivers/net/phy/Makefile
|
--- a/drivers/net/phy/Makefile
|
||||||
+++ b/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-y += qcom/
|
||||||
obj-$(CONFIG_QSEMI_PHY) += qsemi.o
|
obj-$(CONFIG_QSEMI_PHY) += qsemi.o
|
||||||
obj-$(CONFIG_REALTEK_PHY) += realtek.o
|
obj-$(CONFIG_REALTEK_PHY) += realtek.o
|
||||||
+obj-y += rtl8261n/
|
+obj-y += rtl8261n/
|
||||||
obj-$(CONFIG_RENESAS_PHY) += uPD60620.o
|
obj-$(CONFIG_RENESAS_PHY) += uPD60620.o
|
||||||
obj-$(CONFIG_ROCKCHIP_PHY) += rockchip.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
|
--- a/drivers/net/pcs/pcs-mtk-usxgmii.c
|
||||||
+++ b/drivers/net/pcs/pcs-mtk-usxgmii.c
|
+++ b/drivers/net/pcs/pcs-mtk-usxgmii.c
|
||||||
@@ -52,6 +52,12 @@
|
@@ -52,6 +52,12 @@
|
||||||
@ -23,7 +21,7 @@ index 9af9035..9caab92 100644
|
|||||||
unsigned int neg_mode;
|
unsigned int neg_mode;
|
||||||
struct list_head node;
|
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);
|
mtk_usxgmii_reset(mpcs);
|
||||||
|
|
||||||
@ -34,7 +32,7 @@ index 9af9035..9caab92 100644
|
|||||||
/* Setup USXGMII AN ctrl */
|
/* Setup USXGMII AN ctrl */
|
||||||
mtk_m32(mpcs, RG_PCS_AN_CTRL0,
|
mtk_m32(mpcs, RG_PCS_AN_CTRL0,
|
||||||
USXGMII_AN_SYNC_CNT | USXGMII_AN_ENABLE,
|
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)
|
static int mtk_usxgmii_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct device *dev = &pdev->dev;
|
struct device *dev = &pdev->dev;
|
||||||
@ -42,7 +40,7 @@ index 9af9035..9caab92 100644
|
|||||||
struct mtk_usxgmii_pcs *mpcs;
|
struct mtk_usxgmii_pcs *mpcs;
|
||||||
|
|
||||||
mpcs = devm_kzalloc(dev, sizeof(*mpcs), GFP_KERNEL);
|
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))
|
if (IS_ERR(mpcs->base))
|
||||||
return PTR_ERR(mpcs->base);
|
return PTR_ERR(mpcs->base);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user