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: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
3b2b69efec
@ -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
|
|||||||
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 @@
|
|||||||
#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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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:
|
|||||||
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)
|
|||||||
|
|
||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
*/
|
*/
|
||||||
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)
|
|||||||
*/
|
*/
|
||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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,
|
|||||||
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[],
|
|||||||
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[] = {
|
|||||||
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[] = {
|
|||||||
|
|
||||||
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 @@
|
|||||||
#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 {
|
|||||||
.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[] = {
|
|||||||
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 = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
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,
|
|||||||
{
|
{
|
||||||
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)
|
|||||||
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)
|
|||||||
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[] = {
|
|||||||
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};
|
|||||||
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,
|
|||||||
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,
|
|||||||
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 {
|
|||||||
* 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 @@
|
|||||||
* 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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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
|
|||||||
|
|
||||||
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,
|
|||||||
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,
|
|||||||
/* 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);
|
||||||
|
Loading…
Reference in New Issue
Block a user