Commit 3b2b69ef authored by David S. Miller's avatar David S. Miller

Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net

Mainline had UFO fixes, but UFO is removed in net-next so we
take the HEAD hunks.

Minor context conflict in bcmsysport statistics bug fix.
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 2e2d5d76 26273939
...@@ -459,7 +459,7 @@ pin controller? ...@@ -459,7 +459,7 @@ pin controller?
This is done by registering "ranges" of pins, which are essentially This is done by registering "ranges" of pins, which are essentially
cross-reference tables. These are described in cross-reference tables. These are described in
Documentation/pinctrl.txt Documentation/driver-api/pinctl.rst
While the pin allocation is totally managed by the pinctrl subsystem, While the pin allocation is totally managed by the pinctrl subsystem,
gpio (under gpiolib) is still maintained by gpio drivers. It may happen gpio (under gpiolib) is still maintained by gpio drivers. It may happen
......
...@@ -10395,7 +10395,7 @@ L: linux-gpio@vger.kernel.org ...@@ -10395,7 +10395,7 @@ L: linux-gpio@vger.kernel.org
T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl.git T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl.git
S: Maintained S: Maintained
F: Documentation/devicetree/bindings/pinctrl/ F: Documentation/devicetree/bindings/pinctrl/
F: Documentation/pinctrl.txt F: Documentation/driver-api/pinctl.rst
F: drivers/pinctrl/ F: drivers/pinctrl/
F: include/linux/pinctrl/ F: include/linux/pinctrl/
......
...@@ -47,10 +47,26 @@ ...@@ -47,10 +47,26 @@
#define SUN4V_CHIP_NIAGARA5 0x05 #define SUN4V_CHIP_NIAGARA5 0x05
#define SUN4V_CHIP_SPARC_M6 0x06 #define SUN4V_CHIP_SPARC_M6 0x06
#define SUN4V_CHIP_SPARC_M7 0x07 #define SUN4V_CHIP_SPARC_M7 0x07
#define SUN4V_CHIP_SPARC_M8 0x08
#define SUN4V_CHIP_SPARC64X 0x8a #define SUN4V_CHIP_SPARC64X 0x8a
#define SUN4V_CHIP_SPARC_SN 0x8b #define SUN4V_CHIP_SPARC_SN 0x8b
#define SUN4V_CHIP_UNKNOWN 0xff #define SUN4V_CHIP_UNKNOWN 0xff
/*
* The following CPU_ID_xxx constants are used
* to identify the CPU type in the setup phase
* (see head_64.S)
*/
#define CPU_ID_NIAGARA1 ('1')
#define CPU_ID_NIAGARA2 ('2')
#define CPU_ID_NIAGARA3 ('3')
#define CPU_ID_NIAGARA4 ('4')
#define CPU_ID_NIAGARA5 ('5')
#define CPU_ID_M6 ('6')
#define CPU_ID_M7 ('7')
#define CPU_ID_M8 ('8')
#define CPU_ID_SONOMA1 ('N')
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
enum ultra_tlb_layout { enum ultra_tlb_layout {
......
...@@ -506,6 +506,12 @@ static void __init sun4v_cpu_probe(void) ...@@ -506,6 +506,12 @@ static void __init sun4v_cpu_probe(void)
sparc_pmu_type = "sparc-m7"; sparc_pmu_type = "sparc-m7";
break; break;
case SUN4V_CHIP_SPARC_M8:
sparc_cpu_type = "SPARC-M8";
sparc_fpu_type = "SPARC-M8 integrated FPU";
sparc_pmu_type = "sparc-m8";
break;
case SUN4V_CHIP_SPARC_SN: case SUN4V_CHIP_SPARC_SN:
sparc_cpu_type = "SPARC-SN"; sparc_cpu_type = "SPARC-SN";
sparc_fpu_type = "SPARC-SN integrated FPU"; sparc_fpu_type = "SPARC-SN integrated FPU";
......
...@@ -328,6 +328,7 @@ static int iterate_cpu(struct cpuinfo_tree *t, unsigned int root_index) ...@@ -328,6 +328,7 @@ static int iterate_cpu(struct cpuinfo_tree *t, unsigned int root_index)
case SUN4V_CHIP_NIAGARA5: case SUN4V_CHIP_NIAGARA5:
case SUN4V_CHIP_SPARC_M6: case SUN4V_CHIP_SPARC_M6:
case SUN4V_CHIP_SPARC_M7: case SUN4V_CHIP_SPARC_M7:
case SUN4V_CHIP_SPARC_M8:
case SUN4V_CHIP_SPARC_SN: case SUN4V_CHIP_SPARC_SN:
case SUN4V_CHIP_SPARC64X: case SUN4V_CHIP_SPARC64X:
rover_inc_table = niagara_iterate_method; rover_inc_table = niagara_iterate_method;
......
...@@ -424,22 +424,25 @@ EXPORT_SYMBOL(sun4v_chip_type) ...@@ -424,22 +424,25 @@ EXPORT_SYMBOL(sun4v_chip_type)
nop nop
70: ldub [%g1 + 7], %g2 70: ldub [%g1 + 7], %g2
cmp %g2, '3' cmp %g2, CPU_ID_NIAGARA3
be,pt %xcc, 5f be,pt %xcc, 5f
mov SUN4V_CHIP_NIAGARA3, %g4 mov SUN4V_CHIP_NIAGARA3, %g4
cmp %g2, '4' cmp %g2, CPU_ID_NIAGARA4
be,pt %xcc, 5f be,pt %xcc, 5f
mov SUN4V_CHIP_NIAGARA4, %g4 mov SUN4V_CHIP_NIAGARA4, %g4
cmp %g2, '5' cmp %g2, CPU_ID_NIAGARA5
be,pt %xcc, 5f be,pt %xcc, 5f
mov SUN4V_CHIP_NIAGARA5, %g4 mov SUN4V_CHIP_NIAGARA5, %g4
cmp %g2, '6' cmp %g2, CPU_ID_M6
be,pt %xcc, 5f be,pt %xcc, 5f
mov SUN4V_CHIP_SPARC_M6, %g4 mov SUN4V_CHIP_SPARC_M6, %g4
cmp %g2, '7' cmp %g2, CPU_ID_M7
be,pt %xcc, 5f be,pt %xcc, 5f
mov SUN4V_CHIP_SPARC_M7, %g4 mov SUN4V_CHIP_SPARC_M7, %g4
cmp %g2, 'N' cmp %g2, CPU_ID_M8
be,pt %xcc, 5f
mov SUN4V_CHIP_SPARC_M8, %g4
cmp %g2, CPU_ID_SONOMA1
be,pt %xcc, 5f be,pt %xcc, 5f
mov SUN4V_CHIP_SPARC_SN, %g4 mov SUN4V_CHIP_SPARC_SN, %g4
ba,pt %xcc, 49f ba,pt %xcc, 49f
...@@ -448,10 +451,10 @@ EXPORT_SYMBOL(sun4v_chip_type) ...@@ -448,10 +451,10 @@ EXPORT_SYMBOL(sun4v_chip_type)
91: sethi %hi(prom_cpu_compatible), %g1 91: sethi %hi(prom_cpu_compatible), %g1
or %g1, %lo(prom_cpu_compatible), %g1 or %g1, %lo(prom_cpu_compatible), %g1
ldub [%g1 + 17], %g2 ldub [%g1 + 17], %g2
cmp %g2, '1' cmp %g2, CPU_ID_NIAGARA1
be,pt %xcc, 5f be,pt %xcc, 5f
mov SUN4V_CHIP_NIAGARA1, %g4 mov SUN4V_CHIP_NIAGARA1, %g4
cmp %g2, '2' cmp %g2, CPU_ID_NIAGARA2
be,pt %xcc, 5f be,pt %xcc, 5f
mov SUN4V_CHIP_NIAGARA2, %g4 mov SUN4V_CHIP_NIAGARA2, %g4
...@@ -600,6 +603,9 @@ niagara_tlb_fixup: ...@@ -600,6 +603,9 @@ niagara_tlb_fixup:
be,pt %xcc, niagara4_patch be,pt %xcc, niagara4_patch
nop nop
cmp %g1, SUN4V_CHIP_SPARC_M7 cmp %g1, SUN4V_CHIP_SPARC_M7
be,pt %xcc, niagara4_patch
nop
cmp %g1, SUN4V_CHIP_SPARC_M8
be,pt %xcc, niagara4_patch be,pt %xcc, niagara4_patch
nop nop
cmp %g1, SUN4V_CHIP_SPARC_SN cmp %g1, SUN4V_CHIP_SPARC_SN
......
...@@ -288,10 +288,17 @@ static void __init sun4v_patch(void) ...@@ -288,10 +288,17 @@ static void __init sun4v_patch(void)
sun4v_patch_2insn_range(&__sun4v_2insn_patch, sun4v_patch_2insn_range(&__sun4v_2insn_patch,
&__sun4v_2insn_patch_end); &__sun4v_2insn_patch_end);
if (sun4v_chip_type == SUN4V_CHIP_SPARC_M7 ||
sun4v_chip_type == SUN4V_CHIP_SPARC_SN) switch (sun4v_chip_type) {
case SUN4V_CHIP_SPARC_M7:
case SUN4V_CHIP_SPARC_M8:
case SUN4V_CHIP_SPARC_SN:
sun_m7_patch_2insn_range(&__sun_m7_2insn_patch, sun_m7_patch_2insn_range(&__sun_m7_2insn_patch,
&__sun_m7_2insn_patch_end); &__sun_m7_2insn_patch_end);
break;
default:
break;
}
sun4v_hvapi_init(); sun4v_hvapi_init();
} }
...@@ -529,6 +536,7 @@ static void __init init_sparc64_elf_hwcap(void) ...@@ -529,6 +536,7 @@ static void __init init_sparc64_elf_hwcap(void)
sun4v_chip_type == SUN4V_CHIP_NIAGARA5 || sun4v_chip_type == SUN4V_CHIP_NIAGARA5 ||
sun4v_chip_type == SUN4V_CHIP_SPARC_M6 || sun4v_chip_type == SUN4V_CHIP_SPARC_M6 ||
sun4v_chip_type == SUN4V_CHIP_SPARC_M7 || sun4v_chip_type == SUN4V_CHIP_SPARC_M7 ||
sun4v_chip_type == SUN4V_CHIP_SPARC_M8 ||
sun4v_chip_type == SUN4V_CHIP_SPARC_SN || sun4v_chip_type == SUN4V_CHIP_SPARC_SN ||
sun4v_chip_type == SUN4V_CHIP_SPARC64X) sun4v_chip_type == SUN4V_CHIP_SPARC64X)
cap |= HWCAP_SPARC_BLKINIT; cap |= HWCAP_SPARC_BLKINIT;
...@@ -538,6 +546,7 @@ static void __init init_sparc64_elf_hwcap(void) ...@@ -538,6 +546,7 @@ static void __init init_sparc64_elf_hwcap(void)
sun4v_chip_type == SUN4V_CHIP_NIAGARA5 || sun4v_chip_type == SUN4V_CHIP_NIAGARA5 ||
sun4v_chip_type == SUN4V_CHIP_SPARC_M6 || sun4v_chip_type == SUN4V_CHIP_SPARC_M6 ||
sun4v_chip_type == SUN4V_CHIP_SPARC_M7 || sun4v_chip_type == SUN4V_CHIP_SPARC_M7 ||
sun4v_chip_type == SUN4V_CHIP_SPARC_M8 ||
sun4v_chip_type == SUN4V_CHIP_SPARC_SN || sun4v_chip_type == SUN4V_CHIP_SPARC_SN ||
sun4v_chip_type == SUN4V_CHIP_SPARC64X) sun4v_chip_type == SUN4V_CHIP_SPARC64X)
cap |= HWCAP_SPARC_N2; cap |= HWCAP_SPARC_N2;
...@@ -568,6 +577,7 @@ static void __init init_sparc64_elf_hwcap(void) ...@@ -568,6 +577,7 @@ static void __init init_sparc64_elf_hwcap(void)
sun4v_chip_type == SUN4V_CHIP_NIAGARA5 || sun4v_chip_type == SUN4V_CHIP_NIAGARA5 ||
sun4v_chip_type == SUN4V_CHIP_SPARC_M6 || sun4v_chip_type == SUN4V_CHIP_SPARC_M6 ||
sun4v_chip_type == SUN4V_CHIP_SPARC_M7 || sun4v_chip_type == SUN4V_CHIP_SPARC_M7 ||
sun4v_chip_type == SUN4V_CHIP_SPARC_M8 ||
sun4v_chip_type == SUN4V_CHIP_SPARC_SN || sun4v_chip_type == SUN4V_CHIP_SPARC_SN ||
sun4v_chip_type == SUN4V_CHIP_SPARC64X) sun4v_chip_type == SUN4V_CHIP_SPARC64X)
cap |= (AV_SPARC_VIS | AV_SPARC_VIS2 | cap |= (AV_SPARC_VIS | AV_SPARC_VIS2 |
...@@ -578,6 +588,7 @@ static void __init init_sparc64_elf_hwcap(void) ...@@ -578,6 +588,7 @@ static void __init init_sparc64_elf_hwcap(void)
sun4v_chip_type == SUN4V_CHIP_NIAGARA5 || sun4v_chip_type == SUN4V_CHIP_NIAGARA5 ||
sun4v_chip_type == SUN4V_CHIP_SPARC_M6 || sun4v_chip_type == SUN4V_CHIP_SPARC_M6 ||
sun4v_chip_type == SUN4V_CHIP_SPARC_M7 || sun4v_chip_type == SUN4V_CHIP_SPARC_M7 ||
sun4v_chip_type == SUN4V_CHIP_SPARC_M8 ||
sun4v_chip_type == SUN4V_CHIP_SPARC_SN || sun4v_chip_type == SUN4V_CHIP_SPARC_SN ||
sun4v_chip_type == SUN4V_CHIP_SPARC64X) sun4v_chip_type == SUN4V_CHIP_SPARC64X)
cap |= (AV_SPARC_VIS3 | AV_SPARC_HPC | cap |= (AV_SPARC_VIS3 | AV_SPARC_HPC |
......
...@@ -1944,12 +1944,22 @@ static void __init setup_page_offset(void) ...@@ -1944,12 +1944,22 @@ static void __init setup_page_offset(void)
break; break;
case SUN4V_CHIP_SPARC_M7: case SUN4V_CHIP_SPARC_M7:
case SUN4V_CHIP_SPARC_SN: case SUN4V_CHIP_SPARC_SN:
default:
/* M7 and later support 52-bit virtual addresses. */ /* M7 and later support 52-bit virtual addresses. */
sparc64_va_hole_top = 0xfff8000000000000UL; sparc64_va_hole_top = 0xfff8000000000000UL;
sparc64_va_hole_bottom = 0x0008000000000000UL; sparc64_va_hole_bottom = 0x0008000000000000UL;
max_phys_bits = 49; max_phys_bits = 49;
break; break;
case SUN4V_CHIP_SPARC_M8:
default:
/* M8 and later support 54-bit virtual addresses.
* However, restricting M8 and above VA bits to 53
* as 4-level page table cannot support more than
* 53 VA bits.
*/
sparc64_va_hole_top = 0xfff0000000000000UL;
sparc64_va_hole_bottom = 0x0010000000000000UL;
max_phys_bits = 51;
break;
} }
} }
...@@ -2161,6 +2171,7 @@ static void __init sun4v_linear_pte_xor_finalize(void) ...@@ -2161,6 +2171,7 @@ static void __init sun4v_linear_pte_xor_finalize(void)
*/ */
switch (sun4v_chip_type) { switch (sun4v_chip_type) {
case SUN4V_CHIP_SPARC_M7: case SUN4V_CHIP_SPARC_M7:
case SUN4V_CHIP_SPARC_M8:
case SUN4V_CHIP_SPARC_SN: case SUN4V_CHIP_SPARC_SN:
pagecv_flag = 0x00; pagecv_flag = 0x00;
break; break;
...@@ -2313,6 +2324,7 @@ void __init paging_init(void) ...@@ -2313,6 +2324,7 @@ void __init paging_init(void)
*/ */
switch (sun4v_chip_type) { switch (sun4v_chip_type) {
case SUN4V_CHIP_SPARC_M7: case SUN4V_CHIP_SPARC_M7:
case SUN4V_CHIP_SPARC_M8:
case SUN4V_CHIP_SPARC_SN: case SUN4V_CHIP_SPARC_SN:
page_cache4v_flag = _PAGE_CP_4V; page_cache4v_flag = _PAGE_CP_4V;
break; break;
......
...@@ -875,6 +875,56 @@ static void print_version(void) ...@@ -875,6 +875,56 @@ static void print_version(void)
printk(KERN_INFO "%s", version); printk(KERN_INFO "%s", version);
} }
struct vdc_check_port_data {
int dev_no;
char *type;
};
static int vdc_device_probed(struct device *dev, void *arg)
{
struct vio_dev *vdev = to_vio_dev(dev);
struct vdc_check_port_data *port_data;
port_data = (struct vdc_check_port_data *)arg;
if ((vdev->dev_no == port_data->dev_no) &&
(!(strcmp((char *)&vdev->type, port_data->type))) &&
dev_get_drvdata(dev)) {
/* This device has already been configured
* by vdc_port_probe()
*/
return 1;
} else {
return 0;
}
}
/* Determine whether the VIO device is part of an mpgroup
* by locating all the virtual-device-port nodes associated
* with the parent virtual-device node for the VIO device
* and checking whether any of these nodes are vdc-ports
* which have already been configured.
*
* Returns true if this device is part of an mpgroup and has
* already been probed.
*/
static bool vdc_port_mpgroup_check(struct vio_dev *vdev)
{
struct vdc_check_port_data port_data;
struct device *dev;
port_data.dev_no = vdev->dev_no;
port_data.type = (char *)&vdev->type;
dev = device_find_child(vdev->dev.parent, &port_data,
vdc_device_probed);
if (dev)
return true;
return false;
}
static int vdc_port_probe(struct vio_dev *vdev, const struct vio_device_id *id) static int vdc_port_probe(struct vio_dev *vdev, const struct vio_device_id *id)
{ {
struct mdesc_handle *hp; struct mdesc_handle *hp;
...@@ -893,6 +943,14 @@ static int vdc_port_probe(struct vio_dev *vdev, const struct vio_device_id *id) ...@@ -893,6 +943,14 @@ static int vdc_port_probe(struct vio_dev *vdev, const struct vio_device_id *id)
goto err_out_release_mdesc; goto err_out_release_mdesc;
} }
/* Check if this device is part of an mpgroup */
if (vdc_port_mpgroup_check(vdev)) {
printk(KERN_WARNING
"VIO: Ignoring extra vdisk port %s",
dev_name(&vdev->dev));
goto err_out_release_mdesc;
}
port = kzalloc(sizeof(*port), GFP_KERNEL); port = kzalloc(sizeof(*port), GFP_KERNEL);
err = -ENOMEM; err = -ENOMEM;
if (!port) { if (!port) {
...@@ -943,6 +1001,9 @@ static int vdc_port_probe(struct vio_dev *vdev, const struct vio_device_id *id) ...@@ -943,6 +1001,9 @@ static int vdc_port_probe(struct vio_dev *vdev, const struct vio_device_id *id)
if (err) if (err)
goto err_out_free_tx_ring; goto err_out_free_tx_ring;
/* Note that the device driver_data is used to determine
* whether the port has been probed.
*/
dev_set_drvdata(&vdev->dev, port); dev_set_drvdata(&vdev->dev, port);
mdesc_release(hp); mdesc_release(hp);
......
...@@ -457,6 +457,8 @@ static void bcm_sysport_get_stats(struct net_device *dev, ...@@ -457,6 +457,8 @@ static void bcm_sysport_get_stats(struct net_device *dev,
else else
p = (char *)priv; p = (char *)priv;
if (priv->is_lite && !bcm_sysport_lite_stat_valid(s->type))
continue;
p += s->stat_offset; p += s->stat_offset;
if (s->stat_sizeof == sizeof(u64)) if (s->stat_sizeof == sizeof(u64))
......
...@@ -1099,7 +1099,7 @@ static int geneve_validate(struct nlattr *tb[], struct nlattr *data[], ...@@ -1099,7 +1099,7 @@ static int geneve_validate(struct nlattr *tb[], struct nlattr *data[],
if (data[IFLA_GENEVE_ID]) { if (data[IFLA_GENEVE_ID]) {
__u32 vni = nla_get_u32(data[IFLA_GENEVE_ID]); __u32 vni = nla_get_u32(data[IFLA_GENEVE_ID]);
if (vni >= GENEVE_VID_MASK) if (vni >= GENEVE_N_VID)
return -ERANGE; return -ERANGE;
} }
......
...@@ -1547,6 +1547,13 @@ static const struct dmi_system_id chv_no_valid_mask[] = { ...@@ -1547,6 +1547,13 @@ static const struct dmi_system_id chv_no_valid_mask[] = {
DMI_MATCH(DMI_PRODUCT_FAMILY, "Intel_Strago"), DMI_MATCH(DMI_PRODUCT_FAMILY, "Intel_Strago"),
}, },
}, },
{
.ident = "HP Chromebook 11 G5 (Setzer)",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "HP"),
DMI_MATCH(DMI_PRODUCT_NAME, "Setzer"),
},
},
{ {
.ident = "Acer Chromebook R11 (Cyan)", .ident = "Acer Chromebook R11 (Cyan)",
.matches = { .matches = {
......
...@@ -343,9 +343,9 @@ static const struct pinctrl_pin_desc mrfld_pins[] = { ...@@ -343,9 +343,9 @@ static const struct pinctrl_pin_desc mrfld_pins[] = {
static const unsigned int mrfld_sdio_pins[] = { 50, 51, 52, 53, 54, 55, 56 }; static const unsigned int mrfld_sdio_pins[] = { 50, 51, 52, 53, 54, 55, 56 };
static const unsigned int mrfld_spi5_pins[] = { 90, 91, 92, 93, 94, 95, 96 }; static const unsigned int mrfld_spi5_pins[] = { 90, 91, 92, 93, 94, 95, 96 };
static const unsigned int mrfld_uart0_pins[] = { 124, 125, 126, 127 }; static const unsigned int mrfld_uart0_pins[] = { 115, 116, 117, 118 };
static const unsigned int mrfld_uart1_pins[] = { 128, 129, 130, 131 }; static const unsigned int mrfld_uart1_pins[] = { 119, 120, 121, 122 };
static const unsigned int mrfld_uart2_pins[] = { 132, 133, 134, 135 }; static const unsigned int mrfld_uart2_pins[] = { 123, 124, 125, 126 };
static const unsigned int mrfld_pwm0_pins[] = { 144 }; static const unsigned int mrfld_pwm0_pins[] = { 144 };
static const unsigned int mrfld_pwm1_pins[] = { 145 }; static const unsigned int mrfld_pwm1_pins[] = { 145 };
static const unsigned int mrfld_pwm2_pins[] = { 132 }; static const unsigned int mrfld_pwm2_pins[] = { 132 };
......
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
#define IRQ_STATUS 0x10 #define IRQ_STATUS 0x10
#define IRQ_WKUP 0x18 #define IRQ_WKUP 0x18
#define NB_FUNCS 2 #define NB_FUNCS 3
#define GPIO_PER_REG 32 #define GPIO_PER_REG 32
/** /**
...@@ -126,6 +126,16 @@ struct armada_37xx_pinctrl { ...@@ -126,6 +126,16 @@ struct armada_37xx_pinctrl {
.funcs = {_func1, "gpio"} \ .funcs = {_func1, "gpio"} \
} }
#define PIN_GRP_GPIO_3(_name, _start, _nr, _mask, _v1, _v2, _v3, _f1, _f2) \
{ \
.name = _name, \
.start_pin = _start, \
.npins = _nr, \
.reg_mask = _mask, \
.val = {_v1, _v2, _v3}, \
.funcs = {_f1, _f2, "gpio"} \
}
#define PIN_GRP_EXTRA(_name, _start, _nr, _mask, _v1, _v2, _start2, _nr2, \ #define PIN_GRP_EXTRA(_name, _start, _nr, _mask, _v1, _v2, _start2, _nr2, \
_f1, _f2) \ _f1, _f2) \
{ \ { \
...@@ -171,12 +181,13 @@ static struct armada_37xx_pin_group armada_37xx_sb_groups[] = { ...@@ -171,12 +181,13 @@ static struct armada_37xx_pin_group armada_37xx_sb_groups[] = {
PIN_GRP_GPIO("usb32_drvvbus0", 0, 1, BIT(0), "drvbus"), PIN_GRP_GPIO("usb32_drvvbus0", 0, 1, BIT(0), "drvbus"),
PIN_GRP_GPIO("usb2_drvvbus1", 1, 1, BIT(1), "drvbus"), PIN_GRP_GPIO("usb2_drvvbus1", 1, 1, BIT(1), "drvbus"),
PIN_GRP_GPIO("sdio_sb", 24, 6, BIT(2), "sdio"), PIN_GRP_GPIO("sdio_sb", 24, 6, BIT(2), "sdio"),
PIN_GRP_EXTRA("rgmii", 6, 12, BIT(3), 0, BIT(3), 23, 1, "mii", "gpio"), PIN_GRP_GPIO("rgmii", 6, 12, BIT(3), "mii"),
PIN_GRP_GPIO("pcie1", 3, 2, BIT(4), "pcie"), PIN_GRP_GPIO("pcie1", 3, 2, BIT(4), "pcie"),
PIN_GRP_GPIO("ptp", 20, 3, BIT(5), "ptp"), PIN_GRP_GPIO("ptp", 20, 3, BIT(5), "ptp"),
PIN_GRP("ptp_clk", 21, 1, BIT(6), "ptp", "mii"), PIN_GRP("ptp_clk", 21, 1, BIT(6), "ptp", "mii"),
PIN_GRP("ptp_trig", 22, 1, BIT(7), "ptp", "mii"), PIN_GRP("ptp_trig", 22, 1, BIT(7), "ptp", "mii"),
PIN_GRP("mii_col", 23, 1, BIT(8), "mii", "mii_err"), PIN_GRP_GPIO_3("mii_col", 23, 1, BIT(8) | BIT(14), 0, BIT(8), BIT(14),
"mii", "mii_err"),
}; };
const struct armada_37xx_pin_data armada_37xx_pin_nb = { const struct armada_37xx_pin_data armada_37xx_pin_nb = {
...@@ -187,7 +198,7 @@ const struct armada_37xx_pin_data armada_37xx_pin_nb = { ...@@ -187,7 +198,7 @@ const struct armada_37xx_pin_data armada_37xx_pin_nb = {
}; };
const struct armada_37xx_pin_data armada_37xx_pin_sb = { const struct armada_37xx_pin_data armada_37xx_pin_sb = {
.nr_pins = 29, .nr_pins = 30,
.name = "GPIO2", .name = "GPIO2",
.groups = armada_37xx_sb_groups, .groups = armada_37xx_sb_groups,
.ngroups = ARRAY_SIZE(armada_37xx_sb_groups), .ngroups = ARRAY_SIZE(armada_37xx_sb_groups),
...@@ -208,7 +219,7 @@ static int armada_37xx_get_func_reg(struct armada_37xx_pin_group *grp, ...@@ -208,7 +219,7 @@ static int armada_37xx_get_func_reg(struct armada_37xx_pin_group *grp,
{ {
int f; int f;
for (f = 0; f < NB_FUNCS; f++) for (f = 0; (f < NB_FUNCS) && grp->funcs[f]; f++)
if (!strcmp(grp->funcs[f], func)) if (!strcmp(grp->funcs[f], func))
return f; return f;
...@@ -795,7 +806,7 @@ static int armada_37xx_fill_group(struct armada_37xx_pinctrl *info) ...@@ -795,7 +806,7 @@ static int armada_37xx_fill_group(struct armada_37xx_pinctrl *info)
for (j = 0; j < grp->extra_npins; j++) for (j = 0; j < grp->extra_npins; j++)
grp->pins[i+j] = grp->extra_pin + j; grp->pins[i+j] = grp->extra_pin + j;
for (f = 0; f < NB_FUNCS; f++) { for (f = 0; (f < NB_FUNCS) && grp->funcs[f]; f++) {
int ret; int ret;
/* check for unique functions and count groups */ /* check for unique functions and count groups */
ret = armada_37xx_add_function(info->funcs, &funcsize, ret = armada_37xx_add_function(info->funcs, &funcsize,
...@@ -847,7 +858,7 @@ static int armada_37xx_fill_func(struct armada_37xx_pinctrl *info) ...@@ -847,7 +858,7 @@ static int armada_37xx_fill_func(struct armada_37xx_pinctrl *info)
struct armada_37xx_pin_group *gp = &info->groups[g]; struct armada_37xx_pin_group *gp = &info->groups[g];
int f; int f;
for (f = 0; f < NB_FUNCS; f++) { for (f = 0; (f < NB_FUNCS) && gp->funcs[f]; f++) {
if (strcmp(gp->funcs[f], name) == 0) { if (strcmp(gp->funcs[f], name) == 0) {
*groups = gp->name; *groups = gp->name;
groups++; groups++;
......
...@@ -918,6 +918,7 @@ static const struct sunxi_desc_pin sun4i_a10_pins[] = { ...@@ -918,6 +918,7 @@ static const struct sunxi_desc_pin sun4i_a10_pins[] = {
SUNXI_FUNCTION_VARIANT(0x3, "emac", /* ETXD1 */ SUNXI_FUNCTION_VARIANT(0x3, "emac", /* ETXD1 */
PINCTRL_SUN7I_A20), PINCTRL_SUN7I_A20),
SUNXI_FUNCTION(0x4, "keypad"), /* IN6 */ SUNXI_FUNCTION(0x4, "keypad"), /* IN6 */
SUNXI_FUNCTION(0x5, "sim"), /* DET */
SUNXI_FUNCTION_IRQ(0x6, 16), /* EINT16 */ SUNXI_FUNCTION_IRQ(0x6, 16), /* EINT16 */
SUNXI_FUNCTION(0x7, "csi1")), /* D16 */ SUNXI_FUNCTION(0x7, "csi1")), /* D16 */
SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 17), SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 17),
......
...@@ -1084,7 +1084,7 @@ static const unsigned usb1_pins[] = {182, 183}; ...@@ -1084,7 +1084,7 @@ static const unsigned usb1_pins[] = {182, 183};
static const int usb1_muxvals[] = {0, 0}; static const int usb1_muxvals[] = {0, 0};
static const unsigned usb2_pins[] = {184, 185}; static const unsigned usb2_pins[] = {184, 185};
static const int usb2_muxvals[] = {0, 0}; static const int usb2_muxvals[] = {0, 0};
static const unsigned usb3_pins[] = {186, 187}; static const unsigned usb3_pins[] = {187, 188};
static const int usb3_muxvals[] = {0, 0}; static const int usb3_muxvals[] = {0, 0};
static const unsigned port_range0_pins[] = { static const unsigned port_range0_pins[] = {
300, 301, 302, 303, 304, 305, 306, 307, /* PORT0x */ 300, 301, 302, 303, 304, 305, 306, 307, /* PORT0x */
......
...@@ -64,10 +64,8 @@ static int zx_set_mux(struct pinctrl_dev *pctldev, unsigned int func_selector, ...@@ -64,10 +64,8 @@ static int zx_set_mux(struct pinctrl_dev *pctldev, unsigned int func_selector,
struct zx_pinctrl_soc_info *info = zpctl->info; struct zx_pinctrl_soc_info *info = zpctl->info;
const struct pinctrl_pin_desc *pindesc = info->pins + group_selector; const struct pinctrl_pin_desc *pindesc = info->pins + group_selector;
struct zx_pin_data *data = pindesc->drv_data; struct zx_pin_data *data = pindesc->drv_data;
struct zx_mux_desc *mux = data->muxes; struct zx_mux_desc *mux;
u32 mask = (1 << data->width) - 1; u32 mask, offset, bitpos;
u32 offset = data->offset;
u32 bitpos = data->bitpos;
struct function_desc *func; struct function_desc *func;
unsigned long flags; unsigned long flags;
u32 val, mval; u32 val, mval;
...@@ -76,6 +74,11 @@ static int zx_set_mux(struct pinctrl_dev *pctldev, unsigned int func_selector, ...@@ -76,6 +74,11 @@ static int zx_set_mux(struct pinctrl_dev *pctldev, unsigned int func_selector,
if (!data) if (!data)
return -EINVAL; return -EINVAL;
mux = data->muxes;
mask = (1 << data->width) - 1;
offset = data->offset;
bitpos = data->bitpos;
func = pinmux_generic_get_function(pctldev, func_selector); func = pinmux_generic_get_function(pctldev, func_selector);
if (!func) if (!func)
return -EINVAL; return -EINVAL;
......
...@@ -843,7 +843,7 @@ struct dev_links_info { ...@@ -843,7 +843,7 @@ struct dev_links_info {
* hibernation, system resume and during runtime PM transitions * hibernation, system resume and during runtime PM transitions
* along with subsystem-level and driver-level callbacks. * along with subsystem-level and driver-level callbacks.
* @pins: For device pin management. * @pins: For device pin management.
* See Documentation/pinctrl.txt for details. * See Documentation/driver-api/pinctl.rst for details.
* @msi_list: Hosts MSI descriptors * @msi_list: Hosts MSI descriptors
* @msi_domain: The generic MSI domain this device is using. * @msi_domain: The generic MSI domain this device is using.
* @numa_node: NUMA node this device is close to. * @numa_node: NUMA node this device is close to.
......
...@@ -81,8 +81,8 @@ ...@@ -81,8 +81,8 @@
* it. * it.
* @PIN_CONFIG_OUTPUT: this will configure the pin as an output and drive a * @PIN_CONFIG_OUTPUT: this will configure the pin as an output and drive a
* value on the line. Use argument 1 to indicate high level, argument 0 to * value on the line. Use argument 1 to indicate high level, argument 0 to
* indicate low level. (Please see Documentation/pinctrl.txt, section * indicate low level. (Please see Documentation/driver-api/pinctl.rst,
* "GPIO mode pitfalls" for a discussion around this parameter.) * section "GPIO mode pitfalls" for a discussion around this parameter.)
* @PIN_CONFIG_POWER_SOURCE: if the pin can select between different power * @PIN_CONFIG_POWER_SOURCE: if the pin can select between different power
* supplies, the argument to this parameter (on a custom format) tells * supplies, the argument to this parameter (on a custom format) tells
* the driver which alternative power source to use. * the driver which alternative power source to use.
......
...@@ -1725,6 +1725,13 @@ static __net_init int inet_init_net(struct net *net) ...@@ -1725,6 +1725,13 @@ static __net_init int inet_init_net(struct net *net)
net->ipv4.sysctl_ip_prot_sock = PROT_SOCK; net->ipv4.sysctl_ip_prot_sock = PROT_SOCK;
#endif #endif
/* Some igmp sysctl, whose values are always used */
net->ipv4.sysctl_igmp_max_memberships = 20;
net->ipv4.sysctl_igmp_max_msf = 10;
/* IGMP reports for link-local multicast groups are enabled by default */
net->ipv4.sysctl_igmp_llm_reports = 1;
net->ipv4.sysctl_igmp_qrv = 2;
return 0; return 0;
} }
......
...@@ -2976,12 +2976,6 @@ static int __net_init igmp_net_init(struct net *net) ...@@ -2976,12 +2976,6 @@ static int __net_init igmp_net_init(struct net *net)
goto out_sock; goto out_sock;
} }
/* Sysctl initialization */
net->ipv4.sysctl_igmp_max_memberships = 20;
net->ipv4.sysctl_igmp_max_msf = 10;
/* IGMP reports for link-local multicast groups are enabled by default */
net->ipv4.sysctl_igmp_llm_reports = 1;
net->ipv4.sysctl_igmp_qrv = 2;
return 0; return 0;
out_sock: out_sock:
......
...@@ -809,7 +809,7 @@ static int udp_send_skb(struct sk_buff *skb, struct flowi4 *fl4) ...@@ -809,7 +809,7 @@ static int udp_send_skb(struct sk_buff *skb, struct flowi4 *fl4)
if (is_udplite) /* UDP-Lite */ if (is_udplite) /* UDP-Lite */
csum = udplite_csum(skb); csum = udplite_csum(skb);
else if (sk->sk_no_check_tx) { /* UDP csum disabled */ else if (sk->sk_no_check_tx && !skb_is_gso(skb)) { /* UDP csum off */
skb->ip_summed = CHECKSUM_NONE; skb->ip_summed = CHECKSUM_NONE;
goto send; goto send;
......
...@@ -3698,14 +3698,19 @@ packet_setsockopt(struct socket *sock, int level, int optname, char __user *optv ...@@ -3698,14 +3698,19 @@ packet_setsockopt(struct socket *sock, int level, int optname, char __user *optv
if (optlen != sizeof(val)) if (optlen != sizeof(val))
return -EINVAL; return -EINVAL;
if (po->rx_ring.pg_vec || po->tx_ring.pg_vec)
return -EBUSY;
if (copy_from_user(&val, optval, sizeof(val))) if (copy_from_user(&val, optval, sizeof(val)))
return -EFAULT; return -EFAULT;
if (val > INT_MAX) if (val > INT_MAX)
return -EINVAL; return -EINVAL;
po->tp_reserve = val; lock_sock(sk);
return 0; if (po->rx_ring.pg_vec || po->tx_ring.pg_vec) {
ret = -EBUSY;
} else {
po->tp_reserve = val;
ret = 0;
}
release_sock(sk);
return ret;
} }
case PACKET_LOSS: case PACKET_LOSS:
{ {
......
...@@ -49,9 +49,9 @@ static int ipt_init_target(struct net *net, struct xt_entry_target *t, ...@@ -49,9 +49,9 @@ static int ipt_init_target(struct net *net, struct xt_entry_target *t,
return PTR_ERR(target); return PTR_ERR(target);
t->u.kernel.target = target; t->u.kernel.target = target;
memset(&par, 0, sizeof(par));
par.net = net; par.net = net;
par.table = table; par.table = table;
par.entryinfo = NULL;
par.target = target; par.target = target;
par.targinfo = t->data; par.targinfo = t->data;
par.hook_mask = hook; par.hook_mask = hook;
......
...@@ -1455,10 +1455,8 @@ static bool tipc_node_check_state(struct tipc_node *n, struct sk_buff *skb, ...@@ -1455,10 +1455,8 @@ static bool tipc_node_check_state(struct tipc_node *n, struct sk_buff *skb,
/* Initiate synch mode if applicable */ /* Initiate synch mode if applicable */
if ((usr == TUNNEL_PROTOCOL) && (mtyp == SYNCH_MSG) && (oseqno == 1)) { if ((usr == TUNNEL_PROTOCOL) && (mtyp == SYNCH_MSG) && (oseqno == 1)) {
syncpt = iseqno + exp_pkts - 1; syncpt = iseqno + exp_pkts - 1;
if (!tipc_link_is_up(l)) { if (!tipc_link_is_up(l))
tipc_link_fsm_evt(l, LINK_ESTABLISH_EVT);
__tipc_node_link_up(n, bearer_id, xmitq); __tipc_node_link_up(n, bearer_id, xmitq);
}
if (n->state == SELF_UP_PEER_UP) { if (n->state == SELF_UP_PEER_UP) {
n->sync_point = syncpt; n->sync_point = syncpt;
tipc_link_fsm_evt(l, LINK_SYNCH_BEGIN_EVT); tipc_link_fsm_evt(l, LINK_SYNCH_BEGIN_EVT);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment