mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-30 21:44:27 -04:00 
			
		
		
		
	The following patches are dropped because they are merged upstream: -0001-tty-serial-drop-QCA-pecific-SoC-symbols.patch -0006-usb-drop-deprecated-symbols.patch -0009-MIPS-ath79-add-lots-of-missing-registers.patch -0010-MIPS-ath79-add-support-for-QCA953x-QCA956x-TP9343.patch -0014-MIPS-ath79-finetune-cpu-overrides.patch -0015-MIPS-ath79-enable-uart-during-early_prink.patch -0016-MIPS-ath79-get-PCIe-controller-out-of-reset.patch This patch is dropped due to the introduction of spi-mem framework: -461-spi-ath79-add-fast-flash-read.patch Thank to Michael Marley @mamarley for his work on this patch: -910-unaligned_access_hacks.patch Signed-off-by: Chuanhong Guo <gch981213@gmail.com> [synchronized kernel config with make kernel_oldconfig] Signed-off-by: Petr Štetiar <ynezz@true.cz>
		
			
				
	
	
		
			62 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From 66e584435ac0de6e0abeb6d7166fe4fe25d6bb73 Mon Sep 17 00:00:00 2001
 | |
| From: Jonas Gorski <jogo@openwrt.org>
 | |
| Date: Tue, 16 Jun 2015 13:15:08 +0200
 | |
| Subject: [PATCH] phy/mdio-bitbang: prevent rescheduling during command
 | |
| 
 | |
| It seems some phys have some maximum timings for accessing the MDIO line,
 | |
| resulting in bit errors under cpu stress. Prevent this from happening by
 | |
| disabling interrupts when sending commands.
 | |
| 
 | |
| Signed-off-by: Jonas Gorski <jogo@openwrt.org>
 | |
| ---
 | |
|  drivers/net/phy/mdio-bitbang.c | 9 +++++++++
 | |
|  1 file changed, 9 insertions(+)
 | |
| 
 | |
| --- a/drivers/net/phy/mdio-bitbang.c
 | |
| +++ b/drivers/net/phy/mdio-bitbang.c
 | |
| @@ -17,6 +17,7 @@
 | |
|   * kind, whether express or implied.
 | |
|   */
 | |
|  
 | |
| +#include <linux/irqflags.h>
 | |
|  #include <linux/module.h>
 | |
|  #include <linux/mdio-bitbang.h>
 | |
|  #include <linux/types.h>
 | |
| @@ -156,7 +157,9 @@ static int mdiobb_read(struct mii_bus *b
 | |
|  {
 | |
|  	struct mdiobb_ctrl *ctrl = bus->priv;
 | |
|  	int ret;
 | |
| +	unsigned long flags;
 | |
|  
 | |
| +	local_irq_save(flags);
 | |
|  	if (reg & MII_ADDR_C45) {
 | |
|  		reg = mdiobb_cmd_addr(ctrl, phy, reg);
 | |
|  		mdiobb_cmd(ctrl, MDIO_C45_READ, phy, reg);
 | |
| @@ -169,13 +172,17 @@ static int mdiobb_read(struct mii_bus *b
 | |
|  
 | |
|  	ret = mdiobb_get_num(ctrl, 16);
 | |
|  	mdiobb_get_bit(ctrl);
 | |
| +	local_irq_restore(flags);
 | |
| +
 | |
|  	return ret;
 | |
|  }
 | |
|  
 | |
|  static int mdiobb_write(struct mii_bus *bus, int phy, int reg, u16 val)
 | |
|  {
 | |
|  	struct mdiobb_ctrl *ctrl = bus->priv;
 | |
| +	unsigned long flags;
 | |
|  
 | |
| +	local_irq_save(flags);
 | |
|  	if (reg & MII_ADDR_C45) {
 | |
|  		reg = mdiobb_cmd_addr(ctrl, phy, reg);
 | |
|  		mdiobb_cmd(ctrl, MDIO_C45_WRITE, phy, reg);
 | |
| @@ -190,6 +197,8 @@ static int mdiobb_write(struct mii_bus *
 | |
|  
 | |
|  	ctrl->ops->set_mdio_dir(ctrl, 0);
 | |
|  	mdiobb_get_bit(ctrl);
 | |
| +	local_irq_restore(flags);
 | |
| +
 | |
|  	return 0;
 | |
|  }
 | |
|  
 |