chip.c (7ffe939dd9c71e149f31817394b70b52b4067304) | chip.c (720c6343ef67de926251b0c1b3bb0b76d2cff946) |
---|---|
1/* 2 * Marvell 88e6xxx Ethernet switch single-chip support 3 * 4 * Copyright (c) 2008 Marvell Semiconductor 5 * 6 * Copyright (c) 2015 CMC Electronics, Inc. 7 * Added support for VLAN Table Unit operations 8 * --- 2683 unchanged lines hidden (view full) --- 2692 2693 err = mv88e6xxx_g1_write(chip, GLOBAL_MAC_45, (addr[4] << 8) | addr[5]); 2694 if (err) 2695 return err; 2696 2697 return 0; 2698} 2699 | 1/* 2 * Marvell 88e6xxx Ethernet switch single-chip support 3 * 4 * Copyright (c) 2008 Marvell Semiconductor 5 * 6 * Copyright (c) 2015 CMC Electronics, Inc. 7 * Added support for VLAN Table Unit operations 8 * --- 2683 unchanged lines hidden (view full) --- 2692 2693 err = mv88e6xxx_g1_write(chip, GLOBAL_MAC_45, (addr[4] << 8) | addr[5]); 2694 if (err) 2695 return err; 2696 2697 return 0; 2698} 2699 |
2700static int mv88e6xxx_g1_set_age_time(struct mv88e6xxx_chip *chip, 2701 unsigned int msecs) 2702{ 2703 const unsigned int coeff = chip->info->age_time_coeff; 2704 const unsigned int min = 0x01 * coeff; 2705 const unsigned int max = 0xff * coeff; 2706 u8 age_time; 2707 u16 val; 2708 int err; 2709 2710 if (msecs < min || msecs > max) 2711 return -ERANGE; 2712 2713 /* Round to nearest multiple of coeff */ 2714 age_time = (msecs + coeff / 2) / coeff; 2715 2716 err = mv88e6xxx_g1_read(chip, GLOBAL_ATU_CONTROL, &val); 2717 if (err) 2718 return err; 2719 2720 /* AgeTime is 11:4 bits */ 2721 val &= ~0xff0; 2722 val |= age_time << 4; 2723 2724 return mv88e6xxx_g1_write(chip, GLOBAL_ATU_CONTROL, val); 2725} 2726 | |
2727static int mv88e6xxx_set_ageing_time(struct dsa_switch *ds, 2728 unsigned int ageing_time) 2729{ 2730 struct mv88e6xxx_chip *chip = ds->priv; 2731 int err; 2732 2733 mutex_lock(&chip->reg_lock); | 2700static int mv88e6xxx_set_ageing_time(struct dsa_switch *ds, 2701 unsigned int ageing_time) 2702{ 2703 struct mv88e6xxx_chip *chip = ds->priv; 2704 int err; 2705 2706 mutex_lock(&chip->reg_lock); |
2734 err = mv88e6xxx_g1_set_age_time(chip, ageing_time); | 2707 err = mv88e6xxx_g1_atu_set_age_time(chip, ageing_time); |
2735 mutex_unlock(&chip->reg_lock); 2736 2737 return err; 2738} 2739 2740static int mv88e6xxx_g1_setup(struct mv88e6xxx_chip *chip) 2741{ 2742 struct dsa_switch *ds = chip->ds; --- 35 unchanged lines hidden (view full) --- 2778 * enable address learn messages to be sent to all message 2779 * ports. 2780 */ 2781 err = mv88e6xxx_g1_write(chip, GLOBAL_ATU_CONTROL, 2782 GLOBAL_ATU_CONTROL_LEARN2ALL); 2783 if (err) 2784 return err; 2785 | 2708 mutex_unlock(&chip->reg_lock); 2709 2710 return err; 2711} 2712 2713static int mv88e6xxx_g1_setup(struct mv88e6xxx_chip *chip) 2714{ 2715 struct dsa_switch *ds = chip->ds; --- 35 unchanged lines hidden (view full) --- 2751 * enable address learn messages to be sent to all message 2752 * ports. 2753 */ 2754 err = mv88e6xxx_g1_write(chip, GLOBAL_ATU_CONTROL, 2755 GLOBAL_ATU_CONTROL_LEARN2ALL); 2756 if (err) 2757 return err; 2758 |
2786 err = mv88e6xxx_g1_set_age_time(chip, 300000); | 2759 err = mv88e6xxx_g1_atu_set_age_time(chip, 300000); |
2787 if (err) 2788 return err; 2789 2790 /* Clear all ATU entries */ 2791 err = _mv88e6xxx_atu_flush(chip, 0, true); 2792 if (err) 2793 return err; 2794 --- 1844 unchanged lines hidden --- | 2760 if (err) 2761 return err; 2762 2763 /* Clear all ATU entries */ 2764 err = _mv88e6xxx_atu_flush(chip, 0, true); 2765 if (err) 2766 return err; 2767 --- 1844 unchanged lines hidden --- |