diff options
| author | David S. Miller <davem@davemloft.net> | 2015-04-06 21:52:19 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2015-04-06 22:34:15 -0400 |
| commit | c85d6975ef923cffdd56de3e0e6aba0977282cff (patch) | |
| tree | cb497deea01827951809c9c7c0f1c22780c146be /drivers | |
| parent | 60302ff631f0f3eac0ec592e128b776f0676b397 (diff) | |
| parent | f22e6e847115abc3a0e2ad7bb18d243d42275af1 (diff) | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts:
drivers/net/ethernet/mellanox/mlx4/cmd.c
net/core/fib_rules.c
net/ipv4/fib_frontend.c
The fib_rules.c and fib_frontend.c conflicts were locking adjustments
in 'net' overlapping addition and removal of code in 'net-next'.
The mlx4 conflict was a bug fix in 'net' happening in the same
place a constant was being replaced with a more suitable macro.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers')
50 files changed, 372 insertions, 183 deletions
diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c index 69fac068669f..2eebd28b4c40 100644 --- a/drivers/firmware/dmi_scan.c +++ b/drivers/firmware/dmi_scan.c | |||
| @@ -86,10 +86,13 @@ static void dmi_table(u8 *buf, u32 len, int num, | |||
| 86 | int i = 0; | 86 | int i = 0; |
| 87 | 87 | ||
| 88 | /* | 88 | /* |
| 89 | * Stop when we see all the items the table claimed to have | 89 | * Stop when we have seen all the items the table claimed to have |
| 90 | * OR we run off the end of the table (also happens) | 90 | * (SMBIOS < 3.0 only) OR we reach an end-of-table marker OR we run |
| 91 | * off the end of the table (should never happen but sometimes does | ||
| 92 | * on bogus implementations.) | ||
| 91 | */ | 93 | */ |
| 92 | while ((i < num) && (data - buf + sizeof(struct dmi_header)) <= len) { | 94 | while ((!num || i < num) && |
| 95 | (data - buf + sizeof(struct dmi_header)) <= len) { | ||
| 93 | const struct dmi_header *dm = (const struct dmi_header *)data; | 96 | const struct dmi_header *dm = (const struct dmi_header *)data; |
| 94 | 97 | ||
| 95 | /* | 98 | /* |
| @@ -529,21 +532,10 @@ static int __init dmi_smbios3_present(const u8 *buf) | |||
| 529 | if (memcmp(buf, "_SM3_", 5) == 0 && | 532 | if (memcmp(buf, "_SM3_", 5) == 0 && |
| 530 | buf[6] < 32 && dmi_checksum(buf, buf[6])) { | 533 | buf[6] < 32 && dmi_checksum(buf, buf[6])) { |
| 531 | dmi_ver = get_unaligned_be16(buf + 7); | 534 | dmi_ver = get_unaligned_be16(buf + 7); |
| 535 | dmi_num = 0; /* No longer specified */ | ||
| 532 | dmi_len = get_unaligned_le32(buf + 12); | 536 | dmi_len = get_unaligned_le32(buf + 12); |
| 533 | dmi_base = get_unaligned_le64(buf + 16); | 537 | dmi_base = get_unaligned_le64(buf + 16); |
| 534 | 538 | ||
| 535 | /* | ||
| 536 | * The 64-bit SMBIOS 3.0 entry point no longer has a field | ||
| 537 | * containing the number of structures present in the table. | ||
| 538 | * Instead, it defines the table size as a maximum size, and | ||
| 539 | * relies on the end-of-table structure type (#127) to be used | ||
| 540 | * to signal the end of the table. | ||
| 541 | * So let's define dmi_num as an upper bound as well: each | ||
| 542 | * structure has a 4 byte header, so dmi_len / 4 is an upper | ||
| 543 | * bound for the number of structures in the table. | ||
| 544 | */ | ||
| 545 | dmi_num = dmi_len / 4; | ||
| 546 | |||
| 547 | if (dmi_walk_early(dmi_decode) == 0) { | 539 | if (dmi_walk_early(dmi_decode) == 0) { |
| 548 | pr_info("SMBIOS %d.%d present.\n", | 540 | pr_info("SMBIOS %d.%d present.\n", |
| 549 | dmi_ver >> 8, dmi_ver & 0xFF); | 541 | dmi_ver >> 8, dmi_ver & 0xFF); |
diff --git a/drivers/gpu/drm/drm_edid_load.c b/drivers/gpu/drm/drm_edid_load.c index 732cb6f8e653..4c0aa97aaf03 100644 --- a/drivers/gpu/drm/drm_edid_load.c +++ b/drivers/gpu/drm/drm_edid_load.c | |||
| @@ -287,6 +287,7 @@ int drm_load_edid_firmware(struct drm_connector *connector) | |||
| 287 | 287 | ||
| 288 | drm_mode_connector_update_edid_property(connector, edid); | 288 | drm_mode_connector_update_edid_property(connector, edid); |
| 289 | ret = drm_add_edid_modes(connector, edid); | 289 | ret = drm_add_edid_modes(connector, edid); |
| 290 | drm_edid_to_eld(connector, edid); | ||
| 290 | kfree(edid); | 291 | kfree(edid); |
| 291 | 292 | ||
| 292 | return ret; | 293 | return ret; |
diff --git a/drivers/gpu/drm/drm_probe_helper.c b/drivers/gpu/drm/drm_probe_helper.c index 6591d48c1b9d..3fee587bc284 100644 --- a/drivers/gpu/drm/drm_probe_helper.c +++ b/drivers/gpu/drm/drm_probe_helper.c | |||
| @@ -174,6 +174,7 @@ static int drm_helper_probe_single_connector_modes_merge_bits(struct drm_connect | |||
| 174 | struct edid *edid = (struct edid *) connector->edid_blob_ptr->data; | 174 | struct edid *edid = (struct edid *) connector->edid_blob_ptr->data; |
| 175 | 175 | ||
| 176 | count = drm_add_edid_modes(connector, edid); | 176 | count = drm_add_edid_modes(connector, edid); |
| 177 | drm_edid_to_eld(connector, edid); | ||
| 177 | } else | 178 | } else |
| 178 | count = (*connector_funcs->get_modes)(connector); | 179 | count = (*connector_funcs->get_modes)(connector); |
| 179 | } | 180 | } |
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c index c300e22da8ac..33a10ce967ea 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c | |||
| @@ -147,6 +147,7 @@ struct fimd_win_data { | |||
| 147 | unsigned int ovl_height; | 147 | unsigned int ovl_height; |
| 148 | unsigned int fb_width; | 148 | unsigned int fb_width; |
| 149 | unsigned int fb_height; | 149 | unsigned int fb_height; |
| 150 | unsigned int fb_pitch; | ||
| 150 | unsigned int bpp; | 151 | unsigned int bpp; |
| 151 | unsigned int pixel_format; | 152 | unsigned int pixel_format; |
| 152 | dma_addr_t dma_addr; | 153 | dma_addr_t dma_addr; |
| @@ -532,13 +533,14 @@ static void fimd_win_mode_set(struct exynos_drm_crtc *crtc, | |||
| 532 | win_data->offset_y = plane->crtc_y; | 533 | win_data->offset_y = plane->crtc_y; |
| 533 | win_data->ovl_width = plane->crtc_width; | 534 | win_data->ovl_width = plane->crtc_width; |
| 534 | win_data->ovl_height = plane->crtc_height; | 535 | win_data->ovl_height = plane->crtc_height; |
| 536 | win_data->fb_pitch = plane->pitch; | ||
| 535 | win_data->fb_width = plane->fb_width; | 537 | win_data->fb_width = plane->fb_width; |
| 536 | win_data->fb_height = plane->fb_height; | 538 | win_data->fb_height = plane->fb_height; |
| 537 | win_data->dma_addr = plane->dma_addr[0] + offset; | 539 | win_data->dma_addr = plane->dma_addr[0] + offset; |
| 538 | win_data->bpp = plane->bpp; | 540 | win_data->bpp = plane->bpp; |
| 539 | win_data->pixel_format = plane->pixel_format; | 541 | win_data->pixel_format = plane->pixel_format; |
| 540 | win_data->buf_offsize = (plane->fb_width - plane->crtc_width) * | 542 | win_data->buf_offsize = |
| 541 | (plane->bpp >> 3); | 543 | plane->pitch - (plane->crtc_width * (plane->bpp >> 3)); |
| 542 | win_data->line_size = plane->crtc_width * (plane->bpp >> 3); | 544 | win_data->line_size = plane->crtc_width * (plane->bpp >> 3); |
| 543 | 545 | ||
| 544 | DRM_DEBUG_KMS("offset_x = %d, offset_y = %d\n", | 546 | DRM_DEBUG_KMS("offset_x = %d, offset_y = %d\n", |
| @@ -704,7 +706,7 @@ static void fimd_win_commit(struct exynos_drm_crtc *crtc, int zpos) | |||
| 704 | writel(val, ctx->regs + VIDWx_BUF_START(win, 0)); | 706 | writel(val, ctx->regs + VIDWx_BUF_START(win, 0)); |
| 705 | 707 | ||
| 706 | /* buffer end address */ | 708 | /* buffer end address */ |
| 707 | size = win_data->fb_width * win_data->ovl_height * (win_data->bpp >> 3); | 709 | size = win_data->fb_pitch * win_data->ovl_height * (win_data->bpp >> 3); |
| 708 | val = (unsigned long)(win_data->dma_addr + size); | 710 | val = (unsigned long)(win_data->dma_addr + size); |
| 709 | writel(val, ctx->regs + VIDWx_BUF_END(win, 0)); | 711 | writel(val, ctx->regs + VIDWx_BUF_END(win, 0)); |
| 710 | 712 | ||
diff --git a/drivers/gpu/drm/exynos/exynos_mixer.c b/drivers/gpu/drm/exynos/exynos_mixer.c index 3518bc4654c5..2e3bc57ea50e 100644 --- a/drivers/gpu/drm/exynos/exynos_mixer.c +++ b/drivers/gpu/drm/exynos/exynos_mixer.c | |||
| @@ -55,6 +55,7 @@ struct hdmi_win_data { | |||
| 55 | unsigned int fb_x; | 55 | unsigned int fb_x; |
| 56 | unsigned int fb_y; | 56 | unsigned int fb_y; |
| 57 | unsigned int fb_width; | 57 | unsigned int fb_width; |
| 58 | unsigned int fb_pitch; | ||
| 58 | unsigned int fb_height; | 59 | unsigned int fb_height; |
| 59 | unsigned int src_width; | 60 | unsigned int src_width; |
| 60 | unsigned int src_height; | 61 | unsigned int src_height; |
| @@ -438,7 +439,7 @@ static void vp_video_buffer(struct mixer_context *ctx, int win) | |||
| 438 | } else { | 439 | } else { |
| 439 | luma_addr[0] = win_data->dma_addr; | 440 | luma_addr[0] = win_data->dma_addr; |
| 440 | chroma_addr[0] = win_data->dma_addr | 441 | chroma_addr[0] = win_data->dma_addr |
| 441 | + (win_data->fb_width * win_data->fb_height); | 442 | + (win_data->fb_pitch * win_data->fb_height); |
| 442 | } | 443 | } |
| 443 | 444 | ||
| 444 | if (win_data->scan_flags & DRM_MODE_FLAG_INTERLACE) { | 445 | if (win_data->scan_flags & DRM_MODE_FLAG_INTERLACE) { |
| @@ -447,8 +448,8 @@ static void vp_video_buffer(struct mixer_context *ctx, int win) | |||
| 447 | luma_addr[1] = luma_addr[0] + 0x40; | 448 | luma_addr[1] = luma_addr[0] + 0x40; |
| 448 | chroma_addr[1] = chroma_addr[0] + 0x40; | 449 | chroma_addr[1] = chroma_addr[0] + 0x40; |
| 449 | } else { | 450 | } else { |
| 450 | luma_addr[1] = luma_addr[0] + win_data->fb_width; | 451 | luma_addr[1] = luma_addr[0] + win_data->fb_pitch; |
| 451 | chroma_addr[1] = chroma_addr[0] + win_data->fb_width; | 452 | chroma_addr[1] = chroma_addr[0] + win_data->fb_pitch; |
| 452 | } | 453 | } |
| 453 | } else { | 454 | } else { |
| 454 | ctx->interlace = false; | 455 | ctx->interlace = false; |
| @@ -469,10 +470,10 @@ static void vp_video_buffer(struct mixer_context *ctx, int win) | |||
| 469 | vp_reg_writemask(res, VP_MODE, val, VP_MODE_FMT_MASK); | 470 | vp_reg_writemask(res, VP_MODE, val, VP_MODE_FMT_MASK); |
| 470 | 471 | ||
| 471 | /* setting size of input image */ | 472 | /* setting size of input image */ |
| 472 | vp_reg_write(res, VP_IMG_SIZE_Y, VP_IMG_HSIZE(win_data->fb_width) | | 473 | vp_reg_write(res, VP_IMG_SIZE_Y, VP_IMG_HSIZE(win_data->fb_pitch) | |
| 473 | VP_IMG_VSIZE(win_data->fb_height)); | 474 | VP_IMG_VSIZE(win_data->fb_height)); |
| 474 | /* chroma height has to reduced by 2 to avoid chroma distorions */ | 475 | /* chroma height has to reduced by 2 to avoid chroma distorions */ |
| 475 | vp_reg_write(res, VP_IMG_SIZE_C, VP_IMG_HSIZE(win_data->fb_width) | | 476 | vp_reg_write(res, VP_IMG_SIZE_C, VP_IMG_HSIZE(win_data->fb_pitch) | |
| 476 | VP_IMG_VSIZE(win_data->fb_height / 2)); | 477 | VP_IMG_VSIZE(win_data->fb_height / 2)); |
| 477 | 478 | ||
| 478 | vp_reg_write(res, VP_SRC_WIDTH, win_data->src_width); | 479 | vp_reg_write(res, VP_SRC_WIDTH, win_data->src_width); |
| @@ -559,7 +560,7 @@ static void mixer_graph_buffer(struct mixer_context *ctx, int win) | |||
| 559 | /* converting dma address base and source offset */ | 560 | /* converting dma address base and source offset */ |
| 560 | dma_addr = win_data->dma_addr | 561 | dma_addr = win_data->dma_addr |
| 561 | + (win_data->fb_x * win_data->bpp >> 3) | 562 | + (win_data->fb_x * win_data->bpp >> 3) |
| 562 | + (win_data->fb_y * win_data->fb_width * win_data->bpp >> 3); | 563 | + (win_data->fb_y * win_data->fb_pitch); |
| 563 | src_x_offset = 0; | 564 | src_x_offset = 0; |
| 564 | src_y_offset = 0; | 565 | src_y_offset = 0; |
| 565 | 566 | ||
| @@ -576,7 +577,8 @@ static void mixer_graph_buffer(struct mixer_context *ctx, int win) | |||
| 576 | MXR_GRP_CFG_FORMAT_VAL(fmt), MXR_GRP_CFG_FORMAT_MASK); | 577 | MXR_GRP_CFG_FORMAT_VAL(fmt), MXR_GRP_CFG_FORMAT_MASK); |
| 577 | 578 | ||
| 578 | /* setup geometry */ | 579 | /* setup geometry */ |
| 579 | mixer_reg_write(res, MXR_GRAPHIC_SPAN(win), win_data->fb_width); | 580 | mixer_reg_write(res, MXR_GRAPHIC_SPAN(win), |
| 581 | win_data->fb_pitch / (win_data->bpp >> 3)); | ||
| 580 | 582 | ||
| 581 | /* setup display size */ | 583 | /* setup display size */ |
| 582 | if (ctx->mxr_ver == MXR_VER_128_0_0_184 && | 584 | if (ctx->mxr_ver == MXR_VER_128_0_0_184 && |
| @@ -961,6 +963,7 @@ static void mixer_win_mode_set(struct exynos_drm_crtc *crtc, | |||
| 961 | win_data->fb_y = plane->fb_y; | 963 | win_data->fb_y = plane->fb_y; |
| 962 | win_data->fb_width = plane->fb_width; | 964 | win_data->fb_width = plane->fb_width; |
| 963 | win_data->fb_height = plane->fb_height; | 965 | win_data->fb_height = plane->fb_height; |
| 966 | win_data->fb_pitch = plane->pitch; | ||
| 964 | win_data->src_width = plane->src_width; | 967 | win_data->src_width = plane->src_width; |
| 965 | win_data->src_height = plane->src_height; | 968 | win_data->src_height = plane->src_height; |
| 966 | 969 | ||
diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c index b773368fc62c..38a742532c4f 100644 --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c | |||
| @@ -1487,7 +1487,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data, | |||
| 1487 | goto err; | 1487 | goto err; |
| 1488 | } | 1488 | } |
| 1489 | 1489 | ||
| 1490 | if (i915_needs_cmd_parser(ring)) { | 1490 | if (i915_needs_cmd_parser(ring) && args->batch_len) { |
| 1491 | batch_obj = i915_gem_execbuffer_parse(ring, | 1491 | batch_obj = i915_gem_execbuffer_parse(ring, |
| 1492 | &shadow_exec_entry, | 1492 | &shadow_exec_entry, |
| 1493 | eb, | 1493 | eb, |
diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c index 0a52c44ad03d..9c5451c97942 100644 --- a/drivers/gpu/drm/i915/intel_sprite.c +++ b/drivers/gpu/drm/i915/intel_sprite.c | |||
| @@ -1322,7 +1322,7 @@ int intel_sprite_set_colorkey(struct drm_device *dev, void *data, | |||
| 1322 | drm_modeset_lock_all(dev); | 1322 | drm_modeset_lock_all(dev); |
| 1323 | 1323 | ||
| 1324 | plane = drm_plane_find(dev, set->plane_id); | 1324 | plane = drm_plane_find(dev, set->plane_id); |
| 1325 | if (!plane) { | 1325 | if (!plane || plane->type != DRM_PLANE_TYPE_OVERLAY) { |
| 1326 | ret = -ENOENT; | 1326 | ret = -ENOENT; |
| 1327 | goto out_unlock; | 1327 | goto out_unlock; |
| 1328 | } | 1328 | } |
| @@ -1349,7 +1349,7 @@ int intel_sprite_get_colorkey(struct drm_device *dev, void *data, | |||
| 1349 | drm_modeset_lock_all(dev); | 1349 | drm_modeset_lock_all(dev); |
| 1350 | 1350 | ||
| 1351 | plane = drm_plane_find(dev, get->plane_id); | 1351 | plane = drm_plane_find(dev, get->plane_id); |
| 1352 | if (!plane) { | 1352 | if (!plane || plane->type != DRM_PLANE_TYPE_OVERLAY) { |
| 1353 | ret = -ENOENT; | 1353 | ret = -ENOENT; |
| 1354 | goto out_unlock; | 1354 | goto out_unlock; |
| 1355 | } | 1355 | } |
diff --git a/drivers/gpu/drm/radeon/cikd.h b/drivers/gpu/drm/radeon/cikd.h index c648e1996dab..243a36c93b8f 100644 --- a/drivers/gpu/drm/radeon/cikd.h +++ b/drivers/gpu/drm/radeon/cikd.h | |||
| @@ -2129,6 +2129,7 @@ | |||
| 2129 | #define VCE_UENC_REG_CLOCK_GATING 0x207c0 | 2129 | #define VCE_UENC_REG_CLOCK_GATING 0x207c0 |
| 2130 | #define VCE_SYS_INT_EN 0x21300 | 2130 | #define VCE_SYS_INT_EN 0x21300 |
| 2131 | # define VCE_SYS_INT_TRAP_INTERRUPT_EN (1 << 3) | 2131 | # define VCE_SYS_INT_TRAP_INTERRUPT_EN (1 << 3) |
| 2132 | #define VCE_LMI_VCPU_CACHE_40BIT_BAR 0x2145c | ||
| 2132 | #define VCE_LMI_CTRL2 0x21474 | 2133 | #define VCE_LMI_CTRL2 0x21474 |
| 2133 | #define VCE_LMI_CTRL 0x21498 | 2134 | #define VCE_LMI_CTRL 0x21498 |
| 2134 | #define VCE_LMI_VM_CTRL 0x214a0 | 2135 | #define VCE_LMI_VM_CTRL 0x214a0 |
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h index 5587603b4a89..33d5a4f4eebd 100644 --- a/drivers/gpu/drm/radeon/radeon.h +++ b/drivers/gpu/drm/radeon/radeon.h | |||
| @@ -1565,6 +1565,7 @@ struct radeon_dpm { | |||
| 1565 | int new_active_crtc_count; | 1565 | int new_active_crtc_count; |
| 1566 | u32 current_active_crtcs; | 1566 | u32 current_active_crtcs; |
| 1567 | int current_active_crtc_count; | 1567 | int current_active_crtc_count; |
| 1568 | bool single_display; | ||
| 1568 | struct radeon_dpm_dynamic_state dyn_state; | 1569 | struct radeon_dpm_dynamic_state dyn_state; |
| 1569 | struct radeon_dpm_fan fan; | 1570 | struct radeon_dpm_fan fan; |
| 1570 | u32 tdp_limit; | 1571 | u32 tdp_limit; |
diff --git a/drivers/gpu/drm/radeon/radeon_bios.c b/drivers/gpu/drm/radeon/radeon_bios.c index 63ccb8fa799c..d27e4ccb848c 100644 --- a/drivers/gpu/drm/radeon/radeon_bios.c +++ b/drivers/gpu/drm/radeon/radeon_bios.c | |||
| @@ -76,7 +76,7 @@ static bool igp_read_bios_from_vram(struct radeon_device *rdev) | |||
| 76 | 76 | ||
| 77 | static bool radeon_read_bios(struct radeon_device *rdev) | 77 | static bool radeon_read_bios(struct radeon_device *rdev) |
| 78 | { | 78 | { |
| 79 | uint8_t __iomem *bios; | 79 | uint8_t __iomem *bios, val1, val2; |
| 80 | size_t size; | 80 | size_t size; |
| 81 | 81 | ||
| 82 | rdev->bios = NULL; | 82 | rdev->bios = NULL; |
| @@ -86,15 +86,19 @@ static bool radeon_read_bios(struct radeon_device *rdev) | |||
| 86 | return false; | 86 | return false; |
| 87 | } | 87 | } |
| 88 | 88 | ||
| 89 | if (size == 0 || bios[0] != 0x55 || bios[1] != 0xaa) { | 89 | val1 = readb(&bios[0]); |
| 90 | val2 = readb(&bios[1]); | ||
| 91 | |||
| 92 | if (size == 0 || val1 != 0x55 || val2 != 0xaa) { | ||
| 90 | pci_unmap_rom(rdev->pdev, bios); | 93 | pci_unmap_rom(rdev->pdev, bios); |
| 91 | return false; | 94 | return false; |
| 92 | } | 95 | } |
| 93 | rdev->bios = kmemdup(bios, size, GFP_KERNEL); | 96 | rdev->bios = kzalloc(size, GFP_KERNEL); |
| 94 | if (rdev->bios == NULL) { | 97 | if (rdev->bios == NULL) { |
| 95 | pci_unmap_rom(rdev->pdev, bios); | 98 | pci_unmap_rom(rdev->pdev, bios); |
| 96 | return false; | 99 | return false; |
| 97 | } | 100 | } |
| 101 | memcpy_fromio(rdev->bios, bios, size); | ||
| 98 | pci_unmap_rom(rdev->pdev, bios); | 102 | pci_unmap_rom(rdev->pdev, bios); |
| 99 | return true; | 103 | return true; |
| 100 | } | 104 | } |
diff --git a/drivers/gpu/drm/radeon/radeon_mn.c b/drivers/gpu/drm/radeon/radeon_mn.c index a69bd441dd2d..572b4dbec186 100644 --- a/drivers/gpu/drm/radeon/radeon_mn.c +++ b/drivers/gpu/drm/radeon/radeon_mn.c | |||
| @@ -122,7 +122,6 @@ static void radeon_mn_invalidate_range_start(struct mmu_notifier *mn, | |||
| 122 | it = interval_tree_iter_first(&rmn->objects, start, end); | 122 | it = interval_tree_iter_first(&rmn->objects, start, end); |
| 123 | while (it) { | 123 | while (it) { |
| 124 | struct radeon_bo *bo; | 124 | struct radeon_bo *bo; |
| 125 | struct fence *fence; | ||
| 126 | int r; | 125 | int r; |
| 127 | 126 | ||
| 128 | bo = container_of(it, struct radeon_bo, mn_it); | 127 | bo = container_of(it, struct radeon_bo, mn_it); |
| @@ -134,12 +133,10 @@ static void radeon_mn_invalidate_range_start(struct mmu_notifier *mn, | |||
| 134 | continue; | 133 | continue; |
| 135 | } | 134 | } |
| 136 | 135 | ||
| 137 | fence = reservation_object_get_excl(bo->tbo.resv); | 136 | r = reservation_object_wait_timeout_rcu(bo->tbo.resv, true, |
| 138 | if (fence) { | 137 | false, MAX_SCHEDULE_TIMEOUT); |
| 139 | r = radeon_fence_wait((struct radeon_fence *)fence, false); | 138 | if (r) |
| 140 | if (r) | 139 | DRM_ERROR("(%d) failed to wait for user bo\n", r); |
| 141 | DRM_ERROR("(%d) failed to wait for user bo\n", r); | ||
| 142 | } | ||
| 143 | 140 | ||
| 144 | radeon_ttm_placement_from_domain(bo, RADEON_GEM_DOMAIN_CPU); | 141 | radeon_ttm_placement_from_domain(bo, RADEON_GEM_DOMAIN_CPU); |
| 145 | r = ttm_bo_validate(&bo->tbo, &bo->placement, false, false); | 142 | r = ttm_bo_validate(&bo->tbo, &bo->placement, false, false); |
diff --git a/drivers/gpu/drm/radeon/radeon_pm.c b/drivers/gpu/drm/radeon/radeon_pm.c index 33cf4108386d..c1ba83a8dd8c 100644 --- a/drivers/gpu/drm/radeon/radeon_pm.c +++ b/drivers/gpu/drm/radeon/radeon_pm.c | |||
| @@ -837,12 +837,8 @@ static void radeon_dpm_thermal_work_handler(struct work_struct *work) | |||
| 837 | radeon_pm_compute_clocks(rdev); | 837 | radeon_pm_compute_clocks(rdev); |
| 838 | } | 838 | } |
| 839 | 839 | ||
| 840 | static struct radeon_ps *radeon_dpm_pick_power_state(struct radeon_device *rdev, | 840 | static bool radeon_dpm_single_display(struct radeon_device *rdev) |
| 841 | enum radeon_pm_state_type dpm_state) | ||
| 842 | { | 841 | { |
| 843 | int i; | ||
| 844 | struct radeon_ps *ps; | ||
| 845 | u32 ui_class; | ||
| 846 | bool single_display = (rdev->pm.dpm.new_active_crtc_count < 2) ? | 842 | bool single_display = (rdev->pm.dpm.new_active_crtc_count < 2) ? |
| 847 | true : false; | 843 | true : false; |
| 848 | 844 | ||
| @@ -858,6 +854,17 @@ static struct radeon_ps *radeon_dpm_pick_power_state(struct radeon_device *rdev, | |||
| 858 | if (single_display && (r600_dpm_get_vrefresh(rdev) >= 120)) | 854 | if (single_display && (r600_dpm_get_vrefresh(rdev) >= 120)) |
| 859 | single_display = false; | 855 | single_display = false; |
| 860 | 856 | ||
| 857 | return single_display; | ||
| 858 | } | ||
| 859 | |||
| 860 | static struct radeon_ps *radeon_dpm_pick_power_state(struct radeon_device *rdev, | ||
| 861 | enum radeon_pm_state_type dpm_state) | ||
| 862 | { | ||
| 863 | int i; | ||
| 864 | struct radeon_ps *ps; | ||
| 865 | u32 ui_class; | ||
| 866 | bool single_display = radeon_dpm_single_display(rdev); | ||
| 867 | |||
| 861 | /* certain older asics have a separare 3D performance state, | 868 | /* certain older asics have a separare 3D performance state, |
| 862 | * so try that first if the user selected performance | 869 | * so try that first if the user selected performance |
| 863 | */ | 870 | */ |
| @@ -983,6 +990,7 @@ static void radeon_dpm_change_power_state_locked(struct radeon_device *rdev) | |||
| 983 | struct radeon_ps *ps; | 990 | struct radeon_ps *ps; |
| 984 | enum radeon_pm_state_type dpm_state; | 991 | enum radeon_pm_state_type dpm_state; |
| 985 | int ret; | 992 | int ret; |
| 993 | bool single_display = radeon_dpm_single_display(rdev); | ||
| 986 | 994 | ||
| 987 | /* if dpm init failed */ | 995 | /* if dpm init failed */ |
| 988 | if (!rdev->pm.dpm_enabled) | 996 | if (!rdev->pm.dpm_enabled) |
| @@ -1007,6 +1015,9 @@ static void radeon_dpm_change_power_state_locked(struct radeon_device *rdev) | |||
| 1007 | /* vce just modifies an existing state so force a change */ | 1015 | /* vce just modifies an existing state so force a change */ |
| 1008 | if (ps->vce_active != rdev->pm.dpm.vce_active) | 1016 | if (ps->vce_active != rdev->pm.dpm.vce_active) |
| 1009 | goto force; | 1017 | goto force; |
| 1018 | /* user has made a display change (such as timing) */ | ||
| 1019 | if (rdev->pm.dpm.single_display != single_display) | ||
| 1020 | goto force; | ||
| 1010 | if ((rdev->family < CHIP_BARTS) || (rdev->flags & RADEON_IS_IGP)) { | 1021 | if ((rdev->family < CHIP_BARTS) || (rdev->flags & RADEON_IS_IGP)) { |
| 1011 | /* for pre-BTC and APUs if the num crtcs changed but state is the same, | 1022 | /* for pre-BTC and APUs if the num crtcs changed but state is the same, |
| 1012 | * all we need to do is update the display configuration. | 1023 | * all we need to do is update the display configuration. |
| @@ -1069,6 +1080,7 @@ force: | |||
| 1069 | 1080 | ||
| 1070 | rdev->pm.dpm.current_active_crtcs = rdev->pm.dpm.new_active_crtcs; | 1081 | rdev->pm.dpm.current_active_crtcs = rdev->pm.dpm.new_active_crtcs; |
| 1071 | rdev->pm.dpm.current_active_crtc_count = rdev->pm.dpm.new_active_crtc_count; | 1082 | rdev->pm.dpm.current_active_crtc_count = rdev->pm.dpm.new_active_crtc_count; |
| 1083 | rdev->pm.dpm.single_display = single_display; | ||
| 1072 | 1084 | ||
| 1073 | /* wait for the rings to drain */ | 1085 | /* wait for the rings to drain */ |
| 1074 | for (i = 0; i < RADEON_NUM_RINGS; i++) { | 1086 | for (i = 0; i < RADEON_NUM_RINGS; i++) { |
diff --git a/drivers/gpu/drm/radeon/radeon_ring.c b/drivers/gpu/drm/radeon/radeon_ring.c index 2456f69efd23..8c7872339c2a 100644 --- a/drivers/gpu/drm/radeon/radeon_ring.c +++ b/drivers/gpu/drm/radeon/radeon_ring.c | |||
| @@ -495,7 +495,7 @@ static int radeon_debugfs_ring_info(struct seq_file *m, void *data) | |||
| 495 | seq_printf(m, "%u free dwords in ring\n", ring->ring_free_dw); | 495 | seq_printf(m, "%u free dwords in ring\n", ring->ring_free_dw); |
| 496 | seq_printf(m, "%u dwords in ring\n", count); | 496 | seq_printf(m, "%u dwords in ring\n", count); |
| 497 | 497 | ||
| 498 | if (!ring->ready) | 498 | if (!ring->ring) |
| 499 | return 0; | 499 | return 0; |
| 500 | 500 | ||
| 501 | /* print 8 dw before current rptr as often it's the last executed | 501 | /* print 8 dw before current rptr as often it's the last executed |
diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c index d02aa1d0f588..b292aca0f342 100644 --- a/drivers/gpu/drm/radeon/radeon_ttm.c +++ b/drivers/gpu/drm/radeon/radeon_ttm.c | |||
| @@ -598,6 +598,10 @@ static void radeon_ttm_tt_unpin_userptr(struct ttm_tt *ttm) | |||
| 598 | enum dma_data_direction direction = write ? | 598 | enum dma_data_direction direction = write ? |
| 599 | DMA_BIDIRECTIONAL : DMA_TO_DEVICE; | 599 | DMA_BIDIRECTIONAL : DMA_TO_DEVICE; |
| 600 | 600 | ||
| 601 | /* double check that we don't free the table twice */ | ||
| 602 | if (!ttm->sg->sgl) | ||
| 603 | return; | ||
| 604 | |||
| 601 | /* free the sg table and pages again */ | 605 | /* free the sg table and pages again */ |
| 602 | dma_unmap_sg(rdev->dev, ttm->sg->sgl, ttm->sg->nents, direction); | 606 | dma_unmap_sg(rdev->dev, ttm->sg->sgl, ttm->sg->nents, direction); |
| 603 | 607 | ||
diff --git a/drivers/gpu/drm/radeon/vce_v2_0.c b/drivers/gpu/drm/radeon/vce_v2_0.c index 1ac7bb825a1b..fbbe78fbd087 100644 --- a/drivers/gpu/drm/radeon/vce_v2_0.c +++ b/drivers/gpu/drm/radeon/vce_v2_0.c | |||
| @@ -156,6 +156,9 @@ int vce_v2_0_resume(struct radeon_device *rdev) | |||
| 156 | WREG32(VCE_LMI_SWAP_CNTL1, 0); | 156 | WREG32(VCE_LMI_SWAP_CNTL1, 0); |
| 157 | WREG32(VCE_LMI_VM_CTRL, 0); | 157 | WREG32(VCE_LMI_VM_CTRL, 0); |
| 158 | 158 | ||
| 159 | WREG32(VCE_LMI_VCPU_CACHE_40BIT_BAR, addr >> 8); | ||
| 160 | |||
| 161 | addr &= 0xff; | ||
| 159 | size = RADEON_GPU_PAGE_ALIGN(rdev->vce_fw->size); | 162 | size = RADEON_GPU_PAGE_ALIGN(rdev->vce_fw->size); |
| 160 | WREG32(VCE_VCPU_CACHE_OFFSET0, addr & 0x7fffffff); | 163 | WREG32(VCE_VCPU_CACHE_OFFSET0, addr & 0x7fffffff); |
| 161 | WREG32(VCE_VCPU_CACHE_SIZE0, size); | 164 | WREG32(VCE_VCPU_CACHE_SIZE0, size); |
diff --git a/drivers/iio/accel/bma180.c b/drivers/iio/accel/bma180.c index 1096da327130..75c6d2103e07 100644 --- a/drivers/iio/accel/bma180.c +++ b/drivers/iio/accel/bma180.c | |||
| @@ -659,7 +659,7 @@ static irqreturn_t bma180_trigger_handler(int irq, void *p) | |||
| 659 | 659 | ||
| 660 | mutex_lock(&data->mutex); | 660 | mutex_lock(&data->mutex); |
| 661 | 661 | ||
| 662 | for_each_set_bit(bit, indio_dev->buffer->scan_mask, | 662 | for_each_set_bit(bit, indio_dev->active_scan_mask, |
| 663 | indio_dev->masklength) { | 663 | indio_dev->masklength) { |
| 664 | ret = bma180_get_data_reg(data, bit); | 664 | ret = bma180_get_data_reg(data, bit); |
| 665 | if (ret < 0) { | 665 | if (ret < 0) { |
diff --git a/drivers/iio/accel/bmc150-accel.c b/drivers/iio/accel/bmc150-accel.c index 066d0c04072c..75567fd457dc 100644 --- a/drivers/iio/accel/bmc150-accel.c +++ b/drivers/iio/accel/bmc150-accel.c | |||
| @@ -168,14 +168,14 @@ static const struct { | |||
| 168 | int val; | 168 | int val; |
| 169 | int val2; | 169 | int val2; |
| 170 | u8 bw_bits; | 170 | u8 bw_bits; |
| 171 | } bmc150_accel_samp_freq_table[] = { {7, 810000, 0x08}, | 171 | } bmc150_accel_samp_freq_table[] = { {15, 620000, 0x08}, |
| 172 | {15, 630000, 0x09}, | 172 | {31, 260000, 0x09}, |
| 173 | {31, 250000, 0x0A}, | 173 | {62, 500000, 0x0A}, |
| 174 | {62, 500000, 0x0B}, | 174 | {125, 0, 0x0B}, |
| 175 | {125, 0, 0x0C}, | 175 | {250, 0, 0x0C}, |
| 176 | {250, 0, 0x0D}, | 176 | {500, 0, 0x0D}, |
| 177 | {500, 0, 0x0E}, | 177 | {1000, 0, 0x0E}, |
| 178 | {1000, 0, 0x0F} }; | 178 | {2000, 0, 0x0F} }; |
| 179 | 179 | ||
| 180 | static const struct { | 180 | static const struct { |
| 181 | int bw_bits; | 181 | int bw_bits; |
| @@ -840,7 +840,7 @@ static int bmc150_accel_validate_trigger(struct iio_dev *indio_dev, | |||
| 840 | } | 840 | } |
| 841 | 841 | ||
| 842 | static IIO_CONST_ATTR_SAMP_FREQ_AVAIL( | 842 | static IIO_CONST_ATTR_SAMP_FREQ_AVAIL( |
| 843 | "7.810000 15.630000 31.250000 62.500000 125 250 500 1000"); | 843 | "15.620000 31.260000 62.50000 125 250 500 1000 2000"); |
| 844 | 844 | ||
| 845 | static struct attribute *bmc150_accel_attributes[] = { | 845 | static struct attribute *bmc150_accel_attributes[] = { |
| 846 | &iio_const_attr_sampling_frequency_available.dev_attr.attr, | 846 | &iio_const_attr_sampling_frequency_available.dev_attr.attr, |
| @@ -986,7 +986,7 @@ static irqreturn_t bmc150_accel_trigger_handler(int irq, void *p) | |||
| 986 | int bit, ret, i = 0; | 986 | int bit, ret, i = 0; |
| 987 | 987 | ||
| 988 | mutex_lock(&data->mutex); | 988 | mutex_lock(&data->mutex); |
| 989 | for_each_set_bit(bit, indio_dev->buffer->scan_mask, | 989 | for_each_set_bit(bit, indio_dev->active_scan_mask, |
| 990 | indio_dev->masklength) { | 990 | indio_dev->masklength) { |
| 991 | ret = i2c_smbus_read_word_data(data->client, | 991 | ret = i2c_smbus_read_word_data(data->client, |
| 992 | BMC150_ACCEL_AXIS_TO_REG(bit)); | 992 | BMC150_ACCEL_AXIS_TO_REG(bit)); |
diff --git a/drivers/iio/accel/kxcjk-1013.c b/drivers/iio/accel/kxcjk-1013.c index 567de269cc00..1a6379525fa4 100644 --- a/drivers/iio/accel/kxcjk-1013.c +++ b/drivers/iio/accel/kxcjk-1013.c | |||
| @@ -956,7 +956,7 @@ static irqreturn_t kxcjk1013_trigger_handler(int irq, void *p) | |||
| 956 | 956 | ||
| 957 | mutex_lock(&data->mutex); | 957 | mutex_lock(&data->mutex); |
| 958 | 958 | ||
| 959 | for_each_set_bit(bit, indio_dev->buffer->scan_mask, | 959 | for_each_set_bit(bit, indio_dev->active_scan_mask, |
| 960 | indio_dev->masklength) { | 960 | indio_dev->masklength) { |
| 961 | ret = kxcjk1013_get_acc_reg(data, bit); | 961 | ret = kxcjk1013_get_acc_reg(data, bit); |
| 962 | if (ret < 0) { | 962 | if (ret < 0) { |
diff --git a/drivers/iio/adc/Kconfig b/drivers/iio/adc/Kconfig index 202daf889be2..46379b1fb25b 100644 --- a/drivers/iio/adc/Kconfig +++ b/drivers/iio/adc/Kconfig | |||
| @@ -137,7 +137,8 @@ config AXP288_ADC | |||
| 137 | 137 | ||
| 138 | config CC10001_ADC | 138 | config CC10001_ADC |
| 139 | tristate "Cosmic Circuits 10001 ADC driver" | 139 | tristate "Cosmic Circuits 10001 ADC driver" |
| 140 | depends on HAS_IOMEM || HAVE_CLK || REGULATOR | 140 | depends on HAVE_CLK || REGULATOR |
| 141 | depends on HAS_IOMEM | ||
| 141 | select IIO_BUFFER | 142 | select IIO_BUFFER |
| 142 | select IIO_TRIGGERED_BUFFER | 143 | select IIO_TRIGGERED_BUFFER |
| 143 | help | 144 | help |
diff --git a/drivers/iio/adc/at91_adc.c b/drivers/iio/adc/at91_adc.c index ff61ae55dd3f..8a0eb4a04fb5 100644 --- a/drivers/iio/adc/at91_adc.c +++ b/drivers/iio/adc/at91_adc.c | |||
| @@ -544,7 +544,6 @@ static int at91_adc_configure_trigger(struct iio_trigger *trig, bool state) | |||
| 544 | { | 544 | { |
| 545 | struct iio_dev *idev = iio_trigger_get_drvdata(trig); | 545 | struct iio_dev *idev = iio_trigger_get_drvdata(trig); |
| 546 | struct at91_adc_state *st = iio_priv(idev); | 546 | struct at91_adc_state *st = iio_priv(idev); |
| 547 | struct iio_buffer *buffer = idev->buffer; | ||
| 548 | struct at91_adc_reg_desc *reg = st->registers; | 547 | struct at91_adc_reg_desc *reg = st->registers; |
| 549 | u32 status = at91_adc_readl(st, reg->trigger_register); | 548 | u32 status = at91_adc_readl(st, reg->trigger_register); |
| 550 | int value; | 549 | int value; |
| @@ -564,7 +563,7 @@ static int at91_adc_configure_trigger(struct iio_trigger *trig, bool state) | |||
| 564 | at91_adc_writel(st, reg->trigger_register, | 563 | at91_adc_writel(st, reg->trigger_register, |
| 565 | status | value); | 564 | status | value); |
| 566 | 565 | ||
| 567 | for_each_set_bit(bit, buffer->scan_mask, | 566 | for_each_set_bit(bit, idev->active_scan_mask, |
| 568 | st->num_channels) { | 567 | st->num_channels) { |
| 569 | struct iio_chan_spec const *chan = idev->channels + bit; | 568 | struct iio_chan_spec const *chan = idev->channels + bit; |
| 570 | at91_adc_writel(st, AT91_ADC_CHER, | 569 | at91_adc_writel(st, AT91_ADC_CHER, |
| @@ -579,7 +578,7 @@ static int at91_adc_configure_trigger(struct iio_trigger *trig, bool state) | |||
| 579 | at91_adc_writel(st, reg->trigger_register, | 578 | at91_adc_writel(st, reg->trigger_register, |
| 580 | status & ~value); | 579 | status & ~value); |
| 581 | 580 | ||
| 582 | for_each_set_bit(bit, buffer->scan_mask, | 581 | for_each_set_bit(bit, idev->active_scan_mask, |
| 583 | st->num_channels) { | 582 | st->num_channels) { |
| 584 | struct iio_chan_spec const *chan = idev->channels + bit; | 583 | struct iio_chan_spec const *chan = idev->channels + bit; |
| 585 | at91_adc_writel(st, AT91_ADC_CHDR, | 584 | at91_adc_writel(st, AT91_ADC_CHDR, |
diff --git a/drivers/iio/adc/ti_am335x_adc.c b/drivers/iio/adc/ti_am335x_adc.c index 2e5cc4409f78..a0e7161f040c 100644 --- a/drivers/iio/adc/ti_am335x_adc.c +++ b/drivers/iio/adc/ti_am335x_adc.c | |||
| @@ -188,12 +188,11 @@ static int tiadc_buffer_preenable(struct iio_dev *indio_dev) | |||
| 188 | static int tiadc_buffer_postenable(struct iio_dev *indio_dev) | 188 | static int tiadc_buffer_postenable(struct iio_dev *indio_dev) |
| 189 | { | 189 | { |
| 190 | struct tiadc_device *adc_dev = iio_priv(indio_dev); | 190 | struct tiadc_device *adc_dev = iio_priv(indio_dev); |
| 191 | struct iio_buffer *buffer = indio_dev->buffer; | ||
| 192 | unsigned int enb = 0; | 191 | unsigned int enb = 0; |
| 193 | u8 bit; | 192 | u8 bit; |
| 194 | 193 | ||
| 195 | tiadc_step_config(indio_dev); | 194 | tiadc_step_config(indio_dev); |
| 196 | for_each_set_bit(bit, buffer->scan_mask, adc_dev->channels) | 195 | for_each_set_bit(bit, indio_dev->active_scan_mask, adc_dev->channels) |
| 197 | enb |= (get_adc_step_bit(adc_dev, bit) << 1); | 196 | enb |= (get_adc_step_bit(adc_dev, bit) << 1); |
| 198 | adc_dev->buffer_en_ch_steps = enb; | 197 | adc_dev->buffer_en_ch_steps = enb; |
| 199 | 198 | ||
diff --git a/drivers/iio/adc/vf610_adc.c b/drivers/iio/adc/vf610_adc.c index 8ec353c01d98..e63b8e76d4c3 100644 --- a/drivers/iio/adc/vf610_adc.c +++ b/drivers/iio/adc/vf610_adc.c | |||
| @@ -141,9 +141,13 @@ struct vf610_adc { | |||
| 141 | struct regulator *vref; | 141 | struct regulator *vref; |
| 142 | struct vf610_adc_feature adc_feature; | 142 | struct vf610_adc_feature adc_feature; |
| 143 | 143 | ||
| 144 | u32 sample_freq_avail[5]; | ||
| 145 | |||
| 144 | struct completion completion; | 146 | struct completion completion; |
| 145 | }; | 147 | }; |
| 146 | 148 | ||
| 149 | static const u32 vf610_hw_avgs[] = { 1, 4, 8, 16, 32 }; | ||
| 150 | |||
| 147 | #define VF610_ADC_CHAN(_idx, _chan_type) { \ | 151 | #define VF610_ADC_CHAN(_idx, _chan_type) { \ |
| 148 | .type = (_chan_type), \ | 152 | .type = (_chan_type), \ |
| 149 | .indexed = 1, \ | 153 | .indexed = 1, \ |
| @@ -180,35 +184,47 @@ static const struct iio_chan_spec vf610_adc_iio_channels[] = { | |||
| 180 | /* sentinel */ | 184 | /* sentinel */ |
| 181 | }; | 185 | }; |
| 182 | 186 | ||
| 183 | /* | 187 | static inline void vf610_adc_calculate_rates(struct vf610_adc *info) |
| 184 | * ADC sample frequency, unit is ADCK cycles. | 188 | { |
| 185 | * ADC clk source is ipg clock, which is the same as bus clock. | 189 | unsigned long adck_rate, ipg_rate = clk_get_rate(info->clk); |
| 186 | * | 190 | int i; |
| 187 | * ADC conversion time = SFCAdder + AverageNum x (BCT + LSTAdder) | 191 | |
| 188 | * SFCAdder: fixed to 6 ADCK cycles | 192 | /* |
| 189 | * AverageNum: 1, 4, 8, 16, 32 samples for hardware average. | 193 | * Calculate ADC sample frequencies |
| 190 | * BCT (Base Conversion Time): fixed to 25 ADCK cycles for 12 bit mode | 194 | * Sample time unit is ADCK cycles. ADCK clk source is ipg clock, |
| 191 | * LSTAdder(Long Sample Time): fixed to 3 ADCK cycles | 195 | * which is the same as bus clock. |
| 192 | * | 196 | * |
| 193 | * By default, enable 12 bit resolution mode, clock source | 197 | * ADC conversion time = SFCAdder + AverageNum x (BCT + LSTAdder) |
| 194 | * set to ipg clock, So get below frequency group: | 198 | * SFCAdder: fixed to 6 ADCK cycles |
| 195 | */ | 199 | * AverageNum: 1, 4, 8, 16, 32 samples for hardware average. |
| 196 | static const u32 vf610_sample_freq_avail[5] = | 200 | * BCT (Base Conversion Time): fixed to 25 ADCK cycles for 12 bit mode |
| 197 | {1941176, 559332, 286957, 145374, 73171}; | 201 | * LSTAdder(Long Sample Time): fixed to 3 ADCK cycles |
| 202 | */ | ||
| 203 | adck_rate = ipg_rate / info->adc_feature.clk_div; | ||
| 204 | for (i = 0; i < ARRAY_SIZE(vf610_hw_avgs); i++) | ||
| 205 | info->sample_freq_avail[i] = | ||
| 206 | adck_rate / (6 + vf610_hw_avgs[i] * (25 + 3)); | ||
| 207 | } | ||
| 198 | 208 | ||
| 199 | static inline void vf610_adc_cfg_init(struct vf610_adc *info) | 209 | static inline void vf610_adc_cfg_init(struct vf610_adc *info) |
| 200 | { | 210 | { |
| 211 | struct vf610_adc_feature *adc_feature = &info->adc_feature; | ||
| 212 | |||
| 201 | /* set default Configuration for ADC controller */ | 213 | /* set default Configuration for ADC controller */ |
| 202 | info->adc_feature.clk_sel = VF610_ADCIOC_BUSCLK_SET; | 214 | adc_feature->clk_sel = VF610_ADCIOC_BUSCLK_SET; |
| 203 | info->adc_feature.vol_ref = VF610_ADCIOC_VR_VREF_SET; | 215 | adc_feature->vol_ref = VF610_ADCIOC_VR_VREF_SET; |
| 216 | |||
| 217 | adc_feature->calibration = true; | ||
| 218 | adc_feature->ovwren = true; | ||
| 219 | |||
| 220 | adc_feature->res_mode = 12; | ||
| 221 | adc_feature->sample_rate = 1; | ||
| 222 | adc_feature->lpm = true; | ||
| 204 | 223 | ||
| 205 | info->adc_feature.calibration = true; | 224 | /* Use a save ADCK which is below 20MHz on all devices */ |
| 206 | info->adc_feature.ovwren = true; | 225 | adc_feature->clk_div = 8; |
| 207 | 226 | ||
| 208 | info->adc_feature.clk_div = 1; | 227 | vf610_adc_calculate_rates(info); |
| 209 | info->adc_feature.res_mode = 12; | ||
| 210 | info->adc_feature.sample_rate = 1; | ||
| 211 | info->adc_feature.lpm = true; | ||
| 212 | } | 228 | } |
| 213 | 229 | ||
| 214 | static void vf610_adc_cfg_post_set(struct vf610_adc *info) | 230 | static void vf610_adc_cfg_post_set(struct vf610_adc *info) |
| @@ -290,12 +306,10 @@ static void vf610_adc_cfg_set(struct vf610_adc *info) | |||
| 290 | 306 | ||
| 291 | cfg_data = readl(info->regs + VF610_REG_ADC_CFG); | 307 | cfg_data = readl(info->regs + VF610_REG_ADC_CFG); |
| 292 | 308 | ||
| 293 | /* low power configuration */ | ||
| 294 | cfg_data &= ~VF610_ADC_ADLPC_EN; | 309 | cfg_data &= ~VF610_ADC_ADLPC_EN; |
| 295 | if (adc_feature->lpm) | 310 | if (adc_feature->lpm) |
| 296 | cfg_data |= VF610_ADC_ADLPC_EN; | 311 | cfg_data |= VF610_ADC_ADLPC_EN; |
| 297 | 312 | ||
| 298 | /* disable high speed */ | ||
| 299 | cfg_data &= ~VF610_ADC_ADHSC_EN; | 313 | cfg_data &= ~VF610_ADC_ADHSC_EN; |
| 300 | 314 | ||
| 301 | writel(cfg_data, info->regs + VF610_REG_ADC_CFG); | 315 | writel(cfg_data, info->regs + VF610_REG_ADC_CFG); |
| @@ -435,10 +449,27 @@ static irqreturn_t vf610_adc_isr(int irq, void *dev_id) | |||
| 435 | return IRQ_HANDLED; | 449 | return IRQ_HANDLED; |
| 436 | } | 450 | } |
| 437 | 451 | ||
| 438 | static IIO_CONST_ATTR_SAMP_FREQ_AVAIL("1941176, 559332, 286957, 145374, 73171"); | 452 | static ssize_t vf610_show_samp_freq_avail(struct device *dev, |
| 453 | struct device_attribute *attr, char *buf) | ||
| 454 | { | ||
| 455 | struct vf610_adc *info = iio_priv(dev_to_iio_dev(dev)); | ||
| 456 | size_t len = 0; | ||
| 457 | int i; | ||
| 458 | |||
| 459 | for (i = 0; i < ARRAY_SIZE(info->sample_freq_avail); i++) | ||
| 460 | len += scnprintf(buf + len, PAGE_SIZE - len, | ||
| 461 | "%u ", info->sample_freq_avail[i]); | ||
| 462 | |||
| 463 | /* replace trailing space by newline */ | ||
| 464 | buf[len - 1] = '\n'; | ||
| 465 | |||
| 466 | return len; | ||
| 467 | } | ||
| 468 | |||
| 469 | static IIO_DEV_ATTR_SAMP_FREQ_AVAIL(vf610_show_samp_freq_avail); | ||
| 439 | 470 | ||
| 440 | static struct attribute *vf610_attributes[] = { | 471 | static struct attribute *vf610_attributes[] = { |
| 441 | &iio_const_attr_sampling_frequency_available.dev_attr.attr, | 472 | &iio_dev_attr_sampling_frequency_available.dev_attr.attr, |
| 442 | NULL | 473 | NULL |
| 443 | }; | 474 | }; |
| 444 | 475 | ||
| @@ -502,7 +533,7 @@ static int vf610_read_raw(struct iio_dev *indio_dev, | |||
| 502 | return IIO_VAL_FRACTIONAL_LOG2; | 533 | return IIO_VAL_FRACTIONAL_LOG2; |
| 503 | 534 | ||
| 504 | case IIO_CHAN_INFO_SAMP_FREQ: | 535 | case IIO_CHAN_INFO_SAMP_FREQ: |
| 505 | *val = vf610_sample_freq_avail[info->adc_feature.sample_rate]; | 536 | *val = info->sample_freq_avail[info->adc_feature.sample_rate]; |
| 506 | *val2 = 0; | 537 | *val2 = 0; |
| 507 | return IIO_VAL_INT; | 538 | return IIO_VAL_INT; |
| 508 | 539 | ||
| @@ -525,9 +556,9 @@ static int vf610_write_raw(struct iio_dev *indio_dev, | |||
| 525 | switch (mask) { | 556 | switch (mask) { |
| 526 | case IIO_CHAN_INFO_SAMP_FREQ: | 557 | case IIO_CHAN_INFO_SAMP_FREQ: |
| 527 | for (i = 0; | 558 | for (i = 0; |
| 528 | i < ARRAY_SIZE(vf610_sample_freq_avail); | 559 | i < ARRAY_SIZE(info->sample_freq_avail); |
| 529 | i++) | 560 | i++) |
| 530 | if (val == vf610_sample_freq_avail[i]) { | 561 | if (val == info->sample_freq_avail[i]) { |
| 531 | info->adc_feature.sample_rate = i; | 562 | info->adc_feature.sample_rate = i; |
| 532 | vf610_adc_sample_set(info); | 563 | vf610_adc_sample_set(info); |
| 533 | return 0; | 564 | return 0; |
diff --git a/drivers/iio/gyro/bmg160.c b/drivers/iio/gyro/bmg160.c index 60451b328242..ccf3ea7e1afa 100644 --- a/drivers/iio/gyro/bmg160.c +++ b/drivers/iio/gyro/bmg160.c | |||
| @@ -822,7 +822,7 @@ static irqreturn_t bmg160_trigger_handler(int irq, void *p) | |||
| 822 | int bit, ret, i = 0; | 822 | int bit, ret, i = 0; |
| 823 | 823 | ||
| 824 | mutex_lock(&data->mutex); | 824 | mutex_lock(&data->mutex); |
| 825 | for_each_set_bit(bit, indio_dev->buffer->scan_mask, | 825 | for_each_set_bit(bit, indio_dev->active_scan_mask, |
| 826 | indio_dev->masklength) { | 826 | indio_dev->masklength) { |
| 827 | ret = i2c_smbus_read_word_data(data->client, | 827 | ret = i2c_smbus_read_word_data(data->client, |
| 828 | BMG160_AXIS_TO_REG(bit)); | 828 | BMG160_AXIS_TO_REG(bit)); |
diff --git a/drivers/iio/imu/adis_trigger.c b/drivers/iio/imu/adis_trigger.c index e0017c22bb9c..f53e9a803a0e 100644 --- a/drivers/iio/imu/adis_trigger.c +++ b/drivers/iio/imu/adis_trigger.c | |||
| @@ -60,7 +60,7 @@ int adis_probe_trigger(struct adis *adis, struct iio_dev *indio_dev) | |||
| 60 | iio_trigger_set_drvdata(adis->trig, adis); | 60 | iio_trigger_set_drvdata(adis->trig, adis); |
| 61 | ret = iio_trigger_register(adis->trig); | 61 | ret = iio_trigger_register(adis->trig); |
| 62 | 62 | ||
| 63 | indio_dev->trig = adis->trig; | 63 | indio_dev->trig = iio_trigger_get(adis->trig); |
| 64 | if (ret) | 64 | if (ret) |
| 65 | goto error_free_irq; | 65 | goto error_free_irq; |
| 66 | 66 | ||
diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c index d8d5bed65e07..ef76afe2643c 100644 --- a/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c +++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c | |||
| @@ -410,42 +410,46 @@ error_read_raw: | |||
| 410 | } | 410 | } |
| 411 | } | 411 | } |
| 412 | 412 | ||
| 413 | static int inv_mpu6050_write_fsr(struct inv_mpu6050_state *st, int fsr) | 413 | static int inv_mpu6050_write_gyro_scale(struct inv_mpu6050_state *st, int val) |
| 414 | { | 414 | { |
| 415 | int result; | 415 | int result, i; |
| 416 | u8 d; | 416 | u8 d; |
| 417 | 417 | ||
| 418 | if (fsr < 0 || fsr > INV_MPU6050_MAX_GYRO_FS_PARAM) | 418 | for (i = 0; i < ARRAY_SIZE(gyro_scale_6050); ++i) { |
| 419 | return -EINVAL; | 419 | if (gyro_scale_6050[i] == val) { |
| 420 | if (fsr == st->chip_config.fsr) | 420 | d = (i << INV_MPU6050_GYRO_CONFIG_FSR_SHIFT); |
| 421 | return 0; | 421 | result = inv_mpu6050_write_reg(st, |
| 422 | st->reg->gyro_config, d); | ||
| 423 | if (result) | ||
| 424 | return result; | ||
| 422 | 425 | ||
| 423 | d = (fsr << INV_MPU6050_GYRO_CONFIG_FSR_SHIFT); | 426 | st->chip_config.fsr = i; |
| 424 | result = inv_mpu6050_write_reg(st, st->reg->gyro_config, d); | 427 | return 0; |
| 425 | if (result) | 428 | } |
| 426 | return result; | 429 | } |
| 427 | st->chip_config.fsr = fsr; | ||
| 428 | 430 | ||
| 429 | return 0; | 431 | return -EINVAL; |
| 430 | } | 432 | } |
| 431 | 433 | ||
| 432 | static int inv_mpu6050_write_accel_fs(struct inv_mpu6050_state *st, int fs) | 434 | static int inv_mpu6050_write_accel_scale(struct inv_mpu6050_state *st, int val) |
| 433 | { | 435 | { |
| 434 | int result; | 436 | int result, i; |
| 435 | u8 d; | 437 | u8 d; |
| 436 | 438 | ||
| 437 | if (fs < 0 || fs > INV_MPU6050_MAX_ACCL_FS_PARAM) | 439 | for (i = 0; i < ARRAY_SIZE(accel_scale); ++i) { |
| 438 | return -EINVAL; | 440 | if (accel_scale[i] == val) { |
| 439 | if (fs == st->chip_config.accl_fs) | 441 | d = (i << INV_MPU6050_ACCL_CONFIG_FSR_SHIFT); |
| 440 | return 0; | 442 | result = inv_mpu6050_write_reg(st, |
| 443 | st->reg->accl_config, d); | ||
| 444 | if (result) | ||
| 445 | return result; | ||
| 441 | 446 | ||
| 442 | d = (fs << INV_MPU6050_ACCL_CONFIG_FSR_SHIFT); | 447 | st->chip_config.accl_fs = i; |
| 443 | result = inv_mpu6050_write_reg(st, st->reg->accl_config, d); | 448 | return 0; |
| 444 | if (result) | 449 | } |
| 445 | return result; | 450 | } |
| 446 | st->chip_config.accl_fs = fs; | ||
| 447 | 451 | ||
| 448 | return 0; | 452 | return -EINVAL; |
| 449 | } | 453 | } |
| 450 | 454 | ||
| 451 | static int inv_mpu6050_write_raw(struct iio_dev *indio_dev, | 455 | static int inv_mpu6050_write_raw(struct iio_dev *indio_dev, |
| @@ -471,10 +475,10 @@ static int inv_mpu6050_write_raw(struct iio_dev *indio_dev, | |||
| 471 | case IIO_CHAN_INFO_SCALE: | 475 | case IIO_CHAN_INFO_SCALE: |
| 472 | switch (chan->type) { | 476 | switch (chan->type) { |
| 473 | case IIO_ANGL_VEL: | 477 | case IIO_ANGL_VEL: |
| 474 | result = inv_mpu6050_write_fsr(st, val); | 478 | result = inv_mpu6050_write_gyro_scale(st, val2); |
| 475 | break; | 479 | break; |
| 476 | case IIO_ACCEL: | 480 | case IIO_ACCEL: |
| 477 | result = inv_mpu6050_write_accel_fs(st, val); | 481 | result = inv_mpu6050_write_accel_scale(st, val2); |
| 478 | break; | 482 | break; |
| 479 | default: | 483 | default: |
| 480 | result = -EINVAL; | 484 | result = -EINVAL; |
diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c index 0cd306a72a6e..ba27e277511f 100644 --- a/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c +++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c | |||
| @@ -24,6 +24,16 @@ | |||
| 24 | #include <linux/poll.h> | 24 | #include <linux/poll.h> |
| 25 | #include "inv_mpu_iio.h" | 25 | #include "inv_mpu_iio.h" |
| 26 | 26 | ||
| 27 | static void inv_clear_kfifo(struct inv_mpu6050_state *st) | ||
| 28 | { | ||
| 29 | unsigned long flags; | ||
| 30 | |||
| 31 | /* take the spin lock sem to avoid interrupt kick in */ | ||
| 32 | spin_lock_irqsave(&st->time_stamp_lock, flags); | ||
| 33 | kfifo_reset(&st->timestamps); | ||
| 34 | spin_unlock_irqrestore(&st->time_stamp_lock, flags); | ||
| 35 | } | ||
| 36 | |||
| 27 | int inv_reset_fifo(struct iio_dev *indio_dev) | 37 | int inv_reset_fifo(struct iio_dev *indio_dev) |
| 28 | { | 38 | { |
| 29 | int result; | 39 | int result; |
| @@ -50,6 +60,10 @@ int inv_reset_fifo(struct iio_dev *indio_dev) | |||
| 50 | INV_MPU6050_BIT_FIFO_RST); | 60 | INV_MPU6050_BIT_FIFO_RST); |
| 51 | if (result) | 61 | if (result) |
| 52 | goto reset_fifo_fail; | 62 | goto reset_fifo_fail; |
| 63 | |||
| 64 | /* clear timestamps fifo */ | ||
| 65 | inv_clear_kfifo(st); | ||
| 66 | |||
| 53 | /* enable interrupt */ | 67 | /* enable interrupt */ |
| 54 | if (st->chip_config.accl_fifo_enable || | 68 | if (st->chip_config.accl_fifo_enable || |
| 55 | st->chip_config.gyro_fifo_enable) { | 69 | st->chip_config.gyro_fifo_enable) { |
| @@ -83,16 +97,6 @@ reset_fifo_fail: | |||
| 83 | return result; | 97 | return result; |
| 84 | } | 98 | } |
| 85 | 99 | ||
| 86 | static void inv_clear_kfifo(struct inv_mpu6050_state *st) | ||
| 87 | { | ||
| 88 | unsigned long flags; | ||
| 89 | |||
| 90 | /* take the spin lock sem to avoid interrupt kick in */ | ||
| 91 | spin_lock_irqsave(&st->time_stamp_lock, flags); | ||
| 92 | kfifo_reset(&st->timestamps); | ||
| 93 | spin_unlock_irqrestore(&st->time_stamp_lock, flags); | ||
| 94 | } | ||
| 95 | |||
| 96 | /** | 100 | /** |
| 97 | * inv_mpu6050_irq_handler() - Cache a timestamp at each data ready interrupt. | 101 | * inv_mpu6050_irq_handler() - Cache a timestamp at each data ready interrupt. |
| 98 | */ | 102 | */ |
| @@ -184,7 +188,6 @@ end_session: | |||
| 184 | flush_fifo: | 188 | flush_fifo: |
| 185 | /* Flush HW and SW FIFOs. */ | 189 | /* Flush HW and SW FIFOs. */ |
| 186 | inv_reset_fifo(indio_dev); | 190 | inv_reset_fifo(indio_dev); |
| 187 | inv_clear_kfifo(st); | ||
| 188 | mutex_unlock(&indio_dev->mlock); | 191 | mutex_unlock(&indio_dev->mlock); |
| 189 | iio_trigger_notify_done(indio_dev->trig); | 192 | iio_trigger_notify_done(indio_dev->trig); |
| 190 | 193 | ||
diff --git a/drivers/iio/imu/kmx61.c b/drivers/iio/imu/kmx61.c index 5cc3692acf37..b3a36376c719 100644 --- a/drivers/iio/imu/kmx61.c +++ b/drivers/iio/imu/kmx61.c | |||
| @@ -1227,7 +1227,7 @@ static irqreturn_t kmx61_trigger_handler(int irq, void *p) | |||
| 1227 | base = KMX61_MAG_XOUT_L; | 1227 | base = KMX61_MAG_XOUT_L; |
| 1228 | 1228 | ||
| 1229 | mutex_lock(&data->lock); | 1229 | mutex_lock(&data->lock); |
| 1230 | for_each_set_bit(bit, indio_dev->buffer->scan_mask, | 1230 | for_each_set_bit(bit, indio_dev->active_scan_mask, |
| 1231 | indio_dev->masklength) { | 1231 | indio_dev->masklength) { |
| 1232 | ret = kmx61_read_measurement(data, base, bit); | 1232 | ret = kmx61_read_measurement(data, base, bit); |
| 1233 | if (ret < 0) { | 1233 | if (ret < 0) { |
diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c index aaba9d3d980e..4df97f650e44 100644 --- a/drivers/iio/industrialio-core.c +++ b/drivers/iio/industrialio-core.c | |||
| @@ -847,8 +847,7 @@ static int iio_device_add_channel_sysfs(struct iio_dev *indio_dev, | |||
| 847 | * @attr_list: List of IIO device attributes | 847 | * @attr_list: List of IIO device attributes |
| 848 | * | 848 | * |
| 849 | * This function frees the memory allocated for each of the IIO device | 849 | * This function frees the memory allocated for each of the IIO device |
| 850 | * attributes in the list. Note: if you want to reuse the list after calling | 850 | * attributes in the list. |
| 851 | * this function you have to reinitialize it using INIT_LIST_HEAD(). | ||
| 852 | */ | 851 | */ |
| 853 | void iio_free_chan_devattr_list(struct list_head *attr_list) | 852 | void iio_free_chan_devattr_list(struct list_head *attr_list) |
| 854 | { | 853 | { |
| @@ -856,6 +855,7 @@ void iio_free_chan_devattr_list(struct list_head *attr_list) | |||
| 856 | 855 | ||
| 857 | list_for_each_entry_safe(p, n, attr_list, l) { | 856 | list_for_each_entry_safe(p, n, attr_list, l) { |
| 858 | kfree(p->dev_attr.attr.name); | 857 | kfree(p->dev_attr.attr.name); |
| 858 | list_del(&p->l); | ||
| 859 | kfree(p); | 859 | kfree(p); |
| 860 | } | 860 | } |
| 861 | } | 861 | } |
| @@ -936,6 +936,7 @@ static void iio_device_unregister_sysfs(struct iio_dev *indio_dev) | |||
| 936 | 936 | ||
| 937 | iio_free_chan_devattr_list(&indio_dev->channel_attr_list); | 937 | iio_free_chan_devattr_list(&indio_dev->channel_attr_list); |
| 938 | kfree(indio_dev->chan_attr_group.attrs); | 938 | kfree(indio_dev->chan_attr_group.attrs); |
| 939 | indio_dev->chan_attr_group.attrs = NULL; | ||
| 939 | } | 940 | } |
| 940 | 941 | ||
| 941 | static void iio_dev_release(struct device *device) | 942 | static void iio_dev_release(struct device *device) |
diff --git a/drivers/iio/industrialio-event.c b/drivers/iio/industrialio-event.c index a4b397048f71..a99692ba91bc 100644 --- a/drivers/iio/industrialio-event.c +++ b/drivers/iio/industrialio-event.c | |||
| @@ -500,6 +500,7 @@ int iio_device_register_eventset(struct iio_dev *indio_dev) | |||
| 500 | error_free_setup_event_lines: | 500 | error_free_setup_event_lines: |
| 501 | iio_free_chan_devattr_list(&indio_dev->event_interface->dev_attr_list); | 501 | iio_free_chan_devattr_list(&indio_dev->event_interface->dev_attr_list); |
| 502 | kfree(indio_dev->event_interface); | 502 | kfree(indio_dev->event_interface); |
| 503 | indio_dev->event_interface = NULL; | ||
| 503 | return ret; | 504 | return ret; |
| 504 | } | 505 | } |
| 505 | 506 | ||
diff --git a/drivers/iio/proximity/sx9500.c b/drivers/iio/proximity/sx9500.c index 74dff4e4a11a..89fca3a70750 100644 --- a/drivers/iio/proximity/sx9500.c +++ b/drivers/iio/proximity/sx9500.c | |||
| @@ -494,7 +494,7 @@ static irqreturn_t sx9500_trigger_handler(int irq, void *private) | |||
| 494 | 494 | ||
| 495 | mutex_lock(&data->mutex); | 495 | mutex_lock(&data->mutex); |
| 496 | 496 | ||
| 497 | for_each_set_bit(bit, indio_dev->buffer->scan_mask, | 497 | for_each_set_bit(bit, indio_dev->active_scan_mask, |
| 498 | indio_dev->masklength) { | 498 | indio_dev->masklength) { |
| 499 | ret = sx9500_read_proximity(data, &indio_dev->channels[bit], | 499 | ret = sx9500_read_proximity(data, &indio_dev->channels[bit], |
| 500 | &val); | 500 | &val); |
diff --git a/drivers/infiniband/core/umem.c b/drivers/infiniband/core/umem.c index aec7a6aa2951..8c014b5dab4c 100644 --- a/drivers/infiniband/core/umem.c +++ b/drivers/infiniband/core/umem.c | |||
| @@ -99,6 +99,14 @@ struct ib_umem *ib_umem_get(struct ib_ucontext *context, unsigned long addr, | |||
| 99 | if (dmasync) | 99 | if (dmasync) |
| 100 | dma_set_attr(DMA_ATTR_WRITE_BARRIER, &attrs); | 100 | dma_set_attr(DMA_ATTR_WRITE_BARRIER, &attrs); |
| 101 | 101 | ||
| 102 | /* | ||
| 103 | * If the combination of the addr and size requested for this memory | ||
| 104 | * region causes an integer overflow, return error. | ||
| 105 | */ | ||
| 106 | if ((PAGE_ALIGN(addr + size) <= size) || | ||
| 107 | (PAGE_ALIGN(addr + size) <= addr)) | ||
| 108 | return ERR_PTR(-EINVAL); | ||
| 109 | |||
| 102 | if (!can_do_mlock()) | 110 | if (!can_do_mlock()) |
| 103 | return ERR_PTR(-EPERM); | 111 | return ERR_PTR(-EPERM); |
| 104 | 112 | ||
diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c index 1bd15ebc01f2..27bcdbc950c9 100644 --- a/drivers/input/mouse/alps.c +++ b/drivers/input/mouse/alps.c | |||
| @@ -1154,10 +1154,28 @@ out: | |||
| 1154 | mutex_unlock(&alps_mutex); | 1154 | mutex_unlock(&alps_mutex); |
| 1155 | } | 1155 | } |
| 1156 | 1156 | ||
| 1157 | static void alps_report_bare_ps2_packet(struct input_dev *dev, | 1157 | static void alps_report_bare_ps2_packet(struct psmouse *psmouse, |
| 1158 | unsigned char packet[], | 1158 | unsigned char packet[], |
| 1159 | bool report_buttons) | 1159 | bool report_buttons) |
| 1160 | { | 1160 | { |
| 1161 | struct alps_data *priv = psmouse->private; | ||
| 1162 | struct input_dev *dev; | ||
| 1163 | |||
| 1164 | /* Figure out which device to use to report the bare packet */ | ||
| 1165 | if (priv->proto_version == ALPS_PROTO_V2 && | ||
| 1166 | (priv->flags & ALPS_DUALPOINT)) { | ||
| 1167 | /* On V2 devices the DualPoint Stick reports bare packets */ | ||
| 1168 | dev = priv->dev2; | ||
| 1169 | } else if (unlikely(IS_ERR_OR_NULL(priv->dev3))) { | ||
| 1170 | /* Register dev3 mouse if we received PS/2 packet first time */ | ||
| 1171 | if (!IS_ERR(priv->dev3)) | ||
| 1172 | psmouse_queue_work(psmouse, &priv->dev3_register_work, | ||
| 1173 | 0); | ||
| 1174 | return; | ||
| 1175 | } else { | ||
| 1176 | dev = priv->dev3; | ||
| 1177 | } | ||
| 1178 | |||
| 1161 | if (report_buttons) | 1179 | if (report_buttons) |
| 1162 | alps_report_buttons(dev, NULL, | 1180 | alps_report_buttons(dev, NULL, |
| 1163 | packet[0] & 1, packet[0] & 2, packet[0] & 4); | 1181 | packet[0] & 1, packet[0] & 2, packet[0] & 4); |
| @@ -1232,8 +1250,8 @@ static psmouse_ret_t alps_handle_interleaved_ps2(struct psmouse *psmouse) | |||
| 1232 | * de-synchronization. | 1250 | * de-synchronization. |
| 1233 | */ | 1251 | */ |
| 1234 | 1252 | ||
| 1235 | alps_report_bare_ps2_packet(priv->dev2, | 1253 | alps_report_bare_ps2_packet(psmouse, &psmouse->packet[3], |
| 1236 | &psmouse->packet[3], false); | 1254 | false); |
| 1237 | 1255 | ||
| 1238 | /* | 1256 | /* |
| 1239 | * Continue with the standard ALPS protocol handling, | 1257 | * Continue with the standard ALPS protocol handling, |
| @@ -1289,18 +1307,9 @@ static psmouse_ret_t alps_process_byte(struct psmouse *psmouse) | |||
| 1289 | * properly we only do this if the device is fully synchronized. | 1307 | * properly we only do this if the device is fully synchronized. |
| 1290 | */ | 1308 | */ |
| 1291 | if (!psmouse->out_of_sync_cnt && (psmouse->packet[0] & 0xc8) == 0x08) { | 1309 | if (!psmouse->out_of_sync_cnt && (psmouse->packet[0] & 0xc8) == 0x08) { |
| 1292 | |||
| 1293 | /* Register dev3 mouse if we received PS/2 packet first time */ | ||
| 1294 | if (unlikely(!priv->dev3)) | ||
| 1295 | psmouse_queue_work(psmouse, | ||
| 1296 | &priv->dev3_register_work, 0); | ||
| 1297 | |||
| 1298 | if (psmouse->pktcnt == 3) { | 1310 | if (psmouse->pktcnt == 3) { |
| 1299 | /* Once dev3 mouse device is registered report data */ | 1311 | alps_report_bare_ps2_packet(psmouse, psmouse->packet, |
| 1300 | if (likely(!IS_ERR_OR_NULL(priv->dev3))) | 1312 | true); |
| 1301 | alps_report_bare_ps2_packet(priv->dev3, | ||
| 1302 | psmouse->packet, | ||
| 1303 | true); | ||
| 1304 | return PSMOUSE_FULL_PACKET; | 1313 | return PSMOUSE_FULL_PACKET; |
| 1305 | } | 1314 | } |
| 1306 | return PSMOUSE_GOOD_DATA; | 1315 | return PSMOUSE_GOOD_DATA; |
| @@ -2281,10 +2290,12 @@ static int alps_set_protocol(struct psmouse *psmouse, | |||
| 2281 | priv->set_abs_params = alps_set_abs_params_mt; | 2290 | priv->set_abs_params = alps_set_abs_params_mt; |
| 2282 | priv->nibble_commands = alps_v3_nibble_commands; | 2291 | priv->nibble_commands = alps_v3_nibble_commands; |
| 2283 | priv->addr_command = PSMOUSE_CMD_RESET_WRAP; | 2292 | priv->addr_command = PSMOUSE_CMD_RESET_WRAP; |
| 2284 | priv->x_max = 1360; | ||
| 2285 | priv->y_max = 660; | ||
| 2286 | priv->x_bits = 23; | 2293 | priv->x_bits = 23; |
| 2287 | priv->y_bits = 12; | 2294 | priv->y_bits = 12; |
| 2295 | |||
| 2296 | if (alps_dolphin_get_device_area(psmouse, priv)) | ||
| 2297 | return -EIO; | ||
| 2298 | |||
| 2288 | break; | 2299 | break; |
| 2289 | 2300 | ||
| 2290 | case ALPS_PROTO_V6: | 2301 | case ALPS_PROTO_V6: |
| @@ -2303,9 +2314,8 @@ static int alps_set_protocol(struct psmouse *psmouse, | |||
| 2303 | priv->set_abs_params = alps_set_abs_params_mt; | 2314 | priv->set_abs_params = alps_set_abs_params_mt; |
| 2304 | priv->nibble_commands = alps_v3_nibble_commands; | 2315 | priv->nibble_commands = alps_v3_nibble_commands; |
| 2305 | priv->addr_command = PSMOUSE_CMD_RESET_WRAP; | 2316 | priv->addr_command = PSMOUSE_CMD_RESET_WRAP; |
| 2306 | 2317 | priv->x_max = 0xfff; | |
| 2307 | if (alps_dolphin_get_device_area(psmouse, priv)) | 2318 | priv->y_max = 0x7ff; |
| 2308 | return -EIO; | ||
| 2309 | 2319 | ||
| 2310 | if (priv->fw_ver[1] != 0xba) | 2320 | if (priv->fw_ver[1] != 0xba) |
| 2311 | priv->flags |= ALPS_BUTTONPAD; | 2321 | priv->flags |= ALPS_BUTTONPAD; |
diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c index dda605836546..3b06c8a360b6 100644 --- a/drivers/input/mouse/synaptics.c +++ b/drivers/input/mouse/synaptics.c | |||
| @@ -154,6 +154,11 @@ static const struct min_max_quirk min_max_pnpid_table[] = { | |||
| 154 | }, | 154 | }, |
| 155 | { | 155 | { |
| 156 | (const char * const []){"LEN2006", NULL}, | 156 | (const char * const []){"LEN2006", NULL}, |
| 157 | {2691, 2691}, | ||
| 158 | 1024, 5045, 2457, 4832 | ||
| 159 | }, | ||
| 160 | { | ||
| 161 | (const char * const []){"LEN2006", NULL}, | ||
| 157 | {ANY_BOARD_ID, ANY_BOARD_ID}, | 162 | {ANY_BOARD_ID, ANY_BOARD_ID}, |
| 158 | 1264, 5675, 1171, 4688 | 163 | 1264, 5675, 1171, 4688 |
| 159 | }, | 164 | }, |
| @@ -189,7 +194,7 @@ static const char * const topbuttonpad_pnp_ids[] = { | |||
| 189 | "LEN2003", | 194 | "LEN2003", |
| 190 | "LEN2004", /* L440 */ | 195 | "LEN2004", /* L440 */ |
| 191 | "LEN2005", | 196 | "LEN2005", |
| 192 | "LEN2006", | 197 | "LEN2006", /* Edge E440/E540 */ |
| 193 | "LEN2007", | 198 | "LEN2007", |
| 194 | "LEN2008", | 199 | "LEN2008", |
| 195 | "LEN2009", | 200 | "LEN2009", |
diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c index 596b0a9eee99..9687f8afebff 100644 --- a/drivers/irqchip/irq-gic-v3-its.c +++ b/drivers/irqchip/irq-gic-v3-its.c | |||
| @@ -169,7 +169,7 @@ static void its_encode_cmd(struct its_cmd_block *cmd, u8 cmd_nr) | |||
| 169 | 169 | ||
| 170 | static void its_encode_devid(struct its_cmd_block *cmd, u32 devid) | 170 | static void its_encode_devid(struct its_cmd_block *cmd, u32 devid) |
| 171 | { | 171 | { |
| 172 | cmd->raw_cmd[0] &= ~(0xffffUL << 32); | 172 | cmd->raw_cmd[0] &= BIT_ULL(32) - 1; |
| 173 | cmd->raw_cmd[0] |= ((u64)devid) << 32; | 173 | cmd->raw_cmd[0] |= ((u64)devid) << 32; |
| 174 | } | 174 | } |
| 175 | 175 | ||
| @@ -802,6 +802,7 @@ static int its_alloc_tables(struct its_node *its) | |||
| 802 | int i; | 802 | int i; |
| 803 | int psz = SZ_64K; | 803 | int psz = SZ_64K; |
| 804 | u64 shr = GITS_BASER_InnerShareable; | 804 | u64 shr = GITS_BASER_InnerShareable; |
| 805 | u64 cache = GITS_BASER_WaWb; | ||
| 805 | 806 | ||
| 806 | for (i = 0; i < GITS_BASER_NR_REGS; i++) { | 807 | for (i = 0; i < GITS_BASER_NR_REGS; i++) { |
| 807 | u64 val = readq_relaxed(its->base + GITS_BASER + i * 8); | 808 | u64 val = readq_relaxed(its->base + GITS_BASER + i * 8); |
| @@ -848,7 +849,7 @@ retry_baser: | |||
| 848 | val = (virt_to_phys(base) | | 849 | val = (virt_to_phys(base) | |
| 849 | (type << GITS_BASER_TYPE_SHIFT) | | 850 | (type << GITS_BASER_TYPE_SHIFT) | |
| 850 | ((entry_size - 1) << GITS_BASER_ENTRY_SIZE_SHIFT) | | 851 | ((entry_size - 1) << GITS_BASER_ENTRY_SIZE_SHIFT) | |
| 851 | GITS_BASER_WaWb | | 852 | cache | |
| 852 | shr | | 853 | shr | |
| 853 | GITS_BASER_VALID); | 854 | GITS_BASER_VALID); |
| 854 | 855 | ||
| @@ -874,9 +875,12 @@ retry_baser: | |||
| 874 | * Shareability didn't stick. Just use | 875 | * Shareability didn't stick. Just use |
| 875 | * whatever the read reported, which is likely | 876 | * whatever the read reported, which is likely |
| 876 | * to be the only thing this redistributor | 877 | * to be the only thing this redistributor |
| 877 | * supports. | 878 | * supports. If that's zero, make it |
| 879 | * non-cacheable as well. | ||
| 878 | */ | 880 | */ |
| 879 | shr = tmp & GITS_BASER_SHAREABILITY_MASK; | 881 | shr = tmp & GITS_BASER_SHAREABILITY_MASK; |
| 882 | if (!shr) | ||
| 883 | cache = GITS_BASER_nC; | ||
| 880 | goto retry_baser; | 884 | goto retry_baser; |
| 881 | } | 885 | } |
| 882 | 886 | ||
| @@ -980,16 +984,39 @@ static void its_cpu_init_lpis(void) | |||
| 980 | tmp = readq_relaxed(rbase + GICR_PROPBASER); | 984 | tmp = readq_relaxed(rbase + GICR_PROPBASER); |
| 981 | 985 | ||
| 982 | if ((tmp ^ val) & GICR_PROPBASER_SHAREABILITY_MASK) { | 986 | if ((tmp ^ val) & GICR_PROPBASER_SHAREABILITY_MASK) { |
| 987 | if (!(tmp & GICR_PROPBASER_SHAREABILITY_MASK)) { | ||
| 988 | /* | ||
| 989 | * The HW reports non-shareable, we must | ||
| 990 | * remove the cacheability attributes as | ||
| 991 | * well. | ||
| 992 | */ | ||
| 993 | val &= ~(GICR_PROPBASER_SHAREABILITY_MASK | | ||
| 994 | GICR_PROPBASER_CACHEABILITY_MASK); | ||
| 995 | val |= GICR_PROPBASER_nC; | ||
| 996 | writeq_relaxed(val, rbase + GICR_PROPBASER); | ||
| 997 | } | ||
| 983 | pr_info_once("GIC: using cache flushing for LPI property table\n"); | 998 | pr_info_once("GIC: using cache flushing for LPI property table\n"); |
| 984 | gic_rdists->flags |= RDIST_FLAGS_PROPBASE_NEEDS_FLUSHING; | 999 | gic_rdists->flags |= RDIST_FLAGS_PROPBASE_NEEDS_FLUSHING; |
| 985 | } | 1000 | } |
| 986 | 1001 | ||
| 987 | /* set PENDBASE */ | 1002 | /* set PENDBASE */ |
| 988 | val = (page_to_phys(pend_page) | | 1003 | val = (page_to_phys(pend_page) | |
| 989 | GICR_PROPBASER_InnerShareable | | 1004 | GICR_PENDBASER_InnerShareable | |
| 990 | GICR_PROPBASER_WaWb); | 1005 | GICR_PENDBASER_WaWb); |
| 991 | 1006 | ||
| 992 | writeq_relaxed(val, rbase + GICR_PENDBASER); | 1007 | writeq_relaxed(val, rbase + GICR_PENDBASER); |
| 1008 | tmp = readq_relaxed(rbase + GICR_PENDBASER); | ||
| 1009 | |||
| 1010 | if (!(tmp & GICR_PENDBASER_SHAREABILITY_MASK)) { | ||
| 1011 | /* | ||
| 1012 | * The HW reports non-shareable, we must remove the | ||
| 1013 | * cacheability attributes as well. | ||
| 1014 | */ | ||
| 1015 | val &= ~(GICR_PENDBASER_SHAREABILITY_MASK | | ||
| 1016 | GICR_PENDBASER_CACHEABILITY_MASK); | ||
| 1017 | val |= GICR_PENDBASER_nC; | ||
| 1018 | writeq_relaxed(val, rbase + GICR_PENDBASER); | ||
| 1019 | } | ||
| 993 | 1020 | ||
| 994 | /* Enable LPIs */ | 1021 | /* Enable LPIs */ |
| 995 | val = readl_relaxed(rbase + GICR_CTLR); | 1022 | val = readl_relaxed(rbase + GICR_CTLR); |
| @@ -1026,7 +1053,7 @@ static void its_cpu_init_collection(void) | |||
| 1026 | * This ITS wants a linear CPU number. | 1053 | * This ITS wants a linear CPU number. |
| 1027 | */ | 1054 | */ |
| 1028 | target = readq_relaxed(gic_data_rdist_rd_base() + GICR_TYPER); | 1055 | target = readq_relaxed(gic_data_rdist_rd_base() + GICR_TYPER); |
| 1029 | target = GICR_TYPER_CPU_NUMBER(target); | 1056 | target = GICR_TYPER_CPU_NUMBER(target) << 16; |
| 1030 | } | 1057 | } |
| 1031 | 1058 | ||
| 1032 | /* Perform collection mapping */ | 1059 | /* Perform collection mapping */ |
| @@ -1422,14 +1449,26 @@ static int its_probe(struct device_node *node, struct irq_domain *parent) | |||
| 1422 | 1449 | ||
| 1423 | writeq_relaxed(baser, its->base + GITS_CBASER); | 1450 | writeq_relaxed(baser, its->base + GITS_CBASER); |
| 1424 | tmp = readq_relaxed(its->base + GITS_CBASER); | 1451 | tmp = readq_relaxed(its->base + GITS_CBASER); |
| 1425 | writeq_relaxed(0, its->base + GITS_CWRITER); | ||
| 1426 | writel_relaxed(GITS_CTLR_ENABLE, its->base + GITS_CTLR); | ||
| 1427 | 1452 | ||
| 1428 | if ((tmp ^ baser) & GITS_BASER_SHAREABILITY_MASK) { | 1453 | if ((tmp ^ baser) & GITS_CBASER_SHAREABILITY_MASK) { |
| 1454 | if (!(tmp & GITS_CBASER_SHAREABILITY_MASK)) { | ||
| 1455 | /* | ||
| 1456 | * The HW reports non-shareable, we must | ||
| 1457 | * remove the cacheability attributes as | ||
| 1458 | * well. | ||
| 1459 | */ | ||
| 1460 | baser &= ~(GITS_CBASER_SHAREABILITY_MASK | | ||
| 1461 | GITS_CBASER_CACHEABILITY_MASK); | ||
| 1462 | baser |= GITS_CBASER_nC; | ||
| 1463 | writeq_relaxed(baser, its->base + GITS_CBASER); | ||
| 1464 | } | ||
| 1429 | pr_info("ITS: using cache flushing for cmd queue\n"); | 1465 | pr_info("ITS: using cache flushing for cmd queue\n"); |
| 1430 | its->flags |= ITS_FLAGS_CMDQ_NEEDS_FLUSHING; | 1466 | its->flags |= ITS_FLAGS_CMDQ_NEEDS_FLUSHING; |
| 1431 | } | 1467 | } |
| 1432 | 1468 | ||
| 1469 | writeq_relaxed(0, its->base + GITS_CWRITER); | ||
| 1470 | writel_relaxed(GITS_CTLR_ENABLE, its->base + GITS_CTLR); | ||
| 1471 | |||
| 1433 | if (of_property_read_bool(its->msi_chip.of_node, "msi-controller")) { | 1472 | if (of_property_read_bool(its->msi_chip.of_node, "msi-controller")) { |
| 1434 | its->domain = irq_domain_add_tree(NULL, &its_domain_ops, its); | 1473 | its->domain = irq_domain_add_tree(NULL, &its_domain_ops, its); |
| 1435 | if (!its->domain) { | 1474 | if (!its->domain) { |
diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c index a7a9271f64b1..ce5f7f9cff06 100644 --- a/drivers/net/ethernet/marvell/mvneta.c +++ b/drivers/net/ethernet/marvell/mvneta.c | |||
| @@ -2729,16 +2729,11 @@ static int mvneta_stop(struct net_device *dev) | |||
| 2729 | static int mvneta_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) | 2729 | static int mvneta_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) |
| 2730 | { | 2730 | { |
| 2731 | struct mvneta_port *pp = netdev_priv(dev); | 2731 | struct mvneta_port *pp = netdev_priv(dev); |
| 2732 | int ret; | ||
| 2733 | 2732 | ||
| 2734 | if (!pp->phy_dev) | 2733 | if (!pp->phy_dev) |
| 2735 | return -ENOTSUPP; | 2734 | return -ENOTSUPP; |
| 2736 | 2735 | ||
| 2737 | ret = phy_mii_ioctl(pp->phy_dev, ifr, cmd); | 2736 | return phy_mii_ioctl(pp->phy_dev, ifr, cmd); |
| 2738 | if (!ret) | ||
| 2739 | mvneta_adjust_link(dev); | ||
| 2740 | |||
| 2741 | return ret; | ||
| 2742 | } | 2737 | } |
| 2743 | 2738 | ||
| 2744 | /* Ethtool methods */ | 2739 | /* Ethtool methods */ |
diff --git a/drivers/net/ethernet/mellanox/mlx4/cmd.c b/drivers/net/ethernet/mellanox/mlx4/cmd.c index 06993ea9e6ba..f0fbb4ade85d 100644 --- a/drivers/net/ethernet/mellanox/mlx4/cmd.c +++ b/drivers/net/ethernet/mellanox/mlx4/cmd.c | |||
| @@ -725,7 +725,8 @@ static int mlx4_cmd_wait(struct mlx4_dev *dev, u64 in_param, u64 *out_param, | |||
| 725 | * on the host, we deprecate the error message for this | 725 | * on the host, we deprecate the error message for this |
| 726 | * specific command/input_mod/opcode_mod/fw-status to be debug. | 726 | * specific command/input_mod/opcode_mod/fw-status to be debug. |
| 727 | */ | 727 | */ |
| 728 | if (op == MLX4_CMD_SET_PORT && in_modifier == 1 && | 728 | if (op == MLX4_CMD_SET_PORT && |
| 729 | (in_modifier == 1 || in_modifier == 2) && | ||
| 729 | op_modifier == MLX4_SET_PORT_IB_OPCODE && | 730 | op_modifier == MLX4_SET_PORT_IB_OPCODE && |
| 730 | context->fw_status == CMD_STAT_BAD_SIZE) | 731 | context->fw_status == CMD_STAT_BAD_SIZE) |
| 731 | mlx4_dbg(dev, "command 0x%x failed: fw status = 0x%x\n", | 732 | mlx4_dbg(dev, "command 0x%x failed: fw status = 0x%x\n", |
diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c index e9b960f0ff32..720aaf6313d2 100644 --- a/drivers/net/xen-netfront.c +++ b/drivers/net/xen-netfront.c | |||
| @@ -1008,8 +1008,7 @@ err: | |||
| 1008 | 1008 | ||
| 1009 | static int xennet_change_mtu(struct net_device *dev, int mtu) | 1009 | static int xennet_change_mtu(struct net_device *dev, int mtu) |
| 1010 | { | 1010 | { |
| 1011 | int max = xennet_can_sg(dev) ? | 1011 | int max = xennet_can_sg(dev) ? XEN_NETIF_MAX_TX_SIZE : ETH_DATA_LEN; |
| 1012 | XEN_NETIF_MAX_TX_SIZE - MAX_TCP_HEADER : ETH_DATA_LEN; | ||
| 1013 | 1012 | ||
| 1014 | if (mtu > max) | 1013 | if (mtu > max) |
| 1015 | return -EINVAL; | 1014 | return -EINVAL; |
| @@ -1279,8 +1278,6 @@ static struct net_device *xennet_create_dev(struct xenbus_device *dev) | |||
| 1279 | netdev->ethtool_ops = &xennet_ethtool_ops; | 1278 | netdev->ethtool_ops = &xennet_ethtool_ops; |
| 1280 | SET_NETDEV_DEV(netdev, &dev->dev); | 1279 | SET_NETDEV_DEV(netdev, &dev->dev); |
| 1281 | 1280 | ||
| 1282 | netif_set_gso_max_size(netdev, XEN_NETIF_MAX_TX_SIZE - MAX_TCP_HEADER); | ||
| 1283 | |||
| 1284 | np->netdev = netdev; | 1281 | np->netdev = netdev; |
| 1285 | 1282 | ||
| 1286 | netif_carrier_off(netdev); | 1283 | netif_carrier_off(netdev); |
diff --git a/drivers/of/address.c b/drivers/of/address.c index ad2906919d45..78a7dcbec7d8 100644 --- a/drivers/of/address.c +++ b/drivers/of/address.c | |||
| @@ -450,12 +450,17 @@ static struct of_bus *of_match_bus(struct device_node *np) | |||
| 450 | return NULL; | 450 | return NULL; |
| 451 | } | 451 | } |
| 452 | 452 | ||
| 453 | static int of_empty_ranges_quirk(void) | 453 | static int of_empty_ranges_quirk(struct device_node *np) |
| 454 | { | 454 | { |
| 455 | if (IS_ENABLED(CONFIG_PPC)) { | 455 | if (IS_ENABLED(CONFIG_PPC)) { |
| 456 | /* To save cycles, we cache the result */ | 456 | /* To save cycles, we cache the result for global "Mac" setting */ |
| 457 | static int quirk_state = -1; | 457 | static int quirk_state = -1; |
| 458 | 458 | ||
| 459 | /* PA-SEMI sdc DT bug */ | ||
| 460 | if (of_device_is_compatible(np, "1682m-sdc")) | ||
| 461 | return true; | ||
| 462 | |||
| 463 | /* Make quirk cached */ | ||
| 459 | if (quirk_state < 0) | 464 | if (quirk_state < 0) |
| 460 | quirk_state = | 465 | quirk_state = |
| 461 | of_machine_is_compatible("Power Macintosh") || | 466 | of_machine_is_compatible("Power Macintosh") || |
| @@ -490,7 +495,7 @@ static int of_translate_one(struct device_node *parent, struct of_bus *bus, | |||
| 490 | * This code is only enabled on powerpc. --gcl | 495 | * This code is only enabled on powerpc. --gcl |
| 491 | */ | 496 | */ |
| 492 | ranges = of_get_property(parent, rprop, &rlen); | 497 | ranges = of_get_property(parent, rprop, &rlen); |
| 493 | if (ranges == NULL && !of_empty_ranges_quirk()) { | 498 | if (ranges == NULL && !of_empty_ranges_quirk(parent)) { |
| 494 | pr_debug("OF: no ranges; cannot translate\n"); | 499 | pr_debug("OF: no ranges; cannot translate\n"); |
| 495 | return 1; | 500 | return 1; |
| 496 | } | 501 | } |
diff --git a/drivers/staging/iio/Kconfig b/drivers/staging/iio/Kconfig index 24183028bd71..6d5b38d69578 100644 --- a/drivers/staging/iio/Kconfig +++ b/drivers/staging/iio/Kconfig | |||
| @@ -38,6 +38,7 @@ config IIO_SIMPLE_DUMMY_EVENTS | |||
| 38 | config IIO_SIMPLE_DUMMY_BUFFER | 38 | config IIO_SIMPLE_DUMMY_BUFFER |
| 39 | bool "Buffered capture support" | 39 | bool "Buffered capture support" |
| 40 | select IIO_BUFFER | 40 | select IIO_BUFFER |
| 41 | select IIO_TRIGGER | ||
| 41 | select IIO_KFIFO_BUF | 42 | select IIO_KFIFO_BUF |
| 42 | help | 43 | help |
| 43 | Add buffered data capture to the simple dummy driver. | 44 | Add buffered data capture to the simple dummy driver. |
diff --git a/drivers/staging/iio/magnetometer/hmc5843_core.c b/drivers/staging/iio/magnetometer/hmc5843_core.c index fd171d8b38fb..90cc18b703cf 100644 --- a/drivers/staging/iio/magnetometer/hmc5843_core.c +++ b/drivers/staging/iio/magnetometer/hmc5843_core.c | |||
| @@ -592,6 +592,7 @@ int hmc5843_common_probe(struct device *dev, struct regmap *regmap, | |||
| 592 | mutex_init(&data->lock); | 592 | mutex_init(&data->lock); |
| 593 | 593 | ||
| 594 | indio_dev->dev.parent = dev; | 594 | indio_dev->dev.parent = dev; |
| 595 | indio_dev->name = dev->driver->name; | ||
| 595 | indio_dev->info = &hmc5843_info; | 596 | indio_dev->info = &hmc5843_info; |
| 596 | indio_dev->modes = INDIO_DIRECT_MODE; | 597 | indio_dev->modes = INDIO_DIRECT_MODE; |
| 597 | indio_dev->channels = data->variant->channels; | 598 | indio_dev->channels = data->variant->channels; |
diff --git a/drivers/tty/serial/fsl_lpuart.c b/drivers/tty/serial/fsl_lpuart.c index b1893f3f88f1..3ad1458bfeb0 100644 --- a/drivers/tty/serial/fsl_lpuart.c +++ b/drivers/tty/serial/fsl_lpuart.c | |||
| @@ -921,6 +921,9 @@ static void lpuart_setup_watermark(struct lpuart_port *sport) | |||
| 921 | writeb(val | UARTPFIFO_TXFE | UARTPFIFO_RXFE, | 921 | writeb(val | UARTPFIFO_TXFE | UARTPFIFO_RXFE, |
| 922 | sport->port.membase + UARTPFIFO); | 922 | sport->port.membase + UARTPFIFO); |
| 923 | 923 | ||
| 924 | /* explicitly clear RDRF */ | ||
| 925 | readb(sport->port.membase + UARTSR1); | ||
| 926 | |||
| 924 | /* flush Tx and Rx FIFO */ | 927 | /* flush Tx and Rx FIFO */ |
| 925 | writeb(UARTCFIFO_TXFLUSH | UARTCFIFO_RXFLUSH, | 928 | writeb(UARTCFIFO_TXFLUSH | UARTCFIFO_RXFLUSH, |
| 926 | sport->port.membase + UARTCFIFO); | 929 | sport->port.membase + UARTCFIFO); |
| @@ -1076,6 +1079,8 @@ static int lpuart_startup(struct uart_port *port) | |||
| 1076 | sport->txfifo_size = 0x1 << (((temp >> UARTPFIFO_TXSIZE_OFF) & | 1079 | sport->txfifo_size = 0x1 << (((temp >> UARTPFIFO_TXSIZE_OFF) & |
| 1077 | UARTPFIFO_FIFOSIZE_MASK) + 1); | 1080 | UARTPFIFO_FIFOSIZE_MASK) + 1); |
| 1078 | 1081 | ||
| 1082 | sport->port.fifosize = sport->txfifo_size; | ||
| 1083 | |||
| 1079 | sport->rxfifo_size = 0x1 << (((temp >> UARTPFIFO_RXSIZE_OFF) & | 1084 | sport->rxfifo_size = 0x1 << (((temp >> UARTPFIFO_RXSIZE_OFF) & |
| 1080 | UARTPFIFO_FIFOSIZE_MASK) + 1); | 1085 | UARTPFIFO_FIFOSIZE_MASK) + 1); |
| 1081 | 1086 | ||
diff --git a/drivers/tty/serial/samsung.c b/drivers/tty/serial/samsung.c index af821a908720..cf08876922f1 100644 --- a/drivers/tty/serial/samsung.c +++ b/drivers/tty/serial/samsung.c | |||
| @@ -963,6 +963,7 @@ static void s3c24xx_serial_shutdown(struct uart_port *port) | |||
| 963 | free_irq(ourport->tx_irq, ourport); | 963 | free_irq(ourport->tx_irq, ourport); |
| 964 | tx_enabled(port) = 0; | 964 | tx_enabled(port) = 0; |
| 965 | ourport->tx_claimed = 0; | 965 | ourport->tx_claimed = 0; |
| 966 | ourport->tx_mode = 0; | ||
| 966 | } | 967 | } |
| 967 | 968 | ||
| 968 | if (ourport->rx_claimed) { | 969 | if (ourport->rx_claimed) { |
diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c index a7865c4b0498..0827d7c96527 100644 --- a/drivers/usb/host/xhci-hub.c +++ b/drivers/usb/host/xhci-hub.c | |||
| @@ -387,6 +387,10 @@ static void xhci_clear_port_change_bit(struct xhci_hcd *xhci, u16 wValue, | |||
| 387 | status = PORT_PLC; | 387 | status = PORT_PLC; |
| 388 | port_change_bit = "link state"; | 388 | port_change_bit = "link state"; |
| 389 | break; | 389 | break; |
| 390 | case USB_PORT_FEAT_C_PORT_CONFIG_ERROR: | ||
| 391 | status = PORT_CEC; | ||
| 392 | port_change_bit = "config error"; | ||
| 393 | break; | ||
| 390 | default: | 394 | default: |
| 391 | /* Should never happen */ | 395 | /* Should never happen */ |
| 392 | return; | 396 | return; |
| @@ -588,6 +592,8 @@ static u32 xhci_get_port_status(struct usb_hcd *hcd, | |||
| 588 | status |= USB_PORT_STAT_C_LINK_STATE << 16; | 592 | status |= USB_PORT_STAT_C_LINK_STATE << 16; |
| 589 | if ((raw_port_status & PORT_WRC)) | 593 | if ((raw_port_status & PORT_WRC)) |
| 590 | status |= USB_PORT_STAT_C_BH_RESET << 16; | 594 | status |= USB_PORT_STAT_C_BH_RESET << 16; |
| 595 | if ((raw_port_status & PORT_CEC)) | ||
| 596 | status |= USB_PORT_STAT_C_CONFIG_ERROR << 16; | ||
| 591 | } | 597 | } |
| 592 | 598 | ||
| 593 | if (hcd->speed != HCD_USB3) { | 599 | if (hcd->speed != HCD_USB3) { |
| @@ -1005,6 +1011,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, | |||
| 1005 | case USB_PORT_FEAT_C_OVER_CURRENT: | 1011 | case USB_PORT_FEAT_C_OVER_CURRENT: |
| 1006 | case USB_PORT_FEAT_C_ENABLE: | 1012 | case USB_PORT_FEAT_C_ENABLE: |
| 1007 | case USB_PORT_FEAT_C_PORT_LINK_STATE: | 1013 | case USB_PORT_FEAT_C_PORT_LINK_STATE: |
| 1014 | case USB_PORT_FEAT_C_PORT_CONFIG_ERROR: | ||
| 1008 | xhci_clear_port_change_bit(xhci, wValue, wIndex, | 1015 | xhci_clear_port_change_bit(xhci, wValue, wIndex, |
| 1009 | port_array[wIndex], temp); | 1016 | port_array[wIndex], temp); |
| 1010 | break; | 1017 | break; |
| @@ -1069,7 +1076,7 @@ int xhci_hub_status_data(struct usb_hcd *hcd, char *buf) | |||
| 1069 | */ | 1076 | */ |
| 1070 | status = bus_state->resuming_ports; | 1077 | status = bus_state->resuming_ports; |
| 1071 | 1078 | ||
| 1072 | mask = PORT_CSC | PORT_PEC | PORT_OCC | PORT_PLC | PORT_WRC; | 1079 | mask = PORT_CSC | PORT_PEC | PORT_OCC | PORT_PLC | PORT_WRC | PORT_CEC; |
| 1073 | 1080 | ||
| 1074 | spin_lock_irqsave(&xhci->lock, flags); | 1081 | spin_lock_irqsave(&xhci->lock, flags); |
| 1075 | /* For each port, did anything change? If so, set that bit in buf. */ | 1082 | /* For each port, did anything change? If so, set that bit in buf. */ |
diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c index fd53c9ebd662..2af32e26fafc 100644 --- a/drivers/usb/host/xhci-pci.c +++ b/drivers/usb/host/xhci-pci.c | |||
| @@ -115,6 +115,7 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) | |||
| 115 | if (pdev->vendor == PCI_VENDOR_ID_INTEL) { | 115 | if (pdev->vendor == PCI_VENDOR_ID_INTEL) { |
| 116 | xhci->quirks |= XHCI_LPM_SUPPORT; | 116 | xhci->quirks |= XHCI_LPM_SUPPORT; |
| 117 | xhci->quirks |= XHCI_INTEL_HOST; | 117 | xhci->quirks |= XHCI_INTEL_HOST; |
| 118 | xhci->quirks |= XHCI_AVOID_BEI; | ||
| 118 | } | 119 | } |
| 119 | if (pdev->vendor == PCI_VENDOR_ID_INTEL && | 120 | if (pdev->vendor == PCI_VENDOR_ID_INTEL && |
| 120 | pdev->device == PCI_DEVICE_ID_INTEL_PANTHERPOINT_XHCI) { | 121 | pdev->device == PCI_DEVICE_ID_INTEL_PANTHERPOINT_XHCI) { |
| @@ -130,7 +131,6 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) | |||
| 130 | * PPT chipsets. | 131 | * PPT chipsets. |
| 131 | */ | 132 | */ |
| 132 | xhci->quirks |= XHCI_SPURIOUS_REBOOT; | 133 | xhci->quirks |= XHCI_SPURIOUS_REBOOT; |
| 133 | xhci->quirks |= XHCI_AVOID_BEI; | ||
| 134 | } | 134 | } |
| 135 | if (pdev->vendor == PCI_VENDOR_ID_INTEL && | 135 | if (pdev->vendor == PCI_VENDOR_ID_INTEL && |
| 136 | pdev->device == PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI) { | 136 | pdev->device == PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI) { |
diff --git a/drivers/usb/isp1760/isp1760-udc.c b/drivers/usb/isp1760/isp1760-udc.c index f32c292cc868..3fc4fe770253 100644 --- a/drivers/usb/isp1760/isp1760-udc.c +++ b/drivers/usb/isp1760/isp1760-udc.c | |||
| @@ -1203,7 +1203,7 @@ static int isp1760_udc_start(struct usb_gadget *gadget, | |||
| 1203 | 1203 | ||
| 1204 | if (udc->driver) { | 1204 | if (udc->driver) { |
| 1205 | dev_err(udc->isp->dev, "UDC already has a gadget driver\n"); | 1205 | dev_err(udc->isp->dev, "UDC already has a gadget driver\n"); |
| 1206 | spin_unlock(&udc->lock); | 1206 | spin_unlock_irqrestore(&udc->lock, flags); |
| 1207 | return -EBUSY; | 1207 | return -EBUSY; |
| 1208 | } | 1208 | } |
| 1209 | 1209 | ||
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c index 3086dec0ef53..8eb68a31cab6 100644 --- a/drivers/usb/serial/ftdi_sio.c +++ b/drivers/usb/serial/ftdi_sio.c | |||
| @@ -604,6 +604,7 @@ static const struct usb_device_id id_table_combined[] = { | |||
| 604 | .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, | 604 | .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, |
| 605 | { USB_DEVICE(FTDI_VID, FTDI_NT_ORIONLXM_PID), | 605 | { USB_DEVICE(FTDI_VID, FTDI_NT_ORIONLXM_PID), |
| 606 | .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, | 606 | .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, |
| 607 | { USB_DEVICE(FTDI_VID, FTDI_SYNAPSE_SS200_PID) }, | ||
| 607 | /* | 608 | /* |
| 608 | * ELV devices: | 609 | * ELV devices: |
| 609 | */ | 610 | */ |
| @@ -1883,8 +1884,12 @@ static int ftdi_8u2232c_probe(struct usb_serial *serial) | |||
| 1883 | { | 1884 | { |
| 1884 | struct usb_device *udev = serial->dev; | 1885 | struct usb_device *udev = serial->dev; |
| 1885 | 1886 | ||
| 1886 | if ((udev->manufacturer && !strcmp(udev->manufacturer, "CALAO Systems")) || | 1887 | if (udev->manufacturer && !strcmp(udev->manufacturer, "CALAO Systems")) |
| 1887 | (udev->product && !strcmp(udev->product, "BeagleBone/XDS100V2"))) | 1888 | return ftdi_jtag_probe(serial); |
| 1889 | |||
| 1890 | if (udev->product && | ||
| 1891 | (!strcmp(udev->product, "BeagleBone/XDS100V2") || | ||
| 1892 | !strcmp(udev->product, "SNAP Connect E10"))) | ||
| 1888 | return ftdi_jtag_probe(serial); | 1893 | return ftdi_jtag_probe(serial); |
| 1889 | 1894 | ||
| 1890 | return 0; | 1895 | return 0; |
diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h index 56b1b55c4751..4e4f46f3c89c 100644 --- a/drivers/usb/serial/ftdi_sio_ids.h +++ b/drivers/usb/serial/ftdi_sio_ids.h | |||
| @@ -561,6 +561,12 @@ | |||
| 561 | */ | 561 | */ |
| 562 | #define FTDI_NT_ORIONLXM_PID 0x7c90 /* OrionLXm Substation Automation Platform */ | 562 | #define FTDI_NT_ORIONLXM_PID 0x7c90 /* OrionLXm Substation Automation Platform */ |
| 563 | 563 | ||
| 564 | /* | ||
| 565 | * Synapse Wireless product ids (FTDI_VID) | ||
| 566 | * http://www.synapse-wireless.com | ||
| 567 | */ | ||
| 568 | #define FTDI_SYNAPSE_SS200_PID 0x9090 /* SS200 - SNAP Stick 200 */ | ||
| 569 | |||
| 564 | 570 | ||
| 565 | /********************************/ | 571 | /********************************/ |
| 566 | /** third-party VID/PID combos **/ | 572 | /** third-party VID/PID combos **/ |
diff --git a/drivers/usb/serial/keyspan_pda.c b/drivers/usb/serial/keyspan_pda.c index dd97d8b572c3..4f7e072e4e00 100644 --- a/drivers/usb/serial/keyspan_pda.c +++ b/drivers/usb/serial/keyspan_pda.c | |||
| @@ -61,6 +61,7 @@ struct keyspan_pda_private { | |||
| 61 | /* For Xircom PGSDB9 and older Entrega version of the same device */ | 61 | /* For Xircom PGSDB9 and older Entrega version of the same device */ |
| 62 | #define XIRCOM_VENDOR_ID 0x085a | 62 | #define XIRCOM_VENDOR_ID 0x085a |
| 63 | #define XIRCOM_FAKE_ID 0x8027 | 63 | #define XIRCOM_FAKE_ID 0x8027 |
| 64 | #define XIRCOM_FAKE_ID_2 0x8025 /* "PGMFHUB" serial */ | ||
| 64 | #define ENTREGA_VENDOR_ID 0x1645 | 65 | #define ENTREGA_VENDOR_ID 0x1645 |
| 65 | #define ENTREGA_FAKE_ID 0x8093 | 66 | #define ENTREGA_FAKE_ID 0x8093 |
| 66 | 67 | ||
| @@ -70,6 +71,7 @@ static const struct usb_device_id id_table_combined[] = { | |||
| 70 | #endif | 71 | #endif |
| 71 | #ifdef XIRCOM | 72 | #ifdef XIRCOM |
| 72 | { USB_DEVICE(XIRCOM_VENDOR_ID, XIRCOM_FAKE_ID) }, | 73 | { USB_DEVICE(XIRCOM_VENDOR_ID, XIRCOM_FAKE_ID) }, |
| 74 | { USB_DEVICE(XIRCOM_VENDOR_ID, XIRCOM_FAKE_ID_2) }, | ||
| 73 | { USB_DEVICE(ENTREGA_VENDOR_ID, ENTREGA_FAKE_ID) }, | 75 | { USB_DEVICE(ENTREGA_VENDOR_ID, ENTREGA_FAKE_ID) }, |
| 74 | #endif | 76 | #endif |
| 75 | { USB_DEVICE(KEYSPAN_VENDOR_ID, KEYSPAN_PDA_ID) }, | 77 | { USB_DEVICE(KEYSPAN_VENDOR_ID, KEYSPAN_PDA_ID) }, |
| @@ -93,6 +95,7 @@ static const struct usb_device_id id_table_fake[] = { | |||
| 93 | #ifdef XIRCOM | 95 | #ifdef XIRCOM |
| 94 | static const struct usb_device_id id_table_fake_xircom[] = { | 96 | static const struct usb_device_id id_table_fake_xircom[] = { |
| 95 | { USB_DEVICE(XIRCOM_VENDOR_ID, XIRCOM_FAKE_ID) }, | 97 | { USB_DEVICE(XIRCOM_VENDOR_ID, XIRCOM_FAKE_ID) }, |
| 98 | { USB_DEVICE(XIRCOM_VENDOR_ID, XIRCOM_FAKE_ID_2) }, | ||
| 96 | { USB_DEVICE(ENTREGA_VENDOR_ID, ENTREGA_FAKE_ID) }, | 99 | { USB_DEVICE(ENTREGA_VENDOR_ID, ENTREGA_FAKE_ID) }, |
| 97 | { } | 100 | { } |
| 98 | }; | 101 | }; |
diff --git a/drivers/xen/Kconfig b/drivers/xen/Kconfig index b812462083fc..94d96809e686 100644 --- a/drivers/xen/Kconfig +++ b/drivers/xen/Kconfig | |||
| @@ -55,6 +55,23 @@ config XEN_BALLOON_MEMORY_HOTPLUG | |||
| 55 | 55 | ||
| 56 | In that case step 3 should be omitted. | 56 | In that case step 3 should be omitted. |
| 57 | 57 | ||
| 58 | config XEN_BALLOON_MEMORY_HOTPLUG_LIMIT | ||
| 59 | int "Hotplugged memory limit (in GiB) for a PV guest" | ||
| 60 | default 512 if X86_64 | ||
| 61 | default 4 if X86_32 | ||
| 62 | range 0 64 if X86_32 | ||
| 63 | depends on XEN_HAVE_PVMMU | ||
| 64 | depends on XEN_BALLOON_MEMORY_HOTPLUG | ||
| 65 | help | ||
| 66 | Maxmium amount of memory (in GiB) that a PV guest can be | ||
| 67 | expanded to when using memory hotplug. | ||
| 68 | |||
| 69 | A PV guest can have more memory than this limit if is | ||
| 70 | started with a larger maximum. | ||
| 71 | |||
| 72 | This value is used to allocate enough space in internal | ||
| 73 | tables needed for physical memory administration. | ||
| 74 | |||
| 58 | config XEN_SCRUB_PAGES | 75 | config XEN_SCRUB_PAGES |
| 59 | bool "Scrub pages before returning them to system" | 76 | bool "Scrub pages before returning them to system" |
| 60 | depends on XEN_BALLOON | 77 | depends on XEN_BALLOON |
diff --git a/drivers/xen/balloon.c b/drivers/xen/balloon.c index 0b52d92cb2e5..fd933695f232 100644 --- a/drivers/xen/balloon.c +++ b/drivers/xen/balloon.c | |||
| @@ -229,6 +229,29 @@ static enum bp_state reserve_additional_memory(long credit) | |||
| 229 | balloon_hotplug = round_up(balloon_hotplug, PAGES_PER_SECTION); | 229 | balloon_hotplug = round_up(balloon_hotplug, PAGES_PER_SECTION); |
| 230 | nid = memory_add_physaddr_to_nid(hotplug_start_paddr); | 230 | nid = memory_add_physaddr_to_nid(hotplug_start_paddr); |
| 231 | 231 | ||
| 232 | #ifdef CONFIG_XEN_HAVE_PVMMU | ||
| 233 | /* | ||
| 234 | * add_memory() will build page tables for the new memory so | ||
| 235 | * the p2m must contain invalid entries so the correct | ||
| 236 | * non-present PTEs will be written. | ||
| 237 | * | ||
| 238 | * If a failure occurs, the original (identity) p2m entries | ||
| 239 | * are not restored since this region is now known not to | ||
| 240 | * conflict with any devices. | ||
| 241 | */ | ||
| 242 | if (!xen_feature(XENFEAT_auto_translated_physmap)) { | ||
| 243 | unsigned long pfn, i; | ||
| 244 | |||
| 245 | pfn = PFN_DOWN(hotplug_start_paddr); | ||
| 246 | for (i = 0; i < balloon_hotplug; i++) { | ||
| 247 | if (!set_phys_to_machine(pfn + i, INVALID_P2M_ENTRY)) { | ||
| 248 | pr_warn("set_phys_to_machine() failed, no memory added\n"); | ||
| 249 | return BP_ECANCELED; | ||
| 250 | } | ||
| 251 | } | ||
| 252 | } | ||
| 253 | #endif | ||
| 254 | |||
| 232 | rc = add_memory(nid, hotplug_start_paddr, balloon_hotplug << PAGE_SHIFT); | 255 | rc = add_memory(nid, hotplug_start_paddr, balloon_hotplug << PAGE_SHIFT); |
| 233 | 256 | ||
| 234 | if (rc) { | 257 | if (rc) { |
