realtek: refresh patches in 5.15

Adjust patches for kernel 5.15.

Signed-off-by: INAGAKI Hiroshi <musashino.open@gmail.com>
This commit is contained in:
INAGAKI Hiroshi 2022-09-10 01:15:22 +09:00 committed by Sander Vanheule
parent 23881c91e5
commit aa528eec73
32 changed files with 121 additions and 126 deletions

View file

@ -32,7 +32,7 @@ Signed-off-by: Guenter Roeck <linux@roeck-us.net>
--- a/MAINTAINERS --- a/MAINTAINERS
+++ b/MAINTAINERS +++ b/MAINTAINERS
@@ -14816,6 +14816,13 @@ S: Maintained @@ -15887,6 +15887,13 @@ S: Maintained
F: include/sound/rt*.h F: include/sound/rt*.h
F: sound/soc/codecs/rt* F: sound/soc/codecs/rt*
@ -48,7 +48,7 @@ Signed-off-by: Guenter Roeck <linux@roeck-us.net>
S: Maintained S: Maintained
--- a/drivers/watchdog/Kconfig --- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig +++ b/drivers/watchdog/Kconfig
@@ -995,6 +995,19 @@ config RTD119X_WATCHDOG @@ -954,6 +954,19 @@ config RTD119X_WATCHDOG
Say Y here to include support for the watchdog timer in Say Y here to include support for the watchdog timer in
Realtek RTD1295 SoCs. Realtek RTD1295 SoCs.
@ -70,7 +70,7 @@ Signed-off-by: Guenter Roeck <linux@roeck-us.net>
depends on ARCH_SPRD || COMPILE_TEST depends on ARCH_SPRD || COMPILE_TEST
--- a/drivers/watchdog/Makefile --- a/drivers/watchdog/Makefile
+++ b/drivers/watchdog/Makefile +++ b/drivers/watchdog/Makefile
@@ -174,6 +174,7 @@ obj-$(CONFIG_IMGPDC_WDT) += imgpdc_wdt.o @@ -171,6 +171,7 @@ obj-$(CONFIG_IMGPDC_WDT) += imgpdc_wdt.o
obj-$(CONFIG_MT7621_WDT) += mt7621_wdt.o obj-$(CONFIG_MT7621_WDT) += mt7621_wdt.o
obj-$(CONFIG_PIC32_WDT) += pic32-wdt.o obj-$(CONFIG_PIC32_WDT) += pic32-wdt.o
obj-$(CONFIG_PIC32_DMT) += pic32-dmt.o obj-$(CONFIG_PIC32_DMT) += pic32-dmt.o

View file

@ -34,7 +34,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
#define MII_REGADDR_C45_MASK GENMASK(15, 0) #define MII_REGADDR_C45_MASK GENMASK(15, 0)
struct gpio_desc; struct gpio_desc;
@@ -342,6 +344,16 @@ static inline u32 mdiobus_c45_addr(int d @@ -355,6 +357,16 @@ static inline u32 mdiobus_c45_addr(int d
return MII_ADDR_C45 | devad << MII_DEVADDR_C45_SHIFT | regnum; return MII_ADDR_C45 | devad << MII_DEVADDR_C45_SHIFT | regnum;
} }

View file

@ -91,7 +91,7 @@ Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl>
} }
/* Set the rising and falling edge mask bits for a GPIO port pin */ /* Set the rising and falling edge mask bits for a GPIO port pin */
@@ -253,6 +289,7 @@ MODULE_DEVICE_TABLE(of, realtek_gpio_of_ @@ -250,6 +286,7 @@ MODULE_DEVICE_TABLE(of, realtek_gpio_of_
static int realtek_gpio_probe(struct platform_device *pdev) static int realtek_gpio_probe(struct platform_device *pdev)
{ {
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
@ -99,7 +99,7 @@ Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl>
unsigned int dev_flags; unsigned int dev_flags;
struct gpio_irq_chip *girq; struct gpio_irq_chip *girq;
struct realtek_gpio_ctrl *ctrl; struct realtek_gpio_ctrl *ctrl;
@@ -280,10 +317,20 @@ static int realtek_gpio_probe(struct pla @@ -277,10 +314,20 @@ static int realtek_gpio_probe(struct pla
raw_spin_lock_init(&ctrl->lock); raw_spin_lock_init(&ctrl->lock);

View file

@ -47,7 +47,7 @@ Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl>
}; };
static struct realtek_gpio_ctrl *irq_data_to_ctrl(struct irq_data *data) static struct realtek_gpio_ctrl *irq_data_to_ctrl(struct irq_data *data)
@@ -250,14 +258,61 @@ static void realtek_gpio_irq_handler(str @@ -247,14 +255,61 @@ static void realtek_gpio_irq_handler(str
chained_irq_exit(irq_chip, desc); chained_irq_exit(irq_chip, desc);
} }
@ -109,7 +109,7 @@ Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl>
} }
return 0; return 0;
@@ -269,6 +324,7 @@ static struct irq_chip realtek_gpio_irq_ @@ -266,6 +321,7 @@ static struct irq_chip realtek_gpio_irq_
.irq_mask = realtek_gpio_irq_mask, .irq_mask = realtek_gpio_irq_mask,
.irq_unmask = realtek_gpio_irq_unmask, .irq_unmask = realtek_gpio_irq_unmask,
.irq_set_type = realtek_gpio_irq_set_type, .irq_set_type = realtek_gpio_irq_set_type,
@ -117,7 +117,7 @@ Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl>
}; };
static const struct of_device_id realtek_gpio_of_match[] = { static const struct of_device_id realtek_gpio_of_match[] = {
@@ -293,8 +349,10 @@ static int realtek_gpio_probe(struct pla @@ -290,8 +346,10 @@ static int realtek_gpio_probe(struct pla
unsigned int dev_flags; unsigned int dev_flags;
struct gpio_irq_chip *girq; struct gpio_irq_chip *girq;
struct realtek_gpio_ctrl *ctrl; struct realtek_gpio_ctrl *ctrl;
@ -129,7 +129,7 @@ Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl>
ctrl = devm_kzalloc(dev, sizeof(*ctrl), GFP_KERNEL); ctrl = devm_kzalloc(dev, sizeof(*ctrl), GFP_KERNEL);
if (!ctrl) if (!ctrl)
@@ -355,6 +413,21 @@ static int realtek_gpio_probe(struct pla @@ -352,6 +410,21 @@ static int realtek_gpio_probe(struct pla
girq->init_hw = realtek_gpio_irq_init; girq->init_hw = realtek_gpio_irq_init;
} }

View file

@ -16,7 +16,7 @@ Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl>
--- a/drivers/gpio/gpio-realtek-otto.c --- a/drivers/gpio/gpio-realtek-otto.c
+++ b/drivers/gpio/gpio-realtek-otto.c +++ b/drivers/gpio/gpio-realtek-otto.c
@@ -338,6 +338,10 @@ static const struct of_device_id realtek @@ -335,6 +335,10 @@ static const struct of_device_id realtek
{ {
.compatible = "realtek,rtl8390-gpio", .compatible = "realtek,rtl8390-gpio",
}, },

View file

@ -18,7 +18,7 @@ Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl>
--- a/drivers/gpio/gpio-realtek-otto.c --- a/drivers/gpio/gpio-realtek-otto.c
+++ b/drivers/gpio/gpio-realtek-otto.c +++ b/drivers/gpio/gpio-realtek-otto.c
@@ -342,6 +342,9 @@ static const struct of_device_id realtek @@ -339,6 +339,9 @@ static const struct of_device_id realtek
.compatible = "realtek,rtl9300-gpio", .compatible = "realtek,rtl9300-gpio",
.data = (void *)(GPIO_PORTS_REVERSED | GPIO_INTERRUPTS_PER_CPU) .data = (void *)(GPIO_PORTS_REVERSED | GPIO_INTERRUPTS_PER_CPU)
}, },

View file

@ -15,8 +15,8 @@ Submitted-by: Birger Koblitz <git@birger-koblitz.de>
--- a/arch/mips/Kbuild.platforms --- a/arch/mips/Kbuild.platforms
+++ b/arch/mips/Kbuild.platforms +++ b/arch/mips/Kbuild.platforms
@@ -23,6 +23,7 @@ platform-$(CONFIG_PIC32MZDA) += pic32/ @@ -23,6 +23,7 @@ platform-$(CONFIG_NLM_COMMON) += netlog
platform-$(CONFIG_MACH_PISTACHIO) += pistachio/ platform-$(CONFIG_PIC32MZDA) += pic32/
platform-$(CONFIG_RALINK) += ralink/ platform-$(CONFIG_RALINK) += ralink/
platform-$(CONFIG_MIKROTIK_RB532) += rb532/ platform-$(CONFIG_MIKROTIK_RB532) += rb532/
+platform-$(CONFIG_RTL83XX) += rtl838x/ +platform-$(CONFIG_RTL83XX) += rtl838x/
@ -25,7 +25,7 @@ Submitted-by: Birger Koblitz <git@birger-koblitz.de>
platform-$(CONFIG_SGI_IP28) += sgi-ip22/ platform-$(CONFIG_SGI_IP28) += sgi-ip22/
--- a/arch/mips/Kconfig --- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig +++ b/arch/mips/Kconfig
@@ -1037,8 +1037,58 @@ config NLM_XLP_BOARD @@ -1053,8 +1053,58 @@ config NLM_XLP_BOARD
This board is based on Netlogic XLP Processor. This board is based on Netlogic XLP Processor.
Say Y here if you have a XLP based board. Say Y here if you have a XLP based board.
@ -84,7 +84,7 @@ Submitted-by: Birger Koblitz <git@birger-koblitz.de>
source "arch/mips/alchemy/Kconfig" source "arch/mips/alchemy/Kconfig"
source "arch/mips/ath25/Kconfig" source "arch/mips/ath25/Kconfig"
source "arch/mips/ath79/Kconfig" source "arch/mips/ath79/Kconfig"
@@ -1097,6 +1147,9 @@ config CEVT_GT641XX @@ -1112,6 +1162,9 @@ config CEVT_GT641XX
config CEVT_R4K config CEVT_R4K
bool bool

View file

@ -25,9 +25,9 @@ Submitted-by: John Crispin <john@phrozen.org>
--- a/drivers/gpio/Kconfig --- a/drivers/gpio/Kconfig
+++ b/drivers/gpio/Kconfig +++ b/drivers/gpio/Kconfig
@@ -508,6 +508,12 @@ config GPIO_REG @@ -529,6 +529,12 @@ config GPIO_ROCKCHIP
A 32-bit single register GPIO fixed in/out implementation. This help
can be used to represent any register as a set of GPIO signals. Say yes here to support GPIO on Rockchip SoCs.
+config GPIO_RTL8231 +config GPIO_RTL8231
+ tristate "RTL8231 GPIO" + tristate "RTL8231 GPIO"
@ -40,10 +40,10 @@ Submitted-by: John Crispin <john@phrozen.org>
depends on MFD_SYSCON depends on MFD_SYSCON
--- a/drivers/gpio/Makefile --- a/drivers/gpio/Makefile
+++ b/drivers/gpio/Makefile +++ b/drivers/gpio/Makefile
@@ -127,6 +127,7 @@ obj-$(CONFIG_GPIO_RDA) += gpio-rda.o @@ -129,6 +129,7 @@ obj-$(CONFIG_GPIO_RDC321X) += gpio-rdc3
obj-$(CONFIG_GPIO_RDC321X) += gpio-rdc321x.o
obj-$(CONFIG_GPIO_REALTEK_OTTO) += gpio-realtek-otto.o obj-$(CONFIG_GPIO_REALTEK_OTTO) += gpio-realtek-otto.o
obj-$(CONFIG_GPIO_REG) += gpio-reg.o obj-$(CONFIG_GPIO_REG) += gpio-reg.o
obj-$(CONFIG_GPIO_ROCKCHIP) += gpio-rockchip.o
+obj-$(CONFIG_GPIO_RTL8231) += gpio-rtl8231.o +obj-$(CONFIG_GPIO_RTL8231) += gpio-rtl8231.o
obj-$(CONFIG_ARCH_SA1100) += gpio-sa1100.o obj-$(CONFIG_ARCH_SA1100) += gpio-sa1100.o
obj-$(CONFIG_GPIO_SAMA5D2_PIOBU) += gpio-sama5d2-piobu.o obj-$(CONFIG_GPIO_SAMA5D2_PIOBU) += gpio-sama5d2-piobu.o

View file

@ -20,7 +20,7 @@
depends on HAS_IOMEM depends on HAS_IOMEM
--- a/drivers/clocksource/Makefile --- a/drivers/clocksource/Makefile
+++ b/drivers/clocksource/Makefile +++ b/drivers/clocksource/Makefile
@@ -63,6 +63,7 @@ obj-$(CONFIG_MILBEAUT_TIMER) += timer-mi @@ -58,6 +58,7 @@ obj-$(CONFIG_MILBEAUT_TIMER) += timer-mi
obj-$(CONFIG_SPRD_TIMER) += timer-sprd.o obj-$(CONFIG_SPRD_TIMER) += timer-sprd.o
obj-$(CONFIG_NPCM7XX_TIMER) += timer-npcm7xx.o obj-$(CONFIG_NPCM7XX_TIMER) += timer-npcm7xx.o
obj-$(CONFIG_RDA_TIMER) += timer-rda.o obj-$(CONFIG_RDA_TIMER) += timer-rda.o
@ -30,7 +30,7 @@
obj-$(CONFIG_ARM_ARCH_TIMER) += arm_arch_timer.o obj-$(CONFIG_ARM_ARCH_TIMER) += arm_arch_timer.o
--- a/include/linux/cpuhotplug.h --- a/include/linux/cpuhotplug.h
+++ b/include/linux/cpuhotplug.h +++ b/include/linux/cpuhotplug.h
@@ -133,6 +133,7 @@ enum cpuhp_state { @@ -177,6 +177,7 @@ enum cpuhp_state {
CPUHP_AP_MARCO_TIMER_STARTING, CPUHP_AP_MARCO_TIMER_STARTING,
CPUHP_AP_MIPS_GIC_TIMER_STARTING, CPUHP_AP_MIPS_GIC_TIMER_STARTING,
CPUHP_AP_ARC_TIMER_STARTING, CPUHP_AP_ARC_TIMER_STARTING,

View file

@ -13,7 +13,7 @@ Submitted-by: INAGAKI Hiroshi <musashino.open@gmail.com>
1 file changed, 2 insertions(+), 2 deletions(-) 1 file changed, 2 insertions(+), 2 deletions(-)
--- a/drivers/gpio/Kconfig --- a/drivers/gpio/Kconfig
+++ b/drivers/gpio/Kconfig +++ b/drivers/gpio/Kconfig
@@ -491,8 +491,8 @@ config GPIO_RDA @@ -503,8 +503,8 @@ config GPIO_RDA
config GPIO_REALTEK_OTTO config GPIO_REALTEK_OTTO
tristate "Realtek Otto GPIO support" tristate "Realtek Otto GPIO support"

View file

@ -14,9 +14,9 @@ Submitted-by: INAGAKI Hiroshi <musashino.open@gmail.com>
--- a/drivers/spi/Makefile --- a/drivers/spi/Makefile
+++ b/drivers/spi/Makefile +++ b/drivers/spi/Makefile
@@ -94,7 +94,7 @@ obj-$(CONFIG_SPI_QCOM_QSPI) += spi-qcom @@ -97,7 +97,7 @@ obj-$(CONFIG_SPI_QUP) += spi-qup.o
obj-$(CONFIG_SPI_QUP) += spi-qup.o
obj-$(CONFIG_SPI_ROCKCHIP) += spi-rockchip.o obj-$(CONFIG_SPI_ROCKCHIP) += spi-rockchip.o
obj-$(CONFIG_SPI_ROCKCHIP_SFC) += spi-rockchip-sfc.o
obj-$(CONFIG_SPI_RB4XX) += spi-rb4xx.o obj-$(CONFIG_SPI_RB4XX) += spi-rb4xx.o
-obj-$(CONFIG_MACH_REALTEK_RTL) += spi-realtek-rtl.o -obj-$(CONFIG_MACH_REALTEK_RTL) += spi-realtek-rtl.o
+obj-$(CONFIG_RTL83XX) += spi-realtek-rtl.o +obj-$(CONFIG_RTL83XX) += spi-realtek-rtl.o

View file

@ -14,9 +14,12 @@ Submitted-by: INAGAKI Hiroshi <musashino.open@gmail.com>
--- a/drivers/irqchip/Makefile --- a/drivers/irqchip/Makefile
+++ b/drivers/irqchip/Makefile +++ b/drivers/irqchip/Makefile
@@ -114,4 +114,4 @@ obj-$(CONFIG_LOONGSON_PCH_PIC) += irq-l @@ -112,7 +112,7 @@ obj-$(CONFIG_LOONGSON_PCH_PIC) += irq-l
obj-$(CONFIG_LOONGSON_PCH_MSI) += irq-loongson-pch-msi.o obj-$(CONFIG_LOONGSON_PCH_MSI) += irq-loongson-pch-msi.o
obj-$(CONFIG_MST_IRQ) += irq-mst-intc.o obj-$(CONFIG_MST_IRQ) += irq-mst-intc.o
obj-$(CONFIG_SL28CPLD_INTC) += irq-sl28cpld.o obj-$(CONFIG_SL28CPLD_INTC) += irq-sl28cpld.o
-obj-$(CONFIG_MACH_REALTEK_RTL) += irq-realtek-rtl.o -obj-$(CONFIG_MACH_REALTEK_RTL) += irq-realtek-rtl.o
+obj-$(CONFIG_RTL83XX) += irq-realtek-rtl.o +obj-$(CONFIG_RTL83XX) += irq-realtek-rtl.o
obj-$(CONFIG_WPCM450_AIC) += irq-wpcm450-aic.o
obj-$(CONFIG_IRQ_IDT3243X) += irq-idt3243x.o
obj-$(CONFIG_APPLE_AIC) += irq-apple-aic.o

View file

@ -17,7 +17,7 @@ Tested-by: Stijn Tintel <stijn@linux-ipv6.be>
--- a/drivers/watchdog/Kconfig --- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig +++ b/drivers/watchdog/Kconfig
@@ -997,10 +997,10 @@ config RTD119X_WATCHDOG @@ -956,10 +956,10 @@ config RTD119X_WATCHDOG
config REALTEK_OTTO_WDT config REALTEK_OTTO_WDT
tristate "Realtek Otto MIPS watchdog support" tristate "Realtek Otto MIPS watchdog support"

View file

@ -17,7 +17,7 @@ Submitted-by: Birger Koblitz <git@birger-koblitz.de>
--- a/drivers/i2c/busses/Kconfig --- a/drivers/i2c/busses/Kconfig
+++ b/drivers/i2c/busses/Kconfig +++ b/drivers/i2c/busses/Kconfig
@@ -954,6 +954,16 @@ config I2C_RK3X @@ -949,6 +949,16 @@ config I2C_RK3X
This driver can also be built as a module. If so, the module will This driver can also be built as a module. If so, the module will
be called i2c-rk3x. be called i2c-rk3x.
@ -36,7 +36,7 @@ Submitted-by: Birger Koblitz <git@birger-koblitz.de>
help help
--- a/drivers/i2c/busses/Makefile --- a/drivers/i2c/busses/Makefile
+++ b/drivers/i2c/busses/Makefile +++ b/drivers/i2c/busses/Makefile
@@ -95,6 +95,7 @@ obj-$(CONFIG_I2C_QCOM_GENI) += i2c-qcom- @@ -94,6 +94,7 @@ obj-$(CONFIG_I2C_QCOM_GENI) += i2c-qcom-
obj-$(CONFIG_I2C_QUP) += i2c-qup.o obj-$(CONFIG_I2C_QUP) += i2c-qup.o
obj-$(CONFIG_I2C_RIIC) += i2c-riic.o obj-$(CONFIG_I2C_RIIC) += i2c-riic.o
obj-$(CONFIG_I2C_RK3X) += i2c-rk3x.o obj-$(CONFIG_I2C_RK3X) += i2c-rk3x.o

View file

@ -16,7 +16,7 @@ Submitted-by: Birger Koblitz <git@birger-koblitz.de>
--- a/arch/mips/Makefile --- a/arch/mips/Makefile
+++ b/arch/mips/Makefile +++ b/arch/mips/Makefile
@@ -307,14 +307,24 @@ endif @@ -310,14 +310,24 @@ endif
KBUILD_AFLAGS += $(cflags-y) KBUILD_AFLAGS += $(cflags-y)
KBUILD_CFLAGS += $(cflags-y) KBUILD_CFLAGS += $(cflags-y)

View file

@ -83,7 +83,7 @@ Submitted-by: Birger Koblitz <git@birger-koblitz.de>
raw_spin_unlock_irqrestore(&irq_lock, flags); raw_spin_unlock_irqrestore(&irq_lock, flags);
} }
@@ -44,137 +86,247 @@ static void realtek_ictl_mask_irq(struct @@ -44,52 +86,137 @@ static void realtek_ictl_mask_irq(struct
{ {
unsigned long flags; unsigned long flags;
u32 value; u32 value;
@ -144,19 +144,18 @@ Submitted-by: Birger Koblitz <git@birger-koblitz.de>
static int intc_map(struct irq_domain *d, unsigned int irq, irq_hw_number_t hw) static int intc_map(struct irq_domain *d, unsigned int irq, irq_hw_number_t hw)
{ {
- irq_set_chip_and_handler(hw, &realtek_ictl_irq, handle_level_irq);
+ struct realtek_ictl_output *output = d->host_data; + struct realtek_ictl_output *output = d->host_data;
+ unsigned long flags; + unsigned long flags;
+ +
+ irq_set_chip_and_handler(irq, &realtek_ictl_irq, handle_level_irq); irq_set_chip_and_handler(irq, &realtek_ictl_irq, handle_level_irq);
+
+ raw_spin_lock_irqsave(&irq_lock, flags); + raw_spin_lock_irqsave(&irq_lock, flags);
+ +
+ output->child_mask |= BIT(hw); + output->child_mask |= BIT(hw);
+ write_irr(REG(RTL_ICTL_IRR0, 0), hw, output->output_index + 1); + write_irr(REG(RTL_ICTL_IRR0, 0), hw, output->output_index + 1);
+ +
+ raw_spin_unlock_irqrestore(&irq_lock, flags); + raw_spin_unlock_irqrestore(&irq_lock, flags);
+
return 0; return 0;
} }
@ -208,37 +207,32 @@ Submitted-by: Birger Koblitz <git@birger-koblitz.de>
+ struct realtek_ictl_output *output = irq_desc_get_handler_data(desc); + struct realtek_ictl_output *output = irq_desc_get_handler_data(desc);
struct irq_chip *chip = irq_desc_get_chip(desc); struct irq_chip *chip = irq_desc_get_chip(desc);
- struct irq_domain *domain; - struct irq_domain *domain;
- unsigned int pending;
+ int cpu = smp_processor_id(); + int cpu = smp_processor_id();
+ unsigned long pending; unsigned long pending;
+ unsigned int soc_int; unsigned int soc_int;
chained_irq_enter(chip, desc); chained_irq_enter(chip, desc);
- pending = readl(REG(RTL_ICTL_GIMR)) & readl(REG(RTL_ICTL_GISR)); - pending = readl(REG(RTL_ICTL_GIMR)) & readl(REG(RTL_ICTL_GISR));
+ pending = readl(REG(RTL_ICTL_GIMR, cpu)) & readl(REG(RTL_ICTL_GISR, cpu)) + pending = readl(REG(RTL_ICTL_GIMR, cpu)) & readl(REG(RTL_ICTL_GISR, cpu))
+ & output->child_mask; + & output->child_mask;
+
if (unlikely(!pending)) { if (unlikely(!pending)) {
spurious_interrupt(); spurious_interrupt();
goto out; goto out;
} }
- domain = irq_desc_get_handler_data(desc); - domain = irq_desc_get_handler_data(desc);
- generic_handle_irq(irq_find_mapping(domain, __ffs(pending))); - for_each_set_bit(soc_int, &pending, 32)
+ - generic_handle_domain_irq(domain, soc_int);
+ for_each_set_bit(soc_int, &pending, RTL_ICTL_NUM_INPUTS) + for_each_set_bit(soc_int, &pending, RTL_ICTL_NUM_INPUTS)
+ generic_handle_irq(irq_find_mapping(output->domain, soc_int)); + generic_handle_domain_irq(output->domain, soc_int);
+// generic_handle_domain_irq(output->domain, soc_int);
out: out:
chained_irq_exit(chip, desc); chained_irq_exit(chip, desc);
} @@ -102,85 +229,110 @@ out:
* thus go into 4 IRRs. A routing value of '0' means the interrupt is left
-/* * disconnected. Routing values {1..15} connect to output lines {0..14}.
- * SoC interrupts are cascaded to MIPS CPU interrupts according to the */
- * interrupt-map in the device tree. Each SoC interrupt gets 4 bits for
- * the CPU interrupt in an Interrupt Routing Register. Max 32 SoC interrupts
- * thus go into 4 IRRs.
- */
-static int __init map_interrupts(struct device_node *node, struct irq_domain *domain) -static int __init map_interrupts(struct device_node *node, struct irq_domain *domain)
+static int __init setup_parent_interrupts(struct device_node *node, int *parents, +static int __init setup_parent_interrupts(struct device_node *node, int *parents,
+ unsigned int num_parents) + unsigned int num_parents)
@ -282,12 +276,12 @@ Submitted-by: Birger Koblitz <git@birger-koblitz.de>
- if (!cpu_ictl) - if (!cpu_ictl)
- return -EINVAL; - return -EINVAL;
- ret = of_property_read_u32(cpu_ictl, "#interrupt-cells", &tmp); - ret = of_property_read_u32(cpu_ictl, "#interrupt-cells", &tmp);
- of_node_put(cpu_ictl);
- if (ret || tmp != 1) - if (ret || tmp != 1)
- return -EINVAL; - return -EINVAL;
- of_node_put(cpu_ictl);
- -
- cpu_int = be32_to_cpup(imap + 2); - cpu_int = be32_to_cpup(imap + 2);
- if (cpu_int > 7) - if (cpu_int > 7 || cpu_int < 2)
- return -EINVAL; - return -EINVAL;
- -
- if (!(mips_irqs_set & BIT(cpu_int))) { - if (!(mips_irqs_set & BIT(cpu_int))) {
@ -299,7 +293,8 @@ Submitted-by: Birger Koblitz <git@birger-koblitz.de>
+ if (!domain) + if (!domain)
+ goto domain_err; + goto domain_err;
- regs[(soc_int * 4) / 32] |= cpu_int << (soc_int * 4) % 32; - /* Use routing values (1..6) for CPU interrupts (2..7) */
- regs[(soc_int * 4) / 32] |= (cpu_int - 1) << (soc_int * 4) % 32;
- imap += 3; - imap += 3;
- } - }
+ output->fwnode = of_node_to_fwnode(node); + output->fwnode = of_node_to_fwnode(node);

View file

@ -22,7 +22,7 @@ Submitted-by: Sander Vanheule <sander@svanheule.net>
--- a/drivers/gpio/gpio-realtek-otto.c --- a/drivers/gpio/gpio-realtek-otto.c
+++ b/drivers/gpio/gpio-realtek-otto.c +++ b/drivers/gpio/gpio-realtek-otto.c
@@ -304,6 +304,7 @@ static int realtek_gpio_irq_set_affinity @@ -301,6 +301,7 @@ static int realtek_gpio_irq_set_affinity
static int realtek_gpio_irq_init(struct gpio_chip *gc) static int realtek_gpio_irq_init(struct gpio_chip *gc)
{ {
struct realtek_gpio_ctrl *ctrl = gpiochip_get_data(gc); struct realtek_gpio_ctrl *ctrl = gpiochip_get_data(gc);
@ -30,7 +30,7 @@ Submitted-by: Sander Vanheule <sander@svanheule.net>
unsigned int port; unsigned int port;
int cpu; int cpu;
@@ -311,8 +312,16 @@ static int realtek_gpio_irq_init(struct @@ -308,8 +309,16 @@ static int realtek_gpio_irq_init(struct
realtek_gpio_write_imr(ctrl, port, 0, 0); realtek_gpio_write_imr(ctrl, port, 0, 0);
realtek_gpio_clear_isr(ctrl, port, GENMASK(7, 0)); realtek_gpio_clear_isr(ctrl, port, GENMASK(7, 0));

View file

@ -30,7 +30,6 @@ Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl>
Update patch for missing upstream changes: Update patch for missing upstream changes:
- commit a01a40e33499 ("gpio: realtek-otto: Make the irqchip immutable") - commit a01a40e33499 ("gpio: realtek-otto: Make the irqchip immutable")
- commit dbd1c54fc820 ("gpio: Bulk conversion to generic_handle_domain_irq()")
Signed-off-by: Sander Vanheule <sander@svanheule.net> Signed-off-by: Sander Vanheule <sander@svanheule.net>
--- ---
@ -241,13 +240,12 @@ Signed-off-by: Sander Vanheule <sander@svanheule.net>
raw_spin_unlock_irqrestore(&ctrl->lock, flags); raw_spin_unlock_irqrestore(&ctrl->lock, flags);
return 0; return 0;
@@ -238,31 +248,24 @@ static void realtek_gpio_irq_handler(str @@ -238,28 +248,21 @@ static void realtek_gpio_irq_handler(str
struct gpio_chip *gc = irq_desc_get_handler_data(desc); struct gpio_chip *gc = irq_desc_get_handler_data(desc);
struct realtek_gpio_ctrl *ctrl = gpiochip_get_data(gc); struct realtek_gpio_ctrl *ctrl = gpiochip_get_data(gc);
struct irq_chip *irq_chip = irq_desc_get_chip(desc); struct irq_chip *irq_chip = irq_desc_get_chip(desc);
- unsigned int lines_done; - unsigned int lines_done;
- unsigned int port_pin_count; - unsigned int port_pin_count;
unsigned int irq;
unsigned long status; unsigned long status;
int offset; int offset;
@ -256,15 +254,12 @@ Signed-off-by: Sander Vanheule <sander@svanheule.net>
- for (lines_done = 0; lines_done < gc->ngpio; lines_done += 8) { - for (lines_done = 0; lines_done < gc->ngpio; lines_done += 8) {
- status = realtek_gpio_read_isr(ctrl, lines_done / 8); - status = realtek_gpio_read_isr(ctrl, lines_done / 8);
- port_pin_count = min(gc->ngpio - lines_done, 8U); - port_pin_count = min(gc->ngpio - lines_done, 8U);
- for_each_set_bit(offset, &status, port_pin_count) { - for_each_set_bit(offset, &status, port_pin_count)
- irq = irq_find_mapping(gc->irq.domain, offset + lines_done); - generic_handle_domain_irq(gc->irq.domain, offset + lines_done);
- generic_handle_irq(irq);
- } - }
+ status = realtek_gpio_read_isr(ctrl); + status = realtek_gpio_read_isr(ctrl);
+ for_each_set_bit(offset, &status, gc->ngpio) { + for_each_set_bit(offset, &status, gc->ngpio)
+ irq = irq_find_mapping(gc->irq.domain, offset); + generic_handle_domain_irq(gc->irq.domain, offset);
+ generic_handle_irq(irq);
}
chained_irq_exit(irq_chip, desc); chained_irq_exit(irq_chip, desc);
} }
@ -279,7 +274,7 @@ Signed-off-by: Sander Vanheule <sander@svanheule.net>
} }
static int realtek_gpio_irq_set_affinity(struct irq_data *data, static int realtek_gpio_irq_set_affinity(struct irq_data *data,
@@ -270,12 +273,10 @@ static int realtek_gpio_irq_set_affinity @@ -267,12 +270,10 @@ static int realtek_gpio_irq_set_affinity
{ {
struct realtek_gpio_ctrl *ctrl = irq_data_to_ctrl(data); struct realtek_gpio_ctrl *ctrl = irq_data_to_ctrl(data);
unsigned int line = irqd_to_hwirq(data); unsigned int line = irqd_to_hwirq(data);
@ -293,7 +288,7 @@ Signed-off-by: Sander Vanheule <sander@svanheule.net>
if (!ctrl->cpumask_base) if (!ctrl->cpumask_base)
return -ENXIO; return -ENXIO;
@@ -283,15 +284,15 @@ static int realtek_gpio_irq_set_affinity @@ -280,15 +281,15 @@ static int realtek_gpio_irq_set_affinity
raw_spin_lock_irqsave(&ctrl->lock, flags); raw_spin_lock_irqsave(&ctrl->lock, flags);
for_each_cpu(cpu, &ctrl->cpu_irq_maskable) { for_each_cpu(cpu, &ctrl->cpu_irq_maskable) {
@ -314,7 +309,7 @@ Signed-off-by: Sander Vanheule <sander@svanheule.net>
} }
raw_spin_unlock_irqrestore(&ctrl->lock, flags); raw_spin_unlock_irqrestore(&ctrl->lock, flags);
@@ -305,22 +306,23 @@ static int realtek_gpio_irq_init(struct @@ -302,22 +303,23 @@ static int realtek_gpio_irq_init(struct
{ {
struct realtek_gpio_ctrl *ctrl = gpiochip_get_data(gc); struct realtek_gpio_ctrl *ctrl = gpiochip_get_data(gc);
void __iomem *irq_cpu_mask; void __iomem *irq_cpu_mask;
@ -352,7 +347,7 @@ Signed-off-by: Sander Vanheule <sander@svanheule.net>
} }
} }
@@ -393,12 +395,14 @@ static int realtek_gpio_probe(struct pla @@ -390,12 +392,14 @@ static int realtek_gpio_probe(struct pla
if (dev_flags & GPIO_PORTS_REVERSED) { if (dev_flags & GPIO_PORTS_REVERSED) {
bgpio_flags = 0; bgpio_flags = 0;

View file

@ -13,20 +13,20 @@ Submitted-by: Markus Stockhausen <markus.stockhausen@gmx.de>
--- a/drivers/clk/Kconfig --- a/drivers/clk/Kconfig
+++ b/drivers/clk/Kconfig +++ b/drivers/clk/Kconfig
@@ -372,6 +372,7 @@ source "drivers/clk/mediatek/Kconfig" @@ -405,6 +405,7 @@ source "drivers/clk/mstar/Kconfig"
source "drivers/clk/meson/Kconfig"
source "drivers/clk/mvebu/Kconfig" source "drivers/clk/mvebu/Kconfig"
source "drivers/clk/pistachio/Kconfig"
source "drivers/clk/qcom/Kconfig" source "drivers/clk/qcom/Kconfig"
+source "drivers/clk/realtek/Kconfig" +source "drivers/clk/realtek/Kconfig"
source "drivers/clk/ralink/Kconfig"
source "drivers/clk/renesas/Kconfig" source "drivers/clk/renesas/Kconfig"
source "drivers/clk/rockchip/Kconfig" source "drivers/clk/rockchip/Kconfig"
source "drivers/clk/samsung/Kconfig"
--- a/drivers/clk/Makefile --- a/drivers/clk/Makefile
+++ b/drivers/clk/Makefile +++ b/drivers/clk/Makefile
@@ -100,6 +100,7 @@ obj-$(CONFIG_COMMON_CLK_NXP) += nxp/ @@ -101,6 +101,7 @@ obj-$(CONFIG_COMMON_CLK_PISTACHIO) += pi
obj-$(CONFIG_MACH_PISTACHIO) += pistachio/
obj-$(CONFIG_COMMON_CLK_PXA) += pxa/ obj-$(CONFIG_COMMON_CLK_PXA) += pxa/
obj-$(CONFIG_COMMON_CLK_QCOM) += qcom/ obj-$(CONFIG_COMMON_CLK_QCOM) += qcom/
obj-y += ralink/
+obj-$(CONFIG_COMMON_CLK_REALTEK) += realtek/ +obj-$(CONFIG_COMMON_CLK_REALTEK) += realtek/
obj-y += renesas/ obj-y += renesas/
obj-$(CONFIG_ARCH_ROCKCHIP) += rockchip/ obj-$(CONFIG_ARCH_ROCKCHIP) += rockchip/

View file

@ -143,7 +143,7 @@ Submitted-by: INAGAKI Hiroshi <musashino.open@gmail.com>
raw_spin_unlock_irqrestore(&irq_lock, flags); raw_spin_unlock_irqrestore(&irq_lock, flags);
@@ -279,9 +315,11 @@ static int __init realtek_rtl_of_init(st @@ -285,9 +321,11 @@ static int __init realtek_rtl_of_init(st
cpumask_set_cpu(cpu, &realtek_ictl_cpu_configurable); cpumask_set_cpu(cpu, &realtek_ictl_cpu_configurable);
/* Disable all cascaded interrupts and clear routing */ /* Disable all cascaded interrupts and clear routing */

View file

@ -22,19 +22,21 @@ Submitted-by: John Crispin <john@phrozen.org>
--- a/drivers/net/dsa/Kconfig --- a/drivers/net/dsa/Kconfig
+++ b/drivers/net/dsa/Kconfig +++ b/drivers/net/dsa/Kconfig
@@ -68,6 +68,8 @@ config NET_DSA_QCA8K @@ -60,6 +60,8 @@ source "drivers/net/dsa/sja1105/Kconfig"
This enables support for the Qualcomm Atheros QCA8K Ethernet
switch chips. source "drivers/net/dsa/xrs700x/Kconfig"
+source "drivers/net/dsa/rtl83xx/Kconfig" +source "drivers/net/dsa/rtl83xx/Kconfig"
+ +
config NET_DSA_REALTEK_SMI config NET_DSA_REALTEK_SMI
tristate "Realtek SMI Ethernet switch family support" tristate "Realtek SMI Ethernet switch family support"
depends on NET_DSA select NET_DSA_TAG_RTL4_A
--- a/drivers/net/dsa/Makefile --- a/drivers/net/dsa/Makefile
+++ b/drivers/net/dsa/Makefile +++ b/drivers/net/dsa/Makefile
@@ -23,3 +23,4 @@ obj-y += mv88e6xxx/ @@ -22,5 +22,6 @@ obj-y += microchip/
obj-y += mv88e6xxx/
obj-y += ocelot/ obj-y += ocelot/
obj-y += qca/ obj-y += qca/
obj-y += sja1105/
+obj-y += rtl83xx/ +obj-y += rtl83xx/
obj-y += sja1105/
obj-y += xrs700x/

View file

@ -34,7 +34,7 @@ Submitted-by: John Crispin <john@phrozen.org>
trailer[2] = 0x10; trailer[2] = 0x10;
trailer[3] = 0x00; trailer[3] = 0x00;
@@ -34,12 +39,23 @@ static struct sk_buff *trailer_rcv(struc @@ -33,12 +38,23 @@ static struct sk_buff *trailer_rcv(struc
return NULL; return NULL;
trailer = skb_tail_pointer(skb) - 4; trailer = skb_tail_pointer(skb) - 4;

View file

@ -22,7 +22,7 @@ Submitted-by: John Crispin <john@phrozen.org>
--- a/drivers/net/ethernet/Kconfig --- a/drivers/net/ethernet/Kconfig
+++ b/drivers/net/ethernet/Kconfig +++ b/drivers/net/ethernet/Kconfig
@@ -163,6 +163,13 @@ source "drivers/net/ethernet/rdc/Kconfig @@ -166,6 +166,13 @@ source "drivers/net/ethernet/rdc/Kconfig
source "drivers/net/ethernet/realtek/Kconfig" source "drivers/net/ethernet/realtek/Kconfig"
source "drivers/net/ethernet/renesas/Kconfig" source "drivers/net/ethernet/renesas/Kconfig"
source "drivers/net/ethernet/rocker/Kconfig" source "drivers/net/ethernet/rocker/Kconfig"
@ -35,10 +35,10 @@ Submitted-by: John Crispin <john@phrozen.org>
+ +
source "drivers/net/ethernet/samsung/Kconfig" source "drivers/net/ethernet/samsung/Kconfig"
source "drivers/net/ethernet/seeq/Kconfig" source "drivers/net/ethernet/seeq/Kconfig"
source "drivers/net/ethernet/sfc/Kconfig" source "drivers/net/ethernet/sgi/Kconfig"
--- a/drivers/net/ethernet/Makefile --- a/drivers/net/ethernet/Makefile
+++ b/drivers/net/ethernet/Makefile +++ b/drivers/net/ethernet/Makefile
@@ -75,6 +75,7 @@ obj-$(CONFIG_NET_VENDOR_REALTEK) += real @@ -77,6 +77,7 @@ obj-$(CONFIG_NET_VENDOR_REALTEK) += real
obj-$(CONFIG_NET_VENDOR_RENESAS) += renesas/ obj-$(CONFIG_NET_VENDOR_RENESAS) += renesas/
obj-$(CONFIG_NET_VENDOR_RDC) += rdc/ obj-$(CONFIG_NET_VENDOR_RDC) += rdc/
obj-$(CONFIG_NET_VENDOR_ROCKER) += rocker/ obj-$(CONFIG_NET_VENDOR_ROCKER) += rocker/

View file

@ -21,7 +21,7 @@ Submitted-by: John Crispin <john@phrozen.org>
--- a/include/linux/phy.h --- a/include/linux/phy.h
+++ b/include/linux/phy.h +++ b/include/linux/phy.h
@@ -885,6 +885,10 @@ struct phy_driver { @@ -943,6 +943,10 @@ struct phy_driver {
int (*get_sqi)(struct phy_device *dev); int (*get_sqi)(struct phy_device *dev);
/** @get_sqi_max: Get the maximum signal quality indication */ /** @get_sqi_max: Get the maximum signal quality indication */
int (*get_sqi_max)(struct phy_device *dev); int (*get_sqi_max)(struct phy_device *dev);

View file

@ -21,7 +21,7 @@ Submitted-by: John Crispin <john@phrozen.org>
--- a/drivers/net/phy/phylink.c --- a/drivers/net/phy/phylink.c
+++ b/drivers/net/phy/phylink.c +++ b/drivers/net/phy/phylink.c
@@ -1449,6 +1449,11 @@ int phylink_ethtool_ksettings_set(struct @@ -1944,6 +1944,11 @@ int phylink_ethtool_ksettings_set(struct
* the presence of a PHY, this should not be changed as that * the presence of a PHY, this should not be changed as that
* should be determined from the media side advertisement. * should be determined from the media side advertisement.
*/ */
@ -33,7 +33,7 @@ Submitted-by: John Crispin <john@phrozen.org>
return phy_ethtool_ksettings_set(pl->phydev, kset); return phy_ethtool_ksettings_set(pl->phydev, kset);
} }
@@ -1750,8 +1755,11 @@ int phylink_ethtool_get_eee(struct phyli @@ -2247,8 +2252,11 @@ int phylink_ethtool_get_eee(struct phyli
ASSERT_RTNL(); ASSERT_RTNL();
@ -46,7 +46,7 @@ Submitted-by: John Crispin <john@phrozen.org>
return ret; return ret;
} }
@@ -1768,8 +1776,11 @@ int phylink_ethtool_set_eee(struct phyli @@ -2265,8 +2273,11 @@ int phylink_ethtool_set_eee(struct phyli
ASSERT_RTNL(); ASSERT_RTNL();

View file

@ -14,7 +14,7 @@ Submitted-by: Birger Koblitz <git@birger-koblitz.de>
--- a/include/linux/phy.h --- a/include/linux/phy.h
+++ b/include/linux/phy.h +++ b/include/linux/phy.h
@@ -134,6 +134,7 @@ typedef enum { @@ -138,6 +138,7 @@ typedef enum {
PHY_INTERFACE_MODE_XGMII, PHY_INTERFACE_MODE_XGMII,
PHY_INTERFACE_MODE_XLGMII, PHY_INTERFACE_MODE_XLGMII,
PHY_INTERFACE_MODE_MOCA, PHY_INTERFACE_MODE_MOCA,
@ -22,7 +22,7 @@ Submitted-by: Birger Koblitz <git@birger-koblitz.de>
PHY_INTERFACE_MODE_QSGMII, PHY_INTERFACE_MODE_QSGMII,
PHY_INTERFACE_MODE_TRGMII, PHY_INTERFACE_MODE_TRGMII,
PHY_INTERFACE_MODE_100BASEX, PHY_INTERFACE_MODE_100BASEX,
@@ -201,6 +202,8 @@ static inline const char *phy_modes(phy_ @@ -243,6 +244,8 @@ static inline const char *phy_modes(phy_
return "xlgmii"; return "xlgmii";
case PHY_INTERFACE_MODE_MOCA: case PHY_INTERFACE_MODE_MOCA:
return "moca"; return "moca";

View file

@ -14,7 +14,7 @@ Submitted-by: Birger Koblitz <mail@birger-koblitz.de>
--- a/drivers/net/phy/Kconfig --- a/drivers/net/phy/Kconfig
+++ b/drivers/net/phy/Kconfig +++ b/drivers/net/phy/Kconfig
@@ -330,6 +330,12 @@ config REALTEK_PHY @@ -356,6 +356,12 @@ config REALTEK_PHY
help help
Supports the Realtek 821x PHY. Supports the Realtek 821x PHY.
@ -29,7 +29,7 @@ Submitted-by: Birger Koblitz <mail@birger-koblitz.de>
help help
--- a/drivers/net/phy/Makefile --- a/drivers/net/phy/Makefile
+++ b/drivers/net/phy/Makefile +++ b/drivers/net/phy/Makefile
@@ -89,6 +89,7 @@ obj-$(CONFIG_NATIONAL_PHY) += national.o @@ -93,6 +93,7 @@ obj-$(CONFIG_NXP_C45_TJA11XX_PHY) += nxp
obj-$(CONFIG_NXP_TJA11XX_PHY) += nxp-tja11xx.o obj-$(CONFIG_NXP_TJA11XX_PHY) += nxp-tja11xx.o
obj-$(CONFIG_QSEMI_PHY) += qsemi.o obj-$(CONFIG_QSEMI_PHY) += qsemi.o
obj-$(CONFIG_REALTEK_PHY) += realtek.o obj-$(CONFIG_REALTEK_PHY) += realtek.o

View file

@ -21,7 +21,7 @@ Submitted-by: John Crispin <john@phrozen.org>
--- a/include/linux/phy.h --- a/include/linux/phy.h
+++ b/include/linux/phy.h +++ b/include/linux/phy.h
@@ -233,7 +233,7 @@ static inline const char *phy_modes(phy_ @@ -279,7 +279,7 @@ static inline const char *phy_modes(phy_
#define PHY_INIT_TIMEOUT 100000 #define PHY_INIT_TIMEOUT 100000
#define PHY_FORCE_TIMEOUT 10 #define PHY_FORCE_TIMEOUT 10

View file

@ -10,7 +10,7 @@ Signed-off-by: Antoine Tenart <antoine.tenart@bootlin.com>
--- a/drivers/net/phy/sfp.c --- a/drivers/net/phy/sfp.c
+++ b/drivers/net/phy/sfp.c +++ b/drivers/net/phy/sfp.c
@@ -1966,6 +1966,13 @@ static void sfp_sm_module(struct sfp *sf @@ -2147,6 +2147,13 @@ static void sfp_sm_module(struct sfp *sf
return; return;
} }

View file

@ -15,7 +15,7 @@ Signed-off-by: Antoine Tenart <antoine.tenart@bootlin.com>
--- a/drivers/net/mdio/Kconfig --- a/drivers/net/mdio/Kconfig
+++ b/drivers/net/mdio/Kconfig +++ b/drivers/net/mdio/Kconfig
@@ -40,6 +40,17 @@ config MDIO_SUN4I @@ -54,6 +54,17 @@ config MDIO_SUN4I
interface units of the Allwinner SoC that have an EMAC (A10, interface units of the Allwinner SoC that have an EMAC (A10,
A12, A10s, etc.) A12, A10s, etc.)
@ -35,7 +35,7 @@ Signed-off-by: Antoine Tenart <antoine.tenart@bootlin.com>
depends on ARCH_XGENE || COMPILE_TEST depends on ARCH_XGENE || COMPILE_TEST
--- a/drivers/net/mdio/Makefile --- a/drivers/net/mdio/Makefile
+++ b/drivers/net/mdio/Makefile +++ b/drivers/net/mdio/Makefile
@@ -17,6 +17,7 @@ obj-$(CONFIG_MDIO_MOXART) += mdio-moxar @@ -19,6 +19,7 @@ obj-$(CONFIG_MDIO_MOXART) += mdio-moxar
obj-$(CONFIG_MDIO_MSCC_MIIM) += mdio-mscc-miim.o obj-$(CONFIG_MDIO_MSCC_MIIM) += mdio-mscc-miim.o
obj-$(CONFIG_MDIO_MVUSB) += mdio-mvusb.o obj-$(CONFIG_MDIO_MVUSB) += mdio-mvusb.o
obj-$(CONFIG_MDIO_OCTEON) += mdio-octeon.o obj-$(CONFIG_MDIO_OCTEON) += mdio-octeon.o

View file

@ -10,7 +10,7 @@ Signed-off-by: Antoine Tenart <antoine.tenart@bootlin.com>
--- a/drivers/net/phy/sfp.c --- a/drivers/net/phy/sfp.c
+++ b/drivers/net/phy/sfp.c +++ b/drivers/net/phy/sfp.c
@@ -413,32 +413,72 @@ static int sfp_i2c_write(struct sfp *sfp @@ -539,32 +539,72 @@ static int sfp_i2c_write(struct sfp *sfp
return ret == ARRAY_SIZE(msgs) ? len : 0; return ret == ARRAY_SIZE(msgs) ? len : 0;
} }

View file

@ -32,7 +32,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
--- a/drivers/net/phy/mdio_bus.c --- a/drivers/net/phy/mdio_bus.c
+++ b/drivers/net/phy/mdio_bus.c +++ b/drivers/net/phy/mdio_bus.c
@@ -734,6 +734,32 @@ out: @@ -737,6 +737,32 @@ out:
} }
/** /**
@ -65,9 +65,9 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* __mdiobus_read - Unlocked version of the mdiobus_read function * __mdiobus_read - Unlocked version of the mdiobus_read function
* @bus: the mii_bus struct * @bus: the mii_bus struct
* @addr: the phy address * @addr: the phy address
@@ -749,7 +775,10 @@ int __mdiobus_read(struct mii_bus *bus, @@ -752,7 +778,10 @@ int __mdiobus_read(struct mii_bus *bus,
WARN_ON_ONCE(!mutex_is_locked(&bus->mdio_lock)); lockdep_assert_held_once(&bus->mdio_lock);
- retval = bus->read(bus, addr, regnum); - retval = bus->read(bus, addr, regnum);
+ if (bus->read_paged) + if (bus->read_paged)
@ -77,7 +77,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
trace_mdio_access(bus, 1, addr, regnum, retval, retval); trace_mdio_access(bus, 1, addr, regnum, retval, retval);
mdiobus_stats_acct(&bus->stats[addr], true, retval); mdiobus_stats_acct(&bus->stats[addr], true, retval);
@@ -759,6 +788,40 @@ int __mdiobus_read(struct mii_bus *bus, @@ -762,6 +791,40 @@ int __mdiobus_read(struct mii_bus *bus,
EXPORT_SYMBOL(__mdiobus_read); EXPORT_SYMBOL(__mdiobus_read);
/** /**
@ -118,9 +118,9 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* __mdiobus_write - Unlocked version of the mdiobus_write function * __mdiobus_write - Unlocked version of the mdiobus_write function
* @bus: the mii_bus struct * @bus: the mii_bus struct
* @addr: the phy address * @addr: the phy address
@@ -775,7 +838,10 @@ int __mdiobus_write(struct mii_bus *bus, @@ -778,7 +841,10 @@ int __mdiobus_write(struct mii_bus *bus,
WARN_ON_ONCE(!mutex_is_locked(&bus->mdio_lock)); lockdep_assert_held_once(&bus->mdio_lock);
- err = bus->write(bus, addr, regnum, val); - err = bus->write(bus, addr, regnum, val);
+ if (bus->write_paged) + if (bus->write_paged)
@ -130,7 +130,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
trace_mdio_access(bus, 0, addr, regnum, val, err); trace_mdio_access(bus, 0, addr, regnum, val, err);
mdiobus_stats_acct(&bus->stats[addr], false, err); mdiobus_stats_acct(&bus->stats[addr], false, err);
@@ -785,6 +851,39 @@ int __mdiobus_write(struct mii_bus *bus, @@ -788,6 +854,39 @@ int __mdiobus_write(struct mii_bus *bus,
EXPORT_SYMBOL(__mdiobus_write); EXPORT_SYMBOL(__mdiobus_write);
/** /**
@ -170,7 +170,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* __mdiobus_modify_changed - Unlocked version of the mdiobus_modify function * __mdiobus_modify_changed - Unlocked version of the mdiobus_modify function
* @bus: the mii_bus struct * @bus: the mii_bus struct
* @addr: the phy address * @addr: the phy address
@@ -817,6 +916,43 @@ int __mdiobus_modify_changed(struct mii_ @@ -820,6 +919,43 @@ int __mdiobus_modify_changed(struct mii_
EXPORT_SYMBOL_GPL(__mdiobus_modify_changed); EXPORT_SYMBOL_GPL(__mdiobus_modify_changed);
/** /**
@ -214,7 +214,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* mdiobus_read_nested - Nested version of the mdiobus_read function * mdiobus_read_nested - Nested version of the mdiobus_read function
* @bus: the mii_bus struct * @bus: the mii_bus struct
* @addr: the phy address * @addr: the phy address
@@ -842,6 +978,79 @@ int mdiobus_read_nested(struct mii_bus * @@ -845,6 +981,79 @@ int mdiobus_read_nested(struct mii_bus *
EXPORT_SYMBOL(mdiobus_read_nested); EXPORT_SYMBOL(mdiobus_read_nested);
/** /**
@ -294,7 +294,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* mdiobus_read - Convenience function for reading a given MII mgmt register * mdiobus_read - Convenience function for reading a given MII mgmt register
* @bus: the mii_bus struct * @bus: the mii_bus struct
* @addr: the phy address * @addr: the phy address
@@ -864,6 +1073,29 @@ int mdiobus_read(struct mii_bus *bus, in @@ -867,6 +1076,29 @@ int mdiobus_read(struct mii_bus *bus, in
EXPORT_SYMBOL(mdiobus_read); EXPORT_SYMBOL(mdiobus_read);
/** /**
@ -324,7 +324,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* mdiobus_write_nested - Nested version of the mdiobus_write function * mdiobus_write_nested - Nested version of the mdiobus_write function
* @bus: the mii_bus struct * @bus: the mii_bus struct
* @addr: the phy address * @addr: the phy address
@@ -890,6 +1122,33 @@ int mdiobus_write_nested(struct mii_bus @@ -893,6 +1125,33 @@ int mdiobus_write_nested(struct mii_bus
EXPORT_SYMBOL(mdiobus_write_nested); EXPORT_SYMBOL(mdiobus_write_nested);
/** /**
@ -358,7 +358,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* mdiobus_write - Convenience function for writing a given MII mgmt register * mdiobus_write - Convenience function for writing a given MII mgmt register
* @bus: the mii_bus struct * @bus: the mii_bus struct
* @addr: the phy address * @addr: the phy address
@@ -913,6 +1172,30 @@ int mdiobus_write(struct mii_bus *bus, i @@ -916,6 +1175,30 @@ int mdiobus_write(struct mii_bus *bus, i
EXPORT_SYMBOL(mdiobus_write); EXPORT_SYMBOL(mdiobus_write);
/** /**
@ -389,7 +389,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* mdiobus_modify - Convenience function for modifying a given mdio device * mdiobus_modify - Convenience function for modifying a given mdio device
* register * register
* @bus: the mii_bus struct * @bus: the mii_bus struct
@@ -934,6 +1217,51 @@ int mdiobus_modify(struct mii_bus *bus, @@ -937,6 +1220,51 @@ int mdiobus_modify(struct mii_bus *bus,
EXPORT_SYMBOL_GPL(mdiobus_modify); EXPORT_SYMBOL_GPL(mdiobus_modify);
/** /**
@ -443,7 +443,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* @dev: target MDIO device * @dev: target MDIO device
--- a/drivers/net/phy/phy-core.c --- a/drivers/net/phy/phy-core.c
+++ b/drivers/net/phy/phy-core.c +++ b/drivers/net/phy/phy-core.c
@@ -481,10 +481,16 @@ int __phy_read_mmd(struct phy_device *ph @@ -482,10 +482,16 @@ int __phy_read_mmd(struct phy_device *ph
struct mii_bus *bus = phydev->mdio.bus; struct mii_bus *bus = phydev->mdio.bus;
int phy_addr = phydev->mdio.addr; int phy_addr = phydev->mdio.addr;
@ -464,7 +464,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
} }
return val; return val;
} }
@@ -537,12 +543,18 @@ int __phy_write_mmd(struct phy_device *p @@ -538,12 +544,18 @@ int __phy_write_mmd(struct phy_device *p
struct mii_bus *bus = phydev->mdio.bus; struct mii_bus *bus = phydev->mdio.bus;
int phy_addr = phydev->mdio.addr; int phy_addr = phydev->mdio.addr;
@ -487,7 +487,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
} }
return ret; return ret;
} }
@@ -748,6 +760,13 @@ EXPORT_SYMBOL_GPL(phy_modify_mmd); @@ -749,6 +761,13 @@ EXPORT_SYMBOL_GPL(phy_modify_mmd);
static int __phy_read_page(struct phy_device *phydev) static int __phy_read_page(struct phy_device *phydev)
{ {
@ -501,7 +501,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
if (WARN_ONCE(!phydev->drv->read_page, "read_page callback not available, PHY driver not loaded?\n")) if (WARN_ONCE(!phydev->drv->read_page, "read_page callback not available, PHY driver not loaded?\n"))
return -EOPNOTSUPP; return -EOPNOTSUPP;
@@ -756,6 +775,13 @@ static int __phy_read_page(struct phy_de @@ -757,6 +776,13 @@ static int __phy_read_page(struct phy_de
static int __phy_write_page(struct phy_device *phydev, int page) static int __phy_write_page(struct phy_device *phydev, int page)
{ {
@ -515,7 +515,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
if (WARN_ONCE(!phydev->drv->write_page, "write_page callback not available, PHY driver not loaded?\n")) if (WARN_ONCE(!phydev->drv->write_page, "write_page callback not available, PHY driver not loaded?\n"))
return -EOPNOTSUPP; return -EOPNOTSUPP;
@@ -857,6 +883,18 @@ int phy_read_paged(struct phy_device *ph @@ -858,6 +884,18 @@ int phy_read_paged(struct phy_device *ph
{ {
int ret = 0, oldpage; int ret = 0, oldpage;
@ -534,7 +534,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
oldpage = phy_select_page(phydev, page); oldpage = phy_select_page(phydev, page);
if (oldpage >= 0) if (oldpage >= 0)
ret = __phy_read(phydev, regnum); ret = __phy_read(phydev, regnum);
@@ -878,6 +916,18 @@ int phy_write_paged(struct phy_device *p @@ -879,6 +917,18 @@ int phy_write_paged(struct phy_device *p
{ {
int ret = 0, oldpage; int ret = 0, oldpage;
@ -563,7 +563,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
#define MII_DEVADDR_C45_SHIFT 16 #define MII_DEVADDR_C45_SHIFT 16
#define MII_DEVADDR_C45_MASK GENMASK(20, 16) #define MII_DEVADDR_C45_MASK GENMASK(20, 16)
#define MII_REGADDR_C45_MASK GENMASK(15, 0) #define MII_REGADDR_C45_MASK GENMASK(15, 0)
@@ -327,11 +328,19 @@ static inline void mii_10gbt_stat_mod_li @@ -340,11 +341,19 @@ static inline void mii_10gbt_stat_mod_li
advertising, lpa & MDIO_AN_10GBT_STAT_LP10G); advertising, lpa & MDIO_AN_10GBT_STAT_LP10G);
} }
@ -583,7 +583,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
int mdiobus_read(struct mii_bus *bus, int addr, u32 regnum); int mdiobus_read(struct mii_bus *bus, int addr, u32 regnum);
int mdiobus_read_nested(struct mii_bus *bus, int addr, u32 regnum); int mdiobus_read_nested(struct mii_bus *bus, int addr, u32 regnum);
int mdiobus_write(struct mii_bus *bus, int addr, u32 regnum, u16 val); int mdiobus_write(struct mii_bus *bus, int addr, u32 regnum, u16 val);
@@ -339,11 +348,51 @@ int mdiobus_write_nested(struct mii_bus @@ -352,11 +361,51 @@ int mdiobus_write_nested(struct mii_bus
int mdiobus_modify(struct mii_bus *bus, int addr, u32 regnum, u16 mask, int mdiobus_modify(struct mii_bus *bus, int addr, u32 regnum, u16 mask,
u16 set); u16 set);
@ -635,7 +635,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
static inline u16 mdiobus_c45_regad(u32 regnum) static inline u16 mdiobus_c45_regad(u32 regnum)
{ {
return FIELD_GET(MII_REGADDR_C45_MASK, regnum); return FIELD_GET(MII_REGADDR_C45_MASK, regnum);
@@ -367,6 +416,19 @@ static inline int __mdiobus_c45_write(st @@ -380,6 +429,19 @@ static inline int __mdiobus_c45_write(st
val); val);
} }
@ -665,7 +665,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
#define MDIO_DEVICE_IS_PHY 0x80000000 #define MDIO_DEVICE_IS_PHY 0x80000000
/** /**
@@ -374,6 +375,22 @@ struct mii_bus { @@ -420,6 +421,22 @@ struct mii_bus {
/** @shared: shared state across different PHYs */ /** @shared: shared state across different PHYs */
struct phy_package_shared *shared[PHY_MAX_ADDR]; struct phy_package_shared *shared[PHY_MAX_ADDR];
@ -688,7 +688,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
}; };
#define to_mii_bus(d) container_of(d, struct mii_bus, dev) #define to_mii_bus(d) container_of(d, struct mii_bus, dev)
@@ -1651,6 +1668,66 @@ static inline int __phy_package_read(str @@ -1754,6 +1771,66 @@ static inline int __phy_package_read(str
return __mdiobus_read(phydev->mdio.bus, shared->addr, regnum); return __mdiobus_read(phydev->mdio.bus, shared->addr, regnum);
} }
@ -755,7 +755,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
static inline int phy_package_write(struct phy_device *phydev, static inline int phy_package_write(struct phy_device *phydev,
u32 regnum, u16 val) u32 regnum, u16 val)
{ {
@@ -1673,6 +1750,72 @@ static inline int __phy_package_write(st @@ -1776,6 +1853,72 @@ static inline int __phy_package_write(st
return __mdiobus_write(phydev->mdio.bus, shared->addr, regnum, val); return __mdiobus_write(phydev->mdio.bus, shared->addr, regnum, val);
} }