diff options
Diffstat (limited to 'drivers')
786 files changed, 8118 insertions, 5450 deletions
diff --git a/drivers/Makefile b/drivers/Makefile index 1d034b680431..e06f7f633f73 100644 --- a/drivers/Makefile +++ b/drivers/Makefile | |||
| @@ -105,6 +105,7 @@ obj-$(CONFIG_TC) += tc/ | |||
| 105 | obj-$(CONFIG_UWB) += uwb/ | 105 | obj-$(CONFIG_UWB) += uwb/ |
| 106 | obj-$(CONFIG_USB_PHY) += usb/ | 106 | obj-$(CONFIG_USB_PHY) += usb/ |
| 107 | obj-$(CONFIG_USB) += usb/ | 107 | obj-$(CONFIG_USB) += usb/ |
| 108 | obj-$(CONFIG_USB_SUPPORT) += usb/ | ||
| 108 | obj-$(CONFIG_PCI) += usb/ | 109 | obj-$(CONFIG_PCI) += usb/ |
| 109 | obj-$(CONFIG_USB_GADGET) += usb/ | 110 | obj-$(CONFIG_USB_GADGET) += usb/ |
| 110 | obj-$(CONFIG_OF) += usb/ | 111 | obj-$(CONFIG_OF) += usb/ |
diff --git a/drivers/acpi/cppc_acpi.c b/drivers/acpi/cppc_acpi.c index 21c28433c590..30e84cc600ae 100644 --- a/drivers/acpi/cppc_acpi.c +++ b/drivers/acpi/cppc_acpi.c | |||
| @@ -949,7 +949,7 @@ static int cpc_read(int cpu, struct cpc_register_resource *reg_res, u64 *val) | |||
| 949 | } | 949 | } |
| 950 | 950 | ||
| 951 | *val = 0; | 951 | *val = 0; |
| 952 | if (reg->space_id == ACPI_ADR_SPACE_PLATFORM_COMM) | 952 | if (reg->space_id == ACPI_ADR_SPACE_PLATFORM_COMM && pcc_ss_id >= 0) |
| 953 | vaddr = GET_PCC_VADDR(reg->address, pcc_ss_id); | 953 | vaddr = GET_PCC_VADDR(reg->address, pcc_ss_id); |
| 954 | else if (reg->space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) | 954 | else if (reg->space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) |
| 955 | vaddr = reg_res->sys_mem_vaddr; | 955 | vaddr = reg_res->sys_mem_vaddr; |
| @@ -988,7 +988,7 @@ static int cpc_write(int cpu, struct cpc_register_resource *reg_res, u64 val) | |||
| 988 | int pcc_ss_id = per_cpu(cpu_pcc_subspace_idx, cpu); | 988 | int pcc_ss_id = per_cpu(cpu_pcc_subspace_idx, cpu); |
| 989 | struct cpc_reg *reg = ®_res->cpc_entry.reg; | 989 | struct cpc_reg *reg = ®_res->cpc_entry.reg; |
| 990 | 990 | ||
| 991 | if (reg->space_id == ACPI_ADR_SPACE_PLATFORM_COMM) | 991 | if (reg->space_id == ACPI_ADR_SPACE_PLATFORM_COMM && pcc_ss_id >= 0) |
| 992 | vaddr = GET_PCC_VADDR(reg->address, pcc_ss_id); | 992 | vaddr = GET_PCC_VADDR(reg->address, pcc_ss_id); |
| 993 | else if (reg->space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) | 993 | else if (reg->space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) |
| 994 | vaddr = reg_res->sys_mem_vaddr; | 994 | vaddr = reg_res->sys_mem_vaddr; |
| @@ -1035,14 +1035,15 @@ int cppc_get_perf_caps(int cpunum, struct cppc_perf_caps *perf_caps) | |||
| 1035 | *lowest_non_linear_reg, *nominal_reg; | 1035 | *lowest_non_linear_reg, *nominal_reg; |
| 1036 | u64 high, low, nom, min_nonlinear; | 1036 | u64 high, low, nom, min_nonlinear; |
| 1037 | int pcc_ss_id = per_cpu(cpu_pcc_subspace_idx, cpunum); | 1037 | int pcc_ss_id = per_cpu(cpu_pcc_subspace_idx, cpunum); |
| 1038 | struct cppc_pcc_data *pcc_ss_data = pcc_data[pcc_ss_id]; | 1038 | struct cppc_pcc_data *pcc_ss_data; |
| 1039 | int ret = 0, regs_in_pcc = 0; | 1039 | int ret = 0, regs_in_pcc = 0; |
| 1040 | 1040 | ||
| 1041 | if (!cpc_desc) { | 1041 | if (!cpc_desc || pcc_ss_id < 0) { |
| 1042 | pr_debug("No CPC descriptor for CPU:%d\n", cpunum); | 1042 | pr_debug("No CPC descriptor for CPU:%d\n", cpunum); |
| 1043 | return -ENODEV; | 1043 | return -ENODEV; |
| 1044 | } | 1044 | } |
| 1045 | 1045 | ||
| 1046 | pcc_ss_data = pcc_data[pcc_ss_id]; | ||
| 1046 | highest_reg = &cpc_desc->cpc_regs[HIGHEST_PERF]; | 1047 | highest_reg = &cpc_desc->cpc_regs[HIGHEST_PERF]; |
| 1047 | lowest_reg = &cpc_desc->cpc_regs[LOWEST_PERF]; | 1048 | lowest_reg = &cpc_desc->cpc_regs[LOWEST_PERF]; |
| 1048 | lowest_non_linear_reg = &cpc_desc->cpc_regs[LOW_NON_LINEAR_PERF]; | 1049 | lowest_non_linear_reg = &cpc_desc->cpc_regs[LOW_NON_LINEAR_PERF]; |
| @@ -1095,15 +1096,16 @@ int cppc_get_perf_ctrs(int cpunum, struct cppc_perf_fb_ctrs *perf_fb_ctrs) | |||
| 1095 | struct cpc_register_resource *delivered_reg, *reference_reg, | 1096 | struct cpc_register_resource *delivered_reg, *reference_reg, |
| 1096 | *ref_perf_reg, *ctr_wrap_reg; | 1097 | *ref_perf_reg, *ctr_wrap_reg; |
| 1097 | int pcc_ss_id = per_cpu(cpu_pcc_subspace_idx, cpunum); | 1098 | int pcc_ss_id = per_cpu(cpu_pcc_subspace_idx, cpunum); |
| 1098 | struct cppc_pcc_data *pcc_ss_data = pcc_data[pcc_ss_id]; | 1099 | struct cppc_pcc_data *pcc_ss_data; |
| 1099 | u64 delivered, reference, ref_perf, ctr_wrap_time; | 1100 | u64 delivered, reference, ref_perf, ctr_wrap_time; |
| 1100 | int ret = 0, regs_in_pcc = 0; | 1101 | int ret = 0, regs_in_pcc = 0; |
| 1101 | 1102 | ||
| 1102 | if (!cpc_desc) { | 1103 | if (!cpc_desc || pcc_ss_id < 0) { |
| 1103 | pr_debug("No CPC descriptor for CPU:%d\n", cpunum); | 1104 | pr_debug("No CPC descriptor for CPU:%d\n", cpunum); |
| 1104 | return -ENODEV; | 1105 | return -ENODEV; |
| 1105 | } | 1106 | } |
| 1106 | 1107 | ||
| 1108 | pcc_ss_data = pcc_data[pcc_ss_id]; | ||
| 1107 | delivered_reg = &cpc_desc->cpc_regs[DELIVERED_CTR]; | 1109 | delivered_reg = &cpc_desc->cpc_regs[DELIVERED_CTR]; |
| 1108 | reference_reg = &cpc_desc->cpc_regs[REFERENCE_CTR]; | 1110 | reference_reg = &cpc_desc->cpc_regs[REFERENCE_CTR]; |
| 1109 | ref_perf_reg = &cpc_desc->cpc_regs[REFERENCE_PERF]; | 1111 | ref_perf_reg = &cpc_desc->cpc_regs[REFERENCE_PERF]; |
| @@ -1172,11 +1174,12 @@ int cppc_set_perf(int cpu, struct cppc_perf_ctrls *perf_ctrls) | |||
| 1172 | struct cppc_pcc_data *pcc_ss_data = pcc_data[pcc_ss_id]; | 1174 | struct cppc_pcc_data *pcc_ss_data = pcc_data[pcc_ss_id]; |
| 1173 | int ret = 0; | 1175 | int ret = 0; |
| 1174 | 1176 | ||
| 1175 | if (!cpc_desc) { | 1177 | if (!cpc_desc || pcc_ss_id < 0) { |
| 1176 | pr_debug("No CPC descriptor for CPU:%d\n", cpu); | 1178 | pr_debug("No CPC descriptor for CPU:%d\n", cpu); |
| 1177 | return -ENODEV; | 1179 | return -ENODEV; |
| 1178 | } | 1180 | } |
| 1179 | 1181 | ||
| 1182 | pcc_ss_data = pcc_data[pcc_ss_id]; | ||
| 1180 | desired_reg = &cpc_desc->cpc_regs[DESIRED_PERF]; | 1183 | desired_reg = &cpc_desc->cpc_regs[DESIRED_PERF]; |
| 1181 | 1184 | ||
| 1182 | /* | 1185 | /* |
| @@ -1301,7 +1304,7 @@ unsigned int cppc_get_transition_latency(int cpu_num) | |||
| 1301 | struct cpc_desc *cpc_desc; | 1304 | struct cpc_desc *cpc_desc; |
| 1302 | struct cpc_register_resource *desired_reg; | 1305 | struct cpc_register_resource *desired_reg; |
| 1303 | int pcc_ss_id = per_cpu(cpu_pcc_subspace_idx, cpu_num); | 1306 | int pcc_ss_id = per_cpu(cpu_pcc_subspace_idx, cpu_num); |
| 1304 | struct cppc_pcc_data *pcc_ss_data = pcc_data[pcc_ss_id]; | 1307 | struct cppc_pcc_data *pcc_ss_data; |
| 1305 | 1308 | ||
| 1306 | cpc_desc = per_cpu(cpc_desc_ptr, cpu_num); | 1309 | cpc_desc = per_cpu(cpc_desc_ptr, cpu_num); |
| 1307 | if (!cpc_desc) | 1310 | if (!cpc_desc) |
| @@ -1311,6 +1314,10 @@ unsigned int cppc_get_transition_latency(int cpu_num) | |||
| 1311 | if (!CPC_IN_PCC(desired_reg)) | 1314 | if (!CPC_IN_PCC(desired_reg)) |
| 1312 | return CPUFREQ_ETERNAL; | 1315 | return CPUFREQ_ETERNAL; |
| 1313 | 1316 | ||
| 1317 | if (pcc_ss_id < 0) | ||
| 1318 | return CPUFREQ_ETERNAL; | ||
| 1319 | |||
| 1320 | pcc_ss_data = pcc_data[pcc_ss_id]; | ||
| 1314 | if (pcc_ss_data->pcc_mpar) | 1321 | if (pcc_ss_data->pcc_mpar) |
| 1315 | latency_ns = 60 * (1000 * 1000 * 1000 / pcc_ss_data->pcc_mpar); | 1322 | latency_ns = 60 * (1000 * 1000 * 1000 / pcc_ss_data->pcc_mpar); |
| 1316 | 1323 | ||
diff --git a/drivers/acpi/device_pm.c b/drivers/acpi/device_pm.c index e4ffaeec9ec2..a4c8ad98560d 100644 --- a/drivers/acpi/device_pm.c +++ b/drivers/acpi/device_pm.c | |||
| @@ -1138,7 +1138,7 @@ int acpi_subsys_thaw_noirq(struct device *dev) | |||
| 1138 | * skip all of the subsequent "thaw" callbacks for the device. | 1138 | * skip all of the subsequent "thaw" callbacks for the device. |
| 1139 | */ | 1139 | */ |
| 1140 | if (dev_pm_smart_suspend_and_suspended(dev)) { | 1140 | if (dev_pm_smart_suspend_and_suspended(dev)) { |
| 1141 | dev->power.direct_complete = true; | 1141 | dev_pm_skip_next_resume_phases(dev); |
| 1142 | return 0; | 1142 | return 0; |
| 1143 | } | 1143 | } |
| 1144 | 1144 | ||
diff --git a/drivers/acpi/device_sysfs.c b/drivers/acpi/device_sysfs.c index 24418932612e..a041689e5701 100644 --- a/drivers/acpi/device_sysfs.c +++ b/drivers/acpi/device_sysfs.c | |||
| @@ -146,6 +146,10 @@ static int create_pnp_modalias(struct acpi_device *acpi_dev, char *modalias, | |||
| 146 | int count; | 146 | int count; |
| 147 | struct acpi_hardware_id *id; | 147 | struct acpi_hardware_id *id; |
| 148 | 148 | ||
| 149 | /* Avoid unnecessarily loading modules for non present devices. */ | ||
| 150 | if (!acpi_device_is_present(acpi_dev)) | ||
| 151 | return 0; | ||
| 152 | |||
| 149 | /* | 153 | /* |
| 150 | * Since we skip ACPI_DT_NAMESPACE_HID from the modalias below, 0 should | 154 | * Since we skip ACPI_DT_NAMESPACE_HID from the modalias below, 0 should |
| 151 | * be returned if ACPI_DT_NAMESPACE_HID is the only ACPI/PNP ID in the | 155 | * be returned if ACPI_DT_NAMESPACE_HID is the only ACPI/PNP ID in the |
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c index da176c95aa2c..0252c9b9af3d 100644 --- a/drivers/acpi/ec.c +++ b/drivers/acpi/ec.c | |||
| @@ -1597,32 +1597,41 @@ static int acpi_ec_add(struct acpi_device *device) | |||
| 1597 | { | 1597 | { |
| 1598 | struct acpi_ec *ec = NULL; | 1598 | struct acpi_ec *ec = NULL; |
| 1599 | int ret; | 1599 | int ret; |
| 1600 | bool is_ecdt = false; | ||
| 1601 | acpi_status status; | ||
| 1600 | 1602 | ||
| 1601 | strcpy(acpi_device_name(device), ACPI_EC_DEVICE_NAME); | 1603 | strcpy(acpi_device_name(device), ACPI_EC_DEVICE_NAME); |
| 1602 | strcpy(acpi_device_class(device), ACPI_EC_CLASS); | 1604 | strcpy(acpi_device_class(device), ACPI_EC_CLASS); |
| 1603 | 1605 | ||
| 1604 | ec = acpi_ec_alloc(); | 1606 | if (!strcmp(acpi_device_hid(device), ACPI_ECDT_HID)) { |
| 1605 | if (!ec) | 1607 | is_ecdt = true; |
| 1606 | return -ENOMEM; | 1608 | ec = boot_ec; |
| 1607 | if (ec_parse_device(device->handle, 0, ec, NULL) != | 1609 | } else { |
| 1608 | AE_CTRL_TERMINATE) { | 1610 | ec = acpi_ec_alloc(); |
| 1611 | if (!ec) | ||
| 1612 | return -ENOMEM; | ||
| 1613 | status = ec_parse_device(device->handle, 0, ec, NULL); | ||
| 1614 | if (status != AE_CTRL_TERMINATE) { | ||
| 1609 | ret = -EINVAL; | 1615 | ret = -EINVAL; |
| 1610 | goto err_alloc; | 1616 | goto err_alloc; |
| 1617 | } | ||
| 1611 | } | 1618 | } |
| 1612 | 1619 | ||
| 1613 | if (acpi_is_boot_ec(ec)) { | 1620 | if (acpi_is_boot_ec(ec)) { |
| 1614 | boot_ec_is_ecdt = false; | 1621 | boot_ec_is_ecdt = is_ecdt; |
| 1615 | /* | 1622 | if (!is_ecdt) { |
| 1616 | * Trust PNP0C09 namespace location rather than ECDT ID. | 1623 | /* |
| 1617 | * | 1624 | * Trust PNP0C09 namespace location rather than |
| 1618 | * But trust ECDT GPE rather than _GPE because of ASUS quirks, | 1625 | * ECDT ID. But trust ECDT GPE rather than _GPE |
| 1619 | * so do not change boot_ec->gpe to ec->gpe. | 1626 | * because of ASUS quirks, so do not change |
| 1620 | */ | 1627 | * boot_ec->gpe to ec->gpe. |
| 1621 | boot_ec->handle = ec->handle; | 1628 | */ |
| 1622 | acpi_handle_debug(ec->handle, "duplicated.\n"); | 1629 | boot_ec->handle = ec->handle; |
| 1623 | acpi_ec_free(ec); | 1630 | acpi_handle_debug(ec->handle, "duplicated.\n"); |
| 1624 | ec = boot_ec; | 1631 | acpi_ec_free(ec); |
| 1625 | ret = acpi_config_boot_ec(ec, ec->handle, true, false); | 1632 | ec = boot_ec; |
| 1633 | } | ||
| 1634 | ret = acpi_config_boot_ec(ec, ec->handle, true, is_ecdt); | ||
| 1626 | } else | 1635 | } else |
| 1627 | ret = acpi_ec_setup(ec, true); | 1636 | ret = acpi_ec_setup(ec, true); |
| 1628 | if (ret) | 1637 | if (ret) |
| @@ -1635,8 +1644,10 @@ static int acpi_ec_add(struct acpi_device *device) | |||
| 1635 | ret = !!request_region(ec->command_addr, 1, "EC cmd"); | 1644 | ret = !!request_region(ec->command_addr, 1, "EC cmd"); |
| 1636 | WARN(!ret, "Could not request EC cmd io port 0x%lx", ec->command_addr); | 1645 | WARN(!ret, "Could not request EC cmd io port 0x%lx", ec->command_addr); |
| 1637 | 1646 | ||
| 1638 | /* Reprobe devices depending on the EC */ | 1647 | if (!is_ecdt) { |
| 1639 | acpi_walk_dep_device_list(ec->handle); | 1648 | /* Reprobe devices depending on the EC */ |
| 1649 | acpi_walk_dep_device_list(ec->handle); | ||
| 1650 | } | ||
| 1640 | acpi_handle_debug(ec->handle, "enumerated.\n"); | 1651 | acpi_handle_debug(ec->handle, "enumerated.\n"); |
| 1641 | return 0; | 1652 | return 0; |
| 1642 | 1653 | ||
| @@ -1692,6 +1703,7 @@ ec_parse_io_ports(struct acpi_resource *resource, void *context) | |||
| 1692 | 1703 | ||
| 1693 | static const struct acpi_device_id ec_device_ids[] = { | 1704 | static const struct acpi_device_id ec_device_ids[] = { |
| 1694 | {"PNP0C09", 0}, | 1705 | {"PNP0C09", 0}, |
| 1706 | {ACPI_ECDT_HID, 0}, | ||
| 1695 | {"", 0}, | 1707 | {"", 0}, |
| 1696 | }; | 1708 | }; |
| 1697 | 1709 | ||
| @@ -1764,11 +1776,14 @@ static int __init acpi_ec_ecdt_start(void) | |||
| 1764 | * Note: ec->handle can be valid if this function is called after | 1776 | * Note: ec->handle can be valid if this function is called after |
| 1765 | * acpi_ec_add(), hence the fast path. | 1777 | * acpi_ec_add(), hence the fast path. |
| 1766 | */ | 1778 | */ |
| 1767 | if (boot_ec->handle != ACPI_ROOT_OBJECT) | 1779 | if (boot_ec->handle == ACPI_ROOT_OBJECT) { |
| 1768 | handle = boot_ec->handle; | 1780 | if (!acpi_ec_ecdt_get_handle(&handle)) |
| 1769 | else if (!acpi_ec_ecdt_get_handle(&handle)) | 1781 | return -ENODEV; |
| 1770 | return -ENODEV; | 1782 | boot_ec->handle = handle; |
| 1771 | return acpi_config_boot_ec(boot_ec, handle, true, true); | 1783 | } |
| 1784 | |||
| 1785 | /* Register to ACPI bus with PM ops attached */ | ||
| 1786 | return acpi_bus_register_early_device(ACPI_BUS_TYPE_ECDT_EC); | ||
| 1772 | } | 1787 | } |
| 1773 | 1788 | ||
| 1774 | #if 0 | 1789 | #if 0 |
| @@ -2022,6 +2037,12 @@ int __init acpi_ec_init(void) | |||
| 2022 | 2037 | ||
| 2023 | /* Drivers must be started after acpi_ec_query_init() */ | 2038 | /* Drivers must be started after acpi_ec_query_init() */ |
| 2024 | dsdt_fail = acpi_bus_register_driver(&acpi_ec_driver); | 2039 | dsdt_fail = acpi_bus_register_driver(&acpi_ec_driver); |
| 2040 | /* | ||
| 2041 | * Register ECDT to ACPI bus only when PNP0C09 probe fails. This is | ||
| 2042 | * useful for platforms (confirmed on ASUS X550ZE) with valid ECDT | ||
| 2043 | * settings but invalid DSDT settings. | ||
| 2044 | * https://bugzilla.kernel.org/show_bug.cgi?id=196847 | ||
| 2045 | */ | ||
| 2025 | ecdt_fail = acpi_ec_ecdt_start(); | 2046 | ecdt_fail = acpi_ec_ecdt_start(); |
| 2026 | return ecdt_fail && dsdt_fail ? -ENODEV : 0; | 2047 | return ecdt_fail && dsdt_fail ? -ENODEV : 0; |
| 2027 | } | 2048 | } |
diff --git a/drivers/acpi/internal.h b/drivers/acpi/internal.h index fc8c43e76707..7f43423de43c 100644 --- a/drivers/acpi/internal.h +++ b/drivers/acpi/internal.h | |||
| @@ -115,6 +115,7 @@ bool acpi_device_is_present(const struct acpi_device *adev); | |||
| 115 | bool acpi_device_is_battery(struct acpi_device *adev); | 115 | bool acpi_device_is_battery(struct acpi_device *adev); |
| 116 | bool acpi_device_is_first_physical_node(struct acpi_device *adev, | 116 | bool acpi_device_is_first_physical_node(struct acpi_device *adev, |
| 117 | const struct device *dev); | 117 | const struct device *dev); |
| 118 | int acpi_bus_register_early_device(int type); | ||
| 118 | 119 | ||
| 119 | /* -------------------------------------------------------------------------- | 120 | /* -------------------------------------------------------------------------- |
| 120 | Device Matching and Notification | 121 | Device Matching and Notification |
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c index e14e964bfe6d..b0fe5272c76a 100644 --- a/drivers/acpi/scan.c +++ b/drivers/acpi/scan.c | |||
| @@ -1024,6 +1024,9 @@ static void acpi_device_get_busid(struct acpi_device *device) | |||
| 1024 | case ACPI_BUS_TYPE_SLEEP_BUTTON: | 1024 | case ACPI_BUS_TYPE_SLEEP_BUTTON: |
| 1025 | strcpy(device->pnp.bus_id, "SLPF"); | 1025 | strcpy(device->pnp.bus_id, "SLPF"); |
| 1026 | break; | 1026 | break; |
| 1027 | case ACPI_BUS_TYPE_ECDT_EC: | ||
| 1028 | strcpy(device->pnp.bus_id, "ECDT"); | ||
| 1029 | break; | ||
| 1027 | default: | 1030 | default: |
| 1028 | acpi_get_name(device->handle, ACPI_SINGLE_NAME, &buffer); | 1031 | acpi_get_name(device->handle, ACPI_SINGLE_NAME, &buffer); |
| 1029 | /* Clean up trailing underscores (if any) */ | 1032 | /* Clean up trailing underscores (if any) */ |
| @@ -1304,6 +1307,9 @@ static void acpi_set_pnp_ids(acpi_handle handle, struct acpi_device_pnp *pnp, | |||
| 1304 | case ACPI_BUS_TYPE_SLEEP_BUTTON: | 1307 | case ACPI_BUS_TYPE_SLEEP_BUTTON: |
| 1305 | acpi_add_id(pnp, ACPI_BUTTON_HID_SLEEPF); | 1308 | acpi_add_id(pnp, ACPI_BUTTON_HID_SLEEPF); |
| 1306 | break; | 1309 | break; |
| 1310 | case ACPI_BUS_TYPE_ECDT_EC: | ||
| 1311 | acpi_add_id(pnp, ACPI_ECDT_HID); | ||
| 1312 | break; | ||
| 1307 | } | 1313 | } |
| 1308 | } | 1314 | } |
| 1309 | 1315 | ||
| @@ -2046,6 +2052,21 @@ void acpi_bus_trim(struct acpi_device *adev) | |||
| 2046 | } | 2052 | } |
| 2047 | EXPORT_SYMBOL_GPL(acpi_bus_trim); | 2053 | EXPORT_SYMBOL_GPL(acpi_bus_trim); |
| 2048 | 2054 | ||
| 2055 | int acpi_bus_register_early_device(int type) | ||
| 2056 | { | ||
| 2057 | struct acpi_device *device = NULL; | ||
| 2058 | int result; | ||
| 2059 | |||
| 2060 | result = acpi_add_single_object(&device, NULL, | ||
| 2061 | type, ACPI_STA_DEFAULT); | ||
| 2062 | if (result) | ||
| 2063 | return result; | ||
| 2064 | |||
| 2065 | device->flags.match_driver = true; | ||
| 2066 | return device_attach(&device->dev); | ||
| 2067 | } | ||
| 2068 | EXPORT_SYMBOL_GPL(acpi_bus_register_early_device); | ||
| 2069 | |||
| 2049 | static int acpi_bus_scan_fixed(void) | 2070 | static int acpi_bus_scan_fixed(void) |
| 2050 | { | 2071 | { |
| 2051 | int result = 0; | 2072 | int result = 0; |
diff --git a/drivers/android/binder.c b/drivers/android/binder.c index a73596a4f804..bccec9de0533 100644 --- a/drivers/android/binder.c +++ b/drivers/android/binder.c | |||
| @@ -1948,6 +1948,26 @@ static void binder_send_failed_reply(struct binder_transaction *t, | |||
| 1948 | } | 1948 | } |
| 1949 | 1949 | ||
| 1950 | /** | 1950 | /** |
| 1951 | * binder_cleanup_transaction() - cleans up undelivered transaction | ||
| 1952 | * @t: transaction that needs to be cleaned up | ||
| 1953 | * @reason: reason the transaction wasn't delivered | ||
| 1954 | * @error_code: error to return to caller (if synchronous call) | ||
| 1955 | */ | ||
| 1956 | static void binder_cleanup_transaction(struct binder_transaction *t, | ||
| 1957 | const char *reason, | ||
| 1958 | uint32_t error_code) | ||
| 1959 | { | ||
| 1960 | if (t->buffer->target_node && !(t->flags & TF_ONE_WAY)) { | ||
| 1961 | binder_send_failed_reply(t, error_code); | ||
| 1962 | } else { | ||
| 1963 | binder_debug(BINDER_DEBUG_DEAD_TRANSACTION, | ||
| 1964 | "undelivered transaction %d, %s\n", | ||
| 1965 | t->debug_id, reason); | ||
| 1966 | binder_free_transaction(t); | ||
| 1967 | } | ||
| 1968 | } | ||
| 1969 | |||
| 1970 | /** | ||
| 1951 | * binder_validate_object() - checks for a valid metadata object in a buffer. | 1971 | * binder_validate_object() - checks for a valid metadata object in a buffer. |
| 1952 | * @buffer: binder_buffer that we're parsing. | 1972 | * @buffer: binder_buffer that we're parsing. |
| 1953 | * @offset: offset in the buffer at which to validate an object. | 1973 | * @offset: offset in the buffer at which to validate an object. |
| @@ -4015,12 +4035,20 @@ retry: | |||
| 4015 | if (put_user(cmd, (uint32_t __user *)ptr)) { | 4035 | if (put_user(cmd, (uint32_t __user *)ptr)) { |
| 4016 | if (t_from) | 4036 | if (t_from) |
| 4017 | binder_thread_dec_tmpref(t_from); | 4037 | binder_thread_dec_tmpref(t_from); |
| 4038 | |||
| 4039 | binder_cleanup_transaction(t, "put_user failed", | ||
| 4040 | BR_FAILED_REPLY); | ||
| 4041 | |||
| 4018 | return -EFAULT; | 4042 | return -EFAULT; |
| 4019 | } | 4043 | } |
| 4020 | ptr += sizeof(uint32_t); | 4044 | ptr += sizeof(uint32_t); |
| 4021 | if (copy_to_user(ptr, &tr, sizeof(tr))) { | 4045 | if (copy_to_user(ptr, &tr, sizeof(tr))) { |
| 4022 | if (t_from) | 4046 | if (t_from) |
| 4023 | binder_thread_dec_tmpref(t_from); | 4047 | binder_thread_dec_tmpref(t_from); |
| 4048 | |||
| 4049 | binder_cleanup_transaction(t, "copy_to_user failed", | ||
| 4050 | BR_FAILED_REPLY); | ||
| 4051 | |||
| 4024 | return -EFAULT; | 4052 | return -EFAULT; |
| 4025 | } | 4053 | } |
| 4026 | ptr += sizeof(tr); | 4054 | ptr += sizeof(tr); |
| @@ -4090,15 +4118,9 @@ static void binder_release_work(struct binder_proc *proc, | |||
| 4090 | struct binder_transaction *t; | 4118 | struct binder_transaction *t; |
| 4091 | 4119 | ||
| 4092 | t = container_of(w, struct binder_transaction, work); | 4120 | t = container_of(w, struct binder_transaction, work); |
| 4093 | if (t->buffer->target_node && | 4121 | |
| 4094 | !(t->flags & TF_ONE_WAY)) { | 4122 | binder_cleanup_transaction(t, "process died.", |
| 4095 | binder_send_failed_reply(t, BR_DEAD_REPLY); | 4123 | BR_DEAD_REPLY); |
| 4096 | } else { | ||
| 4097 | binder_debug(BINDER_DEBUG_DEAD_TRANSACTION, | ||
| 4098 | "undelivered transaction %d\n", | ||
| 4099 | t->debug_id); | ||
| 4100 | binder_free_transaction(t); | ||
| 4101 | } | ||
| 4102 | } break; | 4124 | } break; |
| 4103 | case BINDER_WORK_RETURN_ERROR: { | 4125 | case BINDER_WORK_RETURN_ERROR: { |
| 4104 | struct binder_error *e = container_of( | 4126 | struct binder_error *e = container_of( |
diff --git a/drivers/ata/ahci_mtk.c b/drivers/ata/ahci_mtk.c index 80854f71559a..0ae6971c2a4c 100644 --- a/drivers/ata/ahci_mtk.c +++ b/drivers/ata/ahci_mtk.c | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * MeidaTek AHCI SATA driver | 2 | * MediaTek AHCI SATA driver |
| 3 | * | 3 | * |
| 4 | * Copyright (c) 2017 MediaTek Inc. | 4 | * Copyright (c) 2017 MediaTek Inc. |
| 5 | * Author: Ryder Lee <ryder.lee@mediatek.com> | 5 | * Author: Ryder Lee <ryder.lee@mediatek.com> |
| @@ -25,7 +25,7 @@ | |||
| 25 | #include <linux/reset.h> | 25 | #include <linux/reset.h> |
| 26 | #include "ahci.h" | 26 | #include "ahci.h" |
| 27 | 27 | ||
| 28 | #define DRV_NAME "ahci" | 28 | #define DRV_NAME "ahci-mtk" |
| 29 | 29 | ||
| 30 | #define SYS_CFG 0x14 | 30 | #define SYS_CFG 0x14 |
| 31 | #define SYS_CFG_SATA_MSK GENMASK(31, 30) | 31 | #define SYS_CFG_SATA_MSK GENMASK(31, 30) |
| @@ -192,5 +192,5 @@ static struct platform_driver mtk_ahci_driver = { | |||
| 192 | }; | 192 | }; |
| 193 | module_platform_driver(mtk_ahci_driver); | 193 | module_platform_driver(mtk_ahci_driver); |
| 194 | 194 | ||
| 195 | MODULE_DESCRIPTION("MeidaTek SATA AHCI Driver"); | 195 | MODULE_DESCRIPTION("MediaTek SATA AHCI Driver"); |
| 196 | MODULE_LICENSE("GPL v2"); | 196 | MODULE_LICENSE("GPL v2"); |
diff --git a/drivers/ata/ahci_qoriq.c b/drivers/ata/ahci_qoriq.c index b6b0bf76dfc7..2685f28160f7 100644 --- a/drivers/ata/ahci_qoriq.c +++ b/drivers/ata/ahci_qoriq.c | |||
| @@ -35,6 +35,8 @@ | |||
| 35 | 35 | ||
| 36 | /* port register default value */ | 36 | /* port register default value */ |
| 37 | #define AHCI_PORT_PHY_1_CFG 0xa003fffe | 37 | #define AHCI_PORT_PHY_1_CFG 0xa003fffe |
| 38 | #define AHCI_PORT_PHY2_CFG 0x28184d1f | ||
| 39 | #define AHCI_PORT_PHY3_CFG 0x0e081509 | ||
| 38 | #define AHCI_PORT_TRANS_CFG 0x08000029 | 40 | #define AHCI_PORT_TRANS_CFG 0x08000029 |
| 39 | #define AHCI_PORT_AXICC_CFG 0x3fffffff | 41 | #define AHCI_PORT_AXICC_CFG 0x3fffffff |
| 40 | 42 | ||
| @@ -183,6 +185,8 @@ static int ahci_qoriq_phy_init(struct ahci_host_priv *hpriv) | |||
| 183 | writel(readl(qpriv->ecc_addr) | ECC_DIS_ARMV8_CH2, | 185 | writel(readl(qpriv->ecc_addr) | ECC_DIS_ARMV8_CH2, |
| 184 | qpriv->ecc_addr); | 186 | qpriv->ecc_addr); |
| 185 | writel(AHCI_PORT_PHY_1_CFG, reg_base + PORT_PHY1); | 187 | writel(AHCI_PORT_PHY_1_CFG, reg_base + PORT_PHY1); |
| 188 | writel(AHCI_PORT_PHY2_CFG, reg_base + PORT_PHY2); | ||
| 189 | writel(AHCI_PORT_PHY3_CFG, reg_base + PORT_PHY3); | ||
| 186 | writel(AHCI_PORT_TRANS_CFG, reg_base + PORT_TRANS); | 190 | writel(AHCI_PORT_TRANS_CFG, reg_base + PORT_TRANS); |
| 187 | if (qpriv->is_dmacoherent) | 191 | if (qpriv->is_dmacoherent) |
| 188 | writel(AHCI_PORT_AXICC_CFG, reg_base + PORT_AXICC); | 192 | writel(AHCI_PORT_AXICC_CFG, reg_base + PORT_AXICC); |
| @@ -190,6 +194,8 @@ static int ahci_qoriq_phy_init(struct ahci_host_priv *hpriv) | |||
| 190 | 194 | ||
| 191 | case AHCI_LS2080A: | 195 | case AHCI_LS2080A: |
| 192 | writel(AHCI_PORT_PHY_1_CFG, reg_base + PORT_PHY1); | 196 | writel(AHCI_PORT_PHY_1_CFG, reg_base + PORT_PHY1); |
| 197 | writel(AHCI_PORT_PHY2_CFG, reg_base + PORT_PHY2); | ||
| 198 | writel(AHCI_PORT_PHY3_CFG, reg_base + PORT_PHY3); | ||
| 193 | writel(AHCI_PORT_TRANS_CFG, reg_base + PORT_TRANS); | 199 | writel(AHCI_PORT_TRANS_CFG, reg_base + PORT_TRANS); |
| 194 | if (qpriv->is_dmacoherent) | 200 | if (qpriv->is_dmacoherent) |
| 195 | writel(AHCI_PORT_AXICC_CFG, reg_base + PORT_AXICC); | 201 | writel(AHCI_PORT_AXICC_CFG, reg_base + PORT_AXICC); |
| @@ -201,6 +207,8 @@ static int ahci_qoriq_phy_init(struct ahci_host_priv *hpriv) | |||
| 201 | writel(readl(qpriv->ecc_addr) | ECC_DIS_ARMV8_CH2, | 207 | writel(readl(qpriv->ecc_addr) | ECC_DIS_ARMV8_CH2, |
| 202 | qpriv->ecc_addr); | 208 | qpriv->ecc_addr); |
| 203 | writel(AHCI_PORT_PHY_1_CFG, reg_base + PORT_PHY1); | 209 | writel(AHCI_PORT_PHY_1_CFG, reg_base + PORT_PHY1); |
| 210 | writel(AHCI_PORT_PHY2_CFG, reg_base + PORT_PHY2); | ||
| 211 | writel(AHCI_PORT_PHY3_CFG, reg_base + PORT_PHY3); | ||
| 204 | writel(AHCI_PORT_TRANS_CFG, reg_base + PORT_TRANS); | 212 | writel(AHCI_PORT_TRANS_CFG, reg_base + PORT_TRANS); |
| 205 | if (qpriv->is_dmacoherent) | 213 | if (qpriv->is_dmacoherent) |
| 206 | writel(AHCI_PORT_AXICC_CFG, reg_base + PORT_AXICC); | 214 | writel(AHCI_PORT_AXICC_CFG, reg_base + PORT_AXICC); |
| @@ -212,6 +220,8 @@ static int ahci_qoriq_phy_init(struct ahci_host_priv *hpriv) | |||
| 212 | writel(readl(qpriv->ecc_addr) | ECC_DIS_LS1088A, | 220 | writel(readl(qpriv->ecc_addr) | ECC_DIS_LS1088A, |
| 213 | qpriv->ecc_addr); | 221 | qpriv->ecc_addr); |
| 214 | writel(AHCI_PORT_PHY_1_CFG, reg_base + PORT_PHY1); | 222 | writel(AHCI_PORT_PHY_1_CFG, reg_base + PORT_PHY1); |
| 223 | writel(AHCI_PORT_PHY2_CFG, reg_base + PORT_PHY2); | ||
| 224 | writel(AHCI_PORT_PHY3_CFG, reg_base + PORT_PHY3); | ||
| 215 | writel(AHCI_PORT_TRANS_CFG, reg_base + PORT_TRANS); | 225 | writel(AHCI_PORT_TRANS_CFG, reg_base + PORT_TRANS); |
| 216 | if (qpriv->is_dmacoherent) | 226 | if (qpriv->is_dmacoherent) |
| 217 | writel(AHCI_PORT_AXICC_CFG, reg_base + PORT_AXICC); | 227 | writel(AHCI_PORT_AXICC_CFG, reg_base + PORT_AXICC); |
| @@ -219,6 +229,8 @@ static int ahci_qoriq_phy_init(struct ahci_host_priv *hpriv) | |||
| 219 | 229 | ||
| 220 | case AHCI_LS2088A: | 230 | case AHCI_LS2088A: |
| 221 | writel(AHCI_PORT_PHY_1_CFG, reg_base + PORT_PHY1); | 231 | writel(AHCI_PORT_PHY_1_CFG, reg_base + PORT_PHY1); |
| 232 | writel(AHCI_PORT_PHY2_CFG, reg_base + PORT_PHY2); | ||
| 233 | writel(AHCI_PORT_PHY3_CFG, reg_base + PORT_PHY3); | ||
| 222 | writel(AHCI_PORT_TRANS_CFG, reg_base + PORT_TRANS); | 234 | writel(AHCI_PORT_TRANS_CFG, reg_base + PORT_TRANS); |
| 223 | if (qpriv->is_dmacoherent) | 235 | if (qpriv->is_dmacoherent) |
| 224 | writel(AHCI_PORT_AXICC_CFG, reg_base + PORT_AXICC); | 236 | writel(AHCI_PORT_AXICC_CFG, reg_base + PORT_AXICC); |
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 2a882929de4a..8193b38a1cae 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c | |||
| @@ -3082,13 +3082,19 @@ int sata_down_spd_limit(struct ata_link *link, u32 spd_limit) | |||
| 3082 | bit = fls(mask) - 1; | 3082 | bit = fls(mask) - 1; |
| 3083 | mask &= ~(1 << bit); | 3083 | mask &= ~(1 << bit); |
| 3084 | 3084 | ||
| 3085 | /* Mask off all speeds higher than or equal to the current | 3085 | /* |
| 3086 | * one. Force 1.5Gbps if current SPD is not available. | 3086 | * Mask off all speeds higher than or equal to the current one. At |
| 3087 | * this point, if current SPD is not available and we previously | ||
| 3088 | * recorded the link speed from SStatus, the driver has already | ||
| 3089 | * masked off the highest bit so mask should already be 1 or 0. | ||
| 3090 | * Otherwise, we should not force 1.5Gbps on a link where we have | ||
| 3091 | * not previously recorded speed from SStatus. Just return in this | ||
| 3092 | * case. | ||
| 3087 | */ | 3093 | */ |
| 3088 | if (spd > 1) | 3094 | if (spd > 1) |
| 3089 | mask &= (1 << (spd - 1)) - 1; | 3095 | mask &= (1 << (spd - 1)) - 1; |
| 3090 | else | 3096 | else |
| 3091 | mask &= 1; | 3097 | return -EINVAL; |
| 3092 | 3098 | ||
| 3093 | /* were we already at the bottom? */ | 3099 | /* were we already at the bottom? */ |
| 3094 | if (!mask) | 3100 | if (!mask) |
diff --git a/drivers/ata/pata_pdc2027x.c b/drivers/ata/pata_pdc2027x.c index ffd8d33c6e0f..6db2e34bd52f 100644 --- a/drivers/ata/pata_pdc2027x.c +++ b/drivers/ata/pata_pdc2027x.c | |||
| @@ -82,7 +82,7 @@ static int pdc2027x_set_mode(struct ata_link *link, struct ata_device **r_failed | |||
| 82 | * is issued to the device. However, if the controller clock is 133MHz, | 82 | * is issued to the device. However, if the controller clock is 133MHz, |
| 83 | * the following tables must be used. | 83 | * the following tables must be used. |
| 84 | */ | 84 | */ |
| 85 | static struct pdc2027x_pio_timing { | 85 | static const struct pdc2027x_pio_timing { |
| 86 | u8 value0, value1, value2; | 86 | u8 value0, value1, value2; |
| 87 | } pdc2027x_pio_timing_tbl[] = { | 87 | } pdc2027x_pio_timing_tbl[] = { |
| 88 | { 0xfb, 0x2b, 0xac }, /* PIO mode 0 */ | 88 | { 0xfb, 0x2b, 0xac }, /* PIO mode 0 */ |
| @@ -92,7 +92,7 @@ static struct pdc2027x_pio_timing { | |||
| 92 | { 0x23, 0x09, 0x25 }, /* PIO mode 4, IORDY on, Prefetch off */ | 92 | { 0x23, 0x09, 0x25 }, /* PIO mode 4, IORDY on, Prefetch off */ |
| 93 | }; | 93 | }; |
| 94 | 94 | ||
| 95 | static struct pdc2027x_mdma_timing { | 95 | static const struct pdc2027x_mdma_timing { |
| 96 | u8 value0, value1; | 96 | u8 value0, value1; |
| 97 | } pdc2027x_mdma_timing_tbl[] = { | 97 | } pdc2027x_mdma_timing_tbl[] = { |
| 98 | { 0xdf, 0x5f }, /* MDMA mode 0 */ | 98 | { 0xdf, 0x5f }, /* MDMA mode 0 */ |
| @@ -100,7 +100,7 @@ static struct pdc2027x_mdma_timing { | |||
| 100 | { 0x69, 0x25 }, /* MDMA mode 2 */ | 100 | { 0x69, 0x25 }, /* MDMA mode 2 */ |
| 101 | }; | 101 | }; |
| 102 | 102 | ||
| 103 | static struct pdc2027x_udma_timing { | 103 | static const struct pdc2027x_udma_timing { |
| 104 | u8 value0, value1, value2; | 104 | u8 value0, value1, value2; |
| 105 | } pdc2027x_udma_timing_tbl[] = { | 105 | } pdc2027x_udma_timing_tbl[] = { |
| 106 | { 0x4a, 0x0f, 0xd5 }, /* UDMA mode 0 */ | 106 | { 0x4a, 0x0f, 0xd5 }, /* UDMA mode 0 */ |
| @@ -649,7 +649,7 @@ static long pdc_detect_pll_input_clock(struct ata_host *host) | |||
| 649 | * @host: target ATA host | 649 | * @host: target ATA host |
| 650 | * @board_idx: board identifier | 650 | * @board_idx: board identifier |
| 651 | */ | 651 | */ |
| 652 | static int pdc_hardware_init(struct ata_host *host, unsigned int board_idx) | 652 | static void pdc_hardware_init(struct ata_host *host, unsigned int board_idx) |
| 653 | { | 653 | { |
| 654 | long pll_clock; | 654 | long pll_clock; |
| 655 | 655 | ||
| @@ -665,8 +665,6 @@ static int pdc_hardware_init(struct ata_host *host, unsigned int board_idx) | |||
| 665 | 665 | ||
| 666 | /* Adjust PLL control register */ | 666 | /* Adjust PLL control register */ |
| 667 | pdc_adjust_pll(host, pll_clock, board_idx); | 667 | pdc_adjust_pll(host, pll_clock, board_idx); |
| 668 | |||
| 669 | return 0; | ||
| 670 | } | 668 | } |
| 671 | 669 | ||
| 672 | /** | 670 | /** |
| @@ -753,8 +751,7 @@ static int pdc2027x_init_one(struct pci_dev *pdev, | |||
| 753 | //pci_enable_intx(pdev); | 751 | //pci_enable_intx(pdev); |
| 754 | 752 | ||
| 755 | /* initialize adapter */ | 753 | /* initialize adapter */ |
| 756 | if (pdc_hardware_init(host, board_idx) != 0) | 754 | pdc_hardware_init(host, board_idx); |
| 757 | return -EIO; | ||
| 758 | 755 | ||
| 759 | pci_set_master(pdev); | 756 | pci_set_master(pdev); |
| 760 | return ata_host_activate(host, pdev->irq, ata_bmdma_interrupt, | 757 | return ata_host_activate(host, pdev->irq, ata_bmdma_interrupt, |
| @@ -778,8 +775,7 @@ static int pdc2027x_reinit_one(struct pci_dev *pdev) | |||
| 778 | else | 775 | else |
| 779 | board_idx = PDC_UDMA_133; | 776 | board_idx = PDC_UDMA_133; |
| 780 | 777 | ||
| 781 | if (pdc_hardware_init(host, board_idx)) | 778 | pdc_hardware_init(host, board_idx); |
| 782 | return -EIO; | ||
| 783 | 779 | ||
| 784 | ata_host_resume(host); | 780 | ata_host_resume(host); |
| 785 | return 0; | 781 | return 0; |
diff --git a/drivers/atm/ambassador.c b/drivers/atm/ambassador.c index dd286ad404f8..9287ec958b70 100644 --- a/drivers/atm/ambassador.c +++ b/drivers/atm/ambassador.c | |||
| @@ -2258,7 +2258,7 @@ static int amb_probe(struct pci_dev *pci_dev, | |||
| 2258 | 2258 | ||
| 2259 | PRINTD (DBG_INFO, "registered Madge ATM adapter (no. %d) (%p) at %p", | 2259 | PRINTD (DBG_INFO, "registered Madge ATM adapter (no. %d) (%p) at %p", |
| 2260 | dev->atm_dev->number, dev, dev->atm_dev); | 2260 | dev->atm_dev->number, dev, dev->atm_dev); |
| 2261 | dev->atm_dev->dev_data = (void *) dev; | 2261 | dev->atm_dev->dev_data = (void *) dev; |
| 2262 | 2262 | ||
| 2263 | // register our address | 2263 | // register our address |
| 2264 | amb_esi (dev, dev->atm_dev->esi); | 2264 | amb_esi (dev, dev->atm_dev->esi); |
diff --git a/drivers/atm/fore200e.c b/drivers/atm/fore200e.c index 126855e6cb7d..6ebc4e4820fc 100644 --- a/drivers/atm/fore200e.c +++ b/drivers/atm/fore200e.c | |||
| @@ -3083,8 +3083,8 @@ fore200e_proc_read(struct atm_dev *dev, loff_t* pos, char* page) | |||
| 3083 | ASSERT(fore200e_vcc); | 3083 | ASSERT(fore200e_vcc); |
| 3084 | 3084 | ||
| 3085 | len = sprintf(page, | 3085 | len = sprintf(page, |
| 3086 | " %08x %03d %05d %1d %09lu %05d/%05d %09lu %05d/%05d\n", | 3086 | " %pK %03d %05d %1d %09lu %05d/%05d %09lu %05d/%05d\n", |
| 3087 | (u32)(unsigned long)vcc, | 3087 | vcc, |
| 3088 | vcc->vpi, vcc->vci, fore200e_atm2fore_aal(vcc->qos.aal), | 3088 | vcc->vpi, vcc->vci, fore200e_atm2fore_aal(vcc->qos.aal), |
| 3089 | fore200e_vcc->tx_pdu, | 3089 | fore200e_vcc->tx_pdu, |
| 3090 | fore200e_vcc->tx_min_pdu > 0xFFFF ? 0 : fore200e_vcc->tx_min_pdu, | 3090 | fore200e_vcc->tx_min_pdu > 0xFFFF ? 0 : fore200e_vcc->tx_min_pdu, |
diff --git a/drivers/atm/lanai.c b/drivers/atm/lanai.c index 6664aa50789e..5f8e009b2da1 100644 --- a/drivers/atm/lanai.c +++ b/drivers/atm/lanai.c | |||
| @@ -1586,8 +1586,8 @@ static int service_buffer_allocate(struct lanai_dev *lanai) | |||
| 1586 | lanai->pci); | 1586 | lanai->pci); |
| 1587 | if (unlikely(lanai->service.start == NULL)) | 1587 | if (unlikely(lanai->service.start == NULL)) |
| 1588 | return -ENOMEM; | 1588 | return -ENOMEM; |
| 1589 | DPRINTK("allocated service buffer at 0x%08lX, size %zu(%d)\n", | 1589 | DPRINTK("allocated service buffer at %p, size %zu(%d)\n", |
| 1590 | (unsigned long) lanai->service.start, | 1590 | lanai->service.start, |
| 1591 | lanai_buf_size(&lanai->service), | 1591 | lanai_buf_size(&lanai->service), |
| 1592 | lanai_buf_size_cardorder(&lanai->service)); | 1592 | lanai_buf_size_cardorder(&lanai->service)); |
| 1593 | /* Clear ServWrite register to be safe */ | 1593 | /* Clear ServWrite register to be safe */ |
| @@ -2218,9 +2218,9 @@ static int lanai_dev_open(struct atm_dev *atmdev) | |||
| 2218 | #endif | 2218 | #endif |
| 2219 | memcpy(atmdev->esi, eeprom_mac(lanai), ESI_LEN); | 2219 | memcpy(atmdev->esi, eeprom_mac(lanai), ESI_LEN); |
| 2220 | lanai_timed_poll_start(lanai); | 2220 | lanai_timed_poll_start(lanai); |
| 2221 | printk(KERN_NOTICE DEV_LABEL "(itf %d): rev.%d, base=0x%lx, irq=%u " | 2221 | printk(KERN_NOTICE DEV_LABEL "(itf %d): rev.%d, base=%p, irq=%u " |
| 2222 | "(%pMF)\n", lanai->number, (int) lanai->pci->revision, | 2222 | "(%pMF)\n", lanai->number, (int) lanai->pci->revision, |
| 2223 | (unsigned long) lanai->base, lanai->pci->irq, atmdev->esi); | 2223 | lanai->base, lanai->pci->irq, atmdev->esi); |
| 2224 | printk(KERN_NOTICE DEV_LABEL "(itf %d): LANAI%s, serialno=%u(0x%X), " | 2224 | printk(KERN_NOTICE DEV_LABEL "(itf %d): LANAI%s, serialno=%u(0x%X), " |
| 2225 | "board_rev=%d\n", lanai->number, | 2225 | "board_rev=%d\n", lanai->number, |
| 2226 | lanai->type==lanai2 ? "2" : "HB", (unsigned int) lanai->serialno, | 2226 | lanai->type==lanai2 ? "2" : "HB", (unsigned int) lanai->serialno, |
diff --git a/drivers/atm/suni.c b/drivers/atm/suni.c index b8825f2d79e0..4b044710a8cf 100644 --- a/drivers/atm/suni.c +++ b/drivers/atm/suni.c | |||
| @@ -177,7 +177,7 @@ static int set_loopback(struct atm_dev *dev,int mode) | |||
| 177 | default: | 177 | default: |
| 178 | return -EINVAL; | 178 | return -EINVAL; |
| 179 | } | 179 | } |
| 180 | dev->ops->phy_put(dev, control, reg); | 180 | dev->ops->phy_put(dev, control, reg); |
| 181 | PRIV(dev)->loop_mode = mode; | 181 | PRIV(dev)->loop_mode = mode; |
| 182 | return 0; | 182 | return 0; |
| 183 | } | 183 | } |
diff --git a/drivers/auxdisplay/Kconfig b/drivers/auxdisplay/Kconfig index d7d21118d3e0..2c2ed9cf8796 100644 --- a/drivers/auxdisplay/Kconfig +++ b/drivers/auxdisplay/Kconfig | |||
| @@ -136,6 +136,7 @@ config CFAG12864B_RATE | |||
| 136 | 136 | ||
| 137 | config IMG_ASCII_LCD | 137 | config IMG_ASCII_LCD |
| 138 | tristate "Imagination Technologies ASCII LCD Display" | 138 | tristate "Imagination Technologies ASCII LCD Display" |
| 139 | depends on HAS_IOMEM | ||
| 139 | default y if MIPS_MALTA || MIPS_SEAD3 | 140 | default y if MIPS_MALTA || MIPS_SEAD3 |
| 140 | select SYSCON | 141 | select SYSCON |
| 141 | help | 142 | help |
diff --git a/drivers/base/Kconfig b/drivers/base/Kconfig index 2f6614c9a229..bdc87907d6a1 100644 --- a/drivers/base/Kconfig +++ b/drivers/base/Kconfig | |||
| @@ -91,22 +91,23 @@ config FIRMWARE_IN_KERNEL | |||
| 91 | depends on FW_LOADER | 91 | depends on FW_LOADER |
| 92 | default y | 92 | default y |
| 93 | help | 93 | help |
| 94 | The kernel source tree includes a number of firmware 'blobs' | 94 | Various drivers in the kernel source tree may require firmware, |
| 95 | that are used by various drivers. The recommended way to | 95 | which is generally available in your distribution's linux-firmware |
| 96 | use these is to run "make firmware_install", which, after | 96 | package. |
| 97 | converting ihex files to binary, copies all of the needed | 97 | |
| 98 | binary files in firmware/ to /lib/firmware/ on your system so | 98 | The linux-firmware package should install firmware into |
| 99 | that they can be loaded by userspace helpers on request. | 99 | /lib/firmware/ on your system, so they can be loaded by userspace |
| 100 | helpers on request. | ||
| 100 | 101 | ||
| 101 | Enabling this option will build each required firmware blob | 102 | Enabling this option will build each required firmware blob |
| 102 | into the kernel directly, where request_firmware() will find | 103 | specified by EXTRA_FIRMWARE into the kernel directly, where |
| 103 | them without having to call out to userspace. This may be | 104 | request_firmware() will find them without having to call out to |
| 104 | useful if your root file system requires a device that uses | 105 | userspace. This may be useful if your root file system requires a |
| 105 | such firmware and do not wish to use an initrd. | 106 | device that uses such firmware and you do not wish to use an |
| 107 | initrd. | ||
| 106 | 108 | ||
| 107 | This single option controls the inclusion of firmware for | 109 | This single option controls the inclusion of firmware for |
| 108 | every driver that uses request_firmware() and ships its | 110 | every driver that uses request_firmware(), which avoids a |
| 109 | firmware in the kernel source tree, which avoids a | ||
| 110 | proliferation of 'Include firmware for xxx device' options. | 111 | proliferation of 'Include firmware for xxx device' options. |
| 111 | 112 | ||
| 112 | Say 'N' and let firmware be loaded from userspace. | 113 | Say 'N' and let firmware be loaded from userspace. |
diff --git a/drivers/base/isa.c b/drivers/base/isa.c index cd6ccdcf9df0..372d10af2600 100644 --- a/drivers/base/isa.c +++ b/drivers/base/isa.c | |||
| @@ -39,7 +39,7 @@ static int isa_bus_probe(struct device *dev) | |||
| 39 | { | 39 | { |
| 40 | struct isa_driver *isa_driver = dev->platform_data; | 40 | struct isa_driver *isa_driver = dev->platform_data; |
| 41 | 41 | ||
| 42 | if (isa_driver->probe) | 42 | if (isa_driver && isa_driver->probe) |
| 43 | return isa_driver->probe(dev, to_isa_dev(dev)->id); | 43 | return isa_driver->probe(dev, to_isa_dev(dev)->id); |
| 44 | 44 | ||
| 45 | return 0; | 45 | return 0; |
| @@ -49,7 +49,7 @@ static int isa_bus_remove(struct device *dev) | |||
| 49 | { | 49 | { |
| 50 | struct isa_driver *isa_driver = dev->platform_data; | 50 | struct isa_driver *isa_driver = dev->platform_data; |
| 51 | 51 | ||
| 52 | if (isa_driver->remove) | 52 | if (isa_driver && isa_driver->remove) |
| 53 | return isa_driver->remove(dev, to_isa_dev(dev)->id); | 53 | return isa_driver->remove(dev, to_isa_dev(dev)->id); |
| 54 | 54 | ||
| 55 | return 0; | 55 | return 0; |
| @@ -59,7 +59,7 @@ static void isa_bus_shutdown(struct device *dev) | |||
| 59 | { | 59 | { |
| 60 | struct isa_driver *isa_driver = dev->platform_data; | 60 | struct isa_driver *isa_driver = dev->platform_data; |
| 61 | 61 | ||
| 62 | if (isa_driver->shutdown) | 62 | if (isa_driver && isa_driver->shutdown) |
| 63 | isa_driver->shutdown(dev, to_isa_dev(dev)->id); | 63 | isa_driver->shutdown(dev, to_isa_dev(dev)->id); |
| 64 | } | 64 | } |
| 65 | 65 | ||
| @@ -67,7 +67,7 @@ static int isa_bus_suspend(struct device *dev, pm_message_t state) | |||
| 67 | { | 67 | { |
| 68 | struct isa_driver *isa_driver = dev->platform_data; | 68 | struct isa_driver *isa_driver = dev->platform_data; |
| 69 | 69 | ||
| 70 | if (isa_driver->suspend) | 70 | if (isa_driver && isa_driver->suspend) |
| 71 | return isa_driver->suspend(dev, to_isa_dev(dev)->id, state); | 71 | return isa_driver->suspend(dev, to_isa_dev(dev)->id, state); |
| 72 | 72 | ||
| 73 | return 0; | 73 | return 0; |
| @@ -77,7 +77,7 @@ static int isa_bus_resume(struct device *dev) | |||
| 77 | { | 77 | { |
| 78 | struct isa_driver *isa_driver = dev->platform_data; | 78 | struct isa_driver *isa_driver = dev->platform_data; |
| 79 | 79 | ||
| 80 | if (isa_driver->resume) | 80 | if (isa_driver && isa_driver->resume) |
| 81 | return isa_driver->resume(dev, to_isa_dev(dev)->id); | 81 | return isa_driver->resume(dev, to_isa_dev(dev)->id); |
| 82 | 82 | ||
| 83 | return 0; | 83 | return 0; |
diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c index db2f04415927..08744b572af6 100644 --- a/drivers/base/power/main.c +++ b/drivers/base/power/main.c | |||
| @@ -526,6 +526,21 @@ static void dpm_watchdog_clear(struct dpm_watchdog *wd) | |||
| 526 | /*------------------------- Resume routines -------------------------*/ | 526 | /*------------------------- Resume routines -------------------------*/ |
| 527 | 527 | ||
| 528 | /** | 528 | /** |
| 529 | * dev_pm_skip_next_resume_phases - Skip next system resume phases for device. | ||
| 530 | * @dev: Target device. | ||
| 531 | * | ||
| 532 | * Make the core skip the "early resume" and "resume" phases for @dev. | ||
| 533 | * | ||
| 534 | * This function can be called by middle-layer code during the "noirq" phase of | ||
| 535 | * system resume if necessary, but not by device drivers. | ||
| 536 | */ | ||
| 537 | void dev_pm_skip_next_resume_phases(struct device *dev) | ||
| 538 | { | ||
| 539 | dev->power.is_late_suspended = false; | ||
| 540 | dev->power.is_suspended = false; | ||
| 541 | } | ||
| 542 | |||
| 543 | /** | ||
| 529 | * device_resume_noirq - Execute a "noirq resume" callback for given device. | 544 | * device_resume_noirq - Execute a "noirq resume" callback for given device. |
| 530 | * @dev: Device to handle. | 545 | * @dev: Device to handle. |
| 531 | * @state: PM transition of the system being carried out. | 546 | * @state: PM transition of the system being carried out. |
diff --git a/drivers/base/power/runtime.c b/drivers/base/power/runtime.c index 027d159ac381..6e89b51ea3d9 100644 --- a/drivers/base/power/runtime.c +++ b/drivers/base/power/runtime.c | |||
| @@ -276,7 +276,8 @@ static int rpm_get_suppliers(struct device *dev) | |||
| 276 | continue; | 276 | continue; |
| 277 | 277 | ||
| 278 | retval = pm_runtime_get_sync(link->supplier); | 278 | retval = pm_runtime_get_sync(link->supplier); |
| 279 | if (retval < 0) { | 279 | /* Ignore suppliers with disabled runtime PM. */ |
| 280 | if (retval < 0 && retval != -EACCES) { | ||
| 280 | pm_runtime_put_noidle(link->supplier); | 281 | pm_runtime_put_noidle(link->supplier); |
| 281 | return retval; | 282 | return retval; |
| 282 | } | 283 | } |
diff --git a/drivers/block/null_blk.c b/drivers/block/null_blk.c index c61960deb74a..ccb9975a97fa 100644 --- a/drivers/block/null_blk.c +++ b/drivers/block/null_blk.c | |||
| @@ -471,7 +471,6 @@ static void nullb_device_release(struct config_item *item) | |||
| 471 | { | 471 | { |
| 472 | struct nullb_device *dev = to_nullb_device(item); | 472 | struct nullb_device *dev = to_nullb_device(item); |
| 473 | 473 | ||
| 474 | badblocks_exit(&dev->badblocks); | ||
| 475 | null_free_device_storage(dev, false); | 474 | null_free_device_storage(dev, false); |
| 476 | null_free_dev(dev); | 475 | null_free_dev(dev); |
| 477 | } | 476 | } |
| @@ -582,6 +581,10 @@ static struct nullb_device *null_alloc_dev(void) | |||
| 582 | 581 | ||
| 583 | static void null_free_dev(struct nullb_device *dev) | 582 | static void null_free_dev(struct nullb_device *dev) |
| 584 | { | 583 | { |
| 584 | if (!dev) | ||
| 585 | return; | ||
| 586 | |||
| 587 | badblocks_exit(&dev->badblocks); | ||
| 585 | kfree(dev); | 588 | kfree(dev); |
| 586 | } | 589 | } |
| 587 | 590 | ||
diff --git a/drivers/bus/arm-cci.c b/drivers/bus/arm-cci.c index 3c29d36702a8..5426c04fe24b 100644 --- a/drivers/bus/arm-cci.c +++ b/drivers/bus/arm-cci.c | |||
| @@ -1755,14 +1755,17 @@ static int cci_pmu_probe(struct platform_device *pdev) | |||
| 1755 | raw_spin_lock_init(&cci_pmu->hw_events.pmu_lock); | 1755 | raw_spin_lock_init(&cci_pmu->hw_events.pmu_lock); |
| 1756 | mutex_init(&cci_pmu->reserve_mutex); | 1756 | mutex_init(&cci_pmu->reserve_mutex); |
| 1757 | atomic_set(&cci_pmu->active_events, 0); | 1757 | atomic_set(&cci_pmu->active_events, 0); |
| 1758 | cpumask_set_cpu(smp_processor_id(), &cci_pmu->cpus); | 1758 | cpumask_set_cpu(get_cpu(), &cci_pmu->cpus); |
| 1759 | 1759 | ||
| 1760 | ret = cci_pmu_init(cci_pmu, pdev); | 1760 | ret = cci_pmu_init(cci_pmu, pdev); |
| 1761 | if (ret) | 1761 | if (ret) { |
| 1762 | put_cpu(); | ||
| 1762 | return ret; | 1763 | return ret; |
| 1764 | } | ||
| 1763 | 1765 | ||
| 1764 | cpuhp_state_add_instance_nocalls(CPUHP_AP_PERF_ARM_CCI_ONLINE, | 1766 | cpuhp_state_add_instance_nocalls(CPUHP_AP_PERF_ARM_CCI_ONLINE, |
| 1765 | &cci_pmu->node); | 1767 | &cci_pmu->node); |
| 1768 | put_cpu(); | ||
| 1766 | pr_info("ARM %s PMU driver probed", cci_pmu->model->name); | 1769 | pr_info("ARM %s PMU driver probed", cci_pmu->model->name); |
| 1767 | return 0; | 1770 | return 0; |
| 1768 | } | 1771 | } |
diff --git a/drivers/bus/arm-ccn.c b/drivers/bus/arm-ccn.c index 3063f5312397..b52332e52ca5 100644 --- a/drivers/bus/arm-ccn.c +++ b/drivers/bus/arm-ccn.c | |||
| @@ -262,7 +262,7 @@ static struct attribute *arm_ccn_pmu_format_attrs[] = { | |||
| 262 | NULL | 262 | NULL |
| 263 | }; | 263 | }; |
| 264 | 264 | ||
| 265 | static struct attribute_group arm_ccn_pmu_format_attr_group = { | 265 | static const struct attribute_group arm_ccn_pmu_format_attr_group = { |
| 266 | .name = "format", | 266 | .name = "format", |
| 267 | .attrs = arm_ccn_pmu_format_attrs, | 267 | .attrs = arm_ccn_pmu_format_attrs, |
| 268 | }; | 268 | }; |
| @@ -451,7 +451,7 @@ static struct arm_ccn_pmu_event arm_ccn_pmu_events[] = { | |||
| 451 | static struct attribute | 451 | static struct attribute |
| 452 | *arm_ccn_pmu_events_attrs[ARRAY_SIZE(arm_ccn_pmu_events) + 1]; | 452 | *arm_ccn_pmu_events_attrs[ARRAY_SIZE(arm_ccn_pmu_events) + 1]; |
| 453 | 453 | ||
| 454 | static struct attribute_group arm_ccn_pmu_events_attr_group = { | 454 | static const struct attribute_group arm_ccn_pmu_events_attr_group = { |
| 455 | .name = "events", | 455 | .name = "events", |
| 456 | .is_visible = arm_ccn_pmu_events_is_visible, | 456 | .is_visible = arm_ccn_pmu_events_is_visible, |
| 457 | .attrs = arm_ccn_pmu_events_attrs, | 457 | .attrs = arm_ccn_pmu_events_attrs, |
| @@ -548,7 +548,7 @@ static struct attribute *arm_ccn_pmu_cmp_mask_attrs[] = { | |||
| 548 | NULL | 548 | NULL |
| 549 | }; | 549 | }; |
| 550 | 550 | ||
| 551 | static struct attribute_group arm_ccn_pmu_cmp_mask_attr_group = { | 551 | static const struct attribute_group arm_ccn_pmu_cmp_mask_attr_group = { |
| 552 | .name = "cmp_mask", | 552 | .name = "cmp_mask", |
| 553 | .attrs = arm_ccn_pmu_cmp_mask_attrs, | 553 | .attrs = arm_ccn_pmu_cmp_mask_attrs, |
| 554 | }; | 554 | }; |
| @@ -569,7 +569,7 @@ static struct attribute *arm_ccn_pmu_cpumask_attrs[] = { | |||
| 569 | NULL, | 569 | NULL, |
| 570 | }; | 570 | }; |
| 571 | 571 | ||
| 572 | static struct attribute_group arm_ccn_pmu_cpumask_attr_group = { | 572 | static const struct attribute_group arm_ccn_pmu_cpumask_attr_group = { |
| 573 | .attrs = arm_ccn_pmu_cpumask_attrs, | 573 | .attrs = arm_ccn_pmu_cpumask_attrs, |
| 574 | }; | 574 | }; |
| 575 | 575 | ||
| @@ -1268,10 +1268,12 @@ static int arm_ccn_pmu_init(struct arm_ccn *ccn) | |||
| 1268 | if (ccn->dt.id == 0) { | 1268 | if (ccn->dt.id == 0) { |
| 1269 | name = "ccn"; | 1269 | name = "ccn"; |
| 1270 | } else { | 1270 | } else { |
| 1271 | int len = snprintf(NULL, 0, "ccn_%d", ccn->dt.id); | 1271 | name = devm_kasprintf(ccn->dev, GFP_KERNEL, "ccn_%d", |
| 1272 | 1272 | ccn->dt.id); | |
| 1273 | name = devm_kzalloc(ccn->dev, len + 1, GFP_KERNEL); | 1273 | if (!name) { |
| 1274 | snprintf(name, len + 1, "ccn_%d", ccn->dt.id); | 1274 | err = -ENOMEM; |
| 1275 | goto error_choose_name; | ||
| 1276 | } | ||
| 1275 | } | 1277 | } |
| 1276 | 1278 | ||
| 1277 | /* Perf driver registration */ | 1279 | /* Perf driver registration */ |
| @@ -1298,7 +1300,7 @@ static int arm_ccn_pmu_init(struct arm_ccn *ccn) | |||
| 1298 | } | 1300 | } |
| 1299 | 1301 | ||
| 1300 | /* Pick one CPU which we will use to collect data from CCN... */ | 1302 | /* Pick one CPU which we will use to collect data from CCN... */ |
| 1301 | cpumask_set_cpu(smp_processor_id(), &ccn->dt.cpu); | 1303 | cpumask_set_cpu(get_cpu(), &ccn->dt.cpu); |
| 1302 | 1304 | ||
| 1303 | /* Also make sure that the overflow interrupt is handled by this CPU */ | 1305 | /* Also make sure that the overflow interrupt is handled by this CPU */ |
| 1304 | if (ccn->irq) { | 1306 | if (ccn->irq) { |
| @@ -1315,10 +1317,13 @@ static int arm_ccn_pmu_init(struct arm_ccn *ccn) | |||
| 1315 | 1317 | ||
| 1316 | cpuhp_state_add_instance_nocalls(CPUHP_AP_PERF_ARM_CCN_ONLINE, | 1318 | cpuhp_state_add_instance_nocalls(CPUHP_AP_PERF_ARM_CCN_ONLINE, |
| 1317 | &ccn->dt.node); | 1319 | &ccn->dt.node); |
| 1320 | put_cpu(); | ||
| 1318 | return 0; | 1321 | return 0; |
| 1319 | 1322 | ||
| 1320 | error_pmu_register: | 1323 | error_pmu_register: |
| 1321 | error_set_affinity: | 1324 | error_set_affinity: |
| 1325 | put_cpu(); | ||
| 1326 | error_choose_name: | ||
| 1322 | ida_simple_remove(&arm_ccn_pmu_ida, ccn->dt.id); | 1327 | ida_simple_remove(&arm_ccn_pmu_ida, ccn->dt.id); |
| 1323 | for (i = 0; i < ccn->num_xps; i++) | 1328 | for (i = 0; i < ccn->num_xps; i++) |
| 1324 | writel(0, ccn->xp[i].base + CCN_XP_DT_CONTROL); | 1329 | writel(0, ccn->xp[i].base + CCN_XP_DT_CONTROL); |
| @@ -1581,8 +1586,8 @@ static int __init arm_ccn_init(void) | |||
| 1581 | 1586 | ||
| 1582 | static void __exit arm_ccn_exit(void) | 1587 | static void __exit arm_ccn_exit(void) |
| 1583 | { | 1588 | { |
| 1584 | cpuhp_remove_multi_state(CPUHP_AP_PERF_ARM_CCN_ONLINE); | ||
| 1585 | platform_driver_unregister(&arm_ccn_driver); | 1589 | platform_driver_unregister(&arm_ccn_driver); |
| 1590 | cpuhp_remove_multi_state(CPUHP_AP_PERF_ARM_CCN_ONLINE); | ||
| 1586 | } | 1591 | } |
| 1587 | 1592 | ||
| 1588 | module_init(arm_ccn_init); | 1593 | module_init(arm_ccn_init); |
diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c index 779869ed32b1..71fad747c0c7 100644 --- a/drivers/char/ipmi/ipmi_si_intf.c +++ b/drivers/char/ipmi/ipmi_si_intf.c | |||
| @@ -199,6 +199,9 @@ struct smi_info { | |||
| 199 | /* The timer for this si. */ | 199 | /* The timer for this si. */ |
| 200 | struct timer_list si_timer; | 200 | struct timer_list si_timer; |
| 201 | 201 | ||
| 202 | /* This flag is set, if the timer can be set */ | ||
| 203 | bool timer_can_start; | ||
| 204 | |||
| 202 | /* This flag is set, if the timer is running (timer_pending() isn't enough) */ | 205 | /* This flag is set, if the timer is running (timer_pending() isn't enough) */ |
| 203 | bool timer_running; | 206 | bool timer_running; |
| 204 | 207 | ||
| @@ -355,6 +358,8 @@ out: | |||
| 355 | 358 | ||
| 356 | static void smi_mod_timer(struct smi_info *smi_info, unsigned long new_val) | 359 | static void smi_mod_timer(struct smi_info *smi_info, unsigned long new_val) |
| 357 | { | 360 | { |
| 361 | if (!smi_info->timer_can_start) | ||
| 362 | return; | ||
| 358 | smi_info->last_timeout_jiffies = jiffies; | 363 | smi_info->last_timeout_jiffies = jiffies; |
| 359 | mod_timer(&smi_info->si_timer, new_val); | 364 | mod_timer(&smi_info->si_timer, new_val); |
| 360 | smi_info->timer_running = true; | 365 | smi_info->timer_running = true; |
| @@ -374,21 +379,18 @@ static void start_new_msg(struct smi_info *smi_info, unsigned char *msg, | |||
| 374 | smi_info->handlers->start_transaction(smi_info->si_sm, msg, size); | 379 | smi_info->handlers->start_transaction(smi_info->si_sm, msg, size); |
| 375 | } | 380 | } |
| 376 | 381 | ||
| 377 | static void start_check_enables(struct smi_info *smi_info, bool start_timer) | 382 | static void start_check_enables(struct smi_info *smi_info) |
| 378 | { | 383 | { |
| 379 | unsigned char msg[2]; | 384 | unsigned char msg[2]; |
| 380 | 385 | ||
| 381 | msg[0] = (IPMI_NETFN_APP_REQUEST << 2); | 386 | msg[0] = (IPMI_NETFN_APP_REQUEST << 2); |
| 382 | msg[1] = IPMI_GET_BMC_GLOBAL_ENABLES_CMD; | 387 | msg[1] = IPMI_GET_BMC_GLOBAL_ENABLES_CMD; |
| 383 | 388 | ||
| 384 | if (start_timer) | 389 | start_new_msg(smi_info, msg, 2); |
| 385 | start_new_msg(smi_info, msg, 2); | ||
| 386 | else | ||
| 387 | smi_info->handlers->start_transaction(smi_info->si_sm, msg, 2); | ||
| 388 | smi_info->si_state = SI_CHECKING_ENABLES; | 390 | smi_info->si_state = SI_CHECKING_ENABLES; |
| 389 | } | 391 | } |
| 390 | 392 | ||
| 391 | static void start_clear_flags(struct smi_info *smi_info, bool start_timer) | 393 | static void start_clear_flags(struct smi_info *smi_info) |
| 392 | { | 394 | { |
| 393 | unsigned char msg[3]; | 395 | unsigned char msg[3]; |
| 394 | 396 | ||
| @@ -397,10 +399,7 @@ static void start_clear_flags(struct smi_info *smi_info, bool start_timer) | |||
| 397 | msg[1] = IPMI_CLEAR_MSG_FLAGS_CMD; | 399 | msg[1] = IPMI_CLEAR_MSG_FLAGS_CMD; |
| 398 | msg[2] = WDT_PRE_TIMEOUT_INT; | 400 | msg[2] = WDT_PRE_TIMEOUT_INT; |
| 399 | 401 | ||
| 400 | if (start_timer) | 402 | start_new_msg(smi_info, msg, 3); |
| 401 | start_new_msg(smi_info, msg, 3); | ||
| 402 | else | ||
| 403 | smi_info->handlers->start_transaction(smi_info->si_sm, msg, 3); | ||
| 404 | smi_info->si_state = SI_CLEARING_FLAGS; | 403 | smi_info->si_state = SI_CLEARING_FLAGS; |
| 405 | } | 404 | } |
| 406 | 405 | ||
| @@ -435,11 +434,11 @@ static void start_getting_events(struct smi_info *smi_info) | |||
| 435 | * Note that we cannot just use disable_irq(), since the interrupt may | 434 | * Note that we cannot just use disable_irq(), since the interrupt may |
| 436 | * be shared. | 435 | * be shared. |
| 437 | */ | 436 | */ |
| 438 | static inline bool disable_si_irq(struct smi_info *smi_info, bool start_timer) | 437 | static inline bool disable_si_irq(struct smi_info *smi_info) |
| 439 | { | 438 | { |
| 440 | if ((smi_info->io.irq) && (!smi_info->interrupt_disabled)) { | 439 | if ((smi_info->io.irq) && (!smi_info->interrupt_disabled)) { |
| 441 | smi_info->interrupt_disabled = true; | 440 | smi_info->interrupt_disabled = true; |
| 442 | start_check_enables(smi_info, start_timer); | 441 | start_check_enables(smi_info); |
| 443 | return true; | 442 | return true; |
| 444 | } | 443 | } |
| 445 | return false; | 444 | return false; |
| @@ -449,7 +448,7 @@ static inline bool enable_si_irq(struct smi_info *smi_info) | |||
| 449 | { | 448 | { |
| 450 | if ((smi_info->io.irq) && (smi_info->interrupt_disabled)) { | 449 | if ((smi_info->io.irq) && (smi_info->interrupt_disabled)) { |
| 451 | smi_info->interrupt_disabled = false; | 450 | smi_info->interrupt_disabled = false; |
| 452 | start_check_enables(smi_info, true); | 451 | start_check_enables(smi_info); |
| 453 | return true; | 452 | return true; |
| 454 | } | 453 | } |
| 455 | return false; | 454 | return false; |
| @@ -467,7 +466,7 @@ static struct ipmi_smi_msg *alloc_msg_handle_irq(struct smi_info *smi_info) | |||
| 467 | 466 | ||
| 468 | msg = ipmi_alloc_smi_msg(); | 467 | msg = ipmi_alloc_smi_msg(); |
| 469 | if (!msg) { | 468 | if (!msg) { |
| 470 | if (!disable_si_irq(smi_info, true)) | 469 | if (!disable_si_irq(smi_info)) |
| 471 | smi_info->si_state = SI_NORMAL; | 470 | smi_info->si_state = SI_NORMAL; |
| 472 | } else if (enable_si_irq(smi_info)) { | 471 | } else if (enable_si_irq(smi_info)) { |
| 473 | ipmi_free_smi_msg(msg); | 472 | ipmi_free_smi_msg(msg); |
| @@ -483,7 +482,7 @@ retry: | |||
| 483 | /* Watchdog pre-timeout */ | 482 | /* Watchdog pre-timeout */ |
| 484 | smi_inc_stat(smi_info, watchdog_pretimeouts); | 483 | smi_inc_stat(smi_info, watchdog_pretimeouts); |
| 485 | 484 | ||
| 486 | start_clear_flags(smi_info, true); | 485 | start_clear_flags(smi_info); |
| 487 | smi_info->msg_flags &= ~WDT_PRE_TIMEOUT_INT; | 486 | smi_info->msg_flags &= ~WDT_PRE_TIMEOUT_INT; |
| 488 | if (smi_info->intf) | 487 | if (smi_info->intf) |
| 489 | ipmi_smi_watchdog_pretimeout(smi_info->intf); | 488 | ipmi_smi_watchdog_pretimeout(smi_info->intf); |
| @@ -866,7 +865,7 @@ restart: | |||
| 866 | * disable and messages disabled. | 865 | * disable and messages disabled. |
| 867 | */ | 866 | */ |
| 868 | if (smi_info->supports_event_msg_buff || smi_info->io.irq) { | 867 | if (smi_info->supports_event_msg_buff || smi_info->io.irq) { |
| 869 | start_check_enables(smi_info, true); | 868 | start_check_enables(smi_info); |
| 870 | } else { | 869 | } else { |
| 871 | smi_info->curr_msg = alloc_msg_handle_irq(smi_info); | 870 | smi_info->curr_msg = alloc_msg_handle_irq(smi_info); |
| 872 | if (!smi_info->curr_msg) | 871 | if (!smi_info->curr_msg) |
| @@ -1167,6 +1166,7 @@ static int smi_start_processing(void *send_info, | |||
| 1167 | 1166 | ||
| 1168 | /* Set up the timer that drives the interface. */ | 1167 | /* Set up the timer that drives the interface. */ |
| 1169 | timer_setup(&new_smi->si_timer, smi_timeout, 0); | 1168 | timer_setup(&new_smi->si_timer, smi_timeout, 0); |
| 1169 | new_smi->timer_can_start = true; | ||
| 1170 | smi_mod_timer(new_smi, jiffies + SI_TIMEOUT_JIFFIES); | 1170 | smi_mod_timer(new_smi, jiffies + SI_TIMEOUT_JIFFIES); |
| 1171 | 1171 | ||
| 1172 | /* Try to claim any interrupts. */ | 1172 | /* Try to claim any interrupts. */ |
| @@ -1936,10 +1936,12 @@ static void check_for_broken_irqs(struct smi_info *smi_info) | |||
| 1936 | check_set_rcv_irq(smi_info); | 1936 | check_set_rcv_irq(smi_info); |
| 1937 | } | 1937 | } |
| 1938 | 1938 | ||
| 1939 | static inline void wait_for_timer_and_thread(struct smi_info *smi_info) | 1939 | static inline void stop_timer_and_thread(struct smi_info *smi_info) |
| 1940 | { | 1940 | { |
| 1941 | if (smi_info->thread != NULL) | 1941 | if (smi_info->thread != NULL) |
| 1942 | kthread_stop(smi_info->thread); | 1942 | kthread_stop(smi_info->thread); |
| 1943 | |||
| 1944 | smi_info->timer_can_start = false; | ||
| 1943 | if (smi_info->timer_running) | 1945 | if (smi_info->timer_running) |
| 1944 | del_timer_sync(&smi_info->si_timer); | 1946 | del_timer_sync(&smi_info->si_timer); |
| 1945 | } | 1947 | } |
| @@ -2152,7 +2154,7 @@ static int try_smi_init(struct smi_info *new_smi) | |||
| 2152 | * Start clearing the flags before we enable interrupts or the | 2154 | * Start clearing the flags before we enable interrupts or the |
| 2153 | * timer to avoid racing with the timer. | 2155 | * timer to avoid racing with the timer. |
| 2154 | */ | 2156 | */ |
| 2155 | start_clear_flags(new_smi, false); | 2157 | start_clear_flags(new_smi); |
| 2156 | 2158 | ||
| 2157 | /* | 2159 | /* |
| 2158 | * IRQ is defined to be set when non-zero. req_events will | 2160 | * IRQ is defined to be set when non-zero. req_events will |
| @@ -2238,7 +2240,7 @@ out_err_remove_attrs: | |||
| 2238 | dev_set_drvdata(new_smi->io.dev, NULL); | 2240 | dev_set_drvdata(new_smi->io.dev, NULL); |
| 2239 | 2241 | ||
| 2240 | out_err_stop_timer: | 2242 | out_err_stop_timer: |
| 2241 | wait_for_timer_and_thread(new_smi); | 2243 | stop_timer_and_thread(new_smi); |
| 2242 | 2244 | ||
| 2243 | out_err: | 2245 | out_err: |
| 2244 | new_smi->interrupt_disabled = true; | 2246 | new_smi->interrupt_disabled = true; |
| @@ -2388,7 +2390,7 @@ static void cleanup_one_si(struct smi_info *to_clean) | |||
| 2388 | */ | 2390 | */ |
| 2389 | if (to_clean->io.irq_cleanup) | 2391 | if (to_clean->io.irq_cleanup) |
| 2390 | to_clean->io.irq_cleanup(&to_clean->io); | 2392 | to_clean->io.irq_cleanup(&to_clean->io); |
| 2391 | wait_for_timer_and_thread(to_clean); | 2393 | stop_timer_and_thread(to_clean); |
| 2392 | 2394 | ||
| 2393 | /* | 2395 | /* |
| 2394 | * Timeouts are stopped, now make sure the interrupts are off | 2396 | * Timeouts are stopped, now make sure the interrupts are off |
| @@ -2400,7 +2402,7 @@ static void cleanup_one_si(struct smi_info *to_clean) | |||
| 2400 | schedule_timeout_uninterruptible(1); | 2402 | schedule_timeout_uninterruptible(1); |
| 2401 | } | 2403 | } |
| 2402 | if (to_clean->handlers) | 2404 | if (to_clean->handlers) |
| 2403 | disable_si_irq(to_clean, false); | 2405 | disable_si_irq(to_clean); |
| 2404 | while (to_clean->curr_msg || (to_clean->si_state != SI_NORMAL)) { | 2406 | while (to_clean->curr_msg || (to_clean->si_state != SI_NORMAL)) { |
| 2405 | poll(to_clean); | 2407 | poll(to_clean); |
| 2406 | schedule_timeout_uninterruptible(1); | 2408 | schedule_timeout_uninterruptible(1); |
diff --git a/drivers/char/ipmi/ipmi_si_parisc.c b/drivers/char/ipmi/ipmi_si_parisc.c index 090b073ab441..6b10f0e18a95 100644 --- a/drivers/char/ipmi/ipmi_si_parisc.c +++ b/drivers/char/ipmi/ipmi_si_parisc.c | |||
| @@ -10,6 +10,8 @@ static int __init ipmi_parisc_probe(struct parisc_device *dev) | |||
| 10 | { | 10 | { |
| 11 | struct si_sm_io io; | 11 | struct si_sm_io io; |
| 12 | 12 | ||
| 13 | memset(&io, 0, sizeof(io)); | ||
| 14 | |||
| 13 | io.si_type = SI_KCS; | 15 | io.si_type = SI_KCS; |
| 14 | io.addr_source = SI_DEVICETREE; | 16 | io.addr_source = SI_DEVICETREE; |
| 15 | io.addr_type = IPMI_MEM_ADDR_SPACE; | 17 | io.addr_type = IPMI_MEM_ADDR_SPACE; |
diff --git a/drivers/char/ipmi/ipmi_si_pci.c b/drivers/char/ipmi/ipmi_si_pci.c index 99771f5cad07..27dd11c49d21 100644 --- a/drivers/char/ipmi/ipmi_si_pci.c +++ b/drivers/char/ipmi/ipmi_si_pci.c | |||
| @@ -103,10 +103,13 @@ static int ipmi_pci_probe(struct pci_dev *pdev, | |||
| 103 | io.addr_source_cleanup = ipmi_pci_cleanup; | 103 | io.addr_source_cleanup = ipmi_pci_cleanup; |
| 104 | io.addr_source_data = pdev; | 104 | io.addr_source_data = pdev; |
| 105 | 105 | ||
| 106 | if (pci_resource_flags(pdev, 0) & IORESOURCE_IO) | 106 | if (pci_resource_flags(pdev, 0) & IORESOURCE_IO) { |
| 107 | io.addr_type = IPMI_IO_ADDR_SPACE; | 107 | io.addr_type = IPMI_IO_ADDR_SPACE; |
| 108 | else | 108 | io.io_setup = ipmi_si_port_setup; |
| 109 | } else { | ||
| 109 | io.addr_type = IPMI_MEM_ADDR_SPACE; | 110 | io.addr_type = IPMI_MEM_ADDR_SPACE; |
| 111 | io.io_setup = ipmi_si_mem_setup; | ||
| 112 | } | ||
| 110 | io.addr_data = pci_resource_start(pdev, 0); | 113 | io.addr_data = pci_resource_start(pdev, 0); |
| 111 | 114 | ||
| 112 | io.regspacing = ipmi_pci_probe_regspacing(&io); | 115 | io.regspacing = ipmi_pci_probe_regspacing(&io); |
diff --git a/drivers/cpufreq/Kconfig b/drivers/cpufreq/Kconfig index 4ebae43118ef..d8addbce40bc 100644 --- a/drivers/cpufreq/Kconfig +++ b/drivers/cpufreq/Kconfig | |||
| @@ -275,6 +275,7 @@ config BMIPS_CPUFREQ | |||
| 275 | 275 | ||
| 276 | config LOONGSON2_CPUFREQ | 276 | config LOONGSON2_CPUFREQ |
| 277 | tristate "Loongson2 CPUFreq Driver" | 277 | tristate "Loongson2 CPUFreq Driver" |
| 278 | depends on LEMOTE_MACH2F | ||
| 278 | help | 279 | help |
| 279 | This option adds a CPUFreq driver for loongson processors which | 280 | This option adds a CPUFreq driver for loongson processors which |
| 280 | support software configurable cpu frequency. | 281 | support software configurable cpu frequency. |
| @@ -287,6 +288,7 @@ config LOONGSON2_CPUFREQ | |||
| 287 | 288 | ||
| 288 | config LOONGSON1_CPUFREQ | 289 | config LOONGSON1_CPUFREQ |
| 289 | tristate "Loongson1 CPUFreq Driver" | 290 | tristate "Loongson1 CPUFreq Driver" |
| 291 | depends on LOONGSON1_LS1B | ||
| 290 | help | 292 | help |
| 291 | This option adds a CPUFreq driver for loongson1 processors which | 293 | This option adds a CPUFreq driver for loongson1 processors which |
| 292 | support software configurable cpu frequency. | 294 | support software configurable cpu frequency. |
diff --git a/drivers/cpufreq/mediatek-cpufreq.c b/drivers/cpufreq/mediatek-cpufreq.c index 18c4bd9a5c65..e0d5090b303d 100644 --- a/drivers/cpufreq/mediatek-cpufreq.c +++ b/drivers/cpufreq/mediatek-cpufreq.c | |||
| @@ -620,3 +620,7 @@ static int __init mtk_cpufreq_driver_init(void) | |||
| 620 | return 0; | 620 | return 0; |
| 621 | } | 621 | } |
| 622 | device_initcall(mtk_cpufreq_driver_init); | 622 | device_initcall(mtk_cpufreq_driver_init); |
| 623 | |||
| 624 | MODULE_DESCRIPTION("MediaTek CPUFreq driver"); | ||
| 625 | MODULE_AUTHOR("Pi-Cheng Chen <pi-cheng.chen@linaro.org>"); | ||
| 626 | MODULE_LICENSE("GPL v2"); | ||
diff --git a/drivers/dax/device.c b/drivers/dax/device.c index 6833ada237ab..7b0bf825c4e7 100644 --- a/drivers/dax/device.c +++ b/drivers/dax/device.c | |||
| @@ -428,9 +428,21 @@ static int dev_dax_fault(struct vm_fault *vmf) | |||
| 428 | return dev_dax_huge_fault(vmf, PE_SIZE_PTE); | 428 | return dev_dax_huge_fault(vmf, PE_SIZE_PTE); |
| 429 | } | 429 | } |
| 430 | 430 | ||
| 431 | static int dev_dax_split(struct vm_area_struct *vma, unsigned long addr) | ||
| 432 | { | ||
| 433 | struct file *filp = vma->vm_file; | ||
| 434 | struct dev_dax *dev_dax = filp->private_data; | ||
| 435 | struct dax_region *dax_region = dev_dax->region; | ||
| 436 | |||
| 437 | if (!IS_ALIGNED(addr, dax_region->align)) | ||
| 438 | return -EINVAL; | ||
| 439 | return 0; | ||
| 440 | } | ||
| 441 | |||
| 431 | static const struct vm_operations_struct dax_vm_ops = { | 442 | static const struct vm_operations_struct dax_vm_ops = { |
| 432 | .fault = dev_dax_fault, | 443 | .fault = dev_dax_fault, |
| 433 | .huge_fault = dev_dax_huge_fault, | 444 | .huge_fault = dev_dax_huge_fault, |
| 445 | .split = dev_dax_split, | ||
| 434 | }; | 446 | }; |
| 435 | 447 | ||
| 436 | static int dax_mmap(struct file *filp, struct vm_area_struct *vma) | 448 | static int dax_mmap(struct file *filp, struct vm_area_struct *vma) |
diff --git a/drivers/dma/at_hdmac.c b/drivers/dma/at_hdmac.c index fbab271b3bf9..a861b5b4d443 100644 --- a/drivers/dma/at_hdmac.c +++ b/drivers/dma/at_hdmac.c | |||
| @@ -708,7 +708,7 @@ atc_prep_dma_interleaved(struct dma_chan *chan, | |||
| 708 | unsigned long flags) | 708 | unsigned long flags) |
| 709 | { | 709 | { |
| 710 | struct at_dma_chan *atchan = to_at_dma_chan(chan); | 710 | struct at_dma_chan *atchan = to_at_dma_chan(chan); |
| 711 | struct data_chunk *first = xt->sgl; | 711 | struct data_chunk *first; |
| 712 | struct at_desc *desc = NULL; | 712 | struct at_desc *desc = NULL; |
| 713 | size_t xfer_count; | 713 | size_t xfer_count; |
| 714 | unsigned int dwidth; | 714 | unsigned int dwidth; |
| @@ -720,6 +720,8 @@ atc_prep_dma_interleaved(struct dma_chan *chan, | |||
| 720 | if (unlikely(!xt || xt->numf != 1 || !xt->frame_size)) | 720 | if (unlikely(!xt || xt->numf != 1 || !xt->frame_size)) |
| 721 | return NULL; | 721 | return NULL; |
| 722 | 722 | ||
| 723 | first = xt->sgl; | ||
| 724 | |||
| 723 | dev_info(chan2dev(chan), | 725 | dev_info(chan2dev(chan), |
| 724 | "%s: src=%pad, dest=%pad, numf=%d, frame_size=%d, flags=0x%lx\n", | 726 | "%s: src=%pad, dest=%pad, numf=%d, frame_size=%d, flags=0x%lx\n", |
| 725 | __func__, &xt->src_start, &xt->dst_start, xt->numf, | 727 | __func__, &xt->src_start, &xt->dst_start, xt->numf, |
diff --git a/drivers/dma/dma-jz4740.c b/drivers/dma/dma-jz4740.c index d50273fed715..afd5e10f8927 100644 --- a/drivers/dma/dma-jz4740.c +++ b/drivers/dma/dma-jz4740.c | |||
| @@ -555,7 +555,7 @@ static int jz4740_dma_probe(struct platform_device *pdev) | |||
| 555 | 555 | ||
| 556 | ret = dma_async_device_register(dd); | 556 | ret = dma_async_device_register(dd); |
| 557 | if (ret) | 557 | if (ret) |
| 558 | return ret; | 558 | goto err_clk; |
| 559 | 559 | ||
| 560 | irq = platform_get_irq(pdev, 0); | 560 | irq = platform_get_irq(pdev, 0); |
| 561 | ret = request_irq(irq, jz4740_dma_irq, 0, dev_name(&pdev->dev), dmadev); | 561 | ret = request_irq(irq, jz4740_dma_irq, 0, dev_name(&pdev->dev), dmadev); |
| @@ -568,6 +568,8 @@ static int jz4740_dma_probe(struct platform_device *pdev) | |||
| 568 | 568 | ||
| 569 | err_unregister: | 569 | err_unregister: |
| 570 | dma_async_device_unregister(dd); | 570 | dma_async_device_unregister(dd); |
| 571 | err_clk: | ||
| 572 | clk_disable_unprepare(dmadev->clk); | ||
| 571 | return ret; | 573 | return ret; |
| 572 | } | 574 | } |
| 573 | 575 | ||
diff --git a/drivers/dma/dmatest.c b/drivers/dma/dmatest.c index 47edc7fbf91f..ec5f9d2bc820 100644 --- a/drivers/dma/dmatest.c +++ b/drivers/dma/dmatest.c | |||
| @@ -155,6 +155,12 @@ MODULE_PARM_DESC(run, "Run the test (default: false)"); | |||
| 155 | #define PATTERN_COUNT_MASK 0x1f | 155 | #define PATTERN_COUNT_MASK 0x1f |
| 156 | #define PATTERN_MEMSET_IDX 0x01 | 156 | #define PATTERN_MEMSET_IDX 0x01 |
| 157 | 157 | ||
| 158 | /* poor man's completion - we want to use wait_event_freezable() on it */ | ||
| 159 | struct dmatest_done { | ||
| 160 | bool done; | ||
| 161 | wait_queue_head_t *wait; | ||
| 162 | }; | ||
| 163 | |||
| 158 | struct dmatest_thread { | 164 | struct dmatest_thread { |
| 159 | struct list_head node; | 165 | struct list_head node; |
| 160 | struct dmatest_info *info; | 166 | struct dmatest_info *info; |
| @@ -165,6 +171,8 @@ struct dmatest_thread { | |||
| 165 | u8 **dsts; | 171 | u8 **dsts; |
| 166 | u8 **udsts; | 172 | u8 **udsts; |
| 167 | enum dma_transaction_type type; | 173 | enum dma_transaction_type type; |
| 174 | wait_queue_head_t done_wait; | ||
| 175 | struct dmatest_done test_done; | ||
| 168 | bool done; | 176 | bool done; |
| 169 | }; | 177 | }; |
| 170 | 178 | ||
| @@ -342,18 +350,25 @@ static unsigned int dmatest_verify(u8 **bufs, unsigned int start, | |||
| 342 | return error_count; | 350 | return error_count; |
| 343 | } | 351 | } |
| 344 | 352 | ||
| 345 | /* poor man's completion - we want to use wait_event_freezable() on it */ | ||
| 346 | struct dmatest_done { | ||
| 347 | bool done; | ||
| 348 | wait_queue_head_t *wait; | ||
| 349 | }; | ||
| 350 | 353 | ||
| 351 | static void dmatest_callback(void *arg) | 354 | static void dmatest_callback(void *arg) |
| 352 | { | 355 | { |
| 353 | struct dmatest_done *done = arg; | 356 | struct dmatest_done *done = arg; |
| 354 | 357 | struct dmatest_thread *thread = | |
| 355 | done->done = true; | 358 | container_of(arg, struct dmatest_thread, done_wait); |
| 356 | wake_up_all(done->wait); | 359 | if (!thread->done) { |
| 360 | done->done = true; | ||
| 361 | wake_up_all(done->wait); | ||
| 362 | } else { | ||
| 363 | /* | ||
| 364 | * If thread->done, it means that this callback occurred | ||
| 365 | * after the parent thread has cleaned up. This can | ||
| 366 | * happen in the case that driver doesn't implement | ||
| 367 | * the terminate_all() functionality and a dma operation | ||
| 368 | * did not occur within the timeout period | ||
| 369 | */ | ||
| 370 | WARN(1, "dmatest: Kernel memory may be corrupted!!\n"); | ||
| 371 | } | ||
| 357 | } | 372 | } |
| 358 | 373 | ||
| 359 | static unsigned int min_odd(unsigned int x, unsigned int y) | 374 | static unsigned int min_odd(unsigned int x, unsigned int y) |
| @@ -424,9 +439,8 @@ static unsigned long long dmatest_KBs(s64 runtime, unsigned long long len) | |||
| 424 | */ | 439 | */ |
| 425 | static int dmatest_func(void *data) | 440 | static int dmatest_func(void *data) |
| 426 | { | 441 | { |
| 427 | DECLARE_WAIT_QUEUE_HEAD_ONSTACK(done_wait); | ||
| 428 | struct dmatest_thread *thread = data; | 442 | struct dmatest_thread *thread = data; |
| 429 | struct dmatest_done done = { .wait = &done_wait }; | 443 | struct dmatest_done *done = &thread->test_done; |
| 430 | struct dmatest_info *info; | 444 | struct dmatest_info *info; |
| 431 | struct dmatest_params *params; | 445 | struct dmatest_params *params; |
| 432 | struct dma_chan *chan; | 446 | struct dma_chan *chan; |
| @@ -673,9 +687,9 @@ static int dmatest_func(void *data) | |||
| 673 | continue; | 687 | continue; |
| 674 | } | 688 | } |
| 675 | 689 | ||
| 676 | done.done = false; | 690 | done->done = false; |
| 677 | tx->callback = dmatest_callback; | 691 | tx->callback = dmatest_callback; |
| 678 | tx->callback_param = &done; | 692 | tx->callback_param = done; |
| 679 | cookie = tx->tx_submit(tx); | 693 | cookie = tx->tx_submit(tx); |
| 680 | 694 | ||
| 681 | if (dma_submit_error(cookie)) { | 695 | if (dma_submit_error(cookie)) { |
| @@ -688,21 +702,12 @@ static int dmatest_func(void *data) | |||
| 688 | } | 702 | } |
| 689 | dma_async_issue_pending(chan); | 703 | dma_async_issue_pending(chan); |
| 690 | 704 | ||
| 691 | wait_event_freezable_timeout(done_wait, done.done, | 705 | wait_event_freezable_timeout(thread->done_wait, done->done, |
| 692 | msecs_to_jiffies(params->timeout)); | 706 | msecs_to_jiffies(params->timeout)); |
| 693 | 707 | ||
| 694 | status = dma_async_is_tx_complete(chan, cookie, NULL, NULL); | 708 | status = dma_async_is_tx_complete(chan, cookie, NULL, NULL); |
| 695 | 709 | ||
| 696 | if (!done.done) { | 710 | if (!done->done) { |
| 697 | /* | ||
| 698 | * We're leaving the timed out dma operation with | ||
| 699 | * dangling pointer to done_wait. To make this | ||
| 700 | * correct, we'll need to allocate wait_done for | ||
| 701 | * each test iteration and perform "who's gonna | ||
| 702 | * free it this time?" dancing. For now, just | ||
| 703 | * leave it dangling. | ||
| 704 | */ | ||
| 705 | WARN(1, "dmatest: Kernel stack may be corrupted!!\n"); | ||
| 706 | dmaengine_unmap_put(um); | 711 | dmaengine_unmap_put(um); |
| 707 | result("test timed out", total_tests, src_off, dst_off, | 712 | result("test timed out", total_tests, src_off, dst_off, |
| 708 | len, 0); | 713 | len, 0); |
| @@ -789,7 +794,7 @@ err_thread_type: | |||
| 789 | dmatest_KBs(runtime, total_len), ret); | 794 | dmatest_KBs(runtime, total_len), ret); |
| 790 | 795 | ||
| 791 | /* terminate all transfers on specified channels */ | 796 | /* terminate all transfers on specified channels */ |
| 792 | if (ret) | 797 | if (ret || failed_tests) |
| 793 | dmaengine_terminate_all(chan); | 798 | dmaengine_terminate_all(chan); |
| 794 | 799 | ||
| 795 | thread->done = true; | 800 | thread->done = true; |
| @@ -849,6 +854,8 @@ static int dmatest_add_threads(struct dmatest_info *info, | |||
| 849 | thread->info = info; | 854 | thread->info = info; |
| 850 | thread->chan = dtc->chan; | 855 | thread->chan = dtc->chan; |
| 851 | thread->type = type; | 856 | thread->type = type; |
| 857 | thread->test_done.wait = &thread->done_wait; | ||
| 858 | init_waitqueue_head(&thread->done_wait); | ||
| 852 | smp_wmb(); | 859 | smp_wmb(); |
| 853 | thread->task = kthread_create(dmatest_func, thread, "%s-%s%u", | 860 | thread->task = kthread_create(dmatest_func, thread, "%s-%s%u", |
| 854 | dma_chan_name(chan), op, i); | 861 | dma_chan_name(chan), op, i); |
diff --git a/drivers/dma/fsl-edma.c b/drivers/dma/fsl-edma.c index 6775f2c74e25..c7568869284e 100644 --- a/drivers/dma/fsl-edma.c +++ b/drivers/dma/fsl-edma.c | |||
| @@ -863,11 +863,11 @@ static void fsl_edma_irq_exit( | |||
| 863 | } | 863 | } |
| 864 | } | 864 | } |
| 865 | 865 | ||
| 866 | static void fsl_disable_clocks(struct fsl_edma_engine *fsl_edma) | 866 | static void fsl_disable_clocks(struct fsl_edma_engine *fsl_edma, int nr_clocks) |
| 867 | { | 867 | { |
| 868 | int i; | 868 | int i; |
| 869 | 869 | ||
| 870 | for (i = 0; i < DMAMUX_NR; i++) | 870 | for (i = 0; i < nr_clocks; i++) |
| 871 | clk_disable_unprepare(fsl_edma->muxclk[i]); | 871 | clk_disable_unprepare(fsl_edma->muxclk[i]); |
| 872 | } | 872 | } |
| 873 | 873 | ||
| @@ -904,25 +904,25 @@ static int fsl_edma_probe(struct platform_device *pdev) | |||
| 904 | 904 | ||
| 905 | res = platform_get_resource(pdev, IORESOURCE_MEM, 1 + i); | 905 | res = platform_get_resource(pdev, IORESOURCE_MEM, 1 + i); |
| 906 | fsl_edma->muxbase[i] = devm_ioremap_resource(&pdev->dev, res); | 906 | fsl_edma->muxbase[i] = devm_ioremap_resource(&pdev->dev, res); |
| 907 | if (IS_ERR(fsl_edma->muxbase[i])) | 907 | if (IS_ERR(fsl_edma->muxbase[i])) { |
| 908 | /* on error: disable all previously enabled clks */ | ||
| 909 | fsl_disable_clocks(fsl_edma, i); | ||
| 908 | return PTR_ERR(fsl_edma->muxbase[i]); | 910 | return PTR_ERR(fsl_edma->muxbase[i]); |
| 911 | } | ||
| 909 | 912 | ||
| 910 | sprintf(clkname, "dmamux%d", i); | 913 | sprintf(clkname, "dmamux%d", i); |
| 911 | fsl_edma->muxclk[i] = devm_clk_get(&pdev->dev, clkname); | 914 | fsl_edma->muxclk[i] = devm_clk_get(&pdev->dev, clkname); |
| 912 | if (IS_ERR(fsl_edma->muxclk[i])) { | 915 | if (IS_ERR(fsl_edma->muxclk[i])) { |
| 913 | dev_err(&pdev->dev, "Missing DMAMUX block clock.\n"); | 916 | dev_err(&pdev->dev, "Missing DMAMUX block clock.\n"); |
| 917 | /* on error: disable all previously enabled clks */ | ||
| 918 | fsl_disable_clocks(fsl_edma, i); | ||
| 914 | return PTR_ERR(fsl_edma->muxclk[i]); | 919 | return PTR_ERR(fsl_edma->muxclk[i]); |
| 915 | } | 920 | } |
| 916 | 921 | ||
| 917 | ret = clk_prepare_enable(fsl_edma->muxclk[i]); | 922 | ret = clk_prepare_enable(fsl_edma->muxclk[i]); |
| 918 | if (ret) { | 923 | if (ret) |
| 919 | /* disable only clks which were enabled on error */ | 924 | /* on error: disable all previously enabled clks */ |
| 920 | for (; i >= 0; i--) | 925 | fsl_disable_clocks(fsl_edma, i); |
| 921 | clk_disable_unprepare(fsl_edma->muxclk[i]); | ||
| 922 | |||
| 923 | dev_err(&pdev->dev, "DMAMUX clk block failed.\n"); | ||
| 924 | return ret; | ||
| 925 | } | ||
| 926 | 926 | ||
| 927 | } | 927 | } |
| 928 | 928 | ||
| @@ -976,7 +976,7 @@ static int fsl_edma_probe(struct platform_device *pdev) | |||
| 976 | if (ret) { | 976 | if (ret) { |
| 977 | dev_err(&pdev->dev, | 977 | dev_err(&pdev->dev, |
| 978 | "Can't register Freescale eDMA engine. (%d)\n", ret); | 978 | "Can't register Freescale eDMA engine. (%d)\n", ret); |
| 979 | fsl_disable_clocks(fsl_edma); | 979 | fsl_disable_clocks(fsl_edma, DMAMUX_NR); |
| 980 | return ret; | 980 | return ret; |
| 981 | } | 981 | } |
| 982 | 982 | ||
| @@ -985,7 +985,7 @@ static int fsl_edma_probe(struct platform_device *pdev) | |||
| 985 | dev_err(&pdev->dev, | 985 | dev_err(&pdev->dev, |
| 986 | "Can't register Freescale eDMA of_dma. (%d)\n", ret); | 986 | "Can't register Freescale eDMA of_dma. (%d)\n", ret); |
| 987 | dma_async_device_unregister(&fsl_edma->dma_dev); | 987 | dma_async_device_unregister(&fsl_edma->dma_dev); |
| 988 | fsl_disable_clocks(fsl_edma); | 988 | fsl_disable_clocks(fsl_edma, DMAMUX_NR); |
| 989 | return ret; | 989 | return ret; |
| 990 | } | 990 | } |
| 991 | 991 | ||
| @@ -1015,7 +1015,7 @@ static int fsl_edma_remove(struct platform_device *pdev) | |||
| 1015 | fsl_edma_cleanup_vchan(&fsl_edma->dma_dev); | 1015 | fsl_edma_cleanup_vchan(&fsl_edma->dma_dev); |
| 1016 | of_dma_controller_free(np); | 1016 | of_dma_controller_free(np); |
| 1017 | dma_async_device_unregister(&fsl_edma->dma_dev); | 1017 | dma_async_device_unregister(&fsl_edma->dma_dev); |
| 1018 | fsl_disable_clocks(fsl_edma); | 1018 | fsl_disable_clocks(fsl_edma, DMAMUX_NR); |
| 1019 | 1019 | ||
| 1020 | return 0; | 1020 | return 0; |
| 1021 | } | 1021 | } |
diff --git a/drivers/dma/ioat/init.c b/drivers/dma/ioat/init.c index 2f31d3d0caa6..7792a9186f9c 100644 --- a/drivers/dma/ioat/init.c +++ b/drivers/dma/ioat/init.c | |||
| @@ -390,7 +390,7 @@ static int ioat_dma_self_test(struct ioatdma_device *ioat_dma) | |||
| 390 | if (memcmp(src, dest, IOAT_TEST_SIZE)) { | 390 | if (memcmp(src, dest, IOAT_TEST_SIZE)) { |
| 391 | dev_err(dev, "Self-test copy failed compare, disabling\n"); | 391 | dev_err(dev, "Self-test copy failed compare, disabling\n"); |
| 392 | err = -ENODEV; | 392 | err = -ENODEV; |
| 393 | goto free_resources; | 393 | goto unmap_dma; |
| 394 | } | 394 | } |
| 395 | 395 | ||
| 396 | unmap_dma: | 396 | unmap_dma: |
diff --git a/drivers/firmware/arm_scpi.c b/drivers/firmware/arm_scpi.c index dfb373c8ba2a..7da9f1b83ebe 100644 --- a/drivers/firmware/arm_scpi.c +++ b/drivers/firmware/arm_scpi.c | |||
| @@ -28,7 +28,6 @@ | |||
| 28 | #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt | 28 | #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt |
| 29 | 29 | ||
| 30 | #include <linux/bitmap.h> | 30 | #include <linux/bitmap.h> |
| 31 | #include <linux/bitfield.h> | ||
| 32 | #include <linux/device.h> | 31 | #include <linux/device.h> |
| 33 | #include <linux/err.h> | 32 | #include <linux/err.h> |
| 34 | #include <linux/export.h> | 33 | #include <linux/export.h> |
| @@ -73,13 +72,21 @@ | |||
| 73 | 72 | ||
| 74 | #define MAX_DVFS_DOMAINS 8 | 73 | #define MAX_DVFS_DOMAINS 8 |
| 75 | #define MAX_DVFS_OPPS 16 | 74 | #define MAX_DVFS_OPPS 16 |
| 76 | 75 | #define DVFS_LATENCY(hdr) (le32_to_cpu(hdr) >> 16) | |
| 77 | #define PROTO_REV_MAJOR_MASK GENMASK(31, 16) | 76 | #define DVFS_OPP_COUNT(hdr) ((le32_to_cpu(hdr) >> 8) & 0xff) |
| 78 | #define PROTO_REV_MINOR_MASK GENMASK(15, 0) | 77 | |
| 79 | 78 | #define PROTOCOL_REV_MINOR_BITS 16 | |
| 80 | #define FW_REV_MAJOR_MASK GENMASK(31, 24) | 79 | #define PROTOCOL_REV_MINOR_MASK ((1U << PROTOCOL_REV_MINOR_BITS) - 1) |
| 81 | #define FW_REV_MINOR_MASK GENMASK(23, 16) | 80 | #define PROTOCOL_REV_MAJOR(x) ((x) >> PROTOCOL_REV_MINOR_BITS) |
| 82 | #define FW_REV_PATCH_MASK GENMASK(15, 0) | 81 | #define PROTOCOL_REV_MINOR(x) ((x) & PROTOCOL_REV_MINOR_MASK) |
| 82 | |||
| 83 | #define FW_REV_MAJOR_BITS 24 | ||
| 84 | #define FW_REV_MINOR_BITS 16 | ||
| 85 | #define FW_REV_PATCH_MASK ((1U << FW_REV_MINOR_BITS) - 1) | ||
| 86 | #define FW_REV_MINOR_MASK ((1U << FW_REV_MAJOR_BITS) - 1) | ||
| 87 | #define FW_REV_MAJOR(x) ((x) >> FW_REV_MAJOR_BITS) | ||
| 88 | #define FW_REV_MINOR(x) (((x) & FW_REV_MINOR_MASK) >> FW_REV_MINOR_BITS) | ||
| 89 | #define FW_REV_PATCH(x) ((x) & FW_REV_PATCH_MASK) | ||
| 83 | 90 | ||
| 84 | #define MAX_RX_TIMEOUT (msecs_to_jiffies(30)) | 91 | #define MAX_RX_TIMEOUT (msecs_to_jiffies(30)) |
| 85 | 92 | ||
| @@ -304,6 +311,10 @@ struct clk_get_info { | |||
| 304 | u8 name[20]; | 311 | u8 name[20]; |
| 305 | } __packed; | 312 | } __packed; |
| 306 | 313 | ||
| 314 | struct clk_get_value { | ||
| 315 | __le32 rate; | ||
| 316 | } __packed; | ||
| 317 | |||
| 307 | struct clk_set_value { | 318 | struct clk_set_value { |
| 308 | __le16 id; | 319 | __le16 id; |
| 309 | __le16 reserved; | 320 | __le16 reserved; |
| @@ -317,9 +328,7 @@ struct legacy_clk_set_value { | |||
| 317 | } __packed; | 328 | } __packed; |
| 318 | 329 | ||
| 319 | struct dvfs_info { | 330 | struct dvfs_info { |
| 320 | u8 domain; | 331 | __le32 header; |
| 321 | u8 opp_count; | ||
| 322 | __le16 latency; | ||
| 323 | struct { | 332 | struct { |
| 324 | __le32 freq; | 333 | __le32 freq; |
| 325 | __le32 m_volt; | 334 | __le32 m_volt; |
| @@ -342,6 +351,11 @@ struct _scpi_sensor_info { | |||
| 342 | char name[20]; | 351 | char name[20]; |
| 343 | }; | 352 | }; |
| 344 | 353 | ||
| 354 | struct sensor_value { | ||
| 355 | __le32 lo_val; | ||
| 356 | __le32 hi_val; | ||
| 357 | } __packed; | ||
| 358 | |||
| 345 | struct dev_pstate_set { | 359 | struct dev_pstate_set { |
| 346 | __le16 dev_id; | 360 | __le16 dev_id; |
| 347 | u8 pstate; | 361 | u8 pstate; |
| @@ -405,20 +419,19 @@ static void scpi_process_cmd(struct scpi_chan *ch, u32 cmd) | |||
| 405 | unsigned int len; | 419 | unsigned int len; |
| 406 | 420 | ||
| 407 | if (scpi_info->is_legacy) { | 421 | if (scpi_info->is_legacy) { |
| 408 | struct legacy_scpi_shared_mem __iomem *mem = | 422 | struct legacy_scpi_shared_mem *mem = ch->rx_payload; |
| 409 | ch->rx_payload; | ||
| 410 | 423 | ||
| 411 | /* RX Length is not replied by the legacy Firmware */ | 424 | /* RX Length is not replied by the legacy Firmware */ |
| 412 | len = match->rx_len; | 425 | len = match->rx_len; |
| 413 | 426 | ||
| 414 | match->status = ioread32(&mem->status); | 427 | match->status = le32_to_cpu(mem->status); |
| 415 | memcpy_fromio(match->rx_buf, mem->payload, len); | 428 | memcpy_fromio(match->rx_buf, mem->payload, len); |
| 416 | } else { | 429 | } else { |
| 417 | struct scpi_shared_mem __iomem *mem = ch->rx_payload; | 430 | struct scpi_shared_mem *mem = ch->rx_payload; |
| 418 | 431 | ||
| 419 | len = min(match->rx_len, CMD_SIZE(cmd)); | 432 | len = min(match->rx_len, CMD_SIZE(cmd)); |
| 420 | 433 | ||
| 421 | match->status = ioread32(&mem->status); | 434 | match->status = le32_to_cpu(mem->status); |
| 422 | memcpy_fromio(match->rx_buf, mem->payload, len); | 435 | memcpy_fromio(match->rx_buf, mem->payload, len); |
| 423 | } | 436 | } |
| 424 | 437 | ||
| @@ -432,11 +445,11 @@ static void scpi_process_cmd(struct scpi_chan *ch, u32 cmd) | |||
| 432 | static void scpi_handle_remote_msg(struct mbox_client *c, void *msg) | 445 | static void scpi_handle_remote_msg(struct mbox_client *c, void *msg) |
| 433 | { | 446 | { |
| 434 | struct scpi_chan *ch = container_of(c, struct scpi_chan, cl); | 447 | struct scpi_chan *ch = container_of(c, struct scpi_chan, cl); |
| 435 | struct scpi_shared_mem __iomem *mem = ch->rx_payload; | 448 | struct scpi_shared_mem *mem = ch->rx_payload; |
| 436 | u32 cmd = 0; | 449 | u32 cmd = 0; |
| 437 | 450 | ||
| 438 | if (!scpi_info->is_legacy) | 451 | if (!scpi_info->is_legacy) |
| 439 | cmd = ioread32(&mem->command); | 452 | cmd = le32_to_cpu(mem->command); |
| 440 | 453 | ||
| 441 | scpi_process_cmd(ch, cmd); | 454 | scpi_process_cmd(ch, cmd); |
| 442 | } | 455 | } |
| @@ -446,7 +459,7 @@ static void scpi_tx_prepare(struct mbox_client *c, void *msg) | |||
| 446 | unsigned long flags; | 459 | unsigned long flags; |
| 447 | struct scpi_xfer *t = msg; | 460 | struct scpi_xfer *t = msg; |
| 448 | struct scpi_chan *ch = container_of(c, struct scpi_chan, cl); | 461 | struct scpi_chan *ch = container_of(c, struct scpi_chan, cl); |
| 449 | struct scpi_shared_mem __iomem *mem = ch->tx_payload; | 462 | struct scpi_shared_mem *mem = (struct scpi_shared_mem *)ch->tx_payload; |
| 450 | 463 | ||
| 451 | if (t->tx_buf) { | 464 | if (t->tx_buf) { |
| 452 | if (scpi_info->is_legacy) | 465 | if (scpi_info->is_legacy) |
| @@ -465,7 +478,7 @@ static void scpi_tx_prepare(struct mbox_client *c, void *msg) | |||
| 465 | } | 478 | } |
| 466 | 479 | ||
| 467 | if (!scpi_info->is_legacy) | 480 | if (!scpi_info->is_legacy) |
| 468 | iowrite32(t->cmd, &mem->command); | 481 | mem->command = cpu_to_le32(t->cmd); |
| 469 | } | 482 | } |
| 470 | 483 | ||
| 471 | static struct scpi_xfer *get_scpi_xfer(struct scpi_chan *ch) | 484 | static struct scpi_xfer *get_scpi_xfer(struct scpi_chan *ch) |
| @@ -570,13 +583,13 @@ scpi_clk_get_range(u16 clk_id, unsigned long *min, unsigned long *max) | |||
| 570 | static unsigned long scpi_clk_get_val(u16 clk_id) | 583 | static unsigned long scpi_clk_get_val(u16 clk_id) |
| 571 | { | 584 | { |
| 572 | int ret; | 585 | int ret; |
| 573 | __le32 rate; | 586 | struct clk_get_value clk; |
| 574 | __le16 le_clk_id = cpu_to_le16(clk_id); | 587 | __le16 le_clk_id = cpu_to_le16(clk_id); |
| 575 | 588 | ||
| 576 | ret = scpi_send_message(CMD_GET_CLOCK_VALUE, &le_clk_id, | 589 | ret = scpi_send_message(CMD_GET_CLOCK_VALUE, &le_clk_id, |
| 577 | sizeof(le_clk_id), &rate, sizeof(rate)); | 590 | sizeof(le_clk_id), &clk, sizeof(clk)); |
| 578 | 591 | ||
| 579 | return ret ? ret : le32_to_cpu(rate); | 592 | return ret ? ret : le32_to_cpu(clk.rate); |
| 580 | } | 593 | } |
| 581 | 594 | ||
| 582 | static int scpi_clk_set_val(u16 clk_id, unsigned long rate) | 595 | static int scpi_clk_set_val(u16 clk_id, unsigned long rate) |
| @@ -632,34 +645,34 @@ static int opp_cmp_func(const void *opp1, const void *opp2) | |||
| 632 | 645 | ||
| 633 | static struct scpi_dvfs_info *scpi_dvfs_get_info(u8 domain) | 646 | static struct scpi_dvfs_info *scpi_dvfs_get_info(u8 domain) |
| 634 | { | 647 | { |
| 635 | if (domain >= MAX_DVFS_DOMAINS) | ||
| 636 | return ERR_PTR(-EINVAL); | ||
| 637 | |||
| 638 | return scpi_info->dvfs[domain] ?: ERR_PTR(-EINVAL); | ||
| 639 | } | ||
| 640 | |||
| 641 | static int scpi_dvfs_populate_info(struct device *dev, u8 domain) | ||
| 642 | { | ||
| 643 | struct scpi_dvfs_info *info; | 648 | struct scpi_dvfs_info *info; |
| 644 | struct scpi_opp *opp; | 649 | struct scpi_opp *opp; |
| 645 | struct dvfs_info buf; | 650 | struct dvfs_info buf; |
| 646 | int ret, i; | 651 | int ret, i; |
| 647 | 652 | ||
| 653 | if (domain >= MAX_DVFS_DOMAINS) | ||
| 654 | return ERR_PTR(-EINVAL); | ||
| 655 | |||
| 656 | if (scpi_info->dvfs[domain]) /* data already populated */ | ||
| 657 | return scpi_info->dvfs[domain]; | ||
| 658 | |||
| 648 | ret = scpi_send_message(CMD_GET_DVFS_INFO, &domain, sizeof(domain), | 659 | ret = scpi_send_message(CMD_GET_DVFS_INFO, &domain, sizeof(domain), |
| 649 | &buf, sizeof(buf)); | 660 | &buf, sizeof(buf)); |
| 650 | if (ret) | 661 | if (ret) |
| 651 | return ret; | 662 | return ERR_PTR(ret); |
| 652 | 663 | ||
| 653 | info = devm_kmalloc(dev, sizeof(*info), GFP_KERNEL); | 664 | info = kmalloc(sizeof(*info), GFP_KERNEL); |
| 654 | if (!info) | 665 | if (!info) |
| 655 | return -ENOMEM; | 666 | return ERR_PTR(-ENOMEM); |
| 656 | 667 | ||
| 657 | info->count = buf.opp_count; | 668 | info->count = DVFS_OPP_COUNT(buf.header); |
| 658 | info->latency = le16_to_cpu(buf.latency) * 1000; /* uS to nS */ | 669 | info->latency = DVFS_LATENCY(buf.header) * 1000; /* uS to nS */ |
| 659 | 670 | ||
| 660 | info->opps = devm_kcalloc(dev, info->count, sizeof(*opp), GFP_KERNEL); | 671 | info->opps = kcalloc(info->count, sizeof(*opp), GFP_KERNEL); |
| 661 | if (!info->opps) | 672 | if (!info->opps) { |
| 662 | return -ENOMEM; | 673 | kfree(info); |
| 674 | return ERR_PTR(-ENOMEM); | ||
| 675 | } | ||
| 663 | 676 | ||
| 664 | for (i = 0, opp = info->opps; i < info->count; i++, opp++) { | 677 | for (i = 0, opp = info->opps; i < info->count; i++, opp++) { |
| 665 | opp->freq = le32_to_cpu(buf.opps[i].freq); | 678 | opp->freq = le32_to_cpu(buf.opps[i].freq); |
| @@ -669,15 +682,7 @@ static int scpi_dvfs_populate_info(struct device *dev, u8 domain) | |||
| 669 | sort(info->opps, info->count, sizeof(*opp), opp_cmp_func, NULL); | 682 | sort(info->opps, info->count, sizeof(*opp), opp_cmp_func, NULL); |
| 670 | 683 | ||
| 671 | scpi_info->dvfs[domain] = info; | 684 | scpi_info->dvfs[domain] = info; |
| 672 | return 0; | 685 | return info; |
| 673 | } | ||
| 674 | |||
| 675 | static void scpi_dvfs_populate(struct device *dev) | ||
| 676 | { | ||
| 677 | int domain; | ||
| 678 | |||
| 679 | for (domain = 0; domain < MAX_DVFS_DOMAINS; domain++) | ||
| 680 | scpi_dvfs_populate_info(dev, domain); | ||
| 681 | } | 686 | } |
| 682 | 687 | ||
| 683 | static int scpi_dev_domain_id(struct device *dev) | 688 | static int scpi_dev_domain_id(struct device *dev) |
| @@ -708,6 +713,9 @@ static int scpi_dvfs_get_transition_latency(struct device *dev) | |||
| 708 | if (IS_ERR(info)) | 713 | if (IS_ERR(info)) |
| 709 | return PTR_ERR(info); | 714 | return PTR_ERR(info); |
| 710 | 715 | ||
| 716 | if (!info->latency) | ||
| 717 | return 0; | ||
| 718 | |||
| 711 | return info->latency; | 719 | return info->latency; |
| 712 | } | 720 | } |
| 713 | 721 | ||
| @@ -768,19 +776,20 @@ static int scpi_sensor_get_info(u16 sensor_id, struct scpi_sensor_info *info) | |||
| 768 | static int scpi_sensor_get_value(u16 sensor, u64 *val) | 776 | static int scpi_sensor_get_value(u16 sensor, u64 *val) |
| 769 | { | 777 | { |
| 770 | __le16 id = cpu_to_le16(sensor); | 778 | __le16 id = cpu_to_le16(sensor); |
| 771 | __le64 value; | 779 | struct sensor_value buf; |
| 772 | int ret; | 780 | int ret; |
| 773 | 781 | ||
| 774 | ret = scpi_send_message(CMD_SENSOR_VALUE, &id, sizeof(id), | 782 | ret = scpi_send_message(CMD_SENSOR_VALUE, &id, sizeof(id), |
| 775 | &value, sizeof(value)); | 783 | &buf, sizeof(buf)); |
| 776 | if (ret) | 784 | if (ret) |
| 777 | return ret; | 785 | return ret; |
| 778 | 786 | ||
| 779 | if (scpi_info->is_legacy) | 787 | if (scpi_info->is_legacy) |
| 780 | /* only 32-bits supported, upper 32 bits can be junk */ | 788 | /* only 32-bits supported, hi_val can be junk */ |
| 781 | *val = le32_to_cpup((__le32 *)&value); | 789 | *val = le32_to_cpu(buf.lo_val); |
| 782 | else | 790 | else |
| 783 | *val = le64_to_cpu(value); | 791 | *val = (u64)le32_to_cpu(buf.hi_val) << 32 | |
| 792 | le32_to_cpu(buf.lo_val); | ||
| 784 | 793 | ||
| 785 | return 0; | 794 | return 0; |
| 786 | } | 795 | } |
| @@ -853,19 +862,23 @@ static int scpi_init_versions(struct scpi_drvinfo *info) | |||
| 853 | static ssize_t protocol_version_show(struct device *dev, | 862 | static ssize_t protocol_version_show(struct device *dev, |
| 854 | struct device_attribute *attr, char *buf) | 863 | struct device_attribute *attr, char *buf) |
| 855 | { | 864 | { |
| 856 | return sprintf(buf, "%lu.%lu\n", | 865 | struct scpi_drvinfo *scpi_info = dev_get_drvdata(dev); |
| 857 | FIELD_GET(PROTO_REV_MAJOR_MASK, scpi_info->protocol_version), | 866 | |
| 858 | FIELD_GET(PROTO_REV_MINOR_MASK, scpi_info->protocol_version)); | 867 | return sprintf(buf, "%d.%d\n", |
| 868 | PROTOCOL_REV_MAJOR(scpi_info->protocol_version), | ||
| 869 | PROTOCOL_REV_MINOR(scpi_info->protocol_version)); | ||
| 859 | } | 870 | } |
| 860 | static DEVICE_ATTR_RO(protocol_version); | 871 | static DEVICE_ATTR_RO(protocol_version); |
| 861 | 872 | ||
| 862 | static ssize_t firmware_version_show(struct device *dev, | 873 | static ssize_t firmware_version_show(struct device *dev, |
| 863 | struct device_attribute *attr, char *buf) | 874 | struct device_attribute *attr, char *buf) |
| 864 | { | 875 | { |
| 865 | return sprintf(buf, "%lu.%lu.%lu\n", | 876 | struct scpi_drvinfo *scpi_info = dev_get_drvdata(dev); |
| 866 | FIELD_GET(FW_REV_MAJOR_MASK, scpi_info->firmware_version), | 877 | |
| 867 | FIELD_GET(FW_REV_MINOR_MASK, scpi_info->firmware_version), | 878 | return sprintf(buf, "%d.%d.%d\n", |
| 868 | FIELD_GET(FW_REV_PATCH_MASK, scpi_info->firmware_version)); | 879 | FW_REV_MAJOR(scpi_info->firmware_version), |
| 880 | FW_REV_MINOR(scpi_info->firmware_version), | ||
| 881 | FW_REV_PATCH(scpi_info->firmware_version)); | ||
| 869 | } | 882 | } |
| 870 | static DEVICE_ATTR_RO(firmware_version); | 883 | static DEVICE_ATTR_RO(firmware_version); |
| 871 | 884 | ||
| @@ -876,13 +889,39 @@ static struct attribute *versions_attrs[] = { | |||
| 876 | }; | 889 | }; |
| 877 | ATTRIBUTE_GROUPS(versions); | 890 | ATTRIBUTE_GROUPS(versions); |
| 878 | 891 | ||
| 879 | static void scpi_free_channels(void *data) | 892 | static void |
| 893 | scpi_free_channels(struct device *dev, struct scpi_chan *pchan, int count) | ||
| 880 | { | 894 | { |
| 881 | struct scpi_drvinfo *info = data; | ||
| 882 | int i; | 895 | int i; |
| 883 | 896 | ||
| 884 | for (i = 0; i < info->num_chans; i++) | 897 | for (i = 0; i < count && pchan->chan; i++, pchan++) { |
| 885 | mbox_free_channel(info->channels[i].chan); | 898 | mbox_free_channel(pchan->chan); |
| 899 | devm_kfree(dev, pchan->xfers); | ||
| 900 | devm_iounmap(dev, pchan->rx_payload); | ||
| 901 | } | ||
| 902 | } | ||
| 903 | |||
| 904 | static int scpi_remove(struct platform_device *pdev) | ||
| 905 | { | ||
| 906 | int i; | ||
| 907 | struct device *dev = &pdev->dev; | ||
| 908 | struct scpi_drvinfo *info = platform_get_drvdata(pdev); | ||
| 909 | |||
| 910 | scpi_info = NULL; /* stop exporting SCPI ops through get_scpi_ops */ | ||
| 911 | |||
| 912 | of_platform_depopulate(dev); | ||
| 913 | sysfs_remove_groups(&dev->kobj, versions_groups); | ||
| 914 | scpi_free_channels(dev, info->channels, info->num_chans); | ||
| 915 | platform_set_drvdata(pdev, NULL); | ||
| 916 | |||
| 917 | for (i = 0; i < MAX_DVFS_DOMAINS && info->dvfs[i]; i++) { | ||
| 918 | kfree(info->dvfs[i]->opps); | ||
| 919 | kfree(info->dvfs[i]); | ||
| 920 | } | ||
| 921 | devm_kfree(dev, info->channels); | ||
| 922 | devm_kfree(dev, info); | ||
| 923 | |||
| 924 | return 0; | ||
| 886 | } | 925 | } |
| 887 | 926 | ||
| 888 | #define MAX_SCPI_XFERS 10 | 927 | #define MAX_SCPI_XFERS 10 |
| @@ -913,6 +952,7 @@ static int scpi_probe(struct platform_device *pdev) | |||
| 913 | { | 952 | { |
| 914 | int count, idx, ret; | 953 | int count, idx, ret; |
| 915 | struct resource res; | 954 | struct resource res; |
| 955 | struct scpi_chan *scpi_chan; | ||
| 916 | struct device *dev = &pdev->dev; | 956 | struct device *dev = &pdev->dev; |
| 917 | struct device_node *np = dev->of_node; | 957 | struct device_node *np = dev->of_node; |
| 918 | 958 | ||
| @@ -929,19 +969,13 @@ static int scpi_probe(struct platform_device *pdev) | |||
| 929 | return -ENODEV; | 969 | return -ENODEV; |
| 930 | } | 970 | } |
| 931 | 971 | ||
| 932 | scpi_info->channels = devm_kcalloc(dev, count, sizeof(struct scpi_chan), | 972 | scpi_chan = devm_kcalloc(dev, count, sizeof(*scpi_chan), GFP_KERNEL); |
| 933 | GFP_KERNEL); | 973 | if (!scpi_chan) |
| 934 | if (!scpi_info->channels) | ||
| 935 | return -ENOMEM; | 974 | return -ENOMEM; |
| 936 | 975 | ||
| 937 | ret = devm_add_action(dev, scpi_free_channels, scpi_info); | 976 | for (idx = 0; idx < count; idx++) { |
| 938 | if (ret) | ||
| 939 | return ret; | ||
| 940 | |||
| 941 | for (; scpi_info->num_chans < count; scpi_info->num_chans++) { | ||
| 942 | resource_size_t size; | 977 | resource_size_t size; |
| 943 | int idx = scpi_info->num_chans; | 978 | struct scpi_chan *pchan = scpi_chan + idx; |
| 944 | struct scpi_chan *pchan = scpi_info->channels + idx; | ||
| 945 | struct mbox_client *cl = &pchan->cl; | 979 | struct mbox_client *cl = &pchan->cl; |
| 946 | struct device_node *shmem = of_parse_phandle(np, "shmem", idx); | 980 | struct device_node *shmem = of_parse_phandle(np, "shmem", idx); |
| 947 | 981 | ||
| @@ -949,14 +983,15 @@ static int scpi_probe(struct platform_device *pdev) | |||
| 949 | of_node_put(shmem); | 983 | of_node_put(shmem); |
| 950 | if (ret) { | 984 | if (ret) { |
| 951 | dev_err(dev, "failed to get SCPI payload mem resource\n"); | 985 | dev_err(dev, "failed to get SCPI payload mem resource\n"); |
| 952 | return ret; | 986 | goto err; |
| 953 | } | 987 | } |
| 954 | 988 | ||
| 955 | size = resource_size(&res); | 989 | size = resource_size(&res); |
| 956 | pchan->rx_payload = devm_ioremap(dev, res.start, size); | 990 | pchan->rx_payload = devm_ioremap(dev, res.start, size); |
| 957 | if (!pchan->rx_payload) { | 991 | if (!pchan->rx_payload) { |
| 958 | dev_err(dev, "failed to ioremap SCPI payload\n"); | 992 | dev_err(dev, "failed to ioremap SCPI payload\n"); |
| 959 | return -EADDRNOTAVAIL; | 993 | ret = -EADDRNOTAVAIL; |
| 994 | goto err; | ||
| 960 | } | 995 | } |
| 961 | pchan->tx_payload = pchan->rx_payload + (size >> 1); | 996 | pchan->tx_payload = pchan->rx_payload + (size >> 1); |
| 962 | 997 | ||
| @@ -982,11 +1017,17 @@ static int scpi_probe(struct platform_device *pdev) | |||
| 982 | dev_err(dev, "failed to get channel%d err %d\n", | 1017 | dev_err(dev, "failed to get channel%d err %d\n", |
| 983 | idx, ret); | 1018 | idx, ret); |
| 984 | } | 1019 | } |
| 1020 | err: | ||
| 1021 | scpi_free_channels(dev, scpi_chan, idx); | ||
| 1022 | scpi_info = NULL; | ||
| 985 | return ret; | 1023 | return ret; |
| 986 | } | 1024 | } |
| 987 | 1025 | ||
| 1026 | scpi_info->channels = scpi_chan; | ||
| 1027 | scpi_info->num_chans = count; | ||
| 988 | scpi_info->commands = scpi_std_commands; | 1028 | scpi_info->commands = scpi_std_commands; |
| 989 | scpi_info->scpi_ops = &scpi_ops; | 1029 | |
| 1030 | platform_set_drvdata(pdev, scpi_info); | ||
| 990 | 1031 | ||
| 991 | if (scpi_info->is_legacy) { | 1032 | if (scpi_info->is_legacy) { |
| 992 | /* Replace with legacy variants */ | 1033 | /* Replace with legacy variants */ |
| @@ -1002,23 +1043,23 @@ static int scpi_probe(struct platform_device *pdev) | |||
| 1002 | ret = scpi_init_versions(scpi_info); | 1043 | ret = scpi_init_versions(scpi_info); |
| 1003 | if (ret) { | 1044 | if (ret) { |
| 1004 | dev_err(dev, "incorrect or no SCP firmware found\n"); | 1045 | dev_err(dev, "incorrect or no SCP firmware found\n"); |
| 1046 | scpi_remove(pdev); | ||
| 1005 | return ret; | 1047 | return ret; |
| 1006 | } | 1048 | } |
| 1007 | 1049 | ||
| 1008 | scpi_dvfs_populate(dev); | 1050 | _dev_info(dev, "SCP Protocol %d.%d Firmware %d.%d.%d version\n", |
| 1009 | 1051 | PROTOCOL_REV_MAJOR(scpi_info->protocol_version), | |
| 1010 | _dev_info(dev, "SCP Protocol %lu.%lu Firmware %lu.%lu.%lu version\n", | 1052 | PROTOCOL_REV_MINOR(scpi_info->protocol_version), |
| 1011 | FIELD_GET(PROTO_REV_MAJOR_MASK, scpi_info->protocol_version), | 1053 | FW_REV_MAJOR(scpi_info->firmware_version), |
| 1012 | FIELD_GET(PROTO_REV_MINOR_MASK, scpi_info->protocol_version), | 1054 | FW_REV_MINOR(scpi_info->firmware_version), |
| 1013 | FIELD_GET(FW_REV_MAJOR_MASK, scpi_info->firmware_version), | 1055 | FW_REV_PATCH(scpi_info->firmware_version)); |
| 1014 | FIELD_GET(FW_REV_MINOR_MASK, scpi_info->firmware_version), | 1056 | scpi_info->scpi_ops = &scpi_ops; |
| 1015 | FIELD_GET(FW_REV_PATCH_MASK, scpi_info->firmware_version)); | ||
| 1016 | 1057 | ||
| 1017 | ret = devm_device_add_groups(dev, versions_groups); | 1058 | ret = sysfs_create_groups(&dev->kobj, versions_groups); |
| 1018 | if (ret) | 1059 | if (ret) |
| 1019 | dev_err(dev, "unable to create sysfs version group\n"); | 1060 | dev_err(dev, "unable to create sysfs version group\n"); |
| 1020 | 1061 | ||
| 1021 | return devm_of_platform_populate(dev); | 1062 | return of_platform_populate(dev->of_node, NULL, NULL, dev); |
| 1022 | } | 1063 | } |
| 1023 | 1064 | ||
| 1024 | static const struct of_device_id scpi_of_match[] = { | 1065 | static const struct of_device_id scpi_of_match[] = { |
| @@ -1035,6 +1076,7 @@ static struct platform_driver scpi_driver = { | |||
| 1035 | .of_match_table = scpi_of_match, | 1076 | .of_match_table = scpi_of_match, |
| 1036 | }, | 1077 | }, |
| 1037 | .probe = scpi_probe, | 1078 | .probe = scpi_probe, |
| 1079 | .remove = scpi_remove, | ||
| 1038 | }; | 1080 | }; |
| 1039 | module_platform_driver(scpi_driver); | 1081 | module_platform_driver(scpi_driver); |
| 1040 | 1082 | ||
diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c index f70febf680c3..557a47829d03 100644 --- a/drivers/firmware/efi/efi.c +++ b/drivers/firmware/efi/efi.c | |||
| @@ -109,6 +109,8 @@ struct kobject *efi_kobj; | |||
| 109 | /* | 109 | /* |
| 110 | * Let's not leave out systab information that snuck into | 110 | * Let's not leave out systab information that snuck into |
| 111 | * the efivars driver | 111 | * the efivars driver |
| 112 | * Note, do not add more fields in systab sysfs file as it breaks sysfs | ||
| 113 | * one value per file rule! | ||
| 112 | */ | 114 | */ |
| 113 | static ssize_t systab_show(struct kobject *kobj, | 115 | static ssize_t systab_show(struct kobject *kobj, |
| 114 | struct kobj_attribute *attr, char *buf) | 116 | struct kobj_attribute *attr, char *buf) |
| @@ -143,8 +145,7 @@ static ssize_t systab_show(struct kobject *kobj, | |||
| 143 | return str - buf; | 145 | return str - buf; |
| 144 | } | 146 | } |
| 145 | 147 | ||
| 146 | static struct kobj_attribute efi_attr_systab = | 148 | static struct kobj_attribute efi_attr_systab = __ATTR_RO_MODE(systab, 0400); |
| 147 | __ATTR(systab, 0400, systab_show, NULL); | ||
| 148 | 149 | ||
| 149 | #define EFI_FIELD(var) efi.var | 150 | #define EFI_FIELD(var) efi.var |
| 150 | 151 | ||
diff --git a/drivers/firmware/efi/esrt.c b/drivers/firmware/efi/esrt.c index bd7ed3c1148a..c47e0c6ec00f 100644 --- a/drivers/firmware/efi/esrt.c +++ b/drivers/firmware/efi/esrt.c | |||
| @@ -106,7 +106,7 @@ static const struct sysfs_ops esre_attr_ops = { | |||
| 106 | }; | 106 | }; |
| 107 | 107 | ||
| 108 | /* Generic ESRT Entry ("ESRE") support. */ | 108 | /* Generic ESRT Entry ("ESRE") support. */ |
| 109 | static ssize_t esre_fw_class_show(struct esre_entry *entry, char *buf) | 109 | static ssize_t fw_class_show(struct esre_entry *entry, char *buf) |
| 110 | { | 110 | { |
| 111 | char *str = buf; | 111 | char *str = buf; |
| 112 | 112 | ||
| @@ -117,18 +117,16 @@ static ssize_t esre_fw_class_show(struct esre_entry *entry, char *buf) | |||
| 117 | return str - buf; | 117 | return str - buf; |
| 118 | } | 118 | } |
| 119 | 119 | ||
| 120 | static struct esre_attribute esre_fw_class = __ATTR(fw_class, 0400, | 120 | static struct esre_attribute esre_fw_class = __ATTR_RO_MODE(fw_class, 0400); |
| 121 | esre_fw_class_show, NULL); | ||
| 122 | 121 | ||
| 123 | #define esre_attr_decl(name, size, fmt) \ | 122 | #define esre_attr_decl(name, size, fmt) \ |
| 124 | static ssize_t esre_##name##_show(struct esre_entry *entry, char *buf) \ | 123 | static ssize_t name##_show(struct esre_entry *entry, char *buf) \ |
| 125 | { \ | 124 | { \ |
| 126 | return sprintf(buf, fmt "\n", \ | 125 | return sprintf(buf, fmt "\n", \ |
| 127 | le##size##_to_cpu(entry->esre.esre1->name)); \ | 126 | le##size##_to_cpu(entry->esre.esre1->name)); \ |
| 128 | } \ | 127 | } \ |
| 129 | \ | 128 | \ |
| 130 | static struct esre_attribute esre_##name = __ATTR(name, 0400, \ | 129 | static struct esre_attribute esre_##name = __ATTR_RO_MODE(name, 0400) |
| 131 | esre_##name##_show, NULL) | ||
| 132 | 130 | ||
| 133 | esre_attr_decl(fw_type, 32, "%u"); | 131 | esre_attr_decl(fw_type, 32, "%u"); |
| 134 | esre_attr_decl(fw_version, 32, "%u"); | 132 | esre_attr_decl(fw_version, 32, "%u"); |
| @@ -193,14 +191,13 @@ static int esre_create_sysfs_entry(void *esre, int entry_num) | |||
| 193 | 191 | ||
| 194 | /* support for displaying ESRT fields at the top level */ | 192 | /* support for displaying ESRT fields at the top level */ |
| 195 | #define esrt_attr_decl(name, size, fmt) \ | 193 | #define esrt_attr_decl(name, size, fmt) \ |
| 196 | static ssize_t esrt_##name##_show(struct kobject *kobj, \ | 194 | static ssize_t name##_show(struct kobject *kobj, \ |
| 197 | struct kobj_attribute *attr, char *buf)\ | 195 | struct kobj_attribute *attr, char *buf)\ |
| 198 | { \ | 196 | { \ |
| 199 | return sprintf(buf, fmt "\n", le##size##_to_cpu(esrt->name)); \ | 197 | return sprintf(buf, fmt "\n", le##size##_to_cpu(esrt->name)); \ |
| 200 | } \ | 198 | } \ |
| 201 | \ | 199 | \ |
| 202 | static struct kobj_attribute esrt_##name = __ATTR(name, 0400, \ | 200 | static struct kobj_attribute esrt_##name = __ATTR_RO_MODE(name, 0400) |
| 203 | esrt_##name##_show, NULL) | ||
| 204 | 201 | ||
| 205 | esrt_attr_decl(fw_resource_count, 32, "%u"); | 202 | esrt_attr_decl(fw_resource_count, 32, "%u"); |
| 206 | esrt_attr_decl(fw_resource_count_max, 32, "%u"); | 203 | esrt_attr_decl(fw_resource_count_max, 32, "%u"); |
| @@ -431,7 +428,7 @@ err_remove_group: | |||
| 431 | err_remove_esrt: | 428 | err_remove_esrt: |
| 432 | kobject_put(esrt_kobj); | 429 | kobject_put(esrt_kobj); |
| 433 | err: | 430 | err: |
| 434 | kfree(esrt); | 431 | memunmap(esrt); |
| 435 | esrt = NULL; | 432 | esrt = NULL; |
| 436 | return error; | 433 | return error; |
| 437 | } | 434 | } |
diff --git a/drivers/firmware/efi/runtime-map.c b/drivers/firmware/efi/runtime-map.c index 8e64b77aeac9..f377609ff141 100644 --- a/drivers/firmware/efi/runtime-map.c +++ b/drivers/firmware/efi/runtime-map.c | |||
| @@ -63,11 +63,11 @@ static ssize_t map_attr_show(struct kobject *kobj, struct attribute *attr, | |||
| 63 | return map_attr->show(entry, buf); | 63 | return map_attr->show(entry, buf); |
| 64 | } | 64 | } |
| 65 | 65 | ||
| 66 | static struct map_attribute map_type_attr = __ATTR_RO(type); | 66 | static struct map_attribute map_type_attr = __ATTR_RO_MODE(type, 0400); |
| 67 | static struct map_attribute map_phys_addr_attr = __ATTR_RO(phys_addr); | 67 | static struct map_attribute map_phys_addr_attr = __ATTR_RO_MODE(phys_addr, 0400); |
| 68 | static struct map_attribute map_virt_addr_attr = __ATTR_RO(virt_addr); | 68 | static struct map_attribute map_virt_addr_attr = __ATTR_RO_MODE(virt_addr, 0400); |
| 69 | static struct map_attribute map_num_pages_attr = __ATTR_RO(num_pages); | 69 | static struct map_attribute map_num_pages_attr = __ATTR_RO_MODE(num_pages, 0400); |
| 70 | static struct map_attribute map_attribute_attr = __ATTR_RO(attribute); | 70 | static struct map_attribute map_attribute_attr = __ATTR_RO_MODE(attribute, 0400); |
| 71 | 71 | ||
| 72 | /* | 72 | /* |
| 73 | * These are default attributes that are added for every memmap entry. | 73 | * These are default attributes that are added for every memmap entry. |
diff --git a/drivers/firmware/google/vpd.c b/drivers/firmware/google/vpd.c index 35e553b3b190..e4b40f2b4627 100644 --- a/drivers/firmware/google/vpd.c +++ b/drivers/firmware/google/vpd.c | |||
| @@ -295,38 +295,60 @@ static int vpd_probe(struct platform_device *pdev) | |||
| 295 | if (ret) | 295 | if (ret) |
| 296 | return ret; | 296 | return ret; |
| 297 | 297 | ||
| 298 | return vpd_sections_init(entry.cbmem_addr); | 298 | vpd_kobj = kobject_create_and_add("vpd", firmware_kobj); |
| 299 | if (!vpd_kobj) | ||
| 300 | return -ENOMEM; | ||
| 301 | |||
| 302 | ret = vpd_sections_init(entry.cbmem_addr); | ||
| 303 | if (ret) { | ||
| 304 | kobject_put(vpd_kobj); | ||
| 305 | return ret; | ||
| 306 | } | ||
| 307 | |||
| 308 | return 0; | ||
| 309 | } | ||
| 310 | |||
| 311 | static int vpd_remove(struct platform_device *pdev) | ||
| 312 | { | ||
| 313 | vpd_section_destroy(&ro_vpd); | ||
| 314 | vpd_section_destroy(&rw_vpd); | ||
| 315 | |||
| 316 | kobject_put(vpd_kobj); | ||
| 317 | |||
| 318 | return 0; | ||
| 299 | } | 319 | } |
| 300 | 320 | ||
| 301 | static struct platform_driver vpd_driver = { | 321 | static struct platform_driver vpd_driver = { |
| 302 | .probe = vpd_probe, | 322 | .probe = vpd_probe, |
| 323 | .remove = vpd_remove, | ||
| 303 | .driver = { | 324 | .driver = { |
| 304 | .name = "vpd", | 325 | .name = "vpd", |
| 305 | }, | 326 | }, |
| 306 | }; | 327 | }; |
| 307 | 328 | ||
| 329 | static struct platform_device *vpd_pdev; | ||
| 330 | |||
| 308 | static int __init vpd_platform_init(void) | 331 | static int __init vpd_platform_init(void) |
| 309 | { | 332 | { |
| 310 | struct platform_device *pdev; | 333 | int ret; |
| 311 | |||
| 312 | pdev = platform_device_register_simple("vpd", -1, NULL, 0); | ||
| 313 | if (IS_ERR(pdev)) | ||
| 314 | return PTR_ERR(pdev); | ||
| 315 | 334 | ||
| 316 | vpd_kobj = kobject_create_and_add("vpd", firmware_kobj); | 335 | ret = platform_driver_register(&vpd_driver); |
| 317 | if (!vpd_kobj) | 336 | if (ret) |
| 318 | return -ENOMEM; | 337 | return ret; |
| 319 | 338 | ||
| 320 | platform_driver_register(&vpd_driver); | 339 | vpd_pdev = platform_device_register_simple("vpd", -1, NULL, 0); |
| 340 | if (IS_ERR(vpd_pdev)) { | ||
| 341 | platform_driver_unregister(&vpd_driver); | ||
| 342 | return PTR_ERR(vpd_pdev); | ||
| 343 | } | ||
| 321 | 344 | ||
| 322 | return 0; | 345 | return 0; |
| 323 | } | 346 | } |
| 324 | 347 | ||
| 325 | static void __exit vpd_platform_exit(void) | 348 | static void __exit vpd_platform_exit(void) |
| 326 | { | 349 | { |
| 327 | vpd_section_destroy(&ro_vpd); | 350 | platform_device_unregister(vpd_pdev); |
| 328 | vpd_section_destroy(&rw_vpd); | 351 | platform_driver_unregister(&vpd_driver); |
| 329 | kobject_put(vpd_kobj); | ||
| 330 | } | 352 | } |
| 331 | 353 | ||
| 332 | module_init(vpd_platform_init); | 354 | module_init(vpd_platform_init); |
diff --git a/drivers/firmware/qemu_fw_cfg.c b/drivers/firmware/qemu_fw_cfg.c index 5cfe39f7a45f..deb483064f53 100644 --- a/drivers/firmware/qemu_fw_cfg.c +++ b/drivers/firmware/qemu_fw_cfg.c | |||
| @@ -582,9 +582,10 @@ static int fw_cfg_sysfs_remove(struct platform_device *pdev) | |||
| 582 | { | 582 | { |
| 583 | pr_debug("fw_cfg: unloading.\n"); | 583 | pr_debug("fw_cfg: unloading.\n"); |
| 584 | fw_cfg_sysfs_cache_cleanup(); | 584 | fw_cfg_sysfs_cache_cleanup(); |
| 585 | sysfs_remove_file(fw_cfg_top_ko, &fw_cfg_rev_attr.attr); | ||
| 586 | fw_cfg_io_cleanup(); | ||
| 585 | fw_cfg_kset_unregister_recursive(fw_cfg_fname_kset); | 587 | fw_cfg_kset_unregister_recursive(fw_cfg_fname_kset); |
| 586 | fw_cfg_kobj_cleanup(fw_cfg_sel_ko); | 588 | fw_cfg_kobj_cleanup(fw_cfg_sel_ko); |
| 587 | fw_cfg_io_cleanup(); | ||
| 588 | return 0; | 589 | return 0; |
| 589 | } | 590 | } |
| 590 | 591 | ||
diff --git a/drivers/gpio/gpio-74x164.c b/drivers/gpio/gpio-74x164.c index 6b535ec858cc..15a1f4b348c4 100644 --- a/drivers/gpio/gpio-74x164.c +++ b/drivers/gpio/gpio-74x164.c | |||
| @@ -23,6 +23,7 @@ | |||
| 23 | struct gen_74x164_chip { | 23 | struct gen_74x164_chip { |
| 24 | struct gpio_chip gpio_chip; | 24 | struct gpio_chip gpio_chip; |
| 25 | struct mutex lock; | 25 | struct mutex lock; |
| 26 | struct gpio_desc *gpiod_oe; | ||
| 26 | u32 registers; | 27 | u32 registers; |
| 27 | /* | 28 | /* |
| 28 | * Since the registers are chained, every byte sent will make | 29 | * Since the registers are chained, every byte sent will make |
| @@ -31,8 +32,7 @@ struct gen_74x164_chip { | |||
| 31 | * register at the end of the transfer. So, to have a logical | 32 | * register at the end of the transfer. So, to have a logical |
| 32 | * numbering, store the bytes in reverse order. | 33 | * numbering, store the bytes in reverse order. |
| 33 | */ | 34 | */ |
| 34 | u8 buffer[0]; | 35 | u8 buffer[]; |
| 35 | struct gpio_desc *gpiod_oe; | ||
| 36 | }; | 36 | }; |
| 37 | 37 | ||
| 38 | static int __gen_74x164_write_config(struct gen_74x164_chip *chip) | 38 | static int __gen_74x164_write_config(struct gen_74x164_chip *chip) |
diff --git a/drivers/gpio/gpio-davinci.c b/drivers/gpio/gpio-davinci.c index f75d8443ecaf..e4b3d7db68c9 100644 --- a/drivers/gpio/gpio-davinci.c +++ b/drivers/gpio/gpio-davinci.c | |||
| @@ -383,7 +383,7 @@ static int gpio_irq_type_unbanked(struct irq_data *data, unsigned trigger) | |||
| 383 | u32 mask; | 383 | u32 mask; |
| 384 | 384 | ||
| 385 | d = (struct davinci_gpio_controller *)irq_data_get_irq_handler_data(data); | 385 | d = (struct davinci_gpio_controller *)irq_data_get_irq_handler_data(data); |
| 386 | g = (struct davinci_gpio_regs __iomem *)d->regs; | 386 | g = (struct davinci_gpio_regs __iomem *)d->regs[0]; |
| 387 | mask = __gpio_mask(data->irq - d->base_irq); | 387 | mask = __gpio_mask(data->irq - d->base_irq); |
| 388 | 388 | ||
| 389 | if (trigger & ~(IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING)) | 389 | if (trigger & ~(IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING)) |
diff --git a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c index babb7bd2ba59..a0a5f9730aa7 100644 --- a/drivers/gpio/gpio-pca953x.c +++ b/drivers/gpio/gpio-pca953x.c | |||
| @@ -947,7 +947,7 @@ static const struct of_device_id pca953x_dt_ids[] = { | |||
| 947 | { .compatible = "ti,tca6416", .data = OF_953X(16, PCA_INT), }, | 947 | { .compatible = "ti,tca6416", .data = OF_953X(16, PCA_INT), }, |
| 948 | { .compatible = "ti,tca6424", .data = OF_953X(24, PCA_INT), }, | 948 | { .compatible = "ti,tca6424", .data = OF_953X(24, PCA_INT), }, |
| 949 | 949 | ||
| 950 | { .compatible = "onsemi,pca9654", .data = OF_953X( 8, PCA_INT), }, | 950 | { .compatible = "onnn,pca9654", .data = OF_953X( 8, PCA_INT), }, |
| 951 | 951 | ||
| 952 | { .compatible = "exar,xra1202", .data = OF_953X( 8, 0), }, | 952 | { .compatible = "exar,xra1202", .data = OF_953X( 8, 0), }, |
| 953 | { } | 953 | { } |
diff --git a/drivers/gpu/drm/amd/acp/Makefile b/drivers/gpu/drm/amd/acp/Makefile index 8a08e81ee90d..d4176a3fb706 100644 --- a/drivers/gpu/drm/amd/acp/Makefile +++ b/drivers/gpu/drm/amd/acp/Makefile | |||
| @@ -1,4 +1,25 @@ | |||
| 1 | # | 1 | # |
| 2 | # Copyright 2017 Advanced Micro Devices, Inc. | ||
| 3 | # | ||
| 4 | # Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | # copy of this software and associated documentation files (the "Software"), | ||
| 6 | # to deal in the Software without restriction, including without limitation | ||
| 7 | # the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | # and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | # Software is furnished to do so, subject to the following conditions: | ||
| 10 | # | ||
| 11 | # The above copyright notice and this permission notice shall be included in | ||
| 12 | # all copies or substantial portions of the Software. | ||
| 13 | # | ||
| 14 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | # THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | # OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | # | ||
| 22 | # | ||
| 2 | # Makefile for the ACP, which is a sub-component | 23 | # Makefile for the ACP, which is a sub-component |
| 3 | # of AMDSOC/AMDGPU drm driver. | 24 | # of AMDSOC/AMDGPU drm driver. |
| 4 | # It provides the HW control for ACP related functionalities. | 25 | # It provides the HW control for ACP related functionalities. |
diff --git a/drivers/gpu/drm/amd/amdgpu/Makefile b/drivers/gpu/drm/amd/amdgpu/Makefile index 78d609123420..90202cf4cd1e 100644 --- a/drivers/gpu/drm/amd/amdgpu/Makefile +++ b/drivers/gpu/drm/amd/amdgpu/Makefile | |||
| @@ -1,4 +1,24 @@ | |||
| 1 | # SPDX-License-Identifier: GPL-2.0 | 1 | # |
| 2 | # Copyright 2017 Advanced Micro Devices, Inc. | ||
| 3 | # | ||
| 4 | # Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | # copy of this software and associated documentation files (the "Software"), | ||
| 6 | # to deal in the Software without restriction, including without limitation | ||
| 7 | # the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | # and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | # Software is furnished to do so, subject to the following conditions: | ||
| 10 | # | ||
| 11 | # The above copyright notice and this permission notice shall be included in | ||
| 12 | # all copies or substantial portions of the Software. | ||
| 13 | # | ||
| 14 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | # THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | # OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | # | ||
| 2 | # | 22 | # |
| 3 | # Makefile for the drm device driver. This driver provides support for the | 23 | # Makefile for the drm device driver. This driver provides support for the |
| 4 | # Direct Rendering Infrastructure (DRI) in XFree86 4.1.0 and higher. | 24 | # Direct Rendering Infrastructure (DRI) in XFree86 4.1.0 and higher. |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h index 5afaf6016b4a..0b14b5373783 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h | |||
| @@ -717,7 +717,7 @@ int amdgpu_queue_mgr_fini(struct amdgpu_device *adev, | |||
| 717 | struct amdgpu_queue_mgr *mgr); | 717 | struct amdgpu_queue_mgr *mgr); |
| 718 | int amdgpu_queue_mgr_map(struct amdgpu_device *adev, | 718 | int amdgpu_queue_mgr_map(struct amdgpu_device *adev, |
| 719 | struct amdgpu_queue_mgr *mgr, | 719 | struct amdgpu_queue_mgr *mgr, |
| 720 | int hw_ip, int instance, int ring, | 720 | u32 hw_ip, u32 instance, u32 ring, |
| 721 | struct amdgpu_ring **out_ring); | 721 | struct amdgpu_ring **out_ring); |
| 722 | 722 | ||
| 723 | /* | 723 | /* |
| @@ -1572,18 +1572,14 @@ struct amdgpu_device { | |||
| 1572 | /* sdma */ | 1572 | /* sdma */ |
| 1573 | struct amdgpu_sdma sdma; | 1573 | struct amdgpu_sdma sdma; |
| 1574 | 1574 | ||
| 1575 | union { | 1575 | /* uvd */ |
| 1576 | struct { | 1576 | struct amdgpu_uvd uvd; |
| 1577 | /* uvd */ | ||
| 1578 | struct amdgpu_uvd uvd; | ||
| 1579 | 1577 | ||
| 1580 | /* vce */ | 1578 | /* vce */ |
| 1581 | struct amdgpu_vce vce; | 1579 | struct amdgpu_vce vce; |
| 1582 | }; | ||
| 1583 | 1580 | ||
| 1584 | /* vcn */ | 1581 | /* vcn */ |
| 1585 | struct amdgpu_vcn vcn; | 1582 | struct amdgpu_vcn vcn; |
| 1586 | }; | ||
| 1587 | 1583 | ||
| 1588 | /* firmwares */ | 1584 | /* firmwares */ |
| 1589 | struct amdgpu_firmware firmware; | 1585 | struct amdgpu_firmware firmware; |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c index 47d1c132ac40..1e3e9be7d77e 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c | |||
| @@ -379,29 +379,50 @@ static int kgd_hqd_sdma_load(struct kgd_dev *kgd, void *mqd) | |||
| 379 | { | 379 | { |
| 380 | struct amdgpu_device *adev = get_amdgpu_device(kgd); | 380 | struct amdgpu_device *adev = get_amdgpu_device(kgd); |
| 381 | struct cik_sdma_rlc_registers *m; | 381 | struct cik_sdma_rlc_registers *m; |
| 382 | unsigned long end_jiffies; | ||
| 382 | uint32_t sdma_base_addr; | 383 | uint32_t sdma_base_addr; |
| 384 | uint32_t data; | ||
| 383 | 385 | ||
| 384 | m = get_sdma_mqd(mqd); | 386 | m = get_sdma_mqd(mqd); |
| 385 | sdma_base_addr = get_sdma_base_addr(m); | 387 | sdma_base_addr = get_sdma_base_addr(m); |
| 386 | 388 | ||
| 387 | WREG32(sdma_base_addr + mmSDMA0_RLC0_VIRTUAL_ADDR, | 389 | WREG32(sdma_base_addr + mmSDMA0_RLC0_RB_CNTL, |
| 388 | m->sdma_rlc_virtual_addr); | 390 | m->sdma_rlc_rb_cntl & (~SDMA0_RLC0_RB_CNTL__RB_ENABLE_MASK)); |
| 389 | 391 | ||
| 390 | WREG32(sdma_base_addr + mmSDMA0_RLC0_RB_BASE, | 392 | end_jiffies = msecs_to_jiffies(2000) + jiffies; |
| 391 | m->sdma_rlc_rb_base); | 393 | while (true) { |
| 394 | data = RREG32(sdma_base_addr + mmSDMA0_RLC0_CONTEXT_STATUS); | ||
| 395 | if (data & SDMA0_RLC0_CONTEXT_STATUS__IDLE_MASK) | ||
| 396 | break; | ||
| 397 | if (time_after(jiffies, end_jiffies)) | ||
| 398 | return -ETIME; | ||
| 399 | usleep_range(500, 1000); | ||
| 400 | } | ||
| 401 | if (m->sdma_engine_id) { | ||
| 402 | data = RREG32(mmSDMA1_GFX_CONTEXT_CNTL); | ||
| 403 | data = REG_SET_FIELD(data, SDMA1_GFX_CONTEXT_CNTL, | ||
| 404 | RESUME_CTX, 0); | ||
| 405 | WREG32(mmSDMA1_GFX_CONTEXT_CNTL, data); | ||
| 406 | } else { | ||
| 407 | data = RREG32(mmSDMA0_GFX_CONTEXT_CNTL); | ||
| 408 | data = REG_SET_FIELD(data, SDMA0_GFX_CONTEXT_CNTL, | ||
| 409 | RESUME_CTX, 0); | ||
| 410 | WREG32(mmSDMA0_GFX_CONTEXT_CNTL, data); | ||
| 411 | } | ||
| 392 | 412 | ||
| 413 | WREG32(sdma_base_addr + mmSDMA0_RLC0_DOORBELL, | ||
| 414 | m->sdma_rlc_doorbell); | ||
| 415 | WREG32(sdma_base_addr + mmSDMA0_RLC0_RB_RPTR, 0); | ||
| 416 | WREG32(sdma_base_addr + mmSDMA0_RLC0_RB_WPTR, 0); | ||
| 417 | WREG32(sdma_base_addr + mmSDMA0_RLC0_VIRTUAL_ADDR, | ||
| 418 | m->sdma_rlc_virtual_addr); | ||
| 419 | WREG32(sdma_base_addr + mmSDMA0_RLC0_RB_BASE, m->sdma_rlc_rb_base); | ||
| 393 | WREG32(sdma_base_addr + mmSDMA0_RLC0_RB_BASE_HI, | 420 | WREG32(sdma_base_addr + mmSDMA0_RLC0_RB_BASE_HI, |
| 394 | m->sdma_rlc_rb_base_hi); | 421 | m->sdma_rlc_rb_base_hi); |
| 395 | |||
| 396 | WREG32(sdma_base_addr + mmSDMA0_RLC0_RB_RPTR_ADDR_LO, | 422 | WREG32(sdma_base_addr + mmSDMA0_RLC0_RB_RPTR_ADDR_LO, |
| 397 | m->sdma_rlc_rb_rptr_addr_lo); | 423 | m->sdma_rlc_rb_rptr_addr_lo); |
| 398 | |||
| 399 | WREG32(sdma_base_addr + mmSDMA0_RLC0_RB_RPTR_ADDR_HI, | 424 | WREG32(sdma_base_addr + mmSDMA0_RLC0_RB_RPTR_ADDR_HI, |
| 400 | m->sdma_rlc_rb_rptr_addr_hi); | 425 | m->sdma_rlc_rb_rptr_addr_hi); |
| 401 | |||
| 402 | WREG32(sdma_base_addr + mmSDMA0_RLC0_DOORBELL, | ||
| 403 | m->sdma_rlc_doorbell); | ||
| 404 | |||
| 405 | WREG32(sdma_base_addr + mmSDMA0_RLC0_RB_CNTL, | 426 | WREG32(sdma_base_addr + mmSDMA0_RLC0_RB_CNTL, |
| 406 | m->sdma_rlc_rb_cntl); | 427 | m->sdma_rlc_rb_cntl); |
| 407 | 428 | ||
| @@ -574,9 +595,9 @@ static int kgd_hqd_sdma_destroy(struct kgd_dev *kgd, void *mqd, | |||
| 574 | } | 595 | } |
| 575 | 596 | ||
| 576 | WREG32(sdma_base_addr + mmSDMA0_RLC0_DOORBELL, 0); | 597 | WREG32(sdma_base_addr + mmSDMA0_RLC0_DOORBELL, 0); |
| 577 | WREG32(sdma_base_addr + mmSDMA0_RLC0_RB_RPTR, 0); | 598 | WREG32(sdma_base_addr + mmSDMA0_RLC0_RB_CNTL, |
| 578 | WREG32(sdma_base_addr + mmSDMA0_RLC0_RB_WPTR, 0); | 599 | RREG32(sdma_base_addr + mmSDMA0_RLC0_RB_CNTL) | |
| 579 | WREG32(sdma_base_addr + mmSDMA0_RLC0_RB_BASE, 0); | 600 | SDMA0_RLC0_RB_CNTL__RB_ENABLE_MASK); |
| 580 | 601 | ||
| 581 | return 0; | 602 | return 0; |
| 582 | } | 603 | } |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c index a57cec737c18..57abf7abd7a9 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | |||
| @@ -409,6 +409,10 @@ static bool amdgpu_cs_try_evict(struct amdgpu_cs_parser *p, | |||
| 409 | if (candidate->robj == validated) | 409 | if (candidate->robj == validated) |
| 410 | break; | 410 | break; |
| 411 | 411 | ||
| 412 | /* We can't move pinned BOs here */ | ||
| 413 | if (bo->pin_count) | ||
| 414 | continue; | ||
| 415 | |||
| 412 | other = amdgpu_mem_type_to_domain(bo->tbo.mem.mem_type); | 416 | other = amdgpu_mem_type_to_domain(bo->tbo.mem.mem_type); |
| 413 | 417 | ||
| 414 | /* Check if this BO is in one of the domains we need space for */ | 418 | /* Check if this BO is in one of the domains we need space for */ |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c index 2c574374d9b6..3573ecdb06ee 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | |||
| @@ -1837,9 +1837,6 @@ static int amdgpu_fini(struct amdgpu_device *adev) | |||
| 1837 | adev->ip_blocks[i].status.hw = false; | 1837 | adev->ip_blocks[i].status.hw = false; |
| 1838 | } | 1838 | } |
| 1839 | 1839 | ||
| 1840 | if (adev->firmware.load_type == AMDGPU_FW_LOAD_SMU) | ||
| 1841 | amdgpu_ucode_fini_bo(adev); | ||
| 1842 | |||
| 1843 | for (i = adev->num_ip_blocks - 1; i >= 0; i--) { | 1840 | for (i = adev->num_ip_blocks - 1; i >= 0; i--) { |
| 1844 | if (!adev->ip_blocks[i].status.sw) | 1841 | if (!adev->ip_blocks[i].status.sw) |
| 1845 | continue; | 1842 | continue; |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c index ec96bb1f9eaf..c2f414ffb2cc 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | |||
| @@ -536,7 +536,7 @@ static const struct pci_device_id pciidlist[] = { | |||
| 536 | {0x1002, 0x686c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VEGA10}, | 536 | {0x1002, 0x686c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VEGA10}, |
| 537 | {0x1002, 0x687f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VEGA10}, | 537 | {0x1002, 0x687f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VEGA10}, |
| 538 | /* Raven */ | 538 | /* Raven */ |
| 539 | {0x1002, 0x15dd, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RAVEN|AMD_IS_APU|AMD_EXP_HW_SUPPORT}, | 539 | {0x1002, 0x15dd, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RAVEN|AMD_IS_APU}, |
| 540 | 540 | ||
| 541 | {0, 0, 0} | 541 | {0, 0, 0} |
| 542 | }; | 542 | }; |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c index 6c570d4e4516..f8edf5483f11 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c | |||
| @@ -1,4 +1,6 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Copyright 2017 Advanced Micro Devices, Inc. | ||
| 3 | * | ||
| 2 | * Permission is hereby granted, free of charge, to any person obtaining a | 4 | * Permission is hereby granted, free of charge, to any person obtaining a |
| 3 | * copy of this software and associated documentation files (the "Software"), | 5 | * copy of this software and associated documentation files (the "Software"), |
| 4 | * to deal in the Software without restriction, including without limitation | 6 | * to deal in the Software without restriction, including without limitation |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.c index 033fba2def6f..5f5aa5fddc16 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.c | |||
| @@ -164,6 +164,9 @@ static int amdgpu_pp_hw_fini(void *handle) | |||
| 164 | ret = adev->powerplay.ip_funcs->hw_fini( | 164 | ret = adev->powerplay.ip_funcs->hw_fini( |
| 165 | adev->powerplay.pp_handle); | 165 | adev->powerplay.pp_handle); |
| 166 | 166 | ||
| 167 | if (adev->firmware.load_type == AMDGPU_FW_LOAD_SMU) | ||
| 168 | amdgpu_ucode_fini_bo(adev); | ||
| 169 | |||
| 167 | return ret; | 170 | return ret; |
| 168 | } | 171 | } |
| 169 | 172 | ||
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c index 7714f4a6c8b0..447d446b5015 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | |||
| @@ -442,6 +442,8 @@ static int psp_hw_fini(void *handle) | |||
| 442 | if (adev->firmware.load_type != AMDGPU_FW_LOAD_PSP) | 442 | if (adev->firmware.load_type != AMDGPU_FW_LOAD_PSP) |
| 443 | return 0; | 443 | return 0; |
| 444 | 444 | ||
| 445 | amdgpu_ucode_fini_bo(adev); | ||
| 446 | |||
| 445 | psp_ring_destroy(psp, PSP_RING_TYPE__KM); | 447 | psp_ring_destroy(psp, PSP_RING_TYPE__KM); |
| 446 | 448 | ||
| 447 | amdgpu_bo_free_kernel(&psp->tmr_bo, &psp->tmr_mc_addr, &psp->tmr_buf); | 449 | amdgpu_bo_free_kernel(&psp->tmr_bo, &psp->tmr_mc_addr, &psp->tmr_buf); |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_queue_mgr.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_queue_mgr.c index 190e28cb827e..93d86619e802 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_queue_mgr.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_queue_mgr.c | |||
| @@ -63,7 +63,7 @@ static int amdgpu_update_cached_map(struct amdgpu_queue_mapper *mapper, | |||
| 63 | 63 | ||
| 64 | static int amdgpu_identity_map(struct amdgpu_device *adev, | 64 | static int amdgpu_identity_map(struct amdgpu_device *adev, |
| 65 | struct amdgpu_queue_mapper *mapper, | 65 | struct amdgpu_queue_mapper *mapper, |
| 66 | int ring, | 66 | u32 ring, |
| 67 | struct amdgpu_ring **out_ring) | 67 | struct amdgpu_ring **out_ring) |
| 68 | { | 68 | { |
| 69 | switch (mapper->hw_ip) { | 69 | switch (mapper->hw_ip) { |
| @@ -121,7 +121,7 @@ static enum amdgpu_ring_type amdgpu_hw_ip_to_ring_type(int hw_ip) | |||
| 121 | 121 | ||
| 122 | static int amdgpu_lru_map(struct amdgpu_device *adev, | 122 | static int amdgpu_lru_map(struct amdgpu_device *adev, |
| 123 | struct amdgpu_queue_mapper *mapper, | 123 | struct amdgpu_queue_mapper *mapper, |
| 124 | int user_ring, bool lru_pipe_order, | 124 | u32 user_ring, bool lru_pipe_order, |
| 125 | struct amdgpu_ring **out_ring) | 125 | struct amdgpu_ring **out_ring) |
| 126 | { | 126 | { |
| 127 | int r, i, j; | 127 | int r, i, j; |
| @@ -208,7 +208,7 @@ int amdgpu_queue_mgr_fini(struct amdgpu_device *adev, | |||
| 208 | */ | 208 | */ |
| 209 | int amdgpu_queue_mgr_map(struct amdgpu_device *adev, | 209 | int amdgpu_queue_mgr_map(struct amdgpu_device *adev, |
| 210 | struct amdgpu_queue_mgr *mgr, | 210 | struct amdgpu_queue_mgr *mgr, |
| 211 | int hw_ip, int instance, int ring, | 211 | u32 hw_ip, u32 instance, u32 ring, |
| 212 | struct amdgpu_ring **out_ring) | 212 | struct amdgpu_ring **out_ring) |
| 213 | { | 213 | { |
| 214 | int r, ip_num_rings; | 214 | int r, ip_num_rings; |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h index f337c316ec2c..06525f2c36c3 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h | |||
| @@ -1,4 +1,26 @@ | |||
| 1 | /* SPDX-License-Identifier: GPL-2.0 */ | 1 | /* |
| 2 | * Copyright 2017 Advanced Micro Devices, Inc. | ||
| 3 | * | ||
| 4 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | * copy of this software and associated documentation files (the "Software"), | ||
| 6 | * to deal in the Software without restriction, including without limitation | ||
| 7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | * and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | * Software is furnished to do so, subject to the following conditions: | ||
| 10 | * | ||
| 11 | * The above copyright notice and this permission notice shall be included in | ||
| 12 | * all copies or substantial portions of the Software. | ||
| 13 | * | ||
| 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | * OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | * | ||
| 22 | */ | ||
| 23 | |||
| 2 | #if !defined(_AMDGPU_TRACE_H) || defined(TRACE_HEADER_MULTI_READ) | 24 | #if !defined(_AMDGPU_TRACE_H) || defined(TRACE_HEADER_MULTI_READ) |
| 3 | #define _AMDGPU_TRACE_H_ | 25 | #define _AMDGPU_TRACE_H_ |
| 4 | 26 | ||
diff --git a/drivers/gpu/drm/amd/amdgpu/cik.c b/drivers/gpu/drm/amd/amdgpu/cik.c index 793b1470284d..a296f7bbe57c 100644 --- a/drivers/gpu/drm/amd/amdgpu/cik.c +++ b/drivers/gpu/drm/amd/amdgpu/cik.c | |||
| @@ -1023,22 +1023,101 @@ static const struct amdgpu_allowed_register_entry cik_allowed_read_registers[] = | |||
| 1023 | {mmPA_SC_RASTER_CONFIG_1, true}, | 1023 | {mmPA_SC_RASTER_CONFIG_1, true}, |
| 1024 | }; | 1024 | }; |
| 1025 | 1025 | ||
| 1026 | static uint32_t cik_read_indexed_register(struct amdgpu_device *adev, | 1026 | |
| 1027 | u32 se_num, u32 sh_num, | 1027 | static uint32_t cik_get_register_value(struct amdgpu_device *adev, |
| 1028 | u32 reg_offset) | 1028 | bool indexed, u32 se_num, |
| 1029 | u32 sh_num, u32 reg_offset) | ||
| 1029 | { | 1030 | { |
| 1030 | uint32_t val; | 1031 | if (indexed) { |
| 1032 | uint32_t val; | ||
| 1033 | unsigned se_idx = (se_num == 0xffffffff) ? 0 : se_num; | ||
| 1034 | unsigned sh_idx = (sh_num == 0xffffffff) ? 0 : sh_num; | ||
| 1035 | |||
| 1036 | switch (reg_offset) { | ||
| 1037 | case mmCC_RB_BACKEND_DISABLE: | ||
| 1038 | return adev->gfx.config.rb_config[se_idx][sh_idx].rb_backend_disable; | ||
| 1039 | case mmGC_USER_RB_BACKEND_DISABLE: | ||
| 1040 | return adev->gfx.config.rb_config[se_idx][sh_idx].user_rb_backend_disable; | ||
| 1041 | case mmPA_SC_RASTER_CONFIG: | ||
| 1042 | return adev->gfx.config.rb_config[se_idx][sh_idx].raster_config; | ||
| 1043 | case mmPA_SC_RASTER_CONFIG_1: | ||
| 1044 | return adev->gfx.config.rb_config[se_idx][sh_idx].raster_config_1; | ||
| 1045 | } | ||
| 1031 | 1046 | ||
| 1032 | mutex_lock(&adev->grbm_idx_mutex); | 1047 | mutex_lock(&adev->grbm_idx_mutex); |
| 1033 | if (se_num != 0xffffffff || sh_num != 0xffffffff) | 1048 | if (se_num != 0xffffffff || sh_num != 0xffffffff) |
| 1034 | amdgpu_gfx_select_se_sh(adev, se_num, sh_num, 0xffffffff); | 1049 | amdgpu_gfx_select_se_sh(adev, se_num, sh_num, 0xffffffff); |
| 1035 | 1050 | ||
| 1036 | val = RREG32(reg_offset); | 1051 | val = RREG32(reg_offset); |
| 1037 | 1052 | ||
| 1038 | if (se_num != 0xffffffff || sh_num != 0xffffffff) | 1053 | if (se_num != 0xffffffff || sh_num != 0xffffffff) |
| 1039 | amdgpu_gfx_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff); | 1054 | amdgpu_gfx_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff); |
| 1040 | mutex_unlock(&adev->grbm_idx_mutex); | 1055 | mutex_unlock(&adev->grbm_idx_mutex); |
| 1041 | return val; | 1056 | return val; |
| 1057 | } else { | ||
| 1058 | unsigned idx; | ||
| 1059 | |||
| 1060 | switch (reg_offset) { | ||
| 1061 | case mmGB_ADDR_CONFIG: | ||
| 1062 | return adev->gfx.config.gb_addr_config; | ||
| 1063 | case mmMC_ARB_RAMCFG: | ||
| 1064 | return adev->gfx.config.mc_arb_ramcfg; | ||
| 1065 | case mmGB_TILE_MODE0: | ||
| 1066 | case mmGB_TILE_MODE1: | ||
| 1067 | case mmGB_TILE_MODE2: | ||
| 1068 | case mmGB_TILE_MODE3: | ||
| 1069 | case mmGB_TILE_MODE4: | ||
| 1070 | case mmGB_TILE_MODE5: | ||
| 1071 | case mmGB_TILE_MODE6: | ||
| 1072 | case mmGB_TILE_MODE7: | ||
| 1073 | case mmGB_TILE_MODE8: | ||
| 1074 | case mmGB_TILE_MODE9: | ||
| 1075 | case mmGB_TILE_MODE10: | ||
| 1076 | case mmGB_TILE_MODE11: | ||
| 1077 | case mmGB_TILE_MODE12: | ||
| 1078 | case mmGB_TILE_MODE13: | ||
| 1079 | case mmGB_TILE_MODE14: | ||
| 1080 | case mmGB_TILE_MODE15: | ||
| 1081 | case mmGB_TILE_MODE16: | ||
| 1082 | case mmGB_TILE_MODE17: | ||
| 1083 | case mmGB_TILE_MODE18: | ||
| 1084 | case mmGB_TILE_MODE19: | ||
| 1085 | case mmGB_TILE_MODE20: | ||
| 1086 | case mmGB_TILE_MODE21: | ||
| 1087 | case mmGB_TILE_MODE22: | ||
| 1088 | case mmGB_TILE_MODE23: | ||
| 1089 | case mmGB_TILE_MODE24: | ||
| 1090 | case mmGB_TILE_MODE25: | ||
| 1091 | case mmGB_TILE_MODE26: | ||
| 1092 | case mmGB_TILE_MODE27: | ||
| 1093 | case mmGB_TILE_MODE28: | ||
| 1094 | case mmGB_TILE_MODE29: | ||
| 1095 | case mmGB_TILE_MODE30: | ||
| 1096 | case mmGB_TILE_MODE31: | ||
| 1097 | idx = (reg_offset - mmGB_TILE_MODE0); | ||
| 1098 | return adev->gfx.config.tile_mode_array[idx]; | ||
| 1099 | case mmGB_MACROTILE_MODE0: | ||
| 1100 | case mmGB_MACROTILE_MODE1: | ||
| 1101 | case mmGB_MACROTILE_MODE2: | ||
| 1102 | case mmGB_MACROTILE_MODE3: | ||
| 1103 | case mmGB_MACROTILE_MODE4: | ||
| 1104 | case mmGB_MACROTILE_MODE5: | ||
| 1105 | case mmGB_MACROTILE_MODE6: | ||
| 1106 | case mmGB_MACROTILE_MODE7: | ||
| 1107 | case mmGB_MACROTILE_MODE8: | ||
| 1108 | case mmGB_MACROTILE_MODE9: | ||
| 1109 | case mmGB_MACROTILE_MODE10: | ||
| 1110 | case mmGB_MACROTILE_MODE11: | ||
| 1111 | case mmGB_MACROTILE_MODE12: | ||
| 1112 | case mmGB_MACROTILE_MODE13: | ||
| 1113 | case mmGB_MACROTILE_MODE14: | ||
| 1114 | case mmGB_MACROTILE_MODE15: | ||
| 1115 | idx = (reg_offset - mmGB_MACROTILE_MODE0); | ||
| 1116 | return adev->gfx.config.macrotile_mode_array[idx]; | ||
| 1117 | default: | ||
| 1118 | return RREG32(reg_offset); | ||
| 1119 | } | ||
| 1120 | } | ||
| 1042 | } | 1121 | } |
| 1043 | 1122 | ||
| 1044 | static int cik_read_register(struct amdgpu_device *adev, u32 se_num, | 1123 | static int cik_read_register(struct amdgpu_device *adev, u32 se_num, |
| @@ -1048,13 +1127,13 @@ static int cik_read_register(struct amdgpu_device *adev, u32 se_num, | |||
| 1048 | 1127 | ||
| 1049 | *value = 0; | 1128 | *value = 0; |
| 1050 | for (i = 0; i < ARRAY_SIZE(cik_allowed_read_registers); i++) { | 1129 | for (i = 0; i < ARRAY_SIZE(cik_allowed_read_registers); i++) { |
| 1130 | bool indexed = cik_allowed_read_registers[i].grbm_indexed; | ||
| 1131 | |||
| 1051 | if (reg_offset != cik_allowed_read_registers[i].reg_offset) | 1132 | if (reg_offset != cik_allowed_read_registers[i].reg_offset) |
| 1052 | continue; | 1133 | continue; |
| 1053 | 1134 | ||
| 1054 | *value = cik_allowed_read_registers[i].grbm_indexed ? | 1135 | *value = cik_get_register_value(adev, indexed, se_num, sh_num, |
| 1055 | cik_read_indexed_register(adev, se_num, | 1136 | reg_offset); |
| 1056 | sh_num, reg_offset) : | ||
| 1057 | RREG32(reg_offset); | ||
| 1058 | return 0; | 1137 | return 0; |
| 1059 | } | 1138 | } |
| 1060 | return -EINVAL; | 1139 | return -EINVAL; |
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c index 5c8a7a48a4ad..419ba0ce7ee5 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | |||
| @@ -1819,6 +1819,22 @@ static void gfx_v7_0_setup_rb(struct amdgpu_device *adev) | |||
| 1819 | adev->gfx.config.backend_enable_mask, | 1819 | adev->gfx.config.backend_enable_mask, |
| 1820 | num_rb_pipes); | 1820 | num_rb_pipes); |
| 1821 | } | 1821 | } |
| 1822 | |||
| 1823 | /* cache the values for userspace */ | ||
| 1824 | for (i = 0; i < adev->gfx.config.max_shader_engines; i++) { | ||
| 1825 | for (j = 0; j < adev->gfx.config.max_sh_per_se; j++) { | ||
| 1826 | gfx_v7_0_select_se_sh(adev, i, j, 0xffffffff); | ||
| 1827 | adev->gfx.config.rb_config[i][j].rb_backend_disable = | ||
| 1828 | RREG32(mmCC_RB_BACKEND_DISABLE); | ||
| 1829 | adev->gfx.config.rb_config[i][j].user_rb_backend_disable = | ||
| 1830 | RREG32(mmGC_USER_RB_BACKEND_DISABLE); | ||
| 1831 | adev->gfx.config.rb_config[i][j].raster_config = | ||
| 1832 | RREG32(mmPA_SC_RASTER_CONFIG); | ||
| 1833 | adev->gfx.config.rb_config[i][j].raster_config_1 = | ||
| 1834 | RREG32(mmPA_SC_RASTER_CONFIG_1); | ||
| 1835 | } | ||
| 1836 | } | ||
| 1837 | gfx_v7_0_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff); | ||
| 1822 | mutex_unlock(&adev->grbm_idx_mutex); | 1838 | mutex_unlock(&adev->grbm_idx_mutex); |
| 1823 | } | 1839 | } |
| 1824 | 1840 | ||
diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c b/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c index 1eb4d79d6e30..0450ac5ba6b6 100644 --- a/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c | |||
| @@ -1175,7 +1175,7 @@ static const struct amdgpu_irq_src_funcs vcn_v1_0_irq_funcs = { | |||
| 1175 | 1175 | ||
| 1176 | static void vcn_v1_0_set_irq_funcs(struct amdgpu_device *adev) | 1176 | static void vcn_v1_0_set_irq_funcs(struct amdgpu_device *adev) |
| 1177 | { | 1177 | { |
| 1178 | adev->uvd.irq.num_types = adev->vcn.num_enc_rings + 1; | 1178 | adev->vcn.irq.num_types = adev->vcn.num_enc_rings + 1; |
| 1179 | adev->vcn.irq.funcs = &vcn_v1_0_irq_funcs; | 1179 | adev->vcn.irq.funcs = &vcn_v1_0_irq_funcs; |
| 1180 | } | 1180 | } |
| 1181 | 1181 | ||
diff --git a/drivers/gpu/drm/amd/amdkfd/Makefile b/drivers/gpu/drm/amd/amdkfd/Makefile index 7bb0bc0ca3d6..342c2d937b17 100644 --- a/drivers/gpu/drm/amd/amdkfd/Makefile +++ b/drivers/gpu/drm/amd/amdkfd/Makefile | |||
| @@ -1,4 +1,24 @@ | |||
| 1 | # SPDX-License-Identifier: GPL-2.0 | 1 | # |
| 2 | # Copyright 2017 Advanced Micro Devices, Inc. | ||
| 3 | # | ||
| 4 | # Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | # copy of this software and associated documentation files (the "Software"), | ||
| 6 | # to deal in the Software without restriction, including without limitation | ||
| 7 | # the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | # and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | # Software is furnished to do so, subject to the following conditions: | ||
| 10 | # | ||
| 11 | # The above copyright notice and this permission notice shall be included in | ||
| 12 | # all copies or substantial portions of the Software. | ||
| 13 | # | ||
| 14 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | # THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | # OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | # | ||
| 2 | # | 22 | # |
| 3 | # Makefile for Heterogenous System Architecture support for AMD GPU devices | 23 | # Makefile for Heterogenous System Architecture support for AMD GPU devices |
| 4 | # | 24 | # |
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_module.c b/drivers/gpu/drm/amd/amdkfd/kfd_module.c index 6c5a9cab55de..f744caeaee04 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_module.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_module.c | |||
| @@ -24,6 +24,7 @@ | |||
| 24 | #include <linux/sched.h> | 24 | #include <linux/sched.h> |
| 25 | #include <linux/moduleparam.h> | 25 | #include <linux/moduleparam.h> |
| 26 | #include <linux/device.h> | 26 | #include <linux/device.h> |
| 27 | #include <linux/printk.h> | ||
| 27 | #include "kfd_priv.h" | 28 | #include "kfd_priv.h" |
| 28 | 29 | ||
| 29 | #define KFD_DRIVER_AUTHOR "AMD Inc. and others" | 30 | #define KFD_DRIVER_AUTHOR "AMD Inc. and others" |
| @@ -132,7 +133,7 @@ static void __exit kfd_module_exit(void) | |||
| 132 | kfd_process_destroy_wq(); | 133 | kfd_process_destroy_wq(); |
| 133 | kfd_topology_shutdown(); | 134 | kfd_topology_shutdown(); |
| 134 | kfd_chardev_exit(); | 135 | kfd_chardev_exit(); |
| 135 | dev_info(kfd_device, "Removed module\n"); | 136 | pr_info("amdkfd: Removed module\n"); |
| 136 | } | 137 | } |
| 137 | 138 | ||
| 138 | module_init(kfd_module_init); | 139 | module_init(kfd_module_init); |
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c index 4859d263fa2a..4728fad3fd74 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c | |||
| @@ -202,8 +202,8 @@ static int update_mqd_sdma(struct mqd_manager *mm, void *mqd, | |||
| 202 | struct cik_sdma_rlc_registers *m; | 202 | struct cik_sdma_rlc_registers *m; |
| 203 | 203 | ||
| 204 | m = get_sdma_mqd(mqd); | 204 | m = get_sdma_mqd(mqd); |
| 205 | m->sdma_rlc_rb_cntl = ffs(q->queue_size / sizeof(unsigned int)) << | 205 | m->sdma_rlc_rb_cntl = (ffs(q->queue_size / sizeof(unsigned int)) - 1) |
| 206 | SDMA0_RLC0_RB_CNTL__RB_SIZE__SHIFT | | 206 | << SDMA0_RLC0_RB_CNTL__RB_SIZE__SHIFT | |
| 207 | q->vmid << SDMA0_RLC0_RB_CNTL__RB_VMID__SHIFT | | 207 | q->vmid << SDMA0_RLC0_RB_CNTL__RB_VMID__SHIFT | |
| 208 | 1 << SDMA0_RLC0_RB_CNTL__RPTR_WRITEBACK_ENABLE__SHIFT | | 208 | 1 << SDMA0_RLC0_RB_CNTL__RPTR_WRITEBACK_ENABLE__SHIFT | |
| 209 | 6 << SDMA0_RLC0_RB_CNTL__RPTR_WRITEBACK_TIMER__SHIFT; | 209 | 6 << SDMA0_RLC0_RB_CNTL__RPTR_WRITEBACK_TIMER__SHIFT; |
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c index 2bec902fc939..a3f1e62c60ba 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c | |||
| @@ -191,6 +191,24 @@ int pqm_create_queue(struct process_queue_manager *pqm, | |||
| 191 | 191 | ||
| 192 | switch (type) { | 192 | switch (type) { |
| 193 | case KFD_QUEUE_TYPE_SDMA: | 193 | case KFD_QUEUE_TYPE_SDMA: |
| 194 | if (dev->dqm->queue_count >= | ||
| 195 | CIK_SDMA_QUEUES_PER_ENGINE * CIK_SDMA_ENGINE_NUM) { | ||
| 196 | pr_err("Over-subscription is not allowed for SDMA.\n"); | ||
| 197 | retval = -EPERM; | ||
| 198 | goto err_create_queue; | ||
| 199 | } | ||
| 200 | |||
| 201 | retval = create_cp_queue(pqm, dev, &q, properties, f, *qid); | ||
| 202 | if (retval != 0) | ||
| 203 | goto err_create_queue; | ||
| 204 | pqn->q = q; | ||
| 205 | pqn->kq = NULL; | ||
| 206 | retval = dev->dqm->ops.create_queue(dev->dqm, q, &pdd->qpd, | ||
| 207 | &q->properties.vmid); | ||
| 208 | pr_debug("DQM returned %d for create_queue\n", retval); | ||
| 209 | print_queue(q); | ||
| 210 | break; | ||
| 211 | |||
| 194 | case KFD_QUEUE_TYPE_COMPUTE: | 212 | case KFD_QUEUE_TYPE_COMPUTE: |
| 195 | /* check if there is over subscription */ | 213 | /* check if there is over subscription */ |
| 196 | if ((sched_policy == KFD_SCHED_POLICY_HWS_NO_OVERSUBSCRIPTION) && | 214 | if ((sched_policy == KFD_SCHED_POLICY_HWS_NO_OVERSUBSCRIPTION) && |
diff --git a/drivers/gpu/drm/amd/display/Makefile b/drivers/gpu/drm/amd/display/Makefile index 8ba37dd9cf7f..c27c81cdeed3 100644 --- a/drivers/gpu/drm/amd/display/Makefile +++ b/drivers/gpu/drm/amd/display/Makefile | |||
| @@ -1,4 +1,25 @@ | |||
| 1 | # | 1 | # |
| 2 | # Copyright 2017 Advanced Micro Devices, Inc. | ||
| 3 | # | ||
| 4 | # Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | # copy of this software and associated documentation files (the "Software"), | ||
| 6 | # to deal in the Software without restriction, including without limitation | ||
| 7 | # the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | # and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | # Software is furnished to do so, subject to the following conditions: | ||
| 10 | # | ||
| 11 | # The above copyright notice and this permission notice shall be included in | ||
| 12 | # all copies or substantial portions of the Software. | ||
| 13 | # | ||
| 14 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | # THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | # OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | # | ||
| 22 | # | ||
| 2 | # Makefile for the DAL (Display Abstract Layer), which is a sub-component | 23 | # Makefile for the DAL (Display Abstract Layer), which is a sub-component |
| 3 | # of the AMDGPU drm driver. | 24 | # of the AMDGPU drm driver. |
| 4 | # It provides the HW control for display related functionalities. | 25 | # It provides the HW control for display related functionalities. |
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/Makefile b/drivers/gpu/drm/amd/display/amdgpu_dm/Makefile index 4699e47aa76b..2b72009844f8 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/Makefile +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/Makefile | |||
| @@ -1,4 +1,25 @@ | |||
| 1 | # | 1 | # |
| 2 | # Copyright 2017 Advanced Micro Devices, Inc. | ||
| 3 | # | ||
| 4 | # Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | # copy of this software and associated documentation files (the "Software"), | ||
| 6 | # to deal in the Software without restriction, including without limitation | ||
| 7 | # the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | # and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | # Software is furnished to do so, subject to the following conditions: | ||
| 10 | # | ||
| 11 | # The above copyright notice and this permission notice shall be included in | ||
| 12 | # all copies or substantial portions of the Software. | ||
| 13 | # | ||
| 14 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | # THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | # OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | # | ||
| 22 | # | ||
| 2 | # Makefile for the 'dm' sub-component of DAL. | 23 | # Makefile for the 'dm' sub-component of DAL. |
| 3 | # It provides the control and status of dm blocks. | 24 | # It provides the control and status of dm blocks. |
| 4 | 25 | ||
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c index 889ed24084e8..f71fe6d2ddda 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | |||
| @@ -520,7 +520,8 @@ static int detect_mst_link_for_all_connectors(struct drm_device *dev) | |||
| 520 | 520 | ||
| 521 | list_for_each_entry(connector, &dev->mode_config.connector_list, head) { | 521 | list_for_each_entry(connector, &dev->mode_config.connector_list, head) { |
| 522 | aconnector = to_amdgpu_dm_connector(connector); | 522 | aconnector = to_amdgpu_dm_connector(connector); |
| 523 | if (aconnector->dc_link->type == dc_connection_mst_branch) { | 523 | if (aconnector->dc_link->type == dc_connection_mst_branch && |
| 524 | aconnector->mst_mgr.aux) { | ||
| 524 | DRM_DEBUG_DRIVER("DM_MST: starting TM on aconnector: %p [id: %d]\n", | 525 | DRM_DEBUG_DRIVER("DM_MST: starting TM on aconnector: %p [id: %d]\n", |
| 525 | aconnector, aconnector->base.base.id); | 526 | aconnector, aconnector->base.base.id); |
| 526 | 527 | ||
| @@ -677,6 +678,10 @@ int amdgpu_dm_display_resume(struct amdgpu_device *adev) | |||
| 677 | 678 | ||
| 678 | mutex_lock(&aconnector->hpd_lock); | 679 | mutex_lock(&aconnector->hpd_lock); |
| 679 | dc_link_detect(aconnector->dc_link, DETECT_REASON_HPD); | 680 | dc_link_detect(aconnector->dc_link, DETECT_REASON_HPD); |
| 681 | |||
| 682 | if (aconnector->fake_enable && aconnector->dc_link->local_sink) | ||
| 683 | aconnector->fake_enable = false; | ||
| 684 | |||
| 680 | aconnector->dc_sink = NULL; | 685 | aconnector->dc_sink = NULL; |
| 681 | amdgpu_dm_update_connector_after_detect(aconnector); | 686 | amdgpu_dm_update_connector_after_detect(aconnector); |
| 682 | mutex_unlock(&aconnector->hpd_lock); | 687 | mutex_unlock(&aconnector->hpd_lock); |
| @@ -711,7 +716,6 @@ int amdgpu_dm_display_resume(struct amdgpu_device *adev) | |||
| 711 | 716 | ||
| 712 | ret = drm_atomic_helper_resume(ddev, adev->dm.cached_state); | 717 | ret = drm_atomic_helper_resume(ddev, adev->dm.cached_state); |
| 713 | 718 | ||
| 714 | drm_atomic_state_put(adev->dm.cached_state); | ||
| 715 | adev->dm.cached_state = NULL; | 719 | adev->dm.cached_state = NULL; |
| 716 | 720 | ||
| 717 | amdgpu_dm_irq_resume_late(adev); | 721 | amdgpu_dm_irq_resume_late(adev); |
| @@ -2704,7 +2708,7 @@ static void create_eml_sink(struct amdgpu_dm_connector *aconnector) | |||
| 2704 | .link = aconnector->dc_link, | 2708 | .link = aconnector->dc_link, |
| 2705 | .sink_signal = SIGNAL_TYPE_VIRTUAL | 2709 | .sink_signal = SIGNAL_TYPE_VIRTUAL |
| 2706 | }; | 2710 | }; |
| 2707 | struct edid *edid = (struct edid *) aconnector->base.edid_blob_ptr->data; | 2711 | struct edid *edid; |
| 2708 | 2712 | ||
| 2709 | if (!aconnector->base.edid_blob_ptr || | 2713 | if (!aconnector->base.edid_blob_ptr || |
| 2710 | !aconnector->base.edid_blob_ptr->data) { | 2714 | !aconnector->base.edid_blob_ptr->data) { |
| @@ -2716,6 +2720,8 @@ static void create_eml_sink(struct amdgpu_dm_connector *aconnector) | |||
| 2716 | return; | 2720 | return; |
| 2717 | } | 2721 | } |
| 2718 | 2722 | ||
| 2723 | edid = (struct edid *) aconnector->base.edid_blob_ptr->data; | ||
| 2724 | |||
| 2719 | aconnector->edid = edid; | 2725 | aconnector->edid = edid; |
| 2720 | 2726 | ||
| 2721 | aconnector->dc_em_sink = dc_link_add_remote_sink( | 2727 | aconnector->dc_em_sink = dc_link_add_remote_sink( |
| @@ -4193,13 +4199,13 @@ static void amdgpu_dm_atomic_commit_tail(struct drm_atomic_state *state) | |||
| 4193 | update_stream_scaling_settings(&dm_new_con_state->base.crtc->mode, | 4199 | update_stream_scaling_settings(&dm_new_con_state->base.crtc->mode, |
| 4194 | dm_new_con_state, (struct dc_stream_state *)dm_new_crtc_state->stream); | 4200 | dm_new_con_state, (struct dc_stream_state *)dm_new_crtc_state->stream); |
| 4195 | 4201 | ||
| 4202 | if (!dm_new_crtc_state->stream) | ||
| 4203 | continue; | ||
| 4204 | |||
| 4196 | status = dc_stream_get_status(dm_new_crtc_state->stream); | 4205 | status = dc_stream_get_status(dm_new_crtc_state->stream); |
| 4197 | WARN_ON(!status); | 4206 | WARN_ON(!status); |
| 4198 | WARN_ON(!status->plane_count); | 4207 | WARN_ON(!status->plane_count); |
| 4199 | 4208 | ||
| 4200 | if (!dm_new_crtc_state->stream) | ||
| 4201 | continue; | ||
| 4202 | |||
| 4203 | /*TODO How it works with MPO ?*/ | 4209 | /*TODO How it works with MPO ?*/ |
| 4204 | if (!dc_commit_planes_to_stream( | 4210 | if (!dc_commit_planes_to_stream( |
| 4205 | dm->dc, | 4211 | dm->dc, |
| @@ -4253,7 +4259,7 @@ static void amdgpu_dm_atomic_commit_tail(struct drm_atomic_state *state) | |||
| 4253 | drm_atomic_helper_commit_hw_done(state); | 4259 | drm_atomic_helper_commit_hw_done(state); |
| 4254 | 4260 | ||
| 4255 | if (wait_for_vblank) | 4261 | if (wait_for_vblank) |
| 4256 | drm_atomic_helper_wait_for_vblanks(dev, state); | 4262 | drm_atomic_helper_wait_for_flip_done(dev, state); |
| 4257 | 4263 | ||
| 4258 | drm_atomic_helper_cleanup_planes(dev, state); | 4264 | drm_atomic_helper_cleanup_planes(dev, state); |
| 4259 | } | 4265 | } |
| @@ -4332,9 +4338,11 @@ void dm_restore_drm_connector_state(struct drm_device *dev, | |||
| 4332 | return; | 4338 | return; |
| 4333 | 4339 | ||
| 4334 | disconnected_acrtc = to_amdgpu_crtc(connector->encoder->crtc); | 4340 | disconnected_acrtc = to_amdgpu_crtc(connector->encoder->crtc); |
| 4335 | acrtc_state = to_dm_crtc_state(disconnected_acrtc->base.state); | 4341 | if (!disconnected_acrtc) |
| 4342 | return; | ||
| 4336 | 4343 | ||
| 4337 | if (!disconnected_acrtc || !acrtc_state->stream) | 4344 | acrtc_state = to_dm_crtc_state(disconnected_acrtc->base.state); |
| 4345 | if (!acrtc_state->stream) | ||
| 4338 | return; | 4346 | return; |
| 4339 | 4347 | ||
| 4340 | /* | 4348 | /* |
| @@ -4455,7 +4463,7 @@ static int dm_update_crtcs_state(struct dc *dc, | |||
| 4455 | } | 4463 | } |
| 4456 | } | 4464 | } |
| 4457 | 4465 | ||
| 4458 | if (dc_is_stream_unchanged(new_stream, dm_old_crtc_state->stream) && | 4466 | if (enable && dc_is_stream_unchanged(new_stream, dm_old_crtc_state->stream) && |
| 4459 | dc_is_stream_scaling_unchanged(new_stream, dm_old_crtc_state->stream)) { | 4467 | dc_is_stream_scaling_unchanged(new_stream, dm_old_crtc_state->stream)) { |
| 4460 | 4468 | ||
| 4461 | new_crtc_state->mode_changed = false; | 4469 | new_crtc_state->mode_changed = false; |
| @@ -4709,7 +4717,8 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev, | |||
| 4709 | } | 4717 | } |
| 4710 | } else { | 4718 | } else { |
| 4711 | for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) { | 4719 | for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) { |
| 4712 | if (!drm_atomic_crtc_needs_modeset(new_crtc_state)) | 4720 | if (!drm_atomic_crtc_needs_modeset(new_crtc_state) && |
| 4721 | !new_crtc_state->color_mgmt_changed) | ||
| 4713 | continue; | 4722 | continue; |
| 4714 | 4723 | ||
| 4715 | if (!new_crtc_state->enable) | 4724 | if (!new_crtc_state->enable) |
diff --git a/drivers/gpu/drm/amd/display/dc/Makefile b/drivers/gpu/drm/amd/display/dc/Makefile index 4f83e3011743..aed538a4d1ba 100644 --- a/drivers/gpu/drm/amd/display/dc/Makefile +++ b/drivers/gpu/drm/amd/display/dc/Makefile | |||
| @@ -1,4 +1,25 @@ | |||
| 1 | # | 1 | # |
| 2 | # Copyright 2017 Advanced Micro Devices, Inc. | ||
| 3 | # | ||
| 4 | # Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | # copy of this software and associated documentation files (the "Software"), | ||
| 6 | # to deal in the Software without restriction, including without limitation | ||
| 7 | # the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | # and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | # Software is furnished to do so, subject to the following conditions: | ||
| 10 | # | ||
| 11 | # The above copyright notice and this permission notice shall be included in | ||
| 12 | # all copies or substantial portions of the Software. | ||
| 13 | # | ||
| 14 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | # THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | # OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | # | ||
| 22 | # | ||
| 2 | # Makefile for Display Core (dc) component. | 23 | # Makefile for Display Core (dc) component. |
| 3 | # | 24 | # |
| 4 | 25 | ||
diff --git a/drivers/gpu/drm/amd/display/dc/basics/Makefile b/drivers/gpu/drm/amd/display/dc/basics/Makefile index 43c5ccdeeb72..6af8c8a9ad80 100644 --- a/drivers/gpu/drm/amd/display/dc/basics/Makefile +++ b/drivers/gpu/drm/amd/display/dc/basics/Makefile | |||
| @@ -1,4 +1,25 @@ | |||
| 1 | # | 1 | # |
| 2 | # Copyright 2017 Advanced Micro Devices, Inc. | ||
| 3 | # | ||
| 4 | # Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | # copy of this software and associated documentation files (the "Software"), | ||
| 6 | # to deal in the Software without restriction, including without limitation | ||
| 7 | # the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | # and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | # Software is furnished to do so, subject to the following conditions: | ||
| 10 | # | ||
| 11 | # The above copyright notice and this permission notice shall be included in | ||
| 12 | # all copies or substantial portions of the Software. | ||
| 13 | # | ||
| 14 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | # THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | # OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | # | ||
| 22 | # | ||
| 2 | # Makefile for the 'utils' sub-component of DAL. | 23 | # Makefile for the 'utils' sub-component of DAL. |
| 3 | # It provides the general basic services required by other DAL | 24 | # It provides the general basic services required by other DAL |
| 4 | # subcomponents. | 25 | # subcomponents. |
diff --git a/drivers/gpu/drm/amd/display/dc/basics/log_helpers.c b/drivers/gpu/drm/amd/display/dc/basics/log_helpers.c index 785b943b60ed..6e43168fbdd6 100644 --- a/drivers/gpu/drm/amd/display/dc/basics/log_helpers.c +++ b/drivers/gpu/drm/amd/display/dc/basics/log_helpers.c | |||
| @@ -75,6 +75,9 @@ void dc_conn_log(struct dc_context *ctx, | |||
| 75 | if (signal == signal_type_info_tbl[i].type) | 75 | if (signal == signal_type_info_tbl[i].type) |
| 76 | break; | 76 | break; |
| 77 | 77 | ||
| 78 | if (i == NUM_ELEMENTS(signal_type_info_tbl)) | ||
| 79 | goto fail; | ||
| 80 | |||
| 78 | dm_logger_append(&entry, "[%s][ConnIdx:%d] ", | 81 | dm_logger_append(&entry, "[%s][ConnIdx:%d] ", |
| 79 | signal_type_info_tbl[i].name, | 82 | signal_type_info_tbl[i].name, |
| 80 | link->link_index); | 83 | link->link_index); |
| @@ -96,6 +99,8 @@ void dc_conn_log(struct dc_context *ctx, | |||
| 96 | 99 | ||
| 97 | dm_logger_append(&entry, "^\n"); | 100 | dm_logger_append(&entry, "^\n"); |
| 98 | dm_helpers_dc_conn_log(ctx, &entry, event); | 101 | dm_helpers_dc_conn_log(ctx, &entry, event); |
| 102 | |||
| 103 | fail: | ||
| 99 | dm_logger_close(&entry); | 104 | dm_logger_close(&entry); |
| 100 | 105 | ||
| 101 | va_end(args); | 106 | va_end(args); |
diff --git a/drivers/gpu/drm/amd/display/dc/bios/Makefile b/drivers/gpu/drm/amd/display/dc/bios/Makefile index 6ec815dce9cc..239e86bbec5a 100644 --- a/drivers/gpu/drm/amd/display/dc/bios/Makefile +++ b/drivers/gpu/drm/amd/display/dc/bios/Makefile | |||
| @@ -1,4 +1,25 @@ | |||
| 1 | # | 1 | # |
| 2 | # Copyright 2017 Advanced Micro Devices, Inc. | ||
| 3 | # | ||
| 4 | # Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | # copy of this software and associated documentation files (the "Software"), | ||
| 6 | # to deal in the Software without restriction, including without limitation | ||
| 7 | # the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | # and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | # Software is furnished to do so, subject to the following conditions: | ||
| 10 | # | ||
| 11 | # The above copyright notice and this permission notice shall be included in | ||
| 12 | # all copies or substantial portions of the Software. | ||
| 13 | # | ||
| 14 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | # THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | # OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | # | ||
| 22 | # | ||
| 2 | # Makefile for the 'bios' sub-component of DAL. | 23 | # Makefile for the 'bios' sub-component of DAL. |
| 3 | # It provides the parsing and executing controls for atom bios image. | 24 | # It provides the parsing and executing controls for atom bios image. |
| 4 | 25 | ||
diff --git a/drivers/gpu/drm/amd/display/dc/bios/bios_parser.c b/drivers/gpu/drm/amd/display/dc/bios/bios_parser.c index aaaebd06d7ee..86e6438c5cf3 100644 --- a/drivers/gpu/drm/amd/display/dc/bios/bios_parser.c +++ b/drivers/gpu/drm/amd/display/dc/bios/bios_parser.c | |||
| @@ -249,7 +249,7 @@ static enum bp_result bios_parser_get_dst_obj(struct dc_bios *dcb, | |||
| 249 | struct graphics_object_id *dest_object_id) | 249 | struct graphics_object_id *dest_object_id) |
| 250 | { | 250 | { |
| 251 | uint32_t number; | 251 | uint32_t number; |
| 252 | uint16_t *id; | 252 | uint16_t *id = NULL; |
| 253 | ATOM_OBJECT *object; | 253 | ATOM_OBJECT *object; |
| 254 | struct bios_parser *bp = BP_FROM_DCB(dcb); | 254 | struct bios_parser *bp = BP_FROM_DCB(dcb); |
| 255 | 255 | ||
| @@ -260,7 +260,7 @@ static enum bp_result bios_parser_get_dst_obj(struct dc_bios *dcb, | |||
| 260 | 260 | ||
| 261 | number = get_dest_obj_list(bp, object, &id); | 261 | number = get_dest_obj_list(bp, object, &id); |
| 262 | 262 | ||
| 263 | if (number <= index) | 263 | if (number <= index || !id) |
| 264 | return BP_RESULT_BADINPUT; | 264 | return BP_RESULT_BADINPUT; |
| 265 | 265 | ||
| 266 | *dest_object_id = object_id_from_bios_object_id(id[index]); | 266 | *dest_object_id = object_id_from_bios_object_id(id[index]); |
diff --git a/drivers/gpu/drm/amd/display/dc/calcs/Makefile b/drivers/gpu/drm/amd/display/dc/calcs/Makefile index 41ef35995b02..7959e382ed28 100644 --- a/drivers/gpu/drm/amd/display/dc/calcs/Makefile +++ b/drivers/gpu/drm/amd/display/dc/calcs/Makefile | |||
| @@ -1,4 +1,25 @@ | |||
| 1 | # | 1 | # |
| 2 | # Copyright 2017 Advanced Micro Devices, Inc. | ||
| 3 | # | ||
| 4 | # Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | # copy of this software and associated documentation files (the "Software"), | ||
| 6 | # to deal in the Software without restriction, including without limitation | ||
| 7 | # the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | # and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | # Software is furnished to do so, subject to the following conditions: | ||
| 10 | # | ||
| 11 | # The above copyright notice and this permission notice shall be included in | ||
| 12 | # all copies or substantial portions of the Software. | ||
| 13 | # | ||
| 14 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | # THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | # OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | # | ||
| 22 | # | ||
| 2 | # Makefile for the 'calcs' sub-component of DAL. | 23 | # Makefile for the 'calcs' sub-component of DAL. |
| 3 | # It calculates Bandwidth and Watermarks values for HW programming | 24 | # It calculates Bandwidth and Watermarks values for HW programming |
| 4 | # | 25 | # |
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c index fe63f5894d43..7240db2e6f09 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc.c | |||
| @@ -121,6 +121,10 @@ static bool create_links( | |||
| 121 | goto failed_alloc; | 121 | goto failed_alloc; |
| 122 | } | 122 | } |
| 123 | 123 | ||
| 124 | link->link_index = dc->link_count; | ||
| 125 | dc->links[dc->link_count] = link; | ||
| 126 | dc->link_count++; | ||
| 127 | |||
| 124 | link->ctx = dc->ctx; | 128 | link->ctx = dc->ctx; |
| 125 | link->dc = dc; | 129 | link->dc = dc; |
| 126 | link->connector_signal = SIGNAL_TYPE_VIRTUAL; | 130 | link->connector_signal = SIGNAL_TYPE_VIRTUAL; |
| @@ -129,6 +133,13 @@ static bool create_links( | |||
| 129 | link->link_id.enum_id = ENUM_ID_1; | 133 | link->link_id.enum_id = ENUM_ID_1; |
| 130 | link->link_enc = kzalloc(sizeof(*link->link_enc), GFP_KERNEL); | 134 | link->link_enc = kzalloc(sizeof(*link->link_enc), GFP_KERNEL); |
| 131 | 135 | ||
| 136 | if (!link->link_enc) { | ||
| 137 | BREAK_TO_DEBUGGER(); | ||
| 138 | goto failed_alloc; | ||
| 139 | } | ||
| 140 | |||
| 141 | link->link_status.dpcd_caps = &link->dpcd_caps; | ||
| 142 | |||
| 132 | enc_init.ctx = dc->ctx; | 143 | enc_init.ctx = dc->ctx; |
| 133 | enc_init.channel = CHANNEL_ID_UNKNOWN; | 144 | enc_init.channel = CHANNEL_ID_UNKNOWN; |
| 134 | enc_init.hpd_source = HPD_SOURCEID_UNKNOWN; | 145 | enc_init.hpd_source = HPD_SOURCEID_UNKNOWN; |
| @@ -138,10 +149,6 @@ static bool create_links( | |||
| 138 | enc_init.encoder.id = ENCODER_ID_INTERNAL_VIRTUAL; | 149 | enc_init.encoder.id = ENCODER_ID_INTERNAL_VIRTUAL; |
| 139 | enc_init.encoder.enum_id = ENUM_ID_1; | 150 | enc_init.encoder.enum_id = ENUM_ID_1; |
| 140 | virtual_link_encoder_construct(link->link_enc, &enc_init); | 151 | virtual_link_encoder_construct(link->link_enc, &enc_init); |
| 141 | |||
| 142 | link->link_index = dc->link_count; | ||
| 143 | dc->links[dc->link_count] = link; | ||
| 144 | dc->link_count++; | ||
| 145 | } | 152 | } |
| 146 | 153 | ||
| 147 | return true; | 154 | return true; |
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_debug.c b/drivers/gpu/drm/amd/display/dc/core/dc_debug.c index 6acee5426e4b..43c7a7fddb83 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc_debug.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc_debug.c | |||
| @@ -1,4 +1,26 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Copyright 2017 Advanced Micro Devices, Inc. | ||
| 3 | * | ||
| 4 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | * copy of this software and associated documentation files (the "Software"), | ||
| 6 | * to deal in the Software without restriction, including without limitation | ||
| 7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | * and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | * Software is furnished to do so, subject to the following conditions: | ||
| 10 | * | ||
| 11 | * The above copyright notice and this permission notice shall be included in | ||
| 12 | * all copies or substantial portions of the Software. | ||
| 13 | * | ||
| 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | * OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | * | ||
| 22 | */ | ||
| 23 | /* | ||
| 2 | * dc_debug.c | 24 | * dc_debug.c |
| 3 | * | 25 | * |
| 4 | * Created on: Nov 3, 2016 | 26 | * Created on: Nov 3, 2016 |
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link.c b/drivers/gpu/drm/amd/display/dc/core/dc_link.c index 0602610489d7..e27ed4a45265 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc_link.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc_link.c | |||
| @@ -480,22 +480,6 @@ static void detect_dp( | |||
| 480 | sink_caps->signal = SIGNAL_TYPE_DISPLAY_PORT; | 480 | sink_caps->signal = SIGNAL_TYPE_DISPLAY_PORT; |
| 481 | detect_dp_sink_caps(link); | 481 | detect_dp_sink_caps(link); |
| 482 | 482 | ||
| 483 | /* DP active dongles */ | ||
| 484 | if (is_dp_active_dongle(link)) { | ||
| 485 | link->type = dc_connection_active_dongle; | ||
| 486 | if (!link->dpcd_caps.sink_count.bits.SINK_COUNT) { | ||
| 487 | /* | ||
| 488 | * active dongle unplug processing for short irq | ||
| 489 | */ | ||
| 490 | link_disconnect_sink(link); | ||
| 491 | return; | ||
| 492 | } | ||
| 493 | |||
| 494 | if (link->dpcd_caps.dongle_type != | ||
| 495 | DISPLAY_DONGLE_DP_HDMI_CONVERTER) { | ||
| 496 | *converter_disable_audio = true; | ||
| 497 | } | ||
| 498 | } | ||
| 499 | if (is_mst_supported(link)) { | 483 | if (is_mst_supported(link)) { |
| 500 | sink_caps->signal = SIGNAL_TYPE_DISPLAY_PORT_MST; | 484 | sink_caps->signal = SIGNAL_TYPE_DISPLAY_PORT_MST; |
| 501 | link->type = dc_connection_mst_branch; | 485 | link->type = dc_connection_mst_branch; |
| @@ -535,6 +519,22 @@ static void detect_dp( | |||
| 535 | sink_caps->signal = SIGNAL_TYPE_DISPLAY_PORT; | 519 | sink_caps->signal = SIGNAL_TYPE_DISPLAY_PORT; |
| 536 | } | 520 | } |
| 537 | } | 521 | } |
| 522 | |||
| 523 | if (link->type != dc_connection_mst_branch && | ||
| 524 | is_dp_active_dongle(link)) { | ||
| 525 | /* DP active dongles */ | ||
| 526 | link->type = dc_connection_active_dongle; | ||
| 527 | if (!link->dpcd_caps.sink_count.bits.SINK_COUNT) { | ||
| 528 | /* | ||
| 529 | * active dongle unplug processing for short irq | ||
| 530 | */ | ||
| 531 | link_disconnect_sink(link); | ||
| 532 | return; | ||
| 533 | } | ||
| 534 | |||
| 535 | if (link->dpcd_caps.dongle_type != DISPLAY_DONGLE_DP_HDMI_CONVERTER) | ||
| 536 | *converter_disable_audio = true; | ||
| 537 | } | ||
| 538 | } else { | 538 | } else { |
| 539 | /* DP passive dongles */ | 539 | /* DP passive dongles */ |
| 540 | sink_caps->signal = dp_passive_dongle_detection(link->ddc, | 540 | sink_caps->signal = dp_passive_dongle_detection(link->ddc, |
| @@ -1801,12 +1801,75 @@ static void disable_link(struct dc_link *link, enum signal_type signal) | |||
| 1801 | link->link_enc->funcs->disable_output(link->link_enc, signal, link); | 1801 | link->link_enc->funcs->disable_output(link->link_enc, signal, link); |
| 1802 | } | 1802 | } |
| 1803 | 1803 | ||
| 1804 | bool dp_active_dongle_validate_timing( | ||
| 1805 | const struct dc_crtc_timing *timing, | ||
| 1806 | const struct dc_dongle_caps *dongle_caps) | ||
| 1807 | { | ||
| 1808 | unsigned int required_pix_clk = timing->pix_clk_khz; | ||
| 1809 | |||
| 1810 | if (dongle_caps->dongle_type != DISPLAY_DONGLE_DP_HDMI_CONVERTER || | ||
| 1811 | dongle_caps->extendedCapValid == false) | ||
| 1812 | return true; | ||
| 1813 | |||
| 1814 | /* Check Pixel Encoding */ | ||
| 1815 | switch (timing->pixel_encoding) { | ||
| 1816 | case PIXEL_ENCODING_RGB: | ||
| 1817 | case PIXEL_ENCODING_YCBCR444: | ||
| 1818 | break; | ||
| 1819 | case PIXEL_ENCODING_YCBCR422: | ||
| 1820 | if (!dongle_caps->is_dp_hdmi_ycbcr422_pass_through) | ||
| 1821 | return false; | ||
| 1822 | break; | ||
| 1823 | case PIXEL_ENCODING_YCBCR420: | ||
| 1824 | if (!dongle_caps->is_dp_hdmi_ycbcr420_pass_through) | ||
| 1825 | return false; | ||
| 1826 | break; | ||
| 1827 | default: | ||
| 1828 | /* Invalid Pixel Encoding*/ | ||
| 1829 | return false; | ||
| 1830 | } | ||
| 1831 | |||
| 1832 | |||
| 1833 | /* Check Color Depth and Pixel Clock */ | ||
| 1834 | if (timing->pixel_encoding == PIXEL_ENCODING_YCBCR420) | ||
| 1835 | required_pix_clk /= 2; | ||
| 1836 | |||
| 1837 | switch (timing->display_color_depth) { | ||
| 1838 | case COLOR_DEPTH_666: | ||
| 1839 | case COLOR_DEPTH_888: | ||
| 1840 | /*888 and 666 should always be supported*/ | ||
| 1841 | break; | ||
| 1842 | case COLOR_DEPTH_101010: | ||
| 1843 | if (dongle_caps->dp_hdmi_max_bpc < 10) | ||
| 1844 | return false; | ||
| 1845 | required_pix_clk = required_pix_clk * 10 / 8; | ||
| 1846 | break; | ||
| 1847 | case COLOR_DEPTH_121212: | ||
| 1848 | if (dongle_caps->dp_hdmi_max_bpc < 12) | ||
| 1849 | return false; | ||
| 1850 | required_pix_clk = required_pix_clk * 12 / 8; | ||
| 1851 | break; | ||
| 1852 | |||
| 1853 | case COLOR_DEPTH_141414: | ||
| 1854 | case COLOR_DEPTH_161616: | ||
| 1855 | default: | ||
| 1856 | /* These color depths are currently not supported */ | ||
| 1857 | return false; | ||
| 1858 | } | ||
| 1859 | |||
| 1860 | if (required_pix_clk > dongle_caps->dp_hdmi_max_pixel_clk) | ||
| 1861 | return false; | ||
| 1862 | |||
| 1863 | return true; | ||
| 1864 | } | ||
| 1865 | |||
| 1804 | enum dc_status dc_link_validate_mode_timing( | 1866 | enum dc_status dc_link_validate_mode_timing( |
| 1805 | const struct dc_stream_state *stream, | 1867 | const struct dc_stream_state *stream, |
| 1806 | struct dc_link *link, | 1868 | struct dc_link *link, |
| 1807 | const struct dc_crtc_timing *timing) | 1869 | const struct dc_crtc_timing *timing) |
| 1808 | { | 1870 | { |
| 1809 | uint32_t max_pix_clk = stream->sink->dongle_max_pix_clk; | 1871 | uint32_t max_pix_clk = stream->sink->dongle_max_pix_clk; |
| 1872 | struct dc_dongle_caps *dongle_caps = &link->link_status.dpcd_caps->dongle_caps; | ||
| 1810 | 1873 | ||
| 1811 | /* A hack to avoid failing any modes for EDID override feature on | 1874 | /* A hack to avoid failing any modes for EDID override feature on |
| 1812 | * topology change such as lower quality cable for DP or different dongle | 1875 | * topology change such as lower quality cable for DP or different dongle |
| @@ -1814,8 +1877,13 @@ enum dc_status dc_link_validate_mode_timing( | |||
| 1814 | if (link->remote_sinks[0]) | 1877 | if (link->remote_sinks[0]) |
| 1815 | return DC_OK; | 1878 | return DC_OK; |
| 1816 | 1879 | ||
| 1880 | /* Passive Dongle */ | ||
| 1817 | if (0 != max_pix_clk && timing->pix_clk_khz > max_pix_clk) | 1881 | if (0 != max_pix_clk && timing->pix_clk_khz > max_pix_clk) |
| 1818 | return DC_EXCEED_DONGLE_MAX_CLK; | 1882 | return DC_EXCEED_DONGLE_CAP; |
| 1883 | |||
| 1884 | /* Active Dongle*/ | ||
| 1885 | if (!dp_active_dongle_validate_timing(timing, dongle_caps)) | ||
| 1886 | return DC_EXCEED_DONGLE_CAP; | ||
| 1819 | 1887 | ||
| 1820 | switch (stream->signal) { | 1888 | switch (stream->signal) { |
| 1821 | case SIGNAL_TYPE_EDP: | 1889 | case SIGNAL_TYPE_EDP: |
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c b/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c index ced42484dcfc..e6bf05d76a94 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c | |||
| @@ -1512,7 +1512,7 @@ static bool hpd_rx_irq_check_link_loss_status( | |||
| 1512 | struct dc_link *link, | 1512 | struct dc_link *link, |
| 1513 | union hpd_irq_data *hpd_irq_dpcd_data) | 1513 | union hpd_irq_data *hpd_irq_dpcd_data) |
| 1514 | { | 1514 | { |
| 1515 | uint8_t irq_reg_rx_power_state; | 1515 | uint8_t irq_reg_rx_power_state = 0; |
| 1516 | enum dc_status dpcd_result = DC_ERROR_UNEXPECTED; | 1516 | enum dc_status dpcd_result = DC_ERROR_UNEXPECTED; |
| 1517 | union lane_status lane_status; | 1517 | union lane_status lane_status; |
| 1518 | uint32_t lane; | 1518 | uint32_t lane; |
| @@ -1524,60 +1524,55 @@ static bool hpd_rx_irq_check_link_loss_status( | |||
| 1524 | 1524 | ||
| 1525 | if (link->cur_link_settings.lane_count == 0) | 1525 | if (link->cur_link_settings.lane_count == 0) |
| 1526 | return return_code; | 1526 | return return_code; |
| 1527 | /*1. Check that we can handle interrupt: Not in FS DOS, | ||
| 1528 | * Not in "Display Timeout" state, Link is trained. | ||
| 1529 | */ | ||
| 1530 | 1527 | ||
| 1531 | dpcd_result = core_link_read_dpcd(link, | 1528 | /*1. Check that Link Status changed, before re-training.*/ |
| 1532 | DP_SET_POWER, | ||
| 1533 | &irq_reg_rx_power_state, | ||
| 1534 | sizeof(irq_reg_rx_power_state)); | ||
| 1535 | 1529 | ||
| 1536 | if (dpcd_result != DC_OK) { | 1530 | /*parse lane status*/ |
| 1537 | irq_reg_rx_power_state = DP_SET_POWER_D0; | 1531 | for (lane = 0; lane < link->cur_link_settings.lane_count; lane++) { |
| 1538 | dm_logger_write(link->ctx->logger, LOG_HW_HPD_IRQ, | 1532 | /* check status of lanes 0,1 |
| 1539 | "%s: DPCD read failed to obtain power state.\n", | 1533 | * changed DpcdAddress_Lane01Status (0x202) |
| 1540 | __func__); | 1534 | */ |
| 1535 | lane_status.raw = get_nibble_at_index( | ||
| 1536 | &hpd_irq_dpcd_data->bytes.lane01_status.raw, | ||
| 1537 | lane); | ||
| 1538 | |||
| 1539 | if (!lane_status.bits.CHANNEL_EQ_DONE_0 || | ||
| 1540 | !lane_status.bits.CR_DONE_0 || | ||
| 1541 | !lane_status.bits.SYMBOL_LOCKED_0) { | ||
| 1542 | /* if one of the channel equalization, clock | ||
| 1543 | * recovery or symbol lock is dropped | ||
| 1544 | * consider it as (link has been | ||
| 1545 | * dropped) dp sink status has changed | ||
| 1546 | */ | ||
| 1547 | sink_status_changed = true; | ||
| 1548 | break; | ||
| 1549 | } | ||
| 1541 | } | 1550 | } |
| 1542 | 1551 | ||
| 1543 | if (irq_reg_rx_power_state == DP_SET_POWER_D0) { | 1552 | /* Check interlane align.*/ |
| 1544 | 1553 | if (sink_status_changed || | |
| 1545 | /*2. Check that Link Status changed, before re-training.*/ | 1554 | !hpd_irq_dpcd_data->bytes.lane_status_updated.bits.INTERLANE_ALIGN_DONE) { |
| 1546 | |||
| 1547 | /*parse lane status*/ | ||
| 1548 | for (lane = 0; | ||
| 1549 | lane < link->cur_link_settings.lane_count; | ||
| 1550 | lane++) { | ||
| 1551 | 1555 | ||
| 1552 | /* check status of lanes 0,1 | 1556 | dm_logger_write(link->ctx->logger, LOG_HW_HPD_IRQ, |
| 1553 | * changed DpcdAddress_Lane01Status (0x202)*/ | 1557 | "%s: Link Status changed.\n", __func__); |
| 1554 | lane_status.raw = get_nibble_at_index( | ||
| 1555 | &hpd_irq_dpcd_data->bytes.lane01_status.raw, | ||
| 1556 | lane); | ||
| 1557 | |||
| 1558 | if (!lane_status.bits.CHANNEL_EQ_DONE_0 || | ||
| 1559 | !lane_status.bits.CR_DONE_0 || | ||
| 1560 | !lane_status.bits.SYMBOL_LOCKED_0) { | ||
| 1561 | /* if one of the channel equalization, clock | ||
| 1562 | * recovery or symbol lock is dropped | ||
| 1563 | * consider it as (link has been | ||
| 1564 | * dropped) dp sink status has changed*/ | ||
| 1565 | sink_status_changed = true; | ||
| 1566 | break; | ||
| 1567 | } | ||
| 1568 | 1558 | ||
| 1569 | } | 1559 | return_code = true; |
| 1570 | 1560 | ||
| 1571 | /* Check interlane align.*/ | 1561 | /*2. Check that we can handle interrupt: Not in FS DOS, |
| 1572 | if (sink_status_changed || | 1562 | * Not in "Display Timeout" state, Link is trained. |
| 1573 | !hpd_irq_dpcd_data->bytes.lane_status_updated.bits. | 1563 | */ |
| 1574 | INTERLANE_ALIGN_DONE) { | 1564 | dpcd_result = core_link_read_dpcd(link, |
| 1565 | DP_SET_POWER, | ||
| 1566 | &irq_reg_rx_power_state, | ||
| 1567 | sizeof(irq_reg_rx_power_state)); | ||
| 1575 | 1568 | ||
| 1569 | if (dpcd_result != DC_OK) { | ||
| 1576 | dm_logger_write(link->ctx->logger, LOG_HW_HPD_IRQ, | 1570 | dm_logger_write(link->ctx->logger, LOG_HW_HPD_IRQ, |
| 1577 | "%s: Link Status changed.\n", | 1571 | "%s: DPCD read failed to obtain power state.\n", |
| 1578 | __func__); | 1572 | __func__); |
| 1579 | 1573 | } else { | |
| 1580 | return_code = true; | 1574 | if (irq_reg_rx_power_state != DP_SET_POWER_D0) |
| 1575 | return_code = false; | ||
| 1581 | } | 1576 | } |
| 1582 | } | 1577 | } |
| 1583 | 1578 | ||
| @@ -2062,6 +2057,24 @@ bool is_dp_active_dongle(const struct dc_link *link) | |||
| 2062 | (dongle_type == DISPLAY_DONGLE_DP_HDMI_CONVERTER); | 2057 | (dongle_type == DISPLAY_DONGLE_DP_HDMI_CONVERTER); |
| 2063 | } | 2058 | } |
| 2064 | 2059 | ||
| 2060 | static int translate_dpcd_max_bpc(enum dpcd_downstream_port_max_bpc bpc) | ||
| 2061 | { | ||
| 2062 | switch (bpc) { | ||
| 2063 | case DOWN_STREAM_MAX_8BPC: | ||
| 2064 | return 8; | ||
| 2065 | case DOWN_STREAM_MAX_10BPC: | ||
| 2066 | return 10; | ||
| 2067 | case DOWN_STREAM_MAX_12BPC: | ||
| 2068 | return 12; | ||
| 2069 | case DOWN_STREAM_MAX_16BPC: | ||
| 2070 | return 16; | ||
| 2071 | default: | ||
| 2072 | break; | ||
| 2073 | } | ||
| 2074 | |||
| 2075 | return -1; | ||
| 2076 | } | ||
| 2077 | |||
| 2065 | static void get_active_converter_info( | 2078 | static void get_active_converter_info( |
| 2066 | uint8_t data, struct dc_link *link) | 2079 | uint8_t data, struct dc_link *link) |
| 2067 | { | 2080 | { |
| @@ -2131,7 +2144,8 @@ static void get_active_converter_info( | |||
| 2131 | hdmi_caps.bits.YCrCr420_CONVERSION; | 2144 | hdmi_caps.bits.YCrCr420_CONVERSION; |
| 2132 | 2145 | ||
| 2133 | link->dpcd_caps.dongle_caps.dp_hdmi_max_bpc = | 2146 | link->dpcd_caps.dongle_caps.dp_hdmi_max_bpc = |
| 2134 | hdmi_color_caps.bits.MAX_BITS_PER_COLOR_COMPONENT; | 2147 | translate_dpcd_max_bpc( |
| 2148 | hdmi_color_caps.bits.MAX_BITS_PER_COLOR_COMPONENT); | ||
| 2135 | 2149 | ||
| 2136 | link->dpcd_caps.dongle_caps.extendedCapValid = true; | 2150 | link->dpcd_caps.dongle_caps.extendedCapValid = true; |
| 2137 | } | 2151 | } |
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c index d1cdf9f8853d..928895809867 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Copyright 2012-15 Advanced Micro Devices, Inc. | 2 | * Copyright 2012-15 Advanced Micro Devices, Inc. |
| 3 | * | 3 | * |
| 4 | * Permission is hereby granted, free of charge, to any person obtaining a | 4 | * Permission is hereby granted, free of charge, to any person obtaining a |
| 5 | * copy of this software and associated documentation files (the "Software"), | 5 | * copy of this software and associated documentation files (the "Software"), |
| @@ -516,13 +516,11 @@ static void calculate_viewport(struct pipe_ctx *pipe_ctx) | |||
| 516 | right_view = (plane_state->rotation == ROTATION_ANGLE_270) != sec_split; | 516 | right_view = (plane_state->rotation == ROTATION_ANGLE_270) != sec_split; |
| 517 | 517 | ||
| 518 | if (right_view) { | 518 | if (right_view) { |
| 519 | data->viewport.width /= 2; | 519 | data->viewport.x += data->viewport.width / 2; |
| 520 | data->viewport_c.width /= 2; | 520 | data->viewport_c.x += data->viewport_c.width / 2; |
| 521 | data->viewport.x += data->viewport.width; | ||
| 522 | data->viewport_c.x += data->viewport_c.width; | ||
| 523 | /* Ceil offset pipe */ | 521 | /* Ceil offset pipe */ |
| 524 | data->viewport.width += data->viewport.width % 2; | 522 | data->viewport.width = (data->viewport.width + 1) / 2; |
| 525 | data->viewport_c.width += data->viewport_c.width % 2; | 523 | data->viewport_c.width = (data->viewport_c.width + 1) / 2; |
| 526 | } else { | 524 | } else { |
| 527 | data->viewport.width /= 2; | 525 | data->viewport.width /= 2; |
| 528 | data->viewport_c.width /= 2; | 526 | data->viewport_c.width /= 2; |
| @@ -580,14 +578,12 @@ static void calculate_recout(struct pipe_ctx *pipe_ctx, struct view *recout_skip | |||
| 580 | if (pipe_ctx->top_pipe && pipe_ctx->top_pipe->plane_state == | 578 | if (pipe_ctx->top_pipe && pipe_ctx->top_pipe->plane_state == |
| 581 | pipe_ctx->plane_state) { | 579 | pipe_ctx->plane_state) { |
| 582 | if (stream->view_format == VIEW_3D_FORMAT_TOP_AND_BOTTOM) { | 580 | if (stream->view_format == VIEW_3D_FORMAT_TOP_AND_BOTTOM) { |
| 583 | pipe_ctx->plane_res.scl_data.recout.height /= 2; | 581 | pipe_ctx->plane_res.scl_data.recout.y += pipe_ctx->plane_res.scl_data.recout.height / 2; |
| 584 | pipe_ctx->plane_res.scl_data.recout.y += pipe_ctx->plane_res.scl_data.recout.height; | ||
| 585 | /* Floor primary pipe, ceil 2ndary pipe */ | 582 | /* Floor primary pipe, ceil 2ndary pipe */ |
| 586 | pipe_ctx->plane_res.scl_data.recout.height += pipe_ctx->plane_res.scl_data.recout.height % 2; | 583 | pipe_ctx->plane_res.scl_data.recout.height = (pipe_ctx->plane_res.scl_data.recout.height + 1) / 2; |
| 587 | } else { | 584 | } else { |
| 588 | pipe_ctx->plane_res.scl_data.recout.width /= 2; | 585 | pipe_ctx->plane_res.scl_data.recout.x += pipe_ctx->plane_res.scl_data.recout.width / 2; |
| 589 | pipe_ctx->plane_res.scl_data.recout.x += pipe_ctx->plane_res.scl_data.recout.width; | 586 | pipe_ctx->plane_res.scl_data.recout.width = (pipe_ctx->plane_res.scl_data.recout.width + 1) / 2; |
| 590 | pipe_ctx->plane_res.scl_data.recout.width += pipe_ctx->plane_res.scl_data.recout.width % 2; | ||
| 591 | } | 587 | } |
| 592 | } else if (pipe_ctx->bottom_pipe && | 588 | } else if (pipe_ctx->bottom_pipe && |
| 593 | pipe_ctx->bottom_pipe->plane_state == pipe_ctx->plane_state) { | 589 | pipe_ctx->bottom_pipe->plane_state == pipe_ctx->plane_state) { |
| @@ -856,6 +852,7 @@ bool resource_build_scaling_params(struct pipe_ctx *pipe_ctx) | |||
| 856 | pipe_ctx->plane_res.scl_data.h_active = timing->h_addressable + timing->h_border_left + timing->h_border_right; | 852 | pipe_ctx->plane_res.scl_data.h_active = timing->h_addressable + timing->h_border_left + timing->h_border_right; |
| 857 | pipe_ctx->plane_res.scl_data.v_active = timing->v_addressable + timing->v_border_top + timing->v_border_bottom; | 853 | pipe_ctx->plane_res.scl_data.v_active = timing->v_addressable + timing->v_border_top + timing->v_border_bottom; |
| 858 | 854 | ||
| 855 | |||
| 859 | /* Taps calculations */ | 856 | /* Taps calculations */ |
| 860 | if (pipe_ctx->plane_res.xfm != NULL) | 857 | if (pipe_ctx->plane_res.xfm != NULL) |
| 861 | res = pipe_ctx->plane_res.xfm->funcs->transform_get_optimal_number_of_taps( | 858 | res = pipe_ctx->plane_res.xfm->funcs->transform_get_optimal_number_of_taps( |
| @@ -864,16 +861,21 @@ bool resource_build_scaling_params(struct pipe_ctx *pipe_ctx) | |||
| 864 | if (pipe_ctx->plane_res.dpp != NULL) | 861 | if (pipe_ctx->plane_res.dpp != NULL) |
| 865 | res = pipe_ctx->plane_res.dpp->funcs->dpp_get_optimal_number_of_taps( | 862 | res = pipe_ctx->plane_res.dpp->funcs->dpp_get_optimal_number_of_taps( |
| 866 | pipe_ctx->plane_res.dpp, &pipe_ctx->plane_res.scl_data, &plane_state->scaling_quality); | 863 | pipe_ctx->plane_res.dpp, &pipe_ctx->plane_res.scl_data, &plane_state->scaling_quality); |
| 867 | |||
| 868 | if (!res) { | 864 | if (!res) { |
| 869 | /* Try 24 bpp linebuffer */ | 865 | /* Try 24 bpp linebuffer */ |
| 870 | pipe_ctx->plane_res.scl_data.lb_params.depth = LB_PIXEL_DEPTH_24BPP; | 866 | pipe_ctx->plane_res.scl_data.lb_params.depth = LB_PIXEL_DEPTH_24BPP; |
| 871 | 867 | ||
| 872 | res = pipe_ctx->plane_res.xfm->funcs->transform_get_optimal_number_of_taps( | 868 | if (pipe_ctx->plane_res.xfm != NULL) |
| 873 | pipe_ctx->plane_res.xfm, &pipe_ctx->plane_res.scl_data, &plane_state->scaling_quality); | 869 | res = pipe_ctx->plane_res.xfm->funcs->transform_get_optimal_number_of_taps( |
| 870 | pipe_ctx->plane_res.xfm, | ||
| 871 | &pipe_ctx->plane_res.scl_data, | ||
| 872 | &plane_state->scaling_quality); | ||
| 874 | 873 | ||
| 875 | res = pipe_ctx->plane_res.dpp->funcs->dpp_get_optimal_number_of_taps( | 874 | if (pipe_ctx->plane_res.dpp != NULL) |
| 876 | pipe_ctx->plane_res.dpp, &pipe_ctx->plane_res.scl_data, &plane_state->scaling_quality); | 875 | res = pipe_ctx->plane_res.dpp->funcs->dpp_get_optimal_number_of_taps( |
| 876 | pipe_ctx->plane_res.dpp, | ||
| 877 | &pipe_ctx->plane_res.scl_data, | ||
| 878 | &plane_state->scaling_quality); | ||
| 877 | } | 879 | } |
| 878 | 880 | ||
| 879 | if (res) | 881 | if (res) |
| @@ -991,8 +993,10 @@ static struct pipe_ctx *acquire_free_pipe_for_stream( | |||
| 991 | 993 | ||
| 992 | head_pipe = resource_get_head_pipe_for_stream(res_ctx, stream); | 994 | head_pipe = resource_get_head_pipe_for_stream(res_ctx, stream); |
| 993 | 995 | ||
| 994 | if (!head_pipe) | 996 | if (!head_pipe) { |
| 995 | ASSERT(0); | 997 | ASSERT(0); |
| 998 | return NULL; | ||
| 999 | } | ||
| 996 | 1000 | ||
| 997 | if (!head_pipe->plane_state) | 1001 | if (!head_pipe->plane_state) |
| 998 | return head_pipe; | 1002 | return head_pipe; |
| @@ -1447,11 +1451,16 @@ static struct stream_encoder *find_first_free_match_stream_enc_for_link( | |||
| 1447 | 1451 | ||
| 1448 | static struct audio *find_first_free_audio( | 1452 | static struct audio *find_first_free_audio( |
| 1449 | struct resource_context *res_ctx, | 1453 | struct resource_context *res_ctx, |
| 1450 | const struct resource_pool *pool) | 1454 | const struct resource_pool *pool, |
| 1455 | enum engine_id id) | ||
| 1451 | { | 1456 | { |
| 1452 | int i; | 1457 | int i; |
| 1453 | for (i = 0; i < pool->audio_count; i++) { | 1458 | for (i = 0; i < pool->audio_count; i++) { |
| 1454 | if ((res_ctx->is_audio_acquired[i] == false) && (res_ctx->is_stream_enc_acquired[i] == true)) { | 1459 | if ((res_ctx->is_audio_acquired[i] == false) && (res_ctx->is_stream_enc_acquired[i] == true)) { |
| 1460 | /*we have enough audio endpoint, find the matching inst*/ | ||
| 1461 | if (id != i) | ||
| 1462 | continue; | ||
| 1463 | |||
| 1455 | return pool->audios[i]; | 1464 | return pool->audios[i]; |
| 1456 | } | 1465 | } |
| 1457 | } | 1466 | } |
| @@ -1700,7 +1709,7 @@ enum dc_status resource_map_pool_resources( | |||
| 1700 | dc_is_audio_capable_signal(pipe_ctx->stream->signal) && | 1709 | dc_is_audio_capable_signal(pipe_ctx->stream->signal) && |
| 1701 | stream->audio_info.mode_count) { | 1710 | stream->audio_info.mode_count) { |
| 1702 | pipe_ctx->stream_res.audio = find_first_free_audio( | 1711 | pipe_ctx->stream_res.audio = find_first_free_audio( |
| 1703 | &context->res_ctx, pool); | 1712 | &context->res_ctx, pool, pipe_ctx->stream_res.stream_enc->id); |
| 1704 | 1713 | ||
| 1705 | /* | 1714 | /* |
| 1706 | * Audio assigned in order first come first get. | 1715 | * Audio assigned in order first come first get. |
| @@ -1765,13 +1774,16 @@ enum dc_status dc_validate_global_state( | |||
| 1765 | enum dc_status result = DC_ERROR_UNEXPECTED; | 1774 | enum dc_status result = DC_ERROR_UNEXPECTED; |
| 1766 | int i, j; | 1775 | int i, j; |
| 1767 | 1776 | ||
| 1777 | if (!new_ctx) | ||
| 1778 | return DC_ERROR_UNEXPECTED; | ||
| 1779 | |||
| 1768 | if (dc->res_pool->funcs->validate_global) { | 1780 | if (dc->res_pool->funcs->validate_global) { |
| 1769 | result = dc->res_pool->funcs->validate_global(dc, new_ctx); | 1781 | result = dc->res_pool->funcs->validate_global(dc, new_ctx); |
| 1770 | if (result != DC_OK) | 1782 | if (result != DC_OK) |
| 1771 | return result; | 1783 | return result; |
| 1772 | } | 1784 | } |
| 1773 | 1785 | ||
| 1774 | for (i = 0; new_ctx && i < new_ctx->stream_count; i++) { | 1786 | for (i = 0; i < new_ctx->stream_count; i++) { |
| 1775 | struct dc_stream_state *stream = new_ctx->streams[i]; | 1787 | struct dc_stream_state *stream = new_ctx->streams[i]; |
| 1776 | 1788 | ||
| 1777 | for (j = 0; j < dc->res_pool->pipe_count; j++) { | 1789 | for (j = 0; j < dc->res_pool->pipe_count; j++) { |
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_stream.c b/drivers/gpu/drm/amd/display/dc/core/dc_stream.c index b00a6040a697..e230cc44a0a7 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc_stream.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc_stream.c | |||
| @@ -263,7 +263,6 @@ bool dc_stream_set_cursor_position( | |||
| 263 | struct input_pixel_processor *ipp = pipe_ctx->plane_res.ipp; | 263 | struct input_pixel_processor *ipp = pipe_ctx->plane_res.ipp; |
| 264 | struct mem_input *mi = pipe_ctx->plane_res.mi; | 264 | struct mem_input *mi = pipe_ctx->plane_res.mi; |
| 265 | struct hubp *hubp = pipe_ctx->plane_res.hubp; | 265 | struct hubp *hubp = pipe_ctx->plane_res.hubp; |
| 266 | struct transform *xfm = pipe_ctx->plane_res.xfm; | ||
| 267 | struct dpp *dpp = pipe_ctx->plane_res.dpp; | 266 | struct dpp *dpp = pipe_ctx->plane_res.dpp; |
| 268 | struct dc_cursor_position pos_cpy = *position; | 267 | struct dc_cursor_position pos_cpy = *position; |
| 269 | struct dc_cursor_mi_param param = { | 268 | struct dc_cursor_mi_param param = { |
| @@ -294,11 +293,11 @@ bool dc_stream_set_cursor_position( | |||
| 294 | if (mi != NULL && mi->funcs->set_cursor_position != NULL) | 293 | if (mi != NULL && mi->funcs->set_cursor_position != NULL) |
| 295 | mi->funcs->set_cursor_position(mi, &pos_cpy, ¶m); | 294 | mi->funcs->set_cursor_position(mi, &pos_cpy, ¶m); |
| 296 | 295 | ||
| 297 | if (hubp != NULL && hubp->funcs->set_cursor_position != NULL) | 296 | if (!hubp) |
| 298 | hubp->funcs->set_cursor_position(hubp, &pos_cpy, ¶m); | 297 | continue; |
| 299 | 298 | ||
| 300 | if (xfm != NULL && xfm->funcs->set_cursor_position != NULL) | 299 | if (hubp->funcs->set_cursor_position != NULL) |
| 301 | xfm->funcs->set_cursor_position(xfm, &pos_cpy, ¶m, hubp->curs_attr.width); | 300 | hubp->funcs->set_cursor_position(hubp, &pos_cpy, ¶m); |
| 302 | 301 | ||
| 303 | if (dpp != NULL && dpp->funcs->set_cursor_position != NULL) | 302 | if (dpp != NULL && dpp->funcs->set_cursor_position != NULL) |
| 304 | dpp->funcs->set_cursor_position(dpp, &pos_cpy, ¶m, hubp->curs_attr.width); | 303 | dpp->funcs->set_cursor_position(dpp, &pos_cpy, ¶m, hubp->curs_attr.width); |
diff --git a/drivers/gpu/drm/amd/display/dc/dc_helper.c b/drivers/gpu/drm/amd/display/dc/dc_helper.c index 0d84b2a1ccfd..90e81f7ba919 100644 --- a/drivers/gpu/drm/amd/display/dc/dc_helper.c +++ b/drivers/gpu/drm/amd/display/dc/dc_helper.c | |||
| @@ -1,4 +1,26 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Copyright 2017 Advanced Micro Devices, Inc. | ||
| 3 | * | ||
| 4 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | * copy of this software and associated documentation files (the "Software"), | ||
| 6 | * to deal in the Software without restriction, including without limitation | ||
| 7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | * and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | * Software is furnished to do so, subject to the following conditions: | ||
| 10 | * | ||
| 11 | * The above copyright notice and this permission notice shall be included in | ||
| 12 | * all copies or substantial portions of the Software. | ||
| 13 | * | ||
| 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | * OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | * | ||
| 22 | */ | ||
| 23 | /* | ||
| 2 | * dc_helper.c | 24 | * dc_helper.c |
| 3 | * | 25 | * |
| 4 | * Created on: Aug 30, 2016 | 26 | * Created on: Aug 30, 2016 |
diff --git a/drivers/gpu/drm/amd/display/dc/dce/Makefile b/drivers/gpu/drm/amd/display/dc/dce/Makefile index 8abec0bed379..11401fd8e535 100644 --- a/drivers/gpu/drm/amd/display/dc/dce/Makefile +++ b/drivers/gpu/drm/amd/display/dc/dce/Makefile | |||
| @@ -1,4 +1,25 @@ | |||
| 1 | # | 1 | # |
| 2 | # Copyright 2017 Advanced Micro Devices, Inc. | ||
| 3 | # | ||
| 4 | # Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | # copy of this software and associated documentation files (the "Software"), | ||
| 6 | # to deal in the Software without restriction, including without limitation | ||
| 7 | # the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | # and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | # Software is furnished to do so, subject to the following conditions: | ||
| 10 | # | ||
| 11 | # The above copyright notice and this permission notice shall be included in | ||
| 12 | # all copies or substantial portions of the Software. | ||
| 13 | # | ||
| 14 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | # THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | # OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | # | ||
| 22 | # | ||
| 2 | # Makefile for common 'dce' logic | 23 | # Makefile for common 'dce' logic |
| 3 | # HW object file under this folder follow similar pattern for HW programming | 24 | # HW object file under this folder follow similar pattern for HW programming |
| 4 | # - register offset and/or shift + mask stored in the dec_hw struct | 25 | # - register offset and/or shift + mask stored in the dec_hw struct |
diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_audio.c b/drivers/gpu/drm/amd/display/dc/dce/dce_audio.c index 81c40f8864db..0df9ecb2710c 100644 --- a/drivers/gpu/drm/amd/display/dc/dce/dce_audio.c +++ b/drivers/gpu/drm/amd/display/dc/dce/dce_audio.c | |||
| @@ -352,11 +352,11 @@ void dce_aud_az_enable(struct audio *audio) | |||
| 352 | uint32_t value = AZ_REG_READ(AZALIA_F0_CODEC_PIN_CONTROL_HOT_PLUG_CONTROL); | 352 | uint32_t value = AZ_REG_READ(AZALIA_F0_CODEC_PIN_CONTROL_HOT_PLUG_CONTROL); |
| 353 | 353 | ||
| 354 | set_reg_field_value(value, 1, | 354 | set_reg_field_value(value, 1, |
| 355 | AZALIA_F0_CODEC_PIN_CONTROL_HOT_PLUG_CONTROL, | 355 | AZALIA_F0_CODEC_PIN_CONTROL_HOT_PLUG_CONTROL, |
| 356 | CLOCK_GATING_DISABLE); | 356 | CLOCK_GATING_DISABLE); |
| 357 | set_reg_field_value(value, 1, | 357 | set_reg_field_value(value, 1, |
| 358 | AZALIA_F0_CODEC_PIN_CONTROL_HOT_PLUG_CONTROL, | 358 | AZALIA_F0_CODEC_PIN_CONTROL_HOT_PLUG_CONTROL, |
| 359 | AUDIO_ENABLED); | 359 | AUDIO_ENABLED); |
| 360 | 360 | ||
| 361 | AZ_REG_WRITE(AZALIA_F0_CODEC_PIN_CONTROL_HOT_PLUG_CONTROL, value); | 361 | AZ_REG_WRITE(AZALIA_F0_CODEC_PIN_CONTROL_HOT_PLUG_CONTROL, value); |
| 362 | value = AZ_REG_READ(AZALIA_F0_CODEC_PIN_CONTROL_HOT_PLUG_CONTROL); | 362 | value = AZ_REG_READ(AZALIA_F0_CODEC_PIN_CONTROL_HOT_PLUG_CONTROL); |
diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c b/drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c index 4fd49a16c3b6..e42b6eb1c1f0 100644 --- a/drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c +++ b/drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c | |||
| @@ -87,6 +87,9 @@ static void dce110_update_generic_info_packet( | |||
| 87 | */ | 87 | */ |
| 88 | uint32_t max_retries = 50; | 88 | uint32_t max_retries = 50; |
| 89 | 89 | ||
| 90 | /*we need turn on clock before programming AFMT block*/ | ||
| 91 | REG_UPDATE(AFMT_CNTL, AFMT_AUDIO_CLOCK_EN, 1); | ||
| 92 | |||
| 90 | if (REG(AFMT_VBI_PACKET_CONTROL1)) { | 93 | if (REG(AFMT_VBI_PACKET_CONTROL1)) { |
| 91 | if (packet_index >= 8) | 94 | if (packet_index >= 8) |
| 92 | ASSERT(0); | 95 | ASSERT(0); |
diff --git a/drivers/gpu/drm/amd/display/dc/dce100/Makefile b/drivers/gpu/drm/amd/display/dc/dce100/Makefile index ea40870624b3..a822d4e2a169 100644 --- a/drivers/gpu/drm/amd/display/dc/dce100/Makefile +++ b/drivers/gpu/drm/amd/display/dc/dce100/Makefile | |||
| @@ -1,4 +1,25 @@ | |||
| 1 | # | 1 | # |
| 2 | # Copyright 2017 Advanced Micro Devices, Inc. | ||
| 3 | # | ||
| 4 | # Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | # copy of this software and associated documentation files (the "Software"), | ||
| 6 | # to deal in the Software without restriction, including without limitation | ||
| 7 | # the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | # and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | # Software is furnished to do so, subject to the following conditions: | ||
| 10 | # | ||
| 11 | # The above copyright notice and this permission notice shall be included in | ||
| 12 | # all copies or substantial portions of the Software. | ||
| 13 | # | ||
| 14 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | # THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | # OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | # | ||
| 22 | # | ||
| 2 | # Makefile for the 'controller' sub-component of DAL. | 23 | # Makefile for the 'controller' sub-component of DAL. |
| 3 | # It provides the control and status of HW CRTC block. | 24 | # It provides the control and status of HW CRTC block. |
| 4 | 25 | ||
diff --git a/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c b/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c index 90911258bdb3..3ea43e2a9450 100644 --- a/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c +++ b/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Copyright 2012-15 Advanced Micro Devices, Inc. | 2 | * Copyright 2012-15 Advanced Micro Devices, Inc. |
| 3 | * | 3 | * |
| 4 | * Permission is hereby granted, free of charge, to any person obtaining a | 4 | * Permission is hereby granted, free of charge, to any person obtaining a |
| 5 | * copy of this software and associated documentation files (the "Software"), | 5 | * copy of this software and associated documentation files (the "Software"), |
diff --git a/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.h b/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.h index de8fdf438f9b..2f366d66635d 100644 --- a/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.h +++ b/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.h | |||
| @@ -1,4 +1,27 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Copyright 2017 Advanced Micro Devices, Inc. | ||
| 3 | * | ||
| 4 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | * copy of this software and associated documentation files (the "Software"), | ||
| 6 | * to deal in the Software without restriction, including without limitation | ||
| 7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | * and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | * Software is furnished to do so, subject to the following conditions: | ||
| 10 | * | ||
| 11 | * The above copyright notice and this permission notice shall be included in | ||
| 12 | * all copies or substantial portions of the Software. | ||
| 13 | * | ||
| 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | * OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | * | ||
| 22 | * | ||
| 23 | */ | ||
| 24 | /* | ||
| 2 | * dce100_resource.h | 25 | * dce100_resource.h |
| 3 | * | 26 | * |
| 4 | * Created on: 2016-01-20 | 27 | * Created on: 2016-01-20 |
diff --git a/drivers/gpu/drm/amd/display/dc/dce110/Makefile b/drivers/gpu/drm/amd/display/dc/dce110/Makefile index 98d956e2f218..d564c0eb8b04 100644 --- a/drivers/gpu/drm/amd/display/dc/dce110/Makefile +++ b/drivers/gpu/drm/amd/display/dc/dce110/Makefile | |||
| @@ -1,4 +1,25 @@ | |||
| 1 | # | 1 | # |
| 2 | # Copyright 2017 Advanced Micro Devices, Inc. | ||
| 3 | # | ||
| 4 | # Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | # copy of this software and associated documentation files (the "Software"), | ||
| 6 | # to deal in the Software without restriction, including without limitation | ||
| 7 | # the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | # and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | # Software is furnished to do so, subject to the following conditions: | ||
| 10 | # | ||
| 11 | # The above copyright notice and this permission notice shall be included in | ||
| 12 | # all copies or substantial portions of the Software. | ||
| 13 | # | ||
| 14 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | # THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | # OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | # | ||
| 22 | # | ||
| 2 | # Makefile for the 'controller' sub-component of DAL. | 23 | # Makefile for the 'controller' sub-component of DAL. |
| 3 | # It provides the control and status of HW CRTC block. | 24 | # It provides the control and status of HW CRTC block. |
| 4 | 25 | ||
diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c b/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c index 1229a3315018..07ff8d2faf3f 100644 --- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c +++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c | |||
| @@ -991,6 +991,16 @@ void dce110_disable_stream(struct pipe_ctx *pipe_ctx, int option) | |||
| 991 | struct dc_link *link = stream->sink->link; | 991 | struct dc_link *link = stream->sink->link; |
| 992 | struct dc *dc = pipe_ctx->stream->ctx->dc; | 992 | struct dc *dc = pipe_ctx->stream->ctx->dc; |
| 993 | 993 | ||
| 994 | if (dc_is_hdmi_signal(pipe_ctx->stream->signal)) | ||
| 995 | pipe_ctx->stream_res.stream_enc->funcs->stop_hdmi_info_packets( | ||
| 996 | pipe_ctx->stream_res.stream_enc); | ||
| 997 | |||
| 998 | if (dc_is_dp_signal(pipe_ctx->stream->signal)) | ||
| 999 | pipe_ctx->stream_res.stream_enc->funcs->stop_dp_info_packets( | ||
| 1000 | pipe_ctx->stream_res.stream_enc); | ||
| 1001 | |||
| 1002 | pipe_ctx->stream_res.stream_enc->funcs->audio_mute_control( | ||
| 1003 | pipe_ctx->stream_res.stream_enc, true); | ||
| 994 | if (pipe_ctx->stream_res.audio) { | 1004 | if (pipe_ctx->stream_res.audio) { |
| 995 | pipe_ctx->stream_res.audio->funcs->az_disable(pipe_ctx->stream_res.audio); | 1005 | pipe_ctx->stream_res.audio->funcs->az_disable(pipe_ctx->stream_res.audio); |
| 996 | 1006 | ||
| @@ -1015,18 +1025,6 @@ void dce110_disable_stream(struct pipe_ctx *pipe_ctx, int option) | |||
| 1015 | */ | 1025 | */ |
| 1016 | } | 1026 | } |
| 1017 | 1027 | ||
| 1018 | if (dc_is_hdmi_signal(pipe_ctx->stream->signal)) | ||
| 1019 | pipe_ctx->stream_res.stream_enc->funcs->stop_hdmi_info_packets( | ||
| 1020 | pipe_ctx->stream_res.stream_enc); | ||
| 1021 | |||
| 1022 | if (dc_is_dp_signal(pipe_ctx->stream->signal)) | ||
| 1023 | pipe_ctx->stream_res.stream_enc->funcs->stop_dp_info_packets( | ||
| 1024 | pipe_ctx->stream_res.stream_enc); | ||
| 1025 | |||
| 1026 | pipe_ctx->stream_res.stream_enc->funcs->audio_mute_control( | ||
| 1027 | pipe_ctx->stream_res.stream_enc, true); | ||
| 1028 | |||
| 1029 | |||
| 1030 | /* blank at encoder level */ | 1028 | /* blank at encoder level */ |
| 1031 | if (dc_is_dp_signal(pipe_ctx->stream->signal)) { | 1029 | if (dc_is_dp_signal(pipe_ctx->stream->signal)) { |
| 1032 | if (pipe_ctx->stream->sink->link->connector_signal == SIGNAL_TYPE_EDP) | 1030 | if (pipe_ctx->stream->sink->link->connector_signal == SIGNAL_TYPE_EDP) |
| @@ -1774,6 +1772,10 @@ static enum dc_status validate_fbc(struct dc *dc, | |||
| 1774 | if (pipe_ctx->stream->sink->link->psr_enabled) | 1772 | if (pipe_ctx->stream->sink->link->psr_enabled) |
| 1775 | return DC_ERROR_UNEXPECTED; | 1773 | return DC_ERROR_UNEXPECTED; |
| 1776 | 1774 | ||
| 1775 | /* Nothing to compress */ | ||
| 1776 | if (!pipe_ctx->plane_state) | ||
| 1777 | return DC_ERROR_UNEXPECTED; | ||
| 1778 | |||
| 1777 | /* Only for non-linear tiling */ | 1779 | /* Only for non-linear tiling */ |
| 1778 | if (pipe_ctx->plane_state->tiling_info.gfx8.array_mode == DC_ARRAY_LINEAR_GENERAL) | 1780 | if (pipe_ctx->plane_state->tiling_info.gfx8.array_mode == DC_ARRAY_LINEAR_GENERAL) |
| 1779 | return DC_ERROR_UNEXPECTED; | 1781 | return DC_ERROR_UNEXPECTED; |
| @@ -1868,8 +1870,10 @@ static void dce110_reset_hw_ctx_wrap( | |||
| 1868 | pipe_need_reprogram(pipe_ctx_old, pipe_ctx)) { | 1870 | pipe_need_reprogram(pipe_ctx_old, pipe_ctx)) { |
| 1869 | struct clock_source *old_clk = pipe_ctx_old->clock_source; | 1871 | struct clock_source *old_clk = pipe_ctx_old->clock_source; |
| 1870 | 1872 | ||
| 1871 | /* disable already, no need to disable again */ | 1873 | /* Disable if new stream is null. O/w, if stream is |
| 1872 | if (pipe_ctx->stream && !pipe_ctx->stream->dpms_off) | 1874 | * disabled already, no need to disable again. |
| 1875 | */ | ||
| 1876 | if (!pipe_ctx->stream || !pipe_ctx->stream->dpms_off) | ||
| 1873 | core_link_disable_stream(pipe_ctx_old, FREE_ACQUIRED_RESOURCE); | 1877 | core_link_disable_stream(pipe_ctx_old, FREE_ACQUIRED_RESOURCE); |
| 1874 | 1878 | ||
| 1875 | pipe_ctx_old->stream_res.tg->funcs->set_blank(pipe_ctx_old->stream_res.tg, true); | 1879 | pipe_ctx_old->stream_res.tg->funcs->set_blank(pipe_ctx_old->stream_res.tg, true); |
diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c b/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c index db96d2b47ff1..42df17f9aa8d 100644 --- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c +++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Copyright 2012-15 Advanced Micro Devices, Inc. | 2 | * Copyright 2012-15 Advanced Micro Devices, Inc. |
| 3 | * | 3 | * |
| 4 | * Permission is hereby granted, free of charge, to any person obtaining a | 4 | * Permission is hereby granted, free of charge, to any person obtaining a |
| 5 | * copy of this software and associated documentation files (the "Software"), | 5 | * copy of this software and associated documentation files (the "Software"), |
| @@ -1037,11 +1037,13 @@ static bool underlay_create(struct dc_context *ctx, struct resource_pool *pool) | |||
| 1037 | struct dce110_opp *dce110_oppv = kzalloc(sizeof(*dce110_oppv), | 1037 | struct dce110_opp *dce110_oppv = kzalloc(sizeof(*dce110_oppv), |
| 1038 | GFP_KERNEL); | 1038 | GFP_KERNEL); |
| 1039 | 1039 | ||
| 1040 | if ((dce110_tgv == NULL) || | 1040 | if (!dce110_tgv || !dce110_xfmv || !dce110_miv || !dce110_oppv) { |
| 1041 | (dce110_xfmv == NULL) || | 1041 | kfree(dce110_tgv); |
| 1042 | (dce110_miv == NULL) || | 1042 | kfree(dce110_xfmv); |
| 1043 | (dce110_oppv == NULL)) | 1043 | kfree(dce110_miv); |
| 1044 | return false; | 1044 | kfree(dce110_oppv); |
| 1045 | return false; | ||
| 1046 | } | ||
| 1045 | 1047 | ||
| 1046 | dce110_opp_v_construct(dce110_oppv, ctx); | 1048 | dce110_opp_v_construct(dce110_oppv, ctx); |
| 1047 | 1049 | ||
diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_timing_generator.c b/drivers/gpu/drm/amd/display/dc/dce110/dce110_timing_generator.c index 67ac737eaa7e..4befce6cd87a 100644 --- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_timing_generator.c +++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_timing_generator.c | |||
| @@ -1112,10 +1112,7 @@ bool dce110_timing_generator_validate_timing( | |||
| 1112 | enum signal_type signal) | 1112 | enum signal_type signal) |
| 1113 | { | 1113 | { |
| 1114 | uint32_t h_blank; | 1114 | uint32_t h_blank; |
| 1115 | uint32_t h_back_porch; | 1115 | uint32_t h_back_porch, hsync_offset, h_sync_start; |
| 1116 | uint32_t hsync_offset = timing->h_border_right + | ||
| 1117 | timing->h_front_porch; | ||
| 1118 | uint32_t h_sync_start = timing->h_addressable + hsync_offset; | ||
| 1119 | 1116 | ||
| 1120 | struct dce110_timing_generator *tg110 = DCE110TG_FROM_TG(tg); | 1117 | struct dce110_timing_generator *tg110 = DCE110TG_FROM_TG(tg); |
| 1121 | 1118 | ||
| @@ -1124,6 +1121,9 @@ bool dce110_timing_generator_validate_timing( | |||
| 1124 | if (!timing) | 1121 | if (!timing) |
| 1125 | return false; | 1122 | return false; |
| 1126 | 1123 | ||
| 1124 | hsync_offset = timing->h_border_right + timing->h_front_porch; | ||
| 1125 | h_sync_start = timing->h_addressable + hsync_offset; | ||
| 1126 | |||
| 1127 | /* Currently we don't support 3D, so block all 3D timings */ | 1127 | /* Currently we don't support 3D, so block all 3D timings */ |
| 1128 | if (timing->timing_3d_format != TIMING_3D_FORMAT_NONE) | 1128 | if (timing->timing_3d_format != TIMING_3D_FORMAT_NONE) |
| 1129 | return false; | 1129 | return false; |
diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_timing_generator_v.c b/drivers/gpu/drm/amd/display/dc/dce110/dce110_timing_generator_v.c index 07d9303d5477..59b4cd329715 100644 --- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_timing_generator_v.c +++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_timing_generator_v.c | |||
| @@ -1,3 +1,26 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2017 Advanced Micro Devices, Inc. | ||
| 3 | * | ||
| 4 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | * copy of this software and associated documentation files (the "Software"), | ||
| 6 | * to deal in the Software without restriction, including without limitation | ||
| 7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | * and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | * Software is furnished to do so, subject to the following conditions: | ||
| 10 | * | ||
| 11 | * The above copyright notice and this permission notice shall be included in | ||
| 12 | * all copies or substantial portions of the Software. | ||
| 13 | * | ||
| 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | * OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | * | ||
| 22 | */ | ||
| 23 | |||
| 1 | #include "dm_services.h" | 24 | #include "dm_services.h" |
| 2 | 25 | ||
| 3 | /* include DCE11 register header files */ | 26 | /* include DCE11 register header files */ |
diff --git a/drivers/gpu/drm/amd/display/dc/dce112/Makefile b/drivers/gpu/drm/amd/display/dc/dce112/Makefile index 265ac4310d85..8e090446d511 100644 --- a/drivers/gpu/drm/amd/display/dc/dce112/Makefile +++ b/drivers/gpu/drm/amd/display/dc/dce112/Makefile | |||
| @@ -1,4 +1,25 @@ | |||
| 1 | # | 1 | # |
| 2 | # Copyright 2017 Advanced Micro Devices, Inc. | ||
| 3 | # | ||
| 4 | # Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | # copy of this software and associated documentation files (the "Software"), | ||
| 6 | # to deal in the Software without restriction, including without limitation | ||
| 7 | # the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | # and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | # Software is furnished to do so, subject to the following conditions: | ||
| 10 | # | ||
| 11 | # The above copyright notice and this permission notice shall be included in | ||
| 12 | # all copies or substantial portions of the Software. | ||
| 13 | # | ||
| 14 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | # THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | # OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | # | ||
| 22 | # | ||
| 2 | # Makefile for the 'controller' sub-component of DAL. | 23 | # Makefile for the 'controller' sub-component of DAL. |
| 3 | # It provides the control and status of HW CRTC block. | 24 | # It provides the control and status of HW CRTC block. |
| 4 | 25 | ||
diff --git a/drivers/gpu/drm/amd/display/dc/dce120/Makefile b/drivers/gpu/drm/amd/display/dc/dce120/Makefile index 1779b963525c..37db1f8d45ea 100644 --- a/drivers/gpu/drm/amd/display/dc/dce120/Makefile +++ b/drivers/gpu/drm/amd/display/dc/dce120/Makefile | |||
| @@ -1,4 +1,25 @@ | |||
| 1 | # | 1 | # |
| 2 | # Copyright 2017 Advanced Micro Devices, Inc. | ||
| 3 | # | ||
| 4 | # Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | # copy of this software and associated documentation files (the "Software"), | ||
| 6 | # to deal in the Software without restriction, including without limitation | ||
| 7 | # the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | # and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | # Software is furnished to do so, subject to the following conditions: | ||
| 10 | # | ||
| 11 | # The above copyright notice and this permission notice shall be included in | ||
| 12 | # all copies or substantial portions of the Software. | ||
| 13 | # | ||
| 14 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | # THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | # OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | # | ||
| 22 | # | ||
| 2 | # Makefile for the 'controller' sub-component of DAL. | 23 | # Makefile for the 'controller' sub-component of DAL. |
| 3 | # It provides the control and status of HW CRTC block. | 24 | # It provides the control and status of HW CRTC block. |
| 4 | 25 | ||
| @@ -8,4 +29,4 @@ dce120_hw_sequencer.o | |||
| 8 | 29 | ||
| 9 | AMD_DAL_DCE120 = $(addprefix $(AMDDALPATH)/dc/dce120/,$(DCE120)) | 30 | AMD_DAL_DCE120 = $(addprefix $(AMDDALPATH)/dc/dce120/,$(DCE120)) |
| 10 | 31 | ||
| 11 | AMD_DISPLAY_FILES += $(AMD_DAL_DCE120) \ No newline at end of file | 32 | AMD_DISPLAY_FILES += $(AMD_DAL_DCE120) |
diff --git a/drivers/gpu/drm/amd/display/dc/dce80/Makefile b/drivers/gpu/drm/amd/display/dc/dce80/Makefile index c1105895e5fa..bc388aa4b2f5 100644 --- a/drivers/gpu/drm/amd/display/dc/dce80/Makefile +++ b/drivers/gpu/drm/amd/display/dc/dce80/Makefile | |||
| @@ -1,4 +1,25 @@ | |||
| 1 | # | 1 | # |
| 2 | # Copyright 2017 Advanced Micro Devices, Inc. | ||
| 3 | # | ||
| 4 | # Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | # copy of this software and associated documentation files (the "Software"), | ||
| 6 | # to deal in the Software without restriction, including without limitation | ||
| 7 | # the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | # and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | # Software is furnished to do so, subject to the following conditions: | ||
| 10 | # | ||
| 11 | # The above copyright notice and this permission notice shall be included in | ||
| 12 | # all copies or substantial portions of the Software. | ||
| 13 | # | ||
| 14 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | # THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | # OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | # | ||
| 22 | # | ||
| 2 | # Makefile for the 'controller' sub-component of DAL. | 23 | # Makefile for the 'controller' sub-component of DAL. |
| 3 | # It provides the control and status of HW CRTC block. | 24 | # It provides the control and status of HW CRTC block. |
| 4 | 25 | ||
diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/Makefile b/drivers/gpu/drm/amd/display/dc/dcn10/Makefile index ebeb88283a14..f565a6042970 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn10/Makefile +++ b/drivers/gpu/drm/amd/display/dc/dcn10/Makefile | |||
| @@ -1,4 +1,25 @@ | |||
| 1 | # | 1 | # |
| 2 | # Copyright 2017 Advanced Micro Devices, Inc. | ||
| 3 | # | ||
| 4 | # Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | # copy of this software and associated documentation files (the "Software"), | ||
| 6 | # to deal in the Software without restriction, including without limitation | ||
| 7 | # the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | # and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | # Software is furnished to do so, subject to the following conditions: | ||
| 10 | # | ||
| 11 | # The above copyright notice and this permission notice shall be included in | ||
| 12 | # all copies or substantial portions of the Software. | ||
| 13 | # | ||
| 14 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | # THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | # OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | # | ||
| 22 | # | ||
| 2 | # Makefile for DCN. | 23 | # Makefile for DCN. |
| 3 | 24 | ||
| 4 | DCN10 = dcn10_resource.o dcn10_ipp.o dcn10_hw_sequencer.o \ | 25 | DCN10 = dcn10_resource.o dcn10_ipp.o dcn10_hw_sequencer.o \ |
diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c index 4c4bd72d4e40..9fc8f827f2a1 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c +++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c | |||
| @@ -912,11 +912,13 @@ static struct pipe_ctx *dcn10_acquire_idle_pipe_for_layer( | |||
| 912 | struct pipe_ctx *head_pipe = resource_get_head_pipe_for_stream(res_ctx, stream); | 912 | struct pipe_ctx *head_pipe = resource_get_head_pipe_for_stream(res_ctx, stream); |
| 913 | struct pipe_ctx *idle_pipe = find_idle_secondary_pipe(res_ctx, pool); | 913 | struct pipe_ctx *idle_pipe = find_idle_secondary_pipe(res_ctx, pool); |
| 914 | 914 | ||
| 915 | if (!head_pipe) | 915 | if (!head_pipe) { |
| 916 | ASSERT(0); | 916 | ASSERT(0); |
| 917 | return NULL; | ||
| 918 | } | ||
| 917 | 919 | ||
| 918 | if (!idle_pipe) | 920 | if (!idle_pipe) |
| 919 | return false; | 921 | return NULL; |
| 920 | 922 | ||
| 921 | idle_pipe->stream = head_pipe->stream; | 923 | idle_pipe->stream = head_pipe->stream; |
| 922 | idle_pipe->stream_res.tg = head_pipe->stream_res.tg; | 924 | idle_pipe->stream_res.tg = head_pipe->stream_res.tg; |
diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_timing_generator.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_timing_generator.c index c7333cdf1802..fced178c8c79 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_timing_generator.c +++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_timing_generator.c | |||
| @@ -496,9 +496,6 @@ static bool tgn10_validate_timing( | |||
| 496 | timing->timing_3d_format != TIMING_3D_FORMAT_INBAND_FA) | 496 | timing->timing_3d_format != TIMING_3D_FORMAT_INBAND_FA) |
| 497 | return false; | 497 | return false; |
| 498 | 498 | ||
| 499 | if (timing->timing_3d_format != TIMING_3D_FORMAT_NONE && | ||
| 500 | tg->ctx->dc->debug.disable_stereo_support) | ||
| 501 | return false; | ||
| 502 | /* Temporarily blocking interlacing mode until it's supported */ | 499 | /* Temporarily blocking interlacing mode until it's supported */ |
| 503 | if (timing->flags.INTERLACE == 1) | 500 | if (timing->flags.INTERLACE == 1) |
| 504 | return false; | 501 | return false; |
diff --git a/drivers/gpu/drm/amd/display/dc/dml/Makefile b/drivers/gpu/drm/amd/display/dc/dml/Makefile index 87bab8e8139f..3488af2b5786 100644 --- a/drivers/gpu/drm/amd/display/dc/dml/Makefile +++ b/drivers/gpu/drm/amd/display/dc/dml/Makefile | |||
| @@ -1,4 +1,25 @@ | |||
| 1 | # | 1 | # |
| 2 | # Copyright 2017 Advanced Micro Devices, Inc. | ||
| 3 | # | ||
| 4 | # Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | # copy of this software and associated documentation files (the "Software"), | ||
| 6 | # to deal in the Software without restriction, including without limitation | ||
| 7 | # the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | # and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | # Software is furnished to do so, subject to the following conditions: | ||
| 10 | # | ||
| 11 | # The above copyright notice and this permission notice shall be included in | ||
| 12 | # all copies or substantial portions of the Software. | ||
| 13 | # | ||
| 14 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | # THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | # OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | # | ||
| 22 | # | ||
| 2 | # Makefile for the 'utils' sub-component of DAL. | 23 | # Makefile for the 'utils' sub-component of DAL. |
| 3 | # It provides the general basic services required by other DAL | 24 | # It provides the general basic services required by other DAL |
| 4 | # subcomponents. | 25 | # subcomponents. |
diff --git a/drivers/gpu/drm/amd/display/dc/gpio/Makefile b/drivers/gpu/drm/amd/display/dc/gpio/Makefile index 70d01a9e9676..562ee189d780 100644 --- a/drivers/gpu/drm/amd/display/dc/gpio/Makefile +++ b/drivers/gpu/drm/amd/display/dc/gpio/Makefile | |||
| @@ -1,4 +1,25 @@ | |||
| 1 | # | 1 | # |
| 2 | # Copyright 2017 Advanced Micro Devices, Inc. | ||
| 3 | # | ||
| 4 | # Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | # copy of this software and associated documentation files (the "Software"), | ||
| 6 | # to deal in the Software without restriction, including without limitation | ||
| 7 | # the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | # and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | # Software is furnished to do so, subject to the following conditions: | ||
| 10 | # | ||
| 11 | # The above copyright notice and this permission notice shall be included in | ||
| 12 | # all copies or substantial portions of the Software. | ||
| 13 | # | ||
| 14 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | # THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | # OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | # | ||
| 22 | # | ||
| 2 | # Makefile for the 'gpio' sub-component of DAL. | 23 | # Makefile for the 'gpio' sub-component of DAL. |
| 3 | # It provides the control and status of HW GPIO pins. | 24 | # It provides the control and status of HW GPIO pins. |
| 4 | 25 | ||
diff --git a/drivers/gpu/drm/amd/display/dc/i2caux/Makefile b/drivers/gpu/drm/amd/display/dc/i2caux/Makefile index 55603400acd9..352885cb4d07 100644 --- a/drivers/gpu/drm/amd/display/dc/i2caux/Makefile +++ b/drivers/gpu/drm/amd/display/dc/i2caux/Makefile | |||
| @@ -1,4 +1,25 @@ | |||
| 1 | # | 1 | # |
| 2 | # Copyright 2017 Advanced Micro Devices, Inc. | ||
| 3 | # | ||
| 4 | # Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | # copy of this software and associated documentation files (the "Software"), | ||
| 6 | # to deal in the Software without restriction, including without limitation | ||
| 7 | # the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | # and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | # Software is furnished to do so, subject to the following conditions: | ||
| 10 | # | ||
| 11 | # The above copyright notice and this permission notice shall be included in | ||
| 12 | # all copies or substantial portions of the Software. | ||
| 13 | # | ||
| 14 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | # THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | # OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | # | ||
| 22 | # | ||
| 2 | # Makefile for the 'i2c' sub-component of DAL. | 23 | # Makefile for the 'i2c' sub-component of DAL. |
| 3 | # It provides the control and status of HW i2c engine of the adapter. | 24 | # It provides the control and status of HW i2c engine of the adapter. |
| 4 | 25 | ||
diff --git a/drivers/gpu/drm/amd/display/dc/inc/core_status.h b/drivers/gpu/drm/amd/display/dc/inc/core_status.h index 01df85641684..94fc31080fda 100644 --- a/drivers/gpu/drm/amd/display/dc/inc/core_status.h +++ b/drivers/gpu/drm/amd/display/dc/inc/core_status.h | |||
| @@ -38,7 +38,7 @@ enum dc_status { | |||
| 38 | DC_FAIL_DETACH_SURFACES = 8, | 38 | DC_FAIL_DETACH_SURFACES = 8, |
| 39 | DC_FAIL_SURFACE_VALIDATE = 9, | 39 | DC_FAIL_SURFACE_VALIDATE = 9, |
| 40 | DC_NO_DP_LINK_BANDWIDTH = 10, | 40 | DC_NO_DP_LINK_BANDWIDTH = 10, |
| 41 | DC_EXCEED_DONGLE_MAX_CLK = 11, | 41 | DC_EXCEED_DONGLE_CAP = 11, |
| 42 | DC_SURFACE_PIXEL_FORMAT_UNSUPPORTED = 12, | 42 | DC_SURFACE_PIXEL_FORMAT_UNSUPPORTED = 12, |
| 43 | DC_FAIL_BANDWIDTH_VALIDATE = 13, /* BW and Watermark validation */ | 43 | DC_FAIL_BANDWIDTH_VALIDATE = 13, /* BW and Watermark validation */ |
| 44 | DC_FAIL_SCALING = 14, | 44 | DC_FAIL_SCALING = 14, |
diff --git a/drivers/gpu/drm/amd/display/dc/inc/hw/link_encoder.h b/drivers/gpu/drm/amd/display/dc/inc/hw/link_encoder.h index 3d33bcda7059..498b7f05c5ca 100644 --- a/drivers/gpu/drm/amd/display/dc/inc/hw/link_encoder.h +++ b/drivers/gpu/drm/amd/display/dc/inc/hw/link_encoder.h | |||
| @@ -1,4 +1,26 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Copyright 2017 Advanced Micro Devices, Inc. | ||
| 3 | * | ||
| 4 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | * copy of this software and associated documentation files (the "Software"), | ||
| 6 | * to deal in the Software without restriction, including without limitation | ||
| 7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | * and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | * Software is furnished to do so, subject to the following conditions: | ||
| 10 | * | ||
| 11 | * The above copyright notice and this permission notice shall be included in | ||
| 12 | * all copies or substantial portions of the Software. | ||
| 13 | * | ||
| 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | * OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | * | ||
| 22 | */ | ||
| 23 | /* | ||
| 2 | * link_encoder.h | 24 | * link_encoder.h |
| 3 | * | 25 | * |
| 4 | * Created on: Oct 6, 2015 | 26 | * Created on: Oct 6, 2015 |
diff --git a/drivers/gpu/drm/amd/display/dc/inc/hw/stream_encoder.h b/drivers/gpu/drm/amd/display/dc/inc/hw/stream_encoder.h index 3050afe8e8a9..b5db1692393c 100644 --- a/drivers/gpu/drm/amd/display/dc/inc/hw/stream_encoder.h +++ b/drivers/gpu/drm/amd/display/dc/inc/hw/stream_encoder.h | |||
| @@ -1,4 +1,26 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Copyright 2017 Advanced Micro Devices, Inc. | ||
| 3 | * | ||
| 4 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | * copy of this software and associated documentation files (the "Software"), | ||
| 6 | * to deal in the Software without restriction, including without limitation | ||
| 7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | * and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | * Software is furnished to do so, subject to the following conditions: | ||
| 10 | * | ||
| 11 | * The above copyright notice and this permission notice shall be included in | ||
| 12 | * all copies or substantial portions of the Software. | ||
| 13 | * | ||
| 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | * OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | * | ||
| 22 | */ | ||
| 23 | /* | ||
| 2 | * stream_encoder.h | 24 | * stream_encoder.h |
| 3 | * | 25 | * |
| 4 | */ | 26 | */ |
diff --git a/drivers/gpu/drm/amd/display/dc/inc/hw/transform.h b/drivers/gpu/drm/amd/display/dc/inc/hw/transform.h index 7c08bc62c1f5..ea88997e1bbd 100644 --- a/drivers/gpu/drm/amd/display/dc/inc/hw/transform.h +++ b/drivers/gpu/drm/amd/display/dc/inc/hw/transform.h | |||
| @@ -259,13 +259,6 @@ struct transform_funcs { | |||
| 259 | struct transform *xfm_base, | 259 | struct transform *xfm_base, |
| 260 | const struct dc_cursor_attributes *attr); | 260 | const struct dc_cursor_attributes *attr); |
| 261 | 261 | ||
| 262 | void (*set_cursor_position)( | ||
| 263 | struct transform *xfm_base, | ||
| 264 | const struct dc_cursor_position *pos, | ||
| 265 | const struct dc_cursor_mi_param *param, | ||
| 266 | uint32_t width | ||
| 267 | ); | ||
| 268 | |||
| 269 | }; | 262 | }; |
| 270 | 263 | ||
| 271 | const uint16_t *get_filter_2tap_16p(void); | 264 | const uint16_t *get_filter_2tap_16p(void); |
diff --git a/drivers/gpu/drm/amd/display/dc/irq/Makefile b/drivers/gpu/drm/amd/display/dc/irq/Makefile index c7e93f7223bd..498515aad4a5 100644 --- a/drivers/gpu/drm/amd/display/dc/irq/Makefile +++ b/drivers/gpu/drm/amd/display/dc/irq/Makefile | |||
| @@ -1,4 +1,25 @@ | |||
| 1 | # | 1 | # |
| 2 | # Copyright 2017 Advanced Micro Devices, Inc. | ||
| 3 | # | ||
| 4 | # Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | # copy of this software and associated documentation files (the "Software"), | ||
| 6 | # to deal in the Software without restriction, including without limitation | ||
| 7 | # the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | # and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | # Software is furnished to do so, subject to the following conditions: | ||
| 10 | # | ||
| 11 | # The above copyright notice and this permission notice shall be included in | ||
| 12 | # all copies or substantial portions of the Software. | ||
| 13 | # | ||
| 14 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | # THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | # OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | # | ||
| 22 | # | ||
| 2 | # Makefile for the 'audio' sub-component of DAL. | 23 | # Makefile for the 'audio' sub-component of DAL. |
| 3 | # It provides the control and status of HW adapter resources, | 24 | # It provides the control and status of HW adapter resources, |
| 4 | # that are global for the ASIC and sharable between pipes. | 25 | # that are global for the ASIC and sharable between pipes. |
diff --git a/drivers/gpu/drm/amd/display/dc/virtual/Makefile b/drivers/gpu/drm/amd/display/dc/virtual/Makefile index fc0b7318d9cc..07326d244d50 100644 --- a/drivers/gpu/drm/amd/display/dc/virtual/Makefile +++ b/drivers/gpu/drm/amd/display/dc/virtual/Makefile | |||
| @@ -1,4 +1,25 @@ | |||
| 1 | # | 1 | # |
| 2 | # Copyright 2017 Advanced Micro Devices, Inc. | ||
| 3 | # | ||
| 4 | # Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | # copy of this software and associated documentation files (the "Software"), | ||
| 6 | # to deal in the Software without restriction, including without limitation | ||
| 7 | # the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | # and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | # Software is furnished to do so, subject to the following conditions: | ||
| 10 | # | ||
| 11 | # The above copyright notice and this permission notice shall be included in | ||
| 12 | # all copies or substantial portions of the Software. | ||
| 13 | # | ||
| 14 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | # THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | # OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | # | ||
| 22 | # | ||
| 2 | # Makefile for the virtual sub-component of DAL. | 23 | # Makefile for the virtual sub-component of DAL. |
| 3 | # It provides the control and status of HW CRTC block. | 24 | # It provides the control and status of HW CRTC block. |
| 4 | 25 | ||
diff --git a/drivers/gpu/drm/amd/display/modules/freesync/Makefile b/drivers/gpu/drm/amd/display/modules/freesync/Makefile index db8e0ff6d7a9..fb9a499780e8 100644 --- a/drivers/gpu/drm/amd/display/modules/freesync/Makefile +++ b/drivers/gpu/drm/amd/display/modules/freesync/Makefile | |||
| @@ -1,4 +1,25 @@ | |||
| 1 | # | 1 | # |
| 2 | # Copyright 2017 Advanced Micro Devices, Inc. | ||
| 3 | # | ||
| 4 | # Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | # copy of this software and associated documentation files (the "Software"), | ||
| 6 | # to deal in the Software without restriction, including without limitation | ||
| 7 | # the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | # and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | # Software is furnished to do so, subject to the following conditions: | ||
| 10 | # | ||
| 11 | # The above copyright notice and this permission notice shall be included in | ||
| 12 | # all copies or substantial portions of the Software. | ||
| 13 | # | ||
| 14 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | # THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | # OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | # | ||
| 22 | # | ||
| 2 | # Makefile for the 'freesync' sub-module of DAL. | 23 | # Makefile for the 'freesync' sub-module of DAL. |
| 3 | # | 24 | # |
| 4 | 25 | ||
diff --git a/drivers/gpu/drm/amd/lib/Makefile b/drivers/gpu/drm/amd/lib/Makefile index 87cd7009e80f..690243001e1a 100644 --- a/drivers/gpu/drm/amd/lib/Makefile +++ b/drivers/gpu/drm/amd/lib/Makefile | |||
| @@ -1,4 +1,25 @@ | |||
| 1 | # | 1 | # |
| 2 | # Copyright 2017 Advanced Micro Devices, Inc. | ||
| 3 | # | ||
| 4 | # Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | # copy of this software and associated documentation files (the "Software"), | ||
| 6 | # to deal in the Software without restriction, including without limitation | ||
| 7 | # the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | # and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | # Software is furnished to do so, subject to the following conditions: | ||
| 10 | # | ||
| 11 | # The above copyright notice and this permission notice shall be included in | ||
| 12 | # all copies or substantial portions of the Software. | ||
| 13 | # | ||
| 14 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | # THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | # OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | # | ||
| 22 | # | ||
| 2 | # Makefile for AMD library routines, which are used by AMD driver | 23 | # Makefile for AMD library routines, which are used by AMD driver |
| 3 | # components. | 24 | # components. |
| 4 | # | 25 | # |
diff --git a/drivers/gpu/drm/amd/powerplay/Makefile b/drivers/gpu/drm/amd/powerplay/Makefile index 8c55c6e254d9..231785a9e24c 100644 --- a/drivers/gpu/drm/amd/powerplay/Makefile +++ b/drivers/gpu/drm/amd/powerplay/Makefile | |||
| @@ -1,4 +1,24 @@ | |||
| 1 | # SPDX-License-Identifier: GPL-2.0 | 1 | # |
| 2 | # Copyright 2017 Advanced Micro Devices, Inc. | ||
| 3 | # | ||
| 4 | # Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | # copy of this software and associated documentation files (the "Software"), | ||
| 6 | # to deal in the Software without restriction, including without limitation | ||
| 7 | # the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | # and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | # Software is furnished to do so, subject to the following conditions: | ||
| 10 | # | ||
| 11 | # The above copyright notice and this permission notice shall be included in | ||
| 12 | # all copies or substantial portions of the Software. | ||
| 13 | # | ||
| 14 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | # THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | # OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | # | ||
| 2 | 22 | ||
| 3 | subdir-ccflags-y += \ | 23 | subdir-ccflags-y += \ |
| 4 | -I$(FULL_AMD_PATH)/powerplay/inc/ \ | 24 | -I$(FULL_AMD_PATH)/powerplay/inc/ \ |
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/Makefile b/drivers/gpu/drm/amd/powerplay/hwmgr/Makefile index 824fb6fe54ae..a212c27f2e17 100644 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/Makefile +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/Makefile | |||
| @@ -1,4 +1,24 @@ | |||
| 1 | # SPDX-License-Identifier: GPL-2.0 | 1 | # |
| 2 | # Copyright 2017 Advanced Micro Devices, Inc. | ||
| 3 | # | ||
| 4 | # Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | # copy of this software and associated documentation files (the "Software"), | ||
| 6 | # to deal in the Software without restriction, including without limitation | ||
| 7 | # the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | # and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | # Software is furnished to do so, subject to the following conditions: | ||
| 10 | # | ||
| 11 | # The above copyright notice and this permission notice shall be included in | ||
| 12 | # all copies or substantial portions of the Software. | ||
| 13 | # | ||
| 14 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | # THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | # OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | # | ||
| 2 | # | 22 | # |
| 3 | # Makefile for the 'hw manager' sub-component of powerplay. | 23 | # Makefile for the 'hw manager' sub-component of powerplay. |
| 4 | # It provides the hardware management services for the driver. | 24 | # It provides the hardware management services for the driver. |
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/pp_overdriver.c b/drivers/gpu/drm/amd/powerplay/hwmgr/pp_overdriver.c index 67fae834bc67..8de384bf9a8f 100644 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/pp_overdriver.c +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/pp_overdriver.c | |||
| @@ -1,4 +1,26 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | 1 | /* |
| 2 | * Copyright 2017 Advanced Micro Devices, Inc. | ||
| 3 | * | ||
| 4 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | * copy of this software and associated documentation files (the "Software"), | ||
| 6 | * to deal in the Software without restriction, including without limitation | ||
| 7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | * and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | * Software is furnished to do so, subject to the following conditions: | ||
| 10 | * | ||
| 11 | * The above copyright notice and this permission notice shall be included in | ||
| 12 | * all copies or substantial portions of the Software. | ||
| 13 | * | ||
| 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | * OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | * | ||
| 22 | */ | ||
| 23 | |||
| 2 | #include "pp_overdriver.h" | 24 | #include "pp_overdriver.h" |
| 3 | #include <linux/errno.h> | 25 | #include <linux/errno.h> |
| 4 | 26 | ||
diff --git a/drivers/gpu/drm/amd/powerplay/inc/smu72.h b/drivers/gpu/drm/amd/powerplay/inc/smu72.h index 08cd70c75d8b..9ad1cefff79f 100644 --- a/drivers/gpu/drm/amd/powerplay/inc/smu72.h +++ b/drivers/gpu/drm/amd/powerplay/inc/smu72.h | |||
| @@ -1,4 +1,26 @@ | |||
| 1 | /* SPDX-License-Identifier: GPL-2.0 */ | 1 | /* |
| 2 | * Copyright 2017 Advanced Micro Devices, Inc. | ||
| 3 | * | ||
| 4 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | * copy of this software and associated documentation files (the "Software"), | ||
| 6 | * to deal in the Software without restriction, including without limitation | ||
| 7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | * and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | * Software is furnished to do so, subject to the following conditions: | ||
| 10 | * | ||
| 11 | * The above copyright notice and this permission notice shall be included in | ||
| 12 | * all copies or substantial portions of the Software. | ||
| 13 | * | ||
| 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | * OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | * | ||
| 22 | */ | ||
| 23 | |||
| 2 | #ifndef SMU72_H | 24 | #ifndef SMU72_H |
| 3 | #define SMU72_H | 25 | #define SMU72_H |
| 4 | 26 | ||
diff --git a/drivers/gpu/drm/amd/powerplay/inc/smu72_discrete.h b/drivers/gpu/drm/amd/powerplay/inc/smu72_discrete.h index b2edbc0c3c4d..2aefbb85f620 100644 --- a/drivers/gpu/drm/amd/powerplay/inc/smu72_discrete.h +++ b/drivers/gpu/drm/amd/powerplay/inc/smu72_discrete.h | |||
| @@ -1,4 +1,26 @@ | |||
| 1 | /* SPDX-License-Identifier: GPL-2.0 */ | 1 | /* |
| 2 | * Copyright 2017 Advanced Micro Devices, Inc. | ||
| 3 | * | ||
| 4 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | * copy of this software and associated documentation files (the "Software"), | ||
| 6 | * to deal in the Software without restriction, including without limitation | ||
| 7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | * and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | * Software is furnished to do so, subject to the following conditions: | ||
| 10 | * | ||
| 11 | * The above copyright notice and this permission notice shall be included in | ||
| 12 | * all copies or substantial portions of the Software. | ||
| 13 | * | ||
| 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | * OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | * | ||
| 22 | */ | ||
| 23 | |||
| 2 | #ifndef SMU72_DISCRETE_H | 24 | #ifndef SMU72_DISCRETE_H |
| 3 | #define SMU72_DISCRETE_H | 25 | #define SMU72_DISCRETE_H |
| 4 | 26 | ||
diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/Makefile b/drivers/gpu/drm/amd/powerplay/smumgr/Makefile index 30d3089d7dba..98e701e4f553 100644 --- a/drivers/gpu/drm/amd/powerplay/smumgr/Makefile +++ b/drivers/gpu/drm/amd/powerplay/smumgr/Makefile | |||
| @@ -1,4 +1,24 @@ | |||
| 1 | # SPDX-License-Identifier: GPL-2.0 | 1 | # |
| 2 | # Copyright 2017 Advanced Micro Devices, Inc. | ||
| 3 | # | ||
| 4 | # Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | # copy of this software and associated documentation files (the "Software"), | ||
| 6 | # to deal in the Software without restriction, including without limitation | ||
| 7 | # the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | # and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | # Software is furnished to do so, subject to the following conditions: | ||
| 10 | # | ||
| 11 | # The above copyright notice and this permission notice shall be included in | ||
| 12 | # all copies or substantial portions of the Software. | ||
| 13 | # | ||
| 14 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | # THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | # OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | # | ||
| 2 | # | 22 | # |
| 3 | # Makefile for the 'smu manager' sub-component of powerplay. | 23 | # Makefile for the 'smu manager' sub-component of powerplay. |
| 4 | # It provides the smu management services for the driver. | 24 | # It provides the smu management services for the driver. |
diff --git a/drivers/gpu/drm/amd/scheduler/gpu_sched_trace.h b/drivers/gpu/drm/amd/scheduler/gpu_sched_trace.h index 283a0dc25e84..07129e6c31a9 100644 --- a/drivers/gpu/drm/amd/scheduler/gpu_sched_trace.h +++ b/drivers/gpu/drm/amd/scheduler/gpu_sched_trace.h | |||
| @@ -1,4 +1,26 @@ | |||
| 1 | /* SPDX-License-Identifier: GPL-2.0 */ | 1 | /* |
| 2 | * Copyright 2017 Advanced Micro Devices, Inc. | ||
| 3 | * | ||
| 4 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | * copy of this software and associated documentation files (the "Software"), | ||
| 6 | * to deal in the Software without restriction, including without limitation | ||
| 7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | * and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | * Software is furnished to do so, subject to the following conditions: | ||
| 10 | * | ||
| 11 | * The above copyright notice and this permission notice shall be included in | ||
| 12 | * all copies or substantial portions of the Software. | ||
| 13 | * | ||
| 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | * OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | * | ||
| 22 | */ | ||
| 23 | |||
| 2 | #if !defined(_GPU_SCHED_TRACE_H) || defined(TRACE_HEADER_MULTI_READ) | 24 | #if !defined(_GPU_SCHED_TRACE_H) || defined(TRACE_HEADER_MULTI_READ) |
| 3 | #define _GPU_SCHED_TRACE_H_ | 25 | #define _GPU_SCHED_TRACE_H_ |
| 4 | 26 | ||
diff --git a/drivers/gpu/drm/arm/hdlcd_crtc.c b/drivers/gpu/drm/arm/hdlcd_crtc.c index 72b22b805412..5a5427bbd70e 100644 --- a/drivers/gpu/drm/arm/hdlcd_crtc.c +++ b/drivers/gpu/drm/arm/hdlcd_crtc.c | |||
| @@ -317,9 +317,8 @@ static struct drm_plane *hdlcd_plane_init(struct drm_device *drm) | |||
| 317 | formats, ARRAY_SIZE(formats), | 317 | formats, ARRAY_SIZE(formats), |
| 318 | NULL, | 318 | NULL, |
| 319 | DRM_PLANE_TYPE_PRIMARY, NULL); | 319 | DRM_PLANE_TYPE_PRIMARY, NULL); |
| 320 | if (ret) { | 320 | if (ret) |
| 321 | return ERR_PTR(ret); | 321 | return ERR_PTR(ret); |
| 322 | } | ||
| 323 | 322 | ||
| 324 | drm_plane_helper_add(plane, &hdlcd_plane_helper_funcs); | 323 | drm_plane_helper_add(plane, &hdlcd_plane_helper_funcs); |
| 325 | hdlcd->plane = plane; | 324 | hdlcd->plane = plane; |
diff --git a/drivers/gpu/drm/arm/hdlcd_drv.c b/drivers/gpu/drm/arm/hdlcd_drv.c index 764d0c83710c..0afb53b1f4e9 100644 --- a/drivers/gpu/drm/arm/hdlcd_drv.c +++ b/drivers/gpu/drm/arm/hdlcd_drv.c | |||
| @@ -13,6 +13,7 @@ | |||
| 13 | #include <linux/spinlock.h> | 13 | #include <linux/spinlock.h> |
| 14 | #include <linux/clk.h> | 14 | #include <linux/clk.h> |
| 15 | #include <linux/component.h> | 15 | #include <linux/component.h> |
| 16 | #include <linux/console.h> | ||
| 16 | #include <linux/list.h> | 17 | #include <linux/list.h> |
| 17 | #include <linux/of_graph.h> | 18 | #include <linux/of_graph.h> |
| 18 | #include <linux/of_reserved_mem.h> | 19 | #include <linux/of_reserved_mem.h> |
| @@ -354,7 +355,7 @@ err_unload: | |||
| 354 | err_free: | 355 | err_free: |
| 355 | drm_mode_config_cleanup(drm); | 356 | drm_mode_config_cleanup(drm); |
| 356 | dev_set_drvdata(dev, NULL); | 357 | dev_set_drvdata(dev, NULL); |
| 357 | drm_dev_unref(drm); | 358 | drm_dev_put(drm); |
| 358 | 359 | ||
| 359 | return ret; | 360 | return ret; |
| 360 | } | 361 | } |
| @@ -379,7 +380,7 @@ static void hdlcd_drm_unbind(struct device *dev) | |||
| 379 | pm_runtime_disable(drm->dev); | 380 | pm_runtime_disable(drm->dev); |
| 380 | of_reserved_mem_device_release(drm->dev); | 381 | of_reserved_mem_device_release(drm->dev); |
| 381 | drm_mode_config_cleanup(drm); | 382 | drm_mode_config_cleanup(drm); |
| 382 | drm_dev_unref(drm); | 383 | drm_dev_put(drm); |
| 383 | drm->dev_private = NULL; | 384 | drm->dev_private = NULL; |
| 384 | dev_set_drvdata(dev, NULL); | 385 | dev_set_drvdata(dev, NULL); |
| 385 | } | 386 | } |
| @@ -432,9 +433,11 @@ static int __maybe_unused hdlcd_pm_suspend(struct device *dev) | |||
| 432 | return 0; | 433 | return 0; |
| 433 | 434 | ||
| 434 | drm_kms_helper_poll_disable(drm); | 435 | drm_kms_helper_poll_disable(drm); |
| 436 | drm_fbdev_cma_set_suspend_unlocked(hdlcd->fbdev, 1); | ||
| 435 | 437 | ||
| 436 | hdlcd->state = drm_atomic_helper_suspend(drm); | 438 | hdlcd->state = drm_atomic_helper_suspend(drm); |
| 437 | if (IS_ERR(hdlcd->state)) { | 439 | if (IS_ERR(hdlcd->state)) { |
| 440 | drm_fbdev_cma_set_suspend_unlocked(hdlcd->fbdev, 0); | ||
| 438 | drm_kms_helper_poll_enable(drm); | 441 | drm_kms_helper_poll_enable(drm); |
| 439 | return PTR_ERR(hdlcd->state); | 442 | return PTR_ERR(hdlcd->state); |
| 440 | } | 443 | } |
| @@ -451,8 +454,8 @@ static int __maybe_unused hdlcd_pm_resume(struct device *dev) | |||
| 451 | return 0; | 454 | return 0; |
| 452 | 455 | ||
| 453 | drm_atomic_helper_resume(drm, hdlcd->state); | 456 | drm_atomic_helper_resume(drm, hdlcd->state); |
| 457 | drm_fbdev_cma_set_suspend_unlocked(hdlcd->fbdev, 0); | ||
| 454 | drm_kms_helper_poll_enable(drm); | 458 | drm_kms_helper_poll_enable(drm); |
| 455 | pm_runtime_set_active(dev); | ||
| 456 | 459 | ||
| 457 | return 0; | 460 | return 0; |
| 458 | } | 461 | } |
diff --git a/drivers/gpu/drm/arm/malidp_crtc.c b/drivers/gpu/drm/arm/malidp_crtc.c index 3615d18a7ddf..904fff80917b 100644 --- a/drivers/gpu/drm/arm/malidp_crtc.c +++ b/drivers/gpu/drm/arm/malidp_crtc.c | |||
| @@ -65,8 +65,8 @@ static void malidp_crtc_atomic_enable(struct drm_crtc *crtc, | |||
| 65 | /* We rely on firmware to set mclk to a sensible level. */ | 65 | /* We rely on firmware to set mclk to a sensible level. */ |
| 66 | clk_set_rate(hwdev->pxlclk, crtc->state->adjusted_mode.crtc_clock * 1000); | 66 | clk_set_rate(hwdev->pxlclk, crtc->state->adjusted_mode.crtc_clock * 1000); |
| 67 | 67 | ||
| 68 | hwdev->modeset(hwdev, &vm); | 68 | hwdev->hw->modeset(hwdev, &vm); |
| 69 | hwdev->leave_config_mode(hwdev); | 69 | hwdev->hw->leave_config_mode(hwdev); |
| 70 | drm_crtc_vblank_on(crtc); | 70 | drm_crtc_vblank_on(crtc); |
| 71 | } | 71 | } |
| 72 | 72 | ||
| @@ -77,8 +77,12 @@ static void malidp_crtc_atomic_disable(struct drm_crtc *crtc, | |||
| 77 | struct malidp_hw_device *hwdev = malidp->dev; | 77 | struct malidp_hw_device *hwdev = malidp->dev; |
| 78 | int err; | 78 | int err; |
| 79 | 79 | ||
| 80 | /* always disable planes on the CRTC that is being turned off */ | ||
| 81 | drm_atomic_helper_disable_planes_on_crtc(old_state, false); | ||
| 82 | |||
| 80 | drm_crtc_vblank_off(crtc); | 83 | drm_crtc_vblank_off(crtc); |
| 81 | hwdev->enter_config_mode(hwdev); | 84 | hwdev->hw->enter_config_mode(hwdev); |
| 85 | |||
| 82 | clk_disable_unprepare(hwdev->pxlclk); | 86 | clk_disable_unprepare(hwdev->pxlclk); |
| 83 | 87 | ||
| 84 | err = pm_runtime_put(crtc->dev->dev); | 88 | err = pm_runtime_put(crtc->dev->dev); |
| @@ -319,7 +323,7 @@ static int malidp_crtc_atomic_check_scaling(struct drm_crtc *crtc, | |||
| 319 | 323 | ||
| 320 | mclk_calc: | 324 | mclk_calc: |
| 321 | drm_display_mode_to_videomode(&state->adjusted_mode, &vm); | 325 | drm_display_mode_to_videomode(&state->adjusted_mode, &vm); |
| 322 | ret = hwdev->se_calc_mclk(hwdev, s, &vm); | 326 | ret = hwdev->hw->se_calc_mclk(hwdev, s, &vm); |
| 323 | if (ret < 0) | 327 | if (ret < 0) |
| 324 | return -EINVAL; | 328 | return -EINVAL; |
| 325 | return 0; | 329 | return 0; |
| @@ -475,7 +479,7 @@ static int malidp_crtc_enable_vblank(struct drm_crtc *crtc) | |||
| 475 | struct malidp_hw_device *hwdev = malidp->dev; | 479 | struct malidp_hw_device *hwdev = malidp->dev; |
| 476 | 480 | ||
| 477 | malidp_hw_enable_irq(hwdev, MALIDP_DE_BLOCK, | 481 | malidp_hw_enable_irq(hwdev, MALIDP_DE_BLOCK, |
| 478 | hwdev->map.de_irq_map.vsync_irq); | 482 | hwdev->hw->map.de_irq_map.vsync_irq); |
| 479 | return 0; | 483 | return 0; |
| 480 | } | 484 | } |
| 481 | 485 | ||
| @@ -485,7 +489,7 @@ static void malidp_crtc_disable_vblank(struct drm_crtc *crtc) | |||
| 485 | struct malidp_hw_device *hwdev = malidp->dev; | 489 | struct malidp_hw_device *hwdev = malidp->dev; |
| 486 | 490 | ||
| 487 | malidp_hw_disable_irq(hwdev, MALIDP_DE_BLOCK, | 491 | malidp_hw_disable_irq(hwdev, MALIDP_DE_BLOCK, |
| 488 | hwdev->map.de_irq_map.vsync_irq); | 492 | hwdev->hw->map.de_irq_map.vsync_irq); |
| 489 | } | 493 | } |
| 490 | 494 | ||
| 491 | static const struct drm_crtc_funcs malidp_crtc_funcs = { | 495 | static const struct drm_crtc_funcs malidp_crtc_funcs = { |
diff --git a/drivers/gpu/drm/arm/malidp_drv.c b/drivers/gpu/drm/arm/malidp_drv.c index b8944666a18f..91f2b0191368 100644 --- a/drivers/gpu/drm/arm/malidp_drv.c +++ b/drivers/gpu/drm/arm/malidp_drv.c | |||
| @@ -47,10 +47,10 @@ static void malidp_write_gamma_table(struct malidp_hw_device *hwdev, | |||
| 47 | * directly. | 47 | * directly. |
| 48 | */ | 48 | */ |
| 49 | malidp_hw_write(hwdev, gamma_write_mask, | 49 | malidp_hw_write(hwdev, gamma_write_mask, |
| 50 | hwdev->map.coeffs_base + MALIDP_COEF_TABLE_ADDR); | 50 | hwdev->hw->map.coeffs_base + MALIDP_COEF_TABLE_ADDR); |
| 51 | for (i = 0; i < MALIDP_COEFFTAB_NUM_COEFFS; ++i) | 51 | for (i = 0; i < MALIDP_COEFFTAB_NUM_COEFFS; ++i) |
| 52 | malidp_hw_write(hwdev, data[i], | 52 | malidp_hw_write(hwdev, data[i], |
| 53 | hwdev->map.coeffs_base + | 53 | hwdev->hw->map.coeffs_base + |
| 54 | MALIDP_COEF_TABLE_DATA); | 54 | MALIDP_COEF_TABLE_DATA); |
| 55 | } | 55 | } |
| 56 | 56 | ||
| @@ -103,7 +103,7 @@ void malidp_atomic_commit_update_coloradj(struct drm_crtc *crtc, | |||
| 103 | for (i = 0; i < MALIDP_COLORADJ_NUM_COEFFS; ++i) | 103 | for (i = 0; i < MALIDP_COLORADJ_NUM_COEFFS; ++i) |
| 104 | malidp_hw_write(hwdev, | 104 | malidp_hw_write(hwdev, |
| 105 | mc->coloradj_coeffs[i], | 105 | mc->coloradj_coeffs[i], |
| 106 | hwdev->map.coeffs_base + | 106 | hwdev->hw->map.coeffs_base + |
| 107 | MALIDP_COLOR_ADJ_COEF + 4 * i); | 107 | MALIDP_COLOR_ADJ_COEF + 4 * i); |
| 108 | 108 | ||
| 109 | malidp_hw_setbits(hwdev, MALIDP_DISP_FUNC_CADJ, | 109 | malidp_hw_setbits(hwdev, MALIDP_DISP_FUNC_CADJ, |
| @@ -120,8 +120,8 @@ static void malidp_atomic_commit_se_config(struct drm_crtc *crtc, | |||
| 120 | struct malidp_hw_device *hwdev = malidp->dev; | 120 | struct malidp_hw_device *hwdev = malidp->dev; |
| 121 | struct malidp_se_config *s = &cs->scaler_config; | 121 | struct malidp_se_config *s = &cs->scaler_config; |
| 122 | struct malidp_se_config *old_s = &old_cs->scaler_config; | 122 | struct malidp_se_config *old_s = &old_cs->scaler_config; |
| 123 | u32 se_control = hwdev->map.se_base + | 123 | u32 se_control = hwdev->hw->map.se_base + |
| 124 | ((hwdev->map.features & MALIDP_REGMAP_HAS_CLEARIRQ) ? | 124 | ((hwdev->hw->map.features & MALIDP_REGMAP_HAS_CLEARIRQ) ? |
| 125 | 0x10 : 0xC); | 125 | 0x10 : 0xC); |
| 126 | u32 layer_control = se_control + MALIDP_SE_LAYER_CONTROL; | 126 | u32 layer_control = se_control + MALIDP_SE_LAYER_CONTROL; |
| 127 | u32 scr = se_control + MALIDP_SE_SCALING_CONTROL; | 127 | u32 scr = se_control + MALIDP_SE_SCALING_CONTROL; |
| @@ -135,7 +135,7 @@ static void malidp_atomic_commit_se_config(struct drm_crtc *crtc, | |||
| 135 | return; | 135 | return; |
| 136 | } | 136 | } |
| 137 | 137 | ||
| 138 | hwdev->se_set_scaling_coeffs(hwdev, s, old_s); | 138 | hwdev->hw->se_set_scaling_coeffs(hwdev, s, old_s); |
| 139 | val = malidp_hw_read(hwdev, se_control); | 139 | val = malidp_hw_read(hwdev, se_control); |
| 140 | val |= MALIDP_SE_SCALING_EN | MALIDP_SE_ALPHA_EN; | 140 | val |= MALIDP_SE_SCALING_EN | MALIDP_SE_ALPHA_EN; |
| 141 | 141 | ||
| @@ -170,9 +170,9 @@ static int malidp_set_and_wait_config_valid(struct drm_device *drm) | |||
| 170 | int ret; | 170 | int ret; |
| 171 | 171 | ||
| 172 | atomic_set(&malidp->config_valid, 0); | 172 | atomic_set(&malidp->config_valid, 0); |
| 173 | hwdev->set_config_valid(hwdev); | 173 | hwdev->hw->set_config_valid(hwdev); |
| 174 | /* don't wait for config_valid flag if we are in config mode */ | 174 | /* don't wait for config_valid flag if we are in config mode */ |
| 175 | if (hwdev->in_config_mode(hwdev)) | 175 | if (hwdev->hw->in_config_mode(hwdev)) |
| 176 | return 0; | 176 | return 0; |
| 177 | 177 | ||
| 178 | ret = wait_event_interruptible_timeout(malidp->wq, | 178 | ret = wait_event_interruptible_timeout(malidp->wq, |
| @@ -455,7 +455,7 @@ static int malidp_runtime_pm_suspend(struct device *dev) | |||
| 455 | struct malidp_hw_device *hwdev = malidp->dev; | 455 | struct malidp_hw_device *hwdev = malidp->dev; |
| 456 | 456 | ||
| 457 | /* we can only suspend if the hardware is in config mode */ | 457 | /* we can only suspend if the hardware is in config mode */ |
| 458 | WARN_ON(!hwdev->in_config_mode(hwdev)); | 458 | WARN_ON(!hwdev->hw->in_config_mode(hwdev)); |
| 459 | 459 | ||
| 460 | hwdev->pm_suspended = true; | 460 | hwdev->pm_suspended = true; |
| 461 | clk_disable_unprepare(hwdev->mclk); | 461 | clk_disable_unprepare(hwdev->mclk); |
| @@ -500,11 +500,7 @@ static int malidp_bind(struct device *dev) | |||
| 500 | if (!hwdev) | 500 | if (!hwdev) |
| 501 | return -ENOMEM; | 501 | return -ENOMEM; |
| 502 | 502 | ||
| 503 | /* | 503 | hwdev->hw = (struct malidp_hw *)of_device_get_match_data(dev); |
| 504 | * copy the associated data from malidp_drm_of_match to avoid | ||
| 505 | * having to keep a reference to the OF node after binding | ||
| 506 | */ | ||
| 507 | memcpy(hwdev, of_device_get_match_data(dev), sizeof(*hwdev)); | ||
| 508 | malidp->dev = hwdev; | 504 | malidp->dev = hwdev; |
| 509 | 505 | ||
| 510 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 506 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
| @@ -568,13 +564,13 @@ static int malidp_bind(struct device *dev) | |||
| 568 | goto query_hw_fail; | 564 | goto query_hw_fail; |
| 569 | } | 565 | } |
| 570 | 566 | ||
| 571 | ret = hwdev->query_hw(hwdev); | 567 | ret = hwdev->hw->query_hw(hwdev); |
| 572 | if (ret) { | 568 | if (ret) { |
| 573 | DRM_ERROR("Invalid HW configuration\n"); | 569 | DRM_ERROR("Invalid HW configuration\n"); |
| 574 | goto query_hw_fail; | 570 | goto query_hw_fail; |
| 575 | } | 571 | } |
| 576 | 572 | ||
| 577 | version = malidp_hw_read(hwdev, hwdev->map.dc_base + MALIDP_DE_CORE_ID); | 573 | version = malidp_hw_read(hwdev, hwdev->hw->map.dc_base + MALIDP_DE_CORE_ID); |
| 578 | DRM_INFO("found ARM Mali-DP%3x version r%dp%d\n", version >> 16, | 574 | DRM_INFO("found ARM Mali-DP%3x version r%dp%d\n", version >> 16, |
| 579 | (version >> 12) & 0xf, (version >> 8) & 0xf); | 575 | (version >> 12) & 0xf, (version >> 8) & 0xf); |
| 580 | 576 | ||
| @@ -589,7 +585,7 @@ static int malidp_bind(struct device *dev) | |||
| 589 | 585 | ||
| 590 | for (i = 0; i < MAX_OUTPUT_CHANNELS; i++) | 586 | for (i = 0; i < MAX_OUTPUT_CHANNELS; i++) |
| 591 | out_depth = (out_depth << 8) | (output_width[i] & 0xf); | 587 | out_depth = (out_depth << 8) | (output_width[i] & 0xf); |
| 592 | malidp_hw_write(hwdev, out_depth, hwdev->map.out_depth_base); | 588 | malidp_hw_write(hwdev, out_depth, hwdev->hw->map.out_depth_base); |
| 593 | 589 | ||
| 594 | atomic_set(&malidp->config_valid, 0); | 590 | atomic_set(&malidp->config_valid, 0); |
| 595 | init_waitqueue_head(&malidp->wq); | 591 | init_waitqueue_head(&malidp->wq); |
| @@ -671,7 +667,7 @@ query_hw_fail: | |||
| 671 | malidp_runtime_pm_suspend(dev); | 667 | malidp_runtime_pm_suspend(dev); |
| 672 | drm->dev_private = NULL; | 668 | drm->dev_private = NULL; |
| 673 | dev_set_drvdata(dev, NULL); | 669 | dev_set_drvdata(dev, NULL); |
| 674 | drm_dev_unref(drm); | 670 | drm_dev_put(drm); |
| 675 | alloc_fail: | 671 | alloc_fail: |
| 676 | of_reserved_mem_device_release(dev); | 672 | of_reserved_mem_device_release(dev); |
| 677 | 673 | ||
| @@ -704,7 +700,7 @@ static void malidp_unbind(struct device *dev) | |||
| 704 | malidp_runtime_pm_suspend(dev); | 700 | malidp_runtime_pm_suspend(dev); |
| 705 | drm->dev_private = NULL; | 701 | drm->dev_private = NULL; |
| 706 | dev_set_drvdata(dev, NULL); | 702 | dev_set_drvdata(dev, NULL); |
| 707 | drm_dev_unref(drm); | 703 | drm_dev_put(drm); |
| 708 | of_reserved_mem_device_release(dev); | 704 | of_reserved_mem_device_release(dev); |
| 709 | } | 705 | } |
| 710 | 706 | ||
diff --git a/drivers/gpu/drm/arm/malidp_hw.c b/drivers/gpu/drm/arm/malidp_hw.c index 17bca99e8ac8..2bfb542135ac 100644 --- a/drivers/gpu/drm/arm/malidp_hw.c +++ b/drivers/gpu/drm/arm/malidp_hw.c | |||
| @@ -183,7 +183,7 @@ static void malidp500_enter_config_mode(struct malidp_hw_device *hwdev) | |||
| 183 | 183 | ||
| 184 | malidp_hw_setbits(hwdev, MALIDP500_DC_CONFIG_REQ, MALIDP500_DC_CONTROL); | 184 | malidp_hw_setbits(hwdev, MALIDP500_DC_CONFIG_REQ, MALIDP500_DC_CONTROL); |
| 185 | while (count) { | 185 | while (count) { |
| 186 | status = malidp_hw_read(hwdev, hwdev->map.dc_base + MALIDP_REG_STATUS); | 186 | status = malidp_hw_read(hwdev, hwdev->hw->map.dc_base + MALIDP_REG_STATUS); |
| 187 | if ((status & MALIDP500_DC_CONFIG_REQ) == MALIDP500_DC_CONFIG_REQ) | 187 | if ((status & MALIDP500_DC_CONFIG_REQ) == MALIDP500_DC_CONFIG_REQ) |
| 188 | break; | 188 | break; |
| 189 | /* | 189 | /* |
| @@ -203,7 +203,7 @@ static void malidp500_leave_config_mode(struct malidp_hw_device *hwdev) | |||
| 203 | malidp_hw_clearbits(hwdev, MALIDP_CFG_VALID, MALIDP500_CONFIG_VALID); | 203 | malidp_hw_clearbits(hwdev, MALIDP_CFG_VALID, MALIDP500_CONFIG_VALID); |
| 204 | malidp_hw_clearbits(hwdev, MALIDP500_DC_CONFIG_REQ, MALIDP500_DC_CONTROL); | 204 | malidp_hw_clearbits(hwdev, MALIDP500_DC_CONFIG_REQ, MALIDP500_DC_CONTROL); |
| 205 | while (count) { | 205 | while (count) { |
| 206 | status = malidp_hw_read(hwdev, hwdev->map.dc_base + MALIDP_REG_STATUS); | 206 | status = malidp_hw_read(hwdev, hwdev->hw->map.dc_base + MALIDP_REG_STATUS); |
| 207 | if ((status & MALIDP500_DC_CONFIG_REQ) == 0) | 207 | if ((status & MALIDP500_DC_CONFIG_REQ) == 0) |
| 208 | break; | 208 | break; |
| 209 | usleep_range(100, 1000); | 209 | usleep_range(100, 1000); |
| @@ -216,7 +216,7 @@ static bool malidp500_in_config_mode(struct malidp_hw_device *hwdev) | |||
| 216 | { | 216 | { |
| 217 | u32 status; | 217 | u32 status; |
| 218 | 218 | ||
| 219 | status = malidp_hw_read(hwdev, hwdev->map.dc_base + MALIDP_REG_STATUS); | 219 | status = malidp_hw_read(hwdev, hwdev->hw->map.dc_base + MALIDP_REG_STATUS); |
| 220 | if ((status & MALIDP500_DC_CONFIG_REQ) == MALIDP500_DC_CONFIG_REQ) | 220 | if ((status & MALIDP500_DC_CONFIG_REQ) == MALIDP500_DC_CONFIG_REQ) |
| 221 | return true; | 221 | return true; |
| 222 | 222 | ||
| @@ -407,7 +407,7 @@ static void malidp550_enter_config_mode(struct malidp_hw_device *hwdev) | |||
| 407 | 407 | ||
| 408 | malidp_hw_setbits(hwdev, MALIDP550_DC_CONFIG_REQ, MALIDP550_DC_CONTROL); | 408 | malidp_hw_setbits(hwdev, MALIDP550_DC_CONFIG_REQ, MALIDP550_DC_CONTROL); |
| 409 | while (count) { | 409 | while (count) { |
| 410 | status = malidp_hw_read(hwdev, hwdev->map.dc_base + MALIDP_REG_STATUS); | 410 | status = malidp_hw_read(hwdev, hwdev->hw->map.dc_base + MALIDP_REG_STATUS); |
| 411 | if ((status & MALIDP550_DC_CONFIG_REQ) == MALIDP550_DC_CONFIG_REQ) | 411 | if ((status & MALIDP550_DC_CONFIG_REQ) == MALIDP550_DC_CONFIG_REQ) |
| 412 | break; | 412 | break; |
| 413 | /* | 413 | /* |
| @@ -427,7 +427,7 @@ static void malidp550_leave_config_mode(struct malidp_hw_device *hwdev) | |||
| 427 | malidp_hw_clearbits(hwdev, MALIDP_CFG_VALID, MALIDP550_CONFIG_VALID); | 427 | malidp_hw_clearbits(hwdev, MALIDP_CFG_VALID, MALIDP550_CONFIG_VALID); |
| 428 | malidp_hw_clearbits(hwdev, MALIDP550_DC_CONFIG_REQ, MALIDP550_DC_CONTROL); | 428 | malidp_hw_clearbits(hwdev, MALIDP550_DC_CONFIG_REQ, MALIDP550_DC_CONTROL); |
| 429 | while (count) { | 429 | while (count) { |
| 430 | status = malidp_hw_read(hwdev, hwdev->map.dc_base + MALIDP_REG_STATUS); | 430 | status = malidp_hw_read(hwdev, hwdev->hw->map.dc_base + MALIDP_REG_STATUS); |
| 431 | if ((status & MALIDP550_DC_CONFIG_REQ) == 0) | 431 | if ((status & MALIDP550_DC_CONFIG_REQ) == 0) |
| 432 | break; | 432 | break; |
| 433 | usleep_range(100, 1000); | 433 | usleep_range(100, 1000); |
| @@ -440,7 +440,7 @@ static bool malidp550_in_config_mode(struct malidp_hw_device *hwdev) | |||
| 440 | { | 440 | { |
| 441 | u32 status; | 441 | u32 status; |
| 442 | 442 | ||
| 443 | status = malidp_hw_read(hwdev, hwdev->map.dc_base + MALIDP_REG_STATUS); | 443 | status = malidp_hw_read(hwdev, hwdev->hw->map.dc_base + MALIDP_REG_STATUS); |
| 444 | if ((status & MALIDP550_DC_CONFIG_REQ) == MALIDP550_DC_CONFIG_REQ) | 444 | if ((status & MALIDP550_DC_CONFIG_REQ) == MALIDP550_DC_CONFIG_REQ) |
| 445 | return true; | 445 | return true; |
| 446 | 446 | ||
| @@ -616,7 +616,7 @@ static int malidp650_query_hw(struct malidp_hw_device *hwdev) | |||
| 616 | return 0; | 616 | return 0; |
| 617 | } | 617 | } |
| 618 | 618 | ||
| 619 | const struct malidp_hw_device malidp_device[MALIDP_MAX_DEVICES] = { | 619 | const struct malidp_hw malidp_device[MALIDP_MAX_DEVICES] = { |
| 620 | [MALIDP_500] = { | 620 | [MALIDP_500] = { |
| 621 | .map = { | 621 | .map = { |
| 622 | .coeffs_base = MALIDP500_COEFFS_BASE, | 622 | .coeffs_base = MALIDP500_COEFFS_BASE, |
| @@ -751,7 +751,7 @@ static void malidp_hw_clear_irq(struct malidp_hw_device *hwdev, u8 block, u32 ir | |||
| 751 | { | 751 | { |
| 752 | u32 base = malidp_get_block_base(hwdev, block); | 752 | u32 base = malidp_get_block_base(hwdev, block); |
| 753 | 753 | ||
| 754 | if (hwdev->map.features & MALIDP_REGMAP_HAS_CLEARIRQ) | 754 | if (hwdev->hw->map.features & MALIDP_REGMAP_HAS_CLEARIRQ) |
| 755 | malidp_hw_write(hwdev, irq, base + MALIDP_REG_CLEARIRQ); | 755 | malidp_hw_write(hwdev, irq, base + MALIDP_REG_CLEARIRQ); |
| 756 | else | 756 | else |
| 757 | malidp_hw_write(hwdev, irq, base + MALIDP_REG_STATUS); | 757 | malidp_hw_write(hwdev, irq, base + MALIDP_REG_STATUS); |
| @@ -762,12 +762,14 @@ static irqreturn_t malidp_de_irq(int irq, void *arg) | |||
| 762 | struct drm_device *drm = arg; | 762 | struct drm_device *drm = arg; |
| 763 | struct malidp_drm *malidp = drm->dev_private; | 763 | struct malidp_drm *malidp = drm->dev_private; |
| 764 | struct malidp_hw_device *hwdev; | 764 | struct malidp_hw_device *hwdev; |
| 765 | struct malidp_hw *hw; | ||
| 765 | const struct malidp_irq_map *de; | 766 | const struct malidp_irq_map *de; |
| 766 | u32 status, mask, dc_status; | 767 | u32 status, mask, dc_status; |
| 767 | irqreturn_t ret = IRQ_NONE; | 768 | irqreturn_t ret = IRQ_NONE; |
| 768 | 769 | ||
| 769 | hwdev = malidp->dev; | 770 | hwdev = malidp->dev; |
| 770 | de = &hwdev->map.de_irq_map; | 771 | hw = hwdev->hw; |
| 772 | de = &hw->map.de_irq_map; | ||
| 771 | 773 | ||
| 772 | /* | 774 | /* |
| 773 | * if we are suspended it is likely that we were invoked because | 775 | * if we are suspended it is likely that we were invoked because |
| @@ -778,8 +780,8 @@ static irqreturn_t malidp_de_irq(int irq, void *arg) | |||
| 778 | return IRQ_NONE; | 780 | return IRQ_NONE; |
| 779 | 781 | ||
| 780 | /* first handle the config valid IRQ */ | 782 | /* first handle the config valid IRQ */ |
| 781 | dc_status = malidp_hw_read(hwdev, hwdev->map.dc_base + MALIDP_REG_STATUS); | 783 | dc_status = malidp_hw_read(hwdev, hw->map.dc_base + MALIDP_REG_STATUS); |
| 782 | if (dc_status & hwdev->map.dc_irq_map.vsync_irq) { | 784 | if (dc_status & hw->map.dc_irq_map.vsync_irq) { |
| 783 | /* we have a page flip event */ | 785 | /* we have a page flip event */ |
| 784 | atomic_set(&malidp->config_valid, 1); | 786 | atomic_set(&malidp->config_valid, 1); |
| 785 | malidp_hw_clear_irq(hwdev, MALIDP_DC_BLOCK, dc_status); | 787 | malidp_hw_clear_irq(hwdev, MALIDP_DC_BLOCK, dc_status); |
| @@ -832,11 +834,11 @@ int malidp_de_irq_init(struct drm_device *drm, int irq) | |||
| 832 | 834 | ||
| 833 | /* first enable the DC block IRQs */ | 835 | /* first enable the DC block IRQs */ |
| 834 | malidp_hw_enable_irq(hwdev, MALIDP_DC_BLOCK, | 836 | malidp_hw_enable_irq(hwdev, MALIDP_DC_BLOCK, |
| 835 | hwdev->map.dc_irq_map.irq_mask); | 837 | hwdev->hw->map.dc_irq_map.irq_mask); |
| 836 | 838 | ||
| 837 | /* now enable the DE block IRQs */ | 839 | /* now enable the DE block IRQs */ |
| 838 | malidp_hw_enable_irq(hwdev, MALIDP_DE_BLOCK, | 840 | malidp_hw_enable_irq(hwdev, MALIDP_DE_BLOCK, |
| 839 | hwdev->map.de_irq_map.irq_mask); | 841 | hwdev->hw->map.de_irq_map.irq_mask); |
| 840 | 842 | ||
| 841 | return 0; | 843 | return 0; |
| 842 | } | 844 | } |
| @@ -847,9 +849,9 @@ void malidp_de_irq_fini(struct drm_device *drm) | |||
| 847 | struct malidp_hw_device *hwdev = malidp->dev; | 849 | struct malidp_hw_device *hwdev = malidp->dev; |
| 848 | 850 | ||
| 849 | malidp_hw_disable_irq(hwdev, MALIDP_DE_BLOCK, | 851 | malidp_hw_disable_irq(hwdev, MALIDP_DE_BLOCK, |
| 850 | hwdev->map.de_irq_map.irq_mask); | 852 | hwdev->hw->map.de_irq_map.irq_mask); |
| 851 | malidp_hw_disable_irq(hwdev, MALIDP_DC_BLOCK, | 853 | malidp_hw_disable_irq(hwdev, MALIDP_DC_BLOCK, |
| 852 | hwdev->map.dc_irq_map.irq_mask); | 854 | hwdev->hw->map.dc_irq_map.irq_mask); |
| 853 | } | 855 | } |
| 854 | 856 | ||
| 855 | static irqreturn_t malidp_se_irq(int irq, void *arg) | 857 | static irqreturn_t malidp_se_irq(int irq, void *arg) |
| @@ -857,6 +859,8 @@ static irqreturn_t malidp_se_irq(int irq, void *arg) | |||
| 857 | struct drm_device *drm = arg; | 859 | struct drm_device *drm = arg; |
| 858 | struct malidp_drm *malidp = drm->dev_private; | 860 | struct malidp_drm *malidp = drm->dev_private; |
| 859 | struct malidp_hw_device *hwdev = malidp->dev; | 861 | struct malidp_hw_device *hwdev = malidp->dev; |
| 862 | struct malidp_hw *hw = hwdev->hw; | ||
| 863 | const struct malidp_irq_map *se = &hw->map.se_irq_map; | ||
| 860 | u32 status, mask; | 864 | u32 status, mask; |
| 861 | 865 | ||
| 862 | /* | 866 | /* |
| @@ -867,12 +871,12 @@ static irqreturn_t malidp_se_irq(int irq, void *arg) | |||
| 867 | if (hwdev->pm_suspended) | 871 | if (hwdev->pm_suspended) |
| 868 | return IRQ_NONE; | 872 | return IRQ_NONE; |
| 869 | 873 | ||
| 870 | status = malidp_hw_read(hwdev, hwdev->map.se_base + MALIDP_REG_STATUS); | 874 | status = malidp_hw_read(hwdev, hw->map.se_base + MALIDP_REG_STATUS); |
| 871 | if (!(status & hwdev->map.se_irq_map.irq_mask)) | 875 | if (!(status & se->irq_mask)) |
| 872 | return IRQ_NONE; | 876 | return IRQ_NONE; |
| 873 | 877 | ||
| 874 | mask = malidp_hw_read(hwdev, hwdev->map.se_base + MALIDP_REG_MASKIRQ); | 878 | mask = malidp_hw_read(hwdev, hw->map.se_base + MALIDP_REG_MASKIRQ); |
| 875 | status = malidp_hw_read(hwdev, hwdev->map.se_base + MALIDP_REG_STATUS); | 879 | status = malidp_hw_read(hwdev, hw->map.se_base + MALIDP_REG_STATUS); |
| 876 | status &= mask; | 880 | status &= mask; |
| 877 | /* ToDo: status decoding and firing up of VSYNC and page flip events */ | 881 | /* ToDo: status decoding and firing up of VSYNC and page flip events */ |
| 878 | 882 | ||
| @@ -905,7 +909,7 @@ int malidp_se_irq_init(struct drm_device *drm, int irq) | |||
| 905 | } | 909 | } |
| 906 | 910 | ||
| 907 | malidp_hw_enable_irq(hwdev, MALIDP_SE_BLOCK, | 911 | malidp_hw_enable_irq(hwdev, MALIDP_SE_BLOCK, |
| 908 | hwdev->map.se_irq_map.irq_mask); | 912 | hwdev->hw->map.se_irq_map.irq_mask); |
| 909 | 913 | ||
| 910 | return 0; | 914 | return 0; |
| 911 | } | 915 | } |
| @@ -916,5 +920,5 @@ void malidp_se_irq_fini(struct drm_device *drm) | |||
| 916 | struct malidp_hw_device *hwdev = malidp->dev; | 920 | struct malidp_hw_device *hwdev = malidp->dev; |
| 917 | 921 | ||
| 918 | malidp_hw_disable_irq(hwdev, MALIDP_SE_BLOCK, | 922 | malidp_hw_disable_irq(hwdev, MALIDP_SE_BLOCK, |
| 919 | hwdev->map.se_irq_map.irq_mask); | 923 | hwdev->hw->map.se_irq_map.irq_mask); |
| 920 | } | 924 | } |
diff --git a/drivers/gpu/drm/arm/malidp_hw.h b/drivers/gpu/drm/arm/malidp_hw.h index 849ad9a30c3a..b0690ebb3565 100644 --- a/drivers/gpu/drm/arm/malidp_hw.h +++ b/drivers/gpu/drm/arm/malidp_hw.h | |||
| @@ -120,18 +120,14 @@ struct malidp_hw_regmap { | |||
| 120 | /* Unlike DP550/650, DP500 has 3 stride registers in its video layer. */ | 120 | /* Unlike DP550/650, DP500 has 3 stride registers in its video layer. */ |
| 121 | #define MALIDP_DEVICE_LV_HAS_3_STRIDES BIT(0) | 121 | #define MALIDP_DEVICE_LV_HAS_3_STRIDES BIT(0) |
| 122 | 122 | ||
| 123 | struct malidp_hw_device { | 123 | struct malidp_hw_device; |
| 124 | const struct malidp_hw_regmap map; | ||
| 125 | void __iomem *regs; | ||
| 126 | 124 | ||
| 127 | /* APB clock */ | 125 | /* |
| 128 | struct clk *pclk; | 126 | * Static structure containing hardware specific data and pointers to |
| 129 | /* AXI clock */ | 127 | * functions that behave differently between various versions of the IP. |
| 130 | struct clk *aclk; | 128 | */ |
| 131 | /* main clock for display core */ | 129 | struct malidp_hw { |
| 132 | struct clk *mclk; | 130 | const struct malidp_hw_regmap map; |
| 133 | /* pixel clock for display core */ | ||
| 134 | struct clk *pxlclk; | ||
| 135 | 131 | ||
| 136 | /* | 132 | /* |
| 137 | * Validate the driver instance against the hardware bits | 133 | * Validate the driver instance against the hardware bits |
| @@ -182,15 +178,6 @@ struct malidp_hw_device { | |||
| 182 | struct videomode *vm); | 178 | struct videomode *vm); |
| 183 | 179 | ||
| 184 | u8 features; | 180 | u8 features; |
| 185 | |||
| 186 | u8 min_line_size; | ||
| 187 | u16 max_line_size; | ||
| 188 | |||
| 189 | /* track the device PM state */ | ||
| 190 | bool pm_suspended; | ||
| 191 | |||
| 192 | /* size of memory used for rotating layers, up to two banks available */ | ||
| 193 | u32 rotation_memory[2]; | ||
| 194 | }; | 181 | }; |
| 195 | 182 | ||
| 196 | /* Supported variants of the hardware */ | 183 | /* Supported variants of the hardware */ |
| @@ -202,7 +189,33 @@ enum { | |||
| 202 | MALIDP_MAX_DEVICES | 189 | MALIDP_MAX_DEVICES |
| 203 | }; | 190 | }; |
| 204 | 191 | ||
| 205 | extern const struct malidp_hw_device malidp_device[MALIDP_MAX_DEVICES]; | 192 | extern const struct malidp_hw malidp_device[MALIDP_MAX_DEVICES]; |
| 193 | |||
| 194 | /* | ||
| 195 | * Structure used by the driver during runtime operation. | ||
| 196 | */ | ||
| 197 | struct malidp_hw_device { | ||
| 198 | struct malidp_hw *hw; | ||
| 199 | void __iomem *regs; | ||
| 200 | |||
| 201 | /* APB clock */ | ||
| 202 | struct clk *pclk; | ||
| 203 | /* AXI clock */ | ||
| 204 | struct clk *aclk; | ||
| 205 | /* main clock for display core */ | ||
| 206 | struct clk *mclk; | ||
| 207 | /* pixel clock for display core */ | ||
| 208 | struct clk *pxlclk; | ||
| 209 | |||
| 210 | u8 min_line_size; | ||
| 211 | u16 max_line_size; | ||
| 212 | |||
| 213 | /* track the device PM state */ | ||
| 214 | bool pm_suspended; | ||
| 215 | |||
| 216 | /* size of memory used for rotating layers, up to two banks available */ | ||
| 217 | u32 rotation_memory[2]; | ||
| 218 | }; | ||
| 206 | 219 | ||
| 207 | static inline u32 malidp_hw_read(struct malidp_hw_device *hwdev, u32 reg) | 220 | static inline u32 malidp_hw_read(struct malidp_hw_device *hwdev, u32 reg) |
| 208 | { | 221 | { |
| @@ -240,9 +253,9 @@ static inline u32 malidp_get_block_base(struct malidp_hw_device *hwdev, | |||
| 240 | { | 253 | { |
| 241 | switch (block) { | 254 | switch (block) { |
| 242 | case MALIDP_SE_BLOCK: | 255 | case MALIDP_SE_BLOCK: |
| 243 | return hwdev->map.se_base; | 256 | return hwdev->hw->map.se_base; |
| 244 | case MALIDP_DC_BLOCK: | 257 | case MALIDP_DC_BLOCK: |
| 245 | return hwdev->map.dc_base; | 258 | return hwdev->hw->map.dc_base; |
| 246 | } | 259 | } |
| 247 | 260 | ||
| 248 | return 0; | 261 | return 0; |
| @@ -275,7 +288,7 @@ u8 malidp_hw_get_format_id(const struct malidp_hw_regmap *map, | |||
| 275 | static inline bool malidp_hw_pitch_valid(struct malidp_hw_device *hwdev, | 288 | static inline bool malidp_hw_pitch_valid(struct malidp_hw_device *hwdev, |
| 276 | unsigned int pitch) | 289 | unsigned int pitch) |
| 277 | { | 290 | { |
| 278 | return !(pitch & (hwdev->map.bus_align_bytes - 1)); | 291 | return !(pitch & (hwdev->hw->map.bus_align_bytes - 1)); |
| 279 | } | 292 | } |
| 280 | 293 | ||
| 281 | /* U16.16 */ | 294 | /* U16.16 */ |
| @@ -308,8 +321,8 @@ static inline void malidp_se_set_enh_coeffs(struct malidp_hw_device *hwdev) | |||
| 308 | }; | 321 | }; |
| 309 | u32 val = MALIDP_SE_SET_ENH_LIMIT_LOW(MALIDP_SE_ENH_LOW_LEVEL) | | 322 | u32 val = MALIDP_SE_SET_ENH_LIMIT_LOW(MALIDP_SE_ENH_LOW_LEVEL) | |
| 310 | MALIDP_SE_SET_ENH_LIMIT_HIGH(MALIDP_SE_ENH_HIGH_LEVEL); | 323 | MALIDP_SE_SET_ENH_LIMIT_HIGH(MALIDP_SE_ENH_HIGH_LEVEL); |
| 311 | u32 image_enh = hwdev->map.se_base + | 324 | u32 image_enh = hwdev->hw->map.se_base + |
| 312 | ((hwdev->map.features & MALIDP_REGMAP_HAS_CLEARIRQ) ? | 325 | ((hwdev->hw->map.features & MALIDP_REGMAP_HAS_CLEARIRQ) ? |
| 313 | 0x10 : 0xC) + MALIDP_SE_IMAGE_ENH; | 326 | 0x10 : 0xC) + MALIDP_SE_IMAGE_ENH; |
| 314 | u32 enh_coeffs = image_enh + MALIDP_SE_ENH_COEFF0; | 327 | u32 enh_coeffs = image_enh + MALIDP_SE_ENH_COEFF0; |
| 315 | int i; | 328 | int i; |
diff --git a/drivers/gpu/drm/arm/malidp_planes.c b/drivers/gpu/drm/arm/malidp_planes.c index 94e7e3fa3408..e7419797bbd1 100644 --- a/drivers/gpu/drm/arm/malidp_planes.c +++ b/drivers/gpu/drm/arm/malidp_planes.c | |||
| @@ -57,7 +57,7 @@ static void malidp_de_plane_destroy(struct drm_plane *plane) | |||
| 57 | struct malidp_plane *mp = to_malidp_plane(plane); | 57 | struct malidp_plane *mp = to_malidp_plane(plane); |
| 58 | 58 | ||
| 59 | if (mp->base.fb) | 59 | if (mp->base.fb) |
| 60 | drm_framebuffer_unreference(mp->base.fb); | 60 | drm_framebuffer_put(mp->base.fb); |
| 61 | 61 | ||
| 62 | drm_plane_helper_disable(plane); | 62 | drm_plane_helper_disable(plane); |
| 63 | drm_plane_cleanup(plane); | 63 | drm_plane_cleanup(plane); |
| @@ -185,8 +185,9 @@ static int malidp_de_plane_check(struct drm_plane *plane, | |||
| 185 | 185 | ||
| 186 | fb = state->fb; | 186 | fb = state->fb; |
| 187 | 187 | ||
| 188 | ms->format = malidp_hw_get_format_id(&mp->hwdev->map, mp->layer->id, | 188 | ms->format = malidp_hw_get_format_id(&mp->hwdev->hw->map, |
| 189 | fb->format->format); | 189 | mp->layer->id, |
| 190 | fb->format->format); | ||
| 190 | if (ms->format == MALIDP_INVALID_FORMAT_ID) | 191 | if (ms->format == MALIDP_INVALID_FORMAT_ID) |
| 191 | return -EINVAL; | 192 | return -EINVAL; |
| 192 | 193 | ||
| @@ -211,7 +212,7 @@ static int malidp_de_plane_check(struct drm_plane *plane, | |||
| 211 | * third plane stride register. | 212 | * third plane stride register. |
| 212 | */ | 213 | */ |
| 213 | if (ms->n_planes == 3 && | 214 | if (ms->n_planes == 3 && |
| 214 | !(mp->hwdev->features & MALIDP_DEVICE_LV_HAS_3_STRIDES) && | 215 | !(mp->hwdev->hw->features & MALIDP_DEVICE_LV_HAS_3_STRIDES) && |
| 215 | (state->fb->pitches[1] != state->fb->pitches[2])) | 216 | (state->fb->pitches[1] != state->fb->pitches[2])) |
| 216 | return -EINVAL; | 217 | return -EINVAL; |
| 217 | 218 | ||
| @@ -229,9 +230,9 @@ static int malidp_de_plane_check(struct drm_plane *plane, | |||
| 229 | if (state->rotation & MALIDP_ROTATED_MASK) { | 230 | if (state->rotation & MALIDP_ROTATED_MASK) { |
| 230 | int val; | 231 | int val; |
| 231 | 232 | ||
| 232 | val = mp->hwdev->rotmem_required(mp->hwdev, state->crtc_h, | 233 | val = mp->hwdev->hw->rotmem_required(mp->hwdev, state->crtc_h, |
| 233 | state->crtc_w, | 234 | state->crtc_w, |
| 234 | fb->format->format); | 235 | fb->format->format); |
| 235 | if (val < 0) | 236 | if (val < 0) |
| 236 | return val; | 237 | return val; |
| 237 | 238 | ||
| @@ -251,7 +252,7 @@ static void malidp_de_set_plane_pitches(struct malidp_plane *mp, | |||
| 251 | return; | 252 | return; |
| 252 | 253 | ||
| 253 | if (num_planes == 3) | 254 | if (num_planes == 3) |
| 254 | num_strides = (mp->hwdev->features & | 255 | num_strides = (mp->hwdev->hw->features & |
| 255 | MALIDP_DEVICE_LV_HAS_3_STRIDES) ? 3 : 2; | 256 | MALIDP_DEVICE_LV_HAS_3_STRIDES) ? 3 : 2; |
| 256 | 257 | ||
| 257 | for (i = 0; i < num_strides; ++i) | 258 | for (i = 0; i < num_strides; ++i) |
| @@ -264,13 +265,11 @@ static void malidp_de_plane_update(struct drm_plane *plane, | |||
| 264 | struct drm_plane_state *old_state) | 265 | struct drm_plane_state *old_state) |
| 265 | { | 266 | { |
| 266 | struct malidp_plane *mp; | 267 | struct malidp_plane *mp; |
| 267 | const struct malidp_hw_regmap *map; | ||
| 268 | struct malidp_plane_state *ms = to_malidp_plane_state(plane->state); | 268 | struct malidp_plane_state *ms = to_malidp_plane_state(plane->state); |
| 269 | u32 src_w, src_h, dest_w, dest_h, val; | 269 | u32 src_w, src_h, dest_w, dest_h, val; |
| 270 | int i; | 270 | int i; |
| 271 | 271 | ||
| 272 | mp = to_malidp_plane(plane); | 272 | mp = to_malidp_plane(plane); |
| 273 | map = &mp->hwdev->map; | ||
| 274 | 273 | ||
| 275 | /* convert src values from Q16 fixed point to integer */ | 274 | /* convert src values from Q16 fixed point to integer */ |
| 276 | src_w = plane->state->src_w >> 16; | 275 | src_w = plane->state->src_w >> 16; |
| @@ -363,7 +362,7 @@ static const struct drm_plane_helper_funcs malidp_de_plane_helper_funcs = { | |||
| 363 | int malidp_de_planes_init(struct drm_device *drm) | 362 | int malidp_de_planes_init(struct drm_device *drm) |
| 364 | { | 363 | { |
| 365 | struct malidp_drm *malidp = drm->dev_private; | 364 | struct malidp_drm *malidp = drm->dev_private; |
| 366 | const struct malidp_hw_regmap *map = &malidp->dev->map; | 365 | const struct malidp_hw_regmap *map = &malidp->dev->hw->map; |
| 367 | struct malidp_plane *plane = NULL; | 366 | struct malidp_plane *plane = NULL; |
| 368 | enum drm_plane_type plane_type; | 367 | enum drm_plane_type plane_type; |
| 369 | unsigned long crtcs = 1 << drm->mode_config.num_crtc; | 368 | unsigned long crtcs = 1 << drm->mode_config.num_crtc; |
diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h b/drivers/gpu/drm/bridge/adv7511/adv7511.h index b4efcbabf7f7..d034b2cb5eee 100644 --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h | |||
| @@ -372,9 +372,18 @@ struct adv7511 { | |||
| 372 | }; | 372 | }; |
| 373 | 373 | ||
| 374 | #ifdef CONFIG_DRM_I2C_ADV7511_CEC | 374 | #ifdef CONFIG_DRM_I2C_ADV7511_CEC |
| 375 | int adv7511_cec_init(struct device *dev, struct adv7511 *adv7511, | 375 | int adv7511_cec_init(struct device *dev, struct adv7511 *adv7511); |
| 376 | unsigned int offset); | ||
| 377 | void adv7511_cec_irq_process(struct adv7511 *adv7511, unsigned int irq1); | 376 | void adv7511_cec_irq_process(struct adv7511 *adv7511, unsigned int irq1); |
| 377 | #else | ||
| 378 | static inline int adv7511_cec_init(struct device *dev, struct adv7511 *adv7511) | ||
| 379 | { | ||
| 380 | unsigned int offset = adv7511->type == ADV7533 ? | ||
| 381 | ADV7533_REG_CEC_OFFSET : 0; | ||
| 382 | |||
| 383 | regmap_write(adv7511->regmap, ADV7511_REG_CEC_CTRL + offset, | ||
| 384 | ADV7511_CEC_CTRL_POWER_DOWN); | ||
| 385 | return 0; | ||
| 386 | } | ||
| 378 | #endif | 387 | #endif |
| 379 | 388 | ||
| 380 | #ifdef CONFIG_DRM_I2C_ADV7533 | 389 | #ifdef CONFIG_DRM_I2C_ADV7533 |
diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_cec.c b/drivers/gpu/drm/bridge/adv7511/adv7511_cec.c index b33d730e4d73..a20a45c0b353 100644 --- a/drivers/gpu/drm/bridge/adv7511/adv7511_cec.c +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_cec.c | |||
| @@ -300,18 +300,21 @@ static int adv7511_cec_parse_dt(struct device *dev, struct adv7511 *adv7511) | |||
| 300 | return 0; | 300 | return 0; |
| 301 | } | 301 | } |
| 302 | 302 | ||
| 303 | int adv7511_cec_init(struct device *dev, struct adv7511 *adv7511, | 303 | int adv7511_cec_init(struct device *dev, struct adv7511 *adv7511) |
| 304 | unsigned int offset) | ||
| 305 | { | 304 | { |
| 305 | unsigned int offset = adv7511->type == ADV7533 ? | ||
| 306 | ADV7533_REG_CEC_OFFSET : 0; | ||
| 306 | int ret = adv7511_cec_parse_dt(dev, adv7511); | 307 | int ret = adv7511_cec_parse_dt(dev, adv7511); |
| 307 | 308 | ||
| 308 | if (ret) | 309 | if (ret) |
| 309 | return ret; | 310 | goto err_cec_parse_dt; |
| 310 | 311 | ||
| 311 | adv7511->cec_adap = cec_allocate_adapter(&adv7511_cec_adap_ops, | 312 | adv7511->cec_adap = cec_allocate_adapter(&adv7511_cec_adap_ops, |
| 312 | adv7511, dev_name(dev), CEC_CAP_DEFAULTS, ADV7511_MAX_ADDRS); | 313 | adv7511, dev_name(dev), CEC_CAP_DEFAULTS, ADV7511_MAX_ADDRS); |
| 313 | if (IS_ERR(adv7511->cec_adap)) | 314 | if (IS_ERR(adv7511->cec_adap)) { |
| 314 | return PTR_ERR(adv7511->cec_adap); | 315 | ret = PTR_ERR(adv7511->cec_adap); |
| 316 | goto err_cec_alloc; | ||
| 317 | } | ||
| 315 | 318 | ||
| 316 | regmap_write(adv7511->regmap, ADV7511_REG_CEC_CTRL + offset, 0); | 319 | regmap_write(adv7511->regmap, ADV7511_REG_CEC_CTRL + offset, 0); |
| 317 | /* cec soft reset */ | 320 | /* cec soft reset */ |
| @@ -329,9 +332,18 @@ int adv7511_cec_init(struct device *dev, struct adv7511 *adv7511, | |||
| 329 | ((adv7511->cec_clk_freq / 750000) - 1) << 2); | 332 | ((adv7511->cec_clk_freq / 750000) - 1) << 2); |
| 330 | 333 | ||
| 331 | ret = cec_register_adapter(adv7511->cec_adap, dev); | 334 | ret = cec_register_adapter(adv7511->cec_adap, dev); |
| 332 | if (ret) { | 335 | if (ret) |
| 333 | cec_delete_adapter(adv7511->cec_adap); | 336 | goto err_cec_register; |
| 334 | adv7511->cec_adap = NULL; | 337 | return 0; |
| 335 | } | 338 | |
| 336 | return ret; | 339 | err_cec_register: |
| 340 | cec_delete_adapter(adv7511->cec_adap); | ||
| 341 | adv7511->cec_adap = NULL; | ||
| 342 | err_cec_alloc: | ||
| 343 | dev_info(dev, "Initializing CEC failed with error %d, disabling CEC\n", | ||
| 344 | ret); | ||
| 345 | err_cec_parse_dt: | ||
| 346 | regmap_write(adv7511->regmap, ADV7511_REG_CEC_CTRL + offset, | ||
| 347 | ADV7511_CEC_CTRL_POWER_DOWN); | ||
| 348 | return ret == -EPROBE_DEFER ? ret : 0; | ||
| 337 | } | 349 | } |
diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c index 0e14f1572d05..efa29db5fc2b 100644 --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | |||
| @@ -1084,7 +1084,6 @@ static int adv7511_probe(struct i2c_client *i2c, const struct i2c_device_id *id) | |||
| 1084 | struct device *dev = &i2c->dev; | 1084 | struct device *dev = &i2c->dev; |
| 1085 | unsigned int main_i2c_addr = i2c->addr << 1; | 1085 | unsigned int main_i2c_addr = i2c->addr << 1; |
| 1086 | unsigned int edid_i2c_addr = main_i2c_addr + 4; | 1086 | unsigned int edid_i2c_addr = main_i2c_addr + 4; |
| 1087 | unsigned int offset; | ||
| 1088 | unsigned int val; | 1087 | unsigned int val; |
| 1089 | int ret; | 1088 | int ret; |
| 1090 | 1089 | ||
| @@ -1192,24 +1191,16 @@ static int adv7511_probe(struct i2c_client *i2c, const struct i2c_device_id *id) | |||
| 1192 | if (adv7511->type == ADV7511) | 1191 | if (adv7511->type == ADV7511) |
| 1193 | adv7511_set_link_config(adv7511, &link_config); | 1192 | adv7511_set_link_config(adv7511, &link_config); |
| 1194 | 1193 | ||
| 1194 | ret = adv7511_cec_init(dev, adv7511); | ||
| 1195 | if (ret) | ||
| 1196 | goto err_unregister_cec; | ||
| 1197 | |||
| 1195 | adv7511->bridge.funcs = &adv7511_bridge_funcs; | 1198 | adv7511->bridge.funcs = &adv7511_bridge_funcs; |
| 1196 | adv7511->bridge.of_node = dev->of_node; | 1199 | adv7511->bridge.of_node = dev->of_node; |
| 1197 | 1200 | ||
| 1198 | drm_bridge_add(&adv7511->bridge); | 1201 | drm_bridge_add(&adv7511->bridge); |
| 1199 | 1202 | ||
| 1200 | adv7511_audio_init(dev, adv7511); | 1203 | adv7511_audio_init(dev, adv7511); |
| 1201 | |||
| 1202 | offset = adv7511->type == ADV7533 ? ADV7533_REG_CEC_OFFSET : 0; | ||
| 1203 | |||
| 1204 | #ifdef CONFIG_DRM_I2C_ADV7511_CEC | ||
| 1205 | ret = adv7511_cec_init(dev, adv7511, offset); | ||
| 1206 | if (ret) | ||
| 1207 | goto err_unregister_cec; | ||
| 1208 | #else | ||
| 1209 | regmap_write(adv7511->regmap, ADV7511_REG_CEC_CTRL + offset, | ||
| 1210 | ADV7511_CEC_CTRL_POWER_DOWN); | ||
| 1211 | #endif | ||
| 1212 | |||
| 1213 | return 0; | 1204 | return 0; |
| 1214 | 1205 | ||
| 1215 | err_unregister_cec: | 1206 | err_unregister_cec: |
diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c index 5dd3f1cd074a..a8905049b9da 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c | |||
| @@ -946,7 +946,9 @@ static int analogix_dp_get_modes(struct drm_connector *connector) | |||
| 946 | return 0; | 946 | return 0; |
| 947 | } | 947 | } |
| 948 | 948 | ||
| 949 | pm_runtime_get_sync(dp->dev); | ||
| 949 | edid = drm_get_edid(connector, &dp->aux.ddc); | 950 | edid = drm_get_edid(connector, &dp->aux.ddc); |
| 951 | pm_runtime_put(dp->dev); | ||
| 950 | if (edid) { | 952 | if (edid) { |
| 951 | drm_mode_connector_update_edid_property(&dp->connector, | 953 | drm_mode_connector_update_edid_property(&dp->connector, |
| 952 | edid); | 954 | edid); |
diff --git a/drivers/gpu/drm/bridge/lvds-encoder.c b/drivers/gpu/drm/bridge/lvds-encoder.c index 0903ba574f61..75b0d3f6e4de 100644 --- a/drivers/gpu/drm/bridge/lvds-encoder.c +++ b/drivers/gpu/drm/bridge/lvds-encoder.c | |||
| @@ -13,13 +13,37 @@ | |||
| 13 | 13 | ||
| 14 | #include <linux/of_graph.h> | 14 | #include <linux/of_graph.h> |
| 15 | 15 | ||
| 16 | struct lvds_encoder { | ||
| 17 | struct drm_bridge bridge; | ||
| 18 | struct drm_bridge *panel_bridge; | ||
| 19 | }; | ||
| 20 | |||
| 21 | static int lvds_encoder_attach(struct drm_bridge *bridge) | ||
| 22 | { | ||
| 23 | struct lvds_encoder *lvds_encoder = container_of(bridge, | ||
| 24 | struct lvds_encoder, | ||
| 25 | bridge); | ||
| 26 | |||
| 27 | return drm_bridge_attach(bridge->encoder, lvds_encoder->panel_bridge, | ||
| 28 | bridge); | ||
| 29 | } | ||
| 30 | |||
| 31 | static struct drm_bridge_funcs funcs = { | ||
| 32 | .attach = lvds_encoder_attach, | ||
| 33 | }; | ||
| 34 | |||
| 16 | static int lvds_encoder_probe(struct platform_device *pdev) | 35 | static int lvds_encoder_probe(struct platform_device *pdev) |
| 17 | { | 36 | { |
| 18 | struct device_node *port; | 37 | struct device_node *port; |
| 19 | struct device_node *endpoint; | 38 | struct device_node *endpoint; |
| 20 | struct device_node *panel_node; | 39 | struct device_node *panel_node; |
| 21 | struct drm_panel *panel; | 40 | struct drm_panel *panel; |
| 22 | struct drm_bridge *bridge; | 41 | struct lvds_encoder *lvds_encoder; |
| 42 | |||
| 43 | lvds_encoder = devm_kzalloc(&pdev->dev, sizeof(*lvds_encoder), | ||
| 44 | GFP_KERNEL); | ||
| 45 | if (!lvds_encoder) | ||
| 46 | return -ENOMEM; | ||
| 23 | 47 | ||
| 24 | /* Locate the panel DT node. */ | 48 | /* Locate the panel DT node. */ |
| 25 | port = of_graph_get_port_by_id(pdev->dev.of_node, 1); | 49 | port = of_graph_get_port_by_id(pdev->dev.of_node, 1); |
| @@ -49,20 +73,30 @@ static int lvds_encoder_probe(struct platform_device *pdev) | |||
| 49 | return -EPROBE_DEFER; | 73 | return -EPROBE_DEFER; |
| 50 | } | 74 | } |
| 51 | 75 | ||
| 52 | bridge = drm_panel_bridge_add(panel, DRM_MODE_CONNECTOR_LVDS); | 76 | lvds_encoder->panel_bridge = |
| 53 | if (IS_ERR(bridge)) | 77 | devm_drm_panel_bridge_add(&pdev->dev, |
| 54 | return PTR_ERR(bridge); | 78 | panel, DRM_MODE_CONNECTOR_LVDS); |
| 79 | if (IS_ERR(lvds_encoder->panel_bridge)) | ||
| 80 | return PTR_ERR(lvds_encoder->panel_bridge); | ||
| 81 | |||
| 82 | /* The panel_bridge bridge is attached to the panel's of_node, | ||
| 83 | * but we need a bridge attached to our of_node for our user | ||
| 84 | * to look up. | ||
| 85 | */ | ||
| 86 | lvds_encoder->bridge.of_node = pdev->dev.of_node; | ||
| 87 | lvds_encoder->bridge.funcs = &funcs; | ||
| 88 | drm_bridge_add(&lvds_encoder->bridge); | ||
| 55 | 89 | ||
| 56 | platform_set_drvdata(pdev, bridge); | 90 | platform_set_drvdata(pdev, lvds_encoder); |
| 57 | 91 | ||
| 58 | return 0; | 92 | return 0; |
| 59 | } | 93 | } |
| 60 | 94 | ||
| 61 | static int lvds_encoder_remove(struct platform_device *pdev) | 95 | static int lvds_encoder_remove(struct platform_device *pdev) |
| 62 | { | 96 | { |
| 63 | struct drm_bridge *bridge = platform_get_drvdata(pdev); | 97 | struct lvds_encoder *lvds_encoder = platform_get_drvdata(pdev); |
| 64 | 98 | ||
| 65 | drm_bridge_remove(bridge); | 99 | drm_bridge_remove(&lvds_encoder->bridge); |
| 66 | 100 | ||
| 67 | return 0; | 101 | return 0; |
| 68 | } | 102 | } |
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c index bf14214fa464..b72259bf6e2f 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | |||
| @@ -138,6 +138,7 @@ struct dw_hdmi { | |||
| 138 | struct device *dev; | 138 | struct device *dev; |
| 139 | struct clk *isfr_clk; | 139 | struct clk *isfr_clk; |
| 140 | struct clk *iahb_clk; | 140 | struct clk *iahb_clk; |
| 141 | struct clk *cec_clk; | ||
| 141 | struct dw_hdmi_i2c *i2c; | 142 | struct dw_hdmi_i2c *i2c; |
| 142 | 143 | ||
| 143 | struct hdmi_data_info hdmi_data; | 144 | struct hdmi_data_info hdmi_data; |
| @@ -2382,6 +2383,26 @@ __dw_hdmi_probe(struct platform_device *pdev, | |||
| 2382 | goto err_isfr; | 2383 | goto err_isfr; |
| 2383 | } | 2384 | } |
| 2384 | 2385 | ||
| 2386 | hdmi->cec_clk = devm_clk_get(hdmi->dev, "cec"); | ||
| 2387 | if (PTR_ERR(hdmi->cec_clk) == -ENOENT) { | ||
| 2388 | hdmi->cec_clk = NULL; | ||
| 2389 | } else if (IS_ERR(hdmi->cec_clk)) { | ||
| 2390 | ret = PTR_ERR(hdmi->cec_clk); | ||
| 2391 | if (ret != -EPROBE_DEFER) | ||
| 2392 | dev_err(hdmi->dev, "Cannot get HDMI cec clock: %d\n", | ||
| 2393 | ret); | ||
| 2394 | |||
| 2395 | hdmi->cec_clk = NULL; | ||
| 2396 | goto err_iahb; | ||
| 2397 | } else { | ||
| 2398 | ret = clk_prepare_enable(hdmi->cec_clk); | ||
| 2399 | if (ret) { | ||
| 2400 | dev_err(hdmi->dev, "Cannot enable HDMI cec clock: %d\n", | ||
| 2401 | ret); | ||
| 2402 | goto err_iahb; | ||
| 2403 | } | ||
| 2404 | } | ||
| 2405 | |||
| 2385 | /* Product and revision IDs */ | 2406 | /* Product and revision IDs */ |
| 2386 | hdmi->version = (hdmi_readb(hdmi, HDMI_DESIGN_ID) << 8) | 2407 | hdmi->version = (hdmi_readb(hdmi, HDMI_DESIGN_ID) << 8) |
| 2387 | | (hdmi_readb(hdmi, HDMI_REVISION_ID) << 0); | 2408 | | (hdmi_readb(hdmi, HDMI_REVISION_ID) << 0); |
| @@ -2518,6 +2539,8 @@ err_iahb: | |||
| 2518 | cec_notifier_put(hdmi->cec_notifier); | 2539 | cec_notifier_put(hdmi->cec_notifier); |
| 2519 | 2540 | ||
| 2520 | clk_disable_unprepare(hdmi->iahb_clk); | 2541 | clk_disable_unprepare(hdmi->iahb_clk); |
| 2542 | if (hdmi->cec_clk) | ||
| 2543 | clk_disable_unprepare(hdmi->cec_clk); | ||
| 2521 | err_isfr: | 2544 | err_isfr: |
| 2522 | clk_disable_unprepare(hdmi->isfr_clk); | 2545 | clk_disable_unprepare(hdmi->isfr_clk); |
| 2523 | err_res: | 2546 | err_res: |
| @@ -2541,6 +2564,8 @@ static void __dw_hdmi_remove(struct dw_hdmi *hdmi) | |||
| 2541 | 2564 | ||
| 2542 | clk_disable_unprepare(hdmi->iahb_clk); | 2565 | clk_disable_unprepare(hdmi->iahb_clk); |
| 2543 | clk_disable_unprepare(hdmi->isfr_clk); | 2566 | clk_disable_unprepare(hdmi->isfr_clk); |
| 2567 | if (hdmi->cec_clk) | ||
| 2568 | clk_disable_unprepare(hdmi->cec_clk); | ||
| 2544 | 2569 | ||
| 2545 | if (hdmi->i2c) | 2570 | if (hdmi->i2c) |
| 2546 | i2c_del_adapter(&hdmi->i2c->adap); | 2571 | i2c_del_adapter(&hdmi->i2c->adap); |
diff --git a/drivers/gpu/drm/bridge/tc358767.c b/drivers/gpu/drm/bridge/tc358767.c index 8571cfd877c5..8636e7eeb731 100644 --- a/drivers/gpu/drm/bridge/tc358767.c +++ b/drivers/gpu/drm/bridge/tc358767.c | |||
| @@ -97,7 +97,7 @@ | |||
| 97 | #define DP0_ACTIVEVAL 0x0650 | 97 | #define DP0_ACTIVEVAL 0x0650 |
| 98 | #define DP0_SYNCVAL 0x0654 | 98 | #define DP0_SYNCVAL 0x0654 |
| 99 | #define DP0_MISC 0x0658 | 99 | #define DP0_MISC 0x0658 |
| 100 | #define TU_SIZE_RECOMMENDED (0x3f << 16) /* LSCLK cycles per TU */ | 100 | #define TU_SIZE_RECOMMENDED (63) /* LSCLK cycles per TU */ |
| 101 | #define BPC_6 (0 << 5) | 101 | #define BPC_6 (0 << 5) |
| 102 | #define BPC_8 (1 << 5) | 102 | #define BPC_8 (1 << 5) |
| 103 | 103 | ||
| @@ -318,7 +318,7 @@ static ssize_t tc_aux_transfer(struct drm_dp_aux *aux, | |||
| 318 | tmp = (tmp << 8) | buf[i]; | 318 | tmp = (tmp << 8) | buf[i]; |
| 319 | i++; | 319 | i++; |
| 320 | if (((i % 4) == 0) || (i == size)) { | 320 | if (((i % 4) == 0) || (i == size)) { |
| 321 | tc_write(DP0_AUXWDATA(i >> 2), tmp); | 321 | tc_write(DP0_AUXWDATA((i - 1) >> 2), tmp); |
| 322 | tmp = 0; | 322 | tmp = 0; |
| 323 | } | 323 | } |
| 324 | } | 324 | } |
| @@ -603,8 +603,15 @@ static int tc_get_display_props(struct tc_data *tc) | |||
| 603 | ret = drm_dp_link_probe(&tc->aux, &tc->link.base); | 603 | ret = drm_dp_link_probe(&tc->aux, &tc->link.base); |
| 604 | if (ret < 0) | 604 | if (ret < 0) |
| 605 | goto err_dpcd_read; | 605 | goto err_dpcd_read; |
| 606 | if ((tc->link.base.rate != 162000) && (tc->link.base.rate != 270000)) | 606 | if (tc->link.base.rate != 162000 && tc->link.base.rate != 270000) { |
| 607 | goto err_dpcd_inval; | 607 | dev_dbg(tc->dev, "Falling to 2.7 Gbps rate\n"); |
| 608 | tc->link.base.rate = 270000; | ||
| 609 | } | ||
| 610 | |||
| 611 | if (tc->link.base.num_lanes > 2) { | ||
| 612 | dev_dbg(tc->dev, "Falling to 2 lanes\n"); | ||
| 613 | tc->link.base.num_lanes = 2; | ||
| 614 | } | ||
| 608 | 615 | ||
| 609 | ret = drm_dp_dpcd_readb(&tc->aux, DP_MAX_DOWNSPREAD, tmp); | 616 | ret = drm_dp_dpcd_readb(&tc->aux, DP_MAX_DOWNSPREAD, tmp); |
| 610 | if (ret < 0) | 617 | if (ret < 0) |
| @@ -637,9 +644,6 @@ static int tc_get_display_props(struct tc_data *tc) | |||
| 637 | err_dpcd_read: | 644 | err_dpcd_read: |
| 638 | dev_err(tc->dev, "failed to read DPCD: %d\n", ret); | 645 | dev_err(tc->dev, "failed to read DPCD: %d\n", ret); |
| 639 | return ret; | 646 | return ret; |
| 640 | err_dpcd_inval: | ||
| 641 | dev_err(tc->dev, "invalid DPCD\n"); | ||
| 642 | return -EINVAL; | ||
| 643 | } | 647 | } |
| 644 | 648 | ||
| 645 | static int tc_set_video_mode(struct tc_data *tc, struct drm_display_mode *mode) | 649 | static int tc_set_video_mode(struct tc_data *tc, struct drm_display_mode *mode) |
| @@ -655,6 +659,14 @@ static int tc_set_video_mode(struct tc_data *tc, struct drm_display_mode *mode) | |||
| 655 | int lower_margin = mode->vsync_start - mode->vdisplay; | 659 | int lower_margin = mode->vsync_start - mode->vdisplay; |
| 656 | int vsync_len = mode->vsync_end - mode->vsync_start; | 660 | int vsync_len = mode->vsync_end - mode->vsync_start; |
| 657 | 661 | ||
| 662 | /* | ||
| 663 | * Recommended maximum number of symbols transferred in a transfer unit: | ||
| 664 | * DIV_ROUND_UP((input active video bandwidth in bytes) * tu_size, | ||
| 665 | * (output active video bandwidth in bytes)) | ||
| 666 | * Must be less than tu_size. | ||
| 667 | */ | ||
| 668 | max_tu_symbol = TU_SIZE_RECOMMENDED - 1; | ||
| 669 | |||
| 658 | dev_dbg(tc->dev, "set mode %dx%d\n", | 670 | dev_dbg(tc->dev, "set mode %dx%d\n", |
| 659 | mode->hdisplay, mode->vdisplay); | 671 | mode->hdisplay, mode->vdisplay); |
| 660 | dev_dbg(tc->dev, "H margin %d,%d sync %d\n", | 672 | dev_dbg(tc->dev, "H margin %d,%d sync %d\n", |
| @@ -664,13 +676,18 @@ static int tc_set_video_mode(struct tc_data *tc, struct drm_display_mode *mode) | |||
| 664 | dev_dbg(tc->dev, "total: %dx%d\n", mode->htotal, mode->vtotal); | 676 | dev_dbg(tc->dev, "total: %dx%d\n", mode->htotal, mode->vtotal); |
| 665 | 677 | ||
| 666 | 678 | ||
| 667 | /* LCD Ctl Frame Size */ | 679 | /* |
| 668 | tc_write(VPCTRL0, (0x40 << 20) /* VSDELAY */ | | 680 | * LCD Ctl Frame Size |
| 681 | * datasheet is not clear of vsdelay in case of DPI | ||
| 682 | * assume we do not need any delay when DPI is a source of | ||
| 683 | * sync signals | ||
| 684 | */ | ||
| 685 | tc_write(VPCTRL0, (0 << 20) /* VSDELAY */ | | ||
| 669 | OPXLFMT_RGB888 | FRMSYNC_DISABLED | MSF_DISABLED); | 686 | OPXLFMT_RGB888 | FRMSYNC_DISABLED | MSF_DISABLED); |
| 670 | tc_write(HTIM01, (left_margin << 16) | /* H back porch */ | 687 | tc_write(HTIM01, (ALIGN(left_margin, 2) << 16) | /* H back porch */ |
| 671 | (hsync_len << 0)); /* Hsync */ | 688 | (ALIGN(hsync_len, 2) << 0)); /* Hsync */ |
| 672 | tc_write(HTIM02, (right_margin << 16) | /* H front porch */ | 689 | tc_write(HTIM02, (ALIGN(right_margin, 2) << 16) | /* H front porch */ |
| 673 | (mode->hdisplay << 0)); /* width */ | 690 | (ALIGN(mode->hdisplay, 2) << 0)); /* width */ |
| 674 | tc_write(VTIM01, (upper_margin << 16) | /* V back porch */ | 691 | tc_write(VTIM01, (upper_margin << 16) | /* V back porch */ |
| 675 | (vsync_len << 0)); /* Vsync */ | 692 | (vsync_len << 0)); /* Vsync */ |
| 676 | tc_write(VTIM02, (lower_margin << 16) | /* V front porch */ | 693 | tc_write(VTIM02, (lower_margin << 16) | /* V front porch */ |
| @@ -689,7 +706,7 @@ static int tc_set_video_mode(struct tc_data *tc, struct drm_display_mode *mode) | |||
| 689 | /* DP Main Stream Attributes */ | 706 | /* DP Main Stream Attributes */ |
| 690 | vid_sync_dly = hsync_len + left_margin + mode->hdisplay; | 707 | vid_sync_dly = hsync_len + left_margin + mode->hdisplay; |
| 691 | tc_write(DP0_VIDSYNCDELAY, | 708 | tc_write(DP0_VIDSYNCDELAY, |
| 692 | (0x003e << 16) | /* thresh_dly */ | 709 | (max_tu_symbol << 16) | /* thresh_dly */ |
| 693 | (vid_sync_dly << 0)); | 710 | (vid_sync_dly << 0)); |
| 694 | 711 | ||
| 695 | tc_write(DP0_TOTALVAL, (mode->vtotal << 16) | (mode->htotal)); | 712 | tc_write(DP0_TOTALVAL, (mode->vtotal << 16) | (mode->htotal)); |
| @@ -705,14 +722,8 @@ static int tc_set_video_mode(struct tc_data *tc, struct drm_display_mode *mode) | |||
| 705 | tc_write(DPIPXLFMT, VS_POL_ACTIVE_LOW | HS_POL_ACTIVE_LOW | | 722 | tc_write(DPIPXLFMT, VS_POL_ACTIVE_LOW | HS_POL_ACTIVE_LOW | |
| 706 | DE_POL_ACTIVE_HIGH | SUB_CFG_TYPE_CONFIG1 | DPI_BPP_RGB888); | 723 | DE_POL_ACTIVE_HIGH | SUB_CFG_TYPE_CONFIG1 | DPI_BPP_RGB888); |
| 707 | 724 | ||
| 708 | /* | 725 | tc_write(DP0_MISC, (max_tu_symbol << 23) | (TU_SIZE_RECOMMENDED << 16) | |
| 709 | * Recommended maximum number of symbols transferred in a transfer unit: | 726 | BPC_8); |
| 710 | * DIV_ROUND_UP((input active video bandwidth in bytes) * tu_size, | ||
| 711 | * (output active video bandwidth in bytes)) | ||
| 712 | * Must be less than tu_size. | ||
| 713 | */ | ||
| 714 | max_tu_symbol = TU_SIZE_RECOMMENDED - 1; | ||
| 715 | tc_write(DP0_MISC, (max_tu_symbol << 23) | TU_SIZE_RECOMMENDED | BPC_8); | ||
| 716 | 727 | ||
| 717 | return 0; | 728 | return 0; |
| 718 | err: | 729 | err: |
| @@ -808,8 +819,6 @@ static int tc_main_link_setup(struct tc_data *tc) | |||
| 808 | unsigned int rate; | 819 | unsigned int rate; |
| 809 | u32 dp_phy_ctrl; | 820 | u32 dp_phy_ctrl; |
| 810 | int timeout; | 821 | int timeout; |
| 811 | bool aligned; | ||
| 812 | bool ready; | ||
| 813 | u32 value; | 822 | u32 value; |
| 814 | int ret; | 823 | int ret; |
| 815 | u8 tmp[8]; | 824 | u8 tmp[8]; |
| @@ -954,16 +963,15 @@ static int tc_main_link_setup(struct tc_data *tc) | |||
| 954 | ret = drm_dp_dpcd_read_link_status(aux, tmp + 2); | 963 | ret = drm_dp_dpcd_read_link_status(aux, tmp + 2); |
| 955 | if (ret < 0) | 964 | if (ret < 0) |
| 956 | goto err_dpcd_read; | 965 | goto err_dpcd_read; |
| 957 | ready = (tmp[2] == ((DP_CHANNEL_EQ_BITS << 4) | /* Lane1 */ | 966 | } while ((--timeout) && |
| 958 | DP_CHANNEL_EQ_BITS)); /* Lane0 */ | 967 | !(drm_dp_channel_eq_ok(tmp + 2, tc->link.base.num_lanes))); |
| 959 | aligned = tmp[4] & DP_INTERLANE_ALIGN_DONE; | ||
| 960 | } while ((--timeout) && !(ready && aligned)); | ||
| 961 | 968 | ||
| 962 | if (timeout == 0) { | 969 | if (timeout == 0) { |
| 963 | /* Read DPCD 0x200-0x201 */ | 970 | /* Read DPCD 0x200-0x201 */ |
| 964 | ret = drm_dp_dpcd_read(aux, DP_SINK_COUNT, tmp, 2); | 971 | ret = drm_dp_dpcd_read(aux, DP_SINK_COUNT, tmp, 2); |
| 965 | if (ret < 0) | 972 | if (ret < 0) |
| 966 | goto err_dpcd_read; | 973 | goto err_dpcd_read; |
| 974 | dev_err(dev, "channel(s) EQ not ok\n"); | ||
| 967 | dev_info(dev, "0x0200 SINK_COUNT: 0x%02x\n", tmp[0]); | 975 | dev_info(dev, "0x0200 SINK_COUNT: 0x%02x\n", tmp[0]); |
| 968 | dev_info(dev, "0x0201 DEVICE_SERVICE_IRQ_VECTOR: 0x%02x\n", | 976 | dev_info(dev, "0x0201 DEVICE_SERVICE_IRQ_VECTOR: 0x%02x\n", |
| 969 | tmp[1]); | 977 | tmp[1]); |
| @@ -974,10 +982,6 @@ static int tc_main_link_setup(struct tc_data *tc) | |||
| 974 | dev_info(dev, "0x0206 ADJUST_REQUEST_LANE0_1: 0x%02x\n", | 982 | dev_info(dev, "0x0206 ADJUST_REQUEST_LANE0_1: 0x%02x\n", |
| 975 | tmp[6]); | 983 | tmp[6]); |
| 976 | 984 | ||
| 977 | if (!ready) | ||
| 978 | dev_err(dev, "Lane0/1 not ready\n"); | ||
| 979 | if (!aligned) | ||
| 980 | dev_err(dev, "Lane0/1 not aligned\n"); | ||
| 981 | return -EAGAIN; | 985 | return -EAGAIN; |
| 982 | } | 986 | } |
| 983 | 987 | ||
| @@ -1099,7 +1103,10 @@ static bool tc_bridge_mode_fixup(struct drm_bridge *bridge, | |||
| 1099 | static int tc_connector_mode_valid(struct drm_connector *connector, | 1103 | static int tc_connector_mode_valid(struct drm_connector *connector, |
| 1100 | struct drm_display_mode *mode) | 1104 | struct drm_display_mode *mode) |
| 1101 | { | 1105 | { |
| 1102 | /* Accept any mode */ | 1106 | /* DPI interface clock limitation: upto 154 MHz */ |
| 1107 | if (mode->clock > 154000) | ||
| 1108 | return MODE_CLOCK_HIGH; | ||
| 1109 | |||
| 1103 | return MODE_OK; | 1110 | return MODE_OK; |
| 1104 | } | 1111 | } |
| 1105 | 1112 | ||
diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c index 71d712f1b56a..b16f1d69a0bb 100644 --- a/drivers/gpu/drm/drm_atomic_helper.c +++ b/drivers/gpu/drm/drm_atomic_helper.c | |||
| @@ -1225,7 +1225,7 @@ drm_atomic_helper_wait_for_vblanks(struct drm_device *dev, | |||
| 1225 | return; | 1225 | return; |
| 1226 | 1226 | ||
| 1227 | for_each_oldnew_crtc_in_state(old_state, crtc, old_crtc_state, new_crtc_state, i) { | 1227 | for_each_oldnew_crtc_in_state(old_state, crtc, old_crtc_state, new_crtc_state, i) { |
| 1228 | if (!new_crtc_state->active || !new_crtc_state->planes_changed) | 1228 | if (!new_crtc_state->active) |
| 1229 | continue; | 1229 | continue; |
| 1230 | 1230 | ||
| 1231 | ret = drm_crtc_vblank_get(crtc); | 1231 | ret = drm_crtc_vblank_get(crtc); |
diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c index 25f4b2e9a44f..9ae236036e32 100644 --- a/drivers/gpu/drm/drm_connector.c +++ b/drivers/gpu/drm/drm_connector.c | |||
| @@ -152,6 +152,25 @@ static void drm_connector_free(struct kref *kref) | |||
| 152 | connector->funcs->destroy(connector); | 152 | connector->funcs->destroy(connector); |
| 153 | } | 153 | } |
| 154 | 154 | ||
| 155 | void drm_connector_free_work_fn(struct work_struct *work) | ||
| 156 | { | ||
| 157 | struct drm_connector *connector, *n; | ||
| 158 | struct drm_device *dev = | ||
| 159 | container_of(work, struct drm_device, mode_config.connector_free_work); | ||
| 160 | struct drm_mode_config *config = &dev->mode_config; | ||
| 161 | unsigned long flags; | ||
| 162 | struct llist_node *freed; | ||
| 163 | |||
| 164 | spin_lock_irqsave(&config->connector_list_lock, flags); | ||
| 165 | freed = llist_del_all(&config->connector_free_list); | ||
| 166 | spin_unlock_irqrestore(&config->connector_list_lock, flags); | ||
| 167 | |||
| 168 | llist_for_each_entry_safe(connector, n, freed, free_node) { | ||
| 169 | drm_mode_object_unregister(dev, &connector->base); | ||
| 170 | connector->funcs->destroy(connector); | ||
| 171 | } | ||
| 172 | } | ||
| 173 | |||
| 155 | /** | 174 | /** |
| 156 | * drm_connector_init - Init a preallocated connector | 175 | * drm_connector_init - Init a preallocated connector |
| 157 | * @dev: DRM device | 176 | * @dev: DRM device |
| @@ -529,6 +548,25 @@ void drm_connector_list_iter_begin(struct drm_device *dev, | |||
| 529 | } | 548 | } |
| 530 | EXPORT_SYMBOL(drm_connector_list_iter_begin); | 549 | EXPORT_SYMBOL(drm_connector_list_iter_begin); |
| 531 | 550 | ||
| 551 | /* | ||
| 552 | * Extra-safe connector put function that works in any context. Should only be | ||
| 553 | * used from the connector_iter functions, where we never really expect to | ||
| 554 | * actually release the connector when dropping our final reference. | ||
| 555 | */ | ||
| 556 | static void | ||
| 557 | __drm_connector_put_safe(struct drm_connector *conn) | ||
| 558 | { | ||
| 559 | struct drm_mode_config *config = &conn->dev->mode_config; | ||
| 560 | |||
| 561 | lockdep_assert_held(&config->connector_list_lock); | ||
| 562 | |||
| 563 | if (!refcount_dec_and_test(&conn->base.refcount.refcount)) | ||
| 564 | return; | ||
| 565 | |||
| 566 | llist_add(&conn->free_node, &config->connector_free_list); | ||
| 567 | schedule_work(&config->connector_free_work); | ||
| 568 | } | ||
| 569 | |||
| 532 | /** | 570 | /** |
| 533 | * drm_connector_list_iter_next - return next connector | 571 | * drm_connector_list_iter_next - return next connector |
| 534 | * @iter: connectr_list iterator | 572 | * @iter: connectr_list iterator |
| @@ -558,10 +596,10 @@ drm_connector_list_iter_next(struct drm_connector_list_iter *iter) | |||
| 558 | 596 | ||
| 559 | /* loop until it's not a zombie connector */ | 597 | /* loop until it's not a zombie connector */ |
| 560 | } while (!kref_get_unless_zero(&iter->conn->base.refcount)); | 598 | } while (!kref_get_unless_zero(&iter->conn->base.refcount)); |
| 561 | spin_unlock_irqrestore(&config->connector_list_lock, flags); | ||
| 562 | 599 | ||
| 563 | if (old_conn) | 600 | if (old_conn) |
| 564 | drm_connector_put(old_conn); | 601 | __drm_connector_put_safe(old_conn); |
| 602 | spin_unlock_irqrestore(&config->connector_list_lock, flags); | ||
| 565 | 603 | ||
| 566 | return iter->conn; | 604 | return iter->conn; |
| 567 | } | 605 | } |
| @@ -578,9 +616,15 @@ EXPORT_SYMBOL(drm_connector_list_iter_next); | |||
| 578 | */ | 616 | */ |
| 579 | void drm_connector_list_iter_end(struct drm_connector_list_iter *iter) | 617 | void drm_connector_list_iter_end(struct drm_connector_list_iter *iter) |
| 580 | { | 618 | { |
| 619 | struct drm_mode_config *config = &iter->dev->mode_config; | ||
| 620 | unsigned long flags; | ||
| 621 | |||
| 581 | iter->dev = NULL; | 622 | iter->dev = NULL; |
| 582 | if (iter->conn) | 623 | if (iter->conn) { |
| 583 | drm_connector_put(iter->conn); | 624 | spin_lock_irqsave(&config->connector_list_lock, flags); |
| 625 | __drm_connector_put_safe(iter->conn); | ||
| 626 | spin_unlock_irqrestore(&config->connector_list_lock, flags); | ||
| 627 | } | ||
| 584 | lock_release(&connector_list_iter_dep_map, 0, _RET_IP_); | 628 | lock_release(&connector_list_iter_dep_map, 0, _RET_IP_); |
| 585 | } | 629 | } |
| 586 | EXPORT_SYMBOL(drm_connector_list_iter_end); | 630 | EXPORT_SYMBOL(drm_connector_list_iter_end); |
| @@ -1207,6 +1251,19 @@ int drm_mode_connector_update_edid_property(struct drm_connector *connector, | |||
| 1207 | if (edid) | 1251 | if (edid) |
| 1208 | size = EDID_LENGTH * (1 + edid->extensions); | 1252 | size = EDID_LENGTH * (1 + edid->extensions); |
| 1209 | 1253 | ||
| 1254 | /* Set the display info, using edid if available, otherwise | ||
| 1255 | * reseting the values to defaults. This duplicates the work | ||
| 1256 | * done in drm_add_edid_modes, but that function is not | ||
| 1257 | * consistently called before this one in all drivers and the | ||
| 1258 | * computation is cheap enough that it seems better to | ||
| 1259 | * duplicate it rather than attempt to ensure some arbitrary | ||
| 1260 | * ordering of calls. | ||
| 1261 | */ | ||
| 1262 | if (edid) | ||
| 1263 | drm_add_display_info(connector, edid); | ||
| 1264 | else | ||
| 1265 | drm_reset_display_info(connector); | ||
| 1266 | |||
| 1210 | drm_object_property_set_value(&connector->base, | 1267 | drm_object_property_set_value(&connector->base, |
| 1211 | dev->mode_config.non_desktop_property, | 1268 | dev->mode_config.non_desktop_property, |
| 1212 | connector->display_info.non_desktop); | 1269 | connector->display_info.non_desktop); |
diff --git a/drivers/gpu/drm/drm_crtc_internal.h b/drivers/gpu/drm/drm_crtc_internal.h index 9ebb8841778c..af00f42ba269 100644 --- a/drivers/gpu/drm/drm_crtc_internal.h +++ b/drivers/gpu/drm/drm_crtc_internal.h | |||
| @@ -142,6 +142,7 @@ int drm_mode_connector_set_obj_prop(struct drm_mode_object *obj, | |||
| 142 | uint64_t value); | 142 | uint64_t value); |
| 143 | int drm_connector_create_standard_properties(struct drm_device *dev); | 143 | int drm_connector_create_standard_properties(struct drm_device *dev); |
| 144 | const char *drm_get_connector_force_name(enum drm_connector_force force); | 144 | const char *drm_get_connector_force_name(enum drm_connector_force force); |
| 145 | void drm_connector_free_work_fn(struct work_struct *work); | ||
| 145 | 146 | ||
| 146 | /* IOCTL */ | 147 | /* IOCTL */ |
| 147 | int drm_mode_connector_property_set_ioctl(struct drm_device *dev, | 148 | int drm_mode_connector_property_set_ioctl(struct drm_device *dev, |
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index 2e8fb51282ef..cb487148359a 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c | |||
| @@ -1731,7 +1731,7 @@ EXPORT_SYMBOL(drm_edid_duplicate); | |||
| 1731 | * | 1731 | * |
| 1732 | * Returns true if @vendor is in @edid, false otherwise | 1732 | * Returns true if @vendor is in @edid, false otherwise |
| 1733 | */ | 1733 | */ |
| 1734 | static bool edid_vendor(struct edid *edid, const char *vendor) | 1734 | static bool edid_vendor(const struct edid *edid, const char *vendor) |
| 1735 | { | 1735 | { |
| 1736 | char edid_vendor[3]; | 1736 | char edid_vendor[3]; |
| 1737 | 1737 | ||
| @@ -1749,7 +1749,7 @@ static bool edid_vendor(struct edid *edid, const char *vendor) | |||
| 1749 | * | 1749 | * |
| 1750 | * This tells subsequent routines what fixes they need to apply. | 1750 | * This tells subsequent routines what fixes they need to apply. |
| 1751 | */ | 1751 | */ |
| 1752 | static u32 edid_get_quirks(struct edid *edid) | 1752 | static u32 edid_get_quirks(const struct edid *edid) |
| 1753 | { | 1753 | { |
| 1754 | const struct edid_quirk *quirk; | 1754 | const struct edid_quirk *quirk; |
| 1755 | int i; | 1755 | int i; |
| @@ -2813,7 +2813,7 @@ add_detailed_modes(struct drm_connector *connector, struct edid *edid, | |||
| 2813 | /* | 2813 | /* |
| 2814 | * Search EDID for CEA extension block. | 2814 | * Search EDID for CEA extension block. |
| 2815 | */ | 2815 | */ |
| 2816 | static u8 *drm_find_edid_extension(struct edid *edid, int ext_id) | 2816 | static u8 *drm_find_edid_extension(const struct edid *edid, int ext_id) |
| 2817 | { | 2817 | { |
| 2818 | u8 *edid_ext = NULL; | 2818 | u8 *edid_ext = NULL; |
| 2819 | int i; | 2819 | int i; |
| @@ -2835,12 +2835,12 @@ static u8 *drm_find_edid_extension(struct edid *edid, int ext_id) | |||
| 2835 | return edid_ext; | 2835 | return edid_ext; |
| 2836 | } | 2836 | } |
| 2837 | 2837 | ||
| 2838 | static u8 *drm_find_cea_extension(struct edid *edid) | 2838 | static u8 *drm_find_cea_extension(const struct edid *edid) |
| 2839 | { | 2839 | { |
| 2840 | return drm_find_edid_extension(edid, CEA_EXT); | 2840 | return drm_find_edid_extension(edid, CEA_EXT); |
| 2841 | } | 2841 | } |
| 2842 | 2842 | ||
| 2843 | static u8 *drm_find_displayid_extension(struct edid *edid) | 2843 | static u8 *drm_find_displayid_extension(const struct edid *edid) |
| 2844 | { | 2844 | { |
| 2845 | return drm_find_edid_extension(edid, DISPLAYID_EXT); | 2845 | return drm_find_edid_extension(edid, DISPLAYID_EXT); |
| 2846 | } | 2846 | } |
| @@ -4363,7 +4363,7 @@ drm_parse_hdmi_vsdb_video(struct drm_connector *connector, const u8 *db) | |||
| 4363 | } | 4363 | } |
| 4364 | 4364 | ||
| 4365 | static void drm_parse_cea_ext(struct drm_connector *connector, | 4365 | static void drm_parse_cea_ext(struct drm_connector *connector, |
| 4366 | struct edid *edid) | 4366 | const struct edid *edid) |
| 4367 | { | 4367 | { |
| 4368 | struct drm_display_info *info = &connector->display_info; | 4368 | struct drm_display_info *info = &connector->display_info; |
| 4369 | const u8 *edid_ext; | 4369 | const u8 *edid_ext; |
| @@ -4397,11 +4397,33 @@ static void drm_parse_cea_ext(struct drm_connector *connector, | |||
| 4397 | } | 4397 | } |
| 4398 | } | 4398 | } |
| 4399 | 4399 | ||
| 4400 | static void drm_add_display_info(struct drm_connector *connector, | 4400 | /* A connector has no EDID information, so we've got no EDID to compute quirks from. Reset |
| 4401 | struct edid *edid, u32 quirks) | 4401 | * all of the values which would have been set from EDID |
| 4402 | */ | ||
| 4403 | void | ||
| 4404 | drm_reset_display_info(struct drm_connector *connector) | ||
| 4405 | { | ||
| 4406 | struct drm_display_info *info = &connector->display_info; | ||
| 4407 | |||
| 4408 | info->width_mm = 0; | ||
| 4409 | info->height_mm = 0; | ||
| 4410 | |||
| 4411 | info->bpc = 0; | ||
| 4412 | info->color_formats = 0; | ||
| 4413 | info->cea_rev = 0; | ||
| 4414 | info->max_tmds_clock = 0; | ||
| 4415 | info->dvi_dual = false; | ||
| 4416 | |||
| 4417 | info->non_desktop = 0; | ||
| 4418 | } | ||
| 4419 | EXPORT_SYMBOL_GPL(drm_reset_display_info); | ||
| 4420 | |||
| 4421 | u32 drm_add_display_info(struct drm_connector *connector, const struct edid *edid) | ||
| 4402 | { | 4422 | { |
| 4403 | struct drm_display_info *info = &connector->display_info; | 4423 | struct drm_display_info *info = &connector->display_info; |
| 4404 | 4424 | ||
| 4425 | u32 quirks = edid_get_quirks(edid); | ||
| 4426 | |||
| 4405 | info->width_mm = edid->width_cm * 10; | 4427 | info->width_mm = edid->width_cm * 10; |
| 4406 | info->height_mm = edid->height_cm * 10; | 4428 | info->height_mm = edid->height_cm * 10; |
| 4407 | 4429 | ||
| @@ -4414,11 +4436,13 @@ static void drm_add_display_info(struct drm_connector *connector, | |||
| 4414 | 4436 | ||
| 4415 | info->non_desktop = !!(quirks & EDID_QUIRK_NON_DESKTOP); | 4437 | info->non_desktop = !!(quirks & EDID_QUIRK_NON_DESKTOP); |
| 4416 | 4438 | ||
| 4439 | DRM_DEBUG_KMS("non_desktop set to %d\n", info->non_desktop); | ||
| 4440 | |||
| 4417 | if (edid->revision < 3) | 4441 | if (edid->revision < 3) |
| 4418 | return; | 4442 | return quirks; |
| 4419 | 4443 | ||
| 4420 | if (!(edid->input & DRM_EDID_INPUT_DIGITAL)) | 4444 | if (!(edid->input & DRM_EDID_INPUT_DIGITAL)) |
| 4421 | return; | 4445 | return quirks; |
| 4422 | 4446 | ||
| 4423 | drm_parse_cea_ext(connector, edid); | 4447 | drm_parse_cea_ext(connector, edid); |
| 4424 | 4448 | ||
| @@ -4438,7 +4462,7 @@ static void drm_add_display_info(struct drm_connector *connector, | |||
| 4438 | 4462 | ||
| 4439 | /* Only defined for 1.4 with digital displays */ | 4463 | /* Only defined for 1.4 with digital displays */ |
| 4440 | if (edid->revision < 4) | 4464 | if (edid->revision < 4) |
| 4441 | return; | 4465 | return quirks; |
| 4442 | 4466 | ||
| 4443 | switch (edid->input & DRM_EDID_DIGITAL_DEPTH_MASK) { | 4467 | switch (edid->input & DRM_EDID_DIGITAL_DEPTH_MASK) { |
| 4444 | case DRM_EDID_DIGITAL_DEPTH_6: | 4468 | case DRM_EDID_DIGITAL_DEPTH_6: |
| @@ -4473,7 +4497,9 @@ static void drm_add_display_info(struct drm_connector *connector, | |||
| 4473 | info->color_formats |= DRM_COLOR_FORMAT_YCRCB444; | 4497 | info->color_formats |= DRM_COLOR_FORMAT_YCRCB444; |
| 4474 | if (edid->features & DRM_EDID_FEATURE_RGB_YCRCB422) | 4498 | if (edid->features & DRM_EDID_FEATURE_RGB_YCRCB422) |
| 4475 | info->color_formats |= DRM_COLOR_FORMAT_YCRCB422; | 4499 | info->color_formats |= DRM_COLOR_FORMAT_YCRCB422; |
| 4500 | return quirks; | ||
| 4476 | } | 4501 | } |
| 4502 | EXPORT_SYMBOL_GPL(drm_add_display_info); | ||
| 4477 | 4503 | ||
| 4478 | static int validate_displayid(u8 *displayid, int length, int idx) | 4504 | static int validate_displayid(u8 *displayid, int length, int idx) |
| 4479 | { | 4505 | { |
| @@ -4627,14 +4653,12 @@ int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid) | |||
| 4627 | return 0; | 4653 | return 0; |
| 4628 | } | 4654 | } |
| 4629 | 4655 | ||
| 4630 | quirks = edid_get_quirks(edid); | ||
| 4631 | |||
| 4632 | /* | 4656 | /* |
| 4633 | * CEA-861-F adds ycbcr capability map block, for HDMI 2.0 sinks. | 4657 | * CEA-861-F adds ycbcr capability map block, for HDMI 2.0 sinks. |
| 4634 | * To avoid multiple parsing of same block, lets parse that map | 4658 | * To avoid multiple parsing of same block, lets parse that map |
| 4635 | * from sink info, before parsing CEA modes. | 4659 | * from sink info, before parsing CEA modes. |
| 4636 | */ | 4660 | */ |
| 4637 | drm_add_display_info(connector, edid, quirks); | 4661 | quirks = drm_add_display_info(connector, edid); |
| 4638 | 4662 | ||
| 4639 | /* | 4663 | /* |
| 4640 | * EDID spec says modes should be preferred in this order: | 4664 | * EDID spec says modes should be preferred in this order: |
| @@ -4831,7 +4855,8 @@ void | |||
| 4831 | drm_hdmi_avi_infoframe_quant_range(struct hdmi_avi_infoframe *frame, | 4855 | drm_hdmi_avi_infoframe_quant_range(struct hdmi_avi_infoframe *frame, |
| 4832 | const struct drm_display_mode *mode, | 4856 | const struct drm_display_mode *mode, |
| 4833 | enum hdmi_quantization_range rgb_quant_range, | 4857 | enum hdmi_quantization_range rgb_quant_range, |
| 4834 | bool rgb_quant_range_selectable) | 4858 | bool rgb_quant_range_selectable, |
| 4859 | bool is_hdmi2_sink) | ||
| 4835 | { | 4860 | { |
| 4836 | /* | 4861 | /* |
| 4837 | * CEA-861: | 4862 | * CEA-861: |
| @@ -4855,8 +4880,15 @@ drm_hdmi_avi_infoframe_quant_range(struct hdmi_avi_infoframe *frame, | |||
| 4855 | * YQ-field to match the RGB Quantization Range being transmitted | 4880 | * YQ-field to match the RGB Quantization Range being transmitted |
| 4856 | * (e.g., when Limited Range RGB, set YQ=0 or when Full Range RGB, | 4881 | * (e.g., when Limited Range RGB, set YQ=0 or when Full Range RGB, |
| 4857 | * set YQ=1) and the Sink shall ignore the YQ-field." | 4882 | * set YQ=1) and the Sink shall ignore the YQ-field." |
| 4883 | * | ||
| 4884 | * Unfortunate certain sinks (eg. VIZ Model 67/E261VA) get confused | ||
| 4885 | * by non-zero YQ when receiving RGB. There doesn't seem to be any | ||
| 4886 | * good way to tell which version of CEA-861 the sink supports, so | ||
| 4887 | * we limit non-zero YQ to HDMI 2.0 sinks only as HDMI 2.0 is based | ||
| 4888 | * on on CEA-861-F. | ||
| 4858 | */ | 4889 | */ |
| 4859 | if (rgb_quant_range == HDMI_QUANTIZATION_RANGE_LIMITED) | 4890 | if (!is_hdmi2_sink || |
| 4891 | rgb_quant_range == HDMI_QUANTIZATION_RANGE_LIMITED) | ||
| 4860 | frame->ycc_quantization_range = | 4892 | frame->ycc_quantization_range = |
| 4861 | HDMI_YCC_QUANTIZATION_RANGE_LIMITED; | 4893 | HDMI_YCC_QUANTIZATION_RANGE_LIMITED; |
| 4862 | else | 4894 | else |
diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c index 07374008f146..e56166334455 100644 --- a/drivers/gpu/drm/drm_fb_helper.c +++ b/drivers/gpu/drm/drm_fb_helper.c | |||
| @@ -1809,6 +1809,10 @@ static int drm_fb_helper_single_fb_probe(struct drm_fb_helper *fb_helper, | |||
| 1809 | 1809 | ||
| 1810 | if (crtc_count == 0 || sizes.fb_width == -1 || sizes.fb_height == -1) { | 1810 | if (crtc_count == 0 || sizes.fb_width == -1 || sizes.fb_height == -1) { |
| 1811 | DRM_INFO("Cannot find any crtc or sizes\n"); | 1811 | DRM_INFO("Cannot find any crtc or sizes\n"); |
| 1812 | |||
| 1813 | /* First time: disable all crtc's.. */ | ||
| 1814 | if (!fb_helper->deferred_setup && !READ_ONCE(fb_helper->dev->master)) | ||
| 1815 | restore_fbdev_mode(fb_helper); | ||
| 1812 | return -EAGAIN; | 1816 | return -EAGAIN; |
| 1813 | } | 1817 | } |
| 1814 | 1818 | ||
diff --git a/drivers/gpu/drm/drm_lease.c b/drivers/gpu/drm/drm_lease.c index d1eb56a1eff4..59849f02e2ad 100644 --- a/drivers/gpu/drm/drm_lease.c +++ b/drivers/gpu/drm/drm_lease.c | |||
| @@ -254,10 +254,10 @@ static struct drm_master *drm_lease_create(struct drm_master *lessor, struct idr | |||
| 254 | return lessee; | 254 | return lessee; |
| 255 | 255 | ||
| 256 | out_lessee: | 256 | out_lessee: |
| 257 | drm_master_put(&lessee); | ||
| 258 | |||
| 259 | mutex_unlock(&dev->mode_config.idr_mutex); | 257 | mutex_unlock(&dev->mode_config.idr_mutex); |
| 260 | 258 | ||
| 259 | drm_master_put(&lessee); | ||
| 260 | |||
| 261 | return ERR_PTR(error); | 261 | return ERR_PTR(error); |
| 262 | } | 262 | } |
| 263 | 263 | ||
diff --git a/drivers/gpu/drm/drm_mm.c b/drivers/gpu/drm/drm_mm.c index 61a1c8ea74bc..c3c79ee6119e 100644 --- a/drivers/gpu/drm/drm_mm.c +++ b/drivers/gpu/drm/drm_mm.c | |||
| @@ -575,21 +575,23 @@ EXPORT_SYMBOL(drm_mm_remove_node); | |||
| 575 | */ | 575 | */ |
| 576 | void drm_mm_replace_node(struct drm_mm_node *old, struct drm_mm_node *new) | 576 | void drm_mm_replace_node(struct drm_mm_node *old, struct drm_mm_node *new) |
| 577 | { | 577 | { |
| 578 | struct drm_mm *mm = old->mm; | ||
| 579 | |||
| 578 | DRM_MM_BUG_ON(!old->allocated); | 580 | DRM_MM_BUG_ON(!old->allocated); |
| 579 | 581 | ||
| 580 | *new = *old; | 582 | *new = *old; |
| 581 | 583 | ||
| 582 | list_replace(&old->node_list, &new->node_list); | 584 | list_replace(&old->node_list, &new->node_list); |
| 583 | rb_replace_node(&old->rb, &new->rb, &old->mm->interval_tree.rb_root); | 585 | rb_replace_node_cached(&old->rb, &new->rb, &mm->interval_tree); |
| 584 | 586 | ||
| 585 | if (drm_mm_hole_follows(old)) { | 587 | if (drm_mm_hole_follows(old)) { |
| 586 | list_replace(&old->hole_stack, &new->hole_stack); | 588 | list_replace(&old->hole_stack, &new->hole_stack); |
| 587 | rb_replace_node(&old->rb_hole_size, | 589 | rb_replace_node(&old->rb_hole_size, |
| 588 | &new->rb_hole_size, | 590 | &new->rb_hole_size, |
| 589 | &old->mm->holes_size); | 591 | &mm->holes_size); |
| 590 | rb_replace_node(&old->rb_hole_addr, | 592 | rb_replace_node(&old->rb_hole_addr, |
| 591 | &new->rb_hole_addr, | 593 | &new->rb_hole_addr, |
| 592 | &old->mm->holes_addr); | 594 | &mm->holes_addr); |
| 593 | } | 595 | } |
| 594 | 596 | ||
| 595 | old->allocated = false; | 597 | old->allocated = false; |
diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_config.c index cda8bfab6d3b..256de7313612 100644 --- a/drivers/gpu/drm/drm_mode_config.c +++ b/drivers/gpu/drm/drm_mode_config.c | |||
| @@ -382,6 +382,9 @@ void drm_mode_config_init(struct drm_device *dev) | |||
| 382 | ida_init(&dev->mode_config.connector_ida); | 382 | ida_init(&dev->mode_config.connector_ida); |
| 383 | spin_lock_init(&dev->mode_config.connector_list_lock); | 383 | spin_lock_init(&dev->mode_config.connector_list_lock); |
| 384 | 384 | ||
| 385 | init_llist_head(&dev->mode_config.connector_free_list); | ||
| 386 | INIT_WORK(&dev->mode_config.connector_free_work, drm_connector_free_work_fn); | ||
| 387 | |||
| 385 | drm_mode_create_standard_properties(dev); | 388 | drm_mode_create_standard_properties(dev); |
| 386 | 389 | ||
| 387 | /* Just to be sure */ | 390 | /* Just to be sure */ |
| @@ -431,6 +434,8 @@ void drm_mode_config_cleanup(struct drm_device *dev) | |||
| 431 | drm_connector_put(connector); | 434 | drm_connector_put(connector); |
| 432 | } | 435 | } |
| 433 | drm_connector_list_iter_end(&conn_iter); | 436 | drm_connector_list_iter_end(&conn_iter); |
| 437 | /* connector_iter drops references in a work item. */ | ||
| 438 | flush_work(&dev->mode_config.connector_free_work); | ||
| 434 | if (WARN_ON(!list_empty(&dev->mode_config.connector_list))) { | 439 | if (WARN_ON(!list_empty(&dev->mode_config.connector_list))) { |
| 435 | drm_connector_list_iter_begin(dev, &conn_iter); | 440 | drm_connector_list_iter_begin(dev, &conn_iter); |
| 436 | drm_for_each_connector_iter(connector, &conn_iter) | 441 | drm_for_each_connector_iter(connector, &conn_iter) |
diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c index 19404e34cd59..37a93cdffb4a 100644 --- a/drivers/gpu/drm/drm_plane.c +++ b/drivers/gpu/drm/drm_plane.c | |||
| @@ -1030,6 +1030,7 @@ retry: | |||
| 1030 | e->event.base.type = DRM_EVENT_FLIP_COMPLETE; | 1030 | e->event.base.type = DRM_EVENT_FLIP_COMPLETE; |
| 1031 | e->event.base.length = sizeof(e->event); | 1031 | e->event.base.length = sizeof(e->event); |
| 1032 | e->event.vbl.user_data = page_flip->user_data; | 1032 | e->event.vbl.user_data = page_flip->user_data; |
| 1033 | e->event.vbl.crtc_id = crtc->base.id; | ||
| 1033 | ret = drm_event_reserve_init(dev, file_priv, &e->base, &e->event.base); | 1034 | ret = drm_event_reserve_init(dev, file_priv, &e->base, &e->event.base); |
| 1034 | if (ret) { | 1035 | if (ret) { |
| 1035 | kfree(e); | 1036 | kfree(e); |
diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c index 82b72425a42f..27e423b87266 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_drv.c +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c | |||
| @@ -37,8 +37,6 @@ | |||
| 37 | #define DRIVER_MAJOR 1 | 37 | #define DRIVER_MAJOR 1 |
| 38 | #define DRIVER_MINOR 0 | 38 | #define DRIVER_MINOR 0 |
| 39 | 39 | ||
| 40 | static struct device *exynos_drm_get_dma_device(void); | ||
| 41 | |||
| 42 | int exynos_atomic_check(struct drm_device *dev, | 40 | int exynos_atomic_check(struct drm_device *dev, |
| 43 | struct drm_atomic_state *state) | 41 | struct drm_atomic_state *state) |
| 44 | { | 42 | { |
| @@ -148,7 +146,7 @@ static struct drm_driver exynos_drm_driver = { | |||
| 148 | .prime_handle_to_fd = drm_gem_prime_handle_to_fd, | 146 | .prime_handle_to_fd = drm_gem_prime_handle_to_fd, |
| 149 | .prime_fd_to_handle = drm_gem_prime_fd_to_handle, | 147 | .prime_fd_to_handle = drm_gem_prime_fd_to_handle, |
| 150 | .gem_prime_export = drm_gem_prime_export, | 148 | .gem_prime_export = drm_gem_prime_export, |
| 151 | .gem_prime_import = drm_gem_prime_import, | 149 | .gem_prime_import = exynos_drm_gem_prime_import, |
| 152 | .gem_prime_get_sg_table = exynos_drm_gem_prime_get_sg_table, | 150 | .gem_prime_get_sg_table = exynos_drm_gem_prime_get_sg_table, |
| 153 | .gem_prime_import_sg_table = exynos_drm_gem_prime_import_sg_table, | 151 | .gem_prime_import_sg_table = exynos_drm_gem_prime_import_sg_table, |
| 154 | .gem_prime_vmap = exynos_drm_gem_prime_vmap, | 152 | .gem_prime_vmap = exynos_drm_gem_prime_vmap, |
| @@ -301,6 +299,27 @@ static struct component_match *exynos_drm_match_add(struct device *dev) | |||
| 301 | return match ?: ERR_PTR(-ENODEV); | 299 | return match ?: ERR_PTR(-ENODEV); |
| 302 | } | 300 | } |
| 303 | 301 | ||
| 302 | static struct device *exynos_drm_get_dma_device(void) | ||
| 303 | { | ||
| 304 | int i; | ||
| 305 | |||
| 306 | for (i = 0; i < ARRAY_SIZE(exynos_drm_drivers); ++i) { | ||
| 307 | struct exynos_drm_driver_info *info = &exynos_drm_drivers[i]; | ||
| 308 | struct device *dev; | ||
| 309 | |||
| 310 | if (!info->driver || !(info->flags & DRM_DMA_DEVICE)) | ||
| 311 | continue; | ||
| 312 | |||
| 313 | while ((dev = bus_find_device(&platform_bus_type, NULL, | ||
| 314 | &info->driver->driver, | ||
| 315 | (void *)platform_bus_type.match))) { | ||
| 316 | put_device(dev); | ||
| 317 | return dev; | ||
| 318 | } | ||
| 319 | } | ||
| 320 | return NULL; | ||
| 321 | } | ||
| 322 | |||
| 304 | static int exynos_drm_bind(struct device *dev) | 323 | static int exynos_drm_bind(struct device *dev) |
| 305 | { | 324 | { |
| 306 | struct exynos_drm_private *private; | 325 | struct exynos_drm_private *private; |
| @@ -469,27 +488,6 @@ static struct platform_driver exynos_drm_platform_driver = { | |||
| 469 | }, | 488 | }, |
| 470 | }; | 489 | }; |
| 471 | 490 | ||
| 472 | static struct device *exynos_drm_get_dma_device(void) | ||
| 473 | { | ||
| 474 | int i; | ||
| 475 | |||
| 476 | for (i = 0; i < ARRAY_SIZE(exynos_drm_drivers); ++i) { | ||
| 477 | struct exynos_drm_driver_info *info = &exynos_drm_drivers[i]; | ||
| 478 | struct device *dev; | ||
| 479 | |||
| 480 | if (!info->driver || !(info->flags & DRM_DMA_DEVICE)) | ||
| 481 | continue; | ||
| 482 | |||
| 483 | while ((dev = bus_find_device(&platform_bus_type, NULL, | ||
| 484 | &info->driver->driver, | ||
| 485 | (void *)platform_bus_type.match))) { | ||
| 486 | put_device(dev); | ||
| 487 | return dev; | ||
| 488 | } | ||
| 489 | } | ||
| 490 | return NULL; | ||
| 491 | } | ||
| 492 | |||
| 493 | static void exynos_drm_unregister_devices(void) | 491 | static void exynos_drm_unregister_devices(void) |
| 494 | { | 492 | { |
| 495 | int i; | 493 | int i; |
diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.h b/drivers/gpu/drm/exynos/exynos_drm_drv.h index c6847fa708fa..589d465a7f88 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_drv.h +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.h | |||
| @@ -194,11 +194,6 @@ struct drm_exynos_file_private { | |||
| 194 | /* | 194 | /* |
| 195 | * Exynos drm private structure. | 195 | * Exynos drm private structure. |
| 196 | * | 196 | * |
| 197 | * @da_start: start address to device address space. | ||
| 198 | * with iommu, device address space starts from this address | ||
| 199 | * otherwise default one. | ||
| 200 | * @da_space_size: size of device address space. | ||
| 201 | * if 0 then default value is used for it. | ||
| 202 | * @pending: the crtcs that have pending updates to finish | 197 | * @pending: the crtcs that have pending updates to finish |
| 203 | * @lock: protect access to @pending | 198 | * @lock: protect access to @pending |
| 204 | * @wait: wait an atomic commit to finish | 199 | * @wait: wait an atomic commit to finish |
diff --git a/drivers/gpu/drm/exynos/exynos_drm_gem.c b/drivers/gpu/drm/exynos/exynos_drm_gem.c index 077de014d610..11cc01b47bc0 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_gem.c +++ b/drivers/gpu/drm/exynos/exynos_drm_gem.c | |||
| @@ -247,6 +247,15 @@ struct exynos_drm_gem *exynos_drm_gem_create(struct drm_device *dev, | |||
| 247 | if (IS_ERR(exynos_gem)) | 247 | if (IS_ERR(exynos_gem)) |
| 248 | return exynos_gem; | 248 | return exynos_gem; |
| 249 | 249 | ||
| 250 | if (!is_drm_iommu_supported(dev) && (flags & EXYNOS_BO_NONCONTIG)) { | ||
| 251 | /* | ||
| 252 | * when no IOMMU is available, all allocated buffers are | ||
| 253 | * contiguous anyway, so drop EXYNOS_BO_NONCONTIG flag | ||
| 254 | */ | ||
| 255 | flags &= ~EXYNOS_BO_NONCONTIG; | ||
| 256 | DRM_WARN("Non-contiguous allocation is not supported without IOMMU, falling back to contiguous buffer\n"); | ||
| 257 | } | ||
| 258 | |||
| 250 | /* set memory type and cache attribute from user side. */ | 259 | /* set memory type and cache attribute from user side. */ |
| 251 | exynos_gem->flags = flags; | 260 | exynos_gem->flags = flags; |
| 252 | 261 | ||
| @@ -506,6 +515,12 @@ int exynos_drm_gem_mmap(struct file *filp, struct vm_area_struct *vma) | |||
| 506 | } | 515 | } |
| 507 | 516 | ||
| 508 | /* low-level interface prime helpers */ | 517 | /* low-level interface prime helpers */ |
| 518 | struct drm_gem_object *exynos_drm_gem_prime_import(struct drm_device *dev, | ||
| 519 | struct dma_buf *dma_buf) | ||
| 520 | { | ||
| 521 | return drm_gem_prime_import_dev(dev, dma_buf, to_dma_dev(dev)); | ||
| 522 | } | ||
| 523 | |||
| 509 | struct sg_table *exynos_drm_gem_prime_get_sg_table(struct drm_gem_object *obj) | 524 | struct sg_table *exynos_drm_gem_prime_get_sg_table(struct drm_gem_object *obj) |
| 510 | { | 525 | { |
| 511 | struct exynos_drm_gem *exynos_gem = to_exynos_gem(obj); | 526 | struct exynos_drm_gem *exynos_gem = to_exynos_gem(obj); |
diff --git a/drivers/gpu/drm/exynos/exynos_drm_gem.h b/drivers/gpu/drm/exynos/exynos_drm_gem.h index e86d1a9518c3..5a4c7de80f65 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_gem.h +++ b/drivers/gpu/drm/exynos/exynos_drm_gem.h | |||
| @@ -117,6 +117,8 @@ int exynos_drm_gem_fault(struct vm_fault *vmf); | |||
| 117 | int exynos_drm_gem_mmap(struct file *filp, struct vm_area_struct *vma); | 117 | int exynos_drm_gem_mmap(struct file *filp, struct vm_area_struct *vma); |
| 118 | 118 | ||
| 119 | /* low-level interface prime helpers */ | 119 | /* low-level interface prime helpers */ |
| 120 | struct drm_gem_object *exynos_drm_gem_prime_import(struct drm_device *dev, | ||
| 121 | struct dma_buf *dma_buf); | ||
| 120 | struct sg_table *exynos_drm_gem_prime_get_sg_table(struct drm_gem_object *obj); | 122 | struct sg_table *exynos_drm_gem_prime_get_sg_table(struct drm_gem_object *obj); |
| 121 | struct drm_gem_object * | 123 | struct drm_gem_object * |
| 122 | exynos_drm_gem_prime_import_sg_table(struct drm_device *dev, | 124 | exynos_drm_gem_prime_import_sg_table(struct drm_device *dev, |
diff --git a/drivers/gpu/drm/i915/gvt/cfg_space.c b/drivers/gpu/drm/i915/gvt/cfg_space.c index ab19545d59a1..4ce2e6bd0680 100644 --- a/drivers/gpu/drm/i915/gvt/cfg_space.c +++ b/drivers/gpu/drm/i915/gvt/cfg_space.c | |||
| @@ -208,6 +208,20 @@ static int emulate_pci_command_write(struct intel_vgpu *vgpu, | |||
| 208 | return 0; | 208 | return 0; |
| 209 | } | 209 | } |
| 210 | 210 | ||
| 211 | static int emulate_pci_rom_bar_write(struct intel_vgpu *vgpu, | ||
| 212 | unsigned int offset, void *p_data, unsigned int bytes) | ||
| 213 | { | ||
| 214 | u32 *pval = (u32 *)(vgpu_cfg_space(vgpu) + offset); | ||
| 215 | u32 new = *(u32 *)(p_data); | ||
| 216 | |||
| 217 | if ((new & PCI_ROM_ADDRESS_MASK) == PCI_ROM_ADDRESS_MASK) | ||
| 218 | /* We don't have rom, return size of 0. */ | ||
| 219 | *pval = 0; | ||
| 220 | else | ||
| 221 | vgpu_pci_cfg_mem_write(vgpu, offset, p_data, bytes); | ||
| 222 | return 0; | ||
| 223 | } | ||
| 224 | |||
| 211 | static int emulate_pci_bar_write(struct intel_vgpu *vgpu, unsigned int offset, | 225 | static int emulate_pci_bar_write(struct intel_vgpu *vgpu, unsigned int offset, |
| 212 | void *p_data, unsigned int bytes) | 226 | void *p_data, unsigned int bytes) |
| 213 | { | 227 | { |
| @@ -300,6 +314,11 @@ int intel_vgpu_emulate_cfg_write(struct intel_vgpu *vgpu, unsigned int offset, | |||
| 300 | } | 314 | } |
| 301 | 315 | ||
| 302 | switch (rounddown(offset, 4)) { | 316 | switch (rounddown(offset, 4)) { |
| 317 | case PCI_ROM_ADDRESS: | ||
| 318 | if (WARN_ON(!IS_ALIGNED(offset, 4))) | ||
| 319 | return -EINVAL; | ||
| 320 | return emulate_pci_rom_bar_write(vgpu, offset, p_data, bytes); | ||
| 321 | |||
| 303 | case PCI_BASE_ADDRESS_0 ... PCI_BASE_ADDRESS_5: | 322 | case PCI_BASE_ADDRESS_0 ... PCI_BASE_ADDRESS_5: |
| 304 | if (WARN_ON(!IS_ALIGNED(offset, 4))) | 323 | if (WARN_ON(!IS_ALIGNED(offset, 4))) |
| 305 | return -EINVAL; | 324 | return -EINVAL; |
| @@ -375,6 +394,8 @@ void intel_vgpu_init_cfg_space(struct intel_vgpu *vgpu, | |||
| 375 | pci_resource_len(gvt->dev_priv->drm.pdev, 0); | 394 | pci_resource_len(gvt->dev_priv->drm.pdev, 0); |
| 376 | vgpu->cfg_space.bar[INTEL_GVT_PCI_BAR_APERTURE].size = | 395 | vgpu->cfg_space.bar[INTEL_GVT_PCI_BAR_APERTURE].size = |
| 377 | pci_resource_len(gvt->dev_priv->drm.pdev, 2); | 396 | pci_resource_len(gvt->dev_priv->drm.pdev, 2); |
| 397 | |||
| 398 | memset(vgpu_cfg_space(vgpu) + PCI_ROM_ADDRESS, 0, 4); | ||
| 378 | } | 399 | } |
| 379 | 400 | ||
| 380 | /** | 401 | /** |
diff --git a/drivers/gpu/drm/i915/gvt/cmd_parser.c b/drivers/gpu/drm/i915/gvt/cmd_parser.c index 701a3c6f1669..85d4c57870fb 100644 --- a/drivers/gpu/drm/i915/gvt/cmd_parser.c +++ b/drivers/gpu/drm/i915/gvt/cmd_parser.c | |||
| @@ -1628,7 +1628,7 @@ static int perform_bb_shadow(struct parser_exec_state *s) | |||
| 1628 | struct intel_shadow_bb_entry *entry_obj; | 1628 | struct intel_shadow_bb_entry *entry_obj; |
| 1629 | struct intel_vgpu *vgpu = s->vgpu; | 1629 | struct intel_vgpu *vgpu = s->vgpu; |
| 1630 | unsigned long gma = 0; | 1630 | unsigned long gma = 0; |
| 1631 | uint32_t bb_size; | 1631 | int bb_size; |
| 1632 | void *dst = NULL; | 1632 | void *dst = NULL; |
| 1633 | int ret = 0; | 1633 | int ret = 0; |
| 1634 | 1634 | ||
diff --git a/drivers/gpu/drm/i915/gvt/display.c b/drivers/gpu/drm/i915/gvt/display.c index 3c318439a659..355120865efd 100644 --- a/drivers/gpu/drm/i915/gvt/display.c +++ b/drivers/gpu/drm/i915/gvt/display.c | |||
| @@ -282,6 +282,7 @@ static void clean_virtual_dp_monitor(struct intel_vgpu *vgpu, int port_num) | |||
| 282 | static int setup_virtual_dp_monitor(struct intel_vgpu *vgpu, int port_num, | 282 | static int setup_virtual_dp_monitor(struct intel_vgpu *vgpu, int port_num, |
| 283 | int type, unsigned int resolution) | 283 | int type, unsigned int resolution) |
| 284 | { | 284 | { |
| 285 | struct drm_i915_private *dev_priv = vgpu->gvt->dev_priv; | ||
| 285 | struct intel_vgpu_port *port = intel_vgpu_port(vgpu, port_num); | 286 | struct intel_vgpu_port *port = intel_vgpu_port(vgpu, port_num); |
| 286 | 287 | ||
| 287 | if (WARN_ON(resolution >= GVT_EDID_NUM)) | 288 | if (WARN_ON(resolution >= GVT_EDID_NUM)) |
| @@ -307,6 +308,7 @@ static int setup_virtual_dp_monitor(struct intel_vgpu *vgpu, int port_num, | |||
| 307 | port->type = type; | 308 | port->type = type; |
| 308 | 309 | ||
| 309 | emulate_monitor_status_change(vgpu); | 310 | emulate_monitor_status_change(vgpu); |
| 311 | vgpu_vreg(vgpu, PIPECONF(PIPE_A)) |= PIPECONF_ENABLE; | ||
| 310 | return 0; | 312 | return 0; |
| 311 | } | 313 | } |
| 312 | 314 | ||
diff --git a/drivers/gpu/drm/i915/gvt/execlist.c b/drivers/gpu/drm/i915/gvt/execlist.c index 4427be18e4a9..940cdaaa3f24 100644 --- a/drivers/gpu/drm/i915/gvt/execlist.c +++ b/drivers/gpu/drm/i915/gvt/execlist.c | |||
| @@ -496,6 +496,12 @@ static int prepare_execlist_workload(struct intel_vgpu_workload *workload) | |||
| 496 | goto err_unpin_mm; | 496 | goto err_unpin_mm; |
| 497 | } | 497 | } |
| 498 | 498 | ||
| 499 | ret = intel_gvt_generate_request(workload); | ||
| 500 | if (ret) { | ||
| 501 | gvt_vgpu_err("fail to generate request\n"); | ||
| 502 | goto err_unpin_mm; | ||
| 503 | } | ||
| 504 | |||
| 499 | ret = prepare_shadow_batch_buffer(workload); | 505 | ret = prepare_shadow_batch_buffer(workload); |
| 500 | if (ret) { | 506 | if (ret) { |
| 501 | gvt_vgpu_err("fail to prepare_shadow_batch_buffer\n"); | 507 | gvt_vgpu_err("fail to prepare_shadow_batch_buffer\n"); |
diff --git a/drivers/gpu/drm/i915/gvt/gtt.c b/drivers/gpu/drm/i915/gvt/gtt.c index 2801d70579d8..8e331142badb 100644 --- a/drivers/gpu/drm/i915/gvt/gtt.c +++ b/drivers/gpu/drm/i915/gvt/gtt.c | |||
| @@ -311,9 +311,9 @@ static inline int gtt_set_entry64(void *pt, | |||
| 311 | 311 | ||
| 312 | #define GTT_HAW 46 | 312 | #define GTT_HAW 46 |
| 313 | 313 | ||
| 314 | #define ADDR_1G_MASK (((1UL << (GTT_HAW - 30 + 1)) - 1) << 30) | 314 | #define ADDR_1G_MASK (((1UL << (GTT_HAW - 30)) - 1) << 30) |
| 315 | #define ADDR_2M_MASK (((1UL << (GTT_HAW - 21 + 1)) - 1) << 21) | 315 | #define ADDR_2M_MASK (((1UL << (GTT_HAW - 21)) - 1) << 21) |
| 316 | #define ADDR_4K_MASK (((1UL << (GTT_HAW - 12 + 1)) - 1) << 12) | 316 | #define ADDR_4K_MASK (((1UL << (GTT_HAW - 12)) - 1) << 12) |
| 317 | 317 | ||
| 318 | static unsigned long gen8_gtt_get_pfn(struct intel_gvt_gtt_entry *e) | 318 | static unsigned long gen8_gtt_get_pfn(struct intel_gvt_gtt_entry *e) |
| 319 | { | 319 | { |
diff --git a/drivers/gpu/drm/i915/gvt/handlers.c b/drivers/gpu/drm/i915/gvt/handlers.c index a5bed2e71b92..1f840f6b81bb 100644 --- a/drivers/gpu/drm/i915/gvt/handlers.c +++ b/drivers/gpu/drm/i915/gvt/handlers.c | |||
| @@ -137,17 +137,26 @@ static int new_mmio_info(struct intel_gvt *gvt, | |||
| 137 | return 0; | 137 | return 0; |
| 138 | } | 138 | } |
| 139 | 139 | ||
| 140 | static int render_mmio_to_ring_id(struct intel_gvt *gvt, unsigned int reg) | 140 | /** |
| 141 | * intel_gvt_render_mmio_to_ring_id - convert a mmio offset into ring id | ||
| 142 | * @gvt: a GVT device | ||
| 143 | * @offset: register offset | ||
| 144 | * | ||
| 145 | * Returns: | ||
| 146 | * Ring ID on success, negative error code if failed. | ||
| 147 | */ | ||
| 148 | int intel_gvt_render_mmio_to_ring_id(struct intel_gvt *gvt, | ||
| 149 | unsigned int offset) | ||
| 141 | { | 150 | { |
| 142 | enum intel_engine_id id; | 151 | enum intel_engine_id id; |
| 143 | struct intel_engine_cs *engine; | 152 | struct intel_engine_cs *engine; |
| 144 | 153 | ||
| 145 | reg &= ~GENMASK(11, 0); | 154 | offset &= ~GENMASK(11, 0); |
| 146 | for_each_engine(engine, gvt->dev_priv, id) { | 155 | for_each_engine(engine, gvt->dev_priv, id) { |
| 147 | if (engine->mmio_base == reg) | 156 | if (engine->mmio_base == offset) |
| 148 | return id; | 157 | return id; |
| 149 | } | 158 | } |
| 150 | return -1; | 159 | return -ENODEV; |
| 151 | } | 160 | } |
| 152 | 161 | ||
| 153 | #define offset_to_fence_num(offset) \ | 162 | #define offset_to_fence_num(offset) \ |
| @@ -1381,40 +1390,6 @@ static int skl_power_well_ctl_write(struct intel_vgpu *vgpu, | |||
| 1381 | return intel_vgpu_default_mmio_write(vgpu, offset, &v, bytes); | 1390 | return intel_vgpu_default_mmio_write(vgpu, offset, &v, bytes); |
| 1382 | } | 1391 | } |
| 1383 | 1392 | ||
| 1384 | static int skl_misc_ctl_write(struct intel_vgpu *vgpu, unsigned int offset, | ||
| 1385 | void *p_data, unsigned int bytes) | ||
| 1386 | { | ||
| 1387 | struct drm_i915_private *dev_priv = vgpu->gvt->dev_priv; | ||
| 1388 | u32 v = *(u32 *)p_data; | ||
| 1389 | |||
| 1390 | if (!IS_SKYLAKE(dev_priv) && !IS_KABYLAKE(dev_priv)) | ||
| 1391 | return intel_vgpu_default_mmio_write(vgpu, | ||
| 1392 | offset, p_data, bytes); | ||
| 1393 | |||
| 1394 | switch (offset) { | ||
| 1395 | case 0x4ddc: | ||
| 1396 | /* bypass WaCompressedResourceSamplerPbeMediaNewHashMode */ | ||
| 1397 | vgpu_vreg(vgpu, offset) = v & ~(1 << 31); | ||
| 1398 | break; | ||
| 1399 | case 0x42080: | ||
| 1400 | /* bypass WaCompressedResourceDisplayNewHashMode */ | ||
| 1401 | vgpu_vreg(vgpu, offset) = v & ~(1 << 15); | ||
| 1402 | break; | ||
| 1403 | case 0xe194: | ||
| 1404 | /* bypass WaCompressedResourceSamplerPbeMediaNewHashMode */ | ||
| 1405 | vgpu_vreg(vgpu, offset) = v & ~(1 << 8); | ||
| 1406 | break; | ||
| 1407 | case 0x7014: | ||
| 1408 | /* bypass WaCompressedResourceSamplerPbeMediaNewHashMode */ | ||
| 1409 | vgpu_vreg(vgpu, offset) = v & ~(1 << 13); | ||
| 1410 | break; | ||
| 1411 | default: | ||
| 1412 | return -EINVAL; | ||
| 1413 | } | ||
| 1414 | |||
| 1415 | return 0; | ||
| 1416 | } | ||
| 1417 | |||
| 1418 | static int skl_lcpll_write(struct intel_vgpu *vgpu, unsigned int offset, | 1393 | static int skl_lcpll_write(struct intel_vgpu *vgpu, unsigned int offset, |
| 1419 | void *p_data, unsigned int bytes) | 1394 | void *p_data, unsigned int bytes) |
| 1420 | { | 1395 | { |
| @@ -1432,18 +1407,36 @@ static int skl_lcpll_write(struct intel_vgpu *vgpu, unsigned int offset, | |||
| 1432 | static int mmio_read_from_hw(struct intel_vgpu *vgpu, | 1407 | static int mmio_read_from_hw(struct intel_vgpu *vgpu, |
| 1433 | unsigned int offset, void *p_data, unsigned int bytes) | 1408 | unsigned int offset, void *p_data, unsigned int bytes) |
| 1434 | { | 1409 | { |
| 1435 | struct drm_i915_private *dev_priv = vgpu->gvt->dev_priv; | 1410 | struct intel_gvt *gvt = vgpu->gvt; |
| 1411 | struct drm_i915_private *dev_priv = gvt->dev_priv; | ||
| 1412 | int ring_id; | ||
| 1413 | u32 ring_base; | ||
| 1414 | |||
| 1415 | ring_id = intel_gvt_render_mmio_to_ring_id(gvt, offset); | ||
| 1416 | /** | ||
| 1417 | * Read HW reg in following case | ||
| 1418 | * a. the offset isn't a ring mmio | ||
| 1419 | * b. the offset's ring is running on hw. | ||
| 1420 | * c. the offset is ring time stamp mmio | ||
| 1421 | */ | ||
| 1422 | if (ring_id >= 0) | ||
| 1423 | ring_base = dev_priv->engine[ring_id]->mmio_base; | ||
| 1424 | |||
| 1425 | if (ring_id < 0 || vgpu == gvt->scheduler.engine_owner[ring_id] || | ||
| 1426 | offset == i915_mmio_reg_offset(RING_TIMESTAMP(ring_base)) || | ||
| 1427 | offset == i915_mmio_reg_offset(RING_TIMESTAMP_UDW(ring_base))) { | ||
| 1428 | mmio_hw_access_pre(dev_priv); | ||
| 1429 | vgpu_vreg(vgpu, offset) = I915_READ(_MMIO(offset)); | ||
| 1430 | mmio_hw_access_post(dev_priv); | ||
| 1431 | } | ||
| 1436 | 1432 | ||
| 1437 | mmio_hw_access_pre(dev_priv); | ||
| 1438 | vgpu_vreg(vgpu, offset) = I915_READ(_MMIO(offset)); | ||
| 1439 | mmio_hw_access_post(dev_priv); | ||
| 1440 | return intel_vgpu_default_mmio_read(vgpu, offset, p_data, bytes); | 1433 | return intel_vgpu_default_mmio_read(vgpu, offset, p_data, bytes); |
| 1441 | } | 1434 | } |
| 1442 | 1435 | ||
| 1443 | static int elsp_mmio_write(struct intel_vgpu *vgpu, unsigned int offset, | 1436 | static int elsp_mmio_write(struct intel_vgpu *vgpu, unsigned int offset, |
| 1444 | void *p_data, unsigned int bytes) | 1437 | void *p_data, unsigned int bytes) |
| 1445 | { | 1438 | { |
| 1446 | int ring_id = render_mmio_to_ring_id(vgpu->gvt, offset); | 1439 | int ring_id = intel_gvt_render_mmio_to_ring_id(vgpu->gvt, offset); |
| 1447 | struct intel_vgpu_execlist *execlist; | 1440 | struct intel_vgpu_execlist *execlist; |
| 1448 | u32 data = *(u32 *)p_data; | 1441 | u32 data = *(u32 *)p_data; |
| 1449 | int ret = 0; | 1442 | int ret = 0; |
| @@ -1470,7 +1463,7 @@ static int ring_mode_mmio_write(struct intel_vgpu *vgpu, unsigned int offset, | |||
| 1470 | void *p_data, unsigned int bytes) | 1463 | void *p_data, unsigned int bytes) |
| 1471 | { | 1464 | { |
| 1472 | u32 data = *(u32 *)p_data; | 1465 | u32 data = *(u32 *)p_data; |
| 1473 | int ring_id = render_mmio_to_ring_id(vgpu->gvt, offset); | 1466 | int ring_id = intel_gvt_render_mmio_to_ring_id(vgpu->gvt, offset); |
| 1474 | bool enable_execlist; | 1467 | bool enable_execlist; |
| 1475 | 1468 | ||
| 1476 | write_vreg(vgpu, offset, p_data, bytes); | 1469 | write_vreg(vgpu, offset, p_data, bytes); |
| @@ -1671,8 +1664,8 @@ static int init_generic_mmio_info(struct intel_gvt *gvt) | |||
| 1671 | MMIO_DFH(GAM_ECOCHK, D_ALL, F_CMD_ACCESS, NULL, NULL); | 1664 | MMIO_DFH(GAM_ECOCHK, D_ALL, F_CMD_ACCESS, NULL, NULL); |
| 1672 | MMIO_DFH(GEN7_COMMON_SLICE_CHICKEN1, D_ALL, F_MODE_MASK | F_CMD_ACCESS, | 1665 | MMIO_DFH(GEN7_COMMON_SLICE_CHICKEN1, D_ALL, F_MODE_MASK | F_CMD_ACCESS, |
| 1673 | NULL, NULL); | 1666 | NULL, NULL); |
| 1674 | MMIO_DFH(COMMON_SLICE_CHICKEN2, D_ALL, F_MODE_MASK | F_CMD_ACCESS, NULL, | 1667 | MMIO_DFH(COMMON_SLICE_CHICKEN2, D_ALL, F_MODE_MASK | F_CMD_ACCESS, |
| 1675 | skl_misc_ctl_write); | 1668 | NULL, NULL); |
| 1676 | MMIO_DFH(0x9030, D_ALL, F_CMD_ACCESS, NULL, NULL); | 1669 | MMIO_DFH(0x9030, D_ALL, F_CMD_ACCESS, NULL, NULL); |
| 1677 | MMIO_DFH(0x20a0, D_ALL, F_CMD_ACCESS, NULL, NULL); | 1670 | MMIO_DFH(0x20a0, D_ALL, F_CMD_ACCESS, NULL, NULL); |
| 1678 | MMIO_DFH(0x2420, D_ALL, F_CMD_ACCESS, NULL, NULL); | 1671 | MMIO_DFH(0x2420, D_ALL, F_CMD_ACCESS, NULL, NULL); |
| @@ -2564,8 +2557,7 @@ static int init_broadwell_mmio_info(struct intel_gvt *gvt) | |||
| 2564 | MMIO_D(0x6e570, D_BDW_PLUS); | 2557 | MMIO_D(0x6e570, D_BDW_PLUS); |
| 2565 | MMIO_D(0x65f10, D_BDW_PLUS); | 2558 | MMIO_D(0x65f10, D_BDW_PLUS); |
| 2566 | 2559 | ||
| 2567 | MMIO_DFH(0xe194, D_BDW_PLUS, F_MODE_MASK | F_CMD_ACCESS, NULL, | 2560 | MMIO_DFH(0xe194, D_BDW_PLUS, F_MODE_MASK | F_CMD_ACCESS, NULL, NULL); |
| 2568 | skl_misc_ctl_write); | ||
| 2569 | MMIO_DFH(0xe188, D_BDW_PLUS, F_MODE_MASK | F_CMD_ACCESS, NULL, NULL); | 2561 | MMIO_DFH(0xe188, D_BDW_PLUS, F_MODE_MASK | F_CMD_ACCESS, NULL, NULL); |
| 2570 | MMIO_DFH(HALF_SLICE_CHICKEN2, D_BDW_PLUS, F_MODE_MASK | F_CMD_ACCESS, NULL, NULL); | 2562 | MMIO_DFH(HALF_SLICE_CHICKEN2, D_BDW_PLUS, F_MODE_MASK | F_CMD_ACCESS, NULL, NULL); |
| 2571 | MMIO_DFH(0x2580, D_BDW_PLUS, F_MODE_MASK | F_CMD_ACCESS, NULL, NULL); | 2563 | MMIO_DFH(0x2580, D_BDW_PLUS, F_MODE_MASK | F_CMD_ACCESS, NULL, NULL); |
| @@ -2615,8 +2607,8 @@ static int init_skl_mmio_info(struct intel_gvt *gvt) | |||
| 2615 | MMIO_D(GEN9_MEDIA_PG_IDLE_HYSTERESIS, D_SKL_PLUS); | 2607 | MMIO_D(GEN9_MEDIA_PG_IDLE_HYSTERESIS, D_SKL_PLUS); |
| 2616 | MMIO_D(GEN9_RENDER_PG_IDLE_HYSTERESIS, D_SKL_PLUS); | 2608 | MMIO_D(GEN9_RENDER_PG_IDLE_HYSTERESIS, D_SKL_PLUS); |
| 2617 | MMIO_DFH(GEN9_GAMT_ECO_REG_RW_IA, D_SKL_PLUS, F_CMD_ACCESS, NULL, NULL); | 2609 | MMIO_DFH(GEN9_GAMT_ECO_REG_RW_IA, D_SKL_PLUS, F_CMD_ACCESS, NULL, NULL); |
| 2618 | MMIO_DH(0x4ddc, D_SKL_PLUS, NULL, skl_misc_ctl_write); | 2610 | MMIO_DH(0x4ddc, D_SKL_PLUS, NULL, NULL); |
| 2619 | MMIO_DH(0x42080, D_SKL_PLUS, NULL, skl_misc_ctl_write); | 2611 | MMIO_DH(0x42080, D_SKL_PLUS, NULL, NULL); |
| 2620 | MMIO_D(0x45504, D_SKL_PLUS); | 2612 | MMIO_D(0x45504, D_SKL_PLUS); |
| 2621 | MMIO_D(0x45520, D_SKL_PLUS); | 2613 | MMIO_D(0x45520, D_SKL_PLUS); |
| 2622 | MMIO_D(0x46000, D_SKL_PLUS); | 2614 | MMIO_D(0x46000, D_SKL_PLUS); |
diff --git a/drivers/gpu/drm/i915/gvt/mmio.h b/drivers/gpu/drm/i915/gvt/mmio.h index 32cd64ddad26..dbc04ad2c7a1 100644 --- a/drivers/gpu/drm/i915/gvt/mmio.h +++ b/drivers/gpu/drm/i915/gvt/mmio.h | |||
| @@ -65,6 +65,8 @@ struct intel_gvt_mmio_info { | |||
| 65 | struct hlist_node node; | 65 | struct hlist_node node; |
| 66 | }; | 66 | }; |
| 67 | 67 | ||
| 68 | int intel_gvt_render_mmio_to_ring_id(struct intel_gvt *gvt, | ||
| 69 | unsigned int reg); | ||
| 68 | unsigned long intel_gvt_get_device_type(struct intel_gvt *gvt); | 70 | unsigned long intel_gvt_get_device_type(struct intel_gvt *gvt); |
| 69 | bool intel_gvt_match_device(struct intel_gvt *gvt, unsigned long device); | 71 | bool intel_gvt_match_device(struct intel_gvt *gvt, unsigned long device); |
| 70 | 72 | ||
diff --git a/drivers/gpu/drm/i915/gvt/scheduler.c b/drivers/gpu/drm/i915/gvt/scheduler.c index f6ded475bb2c..69f8f0d155b9 100644 --- a/drivers/gpu/drm/i915/gvt/scheduler.c +++ b/drivers/gpu/drm/i915/gvt/scheduler.c | |||
| @@ -131,6 +131,20 @@ static inline bool is_gvt_request(struct drm_i915_gem_request *req) | |||
| 131 | return i915_gem_context_force_single_submission(req->ctx); | 131 | return i915_gem_context_force_single_submission(req->ctx); |
| 132 | } | 132 | } |
| 133 | 133 | ||
| 134 | static void save_ring_hw_state(struct intel_vgpu *vgpu, int ring_id) | ||
| 135 | { | ||
| 136 | struct drm_i915_private *dev_priv = vgpu->gvt->dev_priv; | ||
| 137 | u32 ring_base = dev_priv->engine[ring_id]->mmio_base; | ||
| 138 | i915_reg_t reg; | ||
| 139 | |||
| 140 | reg = RING_INSTDONE(ring_base); | ||
| 141 | vgpu_vreg(vgpu, i915_mmio_reg_offset(reg)) = I915_READ_FW(reg); | ||
| 142 | reg = RING_ACTHD(ring_base); | ||
| 143 | vgpu_vreg(vgpu, i915_mmio_reg_offset(reg)) = I915_READ_FW(reg); | ||
| 144 | reg = RING_ACTHD_UDW(ring_base); | ||
| 145 | vgpu_vreg(vgpu, i915_mmio_reg_offset(reg)) = I915_READ_FW(reg); | ||
| 146 | } | ||
| 147 | |||
| 134 | static int shadow_context_status_change(struct notifier_block *nb, | 148 | static int shadow_context_status_change(struct notifier_block *nb, |
| 135 | unsigned long action, void *data) | 149 | unsigned long action, void *data) |
| 136 | { | 150 | { |
| @@ -140,9 +154,10 @@ static int shadow_context_status_change(struct notifier_block *nb, | |||
| 140 | struct intel_gvt_workload_scheduler *scheduler = &gvt->scheduler; | 154 | struct intel_gvt_workload_scheduler *scheduler = &gvt->scheduler; |
| 141 | enum intel_engine_id ring_id = req->engine->id; | 155 | enum intel_engine_id ring_id = req->engine->id; |
| 142 | struct intel_vgpu_workload *workload; | 156 | struct intel_vgpu_workload *workload; |
| 157 | unsigned long flags; | ||
| 143 | 158 | ||
| 144 | if (!is_gvt_request(req)) { | 159 | if (!is_gvt_request(req)) { |
| 145 | spin_lock_bh(&scheduler->mmio_context_lock); | 160 | spin_lock_irqsave(&scheduler->mmio_context_lock, flags); |
| 146 | if (action == INTEL_CONTEXT_SCHEDULE_IN && | 161 | if (action == INTEL_CONTEXT_SCHEDULE_IN && |
| 147 | scheduler->engine_owner[ring_id]) { | 162 | scheduler->engine_owner[ring_id]) { |
| 148 | /* Switch ring from vGPU to host. */ | 163 | /* Switch ring from vGPU to host. */ |
| @@ -150,7 +165,7 @@ static int shadow_context_status_change(struct notifier_block *nb, | |||
| 150 | NULL, ring_id); | 165 | NULL, ring_id); |
| 151 | scheduler->engine_owner[ring_id] = NULL; | 166 | scheduler->engine_owner[ring_id] = NULL; |
| 152 | } | 167 | } |
| 153 | spin_unlock_bh(&scheduler->mmio_context_lock); | 168 | spin_unlock_irqrestore(&scheduler->mmio_context_lock, flags); |
| 154 | 169 | ||
| 155 | return NOTIFY_OK; | 170 | return NOTIFY_OK; |
| 156 | } | 171 | } |
| @@ -161,7 +176,7 @@ static int shadow_context_status_change(struct notifier_block *nb, | |||
| 161 | 176 | ||
| 162 | switch (action) { | 177 | switch (action) { |
| 163 | case INTEL_CONTEXT_SCHEDULE_IN: | 178 | case INTEL_CONTEXT_SCHEDULE_IN: |
| 164 | spin_lock_bh(&scheduler->mmio_context_lock); | 179 | spin_lock_irqsave(&scheduler->mmio_context_lock, flags); |
| 165 | if (workload->vgpu != scheduler->engine_owner[ring_id]) { | 180 | if (workload->vgpu != scheduler->engine_owner[ring_id]) { |
| 166 | /* Switch ring from host to vGPU or vGPU to vGPU. */ | 181 | /* Switch ring from host to vGPU or vGPU to vGPU. */ |
| 167 | intel_gvt_switch_mmio(scheduler->engine_owner[ring_id], | 182 | intel_gvt_switch_mmio(scheduler->engine_owner[ring_id], |
| @@ -170,13 +185,16 @@ static int shadow_context_status_change(struct notifier_block *nb, | |||
| 170 | } else | 185 | } else |
| 171 | gvt_dbg_sched("skip ring %d mmio switch for vgpu%d\n", | 186 | gvt_dbg_sched("skip ring %d mmio switch for vgpu%d\n", |
| 172 | ring_id, workload->vgpu->id); | 187 | ring_id, workload->vgpu->id); |
| 173 | spin_unlock_bh(&scheduler->mmio_context_lock); | 188 | spin_unlock_irqrestore(&scheduler->mmio_context_lock, flags); |
| 174 | atomic_set(&workload->shadow_ctx_active, 1); | 189 | atomic_set(&workload->shadow_ctx_active, 1); |
| 175 | break; | 190 | break; |
| 176 | case INTEL_CONTEXT_SCHEDULE_OUT: | 191 | case INTEL_CONTEXT_SCHEDULE_OUT: |
| 177 | case INTEL_CONTEXT_SCHEDULE_PREEMPTED: | 192 | save_ring_hw_state(workload->vgpu, ring_id); |
| 178 | atomic_set(&workload->shadow_ctx_active, 0); | 193 | atomic_set(&workload->shadow_ctx_active, 0); |
| 179 | break; | 194 | break; |
| 195 | case INTEL_CONTEXT_SCHEDULE_PREEMPTED: | ||
| 196 | save_ring_hw_state(workload->vgpu, ring_id); | ||
| 197 | break; | ||
| 180 | default: | 198 | default: |
| 181 | WARN_ON(1); | 199 | WARN_ON(1); |
| 182 | return NOTIFY_OK; | 200 | return NOTIFY_OK; |
| @@ -253,7 +271,6 @@ int intel_gvt_scan_and_shadow_workload(struct intel_vgpu_workload *workload) | |||
| 253 | struct i915_gem_context *shadow_ctx = workload->vgpu->shadow_ctx; | 271 | struct i915_gem_context *shadow_ctx = workload->vgpu->shadow_ctx; |
| 254 | struct drm_i915_private *dev_priv = workload->vgpu->gvt->dev_priv; | 272 | struct drm_i915_private *dev_priv = workload->vgpu->gvt->dev_priv; |
| 255 | struct intel_engine_cs *engine = dev_priv->engine[ring_id]; | 273 | struct intel_engine_cs *engine = dev_priv->engine[ring_id]; |
| 256 | struct drm_i915_gem_request *rq; | ||
| 257 | struct intel_vgpu *vgpu = workload->vgpu; | 274 | struct intel_vgpu *vgpu = workload->vgpu; |
| 258 | struct intel_ring *ring; | 275 | struct intel_ring *ring; |
| 259 | int ret; | 276 | int ret; |
| @@ -299,6 +316,26 @@ int intel_gvt_scan_and_shadow_workload(struct intel_vgpu_workload *workload) | |||
| 299 | ret = populate_shadow_context(workload); | 316 | ret = populate_shadow_context(workload); |
| 300 | if (ret) | 317 | if (ret) |
| 301 | goto err_unpin; | 318 | goto err_unpin; |
| 319 | workload->shadowed = true; | ||
| 320 | return 0; | ||
| 321 | |||
| 322 | err_unpin: | ||
| 323 | engine->context_unpin(engine, shadow_ctx); | ||
| 324 | err_shadow: | ||
| 325 | release_shadow_wa_ctx(&workload->wa_ctx); | ||
| 326 | err_scan: | ||
| 327 | return ret; | ||
| 328 | } | ||
| 329 | |||
| 330 | int intel_gvt_generate_request(struct intel_vgpu_workload *workload) | ||
| 331 | { | ||
| 332 | int ring_id = workload->ring_id; | ||
| 333 | struct drm_i915_private *dev_priv = workload->vgpu->gvt->dev_priv; | ||
| 334 | struct intel_engine_cs *engine = dev_priv->engine[ring_id]; | ||
| 335 | struct drm_i915_gem_request *rq; | ||
| 336 | struct intel_vgpu *vgpu = workload->vgpu; | ||
| 337 | struct i915_gem_context *shadow_ctx = vgpu->shadow_ctx; | ||
| 338 | int ret; | ||
| 302 | 339 | ||
| 303 | rq = i915_gem_request_alloc(dev_priv->engine[ring_id], shadow_ctx); | 340 | rq = i915_gem_request_alloc(dev_priv->engine[ring_id], shadow_ctx); |
| 304 | if (IS_ERR(rq)) { | 341 | if (IS_ERR(rq)) { |
| @@ -313,14 +350,11 @@ int intel_gvt_scan_and_shadow_workload(struct intel_vgpu_workload *workload) | |||
| 313 | ret = copy_workload_to_ring_buffer(workload); | 350 | ret = copy_workload_to_ring_buffer(workload); |
| 314 | if (ret) | 351 | if (ret) |
| 315 | goto err_unpin; | 352 | goto err_unpin; |
| 316 | workload->shadowed = true; | ||
| 317 | return 0; | 353 | return 0; |
| 318 | 354 | ||
| 319 | err_unpin: | 355 | err_unpin: |
| 320 | engine->context_unpin(engine, shadow_ctx); | 356 | engine->context_unpin(engine, shadow_ctx); |
| 321 | err_shadow: | ||
| 322 | release_shadow_wa_ctx(&workload->wa_ctx); | 357 | release_shadow_wa_ctx(&workload->wa_ctx); |
| 323 | err_scan: | ||
| 324 | return ret; | 358 | return ret; |
| 325 | } | 359 | } |
| 326 | 360 | ||
| @@ -723,6 +757,9 @@ int intel_vgpu_init_gvt_context(struct intel_vgpu *vgpu) | |||
| 723 | if (IS_ERR(vgpu->shadow_ctx)) | 757 | if (IS_ERR(vgpu->shadow_ctx)) |
| 724 | return PTR_ERR(vgpu->shadow_ctx); | 758 | return PTR_ERR(vgpu->shadow_ctx); |
| 725 | 759 | ||
| 760 | if (INTEL_INFO(vgpu->gvt->dev_priv)->has_logical_ring_preemption) | ||
| 761 | vgpu->shadow_ctx->priority = INT_MAX; | ||
| 762 | |||
| 726 | vgpu->shadow_ctx->engine[RCS].initialised = true; | 763 | vgpu->shadow_ctx->engine[RCS].initialised = true; |
| 727 | 764 | ||
| 728 | bitmap_zero(vgpu->shadow_ctx_desc_updated, I915_NUM_ENGINES); | 765 | bitmap_zero(vgpu->shadow_ctx_desc_updated, I915_NUM_ENGINES); |
diff --git a/drivers/gpu/drm/i915/gvt/scheduler.h b/drivers/gpu/drm/i915/gvt/scheduler.h index 2d694f6c0907..b9f872204d7e 100644 --- a/drivers/gpu/drm/i915/gvt/scheduler.h +++ b/drivers/gpu/drm/i915/gvt/scheduler.h | |||
| @@ -142,4 +142,7 @@ int intel_vgpu_init_gvt_context(struct intel_vgpu *vgpu); | |||
| 142 | void intel_vgpu_clean_gvt_context(struct intel_vgpu *vgpu); | 142 | void intel_vgpu_clean_gvt_context(struct intel_vgpu *vgpu); |
| 143 | 143 | ||
| 144 | void release_shadow_wa_ctx(struct intel_shadow_wa_ctx *wa_ctx); | 144 | void release_shadow_wa_ctx(struct intel_shadow_wa_ctx *wa_ctx); |
| 145 | |||
| 146 | int intel_gvt_generate_request(struct intel_vgpu_workload *workload); | ||
| 147 | |||
| 145 | #endif | 148 | #endif |
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c index 960d3d8b95b8..2cf10d17acfb 100644 --- a/drivers/gpu/drm/i915/i915_drv.c +++ b/drivers/gpu/drm/i915/i915_drv.c | |||
| @@ -1714,6 +1714,7 @@ static int i915_drm_resume(struct drm_device *dev) | |||
| 1714 | intel_guc_resume(dev_priv); | 1714 | intel_guc_resume(dev_priv); |
| 1715 | 1715 | ||
| 1716 | intel_modeset_init_hw(dev); | 1716 | intel_modeset_init_hw(dev); |
| 1717 | intel_init_clock_gating(dev_priv); | ||
| 1717 | 1718 | ||
| 1718 | spin_lock_irq(&dev_priv->irq_lock); | 1719 | spin_lock_irq(&dev_priv->irq_lock); |
| 1719 | if (dev_priv->display.hpd_irq_setup) | 1720 | if (dev_priv->display.hpd_irq_setup) |
| @@ -2618,6 +2619,8 @@ static int intel_runtime_resume(struct device *kdev) | |||
| 2618 | ret = vlv_resume_prepare(dev_priv, true); | 2619 | ret = vlv_resume_prepare(dev_priv, true); |
| 2619 | } | 2620 | } |
| 2620 | 2621 | ||
| 2622 | intel_uncore_runtime_resume(dev_priv); | ||
| 2623 | |||
| 2621 | /* | 2624 | /* |
| 2622 | * No point of rolling back things in case of an error, as the best | 2625 | * No point of rolling back things in case of an error, as the best |
| 2623 | * we can do is to hope that things will still work (and disable RPM). | 2626 | * we can do is to hope that things will still work (and disable RPM). |
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index 3a140eedfc83..ad4050f7ab3b 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c | |||
| @@ -4712,17 +4712,19 @@ int i915_gem_suspend(struct drm_i915_private *dev_priv) | |||
| 4712 | * state. Fortunately, the kernel_context is disposable and we do | 4712 | * state. Fortunately, the kernel_context is disposable and we do |
| 4713 | * not rely on its state. | 4713 | * not rely on its state. |
| 4714 | */ | 4714 | */ |
| 4715 | ret = i915_gem_switch_to_kernel_context(dev_priv); | 4715 | if (!i915_terminally_wedged(&dev_priv->gpu_error)) { |
| 4716 | if (ret) | 4716 | ret = i915_gem_switch_to_kernel_context(dev_priv); |
| 4717 | goto err_unlock; | 4717 | if (ret) |
| 4718 | goto err_unlock; | ||
| 4718 | 4719 | ||
| 4719 | ret = i915_gem_wait_for_idle(dev_priv, | 4720 | ret = i915_gem_wait_for_idle(dev_priv, |
| 4720 | I915_WAIT_INTERRUPTIBLE | | 4721 | I915_WAIT_INTERRUPTIBLE | |
| 4721 | I915_WAIT_LOCKED); | 4722 | I915_WAIT_LOCKED); |
| 4722 | if (ret && ret != -EIO) | 4723 | if (ret && ret != -EIO) |
| 4723 | goto err_unlock; | 4724 | goto err_unlock; |
| 4724 | 4725 | ||
| 4725 | assert_kernel_context_is_current(dev_priv); | 4726 | assert_kernel_context_is_current(dev_priv); |
| 4727 | } | ||
| 4726 | i915_gem_contexts_lost(dev_priv); | 4728 | i915_gem_contexts_lost(dev_priv); |
| 4727 | mutex_unlock(&dev->struct_mutex); | 4729 | mutex_unlock(&dev->struct_mutex); |
| 4728 | 4730 | ||
| @@ -4946,8 +4948,6 @@ int i915_gem_init(struct drm_i915_private *dev_priv) | |||
| 4946 | { | 4948 | { |
| 4947 | int ret; | 4949 | int ret; |
| 4948 | 4950 | ||
| 4949 | mutex_lock(&dev_priv->drm.struct_mutex); | ||
| 4950 | |||
| 4951 | /* | 4951 | /* |
| 4952 | * We need to fallback to 4K pages since gvt gtt handling doesn't | 4952 | * We need to fallback to 4K pages since gvt gtt handling doesn't |
| 4953 | * support huge page entries - we will need to check either hypervisor | 4953 | * support huge page entries - we will need to check either hypervisor |
| @@ -4967,18 +4967,19 @@ int i915_gem_init(struct drm_i915_private *dev_priv) | |||
| 4967 | dev_priv->gt.cleanup_engine = intel_logical_ring_cleanup; | 4967 | dev_priv->gt.cleanup_engine = intel_logical_ring_cleanup; |
| 4968 | } | 4968 | } |
| 4969 | 4969 | ||
| 4970 | ret = i915_gem_init_userptr(dev_priv); | ||
| 4971 | if (ret) | ||
| 4972 | return ret; | ||
| 4973 | |||
| 4970 | /* This is just a security blanket to placate dragons. | 4974 | /* This is just a security blanket to placate dragons. |
| 4971 | * On some systems, we very sporadically observe that the first TLBs | 4975 | * On some systems, we very sporadically observe that the first TLBs |
| 4972 | * used by the CS may be stale, despite us poking the TLB reset. If | 4976 | * used by the CS may be stale, despite us poking the TLB reset. If |
| 4973 | * we hold the forcewake during initialisation these problems | 4977 | * we hold the forcewake during initialisation these problems |
| 4974 | * just magically go away. | 4978 | * just magically go away. |
| 4975 | */ | 4979 | */ |
| 4980 | mutex_lock(&dev_priv->drm.struct_mutex); | ||
| 4976 | intel_uncore_forcewake_get(dev_priv, FORCEWAKE_ALL); | 4981 | intel_uncore_forcewake_get(dev_priv, FORCEWAKE_ALL); |
| 4977 | 4982 | ||
| 4978 | ret = i915_gem_init_userptr(dev_priv); | ||
| 4979 | if (ret) | ||
| 4980 | goto out_unlock; | ||
| 4981 | |||
| 4982 | ret = i915_gem_init_ggtt(dev_priv); | 4983 | ret = i915_gem_init_ggtt(dev_priv); |
| 4983 | if (ret) | 4984 | if (ret) |
| 4984 | goto out_unlock; | 4985 | goto out_unlock; |
diff --git a/drivers/gpu/drm/i915/i915_gem_userptr.c b/drivers/gpu/drm/i915/i915_gem_userptr.c index 135fc750a837..382a77a1097e 100644 --- a/drivers/gpu/drm/i915/i915_gem_userptr.c +++ b/drivers/gpu/drm/i915/i915_gem_userptr.c | |||
| @@ -172,7 +172,9 @@ i915_mmu_notifier_create(struct mm_struct *mm) | |||
| 172 | spin_lock_init(&mn->lock); | 172 | spin_lock_init(&mn->lock); |
| 173 | mn->mn.ops = &i915_gem_userptr_notifier; | 173 | mn->mn.ops = &i915_gem_userptr_notifier; |
| 174 | mn->objects = RB_ROOT_CACHED; | 174 | mn->objects = RB_ROOT_CACHED; |
| 175 | mn->wq = alloc_workqueue("i915-userptr-release", WQ_UNBOUND, 0); | 175 | mn->wq = alloc_workqueue("i915-userptr-release", |
| 176 | WQ_UNBOUND | WQ_MEM_RECLAIM, | ||
| 177 | 0); | ||
| 176 | if (mn->wq == NULL) { | 178 | if (mn->wq == NULL) { |
| 177 | kfree(mn); | 179 | kfree(mn); |
| 178 | return ERR_PTR(-ENOMEM); | 180 | return ERR_PTR(-ENOMEM); |
| @@ -827,7 +829,7 @@ int i915_gem_init_userptr(struct drm_i915_private *dev_priv) | |||
| 827 | 829 | ||
| 828 | dev_priv->mm.userptr_wq = | 830 | dev_priv->mm.userptr_wq = |
| 829 | alloc_workqueue("i915-userptr-acquire", | 831 | alloc_workqueue("i915-userptr-acquire", |
| 830 | WQ_HIGHPRI | WQ_MEM_RECLAIM, | 832 | WQ_HIGHPRI | WQ_UNBOUND, |
| 831 | 0); | 833 | 0); |
| 832 | if (!dev_priv->mm.userptr_wq) | 834 | if (!dev_priv->mm.userptr_wq) |
| 833 | return -ENOMEM; | 835 | return -ENOMEM; |
diff --git a/drivers/gpu/drm/i915/i915_gemfs.c b/drivers/gpu/drm/i915/i915_gemfs.c index e2993857df37..888b7d3f04c3 100644 --- a/drivers/gpu/drm/i915/i915_gemfs.c +++ b/drivers/gpu/drm/i915/i915_gemfs.c | |||
| @@ -52,7 +52,8 @@ int i915_gemfs_init(struct drm_i915_private *i915) | |||
| 52 | 52 | ||
| 53 | if (has_transparent_hugepage()) { | 53 | if (has_transparent_hugepage()) { |
| 54 | struct super_block *sb = gemfs->mnt_sb; | 54 | struct super_block *sb = gemfs->mnt_sb; |
| 55 | char options[] = "huge=within_size"; | 55 | /* FIXME: Disabled until we get W/A for read BW issue. */ |
| 56 | char options[] = "huge=never"; | ||
| 56 | int flags = 0; | 57 | int flags = 0; |
| 57 | int err; | 58 | int err; |
| 58 | 59 | ||
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h index 68a58cce6ab1..3866c49bc390 100644 --- a/drivers/gpu/drm/i915/i915_reg.h +++ b/drivers/gpu/drm/i915/i915_reg.h | |||
| @@ -2951,9 +2951,6 @@ enum i915_power_well_id { | |||
| 2951 | #define ILK_DPFC_CHICKEN _MMIO(0x43224) | 2951 | #define ILK_DPFC_CHICKEN _MMIO(0x43224) |
| 2952 | #define ILK_DPFC_DISABLE_DUMMY0 (1<<8) | 2952 | #define ILK_DPFC_DISABLE_DUMMY0 (1<<8) |
| 2953 | #define ILK_DPFC_NUKE_ON_ANY_MODIFICATION (1<<23) | 2953 | #define ILK_DPFC_NUKE_ON_ANY_MODIFICATION (1<<23) |
| 2954 | #define GLK_SKIP_SEG_EN (1<<12) | ||
| 2955 | #define GLK_SKIP_SEG_COUNT_MASK (3<<10) | ||
| 2956 | #define GLK_SKIP_SEG_COUNT(x) ((x)<<10) | ||
| 2957 | #define ILK_FBC_RT_BASE _MMIO(0x2128) | 2954 | #define ILK_FBC_RT_BASE _MMIO(0x2128) |
| 2958 | #define ILK_FBC_RT_VALID (1<<0) | 2955 | #define ILK_FBC_RT_VALID (1<<0) |
| 2959 | #define SNB_FBC_FRONT_BUFFER (1<<1) | 2956 | #define SNB_FBC_FRONT_BUFFER (1<<1) |
diff --git a/drivers/gpu/drm/i915/intel_breadcrumbs.c b/drivers/gpu/drm/i915/intel_breadcrumbs.c index 48e1ba01ccf8..5f8b9f1f40f1 100644 --- a/drivers/gpu/drm/i915/intel_breadcrumbs.c +++ b/drivers/gpu/drm/i915/intel_breadcrumbs.c | |||
| @@ -517,6 +517,7 @@ static void __intel_engine_remove_wait(struct intel_engine_cs *engine, | |||
| 517 | 517 | ||
| 518 | GEM_BUG_ON(RB_EMPTY_NODE(&wait->node)); | 518 | GEM_BUG_ON(RB_EMPTY_NODE(&wait->node)); |
| 519 | rb_erase(&wait->node, &b->waiters); | 519 | rb_erase(&wait->node, &b->waiters); |
| 520 | RB_CLEAR_NODE(&wait->node); | ||
| 520 | 521 | ||
| 521 | out: | 522 | out: |
| 522 | GEM_BUG_ON(b->irq_wait == wait); | 523 | GEM_BUG_ON(b->irq_wait == wait); |
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c index 933c18fd4258..e0843bb99169 100644 --- a/drivers/gpu/drm/i915/intel_ddi.c +++ b/drivers/gpu/drm/i915/intel_ddi.c | |||
| @@ -2131,6 +2131,7 @@ static void intel_ddi_clk_select(struct intel_encoder *encoder, | |||
| 2131 | if (IS_CANNONLAKE(dev_priv)) { | 2131 | if (IS_CANNONLAKE(dev_priv)) { |
| 2132 | /* Configure DPCLKA_CFGCR0 to map the DPLL to the DDI. */ | 2132 | /* Configure DPCLKA_CFGCR0 to map the DPLL to the DDI. */ |
| 2133 | val = I915_READ(DPCLKA_CFGCR0); | 2133 | val = I915_READ(DPCLKA_CFGCR0); |
| 2134 | val &= ~DPCLKA_CFGCR0_DDI_CLK_SEL_MASK(port); | ||
| 2134 | val |= DPCLKA_CFGCR0_DDI_CLK_SEL(pll->id, port); | 2135 | val |= DPCLKA_CFGCR0_DDI_CLK_SEL(pll->id, port); |
| 2135 | I915_WRITE(DPCLKA_CFGCR0, val); | 2136 | I915_WRITE(DPCLKA_CFGCR0, val); |
| 2136 | 2137 | ||
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 878acc432a4b..e8ccf89cb17b 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
| @@ -1000,7 +1000,8 @@ enum transcoder intel_pipe_to_cpu_transcoder(struct drm_i915_private *dev_priv, | |||
| 1000 | return crtc->config->cpu_transcoder; | 1000 | return crtc->config->cpu_transcoder; |
| 1001 | } | 1001 | } |
| 1002 | 1002 | ||
| 1003 | static bool pipe_dsl_stopped(struct drm_i915_private *dev_priv, enum pipe pipe) | 1003 | static bool pipe_scanline_is_moving(struct drm_i915_private *dev_priv, |
| 1004 | enum pipe pipe) | ||
| 1004 | { | 1005 | { |
| 1005 | i915_reg_t reg = PIPEDSL(pipe); | 1006 | i915_reg_t reg = PIPEDSL(pipe); |
| 1006 | u32 line1, line2; | 1007 | u32 line1, line2; |
| @@ -1015,7 +1016,28 @@ static bool pipe_dsl_stopped(struct drm_i915_private *dev_priv, enum pipe pipe) | |||
| 1015 | msleep(5); | 1016 | msleep(5); |
| 1016 | line2 = I915_READ(reg) & line_mask; | 1017 | line2 = I915_READ(reg) & line_mask; |
| 1017 | 1018 | ||
| 1018 | return line1 == line2; | 1019 | return line1 != line2; |
| 1020 | } | ||
| 1021 | |||
| 1022 | static void wait_for_pipe_scanline_moving(struct intel_crtc *crtc, bool state) | ||
| 1023 | { | ||
| 1024 | struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); | ||
| 1025 | enum pipe pipe = crtc->pipe; | ||
| 1026 | |||
| 1027 | /* Wait for the display line to settle/start moving */ | ||
| 1028 | if (wait_for(pipe_scanline_is_moving(dev_priv, pipe) == state, 100)) | ||
| 1029 | DRM_ERROR("pipe %c scanline %s wait timed out\n", | ||
| 1030 | pipe_name(pipe), onoff(state)); | ||
| 1031 | } | ||
| 1032 | |||
| 1033 | static void intel_wait_for_pipe_scanline_stopped(struct intel_crtc *crtc) | ||
| 1034 | { | ||
| 1035 | wait_for_pipe_scanline_moving(crtc, false); | ||
| 1036 | } | ||
| 1037 | |||
| 1038 | static void intel_wait_for_pipe_scanline_moving(struct intel_crtc *crtc) | ||
| 1039 | { | ||
| 1040 | wait_for_pipe_scanline_moving(crtc, true); | ||
| 1019 | } | 1041 | } |
| 1020 | 1042 | ||
| 1021 | /* | 1043 | /* |
| @@ -1038,7 +1060,6 @@ static void intel_wait_for_pipe_off(struct intel_crtc *crtc) | |||
| 1038 | { | 1060 | { |
| 1039 | struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); | 1061 | struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); |
| 1040 | enum transcoder cpu_transcoder = crtc->config->cpu_transcoder; | 1062 | enum transcoder cpu_transcoder = crtc->config->cpu_transcoder; |
| 1041 | enum pipe pipe = crtc->pipe; | ||
| 1042 | 1063 | ||
| 1043 | if (INTEL_GEN(dev_priv) >= 4) { | 1064 | if (INTEL_GEN(dev_priv) >= 4) { |
| 1044 | i915_reg_t reg = PIPECONF(cpu_transcoder); | 1065 | i915_reg_t reg = PIPECONF(cpu_transcoder); |
| @@ -1049,9 +1070,7 @@ static void intel_wait_for_pipe_off(struct intel_crtc *crtc) | |||
| 1049 | 100)) | 1070 | 100)) |
| 1050 | WARN(1, "pipe_off wait timed out\n"); | 1071 | WARN(1, "pipe_off wait timed out\n"); |
| 1051 | } else { | 1072 | } else { |
| 1052 | /* Wait for the display line to settle */ | 1073 | intel_wait_for_pipe_scanline_stopped(crtc); |
| 1053 | if (wait_for(pipe_dsl_stopped(dev_priv, pipe), 100)) | ||
| 1054 | WARN(1, "pipe_off wait timed out\n"); | ||
| 1055 | } | 1074 | } |
| 1056 | } | 1075 | } |
| 1057 | 1076 | ||
| @@ -1936,15 +1955,14 @@ static void intel_enable_pipe(struct intel_crtc *crtc) | |||
| 1936 | POSTING_READ(reg); | 1955 | POSTING_READ(reg); |
| 1937 | 1956 | ||
| 1938 | /* | 1957 | /* |
| 1939 | * Until the pipe starts DSL will read as 0, which would cause | 1958 | * Until the pipe starts PIPEDSL reads will return a stale value, |
| 1940 | * an apparent vblank timestamp jump, which messes up also the | 1959 | * which causes an apparent vblank timestamp jump when PIPEDSL |
| 1941 | * frame count when it's derived from the timestamps. So let's | 1960 | * resets to its proper value. That also messes up the frame count |
| 1942 | * wait for the pipe to start properly before we call | 1961 | * when it's derived from the timestamps. So let's wait for the |
| 1943 | * drm_crtc_vblank_on() | 1962 | * pipe to start properly before we call drm_crtc_vblank_on() |
| 1944 | */ | 1963 | */ |
| 1945 | if (dev->max_vblank_count == 0 && | 1964 | if (dev->max_vblank_count == 0) |
| 1946 | wait_for(intel_get_crtc_scanline(crtc) != crtc->scanline_offset, 50)) | 1965 | intel_wait_for_pipe_scanline_moving(crtc); |
| 1947 | DRM_ERROR("pipe %c didn't start\n", pipe_name(pipe)); | ||
| 1948 | } | 1966 | } |
| 1949 | 1967 | ||
| 1950 | /** | 1968 | /** |
| @@ -14643,6 +14661,8 @@ void i830_enable_pipe(struct drm_i915_private *dev_priv, enum pipe pipe) | |||
| 14643 | 14661 | ||
| 14644 | void i830_disable_pipe(struct drm_i915_private *dev_priv, enum pipe pipe) | 14662 | void i830_disable_pipe(struct drm_i915_private *dev_priv, enum pipe pipe) |
| 14645 | { | 14663 | { |
| 14664 | struct intel_crtc *crtc = intel_get_crtc_for_pipe(dev_priv, pipe); | ||
| 14665 | |||
| 14646 | DRM_DEBUG_KMS("disabling pipe %c due to force quirk\n", | 14666 | DRM_DEBUG_KMS("disabling pipe %c due to force quirk\n", |
| 14647 | pipe_name(pipe)); | 14667 | pipe_name(pipe)); |
| 14648 | 14668 | ||
| @@ -14652,8 +14672,7 @@ void i830_disable_pipe(struct drm_i915_private *dev_priv, enum pipe pipe) | |||
| 14652 | I915_WRITE(PIPECONF(pipe), 0); | 14672 | I915_WRITE(PIPECONF(pipe), 0); |
| 14653 | POSTING_READ(PIPECONF(pipe)); | 14673 | POSTING_READ(PIPECONF(pipe)); |
| 14654 | 14674 | ||
| 14655 | if (wait_for(pipe_dsl_stopped(dev_priv, pipe), 100)) | 14675 | intel_wait_for_pipe_scanline_stopped(crtc); |
| 14656 | DRM_ERROR("pipe %c off wait timed out\n", pipe_name(pipe)); | ||
| 14657 | 14676 | ||
| 14658 | I915_WRITE(DPLL(pipe), DPLL_VGA_MODE_DIS); | 14677 | I915_WRITE(DPLL(pipe), DPLL_VGA_MODE_DIS); |
| 14659 | POSTING_READ(DPLL(pipe)); | 14678 | POSTING_READ(DPLL(pipe)); |
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h index 7bc60c848940..6c7f8bca574e 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h | |||
| @@ -1736,7 +1736,7 @@ extern struct drm_display_mode *intel_find_panel_downclock( | |||
| 1736 | int intel_backlight_device_register(struct intel_connector *connector); | 1736 | int intel_backlight_device_register(struct intel_connector *connector); |
| 1737 | void intel_backlight_device_unregister(struct intel_connector *connector); | 1737 | void intel_backlight_device_unregister(struct intel_connector *connector); |
| 1738 | #else /* CONFIG_BACKLIGHT_CLASS_DEVICE */ | 1738 | #else /* CONFIG_BACKLIGHT_CLASS_DEVICE */ |
| 1739 | static int intel_backlight_device_register(struct intel_connector *connector) | 1739 | static inline int intel_backlight_device_register(struct intel_connector *connector) |
| 1740 | { | 1740 | { |
| 1741 | return 0; | 1741 | return 0; |
| 1742 | } | 1742 | } |
diff --git a/drivers/gpu/drm/i915/intel_fbdev.c b/drivers/gpu/drm/i915/intel_fbdev.c index b8af35187d22..ea96682568e8 100644 --- a/drivers/gpu/drm/i915/intel_fbdev.c +++ b/drivers/gpu/drm/i915/intel_fbdev.c | |||
| @@ -697,10 +697,8 @@ static void intel_fbdev_initial_config(void *data, async_cookie_t cookie) | |||
| 697 | 697 | ||
| 698 | /* Due to peculiar init order wrt to hpd handling this is separate. */ | 698 | /* Due to peculiar init order wrt to hpd handling this is separate. */ |
| 699 | if (drm_fb_helper_initial_config(&ifbdev->helper, | 699 | if (drm_fb_helper_initial_config(&ifbdev->helper, |
| 700 | ifbdev->preferred_bpp)) { | 700 | ifbdev->preferred_bpp)) |
| 701 | intel_fbdev_unregister(to_i915(ifbdev->helper.dev)); | 701 | intel_fbdev_unregister(to_i915(ifbdev->helper.dev)); |
| 702 | intel_fbdev_fini(to_i915(ifbdev->helper.dev)); | ||
| 703 | } | ||
| 704 | } | 702 | } |
| 705 | 703 | ||
| 706 | void intel_fbdev_initial_config_async(struct drm_device *dev) | 704 | void intel_fbdev_initial_config_async(struct drm_device *dev) |
| @@ -800,7 +798,11 @@ void intel_fbdev_output_poll_changed(struct drm_device *dev) | |||
| 800 | { | 798 | { |
| 801 | struct intel_fbdev *ifbdev = to_i915(dev)->fbdev; | 799 | struct intel_fbdev *ifbdev = to_i915(dev)->fbdev; |
| 802 | 800 | ||
| 803 | if (ifbdev) | 801 | if (!ifbdev) |
| 802 | return; | ||
| 803 | |||
| 804 | intel_fbdev_sync(ifbdev); | ||
| 805 | if (ifbdev->vma) | ||
| 804 | drm_fb_helper_hotplug_event(&ifbdev->helper); | 806 | drm_fb_helper_hotplug_event(&ifbdev->helper); |
| 805 | } | 807 | } |
| 806 | 808 | ||
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c index 5132dc814788..4dea833f9d1b 100644 --- a/drivers/gpu/drm/i915/intel_hdmi.c +++ b/drivers/gpu/drm/i915/intel_hdmi.c | |||
| @@ -487,7 +487,8 @@ static void intel_hdmi_set_avi_infoframe(struct drm_encoder *encoder, | |||
| 487 | crtc_state->limited_color_range ? | 487 | crtc_state->limited_color_range ? |
| 488 | HDMI_QUANTIZATION_RANGE_LIMITED : | 488 | HDMI_QUANTIZATION_RANGE_LIMITED : |
| 489 | HDMI_QUANTIZATION_RANGE_FULL, | 489 | HDMI_QUANTIZATION_RANGE_FULL, |
| 490 | intel_hdmi->rgb_quant_range_selectable); | 490 | intel_hdmi->rgb_quant_range_selectable, |
| 491 | is_hdmi2_sink); | ||
| 491 | 492 | ||
| 492 | /* TODO: handle pixel repetition for YCBCR420 outputs */ | 493 | /* TODO: handle pixel repetition for YCBCR420 outputs */ |
| 493 | intel_write_infoframe(encoder, crtc_state, &frame); | 494 | intel_write_infoframe(encoder, crtc_state, &frame); |
diff --git a/drivers/gpu/drm/i915/intel_i2c.c b/drivers/gpu/drm/i915/intel_i2c.c index eb5827110d8f..49fdf09f9919 100644 --- a/drivers/gpu/drm/i915/intel_i2c.c +++ b/drivers/gpu/drm/i915/intel_i2c.c | |||
| @@ -438,7 +438,9 @@ static bool | |||
| 438 | gmbus_is_index_read(struct i2c_msg *msgs, int i, int num) | 438 | gmbus_is_index_read(struct i2c_msg *msgs, int i, int num) |
| 439 | { | 439 | { |
| 440 | return (i + 1 < num && | 440 | return (i + 1 < num && |
| 441 | !(msgs[i].flags & I2C_M_RD) && msgs[i].len <= 2 && | 441 | msgs[i].addr == msgs[i + 1].addr && |
| 442 | !(msgs[i].flags & I2C_M_RD) && | ||
| 443 | (msgs[i].len == 1 || msgs[i].len == 2) && | ||
| 442 | (msgs[i + 1].flags & I2C_M_RD)); | 444 | (msgs[i + 1].flags & I2C_M_RD)); |
| 443 | } | 445 | } |
| 444 | 446 | ||
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c index f4a4e9496893..f0d0dbab4150 100644 --- a/drivers/gpu/drm/i915/intel_pm.c +++ b/drivers/gpu/drm/i915/intel_pm.c | |||
| @@ -124,7 +124,6 @@ static void bxt_init_clock_gating(struct drm_i915_private *dev_priv) | |||
| 124 | 124 | ||
| 125 | static void glk_init_clock_gating(struct drm_i915_private *dev_priv) | 125 | static void glk_init_clock_gating(struct drm_i915_private *dev_priv) |
| 126 | { | 126 | { |
| 127 | u32 val; | ||
| 128 | gen9_init_clock_gating(dev_priv); | 127 | gen9_init_clock_gating(dev_priv); |
| 129 | 128 | ||
| 130 | /* | 129 | /* |
| @@ -144,11 +143,6 @@ static void glk_init_clock_gating(struct drm_i915_private *dev_priv) | |||
| 144 | I915_WRITE(CHICKEN_MISC_2, val); | 143 | I915_WRITE(CHICKEN_MISC_2, val); |
| 145 | } | 144 | } |
| 146 | 145 | ||
| 147 | /* Display WA #1133: WaFbcSkipSegments:glk */ | ||
| 148 | val = I915_READ(ILK_DPFC_CHICKEN); | ||
| 149 | val &= ~GLK_SKIP_SEG_COUNT_MASK; | ||
| 150 | val |= GLK_SKIP_SEG_EN | GLK_SKIP_SEG_COUNT(1); | ||
| 151 | I915_WRITE(ILK_DPFC_CHICKEN, val); | ||
| 152 | } | 146 | } |
| 153 | 147 | ||
| 154 | static void i915_pineview_get_mem_freq(struct drm_i915_private *dev_priv) | 148 | static void i915_pineview_get_mem_freq(struct drm_i915_private *dev_priv) |
| @@ -8517,7 +8511,6 @@ static void cnp_init_clock_gating(struct drm_i915_private *dev_priv) | |||
| 8517 | 8511 | ||
| 8518 | static void cnl_init_clock_gating(struct drm_i915_private *dev_priv) | 8512 | static void cnl_init_clock_gating(struct drm_i915_private *dev_priv) |
| 8519 | { | 8513 | { |
| 8520 | u32 val; | ||
| 8521 | cnp_init_clock_gating(dev_priv); | 8514 | cnp_init_clock_gating(dev_priv); |
| 8522 | 8515 | ||
| 8523 | /* This is not an Wa. Enable for better image quality */ | 8516 | /* This is not an Wa. Enable for better image quality */ |
| @@ -8537,12 +8530,6 @@ static void cnl_init_clock_gating(struct drm_i915_private *dev_priv) | |||
| 8537 | I915_WRITE(SLICE_UNIT_LEVEL_CLKGATE, | 8530 | I915_WRITE(SLICE_UNIT_LEVEL_CLKGATE, |
| 8538 | I915_READ(SLICE_UNIT_LEVEL_CLKGATE) | | 8531 | I915_READ(SLICE_UNIT_LEVEL_CLKGATE) | |
| 8539 | SARBUNIT_CLKGATE_DIS); | 8532 | SARBUNIT_CLKGATE_DIS); |
| 8540 | |||
| 8541 | /* Display WA #1133: WaFbcSkipSegments:cnl */ | ||
| 8542 | val = I915_READ(ILK_DPFC_CHICKEN); | ||
| 8543 | val &= ~GLK_SKIP_SEG_COUNT_MASK; | ||
| 8544 | val |= GLK_SKIP_SEG_EN | GLK_SKIP_SEG_COUNT(1); | ||
| 8545 | I915_WRITE(ILK_DPFC_CHICKEN, val); | ||
| 8546 | } | 8533 | } |
| 8547 | 8534 | ||
| 8548 | static void cfl_init_clock_gating(struct drm_i915_private *dev_priv) | 8535 | static void cfl_init_clock_gating(struct drm_i915_private *dev_priv) |
diff --git a/drivers/gpu/drm/i915/intel_uncore.c b/drivers/gpu/drm/i915/intel_uncore.c index 20e3c65c0999..8c2ce81f01c2 100644 --- a/drivers/gpu/drm/i915/intel_uncore.c +++ b/drivers/gpu/drm/i915/intel_uncore.c | |||
| @@ -434,6 +434,12 @@ void intel_uncore_resume_early(struct drm_i915_private *dev_priv) | |||
| 434 | i915_check_and_clear_faults(dev_priv); | 434 | i915_check_and_clear_faults(dev_priv); |
| 435 | } | 435 | } |
| 436 | 436 | ||
| 437 | void intel_uncore_runtime_resume(struct drm_i915_private *dev_priv) | ||
| 438 | { | ||
| 439 | iosf_mbi_register_pmic_bus_access_notifier( | ||
| 440 | &dev_priv->uncore.pmic_bus_access_nb); | ||
| 441 | } | ||
| 442 | |||
| 437 | void intel_uncore_sanitize(struct drm_i915_private *dev_priv) | 443 | void intel_uncore_sanitize(struct drm_i915_private *dev_priv) |
| 438 | { | 444 | { |
| 439 | i915_modparams.enable_rc6 = | 445 | i915_modparams.enable_rc6 = |
| @@ -1240,8 +1246,15 @@ static int i915_pmic_bus_access_notifier(struct notifier_block *nb, | |||
| 1240 | * bus, which will be busy after this notification, leading to: | 1246 | * bus, which will be busy after this notification, leading to: |
| 1241 | * "render: timed out waiting for forcewake ack request." | 1247 | * "render: timed out waiting for forcewake ack request." |
| 1242 | * errors. | 1248 | * errors. |
| 1249 | * | ||
| 1250 | * The notifier is unregistered during intel_runtime_suspend(), | ||
| 1251 | * so it's ok to access the HW here without holding a RPM | ||
| 1252 | * wake reference -> disable wakeref asserts for the time of | ||
| 1253 | * the access. | ||
| 1243 | */ | 1254 | */ |
| 1255 | disable_rpm_wakeref_asserts(dev_priv); | ||
| 1244 | intel_uncore_forcewake_get(dev_priv, FORCEWAKE_ALL); | 1256 | intel_uncore_forcewake_get(dev_priv, FORCEWAKE_ALL); |
| 1257 | enable_rpm_wakeref_asserts(dev_priv); | ||
| 1245 | break; | 1258 | break; |
| 1246 | case MBI_PMIC_BUS_ACCESS_END: | 1259 | case MBI_PMIC_BUS_ACCESS_END: |
| 1247 | intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL); | 1260 | intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL); |
diff --git a/drivers/gpu/drm/i915/intel_uncore.h b/drivers/gpu/drm/i915/intel_uncore.h index 582771251b57..9ce079b5dd0d 100644 --- a/drivers/gpu/drm/i915/intel_uncore.h +++ b/drivers/gpu/drm/i915/intel_uncore.h | |||
| @@ -134,6 +134,7 @@ bool intel_uncore_arm_unclaimed_mmio_detection(struct drm_i915_private *dev_priv | |||
| 134 | void intel_uncore_fini(struct drm_i915_private *dev_priv); | 134 | void intel_uncore_fini(struct drm_i915_private *dev_priv); |
| 135 | void intel_uncore_suspend(struct drm_i915_private *dev_priv); | 135 | void intel_uncore_suspend(struct drm_i915_private *dev_priv); |
| 136 | void intel_uncore_resume_early(struct drm_i915_private *dev_priv); | 136 | void intel_uncore_resume_early(struct drm_i915_private *dev_priv); |
| 137 | void intel_uncore_runtime_resume(struct drm_i915_private *dev_priv); | ||
| 137 | 138 | ||
| 138 | u64 intel_uncore_edram_size(struct drm_i915_private *dev_priv); | 139 | u64 intel_uncore_edram_size(struct drm_i915_private *dev_priv); |
| 139 | void assert_forcewakes_inactive(struct drm_i915_private *dev_priv); | 140 | void assert_forcewakes_inactive(struct drm_i915_private *dev_priv); |
diff --git a/drivers/gpu/drm/imx/imx-drm-core.c b/drivers/gpu/drm/imx/imx-drm-core.c index 93c7e3f9b4a8..17d2f3a1c562 100644 --- a/drivers/gpu/drm/imx/imx-drm-core.c +++ b/drivers/gpu/drm/imx/imx-drm-core.c | |||
| @@ -133,9 +133,16 @@ static void imx_drm_atomic_commit_tail(struct drm_atomic_state *state) | |||
| 133 | plane_disabling = true; | 133 | plane_disabling = true; |
| 134 | } | 134 | } |
| 135 | 135 | ||
| 136 | if (plane_disabling) { | 136 | /* |
| 137 | drm_atomic_helper_wait_for_vblanks(dev, state); | 137 | * The flip done wait is only strictly required by imx-drm if a deferred |
| 138 | * plane disable is in-flight. As the core requires blocking commits | ||
| 139 | * to wait for the flip it is done here unconditionally. This keeps the | ||
| 140 | * workitem around a bit longer than required for the majority of | ||
| 141 | * non-blocking commits, but we accept that for the sake of simplicity. | ||
| 142 | */ | ||
| 143 | drm_atomic_helper_wait_for_flip_done(dev, state); | ||
| 138 | 144 | ||
| 145 | if (plane_disabling) { | ||
| 139 | for_each_old_plane_in_state(state, plane, old_plane_state, i) | 146 | for_each_old_plane_in_state(state, plane, old_plane_state, i) |
| 140 | ipu_plane_disable_deferred(plane); | 147 | ipu_plane_disable_deferred(plane); |
| 141 | 148 | ||
diff --git a/drivers/gpu/drm/omapdrm/displays/Kconfig b/drivers/gpu/drm/omapdrm/displays/Kconfig index c226da145fb3..a349cb61961e 100644 --- a/drivers/gpu/drm/omapdrm/displays/Kconfig +++ b/drivers/gpu/drm/omapdrm/displays/Kconfig | |||
| @@ -35,6 +35,7 @@ config DRM_OMAP_CONNECTOR_ANALOG_TV | |||
| 35 | 35 | ||
| 36 | config DRM_OMAP_PANEL_DPI | 36 | config DRM_OMAP_PANEL_DPI |
| 37 | tristate "Generic DPI panel" | 37 | tristate "Generic DPI panel" |
| 38 | depends on BACKLIGHT_CLASS_DEVICE | ||
| 38 | help | 39 | help |
| 39 | Driver for generic DPI panels. | 40 | Driver for generic DPI panels. |
| 40 | 41 | ||
diff --git a/drivers/gpu/drm/omapdrm/dss/dpi.c b/drivers/gpu/drm/omapdrm/dss/dpi.c index daf286fc8a40..ca1e3b489540 100644 --- a/drivers/gpu/drm/omapdrm/dss/dpi.c +++ b/drivers/gpu/drm/omapdrm/dss/dpi.c | |||
| @@ -566,8 +566,8 @@ static int dpi_verify_pll(struct dss_pll *pll) | |||
| 566 | } | 566 | } |
| 567 | 567 | ||
| 568 | static const struct soc_device_attribute dpi_soc_devices[] = { | 568 | static const struct soc_device_attribute dpi_soc_devices[] = { |
| 569 | { .family = "OMAP3[456]*" }, | 569 | { .machine = "OMAP3[456]*" }, |
| 570 | { .family = "[AD]M37*" }, | 570 | { .machine = "[AD]M37*" }, |
| 571 | { /* sentinel */ } | 571 | { /* sentinel */ } |
| 572 | }; | 572 | }; |
| 573 | 573 | ||
diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi4_cec.c b/drivers/gpu/drm/omapdrm/dss/hdmi4_cec.c index d86873f2abe6..e626eddf24d5 100644 --- a/drivers/gpu/drm/omapdrm/dss/hdmi4_cec.c +++ b/drivers/gpu/drm/omapdrm/dss/hdmi4_cec.c | |||
| @@ -352,7 +352,7 @@ int hdmi4_cec_init(struct platform_device *pdev, struct hdmi_core_data *core, | |||
| 352 | { | 352 | { |
| 353 | const u32 caps = CEC_CAP_TRANSMIT | CEC_CAP_LOG_ADDRS | | 353 | const u32 caps = CEC_CAP_TRANSMIT | CEC_CAP_LOG_ADDRS | |
| 354 | CEC_CAP_PASSTHROUGH | CEC_CAP_RC; | 354 | CEC_CAP_PASSTHROUGH | CEC_CAP_RC; |
| 355 | unsigned int ret; | 355 | int ret; |
| 356 | 356 | ||
| 357 | core->adap = cec_allocate_adapter(&hdmi_cec_adap_ops, core, | 357 | core->adap = cec_allocate_adapter(&hdmi_cec_adap_ops, core, |
| 358 | "omap4", caps, CEC_MAX_LOG_ADDRS); | 358 | "omap4", caps, CEC_MAX_LOG_ADDRS); |
diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi4_core.c b/drivers/gpu/drm/omapdrm/dss/hdmi4_core.c index 62e451162d96..b06f9956e733 100644 --- a/drivers/gpu/drm/omapdrm/dss/hdmi4_core.c +++ b/drivers/gpu/drm/omapdrm/dss/hdmi4_core.c | |||
| @@ -886,25 +886,36 @@ struct hdmi4_features { | |||
| 886 | bool audio_use_mclk; | 886 | bool audio_use_mclk; |
| 887 | }; | 887 | }; |
| 888 | 888 | ||
| 889 | static const struct hdmi4_features hdmi4_es1_features = { | 889 | static const struct hdmi4_features hdmi4430_es1_features = { |
| 890 | .cts_swmode = false, | 890 | .cts_swmode = false, |
| 891 | .audio_use_mclk = false, | 891 | .audio_use_mclk = false, |
| 892 | }; | 892 | }; |
| 893 | 893 | ||
| 894 | static const struct hdmi4_features hdmi4_es2_features = { | 894 | static const struct hdmi4_features hdmi4430_es2_features = { |
| 895 | .cts_swmode = true, | 895 | .cts_swmode = true, |
| 896 | .audio_use_mclk = false, | 896 | .audio_use_mclk = false, |
| 897 | }; | 897 | }; |
| 898 | 898 | ||
| 899 | static const struct hdmi4_features hdmi4_es3_features = { | 899 | static const struct hdmi4_features hdmi4_features = { |
| 900 | .cts_swmode = true, | 900 | .cts_swmode = true, |
| 901 | .audio_use_mclk = true, | 901 | .audio_use_mclk = true, |
| 902 | }; | 902 | }; |
| 903 | 903 | ||
| 904 | static const struct soc_device_attribute hdmi4_soc_devices[] = { | 904 | static const struct soc_device_attribute hdmi4_soc_devices[] = { |
| 905 | { .family = "OMAP4", .revision = "ES1.?", .data = &hdmi4_es1_features }, | 905 | { |
| 906 | { .family = "OMAP4", .revision = "ES2.?", .data = &hdmi4_es2_features }, | 906 | .machine = "OMAP4430", |
| 907 | { .family = "OMAP4", .data = &hdmi4_es3_features }, | 907 | .revision = "ES1.?", |
| 908 | .data = &hdmi4430_es1_features, | ||
| 909 | }, | ||
| 910 | { | ||
| 911 | .machine = "OMAP4430", | ||
| 912 | .revision = "ES2.?", | ||
| 913 | .data = &hdmi4430_es2_features, | ||
| 914 | }, | ||
| 915 | { | ||
| 916 | .family = "OMAP4", | ||
| 917 | .data = &hdmi4_features, | ||
| 918 | }, | ||
| 908 | { /* sentinel */ } | 919 | { /* sentinel */ } |
| 909 | }; | 920 | }; |
| 910 | 921 | ||
diff --git a/drivers/gpu/drm/omapdrm/omap_dmm_tiler.c b/drivers/gpu/drm/omapdrm/omap_dmm_tiler.c index 1dd3dafc59af..c60a85e82c6d 100644 --- a/drivers/gpu/drm/omapdrm/omap_dmm_tiler.c +++ b/drivers/gpu/drm/omapdrm/omap_dmm_tiler.c | |||
| @@ -638,7 +638,8 @@ static int omap_dmm_probe(struct platform_device *dev) | |||
| 638 | match = of_match_node(dmm_of_match, dev->dev.of_node); | 638 | match = of_match_node(dmm_of_match, dev->dev.of_node); |
| 639 | if (!match) { | 639 | if (!match) { |
| 640 | dev_err(&dev->dev, "failed to find matching device node\n"); | 640 | dev_err(&dev->dev, "failed to find matching device node\n"); |
| 641 | return -ENODEV; | 641 | ret = -ENODEV; |
| 642 | goto fail; | ||
| 642 | } | 643 | } |
| 643 | 644 | ||
| 644 | omap_dmm->plat_data = match->data; | 645 | omap_dmm->plat_data = match->data; |
diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c index 898f9a078830..a6511918f632 100644 --- a/drivers/gpu/drm/radeon/cik.c +++ b/drivers/gpu/drm/radeon/cik.c | |||
| @@ -5451,28 +5451,6 @@ void cik_pcie_gart_tlb_flush(struct radeon_device *rdev) | |||
| 5451 | WREG32(VM_INVALIDATE_REQUEST, 0x1); | 5451 | WREG32(VM_INVALIDATE_REQUEST, 0x1); |
| 5452 | } | 5452 | } |
| 5453 | 5453 | ||
| 5454 | static void cik_pcie_init_compute_vmid(struct radeon_device *rdev) | ||
| 5455 | { | ||
| 5456 | int i; | ||
| 5457 | uint32_t sh_mem_bases, sh_mem_config; | ||
| 5458 | |||
| 5459 | sh_mem_bases = 0x6000 | 0x6000 << 16; | ||
| 5460 | sh_mem_config = ALIGNMENT_MODE(SH_MEM_ALIGNMENT_MODE_UNALIGNED); | ||
| 5461 | sh_mem_config |= DEFAULT_MTYPE(MTYPE_NONCACHED); | ||
| 5462 | |||
| 5463 | mutex_lock(&rdev->srbm_mutex); | ||
| 5464 | for (i = 8; i < 16; i++) { | ||
| 5465 | cik_srbm_select(rdev, 0, 0, 0, i); | ||
| 5466 | /* CP and shaders */ | ||
| 5467 | WREG32(SH_MEM_CONFIG, sh_mem_config); | ||
| 5468 | WREG32(SH_MEM_APE1_BASE, 1); | ||
| 5469 | WREG32(SH_MEM_APE1_LIMIT, 0); | ||
| 5470 | WREG32(SH_MEM_BASES, sh_mem_bases); | ||
| 5471 | } | ||
| 5472 | cik_srbm_select(rdev, 0, 0, 0, 0); | ||
| 5473 | mutex_unlock(&rdev->srbm_mutex); | ||
| 5474 | } | ||
| 5475 | |||
| 5476 | /** | 5454 | /** |
| 5477 | * cik_pcie_gart_enable - gart enable | 5455 | * cik_pcie_gart_enable - gart enable |
| 5478 | * | 5456 | * |
| @@ -5586,8 +5564,6 @@ static int cik_pcie_gart_enable(struct radeon_device *rdev) | |||
| 5586 | cik_srbm_select(rdev, 0, 0, 0, 0); | 5564 | cik_srbm_select(rdev, 0, 0, 0, 0); |
| 5587 | mutex_unlock(&rdev->srbm_mutex); | 5565 | mutex_unlock(&rdev->srbm_mutex); |
| 5588 | 5566 | ||
| 5589 | cik_pcie_init_compute_vmid(rdev); | ||
| 5590 | |||
| 5591 | cik_pcie_gart_tlb_flush(rdev); | 5567 | cik_pcie_gart_tlb_flush(rdev); |
| 5592 | DRM_INFO("PCIE GART of %uM enabled (table at 0x%016llX).\n", | 5568 | DRM_INFO("PCIE GART of %uM enabled (table at 0x%016llX).\n", |
| 5593 | (unsigned)(rdev->mc.gtt_size >> 20), | 5569 | (unsigned)(rdev->mc.gtt_size >> 20), |
diff --git a/drivers/gpu/drm/rockchip/dw-mipi-dsi.c b/drivers/gpu/drm/rockchip/dw-mipi-dsi.c index b15755b6129c..b1fe0639227e 100644 --- a/drivers/gpu/drm/rockchip/dw-mipi-dsi.c +++ b/drivers/gpu/drm/rockchip/dw-mipi-dsi.c | |||
| @@ -1285,8 +1285,6 @@ static int dw_mipi_dsi_bind(struct device *dev, struct device *master, | |||
| 1285 | goto err_pllref; | 1285 | goto err_pllref; |
| 1286 | } | 1286 | } |
| 1287 | 1287 | ||
| 1288 | pm_runtime_enable(dev); | ||
| 1289 | |||
| 1290 | dsi->dsi_host.ops = &dw_mipi_dsi_host_ops; | 1288 | dsi->dsi_host.ops = &dw_mipi_dsi_host_ops; |
| 1291 | dsi->dsi_host.dev = dev; | 1289 | dsi->dsi_host.dev = dev; |
| 1292 | ret = mipi_dsi_host_register(&dsi->dsi_host); | 1290 | ret = mipi_dsi_host_register(&dsi->dsi_host); |
| @@ -1301,6 +1299,7 @@ static int dw_mipi_dsi_bind(struct device *dev, struct device *master, | |||
| 1301 | } | 1299 | } |
| 1302 | 1300 | ||
| 1303 | dev_set_drvdata(dev, dsi); | 1301 | dev_set_drvdata(dev, dsi); |
| 1302 | pm_runtime_enable(dev); | ||
| 1304 | return 0; | 1303 | return 0; |
| 1305 | 1304 | ||
| 1306 | err_mipi_dsi_host: | 1305 | err_mipi_dsi_host: |
diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c b/drivers/gpu/drm/ttm/ttm_page_alloc.c index 316f831ad5f0..44343a2bf55c 100644 --- a/drivers/gpu/drm/ttm/ttm_page_alloc.c +++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c | |||
| @@ -81,6 +81,7 @@ struct ttm_page_pool { | |||
| 81 | char *name; | 81 | char *name; |
| 82 | unsigned long nfrees; | 82 | unsigned long nfrees; |
| 83 | unsigned long nrefills; | 83 | unsigned long nrefills; |
| 84 | unsigned int order; | ||
| 84 | }; | 85 | }; |
| 85 | 86 | ||
| 86 | /** | 87 | /** |
| @@ -222,6 +223,17 @@ static struct kobj_type ttm_pool_kobj_type = { | |||
| 222 | static struct ttm_pool_manager *_manager; | 223 | static struct ttm_pool_manager *_manager; |
| 223 | 224 | ||
| 224 | #ifndef CONFIG_X86 | 225 | #ifndef CONFIG_X86 |
| 226 | static int set_pages_wb(struct page *page, int numpages) | ||
| 227 | { | ||
| 228 | #if IS_ENABLED(CONFIG_AGP) | ||
| 229 | int i; | ||
| 230 | |||
| 231 | for (i = 0; i < numpages; i++) | ||
| 232 | unmap_page_from_agp(page++); | ||
| 233 | #endif | ||
| 234 | return 0; | ||
| 235 | } | ||
| 236 | |||
| 225 | static int set_pages_array_wb(struct page **pages, int addrinarray) | 237 | static int set_pages_array_wb(struct page **pages, int addrinarray) |
| 226 | { | 238 | { |
| 227 | #if IS_ENABLED(CONFIG_AGP) | 239 | #if IS_ENABLED(CONFIG_AGP) |
| @@ -284,13 +296,23 @@ static struct ttm_page_pool *ttm_get_pool(int flags, bool huge, | |||
| 284 | } | 296 | } |
| 285 | 297 | ||
| 286 | /* set memory back to wb and free the pages. */ | 298 | /* set memory back to wb and free the pages. */ |
| 287 | static void ttm_pages_put(struct page *pages[], unsigned npages) | 299 | static void ttm_pages_put(struct page *pages[], unsigned npages, |
| 300 | unsigned int order) | ||
| 288 | { | 301 | { |
| 289 | unsigned i; | 302 | unsigned int i, pages_nr = (1 << order); |
| 290 | if (set_pages_array_wb(pages, npages)) | 303 | |
| 291 | pr_err("Failed to set %d pages to wb!\n", npages); | 304 | if (order == 0) { |
| 292 | for (i = 0; i < npages; ++i) | 305 | if (set_pages_array_wb(pages, npages)) |
| 293 | __free_page(pages[i]); | 306 | pr_err("Failed to set %d pages to wb!\n", npages); |
| 307 | } | ||
| 308 | |||
| 309 | for (i = 0; i < npages; ++i) { | ||
| 310 | if (order > 0) { | ||
| 311 | if (set_pages_wb(pages[i], pages_nr)) | ||
| 312 | pr_err("Failed to set %d pages to wb!\n", pages_nr); | ||
| 313 | } | ||
| 314 | __free_pages(pages[i], order); | ||
| 315 | } | ||
| 294 | } | 316 | } |
| 295 | 317 | ||
| 296 | static void ttm_pool_update_free_locked(struct ttm_page_pool *pool, | 318 | static void ttm_pool_update_free_locked(struct ttm_page_pool *pool, |
| @@ -353,7 +375,7 @@ restart: | |||
| 353 | */ | 375 | */ |
| 354 | spin_unlock_irqrestore(&pool->lock, irq_flags); | 376 | spin_unlock_irqrestore(&pool->lock, irq_flags); |
| 355 | 377 | ||
| 356 | ttm_pages_put(pages_to_free, freed_pages); | 378 | ttm_pages_put(pages_to_free, freed_pages, pool->order); |
| 357 | if (likely(nr_free != FREE_ALL_PAGES)) | 379 | if (likely(nr_free != FREE_ALL_PAGES)) |
| 358 | nr_free -= freed_pages; | 380 | nr_free -= freed_pages; |
| 359 | 381 | ||
| @@ -388,7 +410,7 @@ restart: | |||
| 388 | spin_unlock_irqrestore(&pool->lock, irq_flags); | 410 | spin_unlock_irqrestore(&pool->lock, irq_flags); |
| 389 | 411 | ||
| 390 | if (freed_pages) | 412 | if (freed_pages) |
| 391 | ttm_pages_put(pages_to_free, freed_pages); | 413 | ttm_pages_put(pages_to_free, freed_pages, pool->order); |
| 392 | out: | 414 | out: |
| 393 | if (pages_to_free != static_buf) | 415 | if (pages_to_free != static_buf) |
| 394 | kfree(pages_to_free); | 416 | kfree(pages_to_free); |
| @@ -412,6 +434,7 @@ ttm_pool_shrink_scan(struct shrinker *shrink, struct shrink_control *sc) | |||
| 412 | struct ttm_page_pool *pool; | 434 | struct ttm_page_pool *pool; |
| 413 | int shrink_pages = sc->nr_to_scan; | 435 | int shrink_pages = sc->nr_to_scan; |
| 414 | unsigned long freed = 0; | 436 | unsigned long freed = 0; |
| 437 | unsigned int nr_free_pool; | ||
| 415 | 438 | ||
| 416 | if (!mutex_trylock(&lock)) | 439 | if (!mutex_trylock(&lock)) |
| 417 | return SHRINK_STOP; | 440 | return SHRINK_STOP; |
| @@ -419,12 +442,19 @@ ttm_pool_shrink_scan(struct shrinker *shrink, struct shrink_control *sc) | |||
| 419 | /* select start pool in round robin fashion */ | 442 | /* select start pool in round robin fashion */ |
| 420 | for (i = 0; i < NUM_POOLS; ++i) { | 443 | for (i = 0; i < NUM_POOLS; ++i) { |
| 421 | unsigned nr_free = shrink_pages; | 444 | unsigned nr_free = shrink_pages; |
| 445 | unsigned page_nr; | ||
| 446 | |||
| 422 | if (shrink_pages == 0) | 447 | if (shrink_pages == 0) |
| 423 | break; | 448 | break; |
| 449 | |||
| 424 | pool = &_manager->pools[(i + pool_offset)%NUM_POOLS]; | 450 | pool = &_manager->pools[(i + pool_offset)%NUM_POOLS]; |
| 451 | page_nr = (1 << pool->order); | ||
| 425 | /* OK to use static buffer since global mutex is held. */ | 452 | /* OK to use static buffer since global mutex is held. */ |
| 426 | shrink_pages = ttm_page_pool_free(pool, nr_free, true); | 453 | nr_free_pool = roundup(nr_free, page_nr) >> pool->order; |
| 427 | freed += nr_free - shrink_pages; | 454 | shrink_pages = ttm_page_pool_free(pool, nr_free_pool, true); |
| 455 | freed += (nr_free_pool - shrink_pages) << pool->order; | ||
| 456 | if (freed >= sc->nr_to_scan) | ||
| 457 | break; | ||
| 428 | } | 458 | } |
| 429 | mutex_unlock(&lock); | 459 | mutex_unlock(&lock); |
| 430 | return freed; | 460 | return freed; |
| @@ -436,9 +466,12 @@ ttm_pool_shrink_count(struct shrinker *shrink, struct shrink_control *sc) | |||
| 436 | { | 466 | { |
| 437 | unsigned i; | 467 | unsigned i; |
| 438 | unsigned long count = 0; | 468 | unsigned long count = 0; |
| 469 | struct ttm_page_pool *pool; | ||
| 439 | 470 | ||
| 440 | for (i = 0; i < NUM_POOLS; ++i) | 471 | for (i = 0; i < NUM_POOLS; ++i) { |
| 441 | count += _manager->pools[i].npages; | 472 | pool = &_manager->pools[i]; |
| 473 | count += (pool->npages << pool->order); | ||
| 474 | } | ||
| 442 | 475 | ||
| 443 | return count; | 476 | return count; |
| 444 | } | 477 | } |
| @@ -510,8 +543,7 @@ static int ttm_alloc_new_pages(struct list_head *pages, gfp_t gfp_flags, | |||
| 510 | int r = 0; | 543 | int r = 0; |
| 511 | unsigned i, j, cpages; | 544 | unsigned i, j, cpages; |
| 512 | unsigned npages = 1 << order; | 545 | unsigned npages = 1 << order; |
| 513 | unsigned max_cpages = min(count, | 546 | unsigned max_cpages = min(count, (unsigned)NUM_PAGES_TO_ALLOC); |
| 514 | (unsigned)(PAGE_SIZE/sizeof(struct page *))); | ||
| 515 | 547 | ||
| 516 | /* allocate array for page caching change */ | 548 | /* allocate array for page caching change */ |
| 517 | caching_array = kmalloc(max_cpages*sizeof(struct page *), GFP_KERNEL); | 549 | caching_array = kmalloc(max_cpages*sizeof(struct page *), GFP_KERNEL); |
| @@ -744,12 +776,14 @@ static void ttm_put_pages(struct page **pages, unsigned npages, int flags, | |||
| 744 | } | 776 | } |
| 745 | 777 | ||
| 746 | #ifdef CONFIG_TRANSPARENT_HUGEPAGE | 778 | #ifdef CONFIG_TRANSPARENT_HUGEPAGE |
| 747 | for (j = 0; j < HPAGE_PMD_NR; ++j) | 779 | if (!(flags & TTM_PAGE_FLAG_DMA32)) { |
| 748 | if (p++ != pages[i + j]) | 780 | for (j = 0; j < HPAGE_PMD_NR; ++j) |
| 749 | break; | 781 | if (p++ != pages[i + j]) |
| 782 | break; | ||
| 750 | 783 | ||
| 751 | if (j == HPAGE_PMD_NR) | 784 | if (j == HPAGE_PMD_NR) |
| 752 | order = HPAGE_PMD_ORDER; | 785 | order = HPAGE_PMD_ORDER; |
| 786 | } | ||
| 753 | #endif | 787 | #endif |
| 754 | 788 | ||
| 755 | if (page_count(pages[i]) != 1) | 789 | if (page_count(pages[i]) != 1) |
| @@ -843,7 +877,7 @@ static int ttm_get_pages(struct page **pages, unsigned npages, int flags, | |||
| 843 | #endif | 877 | #endif |
| 844 | struct list_head plist; | 878 | struct list_head plist; |
| 845 | struct page *p = NULL; | 879 | struct page *p = NULL; |
| 846 | unsigned count; | 880 | unsigned count, first; |
| 847 | int r; | 881 | int r; |
| 848 | 882 | ||
| 849 | /* No pool for cached pages */ | 883 | /* No pool for cached pages */ |
| @@ -865,23 +899,26 @@ static int ttm_get_pages(struct page **pages, unsigned npages, int flags, | |||
| 865 | 899 | ||
| 866 | i = 0; | 900 | i = 0; |
| 867 | #ifdef CONFIG_TRANSPARENT_HUGEPAGE | 901 | #ifdef CONFIG_TRANSPARENT_HUGEPAGE |
| 868 | while (npages >= HPAGE_PMD_NR) { | 902 | if (!(gfp_flags & GFP_DMA32)) { |
| 869 | gfp_t huge_flags = gfp_flags; | 903 | while (npages >= HPAGE_PMD_NR) { |
| 904 | gfp_t huge_flags = gfp_flags; | ||
| 870 | 905 | ||
| 871 | huge_flags |= GFP_TRANSHUGE; | 906 | huge_flags |= GFP_TRANSHUGE; |
| 872 | huge_flags &= ~__GFP_MOVABLE; | 907 | huge_flags &= ~__GFP_MOVABLE; |
| 873 | huge_flags &= ~__GFP_COMP; | 908 | huge_flags &= ~__GFP_COMP; |
| 874 | p = alloc_pages(huge_flags, HPAGE_PMD_ORDER); | 909 | p = alloc_pages(huge_flags, HPAGE_PMD_ORDER); |
| 875 | if (!p) | 910 | if (!p) |
| 876 | break; | 911 | break; |
| 877 | 912 | ||
| 878 | for (j = 0; j < HPAGE_PMD_NR; ++j) | 913 | for (j = 0; j < HPAGE_PMD_NR; ++j) |
| 879 | pages[i++] = p++; | 914 | pages[i++] = p++; |
| 880 | 915 | ||
| 881 | npages -= HPAGE_PMD_NR; | 916 | npages -= HPAGE_PMD_NR; |
| 917 | } | ||
| 882 | } | 918 | } |
| 883 | #endif | 919 | #endif |
| 884 | 920 | ||
| 921 | first = i; | ||
| 885 | while (npages) { | 922 | while (npages) { |
| 886 | p = alloc_page(gfp_flags); | 923 | p = alloc_page(gfp_flags); |
| 887 | if (!p) { | 924 | if (!p) { |
| @@ -889,6 +926,10 @@ static int ttm_get_pages(struct page **pages, unsigned npages, int flags, | |||
| 889 | return -ENOMEM; | 926 | return -ENOMEM; |
| 890 | } | 927 | } |
| 891 | 928 | ||
| 929 | /* Swap the pages if we detect consecutive order */ | ||
| 930 | if (i > first && pages[i - 1] == p - 1) | ||
| 931 | swap(p, pages[i - 1]); | ||
| 932 | |||
| 892 | pages[i++] = p; | 933 | pages[i++] = p; |
| 893 | --npages; | 934 | --npages; |
| 894 | } | 935 | } |
| @@ -917,8 +958,15 @@ static int ttm_get_pages(struct page **pages, unsigned npages, int flags, | |||
| 917 | r = ttm_page_pool_get_pages(pool, &plist, flags, cstate, | 958 | r = ttm_page_pool_get_pages(pool, &plist, flags, cstate, |
| 918 | npages - count, 0); | 959 | npages - count, 0); |
| 919 | 960 | ||
| 920 | list_for_each_entry(p, &plist, lru) | 961 | first = count; |
| 921 | pages[count++] = p; | 962 | list_for_each_entry(p, &plist, lru) { |
| 963 | struct page *tmp = p; | ||
| 964 | |||
| 965 | /* Swap the pages if we detect consecutive order */ | ||
| 966 | if (count > first && pages[count - 1] == tmp - 1) | ||
| 967 | swap(tmp, pages[count - 1]); | ||
| 968 | pages[count++] = tmp; | ||
| 969 | } | ||
| 922 | 970 | ||
| 923 | if (r) { | 971 | if (r) { |
| 924 | /* If there is any pages in the list put them back to | 972 | /* If there is any pages in the list put them back to |
| @@ -933,7 +981,7 @@ static int ttm_get_pages(struct page **pages, unsigned npages, int flags, | |||
| 933 | } | 981 | } |
| 934 | 982 | ||
| 935 | static void ttm_page_pool_init_locked(struct ttm_page_pool *pool, gfp_t flags, | 983 | static void ttm_page_pool_init_locked(struct ttm_page_pool *pool, gfp_t flags, |
| 936 | char *name) | 984 | char *name, unsigned int order) |
| 937 | { | 985 | { |
| 938 | spin_lock_init(&pool->lock); | 986 | spin_lock_init(&pool->lock); |
| 939 | pool->fill_lock = false; | 987 | pool->fill_lock = false; |
| @@ -941,11 +989,17 @@ static void ttm_page_pool_init_locked(struct ttm_page_pool *pool, gfp_t flags, | |||
| 941 | pool->npages = pool->nfrees = 0; | 989 | pool->npages = pool->nfrees = 0; |
| 942 | pool->gfp_flags = flags; | 990 | pool->gfp_flags = flags; |
| 943 | pool->name = name; | 991 | pool->name = name; |
| 992 | pool->order = order; | ||
| 944 | } | 993 | } |
| 945 | 994 | ||
| 946 | int ttm_page_alloc_init(struct ttm_mem_global *glob, unsigned max_pages) | 995 | int ttm_page_alloc_init(struct ttm_mem_global *glob, unsigned max_pages) |
| 947 | { | 996 | { |
| 948 | int ret; | 997 | int ret; |
| 998 | #ifdef CONFIG_TRANSPARENT_HUGEPAGE | ||
| 999 | unsigned order = HPAGE_PMD_ORDER; | ||
| 1000 | #else | ||
| 1001 | unsigned order = 0; | ||
| 1002 | #endif | ||
| 949 | 1003 | ||
| 950 | WARN_ON(_manager); | 1004 | WARN_ON(_manager); |
| 951 | 1005 | ||
| @@ -953,23 +1007,23 @@ int ttm_page_alloc_init(struct ttm_mem_global *glob, unsigned max_pages) | |||
| 953 | 1007 | ||
| 954 | _manager = kzalloc(sizeof(*_manager), GFP_KERNEL); | 1008 | _manager = kzalloc(sizeof(*_manager), GFP_KERNEL); |
| 955 | 1009 | ||
| 956 | ttm_page_pool_init_locked(&_manager->wc_pool, GFP_HIGHUSER, "wc"); | 1010 | ttm_page_pool_init_locked(&_manager->wc_pool, GFP_HIGHUSER, "wc", 0); |
| 957 | 1011 | ||
| 958 | ttm_page_pool_init_locked(&_manager->uc_pool, GFP_HIGHUSER, "uc"); | 1012 | ttm_page_pool_init_locked(&_manager->uc_pool, GFP_HIGHUSER, "uc", 0); |
| 959 | 1013 | ||
| 960 | ttm_page_pool_init_locked(&_manager->wc_pool_dma32, | 1014 | ttm_page_pool_init_locked(&_manager->wc_pool_dma32, |
| 961 | GFP_USER | GFP_DMA32, "wc dma"); | 1015 | GFP_USER | GFP_DMA32, "wc dma", 0); |
| 962 | 1016 | ||
| 963 | ttm_page_pool_init_locked(&_manager->uc_pool_dma32, | 1017 | ttm_page_pool_init_locked(&_manager->uc_pool_dma32, |
| 964 | GFP_USER | GFP_DMA32, "uc dma"); | 1018 | GFP_USER | GFP_DMA32, "uc dma", 0); |
| 965 | 1019 | ||
| 966 | ttm_page_pool_init_locked(&_manager->wc_pool_huge, | 1020 | ttm_page_pool_init_locked(&_manager->wc_pool_huge, |
| 967 | GFP_TRANSHUGE & ~(__GFP_MOVABLE | __GFP_COMP), | 1021 | GFP_TRANSHUGE & ~(__GFP_MOVABLE | __GFP_COMP), |
| 968 | "wc huge"); | 1022 | "wc huge", order); |
| 969 | 1023 | ||
| 970 | ttm_page_pool_init_locked(&_manager->uc_pool_huge, | 1024 | ttm_page_pool_init_locked(&_manager->uc_pool_huge, |
| 971 | GFP_TRANSHUGE & ~(__GFP_MOVABLE | __GFP_COMP) | 1025 | GFP_TRANSHUGE & ~(__GFP_MOVABLE | __GFP_COMP) |
| 972 | , "uc huge"); | 1026 | , "uc huge", order); |
| 973 | 1027 | ||
| 974 | _manager->options.max_size = max_pages; | 1028 | _manager->options.max_size = max_pages; |
| 975 | _manager->options.small = SMALL_ALLOCATION; | 1029 | _manager->options.small = SMALL_ALLOCATION; |
| @@ -1058,7 +1112,6 @@ void ttm_pool_unpopulate(struct ttm_tt *ttm) | |||
| 1058 | } | 1112 | } |
| 1059 | EXPORT_SYMBOL(ttm_pool_unpopulate); | 1113 | EXPORT_SYMBOL(ttm_pool_unpopulate); |
| 1060 | 1114 | ||
| 1061 | #if defined(CONFIG_SWIOTLB) || defined(CONFIG_INTEL_IOMMU) | ||
| 1062 | int ttm_populate_and_map_pages(struct device *dev, struct ttm_dma_tt *tt) | 1115 | int ttm_populate_and_map_pages(struct device *dev, struct ttm_dma_tt *tt) |
| 1063 | { | 1116 | { |
| 1064 | unsigned i, j; | 1117 | unsigned i, j; |
| @@ -1129,7 +1182,6 @@ void ttm_unmap_and_unpopulate_pages(struct device *dev, struct ttm_dma_tt *tt) | |||
| 1129 | ttm_pool_unpopulate(&tt->ttm); | 1182 | ttm_pool_unpopulate(&tt->ttm); |
| 1130 | } | 1183 | } |
| 1131 | EXPORT_SYMBOL(ttm_unmap_and_unpopulate_pages); | 1184 | EXPORT_SYMBOL(ttm_unmap_and_unpopulate_pages); |
| 1132 | #endif | ||
| 1133 | 1185 | ||
| 1134 | int ttm_page_alloc_debugfs(struct seq_file *m, void *data) | 1186 | int ttm_page_alloc_debugfs(struct seq_file *m, void *data) |
| 1135 | { | 1187 | { |
diff --git a/drivers/gpu/drm/vc4/vc4_bo.c b/drivers/gpu/drm/vc4/vc4_bo.c index 4ae45d7dac42..2decc8e2c79f 100644 --- a/drivers/gpu/drm/vc4/vc4_bo.c +++ b/drivers/gpu/drm/vc4/vc4_bo.c | |||
| @@ -637,7 +637,8 @@ int vc4_bo_inc_usecnt(struct vc4_bo *bo) | |||
| 637 | mutex_lock(&bo->madv_lock); | 637 | mutex_lock(&bo->madv_lock); |
| 638 | switch (bo->madv) { | 638 | switch (bo->madv) { |
| 639 | case VC4_MADV_WILLNEED: | 639 | case VC4_MADV_WILLNEED: |
| 640 | refcount_inc(&bo->usecnt); | 640 | if (!refcount_inc_not_zero(&bo->usecnt)) |
| 641 | refcount_set(&bo->usecnt, 1); | ||
| 641 | ret = 0; | 642 | ret = 0; |
| 642 | break; | 643 | break; |
| 643 | case VC4_MADV_DONTNEED: | 644 | case VC4_MADV_DONTNEED: |
diff --git a/drivers/gpu/drm/vc4/vc4_gem.c b/drivers/gpu/drm/vc4/vc4_gem.c index 6c32c89a83a9..638540943c61 100644 --- a/drivers/gpu/drm/vc4/vc4_gem.c +++ b/drivers/gpu/drm/vc4/vc4_gem.c | |||
| @@ -888,8 +888,10 @@ vc4_complete_exec(struct drm_device *dev, struct vc4_exec_info *exec) | |||
| 888 | /* If we got force-completed because of GPU reset rather than | 888 | /* If we got force-completed because of GPU reset rather than |
| 889 | * through our IRQ handler, signal the fence now. | 889 | * through our IRQ handler, signal the fence now. |
| 890 | */ | 890 | */ |
| 891 | if (exec->fence) | 891 | if (exec->fence) { |
| 892 | dma_fence_signal(exec->fence); | 892 | dma_fence_signal(exec->fence); |
| 893 | dma_fence_put(exec->fence); | ||
| 894 | } | ||
| 893 | 895 | ||
| 894 | if (exec->bo) { | 896 | if (exec->bo) { |
| 895 | for (i = 0; i < exec->bo_count; i++) { | 897 | for (i = 0; i < exec->bo_count; i++) { |
diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c index fa37a1c07cf6..0b2088264039 100644 --- a/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c | |||
| @@ -424,7 +424,8 @@ static void vc4_hdmi_set_avi_infoframe(struct drm_encoder *encoder) | |||
| 424 | vc4_encoder->limited_rgb_range ? | 424 | vc4_encoder->limited_rgb_range ? |
| 425 | HDMI_QUANTIZATION_RANGE_LIMITED : | 425 | HDMI_QUANTIZATION_RANGE_LIMITED : |
| 426 | HDMI_QUANTIZATION_RANGE_FULL, | 426 | HDMI_QUANTIZATION_RANGE_FULL, |
| 427 | vc4_encoder->rgb_range_selectable); | 427 | vc4_encoder->rgb_range_selectable, |
| 428 | false); | ||
| 428 | 429 | ||
| 429 | vc4_hdmi_write_infoframe(encoder, &frame); | 430 | vc4_hdmi_write_infoframe(encoder, &frame); |
| 430 | } | 431 | } |
diff --git a/drivers/gpu/drm/vc4/vc4_irq.c b/drivers/gpu/drm/vc4/vc4_irq.c index 7d7af3a93d94..26eddbb62893 100644 --- a/drivers/gpu/drm/vc4/vc4_irq.c +++ b/drivers/gpu/drm/vc4/vc4_irq.c | |||
| @@ -139,6 +139,7 @@ vc4_irq_finish_render_job(struct drm_device *dev) | |||
| 139 | list_move_tail(&exec->head, &vc4->job_done_list); | 139 | list_move_tail(&exec->head, &vc4->job_done_list); |
| 140 | if (exec->fence) { | 140 | if (exec->fence) { |
| 141 | dma_fence_signal_locked(exec->fence); | 141 | dma_fence_signal_locked(exec->fence); |
| 142 | dma_fence_put(exec->fence); | ||
| 142 | exec->fence = NULL; | 143 | exec->fence = NULL; |
| 143 | } | 144 | } |
| 144 | vc4_submit_next_render_job(dev); | 145 | vc4_submit_next_render_job(dev); |
| @@ -208,6 +209,9 @@ vc4_irq_postinstall(struct drm_device *dev) | |||
| 208 | { | 209 | { |
| 209 | struct vc4_dev *vc4 = to_vc4_dev(dev); | 210 | struct vc4_dev *vc4 = to_vc4_dev(dev); |
| 210 | 211 | ||
| 212 | /* Undo the effects of a previous vc4_irq_uninstall. */ | ||
| 213 | enable_irq(dev->irq); | ||
| 214 | |||
| 211 | /* Enable both the render done and out of memory interrupts. */ | 215 | /* Enable both the render done and out of memory interrupts. */ |
| 212 | V3D_WRITE(V3D_INTENA, V3D_DRIVER_IRQS); | 216 | V3D_WRITE(V3D_INTENA, V3D_DRIVER_IRQS); |
| 213 | 217 | ||
| @@ -225,6 +229,9 @@ vc4_irq_uninstall(struct drm_device *dev) | |||
| 225 | /* Clear any pending interrupts we might have left. */ | 229 | /* Clear any pending interrupts we might have left. */ |
| 226 | V3D_WRITE(V3D_INTCTL, V3D_DRIVER_IRQS); | 230 | V3D_WRITE(V3D_INTCTL, V3D_DRIVER_IRQS); |
| 227 | 231 | ||
| 232 | /* Finish any interrupt handler still in flight. */ | ||
| 233 | disable_irq(dev->irq); | ||
| 234 | |||
| 228 | cancel_work_sync(&vc4->overflow_mem_work); | 235 | cancel_work_sync(&vc4->overflow_mem_work); |
| 229 | } | 236 | } |
| 230 | 237 | ||
diff --git a/drivers/hv/channel.c b/drivers/hv/channel.c index 19f0cf37e0ed..ba0a092ae085 100644 --- a/drivers/hv/channel.c +++ b/drivers/hv/channel.c | |||
| @@ -659,22 +659,28 @@ void vmbus_close(struct vmbus_channel *channel) | |||
| 659 | */ | 659 | */ |
| 660 | return; | 660 | return; |
| 661 | } | 661 | } |
| 662 | mutex_lock(&vmbus_connection.channel_mutex); | ||
| 663 | /* | 662 | /* |
| 664 | * Close all the sub-channels first and then close the | 663 | * Close all the sub-channels first and then close the |
| 665 | * primary channel. | 664 | * primary channel. |
| 666 | */ | 665 | */ |
| 667 | list_for_each_safe(cur, tmp, &channel->sc_list) { | 666 | list_for_each_safe(cur, tmp, &channel->sc_list) { |
| 668 | cur_channel = list_entry(cur, struct vmbus_channel, sc_list); | 667 | cur_channel = list_entry(cur, struct vmbus_channel, sc_list); |
| 669 | vmbus_close_internal(cur_channel); | ||
| 670 | if (cur_channel->rescind) { | 668 | if (cur_channel->rescind) { |
| 669 | wait_for_completion(&cur_channel->rescind_event); | ||
| 670 | mutex_lock(&vmbus_connection.channel_mutex); | ||
| 671 | vmbus_close_internal(cur_channel); | ||
| 671 | hv_process_channel_removal( | 672 | hv_process_channel_removal( |
| 672 | cur_channel->offermsg.child_relid); | 673 | cur_channel->offermsg.child_relid); |
| 674 | } else { | ||
| 675 | mutex_lock(&vmbus_connection.channel_mutex); | ||
| 676 | vmbus_close_internal(cur_channel); | ||
| 673 | } | 677 | } |
| 678 | mutex_unlock(&vmbus_connection.channel_mutex); | ||
| 674 | } | 679 | } |
| 675 | /* | 680 | /* |
| 676 | * Now close the primary. | 681 | * Now close the primary. |
| 677 | */ | 682 | */ |
| 683 | mutex_lock(&vmbus_connection.channel_mutex); | ||
| 678 | vmbus_close_internal(channel); | 684 | vmbus_close_internal(channel); |
| 679 | mutex_unlock(&vmbus_connection.channel_mutex); | 685 | mutex_unlock(&vmbus_connection.channel_mutex); |
| 680 | } | 686 | } |
diff --git a/drivers/hv/channel_mgmt.c b/drivers/hv/channel_mgmt.c index ec5454f3f4a6..c21020b69114 100644 --- a/drivers/hv/channel_mgmt.c +++ b/drivers/hv/channel_mgmt.c | |||
| @@ -333,6 +333,7 @@ static struct vmbus_channel *alloc_channel(void) | |||
| 333 | return NULL; | 333 | return NULL; |
| 334 | 334 | ||
| 335 | spin_lock_init(&channel->lock); | 335 | spin_lock_init(&channel->lock); |
| 336 | init_completion(&channel->rescind_event); | ||
| 336 | 337 | ||
| 337 | INIT_LIST_HEAD(&channel->sc_list); | 338 | INIT_LIST_HEAD(&channel->sc_list); |
| 338 | INIT_LIST_HEAD(&channel->percpu_list); | 339 | INIT_LIST_HEAD(&channel->percpu_list); |
| @@ -898,6 +899,7 @@ static void vmbus_onoffer_rescind(struct vmbus_channel_message_header *hdr) | |||
| 898 | /* | 899 | /* |
| 899 | * Now wait for offer handling to complete. | 900 | * Now wait for offer handling to complete. |
| 900 | */ | 901 | */ |
| 902 | vmbus_rescind_cleanup(channel); | ||
| 901 | while (READ_ONCE(channel->probe_done) == false) { | 903 | while (READ_ONCE(channel->probe_done) == false) { |
| 902 | /* | 904 | /* |
| 903 | * We wait here until any channel offer is currently | 905 | * We wait here until any channel offer is currently |
| @@ -913,7 +915,6 @@ static void vmbus_onoffer_rescind(struct vmbus_channel_message_header *hdr) | |||
| 913 | if (channel->device_obj) { | 915 | if (channel->device_obj) { |
| 914 | if (channel->chn_rescind_callback) { | 916 | if (channel->chn_rescind_callback) { |
| 915 | channel->chn_rescind_callback(channel); | 917 | channel->chn_rescind_callback(channel); |
| 916 | vmbus_rescind_cleanup(channel); | ||
| 917 | return; | 918 | return; |
| 918 | } | 919 | } |
| 919 | /* | 920 | /* |
| @@ -922,7 +923,6 @@ static void vmbus_onoffer_rescind(struct vmbus_channel_message_header *hdr) | |||
| 922 | */ | 923 | */ |
| 923 | dev = get_device(&channel->device_obj->device); | 924 | dev = get_device(&channel->device_obj->device); |
| 924 | if (dev) { | 925 | if (dev) { |
| 925 | vmbus_rescind_cleanup(channel); | ||
| 926 | vmbus_device_unregister(channel->device_obj); | 926 | vmbus_device_unregister(channel->device_obj); |
| 927 | put_device(dev); | 927 | put_device(dev); |
| 928 | } | 928 | } |
| @@ -936,13 +936,14 @@ static void vmbus_onoffer_rescind(struct vmbus_channel_message_header *hdr) | |||
| 936 | * 2. Then close the primary channel. | 936 | * 2. Then close the primary channel. |
| 937 | */ | 937 | */ |
| 938 | mutex_lock(&vmbus_connection.channel_mutex); | 938 | mutex_lock(&vmbus_connection.channel_mutex); |
| 939 | vmbus_rescind_cleanup(channel); | ||
| 940 | if (channel->state == CHANNEL_OPEN_STATE) { | 939 | if (channel->state == CHANNEL_OPEN_STATE) { |
| 941 | /* | 940 | /* |
| 942 | * The channel is currently not open; | 941 | * The channel is currently not open; |
| 943 | * it is safe for us to cleanup the channel. | 942 | * it is safe for us to cleanup the channel. |
| 944 | */ | 943 | */ |
| 945 | hv_process_channel_removal(rescind->child_relid); | 944 | hv_process_channel_removal(rescind->child_relid); |
| 945 | } else { | ||
| 946 | complete(&channel->rescind_event); | ||
| 946 | } | 947 | } |
| 947 | mutex_unlock(&vmbus_connection.channel_mutex); | 948 | mutex_unlock(&vmbus_connection.channel_mutex); |
| 948 | } | 949 | } |
diff --git a/drivers/hwmon/jc42.c b/drivers/hwmon/jc42.c index 5f11dc014ed6..e5234f953a6d 100644 --- a/drivers/hwmon/jc42.c +++ b/drivers/hwmon/jc42.c | |||
| @@ -22,6 +22,7 @@ | |||
| 22 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 22 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
| 23 | */ | 23 | */ |
| 24 | 24 | ||
| 25 | #include <linux/bitops.h> | ||
| 25 | #include <linux/module.h> | 26 | #include <linux/module.h> |
| 26 | #include <linux/init.h> | 27 | #include <linux/init.h> |
| 27 | #include <linux/slab.h> | 28 | #include <linux/slab.h> |
| @@ -45,6 +46,7 @@ static const unsigned short normal_i2c[] = { | |||
| 45 | #define JC42_REG_TEMP 0x05 | 46 | #define JC42_REG_TEMP 0x05 |
| 46 | #define JC42_REG_MANID 0x06 | 47 | #define JC42_REG_MANID 0x06 |
| 47 | #define JC42_REG_DEVICEID 0x07 | 48 | #define JC42_REG_DEVICEID 0x07 |
| 49 | #define JC42_REG_SMBUS 0x22 /* NXP and Atmel, possibly others? */ | ||
| 48 | 50 | ||
| 49 | /* Status bits in temperature register */ | 51 | /* Status bits in temperature register */ |
| 50 | #define JC42_ALARM_CRIT_BIT 15 | 52 | #define JC42_ALARM_CRIT_BIT 15 |
| @@ -75,6 +77,9 @@ static const unsigned short normal_i2c[] = { | |||
| 75 | #define GT_MANID 0x1c68 /* Giantec */ | 77 | #define GT_MANID 0x1c68 /* Giantec */ |
| 76 | #define GT_MANID2 0x132d /* Giantec, 2nd mfg ID */ | 78 | #define GT_MANID2 0x132d /* Giantec, 2nd mfg ID */ |
| 77 | 79 | ||
| 80 | /* SMBUS register */ | ||
| 81 | #define SMBUS_STMOUT BIT(7) /* SMBus time-out, active low */ | ||
| 82 | |||
| 78 | /* Supported chips */ | 83 | /* Supported chips */ |
| 79 | 84 | ||
| 80 | /* Analog Devices */ | 85 | /* Analog Devices */ |
| @@ -495,6 +500,22 @@ static int jc42_probe(struct i2c_client *client, const struct i2c_device_id *id) | |||
| 495 | 500 | ||
| 496 | data->extended = !!(cap & JC42_CAP_RANGE); | 501 | data->extended = !!(cap & JC42_CAP_RANGE); |
| 497 | 502 | ||
| 503 | if (device_property_read_bool(dev, "smbus-timeout-disable")) { | ||
| 504 | int smbus; | ||
| 505 | |||
| 506 | /* | ||
| 507 | * Not all chips support this register, but from a | ||
| 508 | * quick read of various datasheets no chip appears | ||
| 509 | * incompatible with the below attempt to disable | ||
| 510 | * the timeout. And the whole thing is opt-in... | ||
| 511 | */ | ||
| 512 | smbus = i2c_smbus_read_word_swapped(client, JC42_REG_SMBUS); | ||
| 513 | if (smbus < 0) | ||
| 514 | return smbus; | ||
| 515 | i2c_smbus_write_word_swapped(client, JC42_REG_SMBUS, | ||
| 516 | smbus | SMBUS_STMOUT); | ||
| 517 | } | ||
| 518 | |||
| 498 | config = i2c_smbus_read_word_swapped(client, JC42_REG_CONFIG); | 519 | config = i2c_smbus_read_word_swapped(client, JC42_REG_CONFIG); |
| 499 | if (config < 0) | 520 | if (config < 0) |
| 500 | return config; | 521 | return config; |
diff --git a/drivers/hwmon/pmbus/pmbus_core.c b/drivers/hwmon/pmbus/pmbus_core.c index 52a58b8b6e1b..a139940cd991 100644 --- a/drivers/hwmon/pmbus/pmbus_core.c +++ b/drivers/hwmon/pmbus/pmbus_core.c | |||
| @@ -21,6 +21,7 @@ | |||
| 21 | 21 | ||
| 22 | #include <linux/debugfs.h> | 22 | #include <linux/debugfs.h> |
| 23 | #include <linux/kernel.h> | 23 | #include <linux/kernel.h> |
| 24 | #include <linux/math64.h> | ||
| 24 | #include <linux/module.h> | 25 | #include <linux/module.h> |
| 25 | #include <linux/init.h> | 26 | #include <linux/init.h> |
| 26 | #include <linux/err.h> | 27 | #include <linux/err.h> |
| @@ -499,8 +500,8 @@ static long pmbus_reg2data_linear(struct pmbus_data *data, | |||
| 499 | static long pmbus_reg2data_direct(struct pmbus_data *data, | 500 | static long pmbus_reg2data_direct(struct pmbus_data *data, |
| 500 | struct pmbus_sensor *sensor) | 501 | struct pmbus_sensor *sensor) |
| 501 | { | 502 | { |
| 502 | long val = (s16) sensor->data; | 503 | s64 b, val = (s16)sensor->data; |
| 503 | long m, b, R; | 504 | s32 m, R; |
| 504 | 505 | ||
| 505 | m = data->info->m[sensor->class]; | 506 | m = data->info->m[sensor->class]; |
| 506 | b = data->info->b[sensor->class]; | 507 | b = data->info->b[sensor->class]; |
| @@ -528,11 +529,12 @@ static long pmbus_reg2data_direct(struct pmbus_data *data, | |||
| 528 | R--; | 529 | R--; |
| 529 | } | 530 | } |
| 530 | while (R < 0) { | 531 | while (R < 0) { |
| 531 | val = DIV_ROUND_CLOSEST(val, 10); | 532 | val = div_s64(val + 5LL, 10L); /* round closest */ |
| 532 | R++; | 533 | R++; |
| 533 | } | 534 | } |
| 534 | 535 | ||
| 535 | return (val - b) / m; | 536 | val = div_s64(val - b, m); |
| 537 | return clamp_val(val, LONG_MIN, LONG_MAX); | ||
| 536 | } | 538 | } |
| 537 | 539 | ||
| 538 | /* | 540 | /* |
| @@ -656,7 +658,8 @@ static u16 pmbus_data2reg_linear(struct pmbus_data *data, | |||
| 656 | static u16 pmbus_data2reg_direct(struct pmbus_data *data, | 658 | static u16 pmbus_data2reg_direct(struct pmbus_data *data, |
| 657 | struct pmbus_sensor *sensor, long val) | 659 | struct pmbus_sensor *sensor, long val) |
| 658 | { | 660 | { |
| 659 | long m, b, R; | 661 | s64 b, val64 = val; |
| 662 | s32 m, R; | ||
| 660 | 663 | ||
| 661 | m = data->info->m[sensor->class]; | 664 | m = data->info->m[sensor->class]; |
| 662 | b = data->info->b[sensor->class]; | 665 | b = data->info->b[sensor->class]; |
| @@ -673,18 +676,18 @@ static u16 pmbus_data2reg_direct(struct pmbus_data *data, | |||
| 673 | R -= 3; /* Adjust R and b for data in milli-units */ | 676 | R -= 3; /* Adjust R and b for data in milli-units */ |
| 674 | b *= 1000; | 677 | b *= 1000; |
| 675 | } | 678 | } |
| 676 | val = val * m + b; | 679 | val64 = val64 * m + b; |
| 677 | 680 | ||
| 678 | while (R > 0) { | 681 | while (R > 0) { |
| 679 | val *= 10; | 682 | val64 *= 10; |
| 680 | R--; | 683 | R--; |
| 681 | } | 684 | } |
| 682 | while (R < 0) { | 685 | while (R < 0) { |
| 683 | val = DIV_ROUND_CLOSEST(val, 10); | 686 | val64 = div_s64(val64 + 5LL, 10L); /* round closest */ |
| 684 | R++; | 687 | R++; |
| 685 | } | 688 | } |
| 686 | 689 | ||
| 687 | return val; | 690 | return (u16)clamp_val(val64, S16_MIN, S16_MAX); |
| 688 | } | 691 | } |
| 689 | 692 | ||
| 690 | static u16 pmbus_data2reg_vid(struct pmbus_data *data, | 693 | static u16 pmbus_data2reg_vid(struct pmbus_data *data, |
diff --git a/drivers/hwtracing/stm/ftrace.c b/drivers/hwtracing/stm/ftrace.c index bd126a7c6da2..7da75644c750 100644 --- a/drivers/hwtracing/stm/ftrace.c +++ b/drivers/hwtracing/stm/ftrace.c | |||
| @@ -42,9 +42,11 @@ static struct stm_ftrace { | |||
| 42 | * @len: length of the data packet | 42 | * @len: length of the data packet |
| 43 | */ | 43 | */ |
| 44 | static void notrace | 44 | static void notrace |
| 45 | stm_ftrace_write(const void *buf, unsigned int len) | 45 | stm_ftrace_write(struct trace_export *export, const void *buf, unsigned int len) |
| 46 | { | 46 | { |
| 47 | stm_source_write(&stm_ftrace.data, STM_FTRACE_CHAN, buf, len); | 47 | struct stm_ftrace *stm = container_of(export, struct stm_ftrace, ftrace); |
| 48 | |||
| 49 | stm_source_write(&stm->data, STM_FTRACE_CHAN, buf, len); | ||
| 48 | } | 50 | } |
| 49 | 51 | ||
| 50 | static int stm_ftrace_link(struct stm_source_data *data) | 52 | static int stm_ftrace_link(struct stm_source_data *data) |
diff --git a/drivers/i2c/busses/i2c-cht-wc.c b/drivers/i2c/busses/i2c-cht-wc.c index 0d05dadb2dc5..44cffad43701 100644 --- a/drivers/i2c/busses/i2c-cht-wc.c +++ b/drivers/i2c/busses/i2c-cht-wc.c | |||
| @@ -379,7 +379,7 @@ static int cht_wc_i2c_adap_i2c_remove(struct platform_device *pdev) | |||
| 379 | return 0; | 379 | return 0; |
| 380 | } | 380 | } |
| 381 | 381 | ||
| 382 | static struct platform_device_id cht_wc_i2c_adap_id_table[] = { | 382 | static const struct platform_device_id cht_wc_i2c_adap_id_table[] = { |
| 383 | { .name = "cht_wcove_ext_chgr" }, | 383 | { .name = "cht_wcove_ext_chgr" }, |
| 384 | {}, | 384 | {}, |
| 385 | }; | 385 | }; |
diff --git a/drivers/i2c/busses/i2c-i801.c b/drivers/i2c/busses/i2c-i801.c index 9e12a53ef7b8..8eac00efadc1 100644 --- a/drivers/i2c/busses/i2c-i801.c +++ b/drivers/i2c/busses/i2c-i801.c | |||
| @@ -1617,6 +1617,9 @@ static int i801_probe(struct pci_dev *dev, const struct pci_device_id *id) | |||
| 1617 | /* Default timeout in interrupt mode: 200 ms */ | 1617 | /* Default timeout in interrupt mode: 200 ms */ |
| 1618 | priv->adapter.timeout = HZ / 5; | 1618 | priv->adapter.timeout = HZ / 5; |
| 1619 | 1619 | ||
| 1620 | if (dev->irq == IRQ_NOTCONNECTED) | ||
| 1621 | priv->features &= ~FEATURE_IRQ; | ||
| 1622 | |||
| 1620 | if (priv->features & FEATURE_IRQ) { | 1623 | if (priv->features & FEATURE_IRQ) { |
| 1621 | u16 pcictl, pcists; | 1624 | u16 pcictl, pcists; |
| 1622 | 1625 | ||
diff --git a/drivers/i2c/busses/i2c-piix4.c b/drivers/i2c/busses/i2c-piix4.c index 174579d32e5f..462948e2c535 100644 --- a/drivers/i2c/busses/i2c-piix4.c +++ b/drivers/i2c/busses/i2c-piix4.c | |||
| @@ -983,7 +983,7 @@ static void piix4_adap_remove(struct i2c_adapter *adap) | |||
| 983 | 983 | ||
| 984 | if (adapdata->smba) { | 984 | if (adapdata->smba) { |
| 985 | i2c_del_adapter(adap); | 985 | i2c_del_adapter(adap); |
| 986 | if (adapdata->port == (0 << 1)) { | 986 | if (adapdata->port == (0 << piix4_port_shift_sb800)) { |
| 987 | release_region(adapdata->smba, SMBIOSIZE); | 987 | release_region(adapdata->smba, SMBIOSIZE); |
| 988 | if (adapdata->sb800_main) | 988 | if (adapdata->sb800_main) |
| 989 | release_region(SB800_PIIX4_SMB_IDX, 2); | 989 | release_region(SB800_PIIX4_SMB_IDX, 2); |
diff --git a/drivers/i2c/busses/i2c-stm32.h b/drivers/i2c/busses/i2c-stm32.h index dab51761f8c5..d4f9cef251ac 100644 --- a/drivers/i2c/busses/i2c-stm32.h +++ b/drivers/i2c/busses/i2c-stm32.h | |||
| @@ -1,10 +1,11 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * i2c-stm32.h | 3 | * i2c-stm32.h |
| 3 | * | 4 | * |
| 4 | * Copyright (C) M'boumba Cedric Madianga 2017 | 5 | * Copyright (C) M'boumba Cedric Madianga 2017 |
| 6 | * Copyright (C) STMicroelectronics 2017 | ||
| 5 | * Author: M'boumba Cedric Madianga <cedric.madianga@gmail.com> | 7 | * Author: M'boumba Cedric Madianga <cedric.madianga@gmail.com> |
| 6 | * | 8 | * |
| 7 | * License terms: GNU General Public License (GPL), version 2 | ||
| 8 | */ | 9 | */ |
| 9 | 10 | ||
| 10 | #ifndef _I2C_STM32_H | 11 | #ifndef _I2C_STM32_H |
diff --git a/drivers/i2c/busses/i2c-stm32f4.c b/drivers/i2c/busses/i2c-stm32f4.c index 4ec108496f15..47c8d00de53f 100644 --- a/drivers/i2c/busses/i2c-stm32f4.c +++ b/drivers/i2c/busses/i2c-stm32f4.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * Driver for STMicroelectronics STM32 I2C controller | 3 | * Driver for STMicroelectronics STM32 I2C controller |
| 3 | * | 4 | * |
| @@ -6,11 +7,11 @@ | |||
| 6 | * http://www.st.com/resource/en/reference_manual/DM00031020.pdf | 7 | * http://www.st.com/resource/en/reference_manual/DM00031020.pdf |
| 7 | * | 8 | * |
| 8 | * Copyright (C) M'boumba Cedric Madianga 2016 | 9 | * Copyright (C) M'boumba Cedric Madianga 2016 |
| 10 | * Copyright (C) STMicroelectronics 2017 | ||
| 9 | * Author: M'boumba Cedric Madianga <cedric.madianga@gmail.com> | 11 | * Author: M'boumba Cedric Madianga <cedric.madianga@gmail.com> |
| 10 | * | 12 | * |
| 11 | * This driver is based on i2c-st.c | 13 | * This driver is based on i2c-st.c |
| 12 | * | 14 | * |
| 13 | * License terms: GNU General Public License (GPL), version 2 | ||
| 14 | */ | 15 | */ |
| 15 | 16 | ||
| 16 | #include <linux/clk.h> | 17 | #include <linux/clk.h> |
diff --git a/drivers/i2c/busses/i2c-stm32f7.c b/drivers/i2c/busses/i2c-stm32f7.c index d4a6e9c2e9aa..b445b3bb0bb1 100644 --- a/drivers/i2c/busses/i2c-stm32f7.c +++ b/drivers/i2c/busses/i2c-stm32f7.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * Driver for STMicroelectronics STM32F7 I2C controller | 3 | * Driver for STMicroelectronics STM32F7 I2C controller |
| 3 | * | 4 | * |
| @@ -7,11 +8,11 @@ | |||
| 7 | * http://www.st.com/resource/en/reference_manual/dm00124865.pdf | 8 | * http://www.st.com/resource/en/reference_manual/dm00124865.pdf |
| 8 | * | 9 | * |
| 9 | * Copyright (C) M'boumba Cedric Madianga 2017 | 10 | * Copyright (C) M'boumba Cedric Madianga 2017 |
| 11 | * Copyright (C) STMicroelectronics 2017 | ||
| 10 | * Author: M'boumba Cedric Madianga <cedric.madianga@gmail.com> | 12 | * Author: M'boumba Cedric Madianga <cedric.madianga@gmail.com> |
| 11 | * | 13 | * |
| 12 | * This driver is based on i2c-stm32f4.c | 14 | * This driver is based on i2c-stm32f4.c |
| 13 | * | 15 | * |
| 14 | * License terms: GNU General Public License (GPL), version 2 | ||
| 15 | */ | 16 | */ |
| 16 | #include <linux/clk.h> | 17 | #include <linux/clk.h> |
| 17 | #include <linux/delay.h> | 18 | #include <linux/delay.h> |
diff --git a/drivers/i2c/i2c-boardinfo.c b/drivers/i2c/i2c-boardinfo.c index 31186ead5a40..509a6007cdf6 100644 --- a/drivers/i2c/i2c-boardinfo.c +++ b/drivers/i2c/i2c-boardinfo.c | |||
| @@ -86,6 +86,7 @@ int i2c_register_board_info(int busnum, struct i2c_board_info const *info, unsig | |||
| 86 | property_entries_dup(info->properties); | 86 | property_entries_dup(info->properties); |
| 87 | if (IS_ERR(devinfo->board_info.properties)) { | 87 | if (IS_ERR(devinfo->board_info.properties)) { |
| 88 | status = PTR_ERR(devinfo->board_info.properties); | 88 | status = PTR_ERR(devinfo->board_info.properties); |
| 89 | kfree(devinfo); | ||
| 89 | break; | 90 | break; |
| 90 | } | 91 | } |
| 91 | } | 92 | } |
| @@ -98,6 +99,7 @@ int i2c_register_board_info(int busnum, struct i2c_board_info const *info, unsig | |||
| 98 | GFP_KERNEL); | 99 | GFP_KERNEL); |
| 99 | if (!devinfo->board_info.resources) { | 100 | if (!devinfo->board_info.resources) { |
| 100 | status = -ENOMEM; | 101 | status = -ENOMEM; |
| 102 | kfree(devinfo); | ||
| 101 | break; | 103 | break; |
| 102 | } | 104 | } |
| 103 | } | 105 | } |
diff --git a/drivers/iio/adc/cpcap-adc.c b/drivers/iio/adc/cpcap-adc.c index 3576ec73ec23..9ad60421d360 100644 --- a/drivers/iio/adc/cpcap-adc.c +++ b/drivers/iio/adc/cpcap-adc.c | |||
| @@ -1011,7 +1011,7 @@ static int cpcap_adc_probe(struct platform_device *pdev) | |||
| 1011 | platform_set_drvdata(pdev, indio_dev); | 1011 | platform_set_drvdata(pdev, indio_dev); |
| 1012 | 1012 | ||
| 1013 | ddata->irq = platform_get_irq_byname(pdev, "adcdone"); | 1013 | ddata->irq = platform_get_irq_byname(pdev, "adcdone"); |
| 1014 | if (!ddata->irq) | 1014 | if (ddata->irq < 0) |
| 1015 | return -ENODEV; | 1015 | return -ENODEV; |
| 1016 | 1016 | ||
| 1017 | error = devm_request_threaded_irq(&pdev->dev, ddata->irq, NULL, | 1017 | error = devm_request_threaded_irq(&pdev->dev, ddata->irq, NULL, |
diff --git a/drivers/iio/adc/meson_saradc.c b/drivers/iio/adc/meson_saradc.c index 9c6932ffc0af..36047147ce7c 100644 --- a/drivers/iio/adc/meson_saradc.c +++ b/drivers/iio/adc/meson_saradc.c | |||
| @@ -221,8 +221,10 @@ enum meson_sar_adc_chan7_mux_sel { | |||
| 221 | 221 | ||
| 222 | struct meson_sar_adc_data { | 222 | struct meson_sar_adc_data { |
| 223 | bool has_bl30_integration; | 223 | bool has_bl30_integration; |
| 224 | u32 bandgap_reg; | ||
| 224 | unsigned int resolution; | 225 | unsigned int resolution; |
| 225 | const char *name; | 226 | const char *name; |
| 227 | const struct regmap_config *regmap_config; | ||
| 226 | }; | 228 | }; |
| 227 | 229 | ||
| 228 | struct meson_sar_adc_priv { | 230 | struct meson_sar_adc_priv { |
| @@ -242,13 +244,20 @@ struct meson_sar_adc_priv { | |||
| 242 | int calibscale; | 244 | int calibscale; |
| 243 | }; | 245 | }; |
| 244 | 246 | ||
| 245 | static const struct regmap_config meson_sar_adc_regmap_config = { | 247 | static const struct regmap_config meson_sar_adc_regmap_config_gxbb = { |
| 246 | .reg_bits = 8, | 248 | .reg_bits = 8, |
| 247 | .val_bits = 32, | 249 | .val_bits = 32, |
| 248 | .reg_stride = 4, | 250 | .reg_stride = 4, |
| 249 | .max_register = MESON_SAR_ADC_REG13, | 251 | .max_register = MESON_SAR_ADC_REG13, |
| 250 | }; | 252 | }; |
| 251 | 253 | ||
| 254 | static const struct regmap_config meson_sar_adc_regmap_config_meson8 = { | ||
| 255 | .reg_bits = 8, | ||
| 256 | .val_bits = 32, | ||
| 257 | .reg_stride = 4, | ||
| 258 | .max_register = MESON_SAR_ADC_DELTA_10, | ||
| 259 | }; | ||
| 260 | |||
| 252 | static unsigned int meson_sar_adc_get_fifo_count(struct iio_dev *indio_dev) | 261 | static unsigned int meson_sar_adc_get_fifo_count(struct iio_dev *indio_dev) |
| 253 | { | 262 | { |
| 254 | struct meson_sar_adc_priv *priv = iio_priv(indio_dev); | 263 | struct meson_sar_adc_priv *priv = iio_priv(indio_dev); |
| @@ -600,7 +609,7 @@ static int meson_sar_adc_clk_init(struct iio_dev *indio_dev, | |||
| 600 | init.num_parents = 1; | 609 | init.num_parents = 1; |
| 601 | 610 | ||
| 602 | priv->clk_gate.reg = base + MESON_SAR_ADC_REG3; | 611 | priv->clk_gate.reg = base + MESON_SAR_ADC_REG3; |
| 603 | priv->clk_gate.bit_idx = fls(MESON_SAR_ADC_REG3_CLK_EN); | 612 | priv->clk_gate.bit_idx = __ffs(MESON_SAR_ADC_REG3_CLK_EN); |
| 604 | priv->clk_gate.hw.init = &init; | 613 | priv->clk_gate.hw.init = &init; |
| 605 | 614 | ||
| 606 | priv->adc_clk = devm_clk_register(&indio_dev->dev, &priv->clk_gate.hw); | 615 | priv->adc_clk = devm_clk_register(&indio_dev->dev, &priv->clk_gate.hw); |
| @@ -685,6 +694,20 @@ static int meson_sar_adc_init(struct iio_dev *indio_dev) | |||
| 685 | return 0; | 694 | return 0; |
| 686 | } | 695 | } |
| 687 | 696 | ||
| 697 | static void meson_sar_adc_set_bandgap(struct iio_dev *indio_dev, bool on_off) | ||
| 698 | { | ||
| 699 | struct meson_sar_adc_priv *priv = iio_priv(indio_dev); | ||
| 700 | u32 enable_mask; | ||
| 701 | |||
| 702 | if (priv->data->bandgap_reg == MESON_SAR_ADC_REG11) | ||
| 703 | enable_mask = MESON_SAR_ADC_REG11_BANDGAP_EN; | ||
| 704 | else | ||
| 705 | enable_mask = MESON_SAR_ADC_DELTA_10_TS_VBG_EN; | ||
| 706 | |||
| 707 | regmap_update_bits(priv->regmap, priv->data->bandgap_reg, enable_mask, | ||
| 708 | on_off ? enable_mask : 0); | ||
| 709 | } | ||
| 710 | |||
| 688 | static int meson_sar_adc_hw_enable(struct iio_dev *indio_dev) | 711 | static int meson_sar_adc_hw_enable(struct iio_dev *indio_dev) |
| 689 | { | 712 | { |
| 690 | struct meson_sar_adc_priv *priv = iio_priv(indio_dev); | 713 | struct meson_sar_adc_priv *priv = iio_priv(indio_dev); |
| @@ -717,9 +740,9 @@ static int meson_sar_adc_hw_enable(struct iio_dev *indio_dev) | |||
| 717 | regval = FIELD_PREP(MESON_SAR_ADC_REG0_FIFO_CNT_IRQ_MASK, 1); | 740 | regval = FIELD_PREP(MESON_SAR_ADC_REG0_FIFO_CNT_IRQ_MASK, 1); |
| 718 | regmap_update_bits(priv->regmap, MESON_SAR_ADC_REG0, | 741 | regmap_update_bits(priv->regmap, MESON_SAR_ADC_REG0, |
| 719 | MESON_SAR_ADC_REG0_FIFO_CNT_IRQ_MASK, regval); | 742 | MESON_SAR_ADC_REG0_FIFO_CNT_IRQ_MASK, regval); |
| 720 | regmap_update_bits(priv->regmap, MESON_SAR_ADC_REG11, | 743 | |
| 721 | MESON_SAR_ADC_REG11_BANDGAP_EN, | 744 | meson_sar_adc_set_bandgap(indio_dev, true); |
| 722 | MESON_SAR_ADC_REG11_BANDGAP_EN); | 745 | |
| 723 | regmap_update_bits(priv->regmap, MESON_SAR_ADC_REG3, | 746 | regmap_update_bits(priv->regmap, MESON_SAR_ADC_REG3, |
| 724 | MESON_SAR_ADC_REG3_ADC_EN, | 747 | MESON_SAR_ADC_REG3_ADC_EN, |
| 725 | MESON_SAR_ADC_REG3_ADC_EN); | 748 | MESON_SAR_ADC_REG3_ADC_EN); |
| @@ -739,8 +762,7 @@ static int meson_sar_adc_hw_enable(struct iio_dev *indio_dev) | |||
| 739 | err_adc_clk: | 762 | err_adc_clk: |
| 740 | regmap_update_bits(priv->regmap, MESON_SAR_ADC_REG3, | 763 | regmap_update_bits(priv->regmap, MESON_SAR_ADC_REG3, |
| 741 | MESON_SAR_ADC_REG3_ADC_EN, 0); | 764 | MESON_SAR_ADC_REG3_ADC_EN, 0); |
| 742 | regmap_update_bits(priv->regmap, MESON_SAR_ADC_REG11, | 765 | meson_sar_adc_set_bandgap(indio_dev, false); |
| 743 | MESON_SAR_ADC_REG11_BANDGAP_EN, 0); | ||
| 744 | clk_disable_unprepare(priv->sana_clk); | 766 | clk_disable_unprepare(priv->sana_clk); |
| 745 | err_sana_clk: | 767 | err_sana_clk: |
| 746 | clk_disable_unprepare(priv->core_clk); | 768 | clk_disable_unprepare(priv->core_clk); |
| @@ -765,8 +787,8 @@ static int meson_sar_adc_hw_disable(struct iio_dev *indio_dev) | |||
| 765 | 787 | ||
| 766 | regmap_update_bits(priv->regmap, MESON_SAR_ADC_REG3, | 788 | regmap_update_bits(priv->regmap, MESON_SAR_ADC_REG3, |
| 767 | MESON_SAR_ADC_REG3_ADC_EN, 0); | 789 | MESON_SAR_ADC_REG3_ADC_EN, 0); |
| 768 | regmap_update_bits(priv->regmap, MESON_SAR_ADC_REG11, | 790 | |
| 769 | MESON_SAR_ADC_REG11_BANDGAP_EN, 0); | 791 | meson_sar_adc_set_bandgap(indio_dev, false); |
| 770 | 792 | ||
| 771 | clk_disable_unprepare(priv->sana_clk); | 793 | clk_disable_unprepare(priv->sana_clk); |
| 772 | clk_disable_unprepare(priv->core_clk); | 794 | clk_disable_unprepare(priv->core_clk); |
| @@ -844,30 +866,40 @@ static const struct iio_info meson_sar_adc_iio_info = { | |||
| 844 | 866 | ||
| 845 | static const struct meson_sar_adc_data meson_sar_adc_meson8_data = { | 867 | static const struct meson_sar_adc_data meson_sar_adc_meson8_data = { |
| 846 | .has_bl30_integration = false, | 868 | .has_bl30_integration = false, |
| 869 | .bandgap_reg = MESON_SAR_ADC_DELTA_10, | ||
| 870 | .regmap_config = &meson_sar_adc_regmap_config_meson8, | ||
| 847 | .resolution = 10, | 871 | .resolution = 10, |
| 848 | .name = "meson-meson8-saradc", | 872 | .name = "meson-meson8-saradc", |
| 849 | }; | 873 | }; |
| 850 | 874 | ||
| 851 | static const struct meson_sar_adc_data meson_sar_adc_meson8b_data = { | 875 | static const struct meson_sar_adc_data meson_sar_adc_meson8b_data = { |
| 852 | .has_bl30_integration = false, | 876 | .has_bl30_integration = false, |
| 877 | .bandgap_reg = MESON_SAR_ADC_DELTA_10, | ||
| 878 | .regmap_config = &meson_sar_adc_regmap_config_meson8, | ||
| 853 | .resolution = 10, | 879 | .resolution = 10, |
| 854 | .name = "meson-meson8b-saradc", | 880 | .name = "meson-meson8b-saradc", |
| 855 | }; | 881 | }; |
| 856 | 882 | ||
| 857 | static const struct meson_sar_adc_data meson_sar_adc_gxbb_data = { | 883 | static const struct meson_sar_adc_data meson_sar_adc_gxbb_data = { |
| 858 | .has_bl30_integration = true, | 884 | .has_bl30_integration = true, |
| 885 | .bandgap_reg = MESON_SAR_ADC_REG11, | ||
| 886 | .regmap_config = &meson_sar_adc_regmap_config_gxbb, | ||
| 859 | .resolution = 10, | 887 | .resolution = 10, |
| 860 | .name = "meson-gxbb-saradc", | 888 | .name = "meson-gxbb-saradc", |
| 861 | }; | 889 | }; |
| 862 | 890 | ||
| 863 | static const struct meson_sar_adc_data meson_sar_adc_gxl_data = { | 891 | static const struct meson_sar_adc_data meson_sar_adc_gxl_data = { |
| 864 | .has_bl30_integration = true, | 892 | .has_bl30_integration = true, |
| 893 | .bandgap_reg = MESON_SAR_ADC_REG11, | ||
| 894 | .regmap_config = &meson_sar_adc_regmap_config_gxbb, | ||
| 865 | .resolution = 12, | 895 | .resolution = 12, |
| 866 | .name = "meson-gxl-saradc", | 896 | .name = "meson-gxl-saradc", |
| 867 | }; | 897 | }; |
| 868 | 898 | ||
| 869 | static const struct meson_sar_adc_data meson_sar_adc_gxm_data = { | 899 | static const struct meson_sar_adc_data meson_sar_adc_gxm_data = { |
| 870 | .has_bl30_integration = true, | 900 | .has_bl30_integration = true, |
| 901 | .bandgap_reg = MESON_SAR_ADC_REG11, | ||
| 902 | .regmap_config = &meson_sar_adc_regmap_config_gxbb, | ||
| 871 | .resolution = 12, | 903 | .resolution = 12, |
| 872 | .name = "meson-gxm-saradc", | 904 | .name = "meson-gxm-saradc", |
| 873 | }; | 905 | }; |
| @@ -945,7 +977,7 @@ static int meson_sar_adc_probe(struct platform_device *pdev) | |||
| 945 | return ret; | 977 | return ret; |
| 946 | 978 | ||
| 947 | priv->regmap = devm_regmap_init_mmio(&pdev->dev, base, | 979 | priv->regmap = devm_regmap_init_mmio(&pdev->dev, base, |
| 948 | &meson_sar_adc_regmap_config); | 980 | priv->data->regmap_config); |
| 949 | if (IS_ERR(priv->regmap)) | 981 | if (IS_ERR(priv->regmap)) |
| 950 | return PTR_ERR(priv->regmap); | 982 | return PTR_ERR(priv->regmap); |
| 951 | 983 | ||
diff --git a/drivers/iio/health/max30102.c b/drivers/iio/health/max30102.c index 203ffb9cad6a..147a8c14235f 100644 --- a/drivers/iio/health/max30102.c +++ b/drivers/iio/health/max30102.c | |||
| @@ -371,7 +371,7 @@ static int max30102_read_raw(struct iio_dev *indio_dev, | |||
| 371 | mutex_unlock(&indio_dev->mlock); | 371 | mutex_unlock(&indio_dev->mlock); |
| 372 | break; | 372 | break; |
| 373 | case IIO_CHAN_INFO_SCALE: | 373 | case IIO_CHAN_INFO_SCALE: |
| 374 | *val = 1; /* 0.0625 */ | 374 | *val = 1000; /* 62.5 */ |
| 375 | *val2 = 16; | 375 | *val2 = 16; |
| 376 | ret = IIO_VAL_FRACTIONAL; | 376 | ret = IIO_VAL_FRACTIONAL; |
| 377 | break; | 377 | break; |
diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c index 9c4cfd19b739..2f0998ebeed2 100644 --- a/drivers/iio/industrialio-core.c +++ b/drivers/iio/industrialio-core.c | |||
| @@ -631,7 +631,7 @@ static ssize_t __iio_format_value(char *buf, size_t len, unsigned int type, | |||
| 631 | * iio_format_value() - Formats a IIO value into its string representation | 631 | * iio_format_value() - Formats a IIO value into its string representation |
| 632 | * @buf: The buffer to which the formatted value gets written | 632 | * @buf: The buffer to which the formatted value gets written |
| 633 | * which is assumed to be big enough (i.e. PAGE_SIZE). | 633 | * which is assumed to be big enough (i.e. PAGE_SIZE). |
| 634 | * @type: One of the IIO_VAL_... constants. This decides how the val | 634 | * @type: One of the IIO_VAL_* constants. This decides how the val |
| 635 | * and val2 parameters are formatted. | 635 | * and val2 parameters are formatted. |
| 636 | * @size: Number of IIO value entries contained in vals | 636 | * @size: Number of IIO value entries contained in vals |
| 637 | * @vals: Pointer to the values, exact meaning depends on the | 637 | * @vals: Pointer to the values, exact meaning depends on the |
| @@ -639,7 +639,7 @@ static ssize_t __iio_format_value(char *buf, size_t len, unsigned int type, | |||
| 639 | * | 639 | * |
| 640 | * Return: 0 by default, a negative number on failure or the | 640 | * Return: 0 by default, a negative number on failure or the |
| 641 | * total number of characters written for a type that belongs | 641 | * total number of characters written for a type that belongs |
| 642 | * to the IIO_VAL_... constant. | 642 | * to the IIO_VAL_* constant. |
| 643 | */ | 643 | */ |
| 644 | ssize_t iio_format_value(char *buf, unsigned int type, int size, int *vals) | 644 | ssize_t iio_format_value(char *buf, unsigned int type, int size, int *vals) |
| 645 | { | 645 | { |
diff --git a/drivers/iio/proximity/sx9500.c b/drivers/iio/proximity/sx9500.c index 53c5d653e780..df23dbcc030a 100644 --- a/drivers/iio/proximity/sx9500.c +++ b/drivers/iio/proximity/sx9500.c | |||
| @@ -869,6 +869,7 @@ static int sx9500_init_device(struct iio_dev *indio_dev) | |||
| 869 | static void sx9500_gpio_probe(struct i2c_client *client, | 869 | static void sx9500_gpio_probe(struct i2c_client *client, |
| 870 | struct sx9500_data *data) | 870 | struct sx9500_data *data) |
| 871 | { | 871 | { |
| 872 | struct gpio_desc *gpiod_int; | ||
| 872 | struct device *dev; | 873 | struct device *dev; |
| 873 | 874 | ||
| 874 | if (!client) | 875 | if (!client) |
| @@ -876,6 +877,14 @@ static void sx9500_gpio_probe(struct i2c_client *client, | |||
| 876 | 877 | ||
| 877 | dev = &client->dev; | 878 | dev = &client->dev; |
| 878 | 879 | ||
| 880 | if (client->irq <= 0) { | ||
| 881 | gpiod_int = devm_gpiod_get(dev, SX9500_GPIO_INT, GPIOD_IN); | ||
| 882 | if (IS_ERR(gpiod_int)) | ||
| 883 | dev_err(dev, "gpio get irq failed\n"); | ||
| 884 | else | ||
| 885 | client->irq = gpiod_to_irq(gpiod_int); | ||
| 886 | } | ||
| 887 | |||
| 879 | data->gpiod_rst = devm_gpiod_get(dev, SX9500_GPIO_RESET, GPIOD_OUT_HIGH); | 888 | data->gpiod_rst = devm_gpiod_get(dev, SX9500_GPIO_RESET, GPIOD_OUT_HIGH); |
| 880 | if (IS_ERR(data->gpiod_rst)) { | 889 | if (IS_ERR(data->gpiod_rst)) { |
| 881 | dev_warn(dev, "gpio get reset pin failed\n"); | 890 | dev_warn(dev, "gpio get reset pin failed\n"); |
diff --git a/drivers/infiniband/Kconfig b/drivers/infiniband/Kconfig index 98ac46ed7214..cbf186522016 100644 --- a/drivers/infiniband/Kconfig +++ b/drivers/infiniband/Kconfig | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | menuconfig INFINIBAND | 1 | menuconfig INFINIBAND |
| 2 | tristate "InfiniBand support" | 2 | tristate "InfiniBand support" |
| 3 | depends on HAS_IOMEM | 3 | depends on HAS_IOMEM && HAS_DMA |
| 4 | depends on NET | 4 | depends on NET |
| 5 | depends on INET | 5 | depends on INET |
| 6 | depends on m || IPV6 != m | 6 | depends on m || IPV6 != m |
diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c index 1fdb473b5df7..6294a7001d33 100644 --- a/drivers/infiniband/core/cma.c +++ b/drivers/infiniband/core/cma.c | |||
| @@ -801,6 +801,7 @@ struct rdma_cm_id *rdma_create_id(struct net *net, | |||
| 801 | INIT_LIST_HEAD(&id_priv->mc_list); | 801 | INIT_LIST_HEAD(&id_priv->mc_list); |
| 802 | get_random_bytes(&id_priv->seq_num, sizeof id_priv->seq_num); | 802 | get_random_bytes(&id_priv->seq_num, sizeof id_priv->seq_num); |
| 803 | id_priv->id.route.addr.dev_addr.net = get_net(net); | 803 | id_priv->id.route.addr.dev_addr.net = get_net(net); |
| 804 | id_priv->seq_num &= 0x00ffffff; | ||
| 804 | 805 | ||
| 805 | return &id_priv->id; | 806 | return &id_priv->id; |
| 806 | } | 807 | } |
| @@ -4457,7 +4458,7 @@ out: | |||
| 4457 | return skb->len; | 4458 | return skb->len; |
| 4458 | } | 4459 | } |
| 4459 | 4460 | ||
| 4460 | static const struct rdma_nl_cbs cma_cb_table[] = { | 4461 | static const struct rdma_nl_cbs cma_cb_table[RDMA_NL_RDMA_CM_NUM_OPS] = { |
| 4461 | [RDMA_NL_RDMA_CM_ID_STATS] = { .dump = cma_get_id_stats}, | 4462 | [RDMA_NL_RDMA_CM_ID_STATS] = { .dump = cma_get_id_stats}, |
| 4462 | }; | 4463 | }; |
| 4463 | 4464 | ||
diff --git a/drivers/infiniband/core/device.c b/drivers/infiniband/core/device.c index 84fc32a2c8b3..30914f3baa5f 100644 --- a/drivers/infiniband/core/device.c +++ b/drivers/infiniband/core/device.c | |||
| @@ -1146,7 +1146,7 @@ struct net_device *ib_get_net_dev_by_params(struct ib_device *dev, | |||
| 1146 | } | 1146 | } |
| 1147 | EXPORT_SYMBOL(ib_get_net_dev_by_params); | 1147 | EXPORT_SYMBOL(ib_get_net_dev_by_params); |
| 1148 | 1148 | ||
| 1149 | static const struct rdma_nl_cbs ibnl_ls_cb_table[] = { | 1149 | static const struct rdma_nl_cbs ibnl_ls_cb_table[RDMA_NL_LS_NUM_OPS] = { |
| 1150 | [RDMA_NL_LS_OP_RESOLVE] = { | 1150 | [RDMA_NL_LS_OP_RESOLVE] = { |
| 1151 | .doit = ib_nl_handle_resolve_resp, | 1151 | .doit = ib_nl_handle_resolve_resp, |
| 1152 | .flags = RDMA_NL_ADMIN_PERM, | 1152 | .flags = RDMA_NL_ADMIN_PERM, |
| @@ -1253,5 +1253,5 @@ static void __exit ib_core_cleanup(void) | |||
| 1253 | 1253 | ||
| 1254 | MODULE_ALIAS_RDMA_NETLINK(RDMA_NL_LS, 4); | 1254 | MODULE_ALIAS_RDMA_NETLINK(RDMA_NL_LS, 4); |
| 1255 | 1255 | ||
| 1256 | module_init(ib_core_init); | 1256 | subsys_initcall(ib_core_init); |
| 1257 | module_exit(ib_core_cleanup); | 1257 | module_exit(ib_core_cleanup); |
diff --git a/drivers/infiniband/core/iwcm.c b/drivers/infiniband/core/iwcm.c index e9e189ec7502..5d676cff41f4 100644 --- a/drivers/infiniband/core/iwcm.c +++ b/drivers/infiniband/core/iwcm.c | |||
| @@ -80,7 +80,7 @@ const char *__attribute_const__ iwcm_reject_msg(int reason) | |||
| 80 | } | 80 | } |
| 81 | EXPORT_SYMBOL(iwcm_reject_msg); | 81 | EXPORT_SYMBOL(iwcm_reject_msg); |
| 82 | 82 | ||
| 83 | static struct rdma_nl_cbs iwcm_nl_cb_table[] = { | 83 | static struct rdma_nl_cbs iwcm_nl_cb_table[RDMA_NL_IWPM_NUM_OPS] = { |
| 84 | [RDMA_NL_IWPM_REG_PID] = {.dump = iwpm_register_pid_cb}, | 84 | [RDMA_NL_IWPM_REG_PID] = {.dump = iwpm_register_pid_cb}, |
| 85 | [RDMA_NL_IWPM_ADD_MAPPING] = {.dump = iwpm_add_mapping_cb}, | 85 | [RDMA_NL_IWPM_ADD_MAPPING] = {.dump = iwpm_add_mapping_cb}, |
| 86 | [RDMA_NL_IWPM_QUERY_MAPPING] = {.dump = iwpm_add_and_query_mapping_cb}, | 86 | [RDMA_NL_IWPM_QUERY_MAPPING] = {.dump = iwpm_add_and_query_mapping_cb}, |
diff --git a/drivers/infiniband/core/nldev.c b/drivers/infiniband/core/nldev.c index 2fae850a3eff..9a05245a1acf 100644 --- a/drivers/infiniband/core/nldev.c +++ b/drivers/infiniband/core/nldev.c | |||
| @@ -303,7 +303,7 @@ out: cb->args[0] = idx; | |||
| 303 | return skb->len; | 303 | return skb->len; |
| 304 | } | 304 | } |
| 305 | 305 | ||
| 306 | static const struct rdma_nl_cbs nldev_cb_table[] = { | 306 | static const struct rdma_nl_cbs nldev_cb_table[RDMA_NLDEV_NUM_OPS] = { |
| 307 | [RDMA_NLDEV_CMD_GET] = { | 307 | [RDMA_NLDEV_CMD_GET] = { |
| 308 | .doit = nldev_get_doit, | 308 | .doit = nldev_get_doit, |
| 309 | .dump = nldev_get_dumpit, | 309 | .dump = nldev_get_dumpit, |
diff --git a/drivers/infiniband/core/security.c b/drivers/infiniband/core/security.c index 23278ed5be45..feafdb961c48 100644 --- a/drivers/infiniband/core/security.c +++ b/drivers/infiniband/core/security.c | |||
| @@ -417,8 +417,17 @@ void ib_close_shared_qp_security(struct ib_qp_security *sec) | |||
| 417 | 417 | ||
| 418 | int ib_create_qp_security(struct ib_qp *qp, struct ib_device *dev) | 418 | int ib_create_qp_security(struct ib_qp *qp, struct ib_device *dev) |
| 419 | { | 419 | { |
| 420 | u8 i = rdma_start_port(dev); | ||
| 421 | bool is_ib = false; | ||
| 420 | int ret; | 422 | int ret; |
| 421 | 423 | ||
| 424 | while (i <= rdma_end_port(dev) && !is_ib) | ||
| 425 | is_ib = rdma_protocol_ib(dev, i++); | ||
| 426 | |||
| 427 | /* If this isn't an IB device don't create the security context */ | ||
| 428 | if (!is_ib) | ||
| 429 | return 0; | ||
| 430 | |||
| 422 | qp->qp_sec = kzalloc(sizeof(*qp->qp_sec), GFP_KERNEL); | 431 | qp->qp_sec = kzalloc(sizeof(*qp->qp_sec), GFP_KERNEL); |
| 423 | if (!qp->qp_sec) | 432 | if (!qp->qp_sec) |
| 424 | return -ENOMEM; | 433 | return -ENOMEM; |
| @@ -441,6 +450,10 @@ EXPORT_SYMBOL(ib_create_qp_security); | |||
| 441 | 450 | ||
| 442 | void ib_destroy_qp_security_begin(struct ib_qp_security *sec) | 451 | void ib_destroy_qp_security_begin(struct ib_qp_security *sec) |
| 443 | { | 452 | { |
| 453 | /* Return if not IB */ | ||
| 454 | if (!sec) | ||
| 455 | return; | ||
| 456 | |||
| 444 | mutex_lock(&sec->mutex); | 457 | mutex_lock(&sec->mutex); |
| 445 | 458 | ||
| 446 | /* Remove the QP from the lists so it won't get added to | 459 | /* Remove the QP from the lists so it won't get added to |
| @@ -470,6 +483,10 @@ void ib_destroy_qp_security_abort(struct ib_qp_security *sec) | |||
| 470 | int ret; | 483 | int ret; |
| 471 | int i; | 484 | int i; |
| 472 | 485 | ||
| 486 | /* Return if not IB */ | ||
| 487 | if (!sec) | ||
| 488 | return; | ||
| 489 | |||
| 473 | /* If a concurrent cache update is in progress this | 490 | /* If a concurrent cache update is in progress this |
| 474 | * QP security could be marked for an error state | 491 | * QP security could be marked for an error state |
| 475 | * transition. Wait for this to complete. | 492 | * transition. Wait for this to complete. |
| @@ -505,6 +522,10 @@ void ib_destroy_qp_security_end(struct ib_qp_security *sec) | |||
| 505 | { | 522 | { |
| 506 | int i; | 523 | int i; |
| 507 | 524 | ||
| 525 | /* Return if not IB */ | ||
| 526 | if (!sec) | ||
| 527 | return; | ||
| 528 | |||
| 508 | /* If a concurrent cache update is occurring we must | 529 | /* If a concurrent cache update is occurring we must |
| 509 | * wait until this QP security structure is processed | 530 | * wait until this QP security structure is processed |
| 510 | * in the QP to error flow before destroying it because | 531 | * in the QP to error flow before destroying it because |
| @@ -557,7 +578,7 @@ int ib_security_modify_qp(struct ib_qp *qp, | |||
| 557 | { | 578 | { |
| 558 | int ret = 0; | 579 | int ret = 0; |
| 559 | struct ib_ports_pkeys *tmp_pps; | 580 | struct ib_ports_pkeys *tmp_pps; |
| 560 | struct ib_ports_pkeys *new_pps; | 581 | struct ib_ports_pkeys *new_pps = NULL; |
| 561 | struct ib_qp *real_qp = qp->real_qp; | 582 | struct ib_qp *real_qp = qp->real_qp; |
| 562 | bool special_qp = (real_qp->qp_type == IB_QPT_SMI || | 583 | bool special_qp = (real_qp->qp_type == IB_QPT_SMI || |
| 563 | real_qp->qp_type == IB_QPT_GSI || | 584 | real_qp->qp_type == IB_QPT_GSI || |
| @@ -565,18 +586,27 @@ int ib_security_modify_qp(struct ib_qp *qp, | |||
| 565 | bool pps_change = ((qp_attr_mask & (IB_QP_PKEY_INDEX | IB_QP_PORT)) || | 586 | bool pps_change = ((qp_attr_mask & (IB_QP_PKEY_INDEX | IB_QP_PORT)) || |
| 566 | (qp_attr_mask & IB_QP_ALT_PATH)); | 587 | (qp_attr_mask & IB_QP_ALT_PATH)); |
| 567 | 588 | ||
| 589 | WARN_ONCE((qp_attr_mask & IB_QP_PORT && | ||
| 590 | rdma_protocol_ib(real_qp->device, qp_attr->port_num) && | ||
| 591 | !real_qp->qp_sec), | ||
| 592 | "%s: QP security is not initialized for IB QP: %d\n", | ||
| 593 | __func__, real_qp->qp_num); | ||
| 594 | |||
| 568 | /* The port/pkey settings are maintained only for the real QP. Open | 595 | /* The port/pkey settings are maintained only for the real QP. Open |
| 569 | * handles on the real QP will be in the shared_qp_list. When | 596 | * handles on the real QP will be in the shared_qp_list. When |
| 570 | * enforcing security on the real QP all the shared QPs will be | 597 | * enforcing security on the real QP all the shared QPs will be |
| 571 | * checked as well. | 598 | * checked as well. |
| 572 | */ | 599 | */ |
| 573 | 600 | ||
| 574 | if (pps_change && !special_qp) { | 601 | if (pps_change && !special_qp && real_qp->qp_sec) { |
| 575 | mutex_lock(&real_qp->qp_sec->mutex); | 602 | mutex_lock(&real_qp->qp_sec->mutex); |
| 576 | new_pps = get_new_pps(real_qp, | 603 | new_pps = get_new_pps(real_qp, |
| 577 | qp_attr, | 604 | qp_attr, |
| 578 | qp_attr_mask); | 605 | qp_attr_mask); |
| 579 | 606 | if (!new_pps) { | |
| 607 | mutex_unlock(&real_qp->qp_sec->mutex); | ||
| 608 | return -ENOMEM; | ||
| 609 | } | ||
| 580 | /* Add this QP to the lists for the new port | 610 | /* Add this QP to the lists for the new port |
| 581 | * and pkey settings before checking for permission | 611 | * and pkey settings before checking for permission |
| 582 | * in case there is a concurrent cache update | 612 | * in case there is a concurrent cache update |
| @@ -600,7 +630,7 @@ int ib_security_modify_qp(struct ib_qp *qp, | |||
| 600 | qp_attr_mask, | 630 | qp_attr_mask, |
| 601 | udata); | 631 | udata); |
| 602 | 632 | ||
| 603 | if (pps_change && !special_qp) { | 633 | if (new_pps) { |
| 604 | /* Clean up the lists and free the appropriate | 634 | /* Clean up the lists and free the appropriate |
| 605 | * ports_pkeys structure. | 635 | * ports_pkeys structure. |
| 606 | */ | 636 | */ |
| @@ -631,6 +661,9 @@ int ib_security_pkey_access(struct ib_device *dev, | |||
| 631 | u16 pkey; | 661 | u16 pkey; |
| 632 | int ret; | 662 | int ret; |
| 633 | 663 | ||
| 664 | if (!rdma_protocol_ib(dev, port_num)) | ||
| 665 | return 0; | ||
| 666 | |||
| 634 | ret = ib_get_cached_pkey(dev, port_num, pkey_index, &pkey); | 667 | ret = ib_get_cached_pkey(dev, port_num, pkey_index, &pkey); |
| 635 | if (ret) | 668 | if (ret) |
| 636 | return ret; | 669 | return ret; |
| @@ -665,6 +698,9 @@ int ib_mad_agent_security_setup(struct ib_mad_agent *agent, | |||
| 665 | { | 698 | { |
| 666 | int ret; | 699 | int ret; |
| 667 | 700 | ||
| 701 | if (!rdma_protocol_ib(agent->device, agent->port_num)) | ||
| 702 | return 0; | ||
| 703 | |||
| 668 | ret = security_ib_alloc_security(&agent->security); | 704 | ret = security_ib_alloc_security(&agent->security); |
| 669 | if (ret) | 705 | if (ret) |
| 670 | return ret; | 706 | return ret; |
| @@ -690,6 +726,9 @@ int ib_mad_agent_security_setup(struct ib_mad_agent *agent, | |||
| 690 | 726 | ||
| 691 | void ib_mad_agent_security_cleanup(struct ib_mad_agent *agent) | 727 | void ib_mad_agent_security_cleanup(struct ib_mad_agent *agent) |
| 692 | { | 728 | { |
| 729 | if (!rdma_protocol_ib(agent->device, agent->port_num)) | ||
| 730 | return; | ||
| 731 | |||
| 693 | security_ib_free_security(agent->security); | 732 | security_ib_free_security(agent->security); |
| 694 | if (agent->lsm_nb_reg) | 733 | if (agent->lsm_nb_reg) |
| 695 | unregister_lsm_notifier(&agent->lsm_nb); | 734 | unregister_lsm_notifier(&agent->lsm_nb); |
| @@ -697,8 +736,14 @@ void ib_mad_agent_security_cleanup(struct ib_mad_agent *agent) | |||
| 697 | 736 | ||
| 698 | int ib_mad_enforce_security(struct ib_mad_agent_private *map, u16 pkey_index) | 737 | int ib_mad_enforce_security(struct ib_mad_agent_private *map, u16 pkey_index) |
| 699 | { | 738 | { |
| 700 | if (map->agent.qp->qp_type == IB_QPT_SMI && !map->agent.smp_allowed) | 739 | if (!rdma_protocol_ib(map->agent.device, map->agent.port_num)) |
| 701 | return -EACCES; | 740 | return 0; |
| 741 | |||
| 742 | if (map->agent.qp->qp_type == IB_QPT_SMI) { | ||
| 743 | if (!map->agent.smp_allowed) | ||
| 744 | return -EACCES; | ||
| 745 | return 0; | ||
| 746 | } | ||
| 702 | 747 | ||
| 703 | return ib_security_pkey_access(map->agent.device, | 748 | return ib_security_pkey_access(map->agent.device, |
| 704 | map->agent.port_num, | 749 | map->agent.port_num, |
diff --git a/drivers/infiniband/core/umem.c b/drivers/infiniband/core/umem.c index 21e60b1e2ff4..130606c3b07c 100644 --- a/drivers/infiniband/core/umem.c +++ b/drivers/infiniband/core/umem.c | |||
| @@ -191,7 +191,7 @@ struct ib_umem *ib_umem_get(struct ib_ucontext *context, unsigned long addr, | |||
| 191 | sg_list_start = umem->sg_head.sgl; | 191 | sg_list_start = umem->sg_head.sgl; |
| 192 | 192 | ||
| 193 | while (npages) { | 193 | while (npages) { |
| 194 | ret = get_user_pages(cur_base, | 194 | ret = get_user_pages_longterm(cur_base, |
| 195 | min_t(unsigned long, npages, | 195 | min_t(unsigned long, npages, |
| 196 | PAGE_SIZE / sizeof (struct page *)), | 196 | PAGE_SIZE / sizeof (struct page *)), |
| 197 | gup_flags, page_list, vma_list); | 197 | gup_flags, page_list, vma_list); |
diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c index 16d55710b116..d0202bb176a4 100644 --- a/drivers/infiniband/core/uverbs_cmd.c +++ b/drivers/infiniband/core/uverbs_cmd.c | |||
| @@ -1971,6 +1971,12 @@ static int modify_qp(struct ib_uverbs_file *file, | |||
| 1971 | goto release_qp; | 1971 | goto release_qp; |
| 1972 | } | 1972 | } |
| 1973 | 1973 | ||
| 1974 | if ((cmd->base.attr_mask & IB_QP_ALT_PATH) && | ||
| 1975 | !rdma_is_port_valid(qp->device, cmd->base.alt_port_num)) { | ||
| 1976 | ret = -EINVAL; | ||
| 1977 | goto release_qp; | ||
| 1978 | } | ||
| 1979 | |||
| 1974 | attr->qp_state = cmd->base.qp_state; | 1980 | attr->qp_state = cmd->base.qp_state; |
| 1975 | attr->cur_qp_state = cmd->base.cur_qp_state; | 1981 | attr->cur_qp_state = cmd->base.cur_qp_state; |
| 1976 | attr->path_mtu = cmd->base.path_mtu; | 1982 | attr->path_mtu = cmd->base.path_mtu; |
diff --git a/drivers/infiniband/hw/cxgb4/cq.c b/drivers/infiniband/hw/cxgb4/cq.c index ea55e95cd2c5..b7bfc536e00f 100644 --- a/drivers/infiniband/hw/cxgb4/cq.c +++ b/drivers/infiniband/hw/cxgb4/cq.c | |||
| @@ -395,6 +395,11 @@ next_cqe: | |||
| 395 | 395 | ||
| 396 | static int cqe_completes_wr(struct t4_cqe *cqe, struct t4_wq *wq) | 396 | static int cqe_completes_wr(struct t4_cqe *cqe, struct t4_wq *wq) |
| 397 | { | 397 | { |
| 398 | if (CQE_OPCODE(cqe) == C4IW_DRAIN_OPCODE) { | ||
| 399 | WARN_ONCE(1, "Unexpected DRAIN CQE qp id %u!\n", wq->sq.qid); | ||
| 400 | return 0; | ||
| 401 | } | ||
| 402 | |||
| 398 | if (CQE_OPCODE(cqe) == FW_RI_TERMINATE) | 403 | if (CQE_OPCODE(cqe) == FW_RI_TERMINATE) |
| 399 | return 0; | 404 | return 0; |
| 400 | 405 | ||
diff --git a/drivers/infiniband/hw/cxgb4/qp.c b/drivers/infiniband/hw/cxgb4/qp.c index 5ee7fe433136..38bddd02a943 100644 --- a/drivers/infiniband/hw/cxgb4/qp.c +++ b/drivers/infiniband/hw/cxgb4/qp.c | |||
| @@ -868,7 +868,12 @@ int c4iw_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr, | |||
| 868 | 868 | ||
| 869 | qhp = to_c4iw_qp(ibqp); | 869 | qhp = to_c4iw_qp(ibqp); |
| 870 | spin_lock_irqsave(&qhp->lock, flag); | 870 | spin_lock_irqsave(&qhp->lock, flag); |
| 871 | if (t4_wq_in_error(&qhp->wq)) { | 871 | |
| 872 | /* | ||
| 873 | * If the qp has been flushed, then just insert a special | ||
| 874 | * drain cqe. | ||
| 875 | */ | ||
| 876 | if (qhp->wq.flushed) { | ||
| 872 | spin_unlock_irqrestore(&qhp->lock, flag); | 877 | spin_unlock_irqrestore(&qhp->lock, flag); |
| 873 | complete_sq_drain_wr(qhp, wr); | 878 | complete_sq_drain_wr(qhp, wr); |
| 874 | return err; | 879 | return err; |
| @@ -1011,7 +1016,12 @@ int c4iw_post_receive(struct ib_qp *ibqp, struct ib_recv_wr *wr, | |||
| 1011 | 1016 | ||
| 1012 | qhp = to_c4iw_qp(ibqp); | 1017 | qhp = to_c4iw_qp(ibqp); |
| 1013 | spin_lock_irqsave(&qhp->lock, flag); | 1018 | spin_lock_irqsave(&qhp->lock, flag); |
| 1014 | if (t4_wq_in_error(&qhp->wq)) { | 1019 | |
| 1020 | /* | ||
| 1021 | * If the qp has been flushed, then just insert a special | ||
| 1022 | * drain cqe. | ||
| 1023 | */ | ||
| 1024 | if (qhp->wq.flushed) { | ||
| 1015 | spin_unlock_irqrestore(&qhp->lock, flag); | 1025 | spin_unlock_irqrestore(&qhp->lock, flag); |
| 1016 | complete_rq_drain_wr(qhp, wr); | 1026 | complete_rq_drain_wr(qhp, wr); |
| 1017 | return err; | 1027 | return err; |
| @@ -1285,21 +1295,21 @@ static void __flush_qp(struct c4iw_qp *qhp, struct c4iw_cq *rchp, | |||
| 1285 | spin_unlock_irqrestore(&rchp->lock, flag); | 1295 | spin_unlock_irqrestore(&rchp->lock, flag); |
| 1286 | 1296 | ||
| 1287 | if (schp == rchp) { | 1297 | if (schp == rchp) { |
| 1288 | if (t4_clear_cq_armed(&rchp->cq) && | 1298 | if ((rq_flushed || sq_flushed) && |
| 1289 | (rq_flushed || sq_flushed)) { | 1299 | t4_clear_cq_armed(&rchp->cq)) { |
| 1290 | spin_lock_irqsave(&rchp->comp_handler_lock, flag); | 1300 | spin_lock_irqsave(&rchp->comp_handler_lock, flag); |
| 1291 | (*rchp->ibcq.comp_handler)(&rchp->ibcq, | 1301 | (*rchp->ibcq.comp_handler)(&rchp->ibcq, |
| 1292 | rchp->ibcq.cq_context); | 1302 | rchp->ibcq.cq_context); |
| 1293 | spin_unlock_irqrestore(&rchp->comp_handler_lock, flag); | 1303 | spin_unlock_irqrestore(&rchp->comp_handler_lock, flag); |
| 1294 | } | 1304 | } |
| 1295 | } else { | 1305 | } else { |
| 1296 | if (t4_clear_cq_armed(&rchp->cq) && rq_flushed) { | 1306 | if (rq_flushed && t4_clear_cq_armed(&rchp->cq)) { |
| 1297 | spin_lock_irqsave(&rchp->comp_handler_lock, flag); | 1307 | spin_lock_irqsave(&rchp->comp_handler_lock, flag); |
| 1298 | (*rchp->ibcq.comp_handler)(&rchp->ibcq, | 1308 | (*rchp->ibcq.comp_handler)(&rchp->ibcq, |
| 1299 | rchp->ibcq.cq_context); | 1309 | rchp->ibcq.cq_context); |
| 1300 | spin_unlock_irqrestore(&rchp->comp_handler_lock, flag); | 1310 | spin_unlock_irqrestore(&rchp->comp_handler_lock, flag); |
| 1301 | } | 1311 | } |
| 1302 | if (t4_clear_cq_armed(&schp->cq) && sq_flushed) { | 1312 | if (sq_flushed && t4_clear_cq_armed(&schp->cq)) { |
| 1303 | spin_lock_irqsave(&schp->comp_handler_lock, flag); | 1313 | spin_lock_irqsave(&schp->comp_handler_lock, flag); |
| 1304 | (*schp->ibcq.comp_handler)(&schp->ibcq, | 1314 | (*schp->ibcq.comp_handler)(&schp->ibcq, |
| 1305 | schp->ibcq.cq_context); | 1315 | schp->ibcq.cq_context); |
diff --git a/drivers/infiniband/hw/hfi1/rc.c b/drivers/infiniband/hw/hfi1/rc.c index fd01a760259f..af5f7936f7e5 100644 --- a/drivers/infiniband/hw/hfi1/rc.c +++ b/drivers/infiniband/hw/hfi1/rc.c | |||
| @@ -814,7 +814,7 @@ static inline void hfi1_make_rc_ack_16B(struct rvt_qp *qp, | |||
| 814 | struct hfi1_pportdata *ppd = ppd_from_ibp(ibp); | 814 | struct hfi1_pportdata *ppd = ppd_from_ibp(ibp); |
| 815 | struct hfi1_16b_header *hdr = &opa_hdr->opah; | 815 | struct hfi1_16b_header *hdr = &opa_hdr->opah; |
| 816 | struct ib_other_headers *ohdr; | 816 | struct ib_other_headers *ohdr; |
| 817 | u32 bth0, bth1; | 817 | u32 bth0, bth1 = 0; |
| 818 | u16 len, pkey; | 818 | u16 len, pkey; |
| 819 | u8 becn = !!is_fecn; | 819 | u8 becn = !!is_fecn; |
| 820 | u8 l4 = OPA_16B_L4_IB_LOCAL; | 820 | u8 l4 = OPA_16B_L4_IB_LOCAL; |
diff --git a/drivers/infiniband/hw/hns/hns_roce_alloc.c b/drivers/infiniband/hw/hns/hns_roce_alloc.c index 3e4c5253ab5c..a40ec939ece5 100644 --- a/drivers/infiniband/hw/hns/hns_roce_alloc.c +++ b/drivers/infiniband/hw/hns/hns_roce_alloc.c | |||
| @@ -162,14 +162,10 @@ void hns_roce_buf_free(struct hns_roce_dev *hr_dev, u32 size, | |||
| 162 | { | 162 | { |
| 163 | int i; | 163 | int i; |
| 164 | struct device *dev = hr_dev->dev; | 164 | struct device *dev = hr_dev->dev; |
| 165 | u32 bits_per_long = BITS_PER_LONG; | ||
| 166 | 165 | ||
| 167 | if (buf->nbufs == 1) { | 166 | if (buf->nbufs == 1) { |
| 168 | dma_free_coherent(dev, size, buf->direct.buf, buf->direct.map); | 167 | dma_free_coherent(dev, size, buf->direct.buf, buf->direct.map); |
| 169 | } else { | 168 | } else { |
| 170 | if (bits_per_long == 64 && buf->page_shift == PAGE_SHIFT) | ||
| 171 | vunmap(buf->direct.buf); | ||
| 172 | |||
| 173 | for (i = 0; i < buf->nbufs; ++i) | 169 | for (i = 0; i < buf->nbufs; ++i) |
| 174 | if (buf->page_list[i].buf) | 170 | if (buf->page_list[i].buf) |
| 175 | dma_free_coherent(dev, 1 << buf->page_shift, | 171 | dma_free_coherent(dev, 1 << buf->page_shift, |
| @@ -185,9 +181,7 @@ int hns_roce_buf_alloc(struct hns_roce_dev *hr_dev, u32 size, u32 max_direct, | |||
| 185 | { | 181 | { |
| 186 | int i = 0; | 182 | int i = 0; |
| 187 | dma_addr_t t; | 183 | dma_addr_t t; |
| 188 | struct page **pages; | ||
| 189 | struct device *dev = hr_dev->dev; | 184 | struct device *dev = hr_dev->dev; |
| 190 | u32 bits_per_long = BITS_PER_LONG; | ||
| 191 | u32 page_size = 1 << page_shift; | 185 | u32 page_size = 1 << page_shift; |
| 192 | u32 order; | 186 | u32 order; |
| 193 | 187 | ||
| @@ -236,23 +230,6 @@ int hns_roce_buf_alloc(struct hns_roce_dev *hr_dev, u32 size, u32 max_direct, | |||
| 236 | buf->page_list[i].map = t; | 230 | buf->page_list[i].map = t; |
| 237 | memset(buf->page_list[i].buf, 0, page_size); | 231 | memset(buf->page_list[i].buf, 0, page_size); |
| 238 | } | 232 | } |
| 239 | if (bits_per_long == 64 && page_shift == PAGE_SHIFT) { | ||
| 240 | pages = kmalloc_array(buf->nbufs, sizeof(*pages), | ||
| 241 | GFP_KERNEL); | ||
| 242 | if (!pages) | ||
| 243 | goto err_free; | ||
| 244 | |||
| 245 | for (i = 0; i < buf->nbufs; ++i) | ||
| 246 | pages[i] = virt_to_page(buf->page_list[i].buf); | ||
| 247 | |||
| 248 | buf->direct.buf = vmap(pages, buf->nbufs, VM_MAP, | ||
| 249 | PAGE_KERNEL); | ||
| 250 | kfree(pages); | ||
| 251 | if (!buf->direct.buf) | ||
| 252 | goto err_free; | ||
| 253 | } else { | ||
| 254 | buf->direct.buf = NULL; | ||
| 255 | } | ||
| 256 | } | 233 | } |
| 257 | 234 | ||
| 258 | return 0; | 235 | return 0; |
diff --git a/drivers/infiniband/hw/hns/hns_roce_device.h b/drivers/infiniband/hw/hns/hns_roce_device.h index 01d3d695cbba..b154ce40cded 100644 --- a/drivers/infiniband/hw/hns/hns_roce_device.h +++ b/drivers/infiniband/hw/hns/hns_roce_device.h | |||
| @@ -726,11 +726,9 @@ static inline struct hns_roce_qp | |||
| 726 | 726 | ||
| 727 | static inline void *hns_roce_buf_offset(struct hns_roce_buf *buf, int offset) | 727 | static inline void *hns_roce_buf_offset(struct hns_roce_buf *buf, int offset) |
| 728 | { | 728 | { |
| 729 | u32 bits_per_long_val = BITS_PER_LONG; | ||
| 730 | u32 page_size = 1 << buf->page_shift; | 729 | u32 page_size = 1 << buf->page_shift; |
| 731 | 730 | ||
| 732 | if ((bits_per_long_val == 64 && buf->page_shift == PAGE_SHIFT) || | 731 | if (buf->nbufs == 1) |
| 733 | buf->nbufs == 1) | ||
| 734 | return (char *)(buf->direct.buf) + offset; | 732 | return (char *)(buf->direct.buf) + offset; |
| 735 | else | 733 | else |
| 736 | return (char *)(buf->page_list[offset >> buf->page_shift].buf) + | 734 | return (char *)(buf->page_list[offset >> buf->page_shift].buf) + |
diff --git a/drivers/infiniband/hw/hns/hns_roce_hem.c b/drivers/infiniband/hw/hns/hns_roce_hem.c index 8b733a66fae5..0eeabfbee192 100644 --- a/drivers/infiniband/hw/hns/hns_roce_hem.c +++ b/drivers/infiniband/hw/hns/hns_roce_hem.c | |||
| @@ -224,6 +224,7 @@ static struct hns_roce_hem *hns_roce_alloc_hem(struct hns_roce_dev *hr_dev, | |||
| 224 | sg_init_table(chunk->mem, HNS_ROCE_HEM_CHUNK_LEN); | 224 | sg_init_table(chunk->mem, HNS_ROCE_HEM_CHUNK_LEN); |
| 225 | chunk->npages = 0; | 225 | chunk->npages = 0; |
| 226 | chunk->nsg = 0; | 226 | chunk->nsg = 0; |
| 227 | memset(chunk->buf, 0, sizeof(chunk->buf)); | ||
| 227 | list_add_tail(&chunk->list, &hem->chunk_list); | 228 | list_add_tail(&chunk->list, &hem->chunk_list); |
| 228 | } | 229 | } |
| 229 | 230 | ||
| @@ -240,8 +241,7 @@ static struct hns_roce_hem *hns_roce_alloc_hem(struct hns_roce_dev *hr_dev, | |||
| 240 | if (!buf) | 241 | if (!buf) |
| 241 | goto fail; | 242 | goto fail; |
| 242 | 243 | ||
| 243 | sg_set_buf(mem, buf, PAGE_SIZE << order); | 244 | chunk->buf[chunk->npages] = buf; |
| 244 | WARN_ON(mem->offset); | ||
| 245 | sg_dma_len(mem) = PAGE_SIZE << order; | 245 | sg_dma_len(mem) = PAGE_SIZE << order; |
| 246 | 246 | ||
| 247 | ++chunk->npages; | 247 | ++chunk->npages; |
| @@ -267,8 +267,8 @@ void hns_roce_free_hem(struct hns_roce_dev *hr_dev, struct hns_roce_hem *hem) | |||
| 267 | list_for_each_entry_safe(chunk, tmp, &hem->chunk_list, list) { | 267 | list_for_each_entry_safe(chunk, tmp, &hem->chunk_list, list) { |
| 268 | for (i = 0; i < chunk->npages; ++i) | 268 | for (i = 0; i < chunk->npages; ++i) |
| 269 | dma_free_coherent(hr_dev->dev, | 269 | dma_free_coherent(hr_dev->dev, |
| 270 | chunk->mem[i].length, | 270 | sg_dma_len(&chunk->mem[i]), |
| 271 | lowmem_page_address(sg_page(&chunk->mem[i])), | 271 | chunk->buf[i], |
| 272 | sg_dma_address(&chunk->mem[i])); | 272 | sg_dma_address(&chunk->mem[i])); |
| 273 | kfree(chunk); | 273 | kfree(chunk); |
| 274 | } | 274 | } |
| @@ -722,11 +722,12 @@ void *hns_roce_table_find(struct hns_roce_dev *hr_dev, | |||
| 722 | struct hns_roce_hem_chunk *chunk; | 722 | struct hns_roce_hem_chunk *chunk; |
| 723 | struct hns_roce_hem_mhop mhop; | 723 | struct hns_roce_hem_mhop mhop; |
| 724 | struct hns_roce_hem *hem; | 724 | struct hns_roce_hem *hem; |
| 725 | struct page *page = NULL; | 725 | void *addr = NULL; |
| 726 | unsigned long mhop_obj = obj; | 726 | unsigned long mhop_obj = obj; |
| 727 | unsigned long obj_per_chunk; | 727 | unsigned long obj_per_chunk; |
| 728 | unsigned long idx_offset; | 728 | unsigned long idx_offset; |
| 729 | int offset, dma_offset; | 729 | int offset, dma_offset; |
| 730 | int length; | ||
| 730 | int i, j; | 731 | int i, j; |
| 731 | u32 hem_idx = 0; | 732 | u32 hem_idx = 0; |
| 732 | 733 | ||
| @@ -763,25 +764,25 @@ void *hns_roce_table_find(struct hns_roce_dev *hr_dev, | |||
| 763 | 764 | ||
| 764 | list_for_each_entry(chunk, &hem->chunk_list, list) { | 765 | list_for_each_entry(chunk, &hem->chunk_list, list) { |
| 765 | for (i = 0; i < chunk->npages; ++i) { | 766 | for (i = 0; i < chunk->npages; ++i) { |
| 767 | length = sg_dma_len(&chunk->mem[i]); | ||
| 766 | if (dma_handle && dma_offset >= 0) { | 768 | if (dma_handle && dma_offset >= 0) { |
| 767 | if (sg_dma_len(&chunk->mem[i]) > | 769 | if (length > (u32)dma_offset) |
| 768 | (u32)dma_offset) | ||
| 769 | *dma_handle = sg_dma_address( | 770 | *dma_handle = sg_dma_address( |
| 770 | &chunk->mem[i]) + dma_offset; | 771 | &chunk->mem[i]) + dma_offset; |
| 771 | dma_offset -= sg_dma_len(&chunk->mem[i]); | 772 | dma_offset -= length; |
| 772 | } | 773 | } |
| 773 | 774 | ||
| 774 | if (chunk->mem[i].length > (u32)offset) { | 775 | if (length > (u32)offset) { |
| 775 | page = sg_page(&chunk->mem[i]); | 776 | addr = chunk->buf[i] + offset; |
| 776 | goto out; | 777 | goto out; |
| 777 | } | 778 | } |
| 778 | offset -= chunk->mem[i].length; | 779 | offset -= length; |
| 779 | } | 780 | } |
| 780 | } | 781 | } |
| 781 | 782 | ||
| 782 | out: | 783 | out: |
| 783 | mutex_unlock(&table->mutex); | 784 | mutex_unlock(&table->mutex); |
| 784 | return page ? lowmem_page_address(page) + offset : NULL; | 785 | return addr; |
| 785 | } | 786 | } |
| 786 | EXPORT_SYMBOL_GPL(hns_roce_table_find); | 787 | EXPORT_SYMBOL_GPL(hns_roce_table_find); |
| 787 | 788 | ||
diff --git a/drivers/infiniband/hw/hns/hns_roce_hem.h b/drivers/infiniband/hw/hns/hns_roce_hem.h index db66db12075e..e8850d59e780 100644 --- a/drivers/infiniband/hw/hns/hns_roce_hem.h +++ b/drivers/infiniband/hw/hns/hns_roce_hem.h | |||
| @@ -78,6 +78,7 @@ struct hns_roce_hem_chunk { | |||
| 78 | int npages; | 78 | int npages; |
| 79 | int nsg; | 79 | int nsg; |
| 80 | struct scatterlist mem[HNS_ROCE_HEM_CHUNK_LEN]; | 80 | struct scatterlist mem[HNS_ROCE_HEM_CHUNK_LEN]; |
| 81 | void *buf[HNS_ROCE_HEM_CHUNK_LEN]; | ||
| 81 | }; | 82 | }; |
| 82 | 83 | ||
| 83 | struct hns_roce_hem { | 84 | struct hns_roce_hem { |
diff --git a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c index 8f719c00467b..8e18445714a9 100644 --- a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c +++ b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c | |||
| @@ -1126,9 +1126,11 @@ static int hns_roce_v2_write_mtpt(void *mb_buf, struct hns_roce_mr *mr, | |||
| 1126 | { | 1126 | { |
| 1127 | struct hns_roce_v2_mpt_entry *mpt_entry; | 1127 | struct hns_roce_v2_mpt_entry *mpt_entry; |
| 1128 | struct scatterlist *sg; | 1128 | struct scatterlist *sg; |
| 1129 | u64 page_addr; | ||
| 1129 | u64 *pages; | 1130 | u64 *pages; |
| 1131 | int i, j; | ||
| 1132 | int len; | ||
| 1130 | int entry; | 1133 | int entry; |
| 1131 | int i; | ||
| 1132 | 1134 | ||
| 1133 | mpt_entry = mb_buf; | 1135 | mpt_entry = mb_buf; |
| 1134 | memset(mpt_entry, 0, sizeof(*mpt_entry)); | 1136 | memset(mpt_entry, 0, sizeof(*mpt_entry)); |
| @@ -1186,14 +1188,20 @@ static int hns_roce_v2_write_mtpt(void *mb_buf, struct hns_roce_mr *mr, | |||
| 1186 | 1188 | ||
| 1187 | i = 0; | 1189 | i = 0; |
| 1188 | for_each_sg(mr->umem->sg_head.sgl, sg, mr->umem->nmap, entry) { | 1190 | for_each_sg(mr->umem->sg_head.sgl, sg, mr->umem->nmap, entry) { |
| 1189 | pages[i] = ((u64)sg_dma_address(sg)) >> 6; | 1191 | len = sg_dma_len(sg) >> PAGE_SHIFT; |
| 1190 | 1192 | for (j = 0; j < len; ++j) { | |
| 1191 | /* Record the first 2 entry directly to MTPT table */ | 1193 | page_addr = sg_dma_address(sg) + |
| 1192 | if (i >= HNS_ROCE_V2_MAX_INNER_MTPT_NUM - 1) | 1194 | (j << mr->umem->page_shift); |
| 1193 | break; | 1195 | pages[i] = page_addr >> 6; |
| 1194 | i++; | 1196 | |
| 1197 | /* Record the first 2 entry directly to MTPT table */ | ||
| 1198 | if (i >= HNS_ROCE_V2_MAX_INNER_MTPT_NUM - 1) | ||
| 1199 | goto found; | ||
| 1200 | i++; | ||
| 1201 | } | ||
| 1195 | } | 1202 | } |
| 1196 | 1203 | ||
| 1204 | found: | ||
| 1197 | mpt_entry->pa0_l = cpu_to_le32(lower_32_bits(pages[0])); | 1205 | mpt_entry->pa0_l = cpu_to_le32(lower_32_bits(pages[0])); |
| 1198 | roce_set_field(mpt_entry->byte_56_pa0_h, V2_MPT_BYTE_56_PA0_H_M, | 1206 | roce_set_field(mpt_entry->byte_56_pa0_h, V2_MPT_BYTE_56_PA0_H_M, |
| 1199 | V2_MPT_BYTE_56_PA0_H_S, | 1207 | V2_MPT_BYTE_56_PA0_H_S, |
diff --git a/drivers/infiniband/hw/i40iw/i40iw_cm.c b/drivers/infiniband/hw/i40iw/i40iw_cm.c index 493d6ef3d2d5..77870f9e1736 100644 --- a/drivers/infiniband/hw/i40iw/i40iw_cm.c +++ b/drivers/infiniband/hw/i40iw/i40iw_cm.c | |||
| @@ -1043,7 +1043,7 @@ negotiate_done: | |||
| 1043 | * i40iw_schedule_cm_timer | 1043 | * i40iw_schedule_cm_timer |
| 1044 | * @@cm_node: connection's node | 1044 | * @@cm_node: connection's node |
| 1045 | * @sqbuf: buffer to send | 1045 | * @sqbuf: buffer to send |
| 1046 | * @type: if it es send ot close | 1046 | * @type: if it is send or close |
| 1047 | * @send_retrans: if rexmits to be done | 1047 | * @send_retrans: if rexmits to be done |
| 1048 | * @close_when_complete: is cm_node to be removed | 1048 | * @close_when_complete: is cm_node to be removed |
| 1049 | * | 1049 | * |
| @@ -1067,7 +1067,8 @@ int i40iw_schedule_cm_timer(struct i40iw_cm_node *cm_node, | |||
| 1067 | 1067 | ||
| 1068 | new_send = kzalloc(sizeof(*new_send), GFP_ATOMIC); | 1068 | new_send = kzalloc(sizeof(*new_send), GFP_ATOMIC); |
| 1069 | if (!new_send) { | 1069 | if (!new_send) { |
| 1070 | i40iw_free_sqbuf(vsi, (void *)sqbuf); | 1070 | if (type != I40IW_TIMER_TYPE_CLOSE) |
| 1071 | i40iw_free_sqbuf(vsi, (void *)sqbuf); | ||
| 1071 | return -ENOMEM; | 1072 | return -ENOMEM; |
| 1072 | } | 1073 | } |
| 1073 | new_send->retrycount = I40IW_DEFAULT_RETRYS; | 1074 | new_send->retrycount = I40IW_DEFAULT_RETRYS; |
| @@ -1082,7 +1083,6 @@ int i40iw_schedule_cm_timer(struct i40iw_cm_node *cm_node, | |||
| 1082 | new_send->timetosend += (HZ / 10); | 1083 | new_send->timetosend += (HZ / 10); |
| 1083 | if (cm_node->close_entry) { | 1084 | if (cm_node->close_entry) { |
| 1084 | kfree(new_send); | 1085 | kfree(new_send); |
| 1085 | i40iw_free_sqbuf(vsi, (void *)sqbuf); | ||
| 1086 | i40iw_pr_err("already close entry\n"); | 1086 | i40iw_pr_err("already close entry\n"); |
| 1087 | return -EINVAL; | 1087 | return -EINVAL; |
| 1088 | } | 1088 | } |
| @@ -2947,8 +2947,6 @@ static struct i40iw_cm_node *i40iw_create_cm_node( | |||
| 2947 | loopback_remotenode->tcp_cntxt.snd_wnd = cm_node->tcp_cntxt.rcv_wnd; | 2947 | loopback_remotenode->tcp_cntxt.snd_wnd = cm_node->tcp_cntxt.rcv_wnd; |
| 2948 | cm_node->tcp_cntxt.snd_wscale = loopback_remotenode->tcp_cntxt.rcv_wscale; | 2948 | cm_node->tcp_cntxt.snd_wscale = loopback_remotenode->tcp_cntxt.rcv_wscale; |
| 2949 | loopback_remotenode->tcp_cntxt.snd_wscale = cm_node->tcp_cntxt.rcv_wscale; | 2949 | loopback_remotenode->tcp_cntxt.snd_wscale = cm_node->tcp_cntxt.rcv_wscale; |
| 2950 | loopback_remotenode->state = I40IW_CM_STATE_MPAREQ_RCVD; | ||
| 2951 | i40iw_create_event(loopback_remotenode, I40IW_CM_EVENT_MPA_REQ); | ||
| 2952 | } | 2950 | } |
| 2953 | return cm_node; | 2951 | return cm_node; |
| 2954 | } | 2952 | } |
| @@ -3689,11 +3687,16 @@ int i40iw_accept(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param) | |||
| 3689 | cm_id->add_ref(cm_id); | 3687 | cm_id->add_ref(cm_id); |
| 3690 | i40iw_add_ref(&iwqp->ibqp); | 3688 | i40iw_add_ref(&iwqp->ibqp); |
| 3691 | 3689 | ||
| 3692 | i40iw_send_cm_event(cm_node, cm_id, IW_CM_EVENT_ESTABLISHED, 0); | ||
| 3693 | |||
| 3694 | attr.qp_state = IB_QPS_RTS; | 3690 | attr.qp_state = IB_QPS_RTS; |
| 3695 | cm_node->qhash_set = false; | 3691 | cm_node->qhash_set = false; |
| 3696 | i40iw_modify_qp(&iwqp->ibqp, &attr, IB_QP_STATE, NULL); | 3692 | i40iw_modify_qp(&iwqp->ibqp, &attr, IB_QP_STATE, NULL); |
| 3693 | |||
| 3694 | cm_node->accelerated = 1; | ||
| 3695 | status = | ||
| 3696 | i40iw_send_cm_event(cm_node, cm_id, IW_CM_EVENT_ESTABLISHED, 0); | ||
| 3697 | if (status) | ||
| 3698 | i40iw_debug(dev, I40IW_DEBUG_CM, "error sending cm event - ESTABLISHED\n"); | ||
| 3699 | |||
| 3697 | if (cm_node->loopbackpartner) { | 3700 | if (cm_node->loopbackpartner) { |
| 3698 | cm_node->loopbackpartner->pdata.size = conn_param->private_data_len; | 3701 | cm_node->loopbackpartner->pdata.size = conn_param->private_data_len; |
| 3699 | 3702 | ||
| @@ -3704,7 +3707,6 @@ int i40iw_accept(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param) | |||
| 3704 | i40iw_create_event(cm_node->loopbackpartner, I40IW_CM_EVENT_CONNECTED); | 3707 | i40iw_create_event(cm_node->loopbackpartner, I40IW_CM_EVENT_CONNECTED); |
| 3705 | } | 3708 | } |
| 3706 | 3709 | ||
| 3707 | cm_node->accelerated = 1; | ||
| 3708 | if (cm_node->accept_pend) { | 3710 | if (cm_node->accept_pend) { |
| 3709 | atomic_dec(&cm_node->listener->pend_accepts_cnt); | 3711 | atomic_dec(&cm_node->listener->pend_accepts_cnt); |
| 3710 | cm_node->accept_pend = 0; | 3712 | cm_node->accept_pend = 0; |
| @@ -3864,6 +3866,12 @@ int i40iw_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param) | |||
| 3864 | goto err; | 3866 | goto err; |
| 3865 | } | 3867 | } |
| 3866 | 3868 | ||
| 3869 | if (cm_node->loopbackpartner) { | ||
| 3870 | cm_node->loopbackpartner->state = I40IW_CM_STATE_MPAREQ_RCVD; | ||
| 3871 | i40iw_create_event(cm_node->loopbackpartner, | ||
| 3872 | I40IW_CM_EVENT_MPA_REQ); | ||
| 3873 | } | ||
| 3874 | |||
| 3867 | i40iw_debug(cm_node->dev, | 3875 | i40iw_debug(cm_node->dev, |
| 3868 | I40IW_DEBUG_CM, | 3876 | I40IW_DEBUG_CM, |
| 3869 | "Api - connect(): port=0x%04x, cm_node=%p, cm_id = %p.\n", | 3877 | "Api - connect(): port=0x%04x, cm_node=%p, cm_id = %p.\n", |
| @@ -4044,9 +4052,6 @@ static void i40iw_cm_event_connected(struct i40iw_cm_event *event) | |||
| 4044 | dev->iw_priv_qp_ops->qp_send_rtt(&iwqp->sc_qp, read0); | 4052 | dev->iw_priv_qp_ops->qp_send_rtt(&iwqp->sc_qp, read0); |
| 4045 | if (iwqp->page) | 4053 | if (iwqp->page) |
| 4046 | kunmap(iwqp->page); | 4054 | kunmap(iwqp->page); |
| 4047 | status = i40iw_send_cm_event(cm_node, cm_id, IW_CM_EVENT_CONNECT_REPLY, 0); | ||
| 4048 | if (status) | ||
| 4049 | i40iw_pr_err("send cm event\n"); | ||
| 4050 | 4055 | ||
| 4051 | memset(&attr, 0, sizeof(attr)); | 4056 | memset(&attr, 0, sizeof(attr)); |
| 4052 | attr.qp_state = IB_QPS_RTS; | 4057 | attr.qp_state = IB_QPS_RTS; |
| @@ -4054,6 +4059,10 @@ static void i40iw_cm_event_connected(struct i40iw_cm_event *event) | |||
| 4054 | i40iw_modify_qp(&iwqp->ibqp, &attr, IB_QP_STATE, NULL); | 4059 | i40iw_modify_qp(&iwqp->ibqp, &attr, IB_QP_STATE, NULL); |
| 4055 | 4060 | ||
| 4056 | cm_node->accelerated = 1; | 4061 | cm_node->accelerated = 1; |
| 4062 | status = i40iw_send_cm_event(cm_node, cm_id, IW_CM_EVENT_CONNECT_REPLY, | ||
| 4063 | 0); | ||
| 4064 | if (status) | ||
| 4065 | i40iw_debug(dev, I40IW_DEBUG_CM, "error sending cm event - CONNECT_REPLY\n"); | ||
| 4057 | 4066 | ||
| 4058 | return; | 4067 | return; |
| 4059 | 4068 | ||
diff --git a/drivers/infiniband/hw/i40iw/i40iw_ctrl.c b/drivers/infiniband/hw/i40iw/i40iw_ctrl.c index d88c6cf47cf2..da9821a10e0d 100644 --- a/drivers/infiniband/hw/i40iw/i40iw_ctrl.c +++ b/drivers/infiniband/hw/i40iw/i40iw_ctrl.c | |||
| @@ -513,7 +513,7 @@ static enum i40iw_status_code i40iw_sc_cqp_create(struct i40iw_sc_cqp *cqp, | |||
| 513 | 513 | ||
| 514 | ret_code = i40iw_allocate_dma_mem(cqp->dev->hw, | 514 | ret_code = i40iw_allocate_dma_mem(cqp->dev->hw, |
| 515 | &cqp->sdbuf, | 515 | &cqp->sdbuf, |
| 516 | 128, | 516 | I40IW_UPDATE_SD_BUF_SIZE * cqp->sq_size, |
| 517 | I40IW_SD_BUF_ALIGNMENT); | 517 | I40IW_SD_BUF_ALIGNMENT); |
| 518 | 518 | ||
| 519 | if (ret_code) | 519 | if (ret_code) |
| @@ -596,14 +596,15 @@ void i40iw_sc_cqp_post_sq(struct i40iw_sc_cqp *cqp) | |||
| 596 | } | 596 | } |
| 597 | 597 | ||
| 598 | /** | 598 | /** |
| 599 | * i40iw_sc_cqp_get_next_send_wqe - get next wqe on cqp sq | 599 | * i40iw_sc_cqp_get_next_send_wqe_idx - get next WQE on CQP SQ and pass back the index |
| 600 | * @cqp: struct for cqp hw | 600 | * @cqp: pointer to CQP structure |
| 601 | * @wqe_idx: we index of cqp ring | 601 | * @scratch: private data for CQP WQE |
| 602 | * @wqe_idx: WQE index for next WQE on CQP SQ | ||
| 602 | */ | 603 | */ |
| 603 | u64 *i40iw_sc_cqp_get_next_send_wqe(struct i40iw_sc_cqp *cqp, u64 scratch) | 604 | static u64 *i40iw_sc_cqp_get_next_send_wqe_idx(struct i40iw_sc_cqp *cqp, |
| 605 | u64 scratch, u32 *wqe_idx) | ||
| 604 | { | 606 | { |
| 605 | u64 *wqe = NULL; | 607 | u64 *wqe = NULL; |
| 606 | u32 wqe_idx; | ||
| 607 | enum i40iw_status_code ret_code; | 608 | enum i40iw_status_code ret_code; |
| 608 | 609 | ||
| 609 | if (I40IW_RING_FULL_ERR(cqp->sq_ring)) { | 610 | if (I40IW_RING_FULL_ERR(cqp->sq_ring)) { |
| @@ -616,21 +617,33 @@ u64 *i40iw_sc_cqp_get_next_send_wqe(struct i40iw_sc_cqp *cqp, u64 scratch) | |||
| 616 | cqp->sq_ring.size); | 617 | cqp->sq_ring.size); |
| 617 | return NULL; | 618 | return NULL; |
| 618 | } | 619 | } |
| 619 | I40IW_ATOMIC_RING_MOVE_HEAD(cqp->sq_ring, wqe_idx, ret_code); | 620 | I40IW_ATOMIC_RING_MOVE_HEAD(cqp->sq_ring, *wqe_idx, ret_code); |
| 620 | cqp->dev->cqp_cmd_stats[OP_REQUESTED_COMMANDS]++; | 621 | cqp->dev->cqp_cmd_stats[OP_REQUESTED_COMMANDS]++; |
| 621 | if (ret_code) | 622 | if (ret_code) |
| 622 | return NULL; | 623 | return NULL; |
| 623 | if (!wqe_idx) | 624 | if (!*wqe_idx) |
| 624 | cqp->polarity = !cqp->polarity; | 625 | cqp->polarity = !cqp->polarity; |
| 625 | 626 | ||
| 626 | wqe = cqp->sq_base[wqe_idx].elem; | 627 | wqe = cqp->sq_base[*wqe_idx].elem; |
| 627 | cqp->scratch_array[wqe_idx] = scratch; | 628 | cqp->scratch_array[*wqe_idx] = scratch; |
| 628 | I40IW_CQP_INIT_WQE(wqe); | 629 | I40IW_CQP_INIT_WQE(wqe); |
| 629 | 630 | ||
| 630 | return wqe; | 631 | return wqe; |
| 631 | } | 632 | } |
| 632 | 633 | ||
| 633 | /** | 634 | /** |
| 635 | * i40iw_sc_cqp_get_next_send_wqe - get next wqe on cqp sq | ||
| 636 | * @cqp: struct for cqp hw | ||
| 637 | * @scratch: private data for CQP WQE | ||
| 638 | */ | ||
| 639 | u64 *i40iw_sc_cqp_get_next_send_wqe(struct i40iw_sc_cqp *cqp, u64 scratch) | ||
| 640 | { | ||
| 641 | u32 wqe_idx; | ||
| 642 | |||
| 643 | return i40iw_sc_cqp_get_next_send_wqe_idx(cqp, scratch, &wqe_idx); | ||
| 644 | } | ||
| 645 | |||
| 646 | /** | ||
| 634 | * i40iw_sc_cqp_destroy - destroy cqp during close | 647 | * i40iw_sc_cqp_destroy - destroy cqp during close |
| 635 | * @cqp: struct for cqp hw | 648 | * @cqp: struct for cqp hw |
| 636 | */ | 649 | */ |
| @@ -3587,8 +3600,10 @@ static enum i40iw_status_code cqp_sds_wqe_fill(struct i40iw_sc_cqp *cqp, | |||
| 3587 | u64 *wqe; | 3600 | u64 *wqe; |
| 3588 | int mem_entries, wqe_entries; | 3601 | int mem_entries, wqe_entries; |
| 3589 | struct i40iw_dma_mem *sdbuf = &cqp->sdbuf; | 3602 | struct i40iw_dma_mem *sdbuf = &cqp->sdbuf; |
| 3603 | u64 offset; | ||
| 3604 | u32 wqe_idx; | ||
| 3590 | 3605 | ||
| 3591 | wqe = i40iw_sc_cqp_get_next_send_wqe(cqp, scratch); | 3606 | wqe = i40iw_sc_cqp_get_next_send_wqe_idx(cqp, scratch, &wqe_idx); |
| 3592 | if (!wqe) | 3607 | if (!wqe) |
| 3593 | return I40IW_ERR_RING_FULL; | 3608 | return I40IW_ERR_RING_FULL; |
| 3594 | 3609 | ||
| @@ -3601,8 +3616,10 @@ static enum i40iw_status_code cqp_sds_wqe_fill(struct i40iw_sc_cqp *cqp, | |||
| 3601 | LS_64(mem_entries, I40IW_CQPSQ_UPESD_ENTRY_COUNT); | 3616 | LS_64(mem_entries, I40IW_CQPSQ_UPESD_ENTRY_COUNT); |
| 3602 | 3617 | ||
| 3603 | if (mem_entries) { | 3618 | if (mem_entries) { |
| 3604 | memcpy(sdbuf->va, &info->entry[3], (mem_entries << 4)); | 3619 | offset = wqe_idx * I40IW_UPDATE_SD_BUF_SIZE; |
| 3605 | data = sdbuf->pa; | 3620 | memcpy((char *)sdbuf->va + offset, &info->entry[3], |
| 3621 | mem_entries << 4); | ||
| 3622 | data = (u64)sdbuf->pa + offset; | ||
| 3606 | } else { | 3623 | } else { |
| 3607 | data = 0; | 3624 | data = 0; |
| 3608 | } | 3625 | } |
diff --git a/drivers/infiniband/hw/i40iw/i40iw_d.h b/drivers/infiniband/hw/i40iw/i40iw_d.h index 65ec39e3746b..029083cb81d5 100644 --- a/drivers/infiniband/hw/i40iw/i40iw_d.h +++ b/drivers/infiniband/hw/i40iw/i40iw_d.h | |||
| @@ -1114,7 +1114,7 @@ | |||
| 1114 | #define I40IWQPC_VLANTAG_MASK (0xffffULL << I40IWQPC_VLANTAG_SHIFT) | 1114 | #define I40IWQPC_VLANTAG_MASK (0xffffULL << I40IWQPC_VLANTAG_SHIFT) |
| 1115 | 1115 | ||
| 1116 | #define I40IWQPC_ARPIDX_SHIFT 48 | 1116 | #define I40IWQPC_ARPIDX_SHIFT 48 |
| 1117 | #define I40IWQPC_ARPIDX_MASK (0xfffULL << I40IWQPC_ARPIDX_SHIFT) | 1117 | #define I40IWQPC_ARPIDX_MASK (0xffffULL << I40IWQPC_ARPIDX_SHIFT) |
| 1118 | 1118 | ||
| 1119 | #define I40IWQPC_FLOWLABEL_SHIFT 0 | 1119 | #define I40IWQPC_FLOWLABEL_SHIFT 0 |
| 1120 | #define I40IWQPC_FLOWLABEL_MASK (0xfffffUL << I40IWQPC_FLOWLABEL_SHIFT) | 1120 | #define I40IWQPC_FLOWLABEL_MASK (0xfffffUL << I40IWQPC_FLOWLABEL_SHIFT) |
| @@ -1526,7 +1526,7 @@ enum i40iw_alignment { | |||
| 1526 | I40IW_AEQ_ALIGNMENT = 0x100, | 1526 | I40IW_AEQ_ALIGNMENT = 0x100, |
| 1527 | I40IW_CEQ_ALIGNMENT = 0x100, | 1527 | I40IW_CEQ_ALIGNMENT = 0x100, |
| 1528 | I40IW_CQ0_ALIGNMENT = 0x100, | 1528 | I40IW_CQ0_ALIGNMENT = 0x100, |
| 1529 | I40IW_SD_BUF_ALIGNMENT = 0x100 | 1529 | I40IW_SD_BUF_ALIGNMENT = 0x80 |
| 1530 | }; | 1530 | }; |
| 1531 | 1531 | ||
| 1532 | #define I40IW_WQE_SIZE_64 64 | 1532 | #define I40IW_WQE_SIZE_64 64 |
| @@ -1534,6 +1534,8 @@ enum i40iw_alignment { | |||
| 1534 | #define I40IW_QP_WQE_MIN_SIZE 32 | 1534 | #define I40IW_QP_WQE_MIN_SIZE 32 |
| 1535 | #define I40IW_QP_WQE_MAX_SIZE 128 | 1535 | #define I40IW_QP_WQE_MAX_SIZE 128 |
| 1536 | 1536 | ||
| 1537 | #define I40IW_UPDATE_SD_BUF_SIZE 128 | ||
| 1538 | |||
| 1537 | #define I40IW_CQE_QTYPE_RQ 0 | 1539 | #define I40IW_CQE_QTYPE_RQ 0 |
| 1538 | #define I40IW_CQE_QTYPE_SQ 1 | 1540 | #define I40IW_CQE_QTYPE_SQ 1 |
| 1539 | 1541 | ||
diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c index 013049bcdb53..caf490ab24c8 100644 --- a/drivers/infiniband/hw/mlx4/qp.c +++ b/drivers/infiniband/hw/mlx4/qp.c | |||
| @@ -666,6 +666,19 @@ static int set_qp_rss(struct mlx4_ib_dev *dev, struct mlx4_ib_rss *rss_ctx, | |||
| 666 | return (-EOPNOTSUPP); | 666 | return (-EOPNOTSUPP); |
| 667 | } | 667 | } |
| 668 | 668 | ||
| 669 | if (ucmd->rx_hash_fields_mask & ~(MLX4_IB_RX_HASH_SRC_IPV4 | | ||
| 670 | MLX4_IB_RX_HASH_DST_IPV4 | | ||
| 671 | MLX4_IB_RX_HASH_SRC_IPV6 | | ||
| 672 | MLX4_IB_RX_HASH_DST_IPV6 | | ||
| 673 | MLX4_IB_RX_HASH_SRC_PORT_TCP | | ||
| 674 | MLX4_IB_RX_HASH_DST_PORT_TCP | | ||
| 675 | MLX4_IB_RX_HASH_SRC_PORT_UDP | | ||
| 676 | MLX4_IB_RX_HASH_DST_PORT_UDP)) { | ||
| 677 | pr_debug("RX Hash fields_mask has unsupported mask (0x%llx)\n", | ||
| 678 | ucmd->rx_hash_fields_mask); | ||
| 679 | return (-EOPNOTSUPP); | ||
| 680 | } | ||
| 681 | |||
| 669 | if ((ucmd->rx_hash_fields_mask & MLX4_IB_RX_HASH_SRC_IPV4) && | 682 | if ((ucmd->rx_hash_fields_mask & MLX4_IB_RX_HASH_SRC_IPV4) && |
| 670 | (ucmd->rx_hash_fields_mask & MLX4_IB_RX_HASH_DST_IPV4)) { | 683 | (ucmd->rx_hash_fields_mask & MLX4_IB_RX_HASH_DST_IPV4)) { |
| 671 | rss_ctx->flags = MLX4_RSS_IPV4; | 684 | rss_ctx->flags = MLX4_RSS_IPV4; |
| @@ -691,11 +704,11 @@ static int set_qp_rss(struct mlx4_ib_dev *dev, struct mlx4_ib_rss *rss_ctx, | |||
| 691 | return (-EOPNOTSUPP); | 704 | return (-EOPNOTSUPP); |
| 692 | } | 705 | } |
| 693 | 706 | ||
| 694 | if (rss_ctx->flags & MLX4_RSS_IPV4) { | 707 | if (rss_ctx->flags & MLX4_RSS_IPV4) |
| 695 | rss_ctx->flags |= MLX4_RSS_UDP_IPV4; | 708 | rss_ctx->flags |= MLX4_RSS_UDP_IPV4; |
| 696 | } else if (rss_ctx->flags & MLX4_RSS_IPV6) { | 709 | if (rss_ctx->flags & MLX4_RSS_IPV6) |
| 697 | rss_ctx->flags |= MLX4_RSS_UDP_IPV6; | 710 | rss_ctx->flags |= MLX4_RSS_UDP_IPV6; |
| 698 | } else { | 711 | if (!(rss_ctx->flags & (MLX4_RSS_IPV6 | MLX4_RSS_IPV4))) { |
| 699 | pr_debug("RX Hash fields_mask is not supported - UDP must be set with IPv4 or IPv6\n"); | 712 | pr_debug("RX Hash fields_mask is not supported - UDP must be set with IPv4 or IPv6\n"); |
| 700 | return (-EOPNOTSUPP); | 713 | return (-EOPNOTSUPP); |
| 701 | } | 714 | } |
| @@ -707,15 +720,14 @@ static int set_qp_rss(struct mlx4_ib_dev *dev, struct mlx4_ib_rss *rss_ctx, | |||
| 707 | 720 | ||
| 708 | if ((ucmd->rx_hash_fields_mask & MLX4_IB_RX_HASH_SRC_PORT_TCP) && | 721 | if ((ucmd->rx_hash_fields_mask & MLX4_IB_RX_HASH_SRC_PORT_TCP) && |
| 709 | (ucmd->rx_hash_fields_mask & MLX4_IB_RX_HASH_DST_PORT_TCP)) { | 722 | (ucmd->rx_hash_fields_mask & MLX4_IB_RX_HASH_DST_PORT_TCP)) { |
| 710 | if (rss_ctx->flags & MLX4_RSS_IPV4) { | 723 | if (rss_ctx->flags & MLX4_RSS_IPV4) |
| 711 | rss_ctx->flags |= MLX4_RSS_TCP_IPV4; | 724 | rss_ctx->flags |= MLX4_RSS_TCP_IPV4; |
| 712 | } else if (rss_ctx->flags & MLX4_RSS_IPV6) { | 725 | if (rss_ctx->flags & MLX4_RSS_IPV6) |
| 713 | rss_ctx->flags |= MLX4_RSS_TCP_IPV6; | 726 | rss_ctx->flags |= MLX4_RSS_TCP_IPV6; |
| 714 | } else { | 727 | if (!(rss_ctx->flags & (MLX4_RSS_IPV6 | MLX4_RSS_IPV4))) { |
| 715 | pr_debug("RX Hash fields_mask is not supported - TCP must be set with IPv4 or IPv6\n"); | 728 | pr_debug("RX Hash fields_mask is not supported - TCP must be set with IPv4 or IPv6\n"); |
| 716 | return (-EOPNOTSUPP); | 729 | return (-EOPNOTSUPP); |
| 717 | } | 730 | } |
| 718 | |||
| 719 | } else if ((ucmd->rx_hash_fields_mask & MLX4_IB_RX_HASH_SRC_PORT_TCP) || | 731 | } else if ((ucmd->rx_hash_fields_mask & MLX4_IB_RX_HASH_SRC_PORT_TCP) || |
| 720 | (ucmd->rx_hash_fields_mask & MLX4_IB_RX_HASH_DST_PORT_TCP)) { | 732 | (ucmd->rx_hash_fields_mask & MLX4_IB_RX_HASH_DST_PORT_TCP)) { |
| 721 | pr_debug("RX Hash fields_mask is not supported - both TCP SRC and DST must be set\n"); | 733 | pr_debug("RX Hash fields_mask is not supported - both TCP SRC and DST must be set\n"); |
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_cm.c b/drivers/infiniband/ulp/ipoib/ipoib_cm.c index 87f4bd99cdf7..2c13123bfd69 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib_cm.c +++ b/drivers/infiniband/ulp/ipoib/ipoib_cm.c | |||
| @@ -1145,6 +1145,7 @@ static int ipoib_cm_tx_init(struct ipoib_cm_tx *p, u32 qpn, | |||
| 1145 | noio_flag = memalloc_noio_save(); | 1145 | noio_flag = memalloc_noio_save(); |
| 1146 | p->tx_ring = vzalloc(ipoib_sendq_size * sizeof(*p->tx_ring)); | 1146 | p->tx_ring = vzalloc(ipoib_sendq_size * sizeof(*p->tx_ring)); |
| 1147 | if (!p->tx_ring) { | 1147 | if (!p->tx_ring) { |
| 1148 | memalloc_noio_restore(noio_flag); | ||
| 1148 | ret = -ENOMEM; | 1149 | ret = -ENOMEM; |
| 1149 | goto err_tx; | 1150 | goto err_tx; |
| 1150 | } | 1151 | } |
diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c index a0babdbf7146..4a2de34895ec 100644 --- a/drivers/iommu/intel-iommu.c +++ b/drivers/iommu/intel-iommu.c | |||
| @@ -2250,10 +2250,12 @@ static int __domain_mapping(struct dmar_domain *domain, unsigned long iov_pfn, | |||
| 2250 | uint64_t tmp; | 2250 | uint64_t tmp; |
| 2251 | 2251 | ||
| 2252 | if (!sg_res) { | 2252 | if (!sg_res) { |
| 2253 | unsigned int pgoff = sg->offset & ~PAGE_MASK; | ||
| 2254 | |||
| 2253 | sg_res = aligned_nrpages(sg->offset, sg->length); | 2255 | sg_res = aligned_nrpages(sg->offset, sg->length); |
| 2254 | sg->dma_address = ((dma_addr_t)iov_pfn << VTD_PAGE_SHIFT) + sg->offset; | 2256 | sg->dma_address = ((dma_addr_t)iov_pfn << VTD_PAGE_SHIFT) + pgoff; |
| 2255 | sg->dma_length = sg->length; | 2257 | sg->dma_length = sg->length; |
| 2256 | pteval = page_to_phys(sg_page(sg)) | prot; | 2258 | pteval = (sg_phys(sg) - pgoff) | prot; |
| 2257 | phys_pfn = pteval >> VTD_PAGE_SHIFT; | 2259 | phys_pfn = pteval >> VTD_PAGE_SHIFT; |
| 2258 | } | 2260 | } |
| 2259 | 2261 | ||
| @@ -3787,7 +3789,7 @@ static int intel_nontranslate_map_sg(struct device *hddev, | |||
| 3787 | 3789 | ||
| 3788 | for_each_sg(sglist, sg, nelems, i) { | 3790 | for_each_sg(sglist, sg, nelems, i) { |
| 3789 | BUG_ON(!sg_page(sg)); | 3791 | BUG_ON(!sg_page(sg)); |
| 3790 | sg->dma_address = page_to_phys(sg_page(sg)) + sg->offset; | 3792 | sg->dma_address = sg_phys(sg); |
| 3791 | sg->dma_length = sg->length; | 3793 | sg->dma_length = sg->length; |
| 3792 | } | 3794 | } |
| 3793 | return nelems; | 3795 | return nelems; |
diff --git a/drivers/md/bcache/alloc.c b/drivers/md/bcache/alloc.c index a27d85232ce1..a0cc1bc6d884 100644 --- a/drivers/md/bcache/alloc.c +++ b/drivers/md/bcache/alloc.c | |||
| @@ -490,7 +490,7 @@ int __bch_bucket_alloc_set(struct cache_set *c, unsigned reserve, | |||
| 490 | if (b == -1) | 490 | if (b == -1) |
| 491 | goto err; | 491 | goto err; |
| 492 | 492 | ||
| 493 | k->ptr[i] = PTR(ca->buckets[b].gen, | 493 | k->ptr[i] = MAKE_PTR(ca->buckets[b].gen, |
| 494 | bucket_to_sector(c, b), | 494 | bucket_to_sector(c, b), |
| 495 | ca->sb.nr_this_dev); | 495 | ca->sb.nr_this_dev); |
| 496 | 496 | ||
diff --git a/drivers/md/bcache/btree.c b/drivers/md/bcache/btree.c index 11c5503d31dc..81e8dc3dbe5e 100644 --- a/drivers/md/bcache/btree.c +++ b/drivers/md/bcache/btree.c | |||
| @@ -807,7 +807,10 @@ int bch_btree_cache_alloc(struct cache_set *c) | |||
| 807 | c->shrink.scan_objects = bch_mca_scan; | 807 | c->shrink.scan_objects = bch_mca_scan; |
| 808 | c->shrink.seeks = 4; | 808 | c->shrink.seeks = 4; |
| 809 | c->shrink.batch = c->btree_pages * 2; | 809 | c->shrink.batch = c->btree_pages * 2; |
| 810 | register_shrinker(&c->shrink); | 810 | |
| 811 | if (register_shrinker(&c->shrink)) | ||
| 812 | pr_warn("bcache: %s: could not register shrinker", | ||
| 813 | __func__); | ||
| 811 | 814 | ||
| 812 | return 0; | 815 | return 0; |
| 813 | } | 816 | } |
diff --git a/drivers/md/bcache/extents.c b/drivers/md/bcache/extents.c index 41c238fc3733..f9d391711595 100644 --- a/drivers/md/bcache/extents.c +++ b/drivers/md/bcache/extents.c | |||
| @@ -585,7 +585,7 @@ static bool bch_extent_merge(struct btree_keys *bk, struct bkey *l, struct bkey | |||
| 585 | return false; | 585 | return false; |
| 586 | 586 | ||
| 587 | for (i = 0; i < KEY_PTRS(l); i++) | 587 | for (i = 0; i < KEY_PTRS(l); i++) |
| 588 | if (l->ptr[i] + PTR(0, KEY_SIZE(l), 0) != r->ptr[i] || | 588 | if (l->ptr[i] + MAKE_PTR(0, KEY_SIZE(l), 0) != r->ptr[i] || |
| 589 | PTR_BUCKET_NR(b->c, l, i) != PTR_BUCKET_NR(b->c, r, i)) | 589 | PTR_BUCKET_NR(b->c, l, i) != PTR_BUCKET_NR(b->c, r, i)) |
| 590 | return false; | 590 | return false; |
| 591 | 591 | ||
diff --git a/drivers/md/bcache/journal.c b/drivers/md/bcache/journal.c index 02a98ddb592d..a87165c1d8e5 100644 --- a/drivers/md/bcache/journal.c +++ b/drivers/md/bcache/journal.c | |||
| @@ -170,6 +170,11 @@ int bch_journal_read(struct cache_set *c, struct list_head *list) | |||
| 170 | * find a sequence of buckets with valid journal entries | 170 | * find a sequence of buckets with valid journal entries |
| 171 | */ | 171 | */ |
| 172 | for (i = 0; i < ca->sb.njournal_buckets; i++) { | 172 | for (i = 0; i < ca->sb.njournal_buckets; i++) { |
| 173 | /* | ||
| 174 | * We must try the index l with ZERO first for | ||
| 175 | * correctness due to the scenario that the journal | ||
| 176 | * bucket is circular buffer which might have wrapped | ||
| 177 | */ | ||
| 173 | l = (i * 2654435769U) % ca->sb.njournal_buckets; | 178 | l = (i * 2654435769U) % ca->sb.njournal_buckets; |
| 174 | 179 | ||
| 175 | if (test_bit(l, bitmap)) | 180 | if (test_bit(l, bitmap)) |
| @@ -507,7 +512,7 @@ static void journal_reclaim(struct cache_set *c) | |||
| 507 | continue; | 512 | continue; |
| 508 | 513 | ||
| 509 | ja->cur_idx = next; | 514 | ja->cur_idx = next; |
| 510 | k->ptr[n++] = PTR(0, | 515 | k->ptr[n++] = MAKE_PTR(0, |
| 511 | bucket_to_sector(c, ca->sb.d[ja->cur_idx]), | 516 | bucket_to_sector(c, ca->sb.d[ja->cur_idx]), |
| 512 | ca->sb.nr_this_dev); | 517 | ca->sb.nr_this_dev); |
| 513 | } | 518 | } |
diff --git a/drivers/md/bcache/request.c b/drivers/md/bcache/request.c index 3a7aed7282b2..643c3021624f 100644 --- a/drivers/md/bcache/request.c +++ b/drivers/md/bcache/request.c | |||
| @@ -708,16 +708,15 @@ static void cached_dev_read_error(struct closure *cl) | |||
| 708 | { | 708 | { |
| 709 | struct search *s = container_of(cl, struct search, cl); | 709 | struct search *s = container_of(cl, struct search, cl); |
| 710 | struct bio *bio = &s->bio.bio; | 710 | struct bio *bio = &s->bio.bio; |
| 711 | struct cached_dev *dc = container_of(s->d, struct cached_dev, disk); | ||
| 712 | 711 | ||
| 713 | /* | 712 | /* |
| 714 | * If cache device is dirty (dc->has_dirty is non-zero), then | 713 | * If read request hit dirty data (s->read_dirty_data is true), |
| 715 | * recovery a failed read request from cached device may get a | 714 | * then recovery a failed read request from cached device may |
| 716 | * stale data back. So read failure recovery is only permitted | 715 | * get a stale data back. So read failure recovery is only |
| 717 | * when cache device is clean. | 716 | * permitted when read request hit clean data in cache device, |
| 717 | * or when cache read race happened. | ||
| 718 | */ | 718 | */ |
| 719 | if (s->recoverable && | 719 | if (s->recoverable && !s->read_dirty_data) { |
| 720 | (dc && !atomic_read(&dc->has_dirty))) { | ||
| 721 | /* Retry from the backing device: */ | 720 | /* Retry from the backing device: */ |
| 722 | trace_bcache_read_retry(s->orig_bio); | 721 | trace_bcache_read_retry(s->orig_bio); |
| 723 | 722 | ||
diff --git a/drivers/md/dm-bufio.c b/drivers/md/dm-bufio.c index b8ac591aaaa7..c546b567f3b5 100644 --- a/drivers/md/dm-bufio.c +++ b/drivers/md/dm-bufio.c | |||
| @@ -1611,7 +1611,8 @@ static unsigned long __scan(struct dm_bufio_client *c, unsigned long nr_to_scan, | |||
| 1611 | int l; | 1611 | int l; |
| 1612 | struct dm_buffer *b, *tmp; | 1612 | struct dm_buffer *b, *tmp; |
| 1613 | unsigned long freed = 0; | 1613 | unsigned long freed = 0; |
| 1614 | unsigned long count = nr_to_scan; | 1614 | unsigned long count = c->n_buffers[LIST_CLEAN] + |
| 1615 | c->n_buffers[LIST_DIRTY]; | ||
| 1615 | unsigned long retain_target = get_retain_buffers(c); | 1616 | unsigned long retain_target = get_retain_buffers(c); |
| 1616 | 1617 | ||
| 1617 | for (l = 0; l < LIST_SIZE; l++) { | 1618 | for (l = 0; l < LIST_SIZE; l++) { |
| @@ -1647,8 +1648,11 @@ static unsigned long | |||
| 1647 | dm_bufio_shrink_count(struct shrinker *shrink, struct shrink_control *sc) | 1648 | dm_bufio_shrink_count(struct shrinker *shrink, struct shrink_control *sc) |
| 1648 | { | 1649 | { |
| 1649 | struct dm_bufio_client *c = container_of(shrink, struct dm_bufio_client, shrinker); | 1650 | struct dm_bufio_client *c = container_of(shrink, struct dm_bufio_client, shrinker); |
| 1651 | unsigned long count = READ_ONCE(c->n_buffers[LIST_CLEAN]) + | ||
| 1652 | READ_ONCE(c->n_buffers[LIST_DIRTY]); | ||
| 1653 | unsigned long retain_target = get_retain_buffers(c); | ||
| 1650 | 1654 | ||
| 1651 | return READ_ONCE(c->n_buffers[LIST_CLEAN]) + READ_ONCE(c->n_buffers[LIST_DIRTY]); | 1655 | return (count < retain_target) ? 0 : (count - retain_target); |
| 1652 | } | 1656 | } |
| 1653 | 1657 | ||
| 1654 | /* | 1658 | /* |
diff --git a/drivers/md/dm-cache-target.c b/drivers/md/dm-cache-target.c index cf23a14f9c6a..47407e43b96a 100644 --- a/drivers/md/dm-cache-target.c +++ b/drivers/md/dm-cache-target.c | |||
| @@ -3472,18 +3472,18 @@ static int __init dm_cache_init(void) | |||
| 3472 | { | 3472 | { |
| 3473 | int r; | 3473 | int r; |
| 3474 | 3474 | ||
| 3475 | r = dm_register_target(&cache_target); | ||
| 3476 | if (r) { | ||
| 3477 | DMERR("cache target registration failed: %d", r); | ||
| 3478 | return r; | ||
| 3479 | } | ||
| 3480 | |||
| 3481 | migration_cache = KMEM_CACHE(dm_cache_migration, 0); | 3475 | migration_cache = KMEM_CACHE(dm_cache_migration, 0); |
| 3482 | if (!migration_cache) { | 3476 | if (!migration_cache) { |
| 3483 | dm_unregister_target(&cache_target); | 3477 | dm_unregister_target(&cache_target); |
| 3484 | return -ENOMEM; | 3478 | return -ENOMEM; |
| 3485 | } | 3479 | } |
| 3486 | 3480 | ||
| 3481 | r = dm_register_target(&cache_target); | ||
| 3482 | if (r) { | ||
| 3483 | DMERR("cache target registration failed: %d", r); | ||
| 3484 | return r; | ||
| 3485 | } | ||
| 3486 | |||
| 3487 | return 0; | 3487 | return 0; |
| 3488 | } | 3488 | } |
| 3489 | 3489 | ||
diff --git a/drivers/md/dm-mpath.c b/drivers/md/dm-mpath.c index c8faa2b85842..f7810cc869ac 100644 --- a/drivers/md/dm-mpath.c +++ b/drivers/md/dm-mpath.c | |||
| @@ -458,6 +458,38 @@ do { \ | |||
| 458 | } while (0) | 458 | } while (0) |
| 459 | 459 | ||
| 460 | /* | 460 | /* |
| 461 | * Check whether bios must be queued in the device-mapper core rather | ||
| 462 | * than here in the target. | ||
| 463 | * | ||
| 464 | * If MPATHF_QUEUE_IF_NO_PATH and MPATHF_SAVED_QUEUE_IF_NO_PATH hold | ||
| 465 | * the same value then we are not between multipath_presuspend() | ||
| 466 | * and multipath_resume() calls and we have no need to check | ||
| 467 | * for the DMF_NOFLUSH_SUSPENDING flag. | ||
| 468 | */ | ||
| 469 | static bool __must_push_back(struct multipath *m, unsigned long flags) | ||
| 470 | { | ||
| 471 | return ((test_bit(MPATHF_QUEUE_IF_NO_PATH, &flags) != | ||
| 472 | test_bit(MPATHF_SAVED_QUEUE_IF_NO_PATH, &flags)) && | ||
| 473 | dm_noflush_suspending(m->ti)); | ||
| 474 | } | ||
| 475 | |||
| 476 | /* | ||
| 477 | * Following functions use READ_ONCE to get atomic access to | ||
| 478 | * all m->flags to avoid taking spinlock | ||
| 479 | */ | ||
| 480 | static bool must_push_back_rq(struct multipath *m) | ||
| 481 | { | ||
| 482 | unsigned long flags = READ_ONCE(m->flags); | ||
| 483 | return test_bit(MPATHF_QUEUE_IF_NO_PATH, &flags) || __must_push_back(m, flags); | ||
| 484 | } | ||
| 485 | |||
| 486 | static bool must_push_back_bio(struct multipath *m) | ||
| 487 | { | ||
| 488 | unsigned long flags = READ_ONCE(m->flags); | ||
| 489 | return __must_push_back(m, flags); | ||
| 490 | } | ||
| 491 | |||
| 492 | /* | ||
| 461 | * Map cloned requests (request-based multipath) | 493 | * Map cloned requests (request-based multipath) |
| 462 | */ | 494 | */ |
| 463 | static int multipath_clone_and_map(struct dm_target *ti, struct request *rq, | 495 | static int multipath_clone_and_map(struct dm_target *ti, struct request *rq, |
| @@ -478,7 +510,7 @@ static int multipath_clone_and_map(struct dm_target *ti, struct request *rq, | |||
| 478 | pgpath = choose_pgpath(m, nr_bytes); | 510 | pgpath = choose_pgpath(m, nr_bytes); |
| 479 | 511 | ||
| 480 | if (!pgpath) { | 512 | if (!pgpath) { |
| 481 | if (test_bit(MPATHF_QUEUE_IF_NO_PATH, &m->flags)) | 513 | if (must_push_back_rq(m)) |
| 482 | return DM_MAPIO_DELAY_REQUEUE; | 514 | return DM_MAPIO_DELAY_REQUEUE; |
| 483 | dm_report_EIO(m); /* Failed */ | 515 | dm_report_EIO(m); /* Failed */ |
| 484 | return DM_MAPIO_KILL; | 516 | return DM_MAPIO_KILL; |
| @@ -553,7 +585,7 @@ static int __multipath_map_bio(struct multipath *m, struct bio *bio, struct dm_m | |||
| 553 | } | 585 | } |
| 554 | 586 | ||
| 555 | if (!pgpath) { | 587 | if (!pgpath) { |
| 556 | if (test_bit(MPATHF_QUEUE_IF_NO_PATH, &m->flags)) | 588 | if (must_push_back_bio(m)) |
| 557 | return DM_MAPIO_REQUEUE; | 589 | return DM_MAPIO_REQUEUE; |
| 558 | dm_report_EIO(m); | 590 | dm_report_EIO(m); |
| 559 | return DM_MAPIO_KILL; | 591 | return DM_MAPIO_KILL; |
| @@ -651,8 +683,7 @@ static int queue_if_no_path(struct multipath *m, bool queue_if_no_path, | |||
| 651 | assign_bit(MPATHF_SAVED_QUEUE_IF_NO_PATH, &m->flags, | 683 | assign_bit(MPATHF_SAVED_QUEUE_IF_NO_PATH, &m->flags, |
| 652 | (save_old_value && test_bit(MPATHF_QUEUE_IF_NO_PATH, &m->flags)) || | 684 | (save_old_value && test_bit(MPATHF_QUEUE_IF_NO_PATH, &m->flags)) || |
| 653 | (!save_old_value && queue_if_no_path)); | 685 | (!save_old_value && queue_if_no_path)); |
| 654 | assign_bit(MPATHF_QUEUE_IF_NO_PATH, &m->flags, | 686 | assign_bit(MPATHF_QUEUE_IF_NO_PATH, &m->flags, queue_if_no_path); |
| 655 | queue_if_no_path || dm_noflush_suspending(m->ti)); | ||
| 656 | spin_unlock_irqrestore(&m->lock, flags); | 687 | spin_unlock_irqrestore(&m->lock, flags); |
| 657 | 688 | ||
| 658 | if (!queue_if_no_path) { | 689 | if (!queue_if_no_path) { |
| @@ -1486,7 +1517,7 @@ static int multipath_end_io(struct dm_target *ti, struct request *clone, | |||
| 1486 | fail_path(pgpath); | 1517 | fail_path(pgpath); |
| 1487 | 1518 | ||
| 1488 | if (atomic_read(&m->nr_valid_paths) == 0 && | 1519 | if (atomic_read(&m->nr_valid_paths) == 0 && |
| 1489 | !test_bit(MPATHF_QUEUE_IF_NO_PATH, &m->flags)) { | 1520 | !must_push_back_rq(m)) { |
| 1490 | if (error == BLK_STS_IOERR) | 1521 | if (error == BLK_STS_IOERR) |
| 1491 | dm_report_EIO(m); | 1522 | dm_report_EIO(m); |
| 1492 | /* complete with the original error */ | 1523 | /* complete with the original error */ |
| @@ -1521,8 +1552,12 @@ static int multipath_end_io_bio(struct dm_target *ti, struct bio *clone, | |||
| 1521 | 1552 | ||
| 1522 | if (atomic_read(&m->nr_valid_paths) == 0 && | 1553 | if (atomic_read(&m->nr_valid_paths) == 0 && |
| 1523 | !test_bit(MPATHF_QUEUE_IF_NO_PATH, &m->flags)) { | 1554 | !test_bit(MPATHF_QUEUE_IF_NO_PATH, &m->flags)) { |
| 1524 | dm_report_EIO(m); | 1555 | if (must_push_back_bio(m)) { |
| 1525 | *error = BLK_STS_IOERR; | 1556 | r = DM_ENDIO_REQUEUE; |
| 1557 | } else { | ||
| 1558 | dm_report_EIO(m); | ||
| 1559 | *error = BLK_STS_IOERR; | ||
| 1560 | } | ||
| 1526 | goto done; | 1561 | goto done; |
| 1527 | } | 1562 | } |
| 1528 | 1563 | ||
| @@ -1957,13 +1992,6 @@ static int __init dm_multipath_init(void) | |||
| 1957 | { | 1992 | { |
| 1958 | int r; | 1993 | int r; |
| 1959 | 1994 | ||
| 1960 | r = dm_register_target(&multipath_target); | ||
| 1961 | if (r < 0) { | ||
| 1962 | DMERR("request-based register failed %d", r); | ||
| 1963 | r = -EINVAL; | ||
| 1964 | goto bad_register_target; | ||
| 1965 | } | ||
| 1966 | |||
| 1967 | kmultipathd = alloc_workqueue("kmpathd", WQ_MEM_RECLAIM, 0); | 1995 | kmultipathd = alloc_workqueue("kmpathd", WQ_MEM_RECLAIM, 0); |
| 1968 | if (!kmultipathd) { | 1996 | if (!kmultipathd) { |
| 1969 | DMERR("failed to create workqueue kmpathd"); | 1997 | DMERR("failed to create workqueue kmpathd"); |
| @@ -1985,13 +2013,20 @@ static int __init dm_multipath_init(void) | |||
| 1985 | goto bad_alloc_kmpath_handlerd; | 2013 | goto bad_alloc_kmpath_handlerd; |
| 1986 | } | 2014 | } |
| 1987 | 2015 | ||
| 2016 | r = dm_register_target(&multipath_target); | ||
| 2017 | if (r < 0) { | ||
| 2018 | DMERR("request-based register failed %d", r); | ||
| 2019 | r = -EINVAL; | ||
| 2020 | goto bad_register_target; | ||
| 2021 | } | ||
| 2022 | |||
| 1988 | return 0; | 2023 | return 0; |
| 1989 | 2024 | ||
| 2025 | bad_register_target: | ||
| 2026 | destroy_workqueue(kmpath_handlerd); | ||
| 1990 | bad_alloc_kmpath_handlerd: | 2027 | bad_alloc_kmpath_handlerd: |
| 1991 | destroy_workqueue(kmultipathd); | 2028 | destroy_workqueue(kmultipathd); |
| 1992 | bad_alloc_kmultipathd: | 2029 | bad_alloc_kmultipathd: |
| 1993 | dm_unregister_target(&multipath_target); | ||
| 1994 | bad_register_target: | ||
| 1995 | return r; | 2030 | return r; |
| 1996 | } | 2031 | } |
| 1997 | 2032 | ||
diff --git a/drivers/md/dm-snap.c b/drivers/md/dm-snap.c index 1113b42e1eda..a0613bd8ed00 100644 --- a/drivers/md/dm-snap.c +++ b/drivers/md/dm-snap.c | |||
| @@ -2411,24 +2411,6 @@ static int __init dm_snapshot_init(void) | |||
| 2411 | return r; | 2411 | return r; |
| 2412 | } | 2412 | } |
| 2413 | 2413 | ||
| 2414 | r = dm_register_target(&snapshot_target); | ||
| 2415 | if (r < 0) { | ||
| 2416 | DMERR("snapshot target register failed %d", r); | ||
| 2417 | goto bad_register_snapshot_target; | ||
| 2418 | } | ||
| 2419 | |||
| 2420 | r = dm_register_target(&origin_target); | ||
| 2421 | if (r < 0) { | ||
| 2422 | DMERR("Origin target register failed %d", r); | ||
| 2423 | goto bad_register_origin_target; | ||
| 2424 | } | ||
| 2425 | |||
| 2426 | r = dm_register_target(&merge_target); | ||
| 2427 | if (r < 0) { | ||
| 2428 | DMERR("Merge target register failed %d", r); | ||
| 2429 | goto bad_register_merge_target; | ||
| 2430 | } | ||
| 2431 | |||
| 2432 | r = init_origin_hash(); | 2414 | r = init_origin_hash(); |
| 2433 | if (r) { | 2415 | if (r) { |
| 2434 | DMERR("init_origin_hash failed."); | 2416 | DMERR("init_origin_hash failed."); |
| @@ -2449,19 +2431,37 @@ static int __init dm_snapshot_init(void) | |||
| 2449 | goto bad_pending_cache; | 2431 | goto bad_pending_cache; |
| 2450 | } | 2432 | } |
| 2451 | 2433 | ||
| 2434 | r = dm_register_target(&snapshot_target); | ||
| 2435 | if (r < 0) { | ||
| 2436 | DMERR("snapshot target register failed %d", r); | ||
| 2437 | goto bad_register_snapshot_target; | ||
| 2438 | } | ||
| 2439 | |||
| 2440 | r = dm_register_target(&origin_target); | ||
| 2441 | if (r < 0) { | ||
| 2442 | DMERR("Origin target register failed %d", r); | ||
| 2443 | goto bad_register_origin_target; | ||
| 2444 | } | ||
| 2445 | |||
| 2446 | r = dm_register_target(&merge_target); | ||
| 2447 | if (r < 0) { | ||
| 2448 | DMERR("Merge target register failed %d", r); | ||
| 2449 | goto bad_register_merge_target; | ||
| 2450 | } | ||
| 2451 | |||
| 2452 | return 0; | 2452 | return 0; |
| 2453 | 2453 | ||
| 2454 | bad_pending_cache: | ||
| 2455 | kmem_cache_destroy(exception_cache); | ||
| 2456 | bad_exception_cache: | ||
| 2457 | exit_origin_hash(); | ||
| 2458 | bad_origin_hash: | ||
| 2459 | dm_unregister_target(&merge_target); | ||
| 2460 | bad_register_merge_target: | 2454 | bad_register_merge_target: |
| 2461 | dm_unregister_target(&origin_target); | 2455 | dm_unregister_target(&origin_target); |
| 2462 | bad_register_origin_target: | 2456 | bad_register_origin_target: |
| 2463 | dm_unregister_target(&snapshot_target); | 2457 | dm_unregister_target(&snapshot_target); |
| 2464 | bad_register_snapshot_target: | 2458 | bad_register_snapshot_target: |
| 2459 | kmem_cache_destroy(pending_cache); | ||
| 2460 | bad_pending_cache: | ||
| 2461 | kmem_cache_destroy(exception_cache); | ||
| 2462 | bad_exception_cache: | ||
| 2463 | exit_origin_hash(); | ||
| 2464 | bad_origin_hash: | ||
| 2465 | dm_exception_store_exit(); | 2465 | dm_exception_store_exit(); |
| 2466 | 2466 | ||
| 2467 | return r; | 2467 | return r; |
diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c index 88130b5d95f9..aaffd0c0ee9a 100644 --- a/drivers/md/dm-table.c +++ b/drivers/md/dm-table.c | |||
| @@ -453,14 +453,15 @@ int dm_get_device(struct dm_target *ti, const char *path, fmode_t mode, | |||
| 453 | 453 | ||
| 454 | refcount_set(&dd->count, 1); | 454 | refcount_set(&dd->count, 1); |
| 455 | list_add(&dd->list, &t->devices); | 455 | list_add(&dd->list, &t->devices); |
| 456 | goto out; | ||
| 456 | 457 | ||
| 457 | } else if (dd->dm_dev->mode != (mode | dd->dm_dev->mode)) { | 458 | } else if (dd->dm_dev->mode != (mode | dd->dm_dev->mode)) { |
| 458 | r = upgrade_mode(dd, mode, t->md); | 459 | r = upgrade_mode(dd, mode, t->md); |
| 459 | if (r) | 460 | if (r) |
| 460 | return r; | 461 | return r; |
| 461 | refcount_inc(&dd->count); | ||
| 462 | } | 462 | } |
| 463 | 463 | refcount_inc(&dd->count); | |
| 464 | out: | ||
| 464 | *result = dd->dm_dev; | 465 | *result = dd->dm_dev; |
| 465 | return 0; | 466 | return 0; |
| 466 | } | 467 | } |
diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c index 89e5dff9b4cf..f91d771fff4b 100644 --- a/drivers/md/dm-thin.c +++ b/drivers/md/dm-thin.c | |||
| @@ -4355,30 +4355,28 @@ static struct target_type thin_target = { | |||
| 4355 | 4355 | ||
| 4356 | static int __init dm_thin_init(void) | 4356 | static int __init dm_thin_init(void) |
| 4357 | { | 4357 | { |
| 4358 | int r; | 4358 | int r = -ENOMEM; |
| 4359 | 4359 | ||
| 4360 | pool_table_init(); | 4360 | pool_table_init(); |
| 4361 | 4361 | ||
| 4362 | _new_mapping_cache = KMEM_CACHE(dm_thin_new_mapping, 0); | ||
| 4363 | if (!_new_mapping_cache) | ||
| 4364 | return r; | ||
| 4365 | |||
| 4362 | r = dm_register_target(&thin_target); | 4366 | r = dm_register_target(&thin_target); |
| 4363 | if (r) | 4367 | if (r) |
| 4364 | return r; | 4368 | goto bad_new_mapping_cache; |
| 4365 | 4369 | ||
| 4366 | r = dm_register_target(&pool_target); | 4370 | r = dm_register_target(&pool_target); |
| 4367 | if (r) | 4371 | if (r) |
| 4368 | goto bad_pool_target; | 4372 | goto bad_thin_target; |
| 4369 | |||
| 4370 | r = -ENOMEM; | ||
| 4371 | |||
| 4372 | _new_mapping_cache = KMEM_CACHE(dm_thin_new_mapping, 0); | ||
| 4373 | if (!_new_mapping_cache) | ||
| 4374 | goto bad_new_mapping_cache; | ||
| 4375 | 4373 | ||
| 4376 | return 0; | 4374 | return 0; |
| 4377 | 4375 | ||
| 4378 | bad_new_mapping_cache: | 4376 | bad_thin_target: |
| 4379 | dm_unregister_target(&pool_target); | ||
| 4380 | bad_pool_target: | ||
| 4381 | dm_unregister_target(&thin_target); | 4377 | dm_unregister_target(&thin_target); |
| 4378 | bad_new_mapping_cache: | ||
| 4379 | kmem_cache_destroy(_new_mapping_cache); | ||
| 4382 | 4380 | ||
| 4383 | return r; | 4381 | return r; |
| 4384 | } | 4382 | } |
diff --git a/drivers/md/md.c b/drivers/md/md.c index 41c050b59ec4..4e4dee0ec2de 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c | |||
| @@ -7605,7 +7605,9 @@ static int status_resync(struct seq_file *seq, struct mddev *mddev) | |||
| 7605 | if (test_bit(MD_RECOVERY_DONE, &mddev->recovery)) | 7605 | if (test_bit(MD_RECOVERY_DONE, &mddev->recovery)) |
| 7606 | /* Still cleaning up */ | 7606 | /* Still cleaning up */ |
| 7607 | resync = max_sectors; | 7607 | resync = max_sectors; |
| 7608 | } else | 7608 | } else if (resync > max_sectors) |
| 7609 | resync = max_sectors; | ||
| 7610 | else | ||
| 7609 | resync -= atomic_read(&mddev->recovery_active); | 7611 | resync -= atomic_read(&mddev->recovery_active); |
| 7610 | 7612 | ||
| 7611 | if (resync == 0) { | 7613 | if (resync == 0) { |
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index cc9d337a1ed3..6df398e3a008 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c | |||
| @@ -809,11 +809,15 @@ static void flush_pending_writes(struct r1conf *conf) | |||
| 809 | spin_lock_irq(&conf->device_lock); | 809 | spin_lock_irq(&conf->device_lock); |
| 810 | 810 | ||
| 811 | if (conf->pending_bio_list.head) { | 811 | if (conf->pending_bio_list.head) { |
| 812 | struct blk_plug plug; | ||
| 812 | struct bio *bio; | 813 | struct bio *bio; |
| 814 | |||
| 813 | bio = bio_list_get(&conf->pending_bio_list); | 815 | bio = bio_list_get(&conf->pending_bio_list); |
| 814 | conf->pending_count = 0; | 816 | conf->pending_count = 0; |
| 815 | spin_unlock_irq(&conf->device_lock); | 817 | spin_unlock_irq(&conf->device_lock); |
| 818 | blk_start_plug(&plug); | ||
| 816 | flush_bio_list(conf, bio); | 819 | flush_bio_list(conf, bio); |
| 820 | blk_finish_plug(&plug); | ||
| 817 | } else | 821 | } else |
| 818 | spin_unlock_irq(&conf->device_lock); | 822 | spin_unlock_irq(&conf->device_lock); |
| 819 | } | 823 | } |
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c index b9edbc747a95..c131835cf008 100644 --- a/drivers/md/raid10.c +++ b/drivers/md/raid10.c | |||
| @@ -894,10 +894,13 @@ static void flush_pending_writes(struct r10conf *conf) | |||
| 894 | spin_lock_irq(&conf->device_lock); | 894 | spin_lock_irq(&conf->device_lock); |
| 895 | 895 | ||
| 896 | if (conf->pending_bio_list.head) { | 896 | if (conf->pending_bio_list.head) { |
| 897 | struct blk_plug plug; | ||
| 897 | struct bio *bio; | 898 | struct bio *bio; |
| 899 | |||
| 898 | bio = bio_list_get(&conf->pending_bio_list); | 900 | bio = bio_list_get(&conf->pending_bio_list); |
| 899 | conf->pending_count = 0; | 901 | conf->pending_count = 0; |
| 900 | spin_unlock_irq(&conf->device_lock); | 902 | spin_unlock_irq(&conf->device_lock); |
| 903 | blk_start_plug(&plug); | ||
| 901 | /* flush any pending bitmap writes to disk | 904 | /* flush any pending bitmap writes to disk |
| 902 | * before proceeding w/ I/O */ | 905 | * before proceeding w/ I/O */ |
| 903 | bitmap_unplug(conf->mddev->bitmap); | 906 | bitmap_unplug(conf->mddev->bitmap); |
| @@ -918,6 +921,7 @@ static void flush_pending_writes(struct r10conf *conf) | |||
| 918 | generic_make_request(bio); | 921 | generic_make_request(bio); |
| 919 | bio = next; | 922 | bio = next; |
| 920 | } | 923 | } |
| 924 | blk_finish_plug(&plug); | ||
| 921 | } else | 925 | } else |
| 922 | spin_unlock_irq(&conf->device_lock); | 926 | spin_unlock_irq(&conf->device_lock); |
| 923 | } | 927 | } |
diff --git a/drivers/md/raid5-cache.c b/drivers/md/raid5-cache.c index f1c86d938502..39f31f07ffe9 100644 --- a/drivers/md/raid5-cache.c +++ b/drivers/md/raid5-cache.c | |||
| @@ -2577,31 +2577,22 @@ static ssize_t r5c_journal_mode_show(struct mddev *mddev, char *page) | |||
| 2577 | int r5c_journal_mode_set(struct mddev *mddev, int mode) | 2577 | int r5c_journal_mode_set(struct mddev *mddev, int mode) |
| 2578 | { | 2578 | { |
| 2579 | struct r5conf *conf; | 2579 | struct r5conf *conf; |
| 2580 | int err; | ||
| 2581 | 2580 | ||
| 2582 | if (mode < R5C_JOURNAL_MODE_WRITE_THROUGH || | 2581 | if (mode < R5C_JOURNAL_MODE_WRITE_THROUGH || |
| 2583 | mode > R5C_JOURNAL_MODE_WRITE_BACK) | 2582 | mode > R5C_JOURNAL_MODE_WRITE_BACK) |
| 2584 | return -EINVAL; | 2583 | return -EINVAL; |
| 2585 | 2584 | ||
| 2586 | err = mddev_lock(mddev); | ||
| 2587 | if (err) | ||
| 2588 | return err; | ||
| 2589 | conf = mddev->private; | 2585 | conf = mddev->private; |
| 2590 | if (!conf || !conf->log) { | 2586 | if (!conf || !conf->log) |
| 2591 | mddev_unlock(mddev); | ||
| 2592 | return -ENODEV; | 2587 | return -ENODEV; |
| 2593 | } | ||
| 2594 | 2588 | ||
| 2595 | if (raid5_calc_degraded(conf) > 0 && | 2589 | if (raid5_calc_degraded(conf) > 0 && |
| 2596 | mode == R5C_JOURNAL_MODE_WRITE_BACK) { | 2590 | mode == R5C_JOURNAL_MODE_WRITE_BACK) |
| 2597 | mddev_unlock(mddev); | ||
| 2598 | return -EINVAL; | 2591 | return -EINVAL; |
| 2599 | } | ||
| 2600 | 2592 | ||
| 2601 | mddev_suspend(mddev); | 2593 | mddev_suspend(mddev); |
| 2602 | conf->log->r5c_journal_mode = mode; | 2594 | conf->log->r5c_journal_mode = mode; |
| 2603 | mddev_resume(mddev); | 2595 | mddev_resume(mddev); |
| 2604 | mddev_unlock(mddev); | ||
| 2605 | 2596 | ||
| 2606 | pr_debug("md/raid:%s: setting r5c cache mode to %d: %s\n", | 2597 | pr_debug("md/raid:%s: setting r5c cache mode to %d: %s\n", |
| 2607 | mdname(mddev), mode, r5c_journal_mode_str[mode]); | 2598 | mdname(mddev), mode, r5c_journal_mode_str[mode]); |
| @@ -2614,6 +2605,7 @@ static ssize_t r5c_journal_mode_store(struct mddev *mddev, | |||
| 2614 | { | 2605 | { |
| 2615 | int mode = ARRAY_SIZE(r5c_journal_mode_str); | 2606 | int mode = ARRAY_SIZE(r5c_journal_mode_str); |
| 2616 | size_t len = length; | 2607 | size_t len = length; |
| 2608 | int ret; | ||
| 2617 | 2609 | ||
| 2618 | if (len < 2) | 2610 | if (len < 2) |
| 2619 | return -EINVAL; | 2611 | return -EINVAL; |
| @@ -2625,8 +2617,12 @@ static ssize_t r5c_journal_mode_store(struct mddev *mddev, | |||
| 2625 | if (strlen(r5c_journal_mode_str[mode]) == len && | 2617 | if (strlen(r5c_journal_mode_str[mode]) == len && |
| 2626 | !strncmp(page, r5c_journal_mode_str[mode], len)) | 2618 | !strncmp(page, r5c_journal_mode_str[mode], len)) |
| 2627 | break; | 2619 | break; |
| 2628 | 2620 | ret = mddev_lock(mddev); | |
| 2629 | return r5c_journal_mode_set(mddev, mode) ?: length; | 2621 | if (ret) |
| 2622 | return ret; | ||
| 2623 | ret = r5c_journal_mode_set(mddev, mode); | ||
| 2624 | mddev_unlock(mddev); | ||
| 2625 | return ret ?: length; | ||
| 2630 | } | 2626 | } |
| 2631 | 2627 | ||
| 2632 | struct md_sysfs_entry | 2628 | struct md_sysfs_entry |
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index 31dc25e2871a..98ce4272ace9 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c | |||
| @@ -2677,13 +2677,13 @@ static void raid5_error(struct mddev *mddev, struct md_rdev *rdev) | |||
| 2677 | pr_debug("raid456: error called\n"); | 2677 | pr_debug("raid456: error called\n"); |
| 2678 | 2678 | ||
| 2679 | spin_lock_irqsave(&conf->device_lock, flags); | 2679 | spin_lock_irqsave(&conf->device_lock, flags); |
| 2680 | set_bit(Faulty, &rdev->flags); | ||
| 2680 | clear_bit(In_sync, &rdev->flags); | 2681 | clear_bit(In_sync, &rdev->flags); |
| 2681 | mddev->degraded = raid5_calc_degraded(conf); | 2682 | mddev->degraded = raid5_calc_degraded(conf); |
| 2682 | spin_unlock_irqrestore(&conf->device_lock, flags); | 2683 | spin_unlock_irqrestore(&conf->device_lock, flags); |
| 2683 | set_bit(MD_RECOVERY_INTR, &mddev->recovery); | 2684 | set_bit(MD_RECOVERY_INTR, &mddev->recovery); |
| 2684 | 2685 | ||
| 2685 | set_bit(Blocked, &rdev->flags); | 2686 | set_bit(Blocked, &rdev->flags); |
| 2686 | set_bit(Faulty, &rdev->flags); | ||
| 2687 | set_mask_bits(&mddev->sb_flags, 0, | 2687 | set_mask_bits(&mddev->sb_flags, 0, |
| 2688 | BIT(MD_SB_CHANGE_DEVS) | BIT(MD_SB_CHANGE_PENDING)); | 2688 | BIT(MD_SB_CHANGE_DEVS) | BIT(MD_SB_CHANGE_PENDING)); |
| 2689 | pr_crit("md/raid:%s: Disk failure on %s, disabling device.\n" | 2689 | pr_crit("md/raid:%s: Disk failure on %s, disabling device.\n" |
diff --git a/drivers/media/common/siano/smscoreapi.c b/drivers/media/common/siano/smscoreapi.c index e4ea2a0c7a24..c5c827e11b64 100644 --- a/drivers/media/common/siano/smscoreapi.c +++ b/drivers/media/common/siano/smscoreapi.c | |||
| @@ -521,13 +521,13 @@ static void list_add_locked(struct list_head *new, struct list_head *head, | |||
| 521 | spin_unlock_irqrestore(lock, flags); | 521 | spin_unlock_irqrestore(lock, flags); |
| 522 | } | 522 | } |
| 523 | 523 | ||
| 524 | /** | 524 | /* |
| 525 | * register a client callback that called when device plugged in/unplugged | 525 | * register a client callback that called when device plugged in/unplugged |
| 526 | * NOTE: if devices exist callback is called immediately for each device | 526 | * NOTE: if devices exist callback is called immediately for each device |
| 527 | * | 527 | * |
| 528 | * @param hotplug callback | 528 | * @param hotplug callback |
| 529 | * | 529 | * |
| 530 | * @return 0 on success, <0 on error. | 530 | * return: 0 on success, <0 on error. |
| 531 | */ | 531 | */ |
| 532 | int smscore_register_hotplug(hotplug_t hotplug) | 532 | int smscore_register_hotplug(hotplug_t hotplug) |
| 533 | { | 533 | { |
| @@ -562,7 +562,7 @@ int smscore_register_hotplug(hotplug_t hotplug) | |||
| 562 | } | 562 | } |
| 563 | EXPORT_SYMBOL_GPL(smscore_register_hotplug); | 563 | EXPORT_SYMBOL_GPL(smscore_register_hotplug); |
| 564 | 564 | ||
| 565 | /** | 565 | /* |
| 566 | * unregister a client callback that called when device plugged in/unplugged | 566 | * unregister a client callback that called when device plugged in/unplugged |
| 567 | * | 567 | * |
| 568 | * @param hotplug callback | 568 | * @param hotplug callback |
| @@ -636,7 +636,7 @@ smscore_buffer_t *smscore_createbuffer(u8 *buffer, void *common_buffer, | |||
| 636 | return cb; | 636 | return cb; |
| 637 | } | 637 | } |
| 638 | 638 | ||
| 639 | /** | 639 | /* |
| 640 | * creates coredev object for a device, prepares buffers, | 640 | * creates coredev object for a device, prepares buffers, |
| 641 | * creates buffer mappings, notifies registered hotplugs about new device. | 641 | * creates buffer mappings, notifies registered hotplugs about new device. |
| 642 | * | 642 | * |
| @@ -644,7 +644,7 @@ smscore_buffer_t *smscore_createbuffer(u8 *buffer, void *common_buffer, | |||
| 644 | * and handlers | 644 | * and handlers |
| 645 | * @param coredev pointer to a value that receives created coredev object | 645 | * @param coredev pointer to a value that receives created coredev object |
| 646 | * | 646 | * |
| 647 | * @return 0 on success, <0 on error. | 647 | * return: 0 on success, <0 on error. |
| 648 | */ | 648 | */ |
| 649 | int smscore_register_device(struct smsdevice_params_t *params, | 649 | int smscore_register_device(struct smsdevice_params_t *params, |
| 650 | struct smscore_device_t **coredev, | 650 | struct smscore_device_t **coredev, |
| @@ -764,10 +764,10 @@ static int smscore_sendrequest_and_wait(struct smscore_device_t *coredev, | |||
| 764 | 0 : -ETIME; | 764 | 0 : -ETIME; |
| 765 | } | 765 | } |
| 766 | 766 | ||
| 767 | /** | 767 | /* |
| 768 | * Starts & enables IR operations | 768 | * Starts & enables IR operations |
| 769 | * | 769 | * |
| 770 | * @return 0 on success, < 0 on error. | 770 | * return: 0 on success, < 0 on error. |
| 771 | */ | 771 | */ |
| 772 | static int smscore_init_ir(struct smscore_device_t *coredev) | 772 | static int smscore_init_ir(struct smscore_device_t *coredev) |
| 773 | { | 773 | { |
| @@ -812,13 +812,13 @@ static int smscore_init_ir(struct smscore_device_t *coredev) | |||
| 812 | return 0; | 812 | return 0; |
| 813 | } | 813 | } |
| 814 | 814 | ||
| 815 | /** | 815 | /* |
| 816 | * configures device features according to board configuration structure. | 816 | * configures device features according to board configuration structure. |
| 817 | * | 817 | * |
| 818 | * @param coredev pointer to a coredev object returned by | 818 | * @param coredev pointer to a coredev object returned by |
| 819 | * smscore_register_device | 819 | * smscore_register_device |
| 820 | * | 820 | * |
| 821 | * @return 0 on success, <0 on error. | 821 | * return: 0 on success, <0 on error. |
| 822 | */ | 822 | */ |
| 823 | static int smscore_configure_board(struct smscore_device_t *coredev) | 823 | static int smscore_configure_board(struct smscore_device_t *coredev) |
| 824 | { | 824 | { |
| @@ -861,13 +861,13 @@ static int smscore_configure_board(struct smscore_device_t *coredev) | |||
| 861 | return 0; | 861 | return 0; |
| 862 | } | 862 | } |
| 863 | 863 | ||
| 864 | /** | 864 | /* |
| 865 | * sets initial device mode and notifies client hotplugs that device is ready | 865 | * sets initial device mode and notifies client hotplugs that device is ready |
| 866 | * | 866 | * |
| 867 | * @param coredev pointer to a coredev object returned by | 867 | * @param coredev pointer to a coredev object returned by |
| 868 | * smscore_register_device | 868 | * smscore_register_device |
| 869 | * | 869 | * |
| 870 | * @return 0 on success, <0 on error. | 870 | * return: 0 on success, <0 on error. |
| 871 | */ | 871 | */ |
| 872 | int smscore_start_device(struct smscore_device_t *coredev) | 872 | int smscore_start_device(struct smscore_device_t *coredev) |
| 873 | { | 873 | { |
| @@ -1087,7 +1087,7 @@ static char *smscore_fw_lkup[][DEVICE_MODE_MAX] = { | |||
| 1087 | }, | 1087 | }, |
| 1088 | }; | 1088 | }; |
| 1089 | 1089 | ||
| 1090 | /** | 1090 | /* |
| 1091 | * get firmware file name from one of the two mechanisms : sms_boards or | 1091 | * get firmware file name from one of the two mechanisms : sms_boards or |
| 1092 | * smscore_fw_lkup. | 1092 | * smscore_fw_lkup. |
| 1093 | * @param coredev pointer to a coredev object returned by | 1093 | * @param coredev pointer to a coredev object returned by |
| @@ -1096,7 +1096,7 @@ static char *smscore_fw_lkup[][DEVICE_MODE_MAX] = { | |||
| 1096 | * @param lookup if 1, always get the fw filename from smscore_fw_lkup | 1096 | * @param lookup if 1, always get the fw filename from smscore_fw_lkup |
| 1097 | * table. if 0, try first to get from sms_boards | 1097 | * table. if 0, try first to get from sms_boards |
| 1098 | * | 1098 | * |
| 1099 | * @return 0 on success, <0 on error. | 1099 | * return: 0 on success, <0 on error. |
| 1100 | */ | 1100 | */ |
| 1101 | static char *smscore_get_fw_filename(struct smscore_device_t *coredev, | 1101 | static char *smscore_get_fw_filename(struct smscore_device_t *coredev, |
| 1102 | int mode) | 1102 | int mode) |
| @@ -1125,7 +1125,7 @@ static char *smscore_get_fw_filename(struct smscore_device_t *coredev, | |||
| 1125 | return fw[mode]; | 1125 | return fw[mode]; |
| 1126 | } | 1126 | } |
| 1127 | 1127 | ||
| 1128 | /** | 1128 | /* |
| 1129 | * loads specified firmware into a buffer and calls device loadfirmware_handler | 1129 | * loads specified firmware into a buffer and calls device loadfirmware_handler |
| 1130 | * | 1130 | * |
| 1131 | * @param coredev pointer to a coredev object returned by | 1131 | * @param coredev pointer to a coredev object returned by |
| @@ -1133,7 +1133,7 @@ static char *smscore_get_fw_filename(struct smscore_device_t *coredev, | |||
| 1133 | * @param filename null-terminated string specifies firmware file name | 1133 | * @param filename null-terminated string specifies firmware file name |
| 1134 | * @param loadfirmware_handler device handler that loads firmware | 1134 | * @param loadfirmware_handler device handler that loads firmware |
| 1135 | * | 1135 | * |
| 1136 | * @return 0 on success, <0 on error. | 1136 | * return: 0 on success, <0 on error. |
| 1137 | */ | 1137 | */ |
| 1138 | static int smscore_load_firmware_from_file(struct smscore_device_t *coredev, | 1138 | static int smscore_load_firmware_from_file(struct smscore_device_t *coredev, |
| 1139 | int mode, | 1139 | int mode, |
| @@ -1182,14 +1182,14 @@ static int smscore_load_firmware_from_file(struct smscore_device_t *coredev, | |||
| 1182 | return rc; | 1182 | return rc; |
| 1183 | } | 1183 | } |
| 1184 | 1184 | ||
| 1185 | /** | 1185 | /* |
| 1186 | * notifies all clients registered with the device, notifies hotplugs, | 1186 | * notifies all clients registered with the device, notifies hotplugs, |
| 1187 | * frees all buffers and coredev object | 1187 | * frees all buffers and coredev object |
| 1188 | * | 1188 | * |
| 1189 | * @param coredev pointer to a coredev object returned by | 1189 | * @param coredev pointer to a coredev object returned by |
| 1190 | * smscore_register_device | 1190 | * smscore_register_device |
| 1191 | * | 1191 | * |
| 1192 | * @return 0 on success, <0 on error. | 1192 | * return: 0 on success, <0 on error. |
| 1193 | */ | 1193 | */ |
| 1194 | void smscore_unregister_device(struct smscore_device_t *coredev) | 1194 | void smscore_unregister_device(struct smscore_device_t *coredev) |
| 1195 | { | 1195 | { |
| @@ -1282,14 +1282,14 @@ static int smscore_detect_mode(struct smscore_device_t *coredev) | |||
| 1282 | return rc; | 1282 | return rc; |
| 1283 | } | 1283 | } |
| 1284 | 1284 | ||
| 1285 | /** | 1285 | /* |
| 1286 | * send init device request and wait for response | 1286 | * send init device request and wait for response |
| 1287 | * | 1287 | * |
| 1288 | * @param coredev pointer to a coredev object returned by | 1288 | * @param coredev pointer to a coredev object returned by |
| 1289 | * smscore_register_device | 1289 | * smscore_register_device |
| 1290 | * @param mode requested mode of operation | 1290 | * @param mode requested mode of operation |
| 1291 | * | 1291 | * |
| 1292 | * @return 0 on success, <0 on error. | 1292 | * return: 0 on success, <0 on error. |
| 1293 | */ | 1293 | */ |
| 1294 | static int smscore_init_device(struct smscore_device_t *coredev, int mode) | 1294 | static int smscore_init_device(struct smscore_device_t *coredev, int mode) |
| 1295 | { | 1295 | { |
| @@ -1315,7 +1315,7 @@ static int smscore_init_device(struct smscore_device_t *coredev, int mode) | |||
| 1315 | return rc; | 1315 | return rc; |
| 1316 | } | 1316 | } |
| 1317 | 1317 | ||
| 1318 | /** | 1318 | /* |
| 1319 | * calls device handler to change mode of operation | 1319 | * calls device handler to change mode of operation |
| 1320 | * NOTE: stellar/usb may disconnect when changing mode | 1320 | * NOTE: stellar/usb may disconnect when changing mode |
| 1321 | * | 1321 | * |
| @@ -1323,7 +1323,7 @@ static int smscore_init_device(struct smscore_device_t *coredev, int mode) | |||
| 1323 | * smscore_register_device | 1323 | * smscore_register_device |
| 1324 | * @param mode requested mode of operation | 1324 | * @param mode requested mode of operation |
| 1325 | * | 1325 | * |
| 1326 | * @return 0 on success, <0 on error. | 1326 | * return: 0 on success, <0 on error. |
| 1327 | */ | 1327 | */ |
| 1328 | int smscore_set_device_mode(struct smscore_device_t *coredev, int mode) | 1328 | int smscore_set_device_mode(struct smscore_device_t *coredev, int mode) |
| 1329 | { | 1329 | { |
| @@ -1411,13 +1411,13 @@ int smscore_set_device_mode(struct smscore_device_t *coredev, int mode) | |||
| 1411 | return rc; | 1411 | return rc; |
| 1412 | } | 1412 | } |
| 1413 | 1413 | ||
| 1414 | /** | 1414 | /* |
| 1415 | * calls device handler to get current mode of operation | 1415 | * calls device handler to get current mode of operation |
| 1416 | * | 1416 | * |
| 1417 | * @param coredev pointer to a coredev object returned by | 1417 | * @param coredev pointer to a coredev object returned by |
| 1418 | * smscore_register_device | 1418 | * smscore_register_device |
| 1419 | * | 1419 | * |
| 1420 | * @return current mode | 1420 | * return: current mode |
| 1421 | */ | 1421 | */ |
| 1422 | int smscore_get_device_mode(struct smscore_device_t *coredev) | 1422 | int smscore_get_device_mode(struct smscore_device_t *coredev) |
| 1423 | { | 1423 | { |
| @@ -1425,7 +1425,7 @@ int smscore_get_device_mode(struct smscore_device_t *coredev) | |||
| 1425 | } | 1425 | } |
| 1426 | EXPORT_SYMBOL_GPL(smscore_get_device_mode); | 1426 | EXPORT_SYMBOL_GPL(smscore_get_device_mode); |
| 1427 | 1427 | ||
| 1428 | /** | 1428 | /* |
| 1429 | * find client by response id & type within the clients list. | 1429 | * find client by response id & type within the clients list. |
| 1430 | * return client handle or NULL. | 1430 | * return client handle or NULL. |
| 1431 | * | 1431 | * |
| @@ -1462,7 +1462,7 @@ found: | |||
| 1462 | return client; | 1462 | return client; |
| 1463 | } | 1463 | } |
| 1464 | 1464 | ||
| 1465 | /** | 1465 | /* |
| 1466 | * find client by response id/type, call clients onresponse handler | 1466 | * find client by response id/type, call clients onresponse handler |
| 1467 | * return buffer to pool on error | 1467 | * return buffer to pool on error |
| 1468 | * | 1468 | * |
| @@ -1615,13 +1615,13 @@ void smscore_onresponse(struct smscore_device_t *coredev, | |||
| 1615 | } | 1615 | } |
| 1616 | EXPORT_SYMBOL_GPL(smscore_onresponse); | 1616 | EXPORT_SYMBOL_GPL(smscore_onresponse); |
| 1617 | 1617 | ||
| 1618 | /** | 1618 | /* |
| 1619 | * return pointer to next free buffer descriptor from core pool | 1619 | * return pointer to next free buffer descriptor from core pool |
| 1620 | * | 1620 | * |
| 1621 | * @param coredev pointer to a coredev object returned by | 1621 | * @param coredev pointer to a coredev object returned by |
| 1622 | * smscore_register_device | 1622 | * smscore_register_device |
| 1623 | * | 1623 | * |
| 1624 | * @return pointer to descriptor on success, NULL on error. | 1624 | * return: pointer to descriptor on success, NULL on error. |
| 1625 | */ | 1625 | */ |
| 1626 | 1626 | ||
| 1627 | static struct smscore_buffer_t *get_entry(struct smscore_device_t *coredev) | 1627 | static struct smscore_buffer_t *get_entry(struct smscore_device_t *coredev) |
| @@ -1648,7 +1648,7 @@ struct smscore_buffer_t *smscore_getbuffer(struct smscore_device_t *coredev) | |||
| 1648 | } | 1648 | } |
| 1649 | EXPORT_SYMBOL_GPL(smscore_getbuffer); | 1649 | EXPORT_SYMBOL_GPL(smscore_getbuffer); |
| 1650 | 1650 | ||
| 1651 | /** | 1651 | /* |
| 1652 | * return buffer descriptor to a pool | 1652 | * return buffer descriptor to a pool |
| 1653 | * | 1653 | * |
| 1654 | * @param coredev pointer to a coredev object returned by | 1654 | * @param coredev pointer to a coredev object returned by |
| @@ -1693,7 +1693,7 @@ static int smscore_validate_client(struct smscore_device_t *coredev, | |||
| 1693 | return 0; | 1693 | return 0; |
| 1694 | } | 1694 | } |
| 1695 | 1695 | ||
| 1696 | /** | 1696 | /* |
| 1697 | * creates smsclient object, check that id is taken by another client | 1697 | * creates smsclient object, check that id is taken by another client |
| 1698 | * | 1698 | * |
| 1699 | * @param coredev pointer to a coredev object from clients hotplug | 1699 | * @param coredev pointer to a coredev object from clients hotplug |
| @@ -1705,7 +1705,7 @@ static int smscore_validate_client(struct smscore_device_t *coredev, | |||
| 1705 | * @param context client-specific context | 1705 | * @param context client-specific context |
| 1706 | * @param client pointer to a value that receives created smsclient object | 1706 | * @param client pointer to a value that receives created smsclient object |
| 1707 | * | 1707 | * |
| 1708 | * @return 0 on success, <0 on error. | 1708 | * return: 0 on success, <0 on error. |
| 1709 | */ | 1709 | */ |
| 1710 | int smscore_register_client(struct smscore_device_t *coredev, | 1710 | int smscore_register_client(struct smscore_device_t *coredev, |
| 1711 | struct smsclient_params_t *params, | 1711 | struct smsclient_params_t *params, |
| @@ -1740,7 +1740,7 @@ int smscore_register_client(struct smscore_device_t *coredev, | |||
| 1740 | } | 1740 | } |
| 1741 | EXPORT_SYMBOL_GPL(smscore_register_client); | 1741 | EXPORT_SYMBOL_GPL(smscore_register_client); |
| 1742 | 1742 | ||
| 1743 | /** | 1743 | /* |
| 1744 | * frees smsclient object and all subclients associated with it | 1744 | * frees smsclient object and all subclients associated with it |
| 1745 | * | 1745 | * |
| 1746 | * @param client pointer to smsclient object returned by | 1746 | * @param client pointer to smsclient object returned by |
| @@ -1771,7 +1771,7 @@ void smscore_unregister_client(struct smscore_client_t *client) | |||
| 1771 | } | 1771 | } |
| 1772 | EXPORT_SYMBOL_GPL(smscore_unregister_client); | 1772 | EXPORT_SYMBOL_GPL(smscore_unregister_client); |
| 1773 | 1773 | ||
| 1774 | /** | 1774 | /* |
| 1775 | * verifies that source id is not taken by another client, | 1775 | * verifies that source id is not taken by another client, |
| 1776 | * calls device handler to send requests to the device | 1776 | * calls device handler to send requests to the device |
| 1777 | * | 1777 | * |
| @@ -1780,7 +1780,7 @@ EXPORT_SYMBOL_GPL(smscore_unregister_client); | |||
| 1780 | * @param buffer pointer to a request buffer | 1780 | * @param buffer pointer to a request buffer |
| 1781 | * @param size size (in bytes) of request buffer | 1781 | * @param size size (in bytes) of request buffer |
| 1782 | * | 1782 | * |
| 1783 | * @return 0 on success, <0 on error. | 1783 | * return: 0 on success, <0 on error. |
| 1784 | */ | 1784 | */ |
| 1785 | int smsclient_sendrequest(struct smscore_client_t *client, | 1785 | int smsclient_sendrequest(struct smscore_client_t *client, |
| 1786 | void *buffer, size_t size) | 1786 | void *buffer, size_t size) |
diff --git a/drivers/media/dvb-core/dvb_ca_en50221.c b/drivers/media/dvb-core/dvb_ca_en50221.c index 95b3723282f4..d48b61eb01f4 100644 --- a/drivers/media/dvb-core/dvb_ca_en50221.c +++ b/drivers/media/dvb-core/dvb_ca_en50221.c | |||
| @@ -206,7 +206,7 @@ static int dvb_ca_en50221_write_data(struct dvb_ca_private *ca, int slot, | |||
| 206 | * @hlen: Number of bytes in haystack. | 206 | * @hlen: Number of bytes in haystack. |
| 207 | * @needle: Buffer to find. | 207 | * @needle: Buffer to find. |
| 208 | * @nlen: Number of bytes in needle. | 208 | * @nlen: Number of bytes in needle. |
| 209 | * @return Pointer into haystack needle was found at, or NULL if not found. | 209 | * return: Pointer into haystack needle was found at, or NULL if not found. |
| 210 | */ | 210 | */ |
| 211 | static char *findstr(char *haystack, int hlen, char *needle, int nlen) | 211 | static char *findstr(char *haystack, int hlen, char *needle, int nlen) |
| 212 | { | 212 | { |
| @@ -226,7 +226,7 @@ static char *findstr(char *haystack, int hlen, char *needle, int nlen) | |||
| 226 | /* ************************************************************************** */ | 226 | /* ************************************************************************** */ |
| 227 | /* EN50221 physical interface functions */ | 227 | /* EN50221 physical interface functions */ |
| 228 | 228 | ||
| 229 | /** | 229 | /* |
| 230 | * dvb_ca_en50221_check_camstatus - Check CAM status. | 230 | * dvb_ca_en50221_check_camstatus - Check CAM status. |
| 231 | */ | 231 | */ |
| 232 | static int dvb_ca_en50221_check_camstatus(struct dvb_ca_private *ca, int slot) | 232 | static int dvb_ca_en50221_check_camstatus(struct dvb_ca_private *ca, int slot) |
| @@ -275,9 +275,9 @@ static int dvb_ca_en50221_check_camstatus(struct dvb_ca_private *ca, int slot) | |||
| 275 | * @ca: CA instance. | 275 | * @ca: CA instance. |
| 276 | * @slot: Slot on interface. | 276 | * @slot: Slot on interface. |
| 277 | * @waitfor: Flags to wait for. | 277 | * @waitfor: Flags to wait for. |
| 278 | * @timeout_ms: Timeout in milliseconds. | 278 | * @timeout_hz: Timeout in milliseconds. |
| 279 | * | 279 | * |
| 280 | * @return 0 on success, nonzero on error. | 280 | * return: 0 on success, nonzero on error. |
| 281 | */ | 281 | */ |
| 282 | static int dvb_ca_en50221_wait_if_status(struct dvb_ca_private *ca, int slot, | 282 | static int dvb_ca_en50221_wait_if_status(struct dvb_ca_private *ca, int slot, |
| 283 | u8 waitfor, int timeout_hz) | 283 | u8 waitfor, int timeout_hz) |
| @@ -325,7 +325,7 @@ static int dvb_ca_en50221_wait_if_status(struct dvb_ca_private *ca, int slot, | |||
| 325 | * @ca: CA instance. | 325 | * @ca: CA instance. |
| 326 | * @slot: Slot id. | 326 | * @slot: Slot id. |
| 327 | * | 327 | * |
| 328 | * @return 0 on success, nonzero on failure. | 328 | * return: 0 on success, nonzero on failure. |
| 329 | */ | 329 | */ |
| 330 | static int dvb_ca_en50221_link_init(struct dvb_ca_private *ca, int slot) | 330 | static int dvb_ca_en50221_link_init(struct dvb_ca_private *ca, int slot) |
| 331 | { | 331 | { |
| @@ -397,11 +397,11 @@ static int dvb_ca_en50221_link_init(struct dvb_ca_private *ca, int slot) | |||
| 397 | * @ca: CA instance. | 397 | * @ca: CA instance. |
| 398 | * @slot: Slot id. | 398 | * @slot: Slot id. |
| 399 | * @address: Address to read from. Updated. | 399 | * @address: Address to read from. Updated. |
| 400 | * @tupleType: Tuple id byte. Updated. | 400 | * @tuple_type: Tuple id byte. Updated. |
| 401 | * @tupleLength: Tuple length. Updated. | 401 | * @tuple_length: Tuple length. Updated. |
| 402 | * @tuple: Dest buffer for tuple (must be 256 bytes). Updated. | 402 | * @tuple: Dest buffer for tuple (must be 256 bytes). Updated. |
| 403 | * | 403 | * |
| 404 | * @return 0 on success, nonzero on error. | 404 | * return: 0 on success, nonzero on error. |
| 405 | */ | 405 | */ |
| 406 | static int dvb_ca_en50221_read_tuple(struct dvb_ca_private *ca, int slot, | 406 | static int dvb_ca_en50221_read_tuple(struct dvb_ca_private *ca, int slot, |
| 407 | int *address, int *tuple_type, | 407 | int *address, int *tuple_type, |
| @@ -455,7 +455,7 @@ static int dvb_ca_en50221_read_tuple(struct dvb_ca_private *ca, int slot, | |||
| 455 | * @ca: CA instance. | 455 | * @ca: CA instance. |
| 456 | * @slot: Slot id. | 456 | * @slot: Slot id. |
| 457 | * | 457 | * |
| 458 | * @return 0 on success, <0 on failure. | 458 | * return: 0 on success, <0 on failure. |
| 459 | */ | 459 | */ |
| 460 | static int dvb_ca_en50221_parse_attributes(struct dvb_ca_private *ca, int slot) | 460 | static int dvb_ca_en50221_parse_attributes(struct dvb_ca_private *ca, int slot) |
| 461 | { | 461 | { |
| @@ -632,10 +632,11 @@ static int dvb_ca_en50221_set_configoption(struct dvb_ca_private *ca, int slot) | |||
| 632 | * @ca: CA instance. | 632 | * @ca: CA instance. |
| 633 | * @slot: Slot to read from. | 633 | * @slot: Slot to read from. |
| 634 | * @ebuf: If non-NULL, the data will be written to this buffer. If NULL, | 634 | * @ebuf: If non-NULL, the data will be written to this buffer. If NULL, |
| 635 | * the data will be added into the buffering system as a normal fragment. | 635 | * the data will be added into the buffering system as a normal |
| 636 | * fragment. | ||
| 636 | * @ecount: Size of ebuf. Ignored if ebuf is NULL. | 637 | * @ecount: Size of ebuf. Ignored if ebuf is NULL. |
| 637 | * | 638 | * |
| 638 | * @return Number of bytes read, or < 0 on error | 639 | * return: Number of bytes read, or < 0 on error |
| 639 | */ | 640 | */ |
| 640 | static int dvb_ca_en50221_read_data(struct dvb_ca_private *ca, int slot, | 641 | static int dvb_ca_en50221_read_data(struct dvb_ca_private *ca, int slot, |
| 641 | u8 *ebuf, int ecount) | 642 | u8 *ebuf, int ecount) |
| @@ -784,11 +785,11 @@ exit: | |||
| 784 | * | 785 | * |
| 785 | * @ca: CA instance. | 786 | * @ca: CA instance. |
| 786 | * @slot: Slot to write to. | 787 | * @slot: Slot to write to. |
| 787 | * @ebuf: The data in this buffer is treated as a complete link-level packet to | 788 | * @buf: The data in this buffer is treated as a complete link-level packet to |
| 788 | * be written. | 789 | * be written. |
| 789 | * @count: Size of ebuf. | 790 | * @bytes_write: Size of ebuf. |
| 790 | * | 791 | * |
| 791 | * @return Number of bytes written, or < 0 on error. | 792 | * return: Number of bytes written, or < 0 on error. |
| 792 | */ | 793 | */ |
| 793 | static int dvb_ca_en50221_write_data(struct dvb_ca_private *ca, int slot, | 794 | static int dvb_ca_en50221_write_data(struct dvb_ca_private *ca, int slot, |
| 794 | u8 *buf, int bytes_write) | 795 | u8 *buf, int bytes_write) |
| @@ -933,7 +934,7 @@ static int dvb_ca_en50221_slot_shutdown(struct dvb_ca_private *ca, int slot) | |||
| 933 | /** | 934 | /** |
| 934 | * dvb_ca_en50221_camchange_irq - A CAMCHANGE IRQ has occurred. | 935 | * dvb_ca_en50221_camchange_irq - A CAMCHANGE IRQ has occurred. |
| 935 | * | 936 | * |
| 936 | * @ca: CA instance. | 937 | * @pubca: CA instance. |
| 937 | * @slot: Slot concerned. | 938 | * @slot: Slot concerned. |
| 938 | * @change_type: One of the DVB_CA_CAMCHANGE_* values. | 939 | * @change_type: One of the DVB_CA_CAMCHANGE_* values. |
| 939 | */ | 940 | */ |
| @@ -963,7 +964,7 @@ EXPORT_SYMBOL(dvb_ca_en50221_camchange_irq); | |||
| 963 | /** | 964 | /** |
| 964 | * dvb_ca_en50221_camready_irq - A CAMREADY IRQ has occurred. | 965 | * dvb_ca_en50221_camready_irq - A CAMREADY IRQ has occurred. |
| 965 | * | 966 | * |
| 966 | * @ca: CA instance. | 967 | * @pubca: CA instance. |
| 967 | * @slot: Slot concerned. | 968 | * @slot: Slot concerned. |
| 968 | */ | 969 | */ |
| 969 | void dvb_ca_en50221_camready_irq(struct dvb_ca_en50221 *pubca, int slot) | 970 | void dvb_ca_en50221_camready_irq(struct dvb_ca_en50221 *pubca, int slot) |
| @@ -983,7 +984,7 @@ EXPORT_SYMBOL(dvb_ca_en50221_camready_irq); | |||
| 983 | /** | 984 | /** |
| 984 | * dvb_ca_en50221_frda_irq - An FR or DA IRQ has occurred. | 985 | * dvb_ca_en50221_frda_irq - An FR or DA IRQ has occurred. |
| 985 | * | 986 | * |
| 986 | * @ca: CA instance. | 987 | * @pubca: CA instance. |
| 987 | * @slot: Slot concerned. | 988 | * @slot: Slot concerned. |
| 988 | */ | 989 | */ |
| 989 | void dvb_ca_en50221_frda_irq(struct dvb_ca_en50221 *pubca, int slot) | 990 | void dvb_ca_en50221_frda_irq(struct dvb_ca_en50221 *pubca, int slot) |
| @@ -1091,7 +1092,7 @@ static void dvb_ca_en50221_thread_update_delay(struct dvb_ca_private *ca) | |||
| 1091 | * | 1092 | * |
| 1092 | * @ca: CA instance. | 1093 | * @ca: CA instance. |
| 1093 | * @slot: Slot to process. | 1094 | * @slot: Slot to process. |
| 1094 | * @return: 0 .. no change | 1095 | * return:: 0 .. no change |
| 1095 | * 1 .. CAM state changed | 1096 | * 1 .. CAM state changed |
| 1096 | */ | 1097 | */ |
| 1097 | 1098 | ||
| @@ -1296,7 +1297,7 @@ static void dvb_ca_en50221_thread_state_machine(struct dvb_ca_private *ca, | |||
| 1296 | mutex_unlock(&sl->slot_lock); | 1297 | mutex_unlock(&sl->slot_lock); |
| 1297 | } | 1298 | } |
| 1298 | 1299 | ||
| 1299 | /** | 1300 | /* |
| 1300 | * Kernel thread which monitors CA slots for CAM changes, and performs data | 1301 | * Kernel thread which monitors CA slots for CAM changes, and performs data |
| 1301 | * transfers. | 1302 | * transfers. |
| 1302 | */ | 1303 | */ |
| @@ -1336,12 +1337,11 @@ static int dvb_ca_en50221_thread(void *data) | |||
| 1336 | * Real ioctl implementation. | 1337 | * Real ioctl implementation. |
| 1337 | * NOTE: CA_SEND_MSG/CA_GET_MSG ioctls have userspace buffers passed to them. | 1338 | * NOTE: CA_SEND_MSG/CA_GET_MSG ioctls have userspace buffers passed to them. |
| 1338 | * | 1339 | * |
| 1339 | * @inode: Inode concerned. | ||
| 1340 | * @file: File concerned. | 1340 | * @file: File concerned. |
| 1341 | * @cmd: IOCTL command. | 1341 | * @cmd: IOCTL command. |
| 1342 | * @arg: Associated argument. | 1342 | * @parg: Associated argument. |
| 1343 | * | 1343 | * |
| 1344 | * @return 0 on success, <0 on error. | 1344 | * return: 0 on success, <0 on error. |
| 1345 | */ | 1345 | */ |
| 1346 | static int dvb_ca_en50221_io_do_ioctl(struct file *file, | 1346 | static int dvb_ca_en50221_io_do_ioctl(struct file *file, |
| 1347 | unsigned int cmd, void *parg) | 1347 | unsigned int cmd, void *parg) |
| @@ -1420,12 +1420,11 @@ out_unlock: | |||
| 1420 | /** | 1420 | /** |
| 1421 | * Wrapper for ioctl implementation. | 1421 | * Wrapper for ioctl implementation. |
| 1422 | * | 1422 | * |
| 1423 | * @inode: Inode concerned. | ||
| 1424 | * @file: File concerned. | 1423 | * @file: File concerned. |
| 1425 | * @cmd: IOCTL command. | 1424 | * @cmd: IOCTL command. |
| 1426 | * @arg: Associated argument. | 1425 | * @arg: Associated argument. |
| 1427 | * | 1426 | * |
| 1428 | * @return 0 on success, <0 on error. | 1427 | * return: 0 on success, <0 on error. |
| 1429 | */ | 1428 | */ |
| 1430 | static long dvb_ca_en50221_io_ioctl(struct file *file, | 1429 | static long dvb_ca_en50221_io_ioctl(struct file *file, |
| 1431 | unsigned int cmd, unsigned long arg) | 1430 | unsigned int cmd, unsigned long arg) |
| @@ -1441,7 +1440,7 @@ static long dvb_ca_en50221_io_ioctl(struct file *file, | |||
| 1441 | * @count: Size of source buffer. | 1440 | * @count: Size of source buffer. |
| 1442 | * @ppos: Position in file (ignored). | 1441 | * @ppos: Position in file (ignored). |
| 1443 | * | 1442 | * |
| 1444 | * @return Number of bytes read, or <0 on error. | 1443 | * return: Number of bytes read, or <0 on error. |
| 1445 | */ | 1444 | */ |
| 1446 | static ssize_t dvb_ca_en50221_io_write(struct file *file, | 1445 | static ssize_t dvb_ca_en50221_io_write(struct file *file, |
| 1447 | const char __user *buf, size_t count, | 1446 | const char __user *buf, size_t count, |
| @@ -1536,7 +1535,7 @@ exit: | |||
| 1536 | return status; | 1535 | return status; |
| 1537 | } | 1536 | } |
| 1538 | 1537 | ||
| 1539 | /** | 1538 | /* |
| 1540 | * Condition for waking up in dvb_ca_en50221_io_read_condition | 1539 | * Condition for waking up in dvb_ca_en50221_io_read_condition |
| 1541 | */ | 1540 | */ |
| 1542 | static int dvb_ca_en50221_io_read_condition(struct dvb_ca_private *ca, | 1541 | static int dvb_ca_en50221_io_read_condition(struct dvb_ca_private *ca, |
| @@ -1593,7 +1592,7 @@ nextslot: | |||
| 1593 | * @count: Size of destination buffer. | 1592 | * @count: Size of destination buffer. |
| 1594 | * @ppos: Position in file (ignored). | 1593 | * @ppos: Position in file (ignored). |
| 1595 | * | 1594 | * |
| 1596 | * @return Number of bytes read, or <0 on error. | 1595 | * return: Number of bytes read, or <0 on error. |
| 1597 | */ | 1596 | */ |
| 1598 | static ssize_t dvb_ca_en50221_io_read(struct file *file, char __user *buf, | 1597 | static ssize_t dvb_ca_en50221_io_read(struct file *file, char __user *buf, |
| 1599 | size_t count, loff_t *ppos) | 1598 | size_t count, loff_t *ppos) |
| @@ -1702,7 +1701,7 @@ exit: | |||
| 1702 | * @inode: Inode concerned. | 1701 | * @inode: Inode concerned. |
| 1703 | * @file: File concerned. | 1702 | * @file: File concerned. |
| 1704 | * | 1703 | * |
| 1705 | * @return 0 on success, <0 on failure. | 1704 | * return: 0 on success, <0 on failure. |
| 1706 | */ | 1705 | */ |
| 1707 | static int dvb_ca_en50221_io_open(struct inode *inode, struct file *file) | 1706 | static int dvb_ca_en50221_io_open(struct inode *inode, struct file *file) |
| 1708 | { | 1707 | { |
| @@ -1752,7 +1751,7 @@ static int dvb_ca_en50221_io_open(struct inode *inode, struct file *file) | |||
| 1752 | * @inode: Inode concerned. | 1751 | * @inode: Inode concerned. |
| 1753 | * @file: File concerned. | 1752 | * @file: File concerned. |
| 1754 | * | 1753 | * |
| 1755 | * @return 0 on success, <0 on failure. | 1754 | * return: 0 on success, <0 on failure. |
| 1756 | */ | 1755 | */ |
| 1757 | static int dvb_ca_en50221_io_release(struct inode *inode, struct file *file) | 1756 | static int dvb_ca_en50221_io_release(struct inode *inode, struct file *file) |
| 1758 | { | 1757 | { |
| @@ -1781,7 +1780,7 @@ static int dvb_ca_en50221_io_release(struct inode *inode, struct file *file) | |||
| 1781 | * @file: File concerned. | 1780 | * @file: File concerned. |
| 1782 | * @wait: poll wait table. | 1781 | * @wait: poll wait table. |
| 1783 | * | 1782 | * |
| 1784 | * @return Standard poll mask. | 1783 | * return: Standard poll mask. |
| 1785 | */ | 1784 | */ |
| 1786 | static unsigned int dvb_ca_en50221_io_poll(struct file *file, poll_table *wait) | 1785 | static unsigned int dvb_ca_en50221_io_poll(struct file *file, poll_table *wait) |
| 1787 | { | 1786 | { |
| @@ -1838,11 +1837,11 @@ static const struct dvb_device dvbdev_ca = { | |||
| 1838 | * Initialise a new DVB CA EN50221 interface device. | 1837 | * Initialise a new DVB CA EN50221 interface device. |
| 1839 | * | 1838 | * |
| 1840 | * @dvb_adapter: DVB adapter to attach the new CA device to. | 1839 | * @dvb_adapter: DVB adapter to attach the new CA device to. |
| 1841 | * @ca: The dvb_ca instance. | 1840 | * @pubca: The dvb_ca instance. |
| 1842 | * @flags: Flags describing the CA device (DVB_CA_FLAG_*). | 1841 | * @flags: Flags describing the CA device (DVB_CA_FLAG_*). |
| 1843 | * @slot_count: Number of slots supported. | 1842 | * @slot_count: Number of slots supported. |
| 1844 | * | 1843 | * |
| 1845 | * @return 0 on success, nonzero on failure | 1844 | * return: 0 on success, nonzero on failure |
| 1846 | */ | 1845 | */ |
| 1847 | int dvb_ca_en50221_init(struct dvb_adapter *dvb_adapter, | 1846 | int dvb_ca_en50221_init(struct dvb_adapter *dvb_adapter, |
| 1848 | struct dvb_ca_en50221 *pubca, int flags, int slot_count) | 1847 | struct dvb_ca_en50221 *pubca, int flags, int slot_count) |
| @@ -1929,8 +1928,7 @@ EXPORT_SYMBOL(dvb_ca_en50221_init); | |||
| 1929 | /** | 1928 | /** |
| 1930 | * Release a DVB CA EN50221 interface device. | 1929 | * Release a DVB CA EN50221 interface device. |
| 1931 | * | 1930 | * |
| 1932 | * @ca_dev: The dvb_device_t instance for the CA device. | 1931 | * @pubca: The associated dvb_ca instance. |
| 1933 | * @ca: The associated dvb_ca instance. | ||
| 1934 | */ | 1932 | */ |
| 1935 | void dvb_ca_en50221_release(struct dvb_ca_en50221 *pubca) | 1933 | void dvb_ca_en50221_release(struct dvb_ca_en50221 *pubca) |
| 1936 | { | 1934 | { |
diff --git a/drivers/media/dvb-core/dvb_frontend.c b/drivers/media/dvb-core/dvb_frontend.c index 3ad83359098b..2afaa8226342 100644 --- a/drivers/media/dvb-core/dvb_frontend.c +++ b/drivers/media/dvb-core/dvb_frontend.c | |||
| @@ -369,11 +369,14 @@ static void dvb_frontend_swzigzag_update_delay(struct dvb_frontend_private *fepr | |||
| 369 | } | 369 | } |
| 370 | 370 | ||
| 371 | /** | 371 | /** |
| 372 | * Performs automatic twiddling of frontend parameters. | 372 | * dvb_frontend_swzigzag_autotune - Performs automatic twiddling of frontend |
| 373 | * parameters. | ||
| 373 | * | 374 | * |
| 374 | * @param fe The frontend concerned. | 375 | * @fe: The frontend concerned. |
| 375 | * @param check_wrapped Checks if an iteration has completed. DO NOT SET ON THE FIRST ATTEMPT | 376 | * @check_wrapped: Checks if an iteration has completed. |
| 376 | * @returns Number of complete iterations that have been performed. | 377 | * DO NOT SET ON THE FIRST ATTEMPT. |
| 378 | * | ||
| 379 | * return: Number of complete iterations that have been performed. | ||
| 377 | */ | 380 | */ |
| 378 | static int dvb_frontend_swzigzag_autotune(struct dvb_frontend *fe, int check_wrapped) | 381 | static int dvb_frontend_swzigzag_autotune(struct dvb_frontend *fe, int check_wrapped) |
| 379 | { | 382 | { |
| @@ -1253,7 +1256,7 @@ dtv_property_legacy_params_sync(struct dvb_frontend *fe, | |||
| 1253 | * dtv_get_frontend - calls a callback for retrieving DTV parameters | 1256 | * dtv_get_frontend - calls a callback for retrieving DTV parameters |
| 1254 | * @fe: struct dvb_frontend pointer | 1257 | * @fe: struct dvb_frontend pointer |
| 1255 | * @c: struct dtv_frontend_properties pointer (DVBv5 cache) | 1258 | * @c: struct dtv_frontend_properties pointer (DVBv5 cache) |
| 1256 | * @p_out struct dvb_frontend_parameters pointer (DVBv3 FE struct) | 1259 | * @p_out: struct dvb_frontend_parameters pointer (DVBv3 FE struct) |
| 1257 | * | 1260 | * |
| 1258 | * This routine calls either the DVBv3 or DVBv5 get_frontend call. | 1261 | * This routine calls either the DVBv3 or DVBv5 get_frontend call. |
| 1259 | * If c is not null, it will update the DVBv5 cache struct pointed by it. | 1262 | * If c is not null, it will update the DVBv5 cache struct pointed by it. |
diff --git a/drivers/media/dvb-core/dvb_net.c b/drivers/media/dvb-core/dvb_net.c index 06b0dcc13695..c018e3c06d5d 100644 --- a/drivers/media/dvb-core/dvb_net.c +++ b/drivers/media/dvb-core/dvb_net.c | |||
| @@ -125,7 +125,7 @@ struct dvb_net_priv { | |||
| 125 | }; | 125 | }; |
| 126 | 126 | ||
| 127 | 127 | ||
| 128 | /** | 128 | /* |
| 129 | * Determine the packet's protocol ID. The rule here is that we | 129 | * Determine the packet's protocol ID. The rule here is that we |
| 130 | * assume 802.3 if the type field is short enough to be a length. | 130 | * assume 802.3 if the type field is short enough to be a length. |
| 131 | * This is normal practice and works for any 'now in use' protocol. | 131 | * This is normal practice and works for any 'now in use' protocol. |
| @@ -155,7 +155,7 @@ static __be16 dvb_net_eth_type_trans(struct sk_buff *skb, | |||
| 155 | 155 | ||
| 156 | rawp = skb->data; | 156 | rawp = skb->data; |
| 157 | 157 | ||
| 158 | /** | 158 | /* |
| 159 | * This is a magic hack to spot IPX packets. Older Novell breaks | 159 | * This is a magic hack to spot IPX packets. Older Novell breaks |
| 160 | * the protocol design and runs IPX over 802.3 without an 802.2 LLC | 160 | * the protocol design and runs IPX over 802.3 without an 802.2 LLC |
| 161 | * layer. We look for FFFF which isn't a used 802.2 SSAP/DSAP. This | 161 | * layer. We look for FFFF which isn't a used 802.2 SSAP/DSAP. This |
| @@ -164,7 +164,7 @@ static __be16 dvb_net_eth_type_trans(struct sk_buff *skb, | |||
| 164 | if (*(unsigned short *)rawp == 0xFFFF) | 164 | if (*(unsigned short *)rawp == 0xFFFF) |
| 165 | return htons(ETH_P_802_3); | 165 | return htons(ETH_P_802_3); |
| 166 | 166 | ||
| 167 | /** | 167 | /* |
| 168 | * Real 802.2 LLC | 168 | * Real 802.2 LLC |
| 169 | */ | 169 | */ |
| 170 | return htons(ETH_P_802_2); | 170 | return htons(ETH_P_802_2); |
| @@ -215,7 +215,8 @@ static int ule_exthdr_padding(struct dvb_net_priv *p) | |||
| 215 | return 0; | 215 | return 0; |
| 216 | } | 216 | } |
| 217 | 217 | ||
| 218 | /** Handle ULE extension headers. | 218 | /* |
| 219 | * Handle ULE extension headers. | ||
| 219 | * Function is called after a successful CRC32 verification of an ULE SNDU to complete its decoding. | 220 | * Function is called after a successful CRC32 verification of an ULE SNDU to complete its decoding. |
| 220 | * Returns: >= 0: nr. of bytes consumed by next extension header | 221 | * Returns: >= 0: nr. of bytes consumed by next extension header |
| 221 | * -1: Mandatory extension header that is not recognized or TEST SNDU; discard. | 222 | * -1: Mandatory extension header that is not recognized or TEST SNDU; discard. |
| @@ -291,7 +292,7 @@ static int handle_ule_extensions( struct dvb_net_priv *p ) | |||
| 291 | } | 292 | } |
| 292 | 293 | ||
| 293 | 294 | ||
| 294 | /** Prepare for a new ULE SNDU: reset the decoder state. */ | 295 | /* Prepare for a new ULE SNDU: reset the decoder state. */ |
| 295 | static inline void reset_ule( struct dvb_net_priv *p ) | 296 | static inline void reset_ule( struct dvb_net_priv *p ) |
| 296 | { | 297 | { |
| 297 | p->ule_skb = NULL; | 298 | p->ule_skb = NULL; |
| @@ -304,7 +305,7 @@ static inline void reset_ule( struct dvb_net_priv *p ) | |||
| 304 | p->ule_bridged = 0; | 305 | p->ule_bridged = 0; |
| 305 | } | 306 | } |
| 306 | 307 | ||
| 307 | /** | 308 | /* |
| 308 | * Decode ULE SNDUs according to draft-ietf-ipdvb-ule-03.txt from a sequence of | 309 | * Decode ULE SNDUs according to draft-ietf-ipdvb-ule-03.txt from a sequence of |
| 309 | * TS cells of a single PID. | 310 | * TS cells of a single PID. |
| 310 | */ | 311 | */ |
| @@ -1005,7 +1006,7 @@ static int dvb_net_sec_callback(const u8 *buffer1, size_t buffer1_len, | |||
| 1005 | { | 1006 | { |
| 1006 | struct net_device *dev = filter->priv; | 1007 | struct net_device *dev = filter->priv; |
| 1007 | 1008 | ||
| 1008 | /** | 1009 | /* |
| 1009 | * we rely on the DVB API definition where exactly one complete | 1010 | * we rely on the DVB API definition where exactly one complete |
| 1010 | * section is delivered in buffer1 | 1011 | * section is delivered in buffer1 |
| 1011 | */ | 1012 | */ |
diff --git a/drivers/media/dvb-frontends/af9013.h b/drivers/media/dvb-frontends/af9013.h index 353274524f1b..a290722c04fd 100644 --- a/drivers/media/dvb-frontends/af9013.h +++ b/drivers/media/dvb-frontends/af9013.h | |||
| @@ -38,6 +38,13 @@ | |||
| 38 | * @api_version: Firmware API version. | 38 | * @api_version: Firmware API version. |
| 39 | * @gpio: GPIOs. | 39 | * @gpio: GPIOs. |
| 40 | * @get_dvb_frontend: Get DVB frontend callback. | 40 | * @get_dvb_frontend: Get DVB frontend callback. |
| 41 | * | ||
| 42 | * AF9013/5 GPIOs (mostly guessed): | ||
| 43 | * * demod#1-gpio#0 - set demod#2 i2c-addr for dual devices | ||
| 44 | * * demod#1-gpio#1 - xtal setting (?) | ||
| 45 | * * demod#1-gpio#3 - tuner#1 | ||
| 46 | * * demod#2-gpio#0 - tuner#2 | ||
| 47 | * * demod#2-gpio#1 - xtal setting (?) | ||
| 41 | */ | 48 | */ |
| 42 | struct af9013_platform_data { | 49 | struct af9013_platform_data { |
| 43 | /* | 50 | /* |
| @@ -89,16 +96,15 @@ struct af9013_platform_data { | |||
| 89 | #define AF9013_TS_PARALLEL AF9013_TS_MODE_PARALLEL | 96 | #define AF9013_TS_PARALLEL AF9013_TS_MODE_PARALLEL |
| 90 | #define AF9013_TS_SERIAL AF9013_TS_MODE_SERIAL | 97 | #define AF9013_TS_SERIAL AF9013_TS_MODE_SERIAL |
| 91 | 98 | ||
| 92 | /* | ||
| 93 | * AF9013/5 GPIOs (mostly guessed) | ||
| 94 | * demod#1-gpio#0 - set demod#2 i2c-addr for dual devices | ||
| 95 | * demod#1-gpio#1 - xtal setting (?) | ||
| 96 | * demod#1-gpio#3 - tuner#1 | ||
| 97 | * demod#2-gpio#0 - tuner#2 | ||
| 98 | * demod#2-gpio#1 - xtal setting (?) | ||
| 99 | */ | ||
| 100 | |||
| 101 | #if IS_REACHABLE(CONFIG_DVB_AF9013) | 99 | #if IS_REACHABLE(CONFIG_DVB_AF9013) |
| 100 | /** | ||
| 101 | * Attach an af9013 demod | ||
| 102 | * | ||
| 103 | * @config: pointer to &struct af9013_config with demod configuration. | ||
| 104 | * @i2c: i2c adapter to use. | ||
| 105 | * | ||
| 106 | * return: FE pointer on success, NULL on failure. | ||
| 107 | */ | ||
| 102 | extern struct dvb_frontend *af9013_attach(const struct af9013_config *config, | 108 | extern struct dvb_frontend *af9013_attach(const struct af9013_config *config, |
| 103 | struct i2c_adapter *i2c); | 109 | struct i2c_adapter *i2c); |
| 104 | #else | 110 | #else |
diff --git a/drivers/media/dvb-frontends/ascot2e.h b/drivers/media/dvb-frontends/ascot2e.h index dc61bf7d1b09..418c565baf83 100644 --- a/drivers/media/dvb-frontends/ascot2e.h +++ b/drivers/media/dvb-frontends/ascot2e.h | |||
| @@ -41,6 +41,15 @@ struct ascot2e_config { | |||
| 41 | }; | 41 | }; |
| 42 | 42 | ||
| 43 | #if IS_REACHABLE(CONFIG_DVB_ASCOT2E) | 43 | #if IS_REACHABLE(CONFIG_DVB_ASCOT2E) |
| 44 | /** | ||
| 45 | * Attach an ascot2e tuner | ||
| 46 | * | ||
| 47 | * @fe: frontend to be attached | ||
| 48 | * @config: pointer to &struct ascot2e_config with tuner configuration. | ||
| 49 | * @i2c: i2c adapter to use. | ||
| 50 | * | ||
| 51 | * return: FE pointer on success, NULL on failure. | ||
| 52 | */ | ||
| 44 | extern struct dvb_frontend *ascot2e_attach(struct dvb_frontend *fe, | 53 | extern struct dvb_frontend *ascot2e_attach(struct dvb_frontend *fe, |
| 45 | const struct ascot2e_config *config, | 54 | const struct ascot2e_config *config, |
| 46 | struct i2c_adapter *i2c); | 55 | struct i2c_adapter *i2c); |
diff --git a/drivers/media/dvb-frontends/cxd2820r.h b/drivers/media/dvb-frontends/cxd2820r.h index f3ff8f6eb3bb..a49400c0e28e 100644 --- a/drivers/media/dvb-frontends/cxd2820r.h +++ b/drivers/media/dvb-frontends/cxd2820r.h | |||
| @@ -49,7 +49,6 @@ | |||
| 49 | * @gpio_chip_base: GPIO. | 49 | * @gpio_chip_base: GPIO. |
| 50 | * @get_dvb_frontend: Get DVB frontend. | 50 | * @get_dvb_frontend: Get DVB frontend. |
| 51 | */ | 51 | */ |
| 52 | |||
| 53 | struct cxd2820r_platform_data { | 52 | struct cxd2820r_platform_data { |
| 54 | u8 ts_mode; | 53 | u8 ts_mode; |
| 55 | bool ts_clk_inv; | 54 | bool ts_clk_inv; |
| @@ -62,6 +61,17 @@ struct cxd2820r_platform_data { | |||
| 62 | bool attach_in_use; | 61 | bool attach_in_use; |
| 63 | }; | 62 | }; |
| 64 | 63 | ||
| 64 | /** | ||
| 65 | * struct cxd2820r_config - configuration for cxd2020r demod | ||
| 66 | * | ||
| 67 | * @i2c_address: Demodulator I2C address. Driver determines DVB-C slave I2C | ||
| 68 | * address automatically from master address. | ||
| 69 | * Default: none, must set. Values: 0x6c, 0x6d. | ||
| 70 | * @ts_mode: TS output mode. Default: none, must set. Values: FIXME? | ||
| 71 | * @ts_clock_inv: TS clock inverted. Default: 0. Values: 0, 1. | ||
| 72 | * @if_agc_polarity: Default: 0. Values: 0, 1 | ||
| 73 | * @spec_inv: Spectrum inversion. Default: 0. Values: 0, 1. | ||
| 74 | */ | ||
| 65 | struct cxd2820r_config { | 75 | struct cxd2820r_config { |
| 66 | /* Demodulator I2C address. | 76 | /* Demodulator I2C address. |
| 67 | * Driver determines DVB-C slave I2C address automatically from master | 77 | * Driver determines DVB-C slave I2C address automatically from master |
| @@ -98,6 +108,18 @@ struct cxd2820r_config { | |||
| 98 | 108 | ||
| 99 | 109 | ||
| 100 | #if IS_REACHABLE(CONFIG_DVB_CXD2820R) | 110 | #if IS_REACHABLE(CONFIG_DVB_CXD2820R) |
| 111 | /** | ||
| 112 | * Attach a cxd2820r demod | ||
| 113 | * | ||
| 114 | * @config: pointer to &struct cxd2820r_config with demod configuration. | ||
| 115 | * @i2c: i2c adapter to use. | ||
| 116 | * @gpio_chip_base: if zero, disables GPIO setting. Otherwise, if | ||
| 117 | * CONFIG_GPIOLIB is set dynamically allocate | ||
| 118 | * gpio base; if is not set, use its value to | ||
| 119 | * setup the GPIO pins. | ||
| 120 | * | ||
| 121 | * return: FE pointer on success, NULL on failure. | ||
| 122 | */ | ||
| 101 | extern struct dvb_frontend *cxd2820r_attach( | 123 | extern struct dvb_frontend *cxd2820r_attach( |
| 102 | const struct cxd2820r_config *config, | 124 | const struct cxd2820r_config *config, |
| 103 | struct i2c_adapter *i2c, | 125 | struct i2c_adapter *i2c, |
diff --git a/drivers/media/dvb-frontends/drx39xyj/bsp_i2c.h b/drivers/media/dvb-frontends/drx39xyj/bsp_i2c.h index 5b5421f70388..2b3af247a1f1 100644 --- a/drivers/media/dvb-frontends/drx39xyj/bsp_i2c.h +++ b/drivers/media/dvb-frontends/drx39xyj/bsp_i2c.h | |||
| @@ -52,7 +52,7 @@ struct i2c_device_addr { | |||
| 52 | }; | 52 | }; |
| 53 | 53 | ||
| 54 | 54 | ||
| 55 | /** | 55 | /* |
| 56 | * \def IS_I2C_10BIT( addr ) | 56 | * \def IS_I2C_10BIT( addr ) |
| 57 | * \brief Determine if I2C address 'addr' is a 10 bits address or not. | 57 | * \brief Determine if I2C address 'addr' is a 10 bits address or not. |
| 58 | * \param addr The I2C address. | 58 | * \param addr The I2C address. |
| @@ -67,7 +67,7 @@ struct i2c_device_addr { | |||
| 67 | Exported FUNCTIONS | 67 | Exported FUNCTIONS |
| 68 | ------------------------------------------------------------------------------*/ | 68 | ------------------------------------------------------------------------------*/ |
| 69 | 69 | ||
| 70 | /** | 70 | /* |
| 71 | * \fn drxbsp_i2c_init() | 71 | * \fn drxbsp_i2c_init() |
| 72 | * \brief Initialize I2C communication module. | 72 | * \brief Initialize I2C communication module. |
| 73 | * \return drx_status_t Return status. | 73 | * \return drx_status_t Return status. |
| @@ -76,7 +76,7 @@ Exported FUNCTIONS | |||
| 76 | */ | 76 | */ |
| 77 | drx_status_t drxbsp_i2c_init(void); | 77 | drx_status_t drxbsp_i2c_init(void); |
| 78 | 78 | ||
| 79 | /** | 79 | /* |
| 80 | * \fn drxbsp_i2c_term() | 80 | * \fn drxbsp_i2c_term() |
| 81 | * \brief Terminate I2C communication module. | 81 | * \brief Terminate I2C communication module. |
| 82 | * \return drx_status_t Return status. | 82 | * \return drx_status_t Return status. |
| @@ -85,7 +85,7 @@ Exported FUNCTIONS | |||
| 85 | */ | 85 | */ |
| 86 | drx_status_t drxbsp_i2c_term(void); | 86 | drx_status_t drxbsp_i2c_term(void); |
| 87 | 87 | ||
| 88 | /** | 88 | /* |
| 89 | * \fn drx_status_t drxbsp_i2c_write_read( struct i2c_device_addr *w_dev_addr, | 89 | * \fn drx_status_t drxbsp_i2c_write_read( struct i2c_device_addr *w_dev_addr, |
| 90 | * u16 w_count, | 90 | * u16 w_count, |
| 91 | * u8 *wData, | 91 | * u8 *wData, |
| @@ -121,7 +121,7 @@ Exported FUNCTIONS | |||
| 121 | struct i2c_device_addr *r_dev_addr, | 121 | struct i2c_device_addr *r_dev_addr, |
| 122 | u16 r_count, u8 *r_data); | 122 | u16 r_count, u8 *r_data); |
| 123 | 123 | ||
| 124 | /** | 124 | /* |
| 125 | * \fn drxbsp_i2c_error_text() | 125 | * \fn drxbsp_i2c_error_text() |
| 126 | * \brief Returns a human readable error. | 126 | * \brief Returns a human readable error. |
| 127 | * Counter part of numerical drx_i2c_error_g. | 127 | * Counter part of numerical drx_i2c_error_g. |
| @@ -130,7 +130,7 @@ Exported FUNCTIONS | |||
| 130 | */ | 130 | */ |
| 131 | char *drxbsp_i2c_error_text(void); | 131 | char *drxbsp_i2c_error_text(void); |
| 132 | 132 | ||
| 133 | /** | 133 | /* |
| 134 | * \var drx_i2c_error_g; | 134 | * \var drx_i2c_error_g; |
| 135 | * \brief I2C specific error codes, platform dependent. | 135 | * \brief I2C specific error codes, platform dependent. |
| 136 | */ | 136 | */ |
diff --git a/drivers/media/dvb-frontends/drx39xyj/drx_driver.h b/drivers/media/dvb-frontends/drx39xyj/drx_driver.h index cd69e187ba7a..855685b6b386 100644 --- a/drivers/media/dvb-frontends/drx39xyj/drx_driver.h +++ b/drivers/media/dvb-frontends/drx39xyj/drx_driver.h | |||
| @@ -46,7 +46,7 @@ struct i2c_device_addr { | |||
| 46 | void *user_data; /* User data pointer */ | 46 | void *user_data; /* User data pointer */ |
| 47 | }; | 47 | }; |
| 48 | 48 | ||
| 49 | /** | 49 | /* |
| 50 | * \def IS_I2C_10BIT( addr ) | 50 | * \def IS_I2C_10BIT( addr ) |
| 51 | * \brief Determine if I2C address 'addr' is a 10 bits address or not. | 51 | * \brief Determine if I2C address 'addr' is a 10 bits address or not. |
| 52 | * \param addr The I2C address. | 52 | * \param addr The I2C address. |
| @@ -61,7 +61,7 @@ struct i2c_device_addr { | |||
| 61 | Exported FUNCTIONS | 61 | Exported FUNCTIONS |
| 62 | ------------------------------------------------------------------------------*/ | 62 | ------------------------------------------------------------------------------*/ |
| 63 | 63 | ||
| 64 | /** | 64 | /* |
| 65 | * \fn drxbsp_i2c_init() | 65 | * \fn drxbsp_i2c_init() |
| 66 | * \brief Initialize I2C communication module. | 66 | * \brief Initialize I2C communication module. |
| 67 | * \return int Return status. | 67 | * \return int Return status. |
| @@ -70,7 +70,7 @@ Exported FUNCTIONS | |||
| 70 | */ | 70 | */ |
| 71 | int drxbsp_i2c_init(void); | 71 | int drxbsp_i2c_init(void); |
| 72 | 72 | ||
| 73 | /** | 73 | /* |
| 74 | * \fn drxbsp_i2c_term() | 74 | * \fn drxbsp_i2c_term() |
| 75 | * \brief Terminate I2C communication module. | 75 | * \brief Terminate I2C communication module. |
| 76 | * \return int Return status. | 76 | * \return int Return status. |
| @@ -79,7 +79,7 @@ int drxbsp_i2c_init(void); | |||
| 79 | */ | 79 | */ |
| 80 | int drxbsp_i2c_term(void); | 80 | int drxbsp_i2c_term(void); |
| 81 | 81 | ||
| 82 | /** | 82 | /* |
| 83 | * \fn int drxbsp_i2c_write_read( struct i2c_device_addr *w_dev_addr, | 83 | * \fn int drxbsp_i2c_write_read( struct i2c_device_addr *w_dev_addr, |
| 84 | * u16 w_count, | 84 | * u16 w_count, |
| 85 | * u8 * wData, | 85 | * u8 * wData, |
| @@ -115,7 +115,7 @@ int drxbsp_i2c_write_read(struct i2c_device_addr *w_dev_addr, | |||
| 115 | struct i2c_device_addr *r_dev_addr, | 115 | struct i2c_device_addr *r_dev_addr, |
| 116 | u16 r_count, u8 *r_data); | 116 | u16 r_count, u8 *r_data); |
| 117 | 117 | ||
| 118 | /** | 118 | /* |
| 119 | * \fn drxbsp_i2c_error_text() | 119 | * \fn drxbsp_i2c_error_text() |
| 120 | * \brief Returns a human readable error. | 120 | * \brief Returns a human readable error. |
| 121 | * Counter part of numerical drx_i2c_error_g. | 121 | * Counter part of numerical drx_i2c_error_g. |
| @@ -124,7 +124,7 @@ int drxbsp_i2c_write_read(struct i2c_device_addr *w_dev_addr, | |||
| 124 | */ | 124 | */ |
| 125 | char *drxbsp_i2c_error_text(void); | 125 | char *drxbsp_i2c_error_text(void); |
| 126 | 126 | ||
| 127 | /** | 127 | /* |
| 128 | * \var drx_i2c_error_g; | 128 | * \var drx_i2c_error_g; |
| 129 | * \brief I2C specific error codes, platform dependent. | 129 | * \brief I2C specific error codes, platform dependent. |
| 130 | */ | 130 | */ |
| @@ -241,13 +241,13 @@ int drxbsp_tuner_default_i2c_write_read(struct tuner_instance *tuner, | |||
| 241 | struct i2c_device_addr *r_dev_addr, | 241 | struct i2c_device_addr *r_dev_addr, |
| 242 | u16 r_count, u8 *r_data); | 242 | u16 r_count, u8 *r_data); |
| 243 | 243 | ||
| 244 | /************** | 244 | /************* |
| 245 | * | 245 | * |
| 246 | * This section configures the DRX Data Access Protocols (DAPs). | 246 | * This section configures the DRX Data Access Protocols (DAPs). |
| 247 | * | 247 | * |
| 248 | **************/ | 248 | **************/ |
| 249 | 249 | ||
| 250 | /** | 250 | /* |
| 251 | * \def DRXDAP_SINGLE_MASTER | 251 | * \def DRXDAP_SINGLE_MASTER |
| 252 | * \brief Enable I2C single or I2C multimaster mode on host. | 252 | * \brief Enable I2C single or I2C multimaster mode on host. |
| 253 | * | 253 | * |
| @@ -262,7 +262,7 @@ int drxbsp_tuner_default_i2c_write_read(struct tuner_instance *tuner, | |||
| 262 | #define DRXDAP_SINGLE_MASTER 1 | 262 | #define DRXDAP_SINGLE_MASTER 1 |
| 263 | #endif | 263 | #endif |
| 264 | 264 | ||
| 265 | /** | 265 | /* |
| 266 | * \def DRXDAP_MAX_WCHUNKSIZE | 266 | * \def DRXDAP_MAX_WCHUNKSIZE |
| 267 | * \brief Defines maximum chunksize of an i2c write action by host. | 267 | * \brief Defines maximum chunksize of an i2c write action by host. |
| 268 | * | 268 | * |
| @@ -282,7 +282,7 @@ int drxbsp_tuner_default_i2c_write_read(struct tuner_instance *tuner, | |||
| 282 | #define DRXDAP_MAX_WCHUNKSIZE 60 | 282 | #define DRXDAP_MAX_WCHUNKSIZE 60 |
| 283 | #endif | 283 | #endif |
| 284 | 284 | ||
| 285 | /** | 285 | /* |
| 286 | * \def DRXDAP_MAX_RCHUNKSIZE | 286 | * \def DRXDAP_MAX_RCHUNKSIZE |
| 287 | * \brief Defines maximum chunksize of an i2c read action by host. | 287 | * \brief Defines maximum chunksize of an i2c read action by host. |
| 288 | * | 288 | * |
| @@ -297,13 +297,13 @@ int drxbsp_tuner_default_i2c_write_read(struct tuner_instance *tuner, | |||
| 297 | #define DRXDAP_MAX_RCHUNKSIZE 60 | 297 | #define DRXDAP_MAX_RCHUNKSIZE 60 |
| 298 | #endif | 298 | #endif |
| 299 | 299 | ||
| 300 | /************** | 300 | /************* |
| 301 | * | 301 | * |
| 302 | * This section describes drxdriver defines. | 302 | * This section describes drxdriver defines. |
| 303 | * | 303 | * |
| 304 | **************/ | 304 | **************/ |
| 305 | 305 | ||
| 306 | /** | 306 | /* |
| 307 | * \def DRX_UNKNOWN | 307 | * \def DRX_UNKNOWN |
| 308 | * \brief Generic UNKNOWN value for DRX enumerated types. | 308 | * \brief Generic UNKNOWN value for DRX enumerated types. |
| 309 | * | 309 | * |
| @@ -313,7 +313,7 @@ int drxbsp_tuner_default_i2c_write_read(struct tuner_instance *tuner, | |||
| 313 | #define DRX_UNKNOWN (254) | 313 | #define DRX_UNKNOWN (254) |
| 314 | #endif | 314 | #endif |
| 315 | 315 | ||
| 316 | /** | 316 | /* |
| 317 | * \def DRX_AUTO | 317 | * \def DRX_AUTO |
| 318 | * \brief Generic AUTO value for DRX enumerated types. | 318 | * \brief Generic AUTO value for DRX enumerated types. |
| 319 | * | 319 | * |
| @@ -324,104 +324,104 @@ int drxbsp_tuner_default_i2c_write_read(struct tuner_instance *tuner, | |||
| 324 | #define DRX_AUTO (255) | 324 | #define DRX_AUTO (255) |
| 325 | #endif | 325 | #endif |
| 326 | 326 | ||
| 327 | /************** | 327 | /************* |
| 328 | * | 328 | * |
| 329 | * This section describes flag definitions for the device capbilities. | 329 | * This section describes flag definitions for the device capbilities. |
| 330 | * | 330 | * |
| 331 | **************/ | 331 | **************/ |
| 332 | 332 | ||
| 333 | /** | 333 | /* |
| 334 | * \brief LNA capability flag | 334 | * \brief LNA capability flag |
| 335 | * | 335 | * |
| 336 | * Device has a Low Noise Amplifier | 336 | * Device has a Low Noise Amplifier |
| 337 | * | 337 | * |
| 338 | */ | 338 | */ |
| 339 | #define DRX_CAPABILITY_HAS_LNA (1UL << 0) | 339 | #define DRX_CAPABILITY_HAS_LNA (1UL << 0) |
| 340 | /** | 340 | /* |
| 341 | * \brief OOB-RX capability flag | 341 | * \brief OOB-RX capability flag |
| 342 | * | 342 | * |
| 343 | * Device has OOB-RX | 343 | * Device has OOB-RX |
| 344 | * | 344 | * |
| 345 | */ | 345 | */ |
| 346 | #define DRX_CAPABILITY_HAS_OOBRX (1UL << 1) | 346 | #define DRX_CAPABILITY_HAS_OOBRX (1UL << 1) |
| 347 | /** | 347 | /* |
| 348 | * \brief ATV capability flag | 348 | * \brief ATV capability flag |
| 349 | * | 349 | * |
| 350 | * Device has ATV | 350 | * Device has ATV |
| 351 | * | 351 | * |
| 352 | */ | 352 | */ |
| 353 | #define DRX_CAPABILITY_HAS_ATV (1UL << 2) | 353 | #define DRX_CAPABILITY_HAS_ATV (1UL << 2) |
| 354 | /** | 354 | /* |
| 355 | * \brief DVB-T capability flag | 355 | * \brief DVB-T capability flag |
| 356 | * | 356 | * |
| 357 | * Device has DVB-T | 357 | * Device has DVB-T |
| 358 | * | 358 | * |
| 359 | */ | 359 | */ |
| 360 | #define DRX_CAPABILITY_HAS_DVBT (1UL << 3) | 360 | #define DRX_CAPABILITY_HAS_DVBT (1UL << 3) |
| 361 | /** | 361 | /* |
| 362 | * \brief ITU-B capability flag | 362 | * \brief ITU-B capability flag |
| 363 | * | 363 | * |
| 364 | * Device has ITU-B | 364 | * Device has ITU-B |
| 365 | * | 365 | * |
| 366 | */ | 366 | */ |
| 367 | #define DRX_CAPABILITY_HAS_ITUB (1UL << 4) | 367 | #define DRX_CAPABILITY_HAS_ITUB (1UL << 4) |
| 368 | /** | 368 | /* |
| 369 | * \brief Audio capability flag | 369 | * \brief Audio capability flag |
| 370 | * | 370 | * |
| 371 | * Device has Audio | 371 | * Device has Audio |
| 372 | * | 372 | * |
| 373 | */ | 373 | */ |
| 374 | #define DRX_CAPABILITY_HAS_AUD (1UL << 5) | 374 | #define DRX_CAPABILITY_HAS_AUD (1UL << 5) |
| 375 | /** | 375 | /* |
| 376 | * \brief SAW switch capability flag | 376 | * \brief SAW switch capability flag |
| 377 | * | 377 | * |
| 378 | * Device has SAW switch | 378 | * Device has SAW switch |
| 379 | * | 379 | * |
| 380 | */ | 380 | */ |
| 381 | #define DRX_CAPABILITY_HAS_SAWSW (1UL << 6) | 381 | #define DRX_CAPABILITY_HAS_SAWSW (1UL << 6) |
| 382 | /** | 382 | /* |
| 383 | * \brief GPIO1 capability flag | 383 | * \brief GPIO1 capability flag |
| 384 | * | 384 | * |
| 385 | * Device has GPIO1 | 385 | * Device has GPIO1 |
| 386 | * | 386 | * |
| 387 | */ | 387 | */ |
| 388 | #define DRX_CAPABILITY_HAS_GPIO1 (1UL << 7) | 388 | #define DRX_CAPABILITY_HAS_GPIO1 (1UL << 7) |
| 389 | /** | 389 | /* |
| 390 | * \brief GPIO2 capability flag | 390 | * \brief GPIO2 capability flag |
| 391 | * | 391 | * |
| 392 | * Device has GPIO2 | 392 | * Device has GPIO2 |
| 393 | * | 393 | * |
| 394 | */ | 394 | */ |
| 395 | #define DRX_CAPABILITY_HAS_GPIO2 (1UL << 8) | 395 | #define DRX_CAPABILITY_HAS_GPIO2 (1UL << 8) |
| 396 | /** | 396 | /* |
| 397 | * \brief IRQN capability flag | 397 | * \brief IRQN capability flag |
| 398 | * | 398 | * |
| 399 | * Device has IRQN | 399 | * Device has IRQN |
| 400 | * | 400 | * |
| 401 | */ | 401 | */ |
| 402 | #define DRX_CAPABILITY_HAS_IRQN (1UL << 9) | 402 | #define DRX_CAPABILITY_HAS_IRQN (1UL << 9) |
| 403 | /** | 403 | /* |
| 404 | * \brief 8VSB capability flag | 404 | * \brief 8VSB capability flag |
| 405 | * | 405 | * |
| 406 | * Device has 8VSB | 406 | * Device has 8VSB |
| 407 | * | 407 | * |
| 408 | */ | 408 | */ |
| 409 | #define DRX_CAPABILITY_HAS_8VSB (1UL << 10) | 409 | #define DRX_CAPABILITY_HAS_8VSB (1UL << 10) |
| 410 | /** | 410 | /* |
| 411 | * \brief SMA-TX capability flag | 411 | * \brief SMA-TX capability flag |
| 412 | * | 412 | * |
| 413 | * Device has SMATX | 413 | * Device has SMATX |
| 414 | * | 414 | * |
| 415 | */ | 415 | */ |
| 416 | #define DRX_CAPABILITY_HAS_SMATX (1UL << 11) | 416 | #define DRX_CAPABILITY_HAS_SMATX (1UL << 11) |
| 417 | /** | 417 | /* |
| 418 | * \brief SMA-RX capability flag | 418 | * \brief SMA-RX capability flag |
| 419 | * | 419 | * |
| 420 | * Device has SMARX | 420 | * Device has SMARX |
| 421 | * | 421 | * |
| 422 | */ | 422 | */ |
| 423 | #define DRX_CAPABILITY_HAS_SMARX (1UL << 12) | 423 | #define DRX_CAPABILITY_HAS_SMARX (1UL << 12) |
| 424 | /** | 424 | /* |
| 425 | * \brief ITU-A/C capability flag | 425 | * \brief ITU-A/C capability flag |
| 426 | * | 426 | * |
| 427 | * Device has ITU-A/C | 427 | * Device has ITU-A/C |
| @@ -439,7 +439,7 @@ MACROS | |||
| 439 | DRX_VERSIONSTRING_HELP(PATCH) | 439 | DRX_VERSIONSTRING_HELP(PATCH) |
| 440 | #define DRX_VERSIONSTRING_HELP(NUM) #NUM | 440 | #define DRX_VERSIONSTRING_HELP(NUM) #NUM |
| 441 | 441 | ||
| 442 | /** | 442 | /* |
| 443 | * \brief Macro to create byte array elements from 16 bit integers. | 443 | * \brief Macro to create byte array elements from 16 bit integers. |
| 444 | * This macro is used to create byte arrays for block writes. | 444 | * This macro is used to create byte arrays for block writes. |
| 445 | * Block writes speed up I2C traffic between host and demod. | 445 | * Block writes speed up I2C traffic between host and demod. |
| @@ -449,7 +449,7 @@ MACROS | |||
| 449 | #define DRX_16TO8(x) ((u8) (((u16)x) & 0xFF)), \ | 449 | #define DRX_16TO8(x) ((u8) (((u16)x) & 0xFF)), \ |
| 450 | ((u8)((((u16)x)>>8)&0xFF)) | 450 | ((u8)((((u16)x)>>8)&0xFF)) |
| 451 | 451 | ||
| 452 | /** | 452 | /* |
| 453 | * \brief Macro to convert 16 bit register value to a s32 | 453 | * \brief Macro to convert 16 bit register value to a s32 |
| 454 | */ | 454 | */ |
| 455 | #define DRX_U16TODRXFREQ(x) ((x & 0x8000) ? \ | 455 | #define DRX_U16TODRXFREQ(x) ((x & 0x8000) ? \ |
| @@ -461,191 +461,191 @@ MACROS | |||
| 461 | ENUM | 461 | ENUM |
| 462 | -------------------------------------------------------------------------*/ | 462 | -------------------------------------------------------------------------*/ |
| 463 | 463 | ||
| 464 | /** | 464 | /* |
| 465 | * \enum enum drx_standard | 465 | * \enum enum drx_standard |
| 466 | * \brief Modulation standards. | 466 | * \brief Modulation standards. |
| 467 | */ | 467 | */ |
| 468 | enum drx_standard { | 468 | enum drx_standard { |
| 469 | DRX_STANDARD_DVBT = 0, /**< Terrestrial DVB-T. */ | 469 | DRX_STANDARD_DVBT = 0, /*< Terrestrial DVB-T. */ |
| 470 | DRX_STANDARD_8VSB, /**< Terrestrial 8VSB. */ | 470 | DRX_STANDARD_8VSB, /*< Terrestrial 8VSB. */ |
| 471 | DRX_STANDARD_NTSC, /**< Terrestrial\Cable analog NTSC. */ | 471 | DRX_STANDARD_NTSC, /*< Terrestrial\Cable analog NTSC. */ |
| 472 | DRX_STANDARD_PAL_SECAM_BG, | 472 | DRX_STANDARD_PAL_SECAM_BG, |
| 473 | /**< Terrestrial analog PAL/SECAM B/G */ | 473 | /*< Terrestrial analog PAL/SECAM B/G */ |
| 474 | DRX_STANDARD_PAL_SECAM_DK, | 474 | DRX_STANDARD_PAL_SECAM_DK, |
| 475 | /**< Terrestrial analog PAL/SECAM D/K */ | 475 | /*< Terrestrial analog PAL/SECAM D/K */ |
| 476 | DRX_STANDARD_PAL_SECAM_I, | 476 | DRX_STANDARD_PAL_SECAM_I, |
| 477 | /**< Terrestrial analog PAL/SECAM I */ | 477 | /*< Terrestrial analog PAL/SECAM I */ |
| 478 | DRX_STANDARD_PAL_SECAM_L, | 478 | DRX_STANDARD_PAL_SECAM_L, |
| 479 | /**< Terrestrial analog PAL/SECAM L | 479 | /*< Terrestrial analog PAL/SECAM L |
| 480 | with negative modulation */ | 480 | with negative modulation */ |
| 481 | DRX_STANDARD_PAL_SECAM_LP, | 481 | DRX_STANDARD_PAL_SECAM_LP, |
| 482 | /**< Terrestrial analog PAL/SECAM L | 482 | /*< Terrestrial analog PAL/SECAM L |
| 483 | with positive modulation */ | 483 | with positive modulation */ |
| 484 | DRX_STANDARD_ITU_A, /**< Cable ITU ANNEX A. */ | 484 | DRX_STANDARD_ITU_A, /*< Cable ITU ANNEX A. */ |
| 485 | DRX_STANDARD_ITU_B, /**< Cable ITU ANNEX B. */ | 485 | DRX_STANDARD_ITU_B, /*< Cable ITU ANNEX B. */ |
| 486 | DRX_STANDARD_ITU_C, /**< Cable ITU ANNEX C. */ | 486 | DRX_STANDARD_ITU_C, /*< Cable ITU ANNEX C. */ |
| 487 | DRX_STANDARD_ITU_D, /**< Cable ITU ANNEX D. */ | 487 | DRX_STANDARD_ITU_D, /*< Cable ITU ANNEX D. */ |
| 488 | DRX_STANDARD_FM, /**< Terrestrial\Cable FM radio */ | 488 | DRX_STANDARD_FM, /*< Terrestrial\Cable FM radio */ |
| 489 | DRX_STANDARD_DTMB, /**< Terrestrial DTMB standard (China)*/ | 489 | DRX_STANDARD_DTMB, /*< Terrestrial DTMB standard (China)*/ |
| 490 | DRX_STANDARD_UNKNOWN = DRX_UNKNOWN, | 490 | DRX_STANDARD_UNKNOWN = DRX_UNKNOWN, |
| 491 | /**< Standard unknown. */ | 491 | /*< Standard unknown. */ |
| 492 | DRX_STANDARD_AUTO = DRX_AUTO | 492 | DRX_STANDARD_AUTO = DRX_AUTO |
| 493 | /**< Autodetect standard. */ | 493 | /*< Autodetect standard. */ |
| 494 | }; | 494 | }; |
| 495 | 495 | ||
| 496 | /** | 496 | /* |
| 497 | * \enum enum drx_standard | 497 | * \enum enum drx_standard |
| 498 | * \brief Modulation sub-standards. | 498 | * \brief Modulation sub-standards. |
| 499 | */ | 499 | */ |
| 500 | enum drx_substandard { | 500 | enum drx_substandard { |
| 501 | DRX_SUBSTANDARD_MAIN = 0, /**< Main subvariant of standard */ | 501 | DRX_SUBSTANDARD_MAIN = 0, /*< Main subvariant of standard */ |
| 502 | DRX_SUBSTANDARD_ATV_BG_SCANDINAVIA, | 502 | DRX_SUBSTANDARD_ATV_BG_SCANDINAVIA, |
| 503 | DRX_SUBSTANDARD_ATV_DK_POLAND, | 503 | DRX_SUBSTANDARD_ATV_DK_POLAND, |
| 504 | DRX_SUBSTANDARD_ATV_DK_CHINA, | 504 | DRX_SUBSTANDARD_ATV_DK_CHINA, |
| 505 | DRX_SUBSTANDARD_UNKNOWN = DRX_UNKNOWN, | 505 | DRX_SUBSTANDARD_UNKNOWN = DRX_UNKNOWN, |
| 506 | /**< Sub-standard unknown. */ | 506 | /*< Sub-standard unknown. */ |
| 507 | DRX_SUBSTANDARD_AUTO = DRX_AUTO | 507 | DRX_SUBSTANDARD_AUTO = DRX_AUTO |
| 508 | /**< Auto (default) sub-standard */ | 508 | /*< Auto (default) sub-standard */ |
| 509 | }; | 509 | }; |
| 510 | 510 | ||
| 511 | /** | 511 | /* |
| 512 | * \enum enum drx_bandwidth | 512 | * \enum enum drx_bandwidth |
| 513 | * \brief Channel bandwidth or channel spacing. | 513 | * \brief Channel bandwidth or channel spacing. |
| 514 | */ | 514 | */ |
| 515 | enum drx_bandwidth { | 515 | enum drx_bandwidth { |
| 516 | DRX_BANDWIDTH_8MHZ = 0, /**< Bandwidth 8 MHz. */ | 516 | DRX_BANDWIDTH_8MHZ = 0, /*< Bandwidth 8 MHz. */ |
| 517 | DRX_BANDWIDTH_7MHZ, /**< Bandwidth 7 MHz. */ | 517 | DRX_BANDWIDTH_7MHZ, /*< Bandwidth 7 MHz. */ |
| 518 | DRX_BANDWIDTH_6MHZ, /**< Bandwidth 6 MHz. */ | 518 | DRX_BANDWIDTH_6MHZ, /*< Bandwidth 6 MHz. */ |
| 519 | DRX_BANDWIDTH_UNKNOWN = DRX_UNKNOWN, | 519 | DRX_BANDWIDTH_UNKNOWN = DRX_UNKNOWN, |
| 520 | /**< Bandwidth unknown. */ | 520 | /*< Bandwidth unknown. */ |
| 521 | DRX_BANDWIDTH_AUTO = DRX_AUTO | 521 | DRX_BANDWIDTH_AUTO = DRX_AUTO |
| 522 | /**< Auto Set Bandwidth */ | 522 | /*< Auto Set Bandwidth */ |
| 523 | }; | 523 | }; |
| 524 | 524 | ||
| 525 | /** | 525 | /* |
| 526 | * \enum enum drx_mirror | 526 | * \enum enum drx_mirror |
| 527 | * \brief Indicate if channel spectrum is mirrored or not. | 527 | * \brief Indicate if channel spectrum is mirrored or not. |
| 528 | */ | 528 | */ |
| 529 | enum drx_mirror { | 529 | enum drx_mirror { |
| 530 | DRX_MIRROR_NO = 0, /**< Spectrum is not mirrored. */ | 530 | DRX_MIRROR_NO = 0, /*< Spectrum is not mirrored. */ |
| 531 | DRX_MIRROR_YES, /**< Spectrum is mirrored. */ | 531 | DRX_MIRROR_YES, /*< Spectrum is mirrored. */ |
| 532 | DRX_MIRROR_UNKNOWN = DRX_UNKNOWN, | 532 | DRX_MIRROR_UNKNOWN = DRX_UNKNOWN, |
| 533 | /**< Unknown if spectrum is mirrored. */ | 533 | /*< Unknown if spectrum is mirrored. */ |
| 534 | DRX_MIRROR_AUTO = DRX_AUTO | 534 | DRX_MIRROR_AUTO = DRX_AUTO |
| 535 | /**< Autodetect if spectrum is mirrored. */ | 535 | /*< Autodetect if spectrum is mirrored. */ |
| 536 | }; | 536 | }; |
| 537 | 537 | ||
| 538 | /** | 538 | /* |
| 539 | * \enum enum drx_modulation | 539 | * \enum enum drx_modulation |
| 540 | * \brief Constellation type of the channel. | 540 | * \brief Constellation type of the channel. |
| 541 | */ | 541 | */ |
| 542 | enum drx_modulation { | 542 | enum drx_modulation { |
| 543 | DRX_CONSTELLATION_BPSK = 0, /**< Modulation is BPSK. */ | 543 | DRX_CONSTELLATION_BPSK = 0, /*< Modulation is BPSK. */ |
| 544 | DRX_CONSTELLATION_QPSK, /**< Constellation is QPSK. */ | 544 | DRX_CONSTELLATION_QPSK, /*< Constellation is QPSK. */ |
| 545 | DRX_CONSTELLATION_PSK8, /**< Constellation is PSK8. */ | 545 | DRX_CONSTELLATION_PSK8, /*< Constellation is PSK8. */ |
| 546 | DRX_CONSTELLATION_QAM16, /**< Constellation is QAM16. */ | 546 | DRX_CONSTELLATION_QAM16, /*< Constellation is QAM16. */ |
| 547 | DRX_CONSTELLATION_QAM32, /**< Constellation is QAM32. */ | 547 | DRX_CONSTELLATION_QAM32, /*< Constellation is QAM32. */ |
| 548 | DRX_CONSTELLATION_QAM64, /**< Constellation is QAM64. */ | 548 | DRX_CONSTELLATION_QAM64, /*< Constellation is QAM64. */ |
| 549 | DRX_CONSTELLATION_QAM128, /**< Constellation is QAM128. */ | 549 | DRX_CONSTELLATION_QAM128, /*< Constellation is QAM128. */ |
| 550 | DRX_CONSTELLATION_QAM256, /**< Constellation is QAM256. */ | 550 | DRX_CONSTELLATION_QAM256, /*< Constellation is QAM256. */ |
| 551 | DRX_CONSTELLATION_QAM512, /**< Constellation is QAM512. */ | 551 | DRX_CONSTELLATION_QAM512, /*< Constellation is QAM512. */ |
| 552 | DRX_CONSTELLATION_QAM1024, /**< Constellation is QAM1024. */ | 552 | DRX_CONSTELLATION_QAM1024, /*< Constellation is QAM1024. */ |
| 553 | DRX_CONSTELLATION_QPSK_NR, /**< Constellation is QPSK_NR */ | 553 | DRX_CONSTELLATION_QPSK_NR, /*< Constellation is QPSK_NR */ |
| 554 | DRX_CONSTELLATION_UNKNOWN = DRX_UNKNOWN, | 554 | DRX_CONSTELLATION_UNKNOWN = DRX_UNKNOWN, |
| 555 | /**< Constellation unknown. */ | 555 | /*< Constellation unknown. */ |
| 556 | DRX_CONSTELLATION_AUTO = DRX_AUTO | 556 | DRX_CONSTELLATION_AUTO = DRX_AUTO |
| 557 | /**< Autodetect constellation. */ | 557 | /*< Autodetect constellation. */ |
| 558 | }; | 558 | }; |
| 559 | 559 | ||
| 560 | /** | 560 | /* |
| 561 | * \enum enum drx_hierarchy | 561 | * \enum enum drx_hierarchy |
| 562 | * \brief Hierarchy of the channel. | 562 | * \brief Hierarchy of the channel. |
| 563 | */ | 563 | */ |
| 564 | enum drx_hierarchy { | 564 | enum drx_hierarchy { |
| 565 | DRX_HIERARCHY_NONE = 0, /**< None hierarchical channel. */ | 565 | DRX_HIERARCHY_NONE = 0, /*< None hierarchical channel. */ |
| 566 | DRX_HIERARCHY_ALPHA1, /**< Hierarchical channel, alpha=1. */ | 566 | DRX_HIERARCHY_ALPHA1, /*< Hierarchical channel, alpha=1. */ |
| 567 | DRX_HIERARCHY_ALPHA2, /**< Hierarchical channel, alpha=2. */ | 567 | DRX_HIERARCHY_ALPHA2, /*< Hierarchical channel, alpha=2. */ |
| 568 | DRX_HIERARCHY_ALPHA4, /**< Hierarchical channel, alpha=4. */ | 568 | DRX_HIERARCHY_ALPHA4, /*< Hierarchical channel, alpha=4. */ |
| 569 | DRX_HIERARCHY_UNKNOWN = DRX_UNKNOWN, | 569 | DRX_HIERARCHY_UNKNOWN = DRX_UNKNOWN, |
| 570 | /**< Hierarchy unknown. */ | 570 | /*< Hierarchy unknown. */ |
| 571 | DRX_HIERARCHY_AUTO = DRX_AUTO | 571 | DRX_HIERARCHY_AUTO = DRX_AUTO |
| 572 | /**< Autodetect hierarchy. */ | 572 | /*< Autodetect hierarchy. */ |
| 573 | }; | 573 | }; |
| 574 | 574 | ||
| 575 | /** | 575 | /* |
| 576 | * \enum enum drx_priority | 576 | * \enum enum drx_priority |
| 577 | * \brief Channel priority in case of hierarchical transmission. | 577 | * \brief Channel priority in case of hierarchical transmission. |
| 578 | */ | 578 | */ |
| 579 | enum drx_priority { | 579 | enum drx_priority { |
| 580 | DRX_PRIORITY_LOW = 0, /**< Low priority channel. */ | 580 | DRX_PRIORITY_LOW = 0, /*< Low priority channel. */ |
| 581 | DRX_PRIORITY_HIGH, /**< High priority channel. */ | 581 | DRX_PRIORITY_HIGH, /*< High priority channel. */ |
| 582 | DRX_PRIORITY_UNKNOWN = DRX_UNKNOWN | 582 | DRX_PRIORITY_UNKNOWN = DRX_UNKNOWN |
| 583 | /**< Priority unknown. */ | 583 | /*< Priority unknown. */ |
| 584 | }; | 584 | }; |
| 585 | 585 | ||
| 586 | /** | 586 | /* |
| 587 | * \enum enum drx_coderate | 587 | * \enum enum drx_coderate |
| 588 | * \brief Channel priority in case of hierarchical transmission. | 588 | * \brief Channel priority in case of hierarchical transmission. |
| 589 | */ | 589 | */ |
| 590 | enum drx_coderate { | 590 | enum drx_coderate { |
| 591 | DRX_CODERATE_1DIV2 = 0, /**< Code rate 1/2nd. */ | 591 | DRX_CODERATE_1DIV2 = 0, /*< Code rate 1/2nd. */ |
| 592 | DRX_CODERATE_2DIV3, /**< Code rate 2/3nd. */ | 592 | DRX_CODERATE_2DIV3, /*< Code rate 2/3nd. */ |
| 593 | DRX_CODERATE_3DIV4, /**< Code rate 3/4nd. */ | 593 | DRX_CODERATE_3DIV4, /*< Code rate 3/4nd. */ |
| 594 | DRX_CODERATE_5DIV6, /**< Code rate 5/6nd. */ | 594 | DRX_CODERATE_5DIV6, /*< Code rate 5/6nd. */ |
| 595 | DRX_CODERATE_7DIV8, /**< Code rate 7/8nd. */ | 595 | DRX_CODERATE_7DIV8, /*< Code rate 7/8nd. */ |
| 596 | DRX_CODERATE_UNKNOWN = DRX_UNKNOWN, | 596 | DRX_CODERATE_UNKNOWN = DRX_UNKNOWN, |
| 597 | /**< Code rate unknown. */ | 597 | /*< Code rate unknown. */ |
| 598 | DRX_CODERATE_AUTO = DRX_AUTO | 598 | DRX_CODERATE_AUTO = DRX_AUTO |
| 599 | /**< Autodetect code rate. */ | 599 | /*< Autodetect code rate. */ |
| 600 | }; | 600 | }; |
| 601 | 601 | ||
| 602 | /** | 602 | /* |
| 603 | * \enum enum drx_guard | 603 | * \enum enum drx_guard |
| 604 | * \brief Guard interval of a channel. | 604 | * \brief Guard interval of a channel. |
| 605 | */ | 605 | */ |
| 606 | enum drx_guard { | 606 | enum drx_guard { |
| 607 | DRX_GUARD_1DIV32 = 0, /**< Guard interval 1/32nd. */ | 607 | DRX_GUARD_1DIV32 = 0, /*< Guard interval 1/32nd. */ |
| 608 | DRX_GUARD_1DIV16, /**< Guard interval 1/16th. */ | 608 | DRX_GUARD_1DIV16, /*< Guard interval 1/16th. */ |
| 609 | DRX_GUARD_1DIV8, /**< Guard interval 1/8th. */ | 609 | DRX_GUARD_1DIV8, /*< Guard interval 1/8th. */ |
| 610 | DRX_GUARD_1DIV4, /**< Guard interval 1/4th. */ | 610 | DRX_GUARD_1DIV4, /*< Guard interval 1/4th. */ |
| 611 | DRX_GUARD_UNKNOWN = DRX_UNKNOWN, | 611 | DRX_GUARD_UNKNOWN = DRX_UNKNOWN, |
| 612 | /**< Guard interval unknown. */ | 612 | /*< Guard interval unknown. */ |
| 613 | DRX_GUARD_AUTO = DRX_AUTO | 613 | DRX_GUARD_AUTO = DRX_AUTO |
| 614 | /**< Autodetect guard interval. */ | 614 | /*< Autodetect guard interval. */ |
| 615 | }; | 615 | }; |
| 616 | 616 | ||
| 617 | /** | 617 | /* |
| 618 | * \enum enum drx_fft_mode | 618 | * \enum enum drx_fft_mode |
| 619 | * \brief FFT mode. | 619 | * \brief FFT mode. |
| 620 | */ | 620 | */ |
| 621 | enum drx_fft_mode { | 621 | enum drx_fft_mode { |
| 622 | DRX_FFTMODE_2K = 0, /**< 2K FFT mode. */ | 622 | DRX_FFTMODE_2K = 0, /*< 2K FFT mode. */ |
| 623 | DRX_FFTMODE_4K, /**< 4K FFT mode. */ | 623 | DRX_FFTMODE_4K, /*< 4K FFT mode. */ |
| 624 | DRX_FFTMODE_8K, /**< 8K FFT mode. */ | 624 | DRX_FFTMODE_8K, /*< 8K FFT mode. */ |
| 625 | DRX_FFTMODE_UNKNOWN = DRX_UNKNOWN, | 625 | DRX_FFTMODE_UNKNOWN = DRX_UNKNOWN, |
| 626 | /**< FFT mode unknown. */ | 626 | /*< FFT mode unknown. */ |
| 627 | DRX_FFTMODE_AUTO = DRX_AUTO | 627 | DRX_FFTMODE_AUTO = DRX_AUTO |
| 628 | /**< Autodetect FFT mode. */ | 628 | /*< Autodetect FFT mode. */ |
| 629 | }; | 629 | }; |
| 630 | 630 | ||
| 631 | /** | 631 | /* |
| 632 | * \enum enum drx_classification | 632 | * \enum enum drx_classification |
| 633 | * \brief Channel classification. | 633 | * \brief Channel classification. |
| 634 | */ | 634 | */ |
| 635 | enum drx_classification { | 635 | enum drx_classification { |
| 636 | DRX_CLASSIFICATION_GAUSS = 0, /**< Gaussion noise. */ | 636 | DRX_CLASSIFICATION_GAUSS = 0, /*< Gaussion noise. */ |
| 637 | DRX_CLASSIFICATION_HVY_GAUSS, /**< Heavy Gaussion noise. */ | 637 | DRX_CLASSIFICATION_HVY_GAUSS, /*< Heavy Gaussion noise. */ |
| 638 | DRX_CLASSIFICATION_COCHANNEL, /**< Co-channel. */ | 638 | DRX_CLASSIFICATION_COCHANNEL, /*< Co-channel. */ |
| 639 | DRX_CLASSIFICATION_STATIC, /**< Static echo. */ | 639 | DRX_CLASSIFICATION_STATIC, /*< Static echo. */ |
| 640 | DRX_CLASSIFICATION_MOVING, /**< Moving echo. */ | 640 | DRX_CLASSIFICATION_MOVING, /*< Moving echo. */ |
| 641 | DRX_CLASSIFICATION_ZERODB, /**< Zero dB echo. */ | 641 | DRX_CLASSIFICATION_ZERODB, /*< Zero dB echo. */ |
| 642 | DRX_CLASSIFICATION_UNKNOWN = DRX_UNKNOWN, | 642 | DRX_CLASSIFICATION_UNKNOWN = DRX_UNKNOWN, |
| 643 | /**< Unknown classification */ | 643 | /*< Unknown classification */ |
| 644 | DRX_CLASSIFICATION_AUTO = DRX_AUTO | 644 | DRX_CLASSIFICATION_AUTO = DRX_AUTO |
| 645 | /**< Autodetect classification. */ | 645 | /*< Autodetect classification. */ |
| 646 | }; | 646 | }; |
| 647 | 647 | ||
| 648 | /** | 648 | /* |
| 649 | * /enum enum drx_interleave_mode | 649 | * /enum enum drx_interleave_mode |
| 650 | * /brief Interleave modes | 650 | * /brief Interleave modes |
| 651 | */ | 651 | */ |
| @@ -673,80 +673,80 @@ enum drx_interleave_mode { | |||
| 673 | DRX_INTERLEAVEMODE_B52_M48, | 673 | DRX_INTERLEAVEMODE_B52_M48, |
| 674 | DRX_INTERLEAVEMODE_B52_M0, | 674 | DRX_INTERLEAVEMODE_B52_M0, |
| 675 | DRX_INTERLEAVEMODE_UNKNOWN = DRX_UNKNOWN, | 675 | DRX_INTERLEAVEMODE_UNKNOWN = DRX_UNKNOWN, |
| 676 | /**< Unknown interleave mode */ | 676 | /*< Unknown interleave mode */ |
| 677 | DRX_INTERLEAVEMODE_AUTO = DRX_AUTO | 677 | DRX_INTERLEAVEMODE_AUTO = DRX_AUTO |
| 678 | /**< Autodetect interleave mode */ | 678 | /*< Autodetect interleave mode */ |
| 679 | }; | 679 | }; |
| 680 | 680 | ||
| 681 | /** | 681 | /* |
| 682 | * \enum enum drx_carrier_mode | 682 | * \enum enum drx_carrier_mode |
| 683 | * \brief Channel Carrier Mode. | 683 | * \brief Channel Carrier Mode. |
| 684 | */ | 684 | */ |
| 685 | enum drx_carrier_mode { | 685 | enum drx_carrier_mode { |
| 686 | DRX_CARRIER_MULTI = 0, /**< Multi carrier mode */ | 686 | DRX_CARRIER_MULTI = 0, /*< Multi carrier mode */ |
| 687 | DRX_CARRIER_SINGLE, /**< Single carrier mode */ | 687 | DRX_CARRIER_SINGLE, /*< Single carrier mode */ |
| 688 | DRX_CARRIER_UNKNOWN = DRX_UNKNOWN, | 688 | DRX_CARRIER_UNKNOWN = DRX_UNKNOWN, |
| 689 | /**< Carrier mode unknown. */ | 689 | /*< Carrier mode unknown. */ |
| 690 | DRX_CARRIER_AUTO = DRX_AUTO /**< Autodetect carrier mode */ | 690 | DRX_CARRIER_AUTO = DRX_AUTO /*< Autodetect carrier mode */ |
| 691 | }; | 691 | }; |
| 692 | 692 | ||
| 693 | /** | 693 | /* |
| 694 | * \enum enum drx_frame_mode | 694 | * \enum enum drx_frame_mode |
| 695 | * \brief Channel Frame Mode. | 695 | * \brief Channel Frame Mode. |
| 696 | */ | 696 | */ |
| 697 | enum drx_frame_mode { | 697 | enum drx_frame_mode { |
| 698 | DRX_FRAMEMODE_420 = 0, /**< 420 with variable PN */ | 698 | DRX_FRAMEMODE_420 = 0, /*< 420 with variable PN */ |
| 699 | DRX_FRAMEMODE_595, /**< 595 */ | 699 | DRX_FRAMEMODE_595, /*< 595 */ |
| 700 | DRX_FRAMEMODE_945, /**< 945 with variable PN */ | 700 | DRX_FRAMEMODE_945, /*< 945 with variable PN */ |
| 701 | DRX_FRAMEMODE_420_FIXED_PN, | 701 | DRX_FRAMEMODE_420_FIXED_PN, |
| 702 | /**< 420 with fixed PN */ | 702 | /*< 420 with fixed PN */ |
| 703 | DRX_FRAMEMODE_945_FIXED_PN, | 703 | DRX_FRAMEMODE_945_FIXED_PN, |
| 704 | /**< 945 with fixed PN */ | 704 | /*< 945 with fixed PN */ |
| 705 | DRX_FRAMEMODE_UNKNOWN = DRX_UNKNOWN, | 705 | DRX_FRAMEMODE_UNKNOWN = DRX_UNKNOWN, |
| 706 | /**< Frame mode unknown. */ | 706 | /*< Frame mode unknown. */ |
| 707 | DRX_FRAMEMODE_AUTO = DRX_AUTO | 707 | DRX_FRAMEMODE_AUTO = DRX_AUTO |
| 708 | /**< Autodetect frame mode */ | 708 | /*< Autodetect frame mode */ |
| 709 | }; | 709 | }; |
| 710 | 710 | ||
| 711 | /** | 711 | /* |
| 712 | * \enum enum drx_tps_frame | 712 | * \enum enum drx_tps_frame |
| 713 | * \brief Frame number in current super-frame. | 713 | * \brief Frame number in current super-frame. |
| 714 | */ | 714 | */ |
| 715 | enum drx_tps_frame { | 715 | enum drx_tps_frame { |
| 716 | DRX_TPS_FRAME1 = 0, /**< TPS frame 1. */ | 716 | DRX_TPS_FRAME1 = 0, /*< TPS frame 1. */ |
| 717 | DRX_TPS_FRAME2, /**< TPS frame 2. */ | 717 | DRX_TPS_FRAME2, /*< TPS frame 2. */ |
| 718 | DRX_TPS_FRAME3, /**< TPS frame 3. */ | 718 | DRX_TPS_FRAME3, /*< TPS frame 3. */ |
| 719 | DRX_TPS_FRAME4, /**< TPS frame 4. */ | 719 | DRX_TPS_FRAME4, /*< TPS frame 4. */ |
| 720 | DRX_TPS_FRAME_UNKNOWN = DRX_UNKNOWN | 720 | DRX_TPS_FRAME_UNKNOWN = DRX_UNKNOWN |
| 721 | /**< TPS frame unknown. */ | 721 | /*< TPS frame unknown. */ |
| 722 | }; | 722 | }; |
| 723 | 723 | ||
| 724 | /** | 724 | /* |
| 725 | * \enum enum drx_ldpc | 725 | * \enum enum drx_ldpc |
| 726 | * \brief TPS LDPC . | 726 | * \brief TPS LDPC . |
| 727 | */ | 727 | */ |
| 728 | enum drx_ldpc { | 728 | enum drx_ldpc { |
| 729 | DRX_LDPC_0_4 = 0, /**< LDPC 0.4 */ | 729 | DRX_LDPC_0_4 = 0, /*< LDPC 0.4 */ |
| 730 | DRX_LDPC_0_6, /**< LDPC 0.6 */ | 730 | DRX_LDPC_0_6, /*< LDPC 0.6 */ |
| 731 | DRX_LDPC_0_8, /**< LDPC 0.8 */ | 731 | DRX_LDPC_0_8, /*< LDPC 0.8 */ |
| 732 | DRX_LDPC_UNKNOWN = DRX_UNKNOWN, | 732 | DRX_LDPC_UNKNOWN = DRX_UNKNOWN, |
| 733 | /**< LDPC unknown. */ | 733 | /*< LDPC unknown. */ |
| 734 | DRX_LDPC_AUTO = DRX_AUTO /**< Autodetect LDPC */ | 734 | DRX_LDPC_AUTO = DRX_AUTO /*< Autodetect LDPC */ |
| 735 | }; | 735 | }; |
| 736 | 736 | ||
| 737 | /** | 737 | /* |
| 738 | * \enum enum drx_pilot_mode | 738 | * \enum enum drx_pilot_mode |
| 739 | * \brief Pilot modes in DTMB. | 739 | * \brief Pilot modes in DTMB. |
| 740 | */ | 740 | */ |
| 741 | enum drx_pilot_mode { | 741 | enum drx_pilot_mode { |
| 742 | DRX_PILOT_ON = 0, /**< Pilot On */ | 742 | DRX_PILOT_ON = 0, /*< Pilot On */ |
| 743 | DRX_PILOT_OFF, /**< Pilot Off */ | 743 | DRX_PILOT_OFF, /*< Pilot Off */ |
| 744 | DRX_PILOT_UNKNOWN = DRX_UNKNOWN, | 744 | DRX_PILOT_UNKNOWN = DRX_UNKNOWN, |
| 745 | /**< Pilot unknown. */ | 745 | /*< Pilot unknown. */ |
| 746 | DRX_PILOT_AUTO = DRX_AUTO /**< Autodetect Pilot */ | 746 | DRX_PILOT_AUTO = DRX_AUTO /*< Autodetect Pilot */ |
| 747 | }; | 747 | }; |
| 748 | 748 | ||
| 749 | /** | 749 | /* |
| 750 | * enum drxu_code_action - indicate if firmware has to be uploaded or verified. | 750 | * enum drxu_code_action - indicate if firmware has to be uploaded or verified. |
| 751 | * @UCODE_UPLOAD: Upload the microcode image to device | 751 | * @UCODE_UPLOAD: Upload the microcode image to device |
| 752 | * @UCODE_VERIFY: Compare microcode image with code on device | 752 | * @UCODE_VERIFY: Compare microcode image with code on device |
| @@ -756,7 +756,7 @@ enum drxu_code_action { | |||
| 756 | UCODE_VERIFY | 756 | UCODE_VERIFY |
| 757 | }; | 757 | }; |
| 758 | 758 | ||
| 759 | /** | 759 | /* |
| 760 | * \enum enum drx_lock_status * \brief Used to reflect current lock status of demodulator. | 760 | * \enum enum drx_lock_status * \brief Used to reflect current lock status of demodulator. |
| 761 | * | 761 | * |
| 762 | * The generic lock states have device dependent semantics. | 762 | * The generic lock states have device dependent semantics. |
| @@ -801,7 +801,7 @@ enum drx_lock_status { | |||
| 801 | DRX_LOCKED | 801 | DRX_LOCKED |
| 802 | }; | 802 | }; |
| 803 | 803 | ||
| 804 | /** | 804 | /* |
| 805 | * \enum enum drx_uio* \brief Used to address a User IO (UIO). | 805 | * \enum enum drx_uio* \brief Used to address a User IO (UIO). |
| 806 | */ | 806 | */ |
| 807 | enum drx_uio { | 807 | enum drx_uio { |
| @@ -840,7 +840,7 @@ enum drx_uio { | |||
| 840 | DRX_UIO_MAX = DRX_UIO32 | 840 | DRX_UIO_MAX = DRX_UIO32 |
| 841 | }; | 841 | }; |
| 842 | 842 | ||
| 843 | /** | 843 | /* |
| 844 | * \enum enum drxuio_mode * \brief Used to configure the modus oprandi of a UIO. | 844 | * \enum enum drxuio_mode * \brief Used to configure the modus oprandi of a UIO. |
| 845 | * | 845 | * |
| 846 | * DRX_UIO_MODE_FIRMWARE is an old uio mode. | 846 | * DRX_UIO_MODE_FIRMWARE is an old uio mode. |
| @@ -850,37 +850,37 @@ enum drx_uio { | |||
| 850 | */ | 850 | */ |
| 851 | enum drxuio_mode { | 851 | enum drxuio_mode { |
| 852 | DRX_UIO_MODE_DISABLE = 0x01, | 852 | DRX_UIO_MODE_DISABLE = 0x01, |
| 853 | /**< not used, pin is configured as input */ | 853 | /*< not used, pin is configured as input */ |
| 854 | DRX_UIO_MODE_READWRITE = 0x02, | 854 | DRX_UIO_MODE_READWRITE = 0x02, |
| 855 | /**< used for read/write by application */ | 855 | /*< used for read/write by application */ |
| 856 | DRX_UIO_MODE_FIRMWARE = 0x04, | 856 | DRX_UIO_MODE_FIRMWARE = 0x04, |
| 857 | /**< controlled by firmware, function 0 */ | 857 | /*< controlled by firmware, function 0 */ |
| 858 | DRX_UIO_MODE_FIRMWARE0 = DRX_UIO_MODE_FIRMWARE, | 858 | DRX_UIO_MODE_FIRMWARE0 = DRX_UIO_MODE_FIRMWARE, |
| 859 | /**< same as above */ | 859 | /*< same as above */ |
| 860 | DRX_UIO_MODE_FIRMWARE1 = 0x08, | 860 | DRX_UIO_MODE_FIRMWARE1 = 0x08, |
| 861 | /**< controlled by firmware, function 1 */ | 861 | /*< controlled by firmware, function 1 */ |
| 862 | DRX_UIO_MODE_FIRMWARE2 = 0x10, | 862 | DRX_UIO_MODE_FIRMWARE2 = 0x10, |
| 863 | /**< controlled by firmware, function 2 */ | 863 | /*< controlled by firmware, function 2 */ |
| 864 | DRX_UIO_MODE_FIRMWARE3 = 0x20, | 864 | DRX_UIO_MODE_FIRMWARE3 = 0x20, |
| 865 | /**< controlled by firmware, function 3 */ | 865 | /*< controlled by firmware, function 3 */ |
| 866 | DRX_UIO_MODE_FIRMWARE4 = 0x40, | 866 | DRX_UIO_MODE_FIRMWARE4 = 0x40, |
| 867 | /**< controlled by firmware, function 4 */ | 867 | /*< controlled by firmware, function 4 */ |
| 868 | DRX_UIO_MODE_FIRMWARE5 = 0x80 | 868 | DRX_UIO_MODE_FIRMWARE5 = 0x80 |
| 869 | /**< controlled by firmware, function 5 */ | 869 | /*< controlled by firmware, function 5 */ |
| 870 | }; | 870 | }; |
| 871 | 871 | ||
| 872 | /** | 872 | /* |
| 873 | * \enum enum drxoob_downstream_standard * \brief Used to select OOB standard. | 873 | * \enum enum drxoob_downstream_standard * \brief Used to select OOB standard. |
| 874 | * | 874 | * |
| 875 | * Based on ANSI 55-1 and 55-2 | 875 | * Based on ANSI 55-1 and 55-2 |
| 876 | */ | 876 | */ |
| 877 | enum drxoob_downstream_standard { | 877 | enum drxoob_downstream_standard { |
| 878 | DRX_OOB_MODE_A = 0, | 878 | DRX_OOB_MODE_A = 0, |
| 879 | /**< ANSI 55-1 */ | 879 | /*< ANSI 55-1 */ |
| 880 | DRX_OOB_MODE_B_GRADE_A, | 880 | DRX_OOB_MODE_B_GRADE_A, |
| 881 | /**< ANSI 55-2 A */ | 881 | /*< ANSI 55-2 A */ |
| 882 | DRX_OOB_MODE_B_GRADE_B | 882 | DRX_OOB_MODE_B_GRADE_B |
| 883 | /**< ANSI 55-2 B */ | 883 | /*< ANSI 55-2 B */ |
| 884 | }; | 884 | }; |
| 885 | 885 | ||
| 886 | /*------------------------------------------------------------------------- | 886 | /*------------------------------------------------------------------------- |
| @@ -924,7 +924,7 @@ STRUCTS | |||
| 924 | /*============================================================================*/ | 924 | /*============================================================================*/ |
| 925 | /*============================================================================*/ | 925 | /*============================================================================*/ |
| 926 | 926 | ||
| 927 | /** | 927 | /* |
| 928 | * struct drxu_code_info Parameters for microcode upload and verfiy. | 928 | * struct drxu_code_info Parameters for microcode upload and verfiy. |
| 929 | * | 929 | * |
| 930 | * @mc_file: microcode file name | 930 | * @mc_file: microcode file name |
| @@ -935,7 +935,7 @@ struct drxu_code_info { | |||
| 935 | char *mc_file; | 935 | char *mc_file; |
| 936 | }; | 936 | }; |
| 937 | 937 | ||
| 938 | /** | 938 | /* |
| 939 | * \struct drx_mc_version_rec_t | 939 | * \struct drx_mc_version_rec_t |
| 940 | * \brief Microcode version record | 940 | * \brief Microcode version record |
| 941 | * Version numbers are stored in BCD format, as usual: | 941 | * Version numbers are stored in BCD format, as usual: |
| @@ -963,7 +963,7 @@ struct drx_mc_version_rec { | |||
| 963 | 963 | ||
| 964 | /*========================================*/ | 964 | /*========================================*/ |
| 965 | 965 | ||
| 966 | /** | 966 | /* |
| 967 | * \struct drx_filter_info_t | 967 | * \struct drx_filter_info_t |
| 968 | * \brief Parameters for loading filter coefficients | 968 | * \brief Parameters for loading filter coefficients |
| 969 | * | 969 | * |
| @@ -971,18 +971,18 @@ struct drx_mc_version_rec { | |||
| 971 | */ | 971 | */ |
| 972 | struct drx_filter_info { | 972 | struct drx_filter_info { |
| 973 | u8 *data_re; | 973 | u8 *data_re; |
| 974 | /**< pointer to coefficients for RE */ | 974 | /*< pointer to coefficients for RE */ |
| 975 | u8 *data_im; | 975 | u8 *data_im; |
| 976 | /**< pointer to coefficients for IM */ | 976 | /*< pointer to coefficients for IM */ |
| 977 | u16 size_re; | 977 | u16 size_re; |
| 978 | /**< size of coefficients for RE */ | 978 | /*< size of coefficients for RE */ |
| 979 | u16 size_im; | 979 | u16 size_im; |
| 980 | /**< size of coefficients for IM */ | 980 | /*< size of coefficients for IM */ |
| 981 | }; | 981 | }; |
| 982 | 982 | ||
| 983 | /*========================================*/ | 983 | /*========================================*/ |
| 984 | 984 | ||
| 985 | /** | 985 | /* |
| 986 | * \struct struct drx_channel * \brief The set of parameters describing a single channel. | 986 | * \struct struct drx_channel * \brief The set of parameters describing a single channel. |
| 987 | * | 987 | * |
| 988 | * Used by DRX_CTRL_SET_CHANNEL and DRX_CTRL_GET_CHANNEL. | 988 | * Used by DRX_CTRL_SET_CHANNEL and DRX_CTRL_GET_CHANNEL. |
| @@ -991,29 +991,29 @@ struct drx_filter_info { | |||
| 991 | */ | 991 | */ |
| 992 | struct drx_channel { | 992 | struct drx_channel { |
| 993 | s32 frequency; | 993 | s32 frequency; |
| 994 | /**< frequency in kHz */ | 994 | /*< frequency in kHz */ |
| 995 | enum drx_bandwidth bandwidth; | 995 | enum drx_bandwidth bandwidth; |
| 996 | /**< bandwidth */ | 996 | /*< bandwidth */ |
| 997 | enum drx_mirror mirror; /**< mirrored or not on RF */ | 997 | enum drx_mirror mirror; /*< mirrored or not on RF */ |
| 998 | enum drx_modulation constellation; | 998 | enum drx_modulation constellation; |
| 999 | /**< constellation */ | 999 | /*< constellation */ |
| 1000 | enum drx_hierarchy hierarchy; | 1000 | enum drx_hierarchy hierarchy; |
| 1001 | /**< hierarchy */ | 1001 | /*< hierarchy */ |
| 1002 | enum drx_priority priority; /**< priority */ | 1002 | enum drx_priority priority; /*< priority */ |
| 1003 | enum drx_coderate coderate; /**< coderate */ | 1003 | enum drx_coderate coderate; /*< coderate */ |
| 1004 | enum drx_guard guard; /**< guard interval */ | 1004 | enum drx_guard guard; /*< guard interval */ |
| 1005 | enum drx_fft_mode fftmode; /**< fftmode */ | 1005 | enum drx_fft_mode fftmode; /*< fftmode */ |
| 1006 | enum drx_classification classification; | 1006 | enum drx_classification classification; |
| 1007 | /**< classification */ | 1007 | /*< classification */ |
| 1008 | u32 symbolrate; | 1008 | u32 symbolrate; |
| 1009 | /**< symbolrate in symbols/sec */ | 1009 | /*< symbolrate in symbols/sec */ |
| 1010 | enum drx_interleave_mode interleavemode; | 1010 | enum drx_interleave_mode interleavemode; |
| 1011 | /**< interleaveMode QAM */ | 1011 | /*< interleaveMode QAM */ |
| 1012 | enum drx_ldpc ldpc; /**< ldpc */ | 1012 | enum drx_ldpc ldpc; /*< ldpc */ |
| 1013 | enum drx_carrier_mode carrier; /**< carrier */ | 1013 | enum drx_carrier_mode carrier; /*< carrier */ |
| 1014 | enum drx_frame_mode framemode; | 1014 | enum drx_frame_mode framemode; |
| 1015 | /**< frame mode */ | 1015 | /*< frame mode */ |
| 1016 | enum drx_pilot_mode pilot; /**< pilot mode */ | 1016 | enum drx_pilot_mode pilot; /*< pilot mode */ |
| 1017 | }; | 1017 | }; |
| 1018 | 1018 | ||
| 1019 | /*========================================*/ | 1019 | /*========================================*/ |
| @@ -1027,74 +1027,74 @@ enum drx_cfg_sqi_speed { | |||
| 1027 | 1027 | ||
| 1028 | /*========================================*/ | 1028 | /*========================================*/ |
| 1029 | 1029 | ||
| 1030 | /** | 1030 | /* |
| 1031 | * \struct struct drx_complex * A complex number. | 1031 | * \struct struct drx_complex * A complex number. |
| 1032 | * | 1032 | * |
| 1033 | * Used by DRX_CTRL_CONSTEL. | 1033 | * Used by DRX_CTRL_CONSTEL. |
| 1034 | */ | 1034 | */ |
| 1035 | struct drx_complex { | 1035 | struct drx_complex { |
| 1036 | s16 im; | 1036 | s16 im; |
| 1037 | /**< Imaginary part. */ | 1037 | /*< Imaginary part. */ |
| 1038 | s16 re; | 1038 | s16 re; |
| 1039 | /**< Real part. */ | 1039 | /*< Real part. */ |
| 1040 | }; | 1040 | }; |
| 1041 | 1041 | ||
| 1042 | /*========================================*/ | 1042 | /*========================================*/ |
| 1043 | 1043 | ||
| 1044 | /** | 1044 | /* |
| 1045 | * \struct struct drx_frequency_plan * Array element of a frequency plan. | 1045 | * \struct struct drx_frequency_plan * Array element of a frequency plan. |
| 1046 | * | 1046 | * |
| 1047 | * Used by DRX_CTRL_SCAN_INIT. | 1047 | * Used by DRX_CTRL_SCAN_INIT. |
| 1048 | */ | 1048 | */ |
| 1049 | struct drx_frequency_plan { | 1049 | struct drx_frequency_plan { |
| 1050 | s32 first; | 1050 | s32 first; |
| 1051 | /**< First centre frequency in this band */ | 1051 | /*< First centre frequency in this band */ |
| 1052 | s32 last; | 1052 | s32 last; |
| 1053 | /**< Last centre frequency in this band */ | 1053 | /*< Last centre frequency in this band */ |
| 1054 | s32 step; | 1054 | s32 step; |
| 1055 | /**< Stepping frequency in this band */ | 1055 | /*< Stepping frequency in this band */ |
| 1056 | enum drx_bandwidth bandwidth; | 1056 | enum drx_bandwidth bandwidth; |
| 1057 | /**< Bandwidth within this frequency band */ | 1057 | /*< Bandwidth within this frequency band */ |
| 1058 | u16 ch_number; | 1058 | u16 ch_number; |
| 1059 | /**< First channel number in this band, or first | 1059 | /*< First channel number in this band, or first |
| 1060 | index in ch_names */ | 1060 | index in ch_names */ |
| 1061 | char **ch_names; | 1061 | char **ch_names; |
| 1062 | /**< Optional list of channel names in this | 1062 | /*< Optional list of channel names in this |
| 1063 | band */ | 1063 | band */ |
| 1064 | }; | 1064 | }; |
| 1065 | 1065 | ||
| 1066 | /*========================================*/ | 1066 | /*========================================*/ |
| 1067 | 1067 | ||
| 1068 | /** | 1068 | /* |
| 1069 | * \struct struct drx_scan_param * Parameters for channel scan. | 1069 | * \struct struct drx_scan_param * Parameters for channel scan. |
| 1070 | * | 1070 | * |
| 1071 | * Used by DRX_CTRL_SCAN_INIT. | 1071 | * Used by DRX_CTRL_SCAN_INIT. |
| 1072 | */ | 1072 | */ |
| 1073 | struct drx_scan_param { | 1073 | struct drx_scan_param { |
| 1074 | struct drx_frequency_plan *frequency_plan; | 1074 | struct drx_frequency_plan *frequency_plan; |
| 1075 | /**< Frequency plan (array)*/ | 1075 | /*< Frequency plan (array)*/ |
| 1076 | u16 frequency_plan_size; /**< Number of bands */ | 1076 | u16 frequency_plan_size; /*< Number of bands */ |
| 1077 | u32 num_tries; /**< Max channels tried */ | 1077 | u32 num_tries; /*< Max channels tried */ |
| 1078 | s32 skip; /**< Minimum frequency step to take | 1078 | s32 skip; /*< Minimum frequency step to take |
| 1079 | after a channel is found */ | 1079 | after a channel is found */ |
| 1080 | void *ext_params; /**< Standard specific params */ | 1080 | void *ext_params; /*< Standard specific params */ |
| 1081 | }; | 1081 | }; |
| 1082 | 1082 | ||
| 1083 | /*========================================*/ | 1083 | /*========================================*/ |
| 1084 | 1084 | ||
| 1085 | /** | 1085 | /* |
| 1086 | * \brief Scan commands. | 1086 | * \brief Scan commands. |
| 1087 | * Used by scanning algorithms. | 1087 | * Used by scanning algorithms. |
| 1088 | */ | 1088 | */ |
| 1089 | enum drx_scan_command { | 1089 | enum drx_scan_command { |
| 1090 | DRX_SCAN_COMMAND_INIT = 0,/**< Initialize scanning */ | 1090 | DRX_SCAN_COMMAND_INIT = 0,/*< Initialize scanning */ |
| 1091 | DRX_SCAN_COMMAND_NEXT, /**< Next scan */ | 1091 | DRX_SCAN_COMMAND_NEXT, /*< Next scan */ |
| 1092 | DRX_SCAN_COMMAND_STOP /**< Stop scanning */ | 1092 | DRX_SCAN_COMMAND_STOP /*< Stop scanning */ |
| 1093 | }; | 1093 | }; |
| 1094 | 1094 | ||
| 1095 | /*========================================*/ | 1095 | /*========================================*/ |
| 1096 | 1096 | ||
| 1097 | /** | 1097 | /* |
| 1098 | * \brief Inner scan function prototype. | 1098 | * \brief Inner scan function prototype. |
| 1099 | */ | 1099 | */ |
| 1100 | typedef int(*drx_scan_func_t) (void *scan_context, | 1100 | typedef int(*drx_scan_func_t) (void *scan_context, |
| @@ -1104,77 +1104,77 @@ typedef int(*drx_scan_func_t) (void *scan_context, | |||
| 1104 | 1104 | ||
| 1105 | /*========================================*/ | 1105 | /*========================================*/ |
| 1106 | 1106 | ||
| 1107 | /** | 1107 | /* |
| 1108 | * \struct struct drxtps_info * TPS information, DVB-T specific. | 1108 | * \struct struct drxtps_info * TPS information, DVB-T specific. |
| 1109 | * | 1109 | * |
| 1110 | * Used by DRX_CTRL_TPS_INFO. | 1110 | * Used by DRX_CTRL_TPS_INFO. |
| 1111 | */ | 1111 | */ |
| 1112 | struct drxtps_info { | 1112 | struct drxtps_info { |
| 1113 | enum drx_fft_mode fftmode; /**< Fft mode */ | 1113 | enum drx_fft_mode fftmode; /*< Fft mode */ |
| 1114 | enum drx_guard guard; /**< Guard interval */ | 1114 | enum drx_guard guard; /*< Guard interval */ |
| 1115 | enum drx_modulation constellation; | 1115 | enum drx_modulation constellation; |
| 1116 | /**< Constellation */ | 1116 | /*< Constellation */ |
| 1117 | enum drx_hierarchy hierarchy; | 1117 | enum drx_hierarchy hierarchy; |
| 1118 | /**< Hierarchy */ | 1118 | /*< Hierarchy */ |
| 1119 | enum drx_coderate high_coderate; | 1119 | enum drx_coderate high_coderate; |
| 1120 | /**< High code rate */ | 1120 | /*< High code rate */ |
| 1121 | enum drx_coderate low_coderate; | 1121 | enum drx_coderate low_coderate; |
| 1122 | /**< Low cod rate */ | 1122 | /*< Low cod rate */ |
| 1123 | enum drx_tps_frame frame; /**< Tps frame */ | 1123 | enum drx_tps_frame frame; /*< Tps frame */ |
| 1124 | u8 length; /**< Length */ | 1124 | u8 length; /*< Length */ |
| 1125 | u16 cell_id; /**< Cell id */ | 1125 | u16 cell_id; /*< Cell id */ |
| 1126 | }; | 1126 | }; |
| 1127 | 1127 | ||
| 1128 | /*========================================*/ | 1128 | /*========================================*/ |
| 1129 | 1129 | ||
| 1130 | /** | 1130 | /* |
| 1131 | * \brief Power mode of device. | 1131 | * \brief Power mode of device. |
| 1132 | * | 1132 | * |
| 1133 | * Used by DRX_CTRL_SET_POWER_MODE. | 1133 | * Used by DRX_CTRL_SET_POWER_MODE. |
| 1134 | */ | 1134 | */ |
| 1135 | enum drx_power_mode { | 1135 | enum drx_power_mode { |
| 1136 | DRX_POWER_UP = 0, | 1136 | DRX_POWER_UP = 0, |
| 1137 | /**< Generic , Power Up Mode */ | 1137 | /*< Generic , Power Up Mode */ |
| 1138 | DRX_POWER_MODE_1, | 1138 | DRX_POWER_MODE_1, |
| 1139 | /**< Device specific , Power Up Mode */ | 1139 | /*< Device specific , Power Up Mode */ |
| 1140 | DRX_POWER_MODE_2, | 1140 | DRX_POWER_MODE_2, |
| 1141 | /**< Device specific , Power Up Mode */ | 1141 | /*< Device specific , Power Up Mode */ |
| 1142 | DRX_POWER_MODE_3, | 1142 | DRX_POWER_MODE_3, |
| 1143 | /**< Device specific , Power Up Mode */ | 1143 | /*< Device specific , Power Up Mode */ |
| 1144 | DRX_POWER_MODE_4, | 1144 | DRX_POWER_MODE_4, |
| 1145 | /**< Device specific , Power Up Mode */ | 1145 | /*< Device specific , Power Up Mode */ |
| 1146 | DRX_POWER_MODE_5, | 1146 | DRX_POWER_MODE_5, |
| 1147 | /**< Device specific , Power Up Mode */ | 1147 | /*< Device specific , Power Up Mode */ |
| 1148 | DRX_POWER_MODE_6, | 1148 | DRX_POWER_MODE_6, |
| 1149 | /**< Device specific , Power Up Mode */ | 1149 | /*< Device specific , Power Up Mode */ |
| 1150 | DRX_POWER_MODE_7, | 1150 | DRX_POWER_MODE_7, |
| 1151 | /**< Device specific , Power Up Mode */ | 1151 | /*< Device specific , Power Up Mode */ |
| 1152 | DRX_POWER_MODE_8, | 1152 | DRX_POWER_MODE_8, |
| 1153 | /**< Device specific , Power Up Mode */ | 1153 | /*< Device specific , Power Up Mode */ |
| 1154 | 1154 | ||
| 1155 | DRX_POWER_MODE_9, | 1155 | DRX_POWER_MODE_9, |
| 1156 | /**< Device specific , Power Down Mode */ | 1156 | /*< Device specific , Power Down Mode */ |
| 1157 | DRX_POWER_MODE_10, | 1157 | DRX_POWER_MODE_10, |
| 1158 | /**< Device specific , Power Down Mode */ | 1158 | /*< Device specific , Power Down Mode */ |
| 1159 | DRX_POWER_MODE_11, | 1159 | DRX_POWER_MODE_11, |
| 1160 | /**< Device specific , Power Down Mode */ | 1160 | /*< Device specific , Power Down Mode */ |
| 1161 | DRX_POWER_MODE_12, | 1161 | DRX_POWER_MODE_12, |
| 1162 | /**< Device specific , Power Down Mode */ | 1162 | /*< Device specific , Power Down Mode */ |
| 1163 | DRX_POWER_MODE_13, | 1163 | DRX_POWER_MODE_13, |
| 1164 | /**< Device specific , Power Down Mode */ | 1164 | /*< Device specific , Power Down Mode */ |
| 1165 | DRX_POWER_MODE_14, | 1165 | DRX_POWER_MODE_14, |
| 1166 | /**< Device specific , Power Down Mode */ | 1166 | /*< Device specific , Power Down Mode */ |
| 1167 | DRX_POWER_MODE_15, | 1167 | DRX_POWER_MODE_15, |
| 1168 | /**< Device specific , Power Down Mode */ | 1168 | /*< Device specific , Power Down Mode */ |
| 1169 | DRX_POWER_MODE_16, | 1169 | DRX_POWER_MODE_16, |
| 1170 | /**< Device specific , Power Down Mode */ | 1170 | /*< Device specific , Power Down Mode */ |
| 1171 | DRX_POWER_DOWN = 255 | 1171 | DRX_POWER_DOWN = 255 |
| 1172 | /**< Generic , Power Down Mode */ | 1172 | /*< Generic , Power Down Mode */ |
| 1173 | }; | 1173 | }; |
| 1174 | 1174 | ||
| 1175 | /*========================================*/ | 1175 | /*========================================*/ |
| 1176 | 1176 | ||
| 1177 | /** | 1177 | /* |
| 1178 | * \enum enum drx_module * \brief Software module identification. | 1178 | * \enum enum drx_module * \brief Software module identification. |
| 1179 | * | 1179 | * |
| 1180 | * Used by DRX_CTRL_VERSION. | 1180 | * Used by DRX_CTRL_VERSION. |
| @@ -1191,93 +1191,93 @@ typedef int(*drx_scan_func_t) (void *scan_context, | |||
| 1191 | DRX_MODULE_UNKNOWN | 1191 | DRX_MODULE_UNKNOWN |
| 1192 | }; | 1192 | }; |
| 1193 | 1193 | ||
| 1194 | /** | 1194 | /* |
| 1195 | * \enum struct drx_version * \brief Version information of one software module. | 1195 | * \enum struct drx_version * \brief Version information of one software module. |
| 1196 | * | 1196 | * |
| 1197 | * Used by DRX_CTRL_VERSION. | 1197 | * Used by DRX_CTRL_VERSION. |
| 1198 | */ | 1198 | */ |
| 1199 | struct drx_version { | 1199 | struct drx_version { |
| 1200 | enum drx_module module_type; | 1200 | enum drx_module module_type; |
| 1201 | /**< Type identifier of the module */ | 1201 | /*< Type identifier of the module */ |
| 1202 | char *module_name; | 1202 | char *module_name; |
| 1203 | /**< Name or description of module */ | 1203 | /*< Name or description of module */ |
| 1204 | u16 v_major; /**< Major version number */ | 1204 | u16 v_major; /*< Major version number */ |
| 1205 | u16 v_minor; /**< Minor version number */ | 1205 | u16 v_minor; /*< Minor version number */ |
| 1206 | u16 v_patch; /**< Patch version number */ | 1206 | u16 v_patch; /*< Patch version number */ |
| 1207 | char *v_string; /**< Version as text string */ | 1207 | char *v_string; /*< Version as text string */ |
| 1208 | }; | 1208 | }; |
| 1209 | 1209 | ||
| 1210 | /** | 1210 | /* |
| 1211 | * \enum struct drx_version_list * \brief List element of NULL terminated, linked list for version information. | 1211 | * \enum struct drx_version_list * \brief List element of NULL terminated, linked list for version information. |
| 1212 | * | 1212 | * |
| 1213 | * Used by DRX_CTRL_VERSION. | 1213 | * Used by DRX_CTRL_VERSION. |
| 1214 | */ | 1214 | */ |
| 1215 | struct drx_version_list { | 1215 | struct drx_version_list { |
| 1216 | struct drx_version *version;/**< Version information */ | 1216 | struct drx_version *version;/*< Version information */ |
| 1217 | struct drx_version_list *next; | 1217 | struct drx_version_list *next; |
| 1218 | /**< Next list element */ | 1218 | /*< Next list element */ |
| 1219 | }; | 1219 | }; |
| 1220 | 1220 | ||
| 1221 | /*========================================*/ | 1221 | /*========================================*/ |
| 1222 | 1222 | ||
| 1223 | /** | 1223 | /* |
| 1224 | * \brief Parameters needed to confiugure a UIO. | 1224 | * \brief Parameters needed to confiugure a UIO. |
| 1225 | * | 1225 | * |
| 1226 | * Used by DRX_CTRL_UIO_CFG. | 1226 | * Used by DRX_CTRL_UIO_CFG. |
| 1227 | */ | 1227 | */ |
| 1228 | struct drxuio_cfg { | 1228 | struct drxuio_cfg { |
| 1229 | enum drx_uio uio; | 1229 | enum drx_uio uio; |
| 1230 | /**< UIO identifier */ | 1230 | /*< UIO identifier */ |
| 1231 | enum drxuio_mode mode; | 1231 | enum drxuio_mode mode; |
| 1232 | /**< UIO operational mode */ | 1232 | /*< UIO operational mode */ |
| 1233 | }; | 1233 | }; |
| 1234 | 1234 | ||
| 1235 | /*========================================*/ | 1235 | /*========================================*/ |
| 1236 | 1236 | ||
| 1237 | /** | 1237 | /* |
| 1238 | * \brief Parameters needed to read from or write to a UIO. | 1238 | * \brief Parameters needed to read from or write to a UIO. |
| 1239 | * | 1239 | * |
| 1240 | * Used by DRX_CTRL_UIO_READ and DRX_CTRL_UIO_WRITE. | 1240 | * Used by DRX_CTRL_UIO_READ and DRX_CTRL_UIO_WRITE. |
| 1241 | */ | 1241 | */ |
| 1242 | struct drxuio_data { | 1242 | struct drxuio_data { |
| 1243 | enum drx_uio uio; | 1243 | enum drx_uio uio; |
| 1244 | /**< UIO identifier */ | 1244 | /*< UIO identifier */ |
| 1245 | bool value; | 1245 | bool value; |
| 1246 | /**< UIO value (true=1, false=0) */ | 1246 | /*< UIO value (true=1, false=0) */ |
| 1247 | }; | 1247 | }; |
| 1248 | 1248 | ||
| 1249 | /*========================================*/ | 1249 | /*========================================*/ |
| 1250 | 1250 | ||
| 1251 | /** | 1251 | /* |
| 1252 | * \brief Parameters needed to configure OOB. | 1252 | * \brief Parameters needed to configure OOB. |
| 1253 | * | 1253 | * |
| 1254 | * Used by DRX_CTRL_SET_OOB. | 1254 | * Used by DRX_CTRL_SET_OOB. |
| 1255 | */ | 1255 | */ |
| 1256 | struct drxoob { | 1256 | struct drxoob { |
| 1257 | s32 frequency; /**< Frequency in kHz */ | 1257 | s32 frequency; /*< Frequency in kHz */ |
| 1258 | enum drxoob_downstream_standard standard; | 1258 | enum drxoob_downstream_standard standard; |
| 1259 | /**< OOB standard */ | 1259 | /*< OOB standard */ |
| 1260 | bool spectrum_inverted; /**< If true, then spectrum | 1260 | bool spectrum_inverted; /*< If true, then spectrum |
| 1261 | is inverted */ | 1261 | is inverted */ |
| 1262 | }; | 1262 | }; |
| 1263 | 1263 | ||
| 1264 | /*========================================*/ | 1264 | /*========================================*/ |
| 1265 | 1265 | ||
| 1266 | /** | 1266 | /* |
| 1267 | * \brief Metrics from OOB. | 1267 | * \brief Metrics from OOB. |
| 1268 | * | 1268 | * |
| 1269 | * Used by DRX_CTRL_GET_OOB. | 1269 | * Used by DRX_CTRL_GET_OOB. |
| 1270 | */ | 1270 | */ |
| 1271 | struct drxoob_status { | 1271 | struct drxoob_status { |
| 1272 | s32 frequency; /**< Frequency in Khz */ | 1272 | s32 frequency; /*< Frequency in Khz */ |
| 1273 | enum drx_lock_status lock; /**< Lock status */ | 1273 | enum drx_lock_status lock; /*< Lock status */ |
| 1274 | u32 mer; /**< MER */ | 1274 | u32 mer; /*< MER */ |
| 1275 | s32 symbol_rate_offset; /**< Symbolrate offset in ppm */ | 1275 | s32 symbol_rate_offset; /*< Symbolrate offset in ppm */ |
| 1276 | }; | 1276 | }; |
| 1277 | 1277 | ||
| 1278 | /*========================================*/ | 1278 | /*========================================*/ |
| 1279 | 1279 | ||
| 1280 | /** | 1280 | /* |
| 1281 | * \brief Device dependent configuration data. | 1281 | * \brief Device dependent configuration data. |
| 1282 | * | 1282 | * |
| 1283 | * Used by DRX_CTRL_SET_CFG and DRX_CTRL_GET_CFG. | 1283 | * Used by DRX_CTRL_SET_CFG and DRX_CTRL_GET_CFG. |
| @@ -1285,14 +1285,14 @@ struct drx_version_list { | |||
| 1285 | */ | 1285 | */ |
| 1286 | struct drx_cfg { | 1286 | struct drx_cfg { |
| 1287 | u32 cfg_type; | 1287 | u32 cfg_type; |
| 1288 | /**< Function identifier */ | 1288 | /*< Function identifier */ |
| 1289 | void *cfg_data; | 1289 | void *cfg_data; |
| 1290 | /**< Function data */ | 1290 | /*< Function data */ |
| 1291 | }; | 1291 | }; |
| 1292 | 1292 | ||
| 1293 | /*========================================*/ | 1293 | /*========================================*/ |
| 1294 | 1294 | ||
| 1295 | /** | 1295 | /* |
| 1296 | * /struct DRXMpegStartWidth_t | 1296 | * /struct DRXMpegStartWidth_t |
| 1297 | * MStart width [nr MCLK cycles] for serial MPEG output. | 1297 | * MStart width [nr MCLK cycles] for serial MPEG output. |
| 1298 | */ | 1298 | */ |
| @@ -1303,7 +1303,7 @@ struct drx_version_list { | |||
| 1303 | }; | 1303 | }; |
| 1304 | 1304 | ||
| 1305 | /* CTRL CFG MPEG output */ | 1305 | /* CTRL CFG MPEG output */ |
| 1306 | /** | 1306 | /* |
| 1307 | * \struct struct drx_cfg_mpeg_output * \brief Configuration parameters for MPEG output control. | 1307 | * \struct struct drx_cfg_mpeg_output * \brief Configuration parameters for MPEG output control. |
| 1308 | * | 1308 | * |
| 1309 | * Used by DRX_CFG_MPEG_OUTPUT, in combination with DRX_CTRL_SET_CFG and | 1309 | * Used by DRX_CFG_MPEG_OUTPUT, in combination with DRX_CTRL_SET_CFG and |
| @@ -1311,29 +1311,29 @@ struct drx_version_list { | |||
| 1311 | */ | 1311 | */ |
| 1312 | 1312 | ||
| 1313 | struct drx_cfg_mpeg_output { | 1313 | struct drx_cfg_mpeg_output { |
| 1314 | bool enable_mpeg_output;/**< If true, enable MPEG output */ | 1314 | bool enable_mpeg_output;/*< If true, enable MPEG output */ |
| 1315 | bool insert_rs_byte; /**< If true, insert RS byte */ | 1315 | bool insert_rs_byte; /*< If true, insert RS byte */ |
| 1316 | bool enable_parallel; /**< If true, parallel out otherwise | 1316 | bool enable_parallel; /*< If true, parallel out otherwise |
| 1317 | serial */ | 1317 | serial */ |
| 1318 | bool invert_data; /**< If true, invert DATA signals */ | 1318 | bool invert_data; /*< If true, invert DATA signals */ |
| 1319 | bool invert_err; /**< If true, invert ERR signal */ | 1319 | bool invert_err; /*< If true, invert ERR signal */ |
| 1320 | bool invert_str; /**< If true, invert STR signals */ | 1320 | bool invert_str; /*< If true, invert STR signals */ |
| 1321 | bool invert_val; /**< If true, invert VAL signals */ | 1321 | bool invert_val; /*< If true, invert VAL signals */ |
| 1322 | bool invert_clk; /**< If true, invert CLK signals */ | 1322 | bool invert_clk; /*< If true, invert CLK signals */ |
| 1323 | bool static_clk; /**< If true, static MPEG clockrate | 1323 | bool static_clk; /*< If true, static MPEG clockrate |
| 1324 | will be used, otherwise clockrate | 1324 | will be used, otherwise clockrate |
| 1325 | will adapt to the bitrate of the | 1325 | will adapt to the bitrate of the |
| 1326 | TS */ | 1326 | TS */ |
| 1327 | u32 bitrate; /**< Maximum bitrate in b/s in case | 1327 | u32 bitrate; /*< Maximum bitrate in b/s in case |
| 1328 | static clockrate is selected */ | 1328 | static clockrate is selected */ |
| 1329 | enum drxmpeg_str_width width_str; | 1329 | enum drxmpeg_str_width width_str; |
| 1330 | /**< MPEG start width */ | 1330 | /*< MPEG start width */ |
| 1331 | }; | 1331 | }; |
| 1332 | 1332 | ||
| 1333 | 1333 | ||
| 1334 | /*========================================*/ | 1334 | /*========================================*/ |
| 1335 | 1335 | ||
| 1336 | /** | 1336 | /* |
| 1337 | * \struct struct drxi2c_data * \brief Data for I2C via 2nd or 3rd or etc I2C port. | 1337 | * \struct struct drxi2c_data * \brief Data for I2C via 2nd or 3rd or etc I2C port. |
| 1338 | * | 1338 | * |
| 1339 | * Used by DRX_CTRL_I2C_READWRITE. | 1339 | * Used by DRX_CTRL_I2C_READWRITE. |
| @@ -1341,187 +1341,187 @@ struct drx_version_list { | |||
| 1341 | * | 1341 | * |
| 1342 | */ | 1342 | */ |
| 1343 | struct drxi2c_data { | 1343 | struct drxi2c_data { |
| 1344 | u16 port_nr; /**< I2C port number */ | 1344 | u16 port_nr; /*< I2C port number */ |
| 1345 | struct i2c_device_addr *w_dev_addr; | 1345 | struct i2c_device_addr *w_dev_addr; |
| 1346 | /**< Write device address */ | 1346 | /*< Write device address */ |
| 1347 | u16 w_count; /**< Size of write data in bytes */ | 1347 | u16 w_count; /*< Size of write data in bytes */ |
| 1348 | u8 *wData; /**< Pointer to write data */ | 1348 | u8 *wData; /*< Pointer to write data */ |
| 1349 | struct i2c_device_addr *r_dev_addr; | 1349 | struct i2c_device_addr *r_dev_addr; |
| 1350 | /**< Read device address */ | 1350 | /*< Read device address */ |
| 1351 | u16 r_count; /**< Size of data to read in bytes */ | 1351 | u16 r_count; /*< Size of data to read in bytes */ |
| 1352 | u8 *r_data; /**< Pointer to read buffer */ | 1352 | u8 *r_data; /*< Pointer to read buffer */ |
| 1353 | }; | 1353 | }; |
| 1354 | 1354 | ||
| 1355 | /*========================================*/ | 1355 | /*========================================*/ |
| 1356 | 1356 | ||
| 1357 | /** | 1357 | /* |
| 1358 | * \enum enum drx_aud_standard * \brief Audio standard identifier. | 1358 | * \enum enum drx_aud_standard * \brief Audio standard identifier. |
| 1359 | * | 1359 | * |
| 1360 | * Used by DRX_CTRL_SET_AUD. | 1360 | * Used by DRX_CTRL_SET_AUD. |
| 1361 | */ | 1361 | */ |
| 1362 | enum drx_aud_standard { | 1362 | enum drx_aud_standard { |
| 1363 | DRX_AUD_STANDARD_BTSC, /**< set BTSC standard (USA) */ | 1363 | DRX_AUD_STANDARD_BTSC, /*< set BTSC standard (USA) */ |
| 1364 | DRX_AUD_STANDARD_A2, /**< set A2-Korea FM Stereo */ | 1364 | DRX_AUD_STANDARD_A2, /*< set A2-Korea FM Stereo */ |
| 1365 | DRX_AUD_STANDARD_EIAJ, /**< set to Japanese FM Stereo */ | 1365 | DRX_AUD_STANDARD_EIAJ, /*< set to Japanese FM Stereo */ |
| 1366 | DRX_AUD_STANDARD_FM_STEREO,/**< set to FM-Stereo Radio */ | 1366 | DRX_AUD_STANDARD_FM_STEREO,/*< set to FM-Stereo Radio */ |
| 1367 | DRX_AUD_STANDARD_M_MONO, /**< for 4.5 MHz mono detected */ | 1367 | DRX_AUD_STANDARD_M_MONO, /*< for 4.5 MHz mono detected */ |
| 1368 | DRX_AUD_STANDARD_D_K_MONO, /**< for 6.5 MHz mono detected */ | 1368 | DRX_AUD_STANDARD_D_K_MONO, /*< for 6.5 MHz mono detected */ |
| 1369 | DRX_AUD_STANDARD_BG_FM, /**< set BG_FM standard */ | 1369 | DRX_AUD_STANDARD_BG_FM, /*< set BG_FM standard */ |
| 1370 | DRX_AUD_STANDARD_D_K1, /**< set D_K1 standard */ | 1370 | DRX_AUD_STANDARD_D_K1, /*< set D_K1 standard */ |
| 1371 | DRX_AUD_STANDARD_D_K2, /**< set D_K2 standard */ | 1371 | DRX_AUD_STANDARD_D_K2, /*< set D_K2 standard */ |
| 1372 | DRX_AUD_STANDARD_D_K3, /**< set D_K3 standard */ | 1372 | DRX_AUD_STANDARD_D_K3, /*< set D_K3 standard */ |
| 1373 | DRX_AUD_STANDARD_BG_NICAM_FM, | 1373 | DRX_AUD_STANDARD_BG_NICAM_FM, |
| 1374 | /**< set BG_NICAM_FM standard */ | 1374 | /*< set BG_NICAM_FM standard */ |
| 1375 | DRX_AUD_STANDARD_L_NICAM_AM, | 1375 | DRX_AUD_STANDARD_L_NICAM_AM, |
| 1376 | /**< set L_NICAM_AM standard */ | 1376 | /*< set L_NICAM_AM standard */ |
| 1377 | DRX_AUD_STANDARD_I_NICAM_FM, | 1377 | DRX_AUD_STANDARD_I_NICAM_FM, |
| 1378 | /**< set I_NICAM_FM standard */ | 1378 | /*< set I_NICAM_FM standard */ |
| 1379 | DRX_AUD_STANDARD_D_K_NICAM_FM, | 1379 | DRX_AUD_STANDARD_D_K_NICAM_FM, |
| 1380 | /**< set D_K_NICAM_FM standard */ | 1380 | /*< set D_K_NICAM_FM standard */ |
| 1381 | DRX_AUD_STANDARD_NOT_READY,/**< used to detect audio standard */ | 1381 | DRX_AUD_STANDARD_NOT_READY,/*< used to detect audio standard */ |
| 1382 | DRX_AUD_STANDARD_AUTO = DRX_AUTO, | 1382 | DRX_AUD_STANDARD_AUTO = DRX_AUTO, |
| 1383 | /**< Automatic Standard Detection */ | 1383 | /*< Automatic Standard Detection */ |
| 1384 | DRX_AUD_STANDARD_UNKNOWN = DRX_UNKNOWN | 1384 | DRX_AUD_STANDARD_UNKNOWN = DRX_UNKNOWN |
| 1385 | /**< used as auto and for readback */ | 1385 | /*< used as auto and for readback */ |
| 1386 | }; | 1386 | }; |
| 1387 | 1387 | ||
| 1388 | /* CTRL_AUD_GET_STATUS - struct drx_aud_status */ | 1388 | /* CTRL_AUD_GET_STATUS - struct drx_aud_status */ |
| 1389 | /** | 1389 | /* |
| 1390 | * \enum enum drx_aud_nicam_status * \brief Status of NICAM carrier. | 1390 | * \enum enum drx_aud_nicam_status * \brief Status of NICAM carrier. |
| 1391 | */ | 1391 | */ |
| 1392 | enum drx_aud_nicam_status { | 1392 | enum drx_aud_nicam_status { |
| 1393 | DRX_AUD_NICAM_DETECTED = 0, | 1393 | DRX_AUD_NICAM_DETECTED = 0, |
| 1394 | /**< NICAM carrier detected */ | 1394 | /*< NICAM carrier detected */ |
| 1395 | DRX_AUD_NICAM_NOT_DETECTED, | 1395 | DRX_AUD_NICAM_NOT_DETECTED, |
| 1396 | /**< NICAM carrier not detected */ | 1396 | /*< NICAM carrier not detected */ |
| 1397 | DRX_AUD_NICAM_BAD /**< NICAM carrier bad quality */ | 1397 | DRX_AUD_NICAM_BAD /*< NICAM carrier bad quality */ |
| 1398 | }; | 1398 | }; |
| 1399 | 1399 | ||
| 1400 | /** | 1400 | /* |
| 1401 | * \struct struct drx_aud_status * \brief Audio status characteristics. | 1401 | * \struct struct drx_aud_status * \brief Audio status characteristics. |
| 1402 | */ | 1402 | */ |
| 1403 | struct drx_aud_status { | 1403 | struct drx_aud_status { |
| 1404 | bool stereo; /**< stereo detection */ | 1404 | bool stereo; /*< stereo detection */ |
| 1405 | bool carrier_a; /**< carrier A detected */ | 1405 | bool carrier_a; /*< carrier A detected */ |
| 1406 | bool carrier_b; /**< carrier B detected */ | 1406 | bool carrier_b; /*< carrier B detected */ |
| 1407 | bool sap; /**< sap / bilingual detection */ | 1407 | bool sap; /*< sap / bilingual detection */ |
| 1408 | bool rds; /**< RDS data array present */ | 1408 | bool rds; /*< RDS data array present */ |
| 1409 | enum drx_aud_nicam_status nicam_status; | 1409 | enum drx_aud_nicam_status nicam_status; |
| 1410 | /**< status of NICAM carrier */ | 1410 | /*< status of NICAM carrier */ |
| 1411 | s8 fm_ident; /**< FM Identification value */ | 1411 | s8 fm_ident; /*< FM Identification value */ |
| 1412 | }; | 1412 | }; |
| 1413 | 1413 | ||
| 1414 | /* CTRL_AUD_READ_RDS - DRXRDSdata_t */ | 1414 | /* CTRL_AUD_READ_RDS - DRXRDSdata_t */ |
| 1415 | 1415 | ||
| 1416 | /** | 1416 | /* |
| 1417 | * \struct DRXRDSdata_t | 1417 | * \struct DRXRDSdata_t |
| 1418 | * \brief Raw RDS data array. | 1418 | * \brief Raw RDS data array. |
| 1419 | */ | 1419 | */ |
| 1420 | struct drx_cfg_aud_rds { | 1420 | struct drx_cfg_aud_rds { |
| 1421 | bool valid; /**< RDS data validation */ | 1421 | bool valid; /*< RDS data validation */ |
| 1422 | u16 data[18]; /**< data from one RDS data array */ | 1422 | u16 data[18]; /*< data from one RDS data array */ |
| 1423 | }; | 1423 | }; |
| 1424 | 1424 | ||
| 1425 | /* DRX_CFG_AUD_VOLUME - struct drx_cfg_aud_volume - set/get */ | 1425 | /* DRX_CFG_AUD_VOLUME - struct drx_cfg_aud_volume - set/get */ |
| 1426 | /** | 1426 | /* |
| 1427 | * \enum DRXAudAVCDecayTime_t | 1427 | * \enum DRXAudAVCDecayTime_t |
| 1428 | * \brief Automatic volume control configuration. | 1428 | * \brief Automatic volume control configuration. |
| 1429 | */ | 1429 | */ |
| 1430 | enum drx_aud_avc_mode { | 1430 | enum drx_aud_avc_mode { |
| 1431 | DRX_AUD_AVC_OFF, /**< Automatic volume control off */ | 1431 | DRX_AUD_AVC_OFF, /*< Automatic volume control off */ |
| 1432 | DRX_AUD_AVC_DECAYTIME_8S, /**< level volume in 8 seconds */ | 1432 | DRX_AUD_AVC_DECAYTIME_8S, /*< level volume in 8 seconds */ |
| 1433 | DRX_AUD_AVC_DECAYTIME_4S, /**< level volume in 4 seconds */ | 1433 | DRX_AUD_AVC_DECAYTIME_4S, /*< level volume in 4 seconds */ |
| 1434 | DRX_AUD_AVC_DECAYTIME_2S, /**< level volume in 2 seconds */ | 1434 | DRX_AUD_AVC_DECAYTIME_2S, /*< level volume in 2 seconds */ |
| 1435 | DRX_AUD_AVC_DECAYTIME_20MS/**< level volume in 20 millisec */ | 1435 | DRX_AUD_AVC_DECAYTIME_20MS/*< level volume in 20 millisec */ |
| 1436 | }; | 1436 | }; |
| 1437 | 1437 | ||
| 1438 | /** | 1438 | /* |
| 1439 | * /enum DRXAudMaxAVCGain_t | 1439 | * /enum DRXAudMaxAVCGain_t |
| 1440 | * /brief Automatic volume control max gain in audio baseband. | 1440 | * /brief Automatic volume control max gain in audio baseband. |
| 1441 | */ | 1441 | */ |
| 1442 | enum drx_aud_avc_max_gain { | 1442 | enum drx_aud_avc_max_gain { |
| 1443 | DRX_AUD_AVC_MAX_GAIN_0DB, /**< maximum AVC gain 0 dB */ | 1443 | DRX_AUD_AVC_MAX_GAIN_0DB, /*< maximum AVC gain 0 dB */ |
| 1444 | DRX_AUD_AVC_MAX_GAIN_6DB, /**< maximum AVC gain 6 dB */ | 1444 | DRX_AUD_AVC_MAX_GAIN_6DB, /*< maximum AVC gain 6 dB */ |
| 1445 | DRX_AUD_AVC_MAX_GAIN_12DB /**< maximum AVC gain 12 dB */ | 1445 | DRX_AUD_AVC_MAX_GAIN_12DB /*< maximum AVC gain 12 dB */ |
| 1446 | }; | 1446 | }; |
| 1447 | 1447 | ||
| 1448 | /** | 1448 | /* |
| 1449 | * /enum DRXAudMaxAVCAtten_t | 1449 | * /enum DRXAudMaxAVCAtten_t |
| 1450 | * /brief Automatic volume control max attenuation in audio baseband. | 1450 | * /brief Automatic volume control max attenuation in audio baseband. |
| 1451 | */ | 1451 | */ |
| 1452 | enum drx_aud_avc_max_atten { | 1452 | enum drx_aud_avc_max_atten { |
| 1453 | DRX_AUD_AVC_MAX_ATTEN_12DB, | 1453 | DRX_AUD_AVC_MAX_ATTEN_12DB, |
| 1454 | /**< maximum AVC attenuation 12 dB */ | 1454 | /*< maximum AVC attenuation 12 dB */ |
| 1455 | DRX_AUD_AVC_MAX_ATTEN_18DB, | 1455 | DRX_AUD_AVC_MAX_ATTEN_18DB, |
| 1456 | /**< maximum AVC attenuation 18 dB */ | 1456 | /*< maximum AVC attenuation 18 dB */ |
| 1457 | DRX_AUD_AVC_MAX_ATTEN_24DB/**< maximum AVC attenuation 24 dB */ | 1457 | DRX_AUD_AVC_MAX_ATTEN_24DB/*< maximum AVC attenuation 24 dB */ |
| 1458 | }; | 1458 | }; |
| 1459 | /** | 1459 | /* |
| 1460 | * \struct struct drx_cfg_aud_volume * \brief Audio volume configuration. | 1460 | * \struct struct drx_cfg_aud_volume * \brief Audio volume configuration. |
| 1461 | */ | 1461 | */ |
| 1462 | struct drx_cfg_aud_volume { | 1462 | struct drx_cfg_aud_volume { |
| 1463 | bool mute; /**< mute overrides volume setting */ | 1463 | bool mute; /*< mute overrides volume setting */ |
| 1464 | s16 volume; /**< volume, range -114 to 12 dB */ | 1464 | s16 volume; /*< volume, range -114 to 12 dB */ |
| 1465 | enum drx_aud_avc_mode avc_mode; /**< AVC auto volume control mode */ | 1465 | enum drx_aud_avc_mode avc_mode; /*< AVC auto volume control mode */ |
| 1466 | u16 avc_ref_level; /**< AVC reference level */ | 1466 | u16 avc_ref_level; /*< AVC reference level */ |
| 1467 | enum drx_aud_avc_max_gain avc_max_gain; | 1467 | enum drx_aud_avc_max_gain avc_max_gain; |
| 1468 | /**< AVC max gain selection */ | 1468 | /*< AVC max gain selection */ |
| 1469 | enum drx_aud_avc_max_atten avc_max_atten; | 1469 | enum drx_aud_avc_max_atten avc_max_atten; |
| 1470 | /**< AVC max attenuation selection */ | 1470 | /*< AVC max attenuation selection */ |
| 1471 | s16 strength_left; /**< quasi-peak, left speaker */ | 1471 | s16 strength_left; /*< quasi-peak, left speaker */ |
| 1472 | s16 strength_right; /**< quasi-peak, right speaker */ | 1472 | s16 strength_right; /*< quasi-peak, right speaker */ |
| 1473 | }; | 1473 | }; |
| 1474 | 1474 | ||
| 1475 | /* DRX_CFG_I2S_OUTPUT - struct drx_cfg_i2s_output - set/get */ | 1475 | /* DRX_CFG_I2S_OUTPUT - struct drx_cfg_i2s_output - set/get */ |
| 1476 | /** | 1476 | /* |
| 1477 | * \enum enum drxi2s_mode * \brief I2S output mode. | 1477 | * \enum enum drxi2s_mode * \brief I2S output mode. |
| 1478 | */ | 1478 | */ |
| 1479 | enum drxi2s_mode { | 1479 | enum drxi2s_mode { |
| 1480 | DRX_I2S_MODE_MASTER, /**< I2S is in master mode */ | 1480 | DRX_I2S_MODE_MASTER, /*< I2S is in master mode */ |
| 1481 | DRX_I2S_MODE_SLAVE /**< I2S is in slave mode */ | 1481 | DRX_I2S_MODE_SLAVE /*< I2S is in slave mode */ |
| 1482 | }; | 1482 | }; |
| 1483 | 1483 | ||
| 1484 | /** | 1484 | /* |
| 1485 | * \enum enum drxi2s_word_length * \brief Width of I2S data. | 1485 | * \enum enum drxi2s_word_length * \brief Width of I2S data. |
| 1486 | */ | 1486 | */ |
| 1487 | enum drxi2s_word_length { | 1487 | enum drxi2s_word_length { |
| 1488 | DRX_I2S_WORDLENGTH_32 = 0,/**< I2S data is 32 bit wide */ | 1488 | DRX_I2S_WORDLENGTH_32 = 0,/*< I2S data is 32 bit wide */ |
| 1489 | DRX_I2S_WORDLENGTH_16 = 1 /**< I2S data is 16 bit wide */ | 1489 | DRX_I2S_WORDLENGTH_16 = 1 /*< I2S data is 16 bit wide */ |
| 1490 | }; | 1490 | }; |
| 1491 | 1491 | ||
| 1492 | /** | 1492 | /* |
| 1493 | * \enum enum drxi2s_format * \brief Data wordstrobe alignment for I2S. | 1493 | * \enum enum drxi2s_format * \brief Data wordstrobe alignment for I2S. |
| 1494 | */ | 1494 | */ |
| 1495 | enum drxi2s_format { | 1495 | enum drxi2s_format { |
| 1496 | DRX_I2S_FORMAT_WS_WITH_DATA, | 1496 | DRX_I2S_FORMAT_WS_WITH_DATA, |
| 1497 | /**< I2S data and wordstrobe are aligned */ | 1497 | /*< I2S data and wordstrobe are aligned */ |
| 1498 | DRX_I2S_FORMAT_WS_ADVANCED | 1498 | DRX_I2S_FORMAT_WS_ADVANCED |
| 1499 | /**< I2S data one cycle after wordstrobe */ | 1499 | /*< I2S data one cycle after wordstrobe */ |
| 1500 | }; | 1500 | }; |
| 1501 | 1501 | ||
| 1502 | /** | 1502 | /* |
| 1503 | * \enum enum drxi2s_polarity * \brief Polarity of I2S data. | 1503 | * \enum enum drxi2s_polarity * \brief Polarity of I2S data. |
| 1504 | */ | 1504 | */ |
| 1505 | enum drxi2s_polarity { | 1505 | enum drxi2s_polarity { |
| 1506 | DRX_I2S_POLARITY_RIGHT,/**< wordstrobe - right high, left low */ | 1506 | DRX_I2S_POLARITY_RIGHT,/*< wordstrobe - right high, left low */ |
| 1507 | DRX_I2S_POLARITY_LEFT /**< wordstrobe - right low, left high */ | 1507 | DRX_I2S_POLARITY_LEFT /*< wordstrobe - right low, left high */ |
| 1508 | }; | 1508 | }; |
| 1509 | 1509 | ||
| 1510 | /** | 1510 | /* |
| 1511 | * \struct struct drx_cfg_i2s_output * \brief I2S output configuration. | 1511 | * \struct struct drx_cfg_i2s_output * \brief I2S output configuration. |
| 1512 | */ | 1512 | */ |
| 1513 | struct drx_cfg_i2s_output { | 1513 | struct drx_cfg_i2s_output { |
| 1514 | bool output_enable; /**< I2S output enable */ | 1514 | bool output_enable; /*< I2S output enable */ |
| 1515 | u32 frequency; /**< range from 8000-48000 Hz */ | 1515 | u32 frequency; /*< range from 8000-48000 Hz */ |
| 1516 | enum drxi2s_mode mode; /**< I2S mode, master or slave */ | 1516 | enum drxi2s_mode mode; /*< I2S mode, master or slave */ |
| 1517 | enum drxi2s_word_length word_length; | 1517 | enum drxi2s_word_length word_length; |
| 1518 | /**< I2S wordlength, 16 or 32 bits */ | 1518 | /*< I2S wordlength, 16 or 32 bits */ |
| 1519 | enum drxi2s_polarity polarity;/**< I2S wordstrobe polarity */ | 1519 | enum drxi2s_polarity polarity;/*< I2S wordstrobe polarity */ |
| 1520 | enum drxi2s_format format; /**< I2S wordstrobe delay to data */ | 1520 | enum drxi2s_format format; /*< I2S wordstrobe delay to data */ |
| 1521 | }; | 1521 | }; |
| 1522 | 1522 | ||
| 1523 | /* ------------------------------expert interface-----------------------------*/ | 1523 | /* ------------------------------expert interface-----------------------------*/ |
| 1524 | /** | 1524 | /* |
| 1525 | * /enum enum drx_aud_fm_deemphasis * setting for FM-Deemphasis in audio demodulator. | 1525 | * /enum enum drx_aud_fm_deemphasis * setting for FM-Deemphasis in audio demodulator. |
| 1526 | * | 1526 | * |
| 1527 | */ | 1527 | */ |
| @@ -1531,7 +1531,7 @@ struct drx_version_list { | |||
| 1531 | DRX_AUD_FM_DEEMPH_OFF | 1531 | DRX_AUD_FM_DEEMPH_OFF |
| 1532 | }; | 1532 | }; |
| 1533 | 1533 | ||
| 1534 | /** | 1534 | /* |
| 1535 | * /enum DRXAudDeviation_t | 1535 | * /enum DRXAudDeviation_t |
| 1536 | * setting for deviation mode in audio demodulator. | 1536 | * setting for deviation mode in audio demodulator. |
| 1537 | * | 1537 | * |
| @@ -1541,7 +1541,7 @@ struct drx_version_list { | |||
| 1541 | DRX_AUD_DEVIATION_HIGH | 1541 | DRX_AUD_DEVIATION_HIGH |
| 1542 | }; | 1542 | }; |
| 1543 | 1543 | ||
| 1544 | /** | 1544 | /* |
| 1545 | * /enum enum drx_no_carrier_option * setting for carrier, mute/noise. | 1545 | * /enum enum drx_no_carrier_option * setting for carrier, mute/noise. |
| 1546 | * | 1546 | * |
| 1547 | */ | 1547 | */ |
| @@ -1550,7 +1550,7 @@ struct drx_version_list { | |||
| 1550 | DRX_NO_CARRIER_NOISE | 1550 | DRX_NO_CARRIER_NOISE |
| 1551 | }; | 1551 | }; |
| 1552 | 1552 | ||
| 1553 | /** | 1553 | /* |
| 1554 | * \enum DRXAudAutoSound_t | 1554 | * \enum DRXAudAutoSound_t |
| 1555 | * \brief Automatic Sound | 1555 | * \brief Automatic Sound |
| 1556 | */ | 1556 | */ |
| @@ -1560,7 +1560,7 @@ struct drx_version_list { | |||
| 1560 | DRX_AUD_AUTO_SOUND_SELECT_ON_CHANGE_OFF | 1560 | DRX_AUD_AUTO_SOUND_SELECT_ON_CHANGE_OFF |
| 1561 | }; | 1561 | }; |
| 1562 | 1562 | ||
| 1563 | /** | 1563 | /* |
| 1564 | * \enum DRXAudASSThres_t | 1564 | * \enum DRXAudASSThres_t |
| 1565 | * \brief Automatic Sound Select Thresholds | 1565 | * \brief Automatic Sound Select Thresholds |
| 1566 | */ | 1566 | */ |
| @@ -1570,7 +1570,7 @@ struct drx_version_list { | |||
| 1570 | u16 nicam; /* Nicam Threshold for ASS configuration */ | 1570 | u16 nicam; /* Nicam Threshold for ASS configuration */ |
| 1571 | }; | 1571 | }; |
| 1572 | 1572 | ||
| 1573 | /** | 1573 | /* |
| 1574 | * \struct struct drx_aud_carrier * \brief Carrier detection related parameters | 1574 | * \struct struct drx_aud_carrier * \brief Carrier detection related parameters |
| 1575 | */ | 1575 | */ |
| 1576 | struct drx_aud_carrier { | 1576 | struct drx_aud_carrier { |
| @@ -1580,7 +1580,7 @@ struct drx_version_list { | |||
| 1580 | s32 dco; /* frequency adjustment (A) */ | 1580 | s32 dco; /* frequency adjustment (A) */ |
| 1581 | }; | 1581 | }; |
| 1582 | 1582 | ||
| 1583 | /** | 1583 | /* |
| 1584 | * \struct struct drx_cfg_aud_carriers * \brief combining carrier A & B to one struct | 1584 | * \struct struct drx_cfg_aud_carriers * \brief combining carrier A & B to one struct |
| 1585 | */ | 1585 | */ |
| 1586 | struct drx_cfg_aud_carriers { | 1586 | struct drx_cfg_aud_carriers { |
| @@ -1588,7 +1588,7 @@ struct drx_version_list { | |||
| 1588 | struct drx_aud_carrier b; | 1588 | struct drx_aud_carrier b; |
| 1589 | }; | 1589 | }; |
| 1590 | 1590 | ||
| 1591 | /** | 1591 | /* |
| 1592 | * /enum enum drx_aud_i2s_src * Selection of audio source | 1592 | * /enum enum drx_aud_i2s_src * Selection of audio source |
| 1593 | */ | 1593 | */ |
| 1594 | enum drx_aud_i2s_src { | 1594 | enum drx_aud_i2s_src { |
| @@ -1597,19 +1597,19 @@ struct drx_version_list { | |||
| 1597 | DRX_AUD_SRC_STEREO_OR_A, | 1597 | DRX_AUD_SRC_STEREO_OR_A, |
| 1598 | DRX_AUD_SRC_STEREO_OR_B}; | 1598 | DRX_AUD_SRC_STEREO_OR_B}; |
| 1599 | 1599 | ||
| 1600 | /** | 1600 | /* |
| 1601 | * \enum enum drx_aud_i2s_matrix * \brief Used for selecting I2S output. | 1601 | * \enum enum drx_aud_i2s_matrix * \brief Used for selecting I2S output. |
| 1602 | */ | 1602 | */ |
| 1603 | enum drx_aud_i2s_matrix { | 1603 | enum drx_aud_i2s_matrix { |
| 1604 | DRX_AUD_I2S_MATRIX_A_MONO, | 1604 | DRX_AUD_I2S_MATRIX_A_MONO, |
| 1605 | /**< A sound only, stereo or mono */ | 1605 | /*< A sound only, stereo or mono */ |
| 1606 | DRX_AUD_I2S_MATRIX_B_MONO, | 1606 | DRX_AUD_I2S_MATRIX_B_MONO, |
| 1607 | /**< B sound only, stereo or mono */ | 1607 | /*< B sound only, stereo or mono */ |
| 1608 | DRX_AUD_I2S_MATRIX_STEREO, | 1608 | DRX_AUD_I2S_MATRIX_STEREO, |
| 1609 | /**< A+B sound, transparant */ | 1609 | /*< A+B sound, transparant */ |
| 1610 | DRX_AUD_I2S_MATRIX_MONO /**< A+B mixed to mono sum, (L+R)/2 */}; | 1610 | DRX_AUD_I2S_MATRIX_MONO /*< A+B mixed to mono sum, (L+R)/2 */}; |
| 1611 | 1611 | ||
| 1612 | /** | 1612 | /* |
| 1613 | * /enum enum drx_aud_fm_matrix * setting for FM-Matrix in audio demodulator. | 1613 | * /enum enum drx_aud_fm_matrix * setting for FM-Matrix in audio demodulator. |
| 1614 | * | 1614 | * |
| 1615 | */ | 1615 | */ |
| @@ -1620,7 +1620,7 @@ struct drx_version_list { | |||
| 1620 | DRX_AUD_FM_MATRIX_SOUND_A, | 1620 | DRX_AUD_FM_MATRIX_SOUND_A, |
| 1621 | DRX_AUD_FM_MATRIX_SOUND_B}; | 1621 | DRX_AUD_FM_MATRIX_SOUND_B}; |
| 1622 | 1622 | ||
| 1623 | /** | 1623 | /* |
| 1624 | * \struct DRXAudMatrices_t | 1624 | * \struct DRXAudMatrices_t |
| 1625 | * \brief Mixer settings | 1625 | * \brief Mixer settings |
| 1626 | */ | 1626 | */ |
| @@ -1630,22 +1630,22 @@ struct drx_cfg_aud_mixer { | |||
| 1630 | enum drx_aud_fm_matrix matrix_fm; | 1630 | enum drx_aud_fm_matrix matrix_fm; |
| 1631 | }; | 1631 | }; |
| 1632 | 1632 | ||
| 1633 | /** | 1633 | /* |
| 1634 | * \enum DRXI2SVidSync_t | 1634 | * \enum DRXI2SVidSync_t |
| 1635 | * \brief Audio/video synchronization, interacts with I2S mode. | 1635 | * \brief Audio/video synchronization, interacts with I2S mode. |
| 1636 | * AUTO_1 and AUTO_2 are for automatic video standard detection with preference | 1636 | * AUTO_1 and AUTO_2 are for automatic video standard detection with preference |
| 1637 | * for NTSC or Monochrome, because the frequencies are too close (59.94 & 60 Hz) | 1637 | * for NTSC or Monochrome, because the frequencies are too close (59.94 & 60 Hz) |
| 1638 | */ | 1638 | */ |
| 1639 | enum drx_cfg_aud_av_sync { | 1639 | enum drx_cfg_aud_av_sync { |
| 1640 | DRX_AUD_AVSYNC_OFF,/**< audio/video synchronization is off */ | 1640 | DRX_AUD_AVSYNC_OFF,/*< audio/video synchronization is off */ |
| 1641 | DRX_AUD_AVSYNC_NTSC, | 1641 | DRX_AUD_AVSYNC_NTSC, |
| 1642 | /**< it is an NTSC system */ | 1642 | /*< it is an NTSC system */ |
| 1643 | DRX_AUD_AVSYNC_MONOCHROME, | 1643 | DRX_AUD_AVSYNC_MONOCHROME, |
| 1644 | /**< it is a MONOCHROME system */ | 1644 | /*< it is a MONOCHROME system */ |
| 1645 | DRX_AUD_AVSYNC_PAL_SECAM | 1645 | DRX_AUD_AVSYNC_PAL_SECAM |
| 1646 | /**< it is a PAL/SECAM system */}; | 1646 | /*< it is a PAL/SECAM system */}; |
| 1647 | 1647 | ||
| 1648 | /** | 1648 | /* |
| 1649 | * \struct struct drx_cfg_aud_prescale * \brief Prescalers | 1649 | * \struct struct drx_cfg_aud_prescale * \brief Prescalers |
| 1650 | */ | 1650 | */ |
| 1651 | struct drx_cfg_aud_prescale { | 1651 | struct drx_cfg_aud_prescale { |
| @@ -1653,7 +1653,7 @@ struct drx_cfg_aud_prescale { | |||
| 1653 | s16 nicam_gain; | 1653 | s16 nicam_gain; |
| 1654 | }; | 1654 | }; |
| 1655 | 1655 | ||
| 1656 | /** | 1656 | /* |
| 1657 | * \struct struct drx_aud_beep * \brief Beep | 1657 | * \struct struct drx_aud_beep * \brief Beep |
| 1658 | */ | 1658 | */ |
| 1659 | struct drx_aud_beep { | 1659 | struct drx_aud_beep { |
| @@ -1662,14 +1662,14 @@ struct drx_aud_beep { | |||
| 1662 | bool mute; | 1662 | bool mute; |
| 1663 | }; | 1663 | }; |
| 1664 | 1664 | ||
| 1665 | /** | 1665 | /* |
| 1666 | * \enum enum drx_aud_btsc_detect * \brief BTSC detetcion mode | 1666 | * \enum enum drx_aud_btsc_detect * \brief BTSC detetcion mode |
| 1667 | */ | 1667 | */ |
| 1668 | enum drx_aud_btsc_detect { | 1668 | enum drx_aud_btsc_detect { |
| 1669 | DRX_BTSC_STEREO, | 1669 | DRX_BTSC_STEREO, |
| 1670 | DRX_BTSC_MONO_AND_SAP}; | 1670 | DRX_BTSC_MONO_AND_SAP}; |
| 1671 | 1671 | ||
| 1672 | /** | 1672 | /* |
| 1673 | * \struct struct drx_aud_data * \brief Audio data structure | 1673 | * \struct struct drx_aud_data * \brief Audio data structure |
| 1674 | */ | 1674 | */ |
| 1675 | struct drx_aud_data { | 1675 | struct drx_aud_data { |
| @@ -1692,7 +1692,7 @@ struct drx_aud_data { | |||
| 1692 | bool rds_data_present; | 1692 | bool rds_data_present; |
| 1693 | }; | 1693 | }; |
| 1694 | 1694 | ||
| 1695 | /** | 1695 | /* |
| 1696 | * \enum enum drx_qam_lock_range * \brief QAM lock range mode | 1696 | * \enum enum drx_qam_lock_range * \brief QAM lock range mode |
| 1697 | */ | 1697 | */ |
| 1698 | enum drx_qam_lock_range { | 1698 | enum drx_qam_lock_range { |
| @@ -1782,7 +1782,7 @@ struct drx_aud_data { | |||
| 1782 | u32 wdata, /* data to write */ | 1782 | u32 wdata, /* data to write */ |
| 1783 | u32 *rdata); /* data to read */ | 1783 | u32 *rdata); /* data to read */ |
| 1784 | 1784 | ||
| 1785 | /** | 1785 | /* |
| 1786 | * \struct struct drx_access_func * \brief Interface to an access protocol. | 1786 | * \struct struct drx_access_func * \brief Interface to an access protocol. |
| 1787 | */ | 1787 | */ |
| 1788 | struct drx_access_func { | 1788 | struct drx_access_func { |
| @@ -1811,85 +1811,85 @@ struct drx_reg_dump { | |||
| 1811 | /*============================================================================*/ | 1811 | /*============================================================================*/ |
| 1812 | /*============================================================================*/ | 1812 | /*============================================================================*/ |
| 1813 | 1813 | ||
| 1814 | /** | 1814 | /* |
| 1815 | * \struct struct drx_common_attr * \brief Set of common attributes, shared by all DRX devices. | 1815 | * \struct struct drx_common_attr * \brief Set of common attributes, shared by all DRX devices. |
| 1816 | */ | 1816 | */ |
| 1817 | struct drx_common_attr { | 1817 | struct drx_common_attr { |
| 1818 | /* Microcode (firmware) attributes */ | 1818 | /* Microcode (firmware) attributes */ |
| 1819 | char *microcode_file; /**< microcode filename */ | 1819 | char *microcode_file; /*< microcode filename */ |
| 1820 | bool verify_microcode; | 1820 | bool verify_microcode; |
| 1821 | /**< Use microcode verify or not. */ | 1821 | /*< Use microcode verify or not. */ |
| 1822 | struct drx_mc_version_rec mcversion; | 1822 | struct drx_mc_version_rec mcversion; |
| 1823 | /**< Version record of microcode from file */ | 1823 | /*< Version record of microcode from file */ |
| 1824 | 1824 | ||
| 1825 | /* Clocks and tuner attributes */ | 1825 | /* Clocks and tuner attributes */ |
| 1826 | s32 intermediate_freq; | 1826 | s32 intermediate_freq; |
| 1827 | /**< IF,if tuner instance not used. (kHz)*/ | 1827 | /*< IF,if tuner instance not used. (kHz)*/ |
| 1828 | s32 sys_clock_freq; | 1828 | s32 sys_clock_freq; |
| 1829 | /**< Systemclock frequency. (kHz) */ | 1829 | /*< Systemclock frequency. (kHz) */ |
| 1830 | s32 osc_clock_freq; | 1830 | s32 osc_clock_freq; |
| 1831 | /**< Oscillator clock frequency. (kHz) */ | 1831 | /*< Oscillator clock frequency. (kHz) */ |
| 1832 | s16 osc_clock_deviation; | 1832 | s16 osc_clock_deviation; |
| 1833 | /**< Oscillator clock deviation. (ppm) */ | 1833 | /*< Oscillator clock deviation. (ppm) */ |
| 1834 | bool mirror_freq_spect; | 1834 | bool mirror_freq_spect; |
| 1835 | /**< Mirror IF frequency spectrum or not.*/ | 1835 | /*< Mirror IF frequency spectrum or not.*/ |
| 1836 | 1836 | ||
| 1837 | /* Initial MPEG output attributes */ | 1837 | /* Initial MPEG output attributes */ |
| 1838 | struct drx_cfg_mpeg_output mpeg_cfg; | 1838 | struct drx_cfg_mpeg_output mpeg_cfg; |
| 1839 | /**< MPEG configuration */ | 1839 | /*< MPEG configuration */ |
| 1840 | 1840 | ||
| 1841 | bool is_opened; /**< if true instance is already opened. */ | 1841 | bool is_opened; /*< if true instance is already opened. */ |
| 1842 | 1842 | ||
| 1843 | /* Channel scan */ | 1843 | /* Channel scan */ |
| 1844 | struct drx_scan_param *scan_param; | 1844 | struct drx_scan_param *scan_param; |
| 1845 | /**< scan parameters */ | 1845 | /*< scan parameters */ |
| 1846 | u16 scan_freq_plan_index; | 1846 | u16 scan_freq_plan_index; |
| 1847 | /**< next index in freq plan */ | 1847 | /*< next index in freq plan */ |
| 1848 | s32 scan_next_frequency; | 1848 | s32 scan_next_frequency; |
| 1849 | /**< next freq to scan */ | 1849 | /*< next freq to scan */ |
| 1850 | bool scan_ready; /**< scan ready flag */ | 1850 | bool scan_ready; /*< scan ready flag */ |
| 1851 | u32 scan_max_channels;/**< number of channels in freqplan */ | 1851 | u32 scan_max_channels;/*< number of channels in freqplan */ |
| 1852 | u32 scan_channels_scanned; | 1852 | u32 scan_channels_scanned; |
| 1853 | /**< number of channels scanned */ | 1853 | /*< number of channels scanned */ |
| 1854 | /* Channel scan - inner loop: demod related */ | 1854 | /* Channel scan - inner loop: demod related */ |
| 1855 | drx_scan_func_t scan_function; | 1855 | drx_scan_func_t scan_function; |
| 1856 | /**< function to check channel */ | 1856 | /*< function to check channel */ |
| 1857 | /* Channel scan - inner loop: SYSObj related */ | 1857 | /* Channel scan - inner loop: SYSObj related */ |
| 1858 | void *scan_context; /**< Context Pointer of SYSObj */ | 1858 | void *scan_context; /*< Context Pointer of SYSObj */ |
| 1859 | /* Channel scan - parameters for default DTV scan function in core driver */ | 1859 | /* Channel scan - parameters for default DTV scan function in core driver */ |
| 1860 | u16 scan_demod_lock_timeout; | 1860 | u16 scan_demod_lock_timeout; |
| 1861 | /**< millisecs to wait for lock */ | 1861 | /*< millisecs to wait for lock */ |
| 1862 | enum drx_lock_status scan_desired_lock; | 1862 | enum drx_lock_status scan_desired_lock; |
| 1863 | /**< lock requirement for channel found */ | 1863 | /*< lock requirement for channel found */ |
| 1864 | /* scan_active can be used by SetChannel to decide how to program the tuner, | 1864 | /* scan_active can be used by SetChannel to decide how to program the tuner, |
| 1865 | fast or slow (but stable). Usually fast during scan. */ | 1865 | fast or slow (but stable). Usually fast during scan. */ |
| 1866 | bool scan_active; /**< true when scan routines are active */ | 1866 | bool scan_active; /*< true when scan routines are active */ |
| 1867 | 1867 | ||
| 1868 | /* Power management */ | 1868 | /* Power management */ |
| 1869 | enum drx_power_mode current_power_mode; | 1869 | enum drx_power_mode current_power_mode; |
| 1870 | /**< current power management mode */ | 1870 | /*< current power management mode */ |
| 1871 | 1871 | ||
| 1872 | /* Tuner */ | 1872 | /* Tuner */ |
| 1873 | u8 tuner_port_nr; /**< nr of I2C port to wich tuner is */ | 1873 | u8 tuner_port_nr; /*< nr of I2C port to wich tuner is */ |
| 1874 | s32 tuner_min_freq_rf; | 1874 | s32 tuner_min_freq_rf; |
| 1875 | /**< minimum RF input frequency, in kHz */ | 1875 | /*< minimum RF input frequency, in kHz */ |
| 1876 | s32 tuner_max_freq_rf; | 1876 | s32 tuner_max_freq_rf; |
| 1877 | /**< maximum RF input frequency, in kHz */ | 1877 | /*< maximum RF input frequency, in kHz */ |
| 1878 | bool tuner_rf_agc_pol; /**< if true invert RF AGC polarity */ | 1878 | bool tuner_rf_agc_pol; /*< if true invert RF AGC polarity */ |
| 1879 | bool tuner_if_agc_pol; /**< if true invert IF AGC polarity */ | 1879 | bool tuner_if_agc_pol; /*< if true invert IF AGC polarity */ |
| 1880 | bool tuner_slow_mode; /**< if true invert IF AGC polarity */ | 1880 | bool tuner_slow_mode; /*< if true invert IF AGC polarity */ |
| 1881 | 1881 | ||
| 1882 | struct drx_channel current_channel; | 1882 | struct drx_channel current_channel; |
| 1883 | /**< current channel parameters */ | 1883 | /*< current channel parameters */ |
| 1884 | enum drx_standard current_standard; | 1884 | enum drx_standard current_standard; |
| 1885 | /**< current standard selection */ | 1885 | /*< current standard selection */ |
| 1886 | enum drx_standard prev_standard; | 1886 | enum drx_standard prev_standard; |
| 1887 | /**< previous standard selection */ | 1887 | /*< previous standard selection */ |
| 1888 | enum drx_standard di_cache_standard; | 1888 | enum drx_standard di_cache_standard; |
| 1889 | /**< standard in DI cache if available */ | 1889 | /*< standard in DI cache if available */ |
| 1890 | bool use_bootloader; /**< use bootloader in open */ | 1890 | bool use_bootloader; /*< use bootloader in open */ |
| 1891 | u32 capabilities; /**< capabilities flags */ | 1891 | u32 capabilities; /*< capabilities flags */ |
| 1892 | u32 product_id; /**< product ID inc. metal fix number */}; | 1892 | u32 product_id; /*< product ID inc. metal fix number */}; |
| 1893 | 1893 | ||
| 1894 | /* | 1894 | /* |
| 1895 | * Generic functions for DRX devices. | 1895 | * Generic functions for DRX devices. |
| @@ -1897,16 +1897,16 @@ struct drx_reg_dump { | |||
| 1897 | 1897 | ||
| 1898 | struct drx_demod_instance; | 1898 | struct drx_demod_instance; |
| 1899 | 1899 | ||
| 1900 | /** | 1900 | /* |
| 1901 | * \struct struct drx_demod_instance * \brief Top structure of demodulator instance. | 1901 | * \struct struct drx_demod_instance * \brief Top structure of demodulator instance. |
| 1902 | */ | 1902 | */ |
| 1903 | struct drx_demod_instance { | 1903 | struct drx_demod_instance { |
| 1904 | /**< data access protocol functions */ | 1904 | /*< data access protocol functions */ |
| 1905 | struct i2c_device_addr *my_i2c_dev_addr; | 1905 | struct i2c_device_addr *my_i2c_dev_addr; |
| 1906 | /**< i2c address and device identifier */ | 1906 | /*< i2c address and device identifier */ |
| 1907 | struct drx_common_attr *my_common_attr; | 1907 | struct drx_common_attr *my_common_attr; |
| 1908 | /**< common DRX attributes */ | 1908 | /*< common DRX attributes */ |
| 1909 | void *my_ext_attr; /**< device specific attributes */ | 1909 | void *my_ext_attr; /*< device specific attributes */ |
| 1910 | /* generic demodulator data */ | 1910 | /* generic demodulator data */ |
| 1911 | 1911 | ||
| 1912 | struct i2c_adapter *i2c; | 1912 | struct i2c_adapter *i2c; |
| @@ -2195,7 +2195,7 @@ Conversion from enum values to human readable form. | |||
| 2195 | Access macros | 2195 | Access macros |
| 2196 | -------------------------------------------------------------------------*/ | 2196 | -------------------------------------------------------------------------*/ |
| 2197 | 2197 | ||
| 2198 | /** | 2198 | /* |
| 2199 | * \brief Create a compilable reference to the microcode attribute | 2199 | * \brief Create a compilable reference to the microcode attribute |
| 2200 | * \param d pointer to demod instance | 2200 | * \param d pointer to demod instance |
| 2201 | * | 2201 | * |
| @@ -2229,7 +2229,7 @@ Access macros | |||
| 2229 | #define DRX_ATTR_I2CDEVID(d) ((d)->my_i2c_dev_addr->i2c_dev_id) | 2229 | #define DRX_ATTR_I2CDEVID(d) ((d)->my_i2c_dev_addr->i2c_dev_id) |
| 2230 | #define DRX_ISMCVERTYPE(x) ((x) == AUX_VER_RECORD) | 2230 | #define DRX_ISMCVERTYPE(x) ((x) == AUX_VER_RECORD) |
| 2231 | 2231 | ||
| 2232 | /**************************/ | 2232 | /*************************/ |
| 2233 | 2233 | ||
| 2234 | /* Macros with device-specific handling are converted to CFG functions */ | 2234 | /* Macros with device-specific handling are converted to CFG functions */ |
| 2235 | 2235 | ||
| @@ -2285,7 +2285,7 @@ Access macros | |||
| 2285 | #define DRX_GET_QAM_LOCKRANGE(d, x) DRX_ACCESSMACRO_GET((d), (x), \ | 2285 | #define DRX_GET_QAM_LOCKRANGE(d, x) DRX_ACCESSMACRO_GET((d), (x), \ |
| 2286 | DRX_XS_CFG_QAM_LOCKRANGE, enum drx_qam_lock_range, DRX_UNKNOWN) | 2286 | DRX_XS_CFG_QAM_LOCKRANGE, enum drx_qam_lock_range, DRX_UNKNOWN) |
| 2287 | 2287 | ||
| 2288 | /** | 2288 | /* |
| 2289 | * \brief Macro to check if std is an ATV standard | 2289 | * \brief Macro to check if std is an ATV standard |
| 2290 | * \retval true std is an ATV standard | 2290 | * \retval true std is an ATV standard |
| 2291 | * \retval false std is an ATV standard | 2291 | * \retval false std is an ATV standard |
| @@ -2298,7 +2298,7 @@ Access macros | |||
| 2298 | ((std) == DRX_STANDARD_NTSC) || \ | 2298 | ((std) == DRX_STANDARD_NTSC) || \ |
| 2299 | ((std) == DRX_STANDARD_FM)) | 2299 | ((std) == DRX_STANDARD_FM)) |
| 2300 | 2300 | ||
| 2301 | /** | 2301 | /* |
| 2302 | * \brief Macro to check if std is an QAM standard | 2302 | * \brief Macro to check if std is an QAM standard |
| 2303 | * \retval true std is an QAM standards | 2303 | * \retval true std is an QAM standards |
| 2304 | * \retval false std is an QAM standards | 2304 | * \retval false std is an QAM standards |
| @@ -2308,14 +2308,14 @@ Access macros | |||
| 2308 | ((std) == DRX_STANDARD_ITU_C) || \ | 2308 | ((std) == DRX_STANDARD_ITU_C) || \ |
| 2309 | ((std) == DRX_STANDARD_ITU_D)) | 2309 | ((std) == DRX_STANDARD_ITU_D)) |
| 2310 | 2310 | ||
| 2311 | /** | 2311 | /* |
| 2312 | * \brief Macro to check if std is VSB standard | 2312 | * \brief Macro to check if std is VSB standard |
| 2313 | * \retval true std is VSB standard | 2313 | * \retval true std is VSB standard |
| 2314 | * \retval false std is not VSB standard | 2314 | * \retval false std is not VSB standard |
| 2315 | */ | 2315 | */ |
| 2316 | #define DRX_ISVSBSTD(std) ((std) == DRX_STANDARD_8VSB) | 2316 | #define DRX_ISVSBSTD(std) ((std) == DRX_STANDARD_8VSB) |
| 2317 | 2317 | ||
| 2318 | /** | 2318 | /* |
| 2319 | * \brief Macro to check if std is DVBT standard | 2319 | * \brief Macro to check if std is DVBT standard |
| 2320 | * \retval true std is DVBT standard | 2320 | * \retval true std is DVBT standard |
| 2321 | * \retval false std is not DVBT standard | 2321 | * \retval false std is not DVBT standard |
diff --git a/drivers/media/dvb-frontends/drx39xyj/drxj.c b/drivers/media/dvb-frontends/drx39xyj/drxj.c index 499ccff557bf..8cbd8cc21059 100644 --- a/drivers/media/dvb-frontends/drx39xyj/drxj.c +++ b/drivers/media/dvb-frontends/drx39xyj/drxj.c | |||
| @@ -73,7 +73,7 @@ INCLUDE FILES | |||
| 73 | 73 | ||
| 74 | #define DRX39XX_MAIN_FIRMWARE "dvb-fe-drxj-mc-1.0.8.fw" | 74 | #define DRX39XX_MAIN_FIRMWARE "dvb-fe-drxj-mc-1.0.8.fw" |
| 75 | 75 | ||
| 76 | /** | 76 | /* |
| 77 | * \brief Maximum u32 value. | 77 | * \brief Maximum u32 value. |
| 78 | */ | 78 | */ |
| 79 | #ifndef MAX_U32 | 79 | #ifndef MAX_U32 |
| @@ -100,8 +100,8 @@ INCLUDE FILES | |||
| 100 | #ifndef OOB_DRX_DRIVE_STRENGTH | 100 | #ifndef OOB_DRX_DRIVE_STRENGTH |
| 101 | #define OOB_DRX_DRIVE_STRENGTH 0x02 | 101 | #define OOB_DRX_DRIVE_STRENGTH 0x02 |
| 102 | #endif | 102 | #endif |
| 103 | /**** START DJCOMBO patches to DRXJ registermap constants *********************/ | 103 | /*** START DJCOMBO patches to DRXJ registermap constants *********************/ |
| 104 | /**** registermap 200706071303 from drxj **************************************/ | 104 | /*** registermap 200706071303 from drxj **************************************/ |
| 105 | #define ATV_TOP_CR_AMP_TH_FM 0x0 | 105 | #define ATV_TOP_CR_AMP_TH_FM 0x0 |
| 106 | #define ATV_TOP_CR_AMP_TH_L 0xA | 106 | #define ATV_TOP_CR_AMP_TH_L 0xA |
| 107 | #define ATV_TOP_CR_AMP_TH_LP 0xA | 107 | #define ATV_TOP_CR_AMP_TH_LP 0xA |
| @@ -188,7 +188,7 @@ INCLUDE FILES | |||
| 188 | #define IQM_RC_ADJ_SEL_B_OFF 0x0 | 188 | #define IQM_RC_ADJ_SEL_B_OFF 0x0 |
| 189 | #define IQM_RC_ADJ_SEL_B_QAM 0x1 | 189 | #define IQM_RC_ADJ_SEL_B_QAM 0x1 |
| 190 | #define IQM_RC_ADJ_SEL_B_VSB 0x2 | 190 | #define IQM_RC_ADJ_SEL_B_VSB 0x2 |
| 191 | /**** END DJCOMBO patches to DRXJ registermap *********************************/ | 191 | /*** END DJCOMBO patches to DRXJ registermap *********************************/ |
| 192 | 192 | ||
| 193 | #include "drx_driver_version.h" | 193 | #include "drx_driver_version.h" |
| 194 | 194 | ||
| @@ -208,25 +208,25 @@ DEFINES | |||
| 208 | #define DRXJ_WAKE_UP_KEY (demod->my_i2c_dev_addr->i2c_addr) | 208 | #define DRXJ_WAKE_UP_KEY (demod->my_i2c_dev_addr->i2c_addr) |
| 209 | #endif | 209 | #endif |
| 210 | 210 | ||
| 211 | /** | 211 | /* |
| 212 | * \def DRXJ_DEF_I2C_ADDR | 212 | * \def DRXJ_DEF_I2C_ADDR |
| 213 | * \brief Default I2C address of a demodulator instance. | 213 | * \brief Default I2C address of a demodulator instance. |
| 214 | */ | 214 | */ |
| 215 | #define DRXJ_DEF_I2C_ADDR (0x52) | 215 | #define DRXJ_DEF_I2C_ADDR (0x52) |
| 216 | 216 | ||
| 217 | /** | 217 | /* |
| 218 | * \def DRXJ_DEF_DEMOD_DEV_ID | 218 | * \def DRXJ_DEF_DEMOD_DEV_ID |
| 219 | * \brief Default device identifier of a demodultor instance. | 219 | * \brief Default device identifier of a demodultor instance. |
| 220 | */ | 220 | */ |
| 221 | #define DRXJ_DEF_DEMOD_DEV_ID (1) | 221 | #define DRXJ_DEF_DEMOD_DEV_ID (1) |
| 222 | 222 | ||
| 223 | /** | 223 | /* |
| 224 | * \def DRXJ_SCAN_TIMEOUT | 224 | * \def DRXJ_SCAN_TIMEOUT |
| 225 | * \brief Timeout value for waiting on demod lock during channel scan (millisec). | 225 | * \brief Timeout value for waiting on demod lock during channel scan (millisec). |
| 226 | */ | 226 | */ |
| 227 | #define DRXJ_SCAN_TIMEOUT 1000 | 227 | #define DRXJ_SCAN_TIMEOUT 1000 |
| 228 | 228 | ||
| 229 | /** | 229 | /* |
| 230 | * \def HI_I2C_DELAY | 230 | * \def HI_I2C_DELAY |
| 231 | * \brief HI timing delay for I2C timing (in nano seconds) | 231 | * \brief HI timing delay for I2C timing (in nano seconds) |
| 232 | * | 232 | * |
| @@ -234,7 +234,7 @@ DEFINES | |||
| 234 | */ | 234 | */ |
| 235 | #define HI_I2C_DELAY 42 | 235 | #define HI_I2C_DELAY 42 |
| 236 | 236 | ||
| 237 | /** | 237 | /* |
| 238 | * \def HI_I2C_BRIDGE_DELAY | 238 | * \def HI_I2C_BRIDGE_DELAY |
| 239 | * \brief HI timing delay for I2C timing (in nano seconds) | 239 | * \brief HI timing delay for I2C timing (in nano seconds) |
| 240 | * | 240 | * |
| @@ -242,13 +242,13 @@ DEFINES | |||
| 242 | */ | 242 | */ |
| 243 | #define HI_I2C_BRIDGE_DELAY 750 | 243 | #define HI_I2C_BRIDGE_DELAY 750 |
| 244 | 244 | ||
| 245 | /** | 245 | /* |
| 246 | * \brief Time Window for MER and SER Measurement in Units of Segment duration. | 246 | * \brief Time Window for MER and SER Measurement in Units of Segment duration. |
| 247 | */ | 247 | */ |
| 248 | #define VSB_TOP_MEASUREMENT_PERIOD 64 | 248 | #define VSB_TOP_MEASUREMENT_PERIOD 64 |
| 249 | #define SYMBOLS_PER_SEGMENT 832 | 249 | #define SYMBOLS_PER_SEGMENT 832 |
| 250 | 250 | ||
| 251 | /** | 251 | /* |
| 252 | * \brief bit rate and segment rate constants used for SER and BER. | 252 | * \brief bit rate and segment rate constants used for SER and BER. |
| 253 | */ | 253 | */ |
| 254 | /* values taken from the QAM microcode */ | 254 | /* values taken from the QAM microcode */ |
| @@ -260,21 +260,21 @@ DEFINES | |||
| 260 | #define DRXJ_QAM_SL_SIG_POWER_QAM64 43008 | 260 | #define DRXJ_QAM_SL_SIG_POWER_QAM64 43008 |
| 261 | #define DRXJ_QAM_SL_SIG_POWER_QAM128 20992 | 261 | #define DRXJ_QAM_SL_SIG_POWER_QAM128 20992 |
| 262 | #define DRXJ_QAM_SL_SIG_POWER_QAM256 43520 | 262 | #define DRXJ_QAM_SL_SIG_POWER_QAM256 43520 |
| 263 | /** | 263 | /* |
| 264 | * \brief Min supported symbolrates. | 264 | * \brief Min supported symbolrates. |
| 265 | */ | 265 | */ |
| 266 | #ifndef DRXJ_QAM_SYMBOLRATE_MIN | 266 | #ifndef DRXJ_QAM_SYMBOLRATE_MIN |
| 267 | #define DRXJ_QAM_SYMBOLRATE_MIN (520000) | 267 | #define DRXJ_QAM_SYMBOLRATE_MIN (520000) |
| 268 | #endif | 268 | #endif |
| 269 | 269 | ||
| 270 | /** | 270 | /* |
| 271 | * \brief Max supported symbolrates. | 271 | * \brief Max supported symbolrates. |
| 272 | */ | 272 | */ |
| 273 | #ifndef DRXJ_QAM_SYMBOLRATE_MAX | 273 | #ifndef DRXJ_QAM_SYMBOLRATE_MAX |
| 274 | #define DRXJ_QAM_SYMBOLRATE_MAX (7233000) | 274 | #define DRXJ_QAM_SYMBOLRATE_MAX (7233000) |
| 275 | #endif | 275 | #endif |
| 276 | 276 | ||
| 277 | /** | 277 | /* |
| 278 | * \def DRXJ_QAM_MAX_WAITTIME | 278 | * \def DRXJ_QAM_MAX_WAITTIME |
| 279 | * \brief Maximal wait time for QAM auto constellation in ms | 279 | * \brief Maximal wait time for QAM auto constellation in ms |
| 280 | */ | 280 | */ |
| @@ -290,7 +290,7 @@ DEFINES | |||
| 290 | #define DRXJ_QAM_DEMOD_LOCK_EXT_WAITTIME 200 | 290 | #define DRXJ_QAM_DEMOD_LOCK_EXT_WAITTIME 200 |
| 291 | #endif | 291 | #endif |
| 292 | 292 | ||
| 293 | /** | 293 | /* |
| 294 | * \def SCU status and results | 294 | * \def SCU status and results |
| 295 | * \brief SCU | 295 | * \brief SCU |
| 296 | */ | 296 | */ |
| @@ -299,7 +299,7 @@ DEFINES | |||
| 299 | #define FEC_RS_MEASUREMENT_PERIOD 12894 /* 1 sec */ | 299 | #define FEC_RS_MEASUREMENT_PERIOD 12894 /* 1 sec */ |
| 300 | #define FEC_RS_MEASUREMENT_PRESCALE 1 /* n sec */ | 300 | #define FEC_RS_MEASUREMENT_PRESCALE 1 /* n sec */ |
| 301 | 301 | ||
| 302 | /** | 302 | /* |
| 303 | * \def DRX_AUD_MAX_DEVIATION | 303 | * \def DRX_AUD_MAX_DEVIATION |
| 304 | * \brief Needed for calculation of prescale feature in AUD | 304 | * \brief Needed for calculation of prescale feature in AUD |
| 305 | */ | 305 | */ |
| @@ -307,14 +307,14 @@ DEFINES | |||
| 307 | #define DRXJ_AUD_MAX_FM_DEVIATION 100 /* kHz */ | 307 | #define DRXJ_AUD_MAX_FM_DEVIATION 100 /* kHz */ |
| 308 | #endif | 308 | #endif |
| 309 | 309 | ||
| 310 | /** | 310 | /* |
| 311 | * \brief Needed for calculation of NICAM prescale feature in AUD | 311 | * \brief Needed for calculation of NICAM prescale feature in AUD |
| 312 | */ | 312 | */ |
| 313 | #ifndef DRXJ_AUD_MAX_NICAM_PRESCALE | 313 | #ifndef DRXJ_AUD_MAX_NICAM_PRESCALE |
| 314 | #define DRXJ_AUD_MAX_NICAM_PRESCALE (9) /* dB */ | 314 | #define DRXJ_AUD_MAX_NICAM_PRESCALE (9) /* dB */ |
| 315 | #endif | 315 | #endif |
| 316 | 316 | ||
| 317 | /** | 317 | /* |
| 318 | * \brief Needed for calculation of NICAM prescale feature in AUD | 318 | * \brief Needed for calculation of NICAM prescale feature in AUD |
| 319 | */ | 319 | */ |
| 320 | #ifndef DRXJ_AUD_MAX_WAITTIME | 320 | #ifndef DRXJ_AUD_MAX_WAITTIME |
| @@ -371,21 +371,21 @@ DEFINES | |||
| 371 | /*============================================================================*/ | 371 | /*============================================================================*/ |
| 372 | /*=== GLOBAL VARIABLEs =======================================================*/ | 372 | /*=== GLOBAL VARIABLEs =======================================================*/ |
| 373 | /*============================================================================*/ | 373 | /*============================================================================*/ |
| 374 | /** | 374 | /* |
| 375 | */ | 375 | */ |
| 376 | 376 | ||
| 377 | /** | 377 | /* |
| 378 | * \brief Temporary register definitions. | 378 | * \brief Temporary register definitions. |
| 379 | * (register definitions that are not yet available in register master) | 379 | * (register definitions that are not yet available in register master) |
| 380 | */ | 380 | */ |
| 381 | 381 | ||
| 382 | /******************************************************************************/ | 382 | /*****************************************************************************/ |
| 383 | /* Audio block 0x103 is write only. To avoid shadowing in driver accessing */ | 383 | /* Audio block 0x103 is write only. To avoid shadowing in driver accessing */ |
| 384 | /* RAM adresses directly. This must be READ ONLY to avoid problems. */ | 384 | /* RAM adresses directly. This must be READ ONLY to avoid problems. */ |
| 385 | /* Writing to the interface adresses is more than only writing the RAM */ | 385 | /* Writing to the interface adresses is more than only writing the RAM */ |
| 386 | /* locations */ | 386 | /* locations */ |
| 387 | /******************************************************************************/ | 387 | /*****************************************************************************/ |
| 388 | /** | 388 | /* |
| 389 | * \brief RAM location of MODUS registers | 389 | * \brief RAM location of MODUS registers |
| 390 | */ | 390 | */ |
| 391 | #define AUD_DEM_RAM_MODUS_HI__A 0x10204A3 | 391 | #define AUD_DEM_RAM_MODUS_HI__A 0x10204A3 |
| @@ -394,13 +394,13 @@ DEFINES | |||
| 394 | #define AUD_DEM_RAM_MODUS_LO__A 0x10204A4 | 394 | #define AUD_DEM_RAM_MODUS_LO__A 0x10204A4 |
| 395 | #define AUD_DEM_RAM_MODUS_LO__M 0x0FFF | 395 | #define AUD_DEM_RAM_MODUS_LO__M 0x0FFF |
| 396 | 396 | ||
| 397 | /** | 397 | /* |
| 398 | * \brief RAM location of I2S config registers | 398 | * \brief RAM location of I2S config registers |
| 399 | */ | 399 | */ |
| 400 | #define AUD_DEM_RAM_I2S_CONFIG1__A 0x10204B1 | 400 | #define AUD_DEM_RAM_I2S_CONFIG1__A 0x10204B1 |
| 401 | #define AUD_DEM_RAM_I2S_CONFIG2__A 0x10204B2 | 401 | #define AUD_DEM_RAM_I2S_CONFIG2__A 0x10204B2 |
| 402 | 402 | ||
| 403 | /** | 403 | /* |
| 404 | * \brief RAM location of DCO config registers | 404 | * \brief RAM location of DCO config registers |
| 405 | */ | 405 | */ |
| 406 | #define AUD_DEM_RAM_DCO_B_HI__A 0x1020461 | 406 | #define AUD_DEM_RAM_DCO_B_HI__A 0x1020461 |
| @@ -408,20 +408,20 @@ DEFINES | |||
| 408 | #define AUD_DEM_RAM_DCO_A_HI__A 0x1020463 | 408 | #define AUD_DEM_RAM_DCO_A_HI__A 0x1020463 |
| 409 | #define AUD_DEM_RAM_DCO_A_LO__A 0x1020464 | 409 | #define AUD_DEM_RAM_DCO_A_LO__A 0x1020464 |
| 410 | 410 | ||
| 411 | /** | 411 | /* |
| 412 | * \brief RAM location of Threshold registers | 412 | * \brief RAM location of Threshold registers |
| 413 | */ | 413 | */ |
| 414 | #define AUD_DEM_RAM_NICAM_THRSHLD__A 0x102045A | 414 | #define AUD_DEM_RAM_NICAM_THRSHLD__A 0x102045A |
| 415 | #define AUD_DEM_RAM_A2_THRSHLD__A 0x10204BB | 415 | #define AUD_DEM_RAM_A2_THRSHLD__A 0x10204BB |
| 416 | #define AUD_DEM_RAM_BTSC_THRSHLD__A 0x10204A6 | 416 | #define AUD_DEM_RAM_BTSC_THRSHLD__A 0x10204A6 |
| 417 | 417 | ||
| 418 | /** | 418 | /* |
| 419 | * \brief RAM location of Carrier Threshold registers | 419 | * \brief RAM location of Carrier Threshold registers |
| 420 | */ | 420 | */ |
| 421 | #define AUD_DEM_RAM_CM_A_THRSHLD__A 0x10204AF | 421 | #define AUD_DEM_RAM_CM_A_THRSHLD__A 0x10204AF |
| 422 | #define AUD_DEM_RAM_CM_B_THRSHLD__A 0x10204B0 | 422 | #define AUD_DEM_RAM_CM_B_THRSHLD__A 0x10204B0 |
| 423 | 423 | ||
| 424 | /** | 424 | /* |
| 425 | * \brief FM Matrix register fix | 425 | * \brief FM Matrix register fix |
| 426 | */ | 426 | */ |
| 427 | #ifdef AUD_DEM_WR_FM_MATRIX__A | 427 | #ifdef AUD_DEM_WR_FM_MATRIX__A |
| @@ -430,7 +430,7 @@ DEFINES | |||
| 430 | #define AUD_DEM_WR_FM_MATRIX__A 0x105006F | 430 | #define AUD_DEM_WR_FM_MATRIX__A 0x105006F |
| 431 | 431 | ||
| 432 | /*============================================================================*/ | 432 | /*============================================================================*/ |
| 433 | /** | 433 | /* |
| 434 | * \brief Defines required for audio | 434 | * \brief Defines required for audio |
| 435 | */ | 435 | */ |
| 436 | #define AUD_VOLUME_ZERO_DB 115 | 436 | #define AUD_VOLUME_ZERO_DB 115 |
| @@ -443,14 +443,14 @@ DEFINES | |||
| 443 | #define AUD_I2S_FREQUENCY_MIN 12000UL | 443 | #define AUD_I2S_FREQUENCY_MIN 12000UL |
| 444 | #define AUD_RDS_ARRAY_SIZE 18 | 444 | #define AUD_RDS_ARRAY_SIZE 18 |
| 445 | 445 | ||
| 446 | /** | 446 | /* |
| 447 | * \brief Needed for calculation of prescale feature in AUD | 447 | * \brief Needed for calculation of prescale feature in AUD |
| 448 | */ | 448 | */ |
| 449 | #ifndef DRX_AUD_MAX_FM_DEVIATION | 449 | #ifndef DRX_AUD_MAX_FM_DEVIATION |
| 450 | #define DRX_AUD_MAX_FM_DEVIATION (100) /* kHz */ | 450 | #define DRX_AUD_MAX_FM_DEVIATION (100) /* kHz */ |
| 451 | #endif | 451 | #endif |
| 452 | 452 | ||
| 453 | /** | 453 | /* |
| 454 | * \brief Needed for calculation of NICAM prescale feature in AUD | 454 | * \brief Needed for calculation of NICAM prescale feature in AUD |
| 455 | */ | 455 | */ |
| 456 | #ifndef DRX_AUD_MAX_NICAM_PRESCALE | 456 | #ifndef DRX_AUD_MAX_NICAM_PRESCALE |
| @@ -478,7 +478,7 @@ DEFINES | |||
| 478 | /*=== REGISTER ACCESS MACROS =================================================*/ | 478 | /*=== REGISTER ACCESS MACROS =================================================*/ |
| 479 | /*============================================================================*/ | 479 | /*============================================================================*/ |
| 480 | 480 | ||
| 481 | /** | 481 | /* |
| 482 | * This macro is used to create byte arrays for block writes. | 482 | * This macro is used to create byte arrays for block writes. |
| 483 | * Block writes speed up I2C traffic between host and demod. | 483 | * Block writes speed up I2C traffic between host and demod. |
| 484 | * The macro takes care of the required byte order in a 16 bits word. | 484 | * The macro takes care of the required byte order in a 16 bits word. |
| @@ -486,7 +486,7 @@ DEFINES | |||
| 486 | */ | 486 | */ |
| 487 | #define DRXJ_16TO8(x) ((u8) (((u16)x) & 0xFF)), \ | 487 | #define DRXJ_16TO8(x) ((u8) (((u16)x) & 0xFF)), \ |
| 488 | ((u8)((((u16)x)>>8)&0xFF)) | 488 | ((u8)((((u16)x)>>8)&0xFF)) |
| 489 | /** | 489 | /* |
| 490 | * This macro is used to convert byte array to 16 bit register value for block read. | 490 | * This macro is used to convert byte array to 16 bit register value for block read. |
| 491 | * Block read speed up I2C traffic between host and demod. | 491 | * Block read speed up I2C traffic between host and demod. |
| 492 | * The macro takes care of the required byte order in a 16 bits word. | 492 | * The macro takes care of the required byte order in a 16 bits word. |
| @@ -501,7 +501,7 @@ DEFINES | |||
| 501 | /*=== HI COMMAND RELATED DEFINES =============================================*/ | 501 | /*=== HI COMMAND RELATED DEFINES =============================================*/ |
| 502 | /*============================================================================*/ | 502 | /*============================================================================*/ |
| 503 | 503 | ||
| 504 | /** | 504 | /* |
| 505 | * \brief General maximum number of retries for ucode command interfaces | 505 | * \brief General maximum number of retries for ucode command interfaces |
| 506 | */ | 506 | */ |
| 507 | #define DRXJ_MAX_RETRIES (100) | 507 | #define DRXJ_MAX_RETRIES (100) |
| @@ -807,7 +807,7 @@ static struct drxj_data drxj_data_g = { | |||
| 807 | }, | 807 | }, |
| 808 | }; | 808 | }; |
| 809 | 809 | ||
| 810 | /** | 810 | /* |
| 811 | * \var drxj_default_addr_g | 811 | * \var drxj_default_addr_g |
| 812 | * \brief Default I2C address and device identifier. | 812 | * \brief Default I2C address and device identifier. |
| 813 | */ | 813 | */ |
| @@ -816,7 +816,7 @@ static struct i2c_device_addr drxj_default_addr_g = { | |||
| 816 | DRXJ_DEF_DEMOD_DEV_ID /* device id */ | 816 | DRXJ_DEF_DEMOD_DEV_ID /* device id */ |
| 817 | }; | 817 | }; |
| 818 | 818 | ||
| 819 | /** | 819 | /* |
| 820 | * \var drxj_default_comm_attr_g | 820 | * \var drxj_default_comm_attr_g |
| 821 | * \brief Default common attributes of a drxj demodulator instance. | 821 | * \brief Default common attributes of a drxj demodulator instance. |
| 822 | */ | 822 | */ |
| @@ -887,7 +887,7 @@ static struct drx_common_attr drxj_default_comm_attr_g = { | |||
| 887 | 0 /* mfx */ | 887 | 0 /* mfx */ |
| 888 | }; | 888 | }; |
| 889 | 889 | ||
| 890 | /** | 890 | /* |
| 891 | * \var drxj_default_demod_g | 891 | * \var drxj_default_demod_g |
| 892 | * \brief Default drxj demodulator instance. | 892 | * \brief Default drxj demodulator instance. |
| 893 | */ | 893 | */ |
| @@ -897,7 +897,7 @@ static struct drx_demod_instance drxj_default_demod_g = { | |||
| 897 | &drxj_data_g /* demod device specific attributes */ | 897 | &drxj_data_g /* demod device specific attributes */ |
| 898 | }; | 898 | }; |
| 899 | 899 | ||
| 900 | /** | 900 | /* |
| 901 | * \brief Default audio data structure for DRK demodulator instance. | 901 | * \brief Default audio data structure for DRK demodulator instance. |
| 902 | * | 902 | * |
| 903 | * This structure is DRXK specific. | 903 | * This structure is DRXK specific. |
| @@ -997,7 +997,7 @@ struct drxj_hi_cmd { | |||
| 997 | /*=== MICROCODE RELATED STRUCTURES ===========================================*/ | 997 | /*=== MICROCODE RELATED STRUCTURES ===========================================*/ |
| 998 | /*============================================================================*/ | 998 | /*============================================================================*/ |
| 999 | 999 | ||
| 1000 | /** | 1000 | /* |
| 1001 | * struct drxu_code_block_hdr - Structure of the microcode block headers | 1001 | * struct drxu_code_block_hdr - Structure of the microcode block headers |
| 1002 | * | 1002 | * |
| 1003 | * @addr: Destination address of the data in this block | 1003 | * @addr: Destination address of the data in this block |
| @@ -1086,7 +1086,7 @@ static u32 frac28(u32 N, u32 D) | |||
| 1086 | return Q1; | 1086 | return Q1; |
| 1087 | } | 1087 | } |
| 1088 | 1088 | ||
| 1089 | /** | 1089 | /* |
| 1090 | * \fn u32 log1_times100( u32 x) | 1090 | * \fn u32 log1_times100( u32 x) |
| 1091 | * \brief Compute: 100*log10(x) | 1091 | * \brief Compute: 100*log10(x) |
| 1092 | * \param x 32 bits | 1092 | * \param x 32 bits |
| @@ -1198,7 +1198,7 @@ static u32 log1_times100(u32 x) | |||
| 1198 | 1198 | ||
| 1199 | } | 1199 | } |
| 1200 | 1200 | ||
| 1201 | /** | 1201 | /* |
| 1202 | * \fn u32 frac_times1e6( u16 N, u32 D) | 1202 | * \fn u32 frac_times1e6( u16 N, u32 D) |
| 1203 | * \brief Compute: (N/D) * 1000000. | 1203 | * \brief Compute: (N/D) * 1000000. |
| 1204 | * \param N nominator 16-bits. | 1204 | * \param N nominator 16-bits. |
| @@ -1235,7 +1235,7 @@ static u32 frac_times1e6(u32 N, u32 D) | |||
| 1235 | /*============================================================================*/ | 1235 | /*============================================================================*/ |
| 1236 | 1236 | ||
| 1237 | 1237 | ||
| 1238 | /** | 1238 | /* |
| 1239 | * \brief Values for NICAM prescaler gain. Computed from dB to integer | 1239 | * \brief Values for NICAM prescaler gain. Computed from dB to integer |
| 1240 | * and rounded. For calc used formula: 16*10^(prescaleGain[dB]/20). | 1240 | * and rounded. For calc used formula: 16*10^(prescaleGain[dB]/20). |
| 1241 | * | 1241 | * |
| @@ -1280,7 +1280,7 @@ static const u16 nicam_presc_table_val[43] = { | |||
| 1280 | #define DRXJ_DAP_AUDTRIF_TIMEOUT 80 /* millisec */ | 1280 | #define DRXJ_DAP_AUDTRIF_TIMEOUT 80 /* millisec */ |
| 1281 | /*============================================================================*/ | 1281 | /*============================================================================*/ |
| 1282 | 1282 | ||
| 1283 | /** | 1283 | /* |
| 1284 | * \fn bool is_handled_by_aud_tr_if( u32 addr ) | 1284 | * \fn bool is_handled_by_aud_tr_if( u32 addr ) |
| 1285 | * \brief Check if this address is handled by the audio token ring interface. | 1285 | * \brief Check if this address is handled by the audio token ring interface. |
| 1286 | * \param addr | 1286 | * \param addr |
| @@ -1386,7 +1386,7 @@ int drxbsp_i2c_write_read(struct i2c_device_addr *w_dev_addr, | |||
| 1386 | 1386 | ||
| 1387 | /*============================================================================*/ | 1387 | /*============================================================================*/ |
| 1388 | 1388 | ||
| 1389 | /****************************** | 1389 | /***************************** |
| 1390 | * | 1390 | * |
| 1391 | * int drxdap_fasi_read_block ( | 1391 | * int drxdap_fasi_read_block ( |
| 1392 | * struct i2c_device_addr *dev_addr, -- address of I2C device | 1392 | * struct i2c_device_addr *dev_addr, -- address of I2C device |
| @@ -1498,7 +1498,7 @@ static int drxdap_fasi_read_block(struct i2c_device_addr *dev_addr, | |||
| 1498 | } | 1498 | } |
| 1499 | 1499 | ||
| 1500 | 1500 | ||
| 1501 | /****************************** | 1501 | /***************************** |
| 1502 | * | 1502 | * |
| 1503 | * int drxdap_fasi_read_reg16 ( | 1503 | * int drxdap_fasi_read_reg16 ( |
| 1504 | * struct i2c_device_addr *dev_addr, -- address of I2C device | 1504 | * struct i2c_device_addr *dev_addr, -- address of I2C device |
| @@ -1531,7 +1531,7 @@ static int drxdap_fasi_read_reg16(struct i2c_device_addr *dev_addr, | |||
| 1531 | return rc; | 1531 | return rc; |
| 1532 | } | 1532 | } |
| 1533 | 1533 | ||
| 1534 | /****************************** | 1534 | /***************************** |
| 1535 | * | 1535 | * |
| 1536 | * int drxdap_fasi_read_reg32 ( | 1536 | * int drxdap_fasi_read_reg32 ( |
| 1537 | * struct i2c_device_addr *dev_addr, -- address of I2C device | 1537 | * struct i2c_device_addr *dev_addr, -- address of I2C device |
| @@ -1566,7 +1566,7 @@ static int drxdap_fasi_read_reg32(struct i2c_device_addr *dev_addr, | |||
| 1566 | return rc; | 1566 | return rc; |
| 1567 | } | 1567 | } |
| 1568 | 1568 | ||
| 1569 | /****************************** | 1569 | /***************************** |
| 1570 | * | 1570 | * |
| 1571 | * int drxdap_fasi_write_block ( | 1571 | * int drxdap_fasi_write_block ( |
| 1572 | * struct i2c_device_addr *dev_addr, -- address of I2C device | 1572 | * struct i2c_device_addr *dev_addr, -- address of I2C device |
| @@ -1705,7 +1705,7 @@ static int drxdap_fasi_write_block(struct i2c_device_addr *dev_addr, | |||
| 1705 | return first_err; | 1705 | return first_err; |
| 1706 | } | 1706 | } |
| 1707 | 1707 | ||
| 1708 | /****************************** | 1708 | /***************************** |
| 1709 | * | 1709 | * |
| 1710 | * int drxdap_fasi_write_reg16 ( | 1710 | * int drxdap_fasi_write_reg16 ( |
| 1711 | * struct i2c_device_addr *dev_addr, -- address of I2C device | 1711 | * struct i2c_device_addr *dev_addr, -- address of I2C device |
| @@ -1734,7 +1734,7 @@ static int drxdap_fasi_write_reg16(struct i2c_device_addr *dev_addr, | |||
| 1734 | return drxdap_fasi_write_block(dev_addr, addr, sizeof(data), buf, flags); | 1734 | return drxdap_fasi_write_block(dev_addr, addr, sizeof(data), buf, flags); |
| 1735 | } | 1735 | } |
| 1736 | 1736 | ||
| 1737 | /****************************** | 1737 | /***************************** |
| 1738 | * | 1738 | * |
| 1739 | * int drxdap_fasi_read_modify_write_reg16 ( | 1739 | * int drxdap_fasi_read_modify_write_reg16 ( |
| 1740 | * struct i2c_device_addr *dev_addr, -- address of I2C device | 1740 | * struct i2c_device_addr *dev_addr, -- address of I2C device |
| @@ -1778,7 +1778,7 @@ static int drxdap_fasi_read_modify_write_reg16(struct i2c_device_addr *dev_addr, | |||
| 1778 | return rc; | 1778 | return rc; |
| 1779 | } | 1779 | } |
| 1780 | 1780 | ||
| 1781 | /****************************** | 1781 | /***************************** |
| 1782 | * | 1782 | * |
| 1783 | * int drxdap_fasi_write_reg32 ( | 1783 | * int drxdap_fasi_write_reg32 ( |
| 1784 | * struct i2c_device_addr *dev_addr, -- address of I2C device | 1784 | * struct i2c_device_addr *dev_addr, -- address of I2C device |
| @@ -1811,7 +1811,7 @@ static int drxdap_fasi_write_reg32(struct i2c_device_addr *dev_addr, | |||
| 1811 | 1811 | ||
| 1812 | /*============================================================================*/ | 1812 | /*============================================================================*/ |
| 1813 | 1813 | ||
| 1814 | /** | 1814 | /* |
| 1815 | * \fn int drxj_dap_rm_write_reg16short | 1815 | * \fn int drxj_dap_rm_write_reg16short |
| 1816 | * \brief Read modify write 16 bits audio register using short format only. | 1816 | * \brief Read modify write 16 bits audio register using short format only. |
| 1817 | * \param dev_addr | 1817 | * \param dev_addr |
| @@ -1890,7 +1890,7 @@ static int drxj_dap_read_modify_write_reg16(struct i2c_device_addr *dev_addr, | |||
| 1890 | 1890 | ||
| 1891 | /*============================================================================*/ | 1891 | /*============================================================================*/ |
| 1892 | 1892 | ||
| 1893 | /** | 1893 | /* |
| 1894 | * \fn int drxj_dap_read_aud_reg16 | 1894 | * \fn int drxj_dap_read_aud_reg16 |
| 1895 | * \brief Read 16 bits audio register | 1895 | * \brief Read 16 bits audio register |
| 1896 | * \param dev_addr | 1896 | * \param dev_addr |
| @@ -1997,7 +1997,7 @@ static int drxj_dap_read_reg16(struct i2c_device_addr *dev_addr, | |||
| 1997 | } | 1997 | } |
| 1998 | /*============================================================================*/ | 1998 | /*============================================================================*/ |
| 1999 | 1999 | ||
| 2000 | /** | 2000 | /* |
| 2001 | * \fn int drxj_dap_write_aud_reg16 | 2001 | * \fn int drxj_dap_write_aud_reg16 |
| 2002 | * \brief Write 16 bits audio register | 2002 | * \brief Write 16 bits audio register |
| 2003 | * \param dev_addr | 2003 | * \param dev_addr |
| @@ -2086,7 +2086,7 @@ static int drxj_dap_write_reg16(struct i2c_device_addr *dev_addr, | |||
| 2086 | #define DRXJ_HI_ATOMIC_READ SIO_HI_RA_RAM_PAR_3_ACP_RW_READ | 2086 | #define DRXJ_HI_ATOMIC_READ SIO_HI_RA_RAM_PAR_3_ACP_RW_READ |
| 2087 | #define DRXJ_HI_ATOMIC_WRITE SIO_HI_RA_RAM_PAR_3_ACP_RW_WRITE | 2087 | #define DRXJ_HI_ATOMIC_WRITE SIO_HI_RA_RAM_PAR_3_ACP_RW_WRITE |
| 2088 | 2088 | ||
| 2089 | /** | 2089 | /* |
| 2090 | * \fn int drxj_dap_atomic_read_write_block() | 2090 | * \fn int drxj_dap_atomic_read_write_block() |
| 2091 | * \brief Basic access routine for atomic read or write access | 2091 | * \brief Basic access routine for atomic read or write access |
| 2092 | * \param dev_addr pointer to i2c dev address | 2092 | * \param dev_addr pointer to i2c dev address |
| @@ -2168,7 +2168,7 @@ rw_error: | |||
| 2168 | 2168 | ||
| 2169 | /*============================================================================*/ | 2169 | /*============================================================================*/ |
| 2170 | 2170 | ||
| 2171 | /** | 2171 | /* |
| 2172 | * \fn int drxj_dap_atomic_read_reg32() | 2172 | * \fn int drxj_dap_atomic_read_reg32() |
| 2173 | * \brief Atomic read of 32 bits words | 2173 | * \brief Atomic read of 32 bits words |
| 2174 | */ | 2174 | */ |
| @@ -2215,7 +2215,7 @@ int drxj_dap_atomic_read_reg32(struct i2c_device_addr *dev_addr, | |||
| 2215 | /*============================================================================*/ | 2215 | /*============================================================================*/ |
| 2216 | /*============================================================================*/ | 2216 | /*============================================================================*/ |
| 2217 | 2217 | ||
| 2218 | /** | 2218 | /* |
| 2219 | * \fn int hi_cfg_command() | 2219 | * \fn int hi_cfg_command() |
| 2220 | * \brief Configure HI with settings stored in the demod structure. | 2220 | * \brief Configure HI with settings stored in the demod structure. |
| 2221 | * \param demod Demodulator. | 2221 | * \param demod Demodulator. |
| @@ -2258,7 +2258,7 @@ rw_error: | |||
| 2258 | return rc; | 2258 | return rc; |
| 2259 | } | 2259 | } |
| 2260 | 2260 | ||
| 2261 | /** | 2261 | /* |
| 2262 | * \fn int hi_command() | 2262 | * \fn int hi_command() |
| 2263 | * \brief Configure HI with settings stored in the demod structure. | 2263 | * \brief Configure HI with settings stored in the demod structure. |
| 2264 | * \param dev_addr I2C address. | 2264 | * \param dev_addr I2C address. |
| @@ -2369,7 +2369,7 @@ rw_error: | |||
| 2369 | return rc; | 2369 | return rc; |
| 2370 | } | 2370 | } |
| 2371 | 2371 | ||
| 2372 | /** | 2372 | /* |
| 2373 | * \fn int init_hi( const struct drx_demod_instance *demod ) | 2373 | * \fn int init_hi( const struct drx_demod_instance *demod ) |
| 2374 | * \brief Initialise and configurate HI. | 2374 | * \brief Initialise and configurate HI. |
| 2375 | * \param demod pointer to demod data. | 2375 | * \param demod pointer to demod data. |
| @@ -2450,7 +2450,7 @@ rw_error: | |||
| 2450 | /*============================================================================*/ | 2450 | /*============================================================================*/ |
| 2451 | /*============================================================================*/ | 2451 | /*============================================================================*/ |
| 2452 | 2452 | ||
| 2453 | /** | 2453 | /* |
| 2454 | * \fn int get_device_capabilities() | 2454 | * \fn int get_device_capabilities() |
| 2455 | * \brief Get and store device capabilities. | 2455 | * \brief Get and store device capabilities. |
| 2456 | * \param demod Pointer to demodulator instance. | 2456 | * \param demod Pointer to demodulator instance. |
| @@ -2656,7 +2656,7 @@ rw_error: | |||
| 2656 | return rc; | 2656 | return rc; |
| 2657 | } | 2657 | } |
| 2658 | 2658 | ||
| 2659 | /** | 2659 | /* |
| 2660 | * \fn int power_up_device() | 2660 | * \fn int power_up_device() |
| 2661 | * \brief Power up device. | 2661 | * \brief Power up device. |
| 2662 | * \param demod Pointer to demodulator instance. | 2662 | * \param demod Pointer to demodulator instance. |
| @@ -2710,7 +2710,7 @@ static int power_up_device(struct drx_demod_instance *demod) | |||
| 2710 | /*----------------------------------------------------------------------------*/ | 2710 | /*----------------------------------------------------------------------------*/ |
| 2711 | /* MPEG Output Configuration Functions - begin */ | 2711 | /* MPEG Output Configuration Functions - begin */ |
| 2712 | /*----------------------------------------------------------------------------*/ | 2712 | /*----------------------------------------------------------------------------*/ |
| 2713 | /** | 2713 | /* |
| 2714 | * \fn int ctrl_set_cfg_mpeg_output() | 2714 | * \fn int ctrl_set_cfg_mpeg_output() |
| 2715 | * \brief Set MPEG output configuration of the device. | 2715 | * \brief Set MPEG output configuration of the device. |
| 2716 | * \param devmod Pointer to demodulator instance. | 2716 | * \param devmod Pointer to demodulator instance. |
| @@ -3356,7 +3356,7 @@ rw_error: | |||
| 3356 | /* miscellaneous configurations - begin */ | 3356 | /* miscellaneous configurations - begin */ |
| 3357 | /*----------------------------------------------------------------------------*/ | 3357 | /*----------------------------------------------------------------------------*/ |
| 3358 | 3358 | ||
| 3359 | /** | 3359 | /* |
| 3360 | * \fn int set_mpegtei_handling() | 3360 | * \fn int set_mpegtei_handling() |
| 3361 | * \brief Activate MPEG TEI handling settings. | 3361 | * \brief Activate MPEG TEI handling settings. |
| 3362 | * \param devmod Pointer to demodulator instance. | 3362 | * \param devmod Pointer to demodulator instance. |
| @@ -3429,7 +3429,7 @@ rw_error: | |||
| 3429 | } | 3429 | } |
| 3430 | 3430 | ||
| 3431 | /*----------------------------------------------------------------------------*/ | 3431 | /*----------------------------------------------------------------------------*/ |
| 3432 | /** | 3432 | /* |
| 3433 | * \fn int bit_reverse_mpeg_output() | 3433 | * \fn int bit_reverse_mpeg_output() |
| 3434 | * \brief Set MPEG output bit-endian settings. | 3434 | * \brief Set MPEG output bit-endian settings. |
| 3435 | * \param devmod Pointer to demodulator instance. | 3435 | * \param devmod Pointer to demodulator instance. |
| @@ -3472,7 +3472,7 @@ rw_error: | |||
| 3472 | } | 3472 | } |
| 3473 | 3473 | ||
| 3474 | /*----------------------------------------------------------------------------*/ | 3474 | /*----------------------------------------------------------------------------*/ |
| 3475 | /** | 3475 | /* |
| 3476 | * \fn int set_mpeg_start_width() | 3476 | * \fn int set_mpeg_start_width() |
| 3477 | * \brief Set MPEG start width. | 3477 | * \brief Set MPEG start width. |
| 3478 | * \param devmod Pointer to demodulator instance. | 3478 | * \param devmod Pointer to demodulator instance. |
| @@ -3522,7 +3522,7 @@ rw_error: | |||
| 3522 | /*----------------------------------------------------------------------------*/ | 3522 | /*----------------------------------------------------------------------------*/ |
| 3523 | /* UIO Configuration Functions - begin */ | 3523 | /* UIO Configuration Functions - begin */ |
| 3524 | /*----------------------------------------------------------------------------*/ | 3524 | /*----------------------------------------------------------------------------*/ |
| 3525 | /** | 3525 | /* |
| 3526 | * \fn int ctrl_set_uio_cfg() | 3526 | * \fn int ctrl_set_uio_cfg() |
| 3527 | * \brief Configure modus oprandi UIO. | 3527 | * \brief Configure modus oprandi UIO. |
| 3528 | * \param demod Pointer to demodulator instance. | 3528 | * \param demod Pointer to demodulator instance. |
| @@ -3659,7 +3659,7 @@ rw_error: | |||
| 3659 | return rc; | 3659 | return rc; |
| 3660 | } | 3660 | } |
| 3661 | 3661 | ||
| 3662 | /** | 3662 | /* |
| 3663 | * \fn int ctrl_uio_write() | 3663 | * \fn int ctrl_uio_write() |
| 3664 | * \brief Write to a UIO. | 3664 | * \brief Write to a UIO. |
| 3665 | * \param demod Pointer to demodulator instance. | 3665 | * \param demod Pointer to demodulator instance. |
| @@ -3868,7 +3868,7 @@ rw_error: | |||
| 3868 | /*----------------------------------------------------------------------------*/ | 3868 | /*----------------------------------------------------------------------------*/ |
| 3869 | /* I2C Bridge Functions - begin */ | 3869 | /* I2C Bridge Functions - begin */ |
| 3870 | /*----------------------------------------------------------------------------*/ | 3870 | /*----------------------------------------------------------------------------*/ |
| 3871 | /** | 3871 | /* |
| 3872 | * \fn int ctrl_i2c_bridge() | 3872 | * \fn int ctrl_i2c_bridge() |
| 3873 | * \brief Open or close the I2C switch to tuner. | 3873 | * \brief Open or close the I2C switch to tuner. |
| 3874 | * \param demod Pointer to demodulator instance. | 3874 | * \param demod Pointer to demodulator instance. |
| @@ -3903,7 +3903,7 @@ ctrl_i2c_bridge(struct drx_demod_instance *demod, bool *bridge_closed) | |||
| 3903 | /*----------------------------------------------------------------------------*/ | 3903 | /*----------------------------------------------------------------------------*/ |
| 3904 | /* Smart antenna Functions - begin */ | 3904 | /* Smart antenna Functions - begin */ |
| 3905 | /*----------------------------------------------------------------------------*/ | 3905 | /*----------------------------------------------------------------------------*/ |
| 3906 | /** | 3906 | /* |
| 3907 | * \fn int smart_ant_init() | 3907 | * \fn int smart_ant_init() |
| 3908 | * \brief Initialize Smart Antenna. | 3908 | * \brief Initialize Smart Antenna. |
| 3909 | * \param pointer to struct drx_demod_instance. | 3909 | * \param pointer to struct drx_demod_instance. |
| @@ -4116,7 +4116,7 @@ rw_error: | |||
| 4116 | return rc; | 4116 | return rc; |
| 4117 | } | 4117 | } |
| 4118 | 4118 | ||
| 4119 | /** | 4119 | /* |
| 4120 | * \fn int DRXJ_DAP_SCUAtomicReadWriteBlock() | 4120 | * \fn int DRXJ_DAP_SCUAtomicReadWriteBlock() |
| 4121 | * \brief Basic access routine for SCU atomic read or write access | 4121 | * \brief Basic access routine for SCU atomic read or write access |
| 4122 | * \param dev_addr pointer to i2c dev address | 4122 | * \param dev_addr pointer to i2c dev address |
| @@ -4188,7 +4188,7 @@ rw_error: | |||
| 4188 | 4188 | ||
| 4189 | /*============================================================================*/ | 4189 | /*============================================================================*/ |
| 4190 | 4190 | ||
| 4191 | /** | 4191 | /* |
| 4192 | * \fn int DRXJ_DAP_AtomicReadReg16() | 4192 | * \fn int DRXJ_DAP_AtomicReadReg16() |
| 4193 | * \brief Atomic read of 16 bits words | 4193 | * \brief Atomic read of 16 bits words |
| 4194 | */ | 4194 | */ |
| @@ -4216,7 +4216,7 @@ int drxj_dap_scu_atomic_read_reg16(struct i2c_device_addr *dev_addr, | |||
| 4216 | } | 4216 | } |
| 4217 | 4217 | ||
| 4218 | /*============================================================================*/ | 4218 | /*============================================================================*/ |
| 4219 | /** | 4219 | /* |
| 4220 | * \fn int drxj_dap_scu_atomic_write_reg16() | 4220 | * \fn int drxj_dap_scu_atomic_write_reg16() |
| 4221 | * \brief Atomic read of 16 bits words | 4221 | * \brief Atomic read of 16 bits words |
| 4222 | */ | 4222 | */ |
| @@ -4237,7 +4237,7 @@ int drxj_dap_scu_atomic_write_reg16(struct i2c_device_addr *dev_addr, | |||
| 4237 | } | 4237 | } |
| 4238 | 4238 | ||
| 4239 | /* -------------------------------------------------------------------------- */ | 4239 | /* -------------------------------------------------------------------------- */ |
| 4240 | /** | 4240 | /* |
| 4241 | * \brief Measure result of ADC synchronisation | 4241 | * \brief Measure result of ADC synchronisation |
| 4242 | * \param demod demod instance | 4242 | * \param demod demod instance |
| 4243 | * \param count (returned) count | 4243 | * \param count (returned) count |
| @@ -4297,7 +4297,7 @@ rw_error: | |||
| 4297 | return rc; | 4297 | return rc; |
| 4298 | } | 4298 | } |
| 4299 | 4299 | ||
| 4300 | /** | 4300 | /* |
| 4301 | * \brief Synchronize analog and digital clock domains | 4301 | * \brief Synchronize analog and digital clock domains |
| 4302 | * \param demod demod instance | 4302 | * \param demod demod instance |
| 4303 | * \return int. | 4303 | * \return int. |
| @@ -4365,7 +4365,7 @@ rw_error: | |||
| 4365 | /*== 8VSB & QAM COMMON DATAPATH FUNCTIONS ==*/ | 4365 | /*== 8VSB & QAM COMMON DATAPATH FUNCTIONS ==*/ |
| 4366 | /*============================================================================*/ | 4366 | /*============================================================================*/ |
| 4367 | /*============================================================================*/ | 4367 | /*============================================================================*/ |
| 4368 | /** | 4368 | /* |
| 4369 | * \fn int init_agc () | 4369 | * \fn int init_agc () |
| 4370 | * \brief Initialize AGC for all standards. | 4370 | * \brief Initialize AGC for all standards. |
| 4371 | * \param demod instance of demodulator. | 4371 | * \param demod instance of demodulator. |
| @@ -4741,7 +4741,7 @@ rw_error: | |||
| 4741 | return rc; | 4741 | return rc; |
| 4742 | } | 4742 | } |
| 4743 | 4743 | ||
| 4744 | /** | 4744 | /* |
| 4745 | * \fn int set_frequency () | 4745 | * \fn int set_frequency () |
| 4746 | * \brief Set frequency shift. | 4746 | * \brief Set frequency shift. |
| 4747 | * \param demod instance of demodulator. | 4747 | * \param demod instance of demodulator. |
| @@ -4839,7 +4839,7 @@ rw_error: | |||
| 4839 | return rc; | 4839 | return rc; |
| 4840 | } | 4840 | } |
| 4841 | 4841 | ||
| 4842 | /** | 4842 | /* |
| 4843 | * \fn int get_acc_pkt_err() | 4843 | * \fn int get_acc_pkt_err() |
| 4844 | * \brief Retrieve signal strength for VSB and QAM. | 4844 | * \brief Retrieve signal strength for VSB and QAM. |
| 4845 | * \param demod Pointer to demod instance | 4845 | * \param demod Pointer to demod instance |
| @@ -4891,7 +4891,7 @@ rw_error: | |||
| 4891 | 4891 | ||
| 4892 | /*============================================================================*/ | 4892 | /*============================================================================*/ |
| 4893 | 4893 | ||
| 4894 | /** | 4894 | /* |
| 4895 | * \fn int set_agc_rf () | 4895 | * \fn int set_agc_rf () |
| 4896 | * \brief Configure RF AGC | 4896 | * \brief Configure RF AGC |
| 4897 | * \param demod instance of demodulator. | 4897 | * \param demod instance of demodulator. |
| @@ -5105,7 +5105,7 @@ rw_error: | |||
| 5105 | return rc; | 5105 | return rc; |
| 5106 | } | 5106 | } |
| 5107 | 5107 | ||
| 5108 | /** | 5108 | /* |
| 5109 | * \fn int set_agc_if () | 5109 | * \fn int set_agc_if () |
| 5110 | * \brief Configure If AGC | 5110 | * \brief Configure If AGC |
| 5111 | * \param demod instance of demodulator. | 5111 | * \param demod instance of demodulator. |
| @@ -5334,7 +5334,7 @@ rw_error: | |||
| 5334 | return rc; | 5334 | return rc; |
| 5335 | } | 5335 | } |
| 5336 | 5336 | ||
| 5337 | /** | 5337 | /* |
| 5338 | * \fn int set_iqm_af () | 5338 | * \fn int set_iqm_af () |
| 5339 | * \brief Configure IQM AF registers | 5339 | * \brief Configure IQM AF registers |
| 5340 | * \param demod instance of demodulator. | 5340 | * \param demod instance of demodulator. |
| @@ -5380,7 +5380,7 @@ rw_error: | |||
| 5380 | /*============================================================================*/ | 5380 | /*============================================================================*/ |
| 5381 | /*============================================================================*/ | 5381 | /*============================================================================*/ |
| 5382 | 5382 | ||
| 5383 | /** | 5383 | /* |
| 5384 | * \fn int power_down_vsb () | 5384 | * \fn int power_down_vsb () |
| 5385 | * \brief Powr down QAM related blocks. | 5385 | * \brief Powr down QAM related blocks. |
| 5386 | * \param demod instance of demodulator. | 5386 | * \param demod instance of demodulator. |
| @@ -5478,7 +5478,7 @@ rw_error: | |||
| 5478 | return rc; | 5478 | return rc; |
| 5479 | } | 5479 | } |
| 5480 | 5480 | ||
| 5481 | /** | 5481 | /* |
| 5482 | * \fn int set_vsb_leak_n_gain () | 5482 | * \fn int set_vsb_leak_n_gain () |
| 5483 | * \brief Set ATSC demod. | 5483 | * \brief Set ATSC demod. |
| 5484 | * \param demod instance of demodulator. | 5484 | * \param demod instance of demodulator. |
| @@ -5694,7 +5694,7 @@ rw_error: | |||
| 5694 | return rc; | 5694 | return rc; |
| 5695 | } | 5695 | } |
| 5696 | 5696 | ||
| 5697 | /** | 5697 | /* |
| 5698 | * \fn int set_vsb() | 5698 | * \fn int set_vsb() |
| 5699 | * \brief Set 8VSB demod. | 5699 | * \brief Set 8VSB demod. |
| 5700 | * \param demod instance of demodulator. | 5700 | * \param demod instance of demodulator. |
| @@ -6200,7 +6200,7 @@ rw_error: | |||
| 6200 | return rc; | 6200 | return rc; |
| 6201 | } | 6201 | } |
| 6202 | 6202 | ||
| 6203 | /** | 6203 | /* |
| 6204 | * \fn static short get_vsb_post_rs_pck_err(struct i2c_device_addr *dev_addr, u16 *PckErrs) | 6204 | * \fn static short get_vsb_post_rs_pck_err(struct i2c_device_addr *dev_addr, u16 *PckErrs) |
| 6205 | * \brief Get the values of packet error in 8VSB mode | 6205 | * \brief Get the values of packet error in 8VSB mode |
| 6206 | * \return Error code | 6206 | * \return Error code |
| @@ -6239,7 +6239,7 @@ rw_error: | |||
| 6239 | return rc; | 6239 | return rc; |
| 6240 | } | 6240 | } |
| 6241 | 6241 | ||
| 6242 | /** | 6242 | /* |
| 6243 | * \fn static short GetVSBBer(struct i2c_device_addr *dev_addr, u32 *ber) | 6243 | * \fn static short GetVSBBer(struct i2c_device_addr *dev_addr, u32 *ber) |
| 6244 | * \brief Get the values of ber in VSB mode | 6244 | * \brief Get the values of ber in VSB mode |
| 6245 | * \return Error code | 6245 | * \return Error code |
| @@ -6284,7 +6284,7 @@ rw_error: | |||
| 6284 | return rc; | 6284 | return rc; |
| 6285 | } | 6285 | } |
| 6286 | 6286 | ||
| 6287 | /** | 6287 | /* |
| 6288 | * \fn static short get_vs_bpre_viterbi_ber(struct i2c_device_addr *dev_addr, u32 *ber) | 6288 | * \fn static short get_vs_bpre_viterbi_ber(struct i2c_device_addr *dev_addr, u32 *ber) |
| 6289 | * \brief Get the values of ber in VSB mode | 6289 | * \brief Get the values of ber in VSB mode |
| 6290 | * \return Error code | 6290 | * \return Error code |
| @@ -6306,7 +6306,7 @@ static int get_vs_bpre_viterbi_ber(struct i2c_device_addr *dev_addr, | |||
| 6306 | return 0; | 6306 | return 0; |
| 6307 | } | 6307 | } |
| 6308 | 6308 | ||
| 6309 | /** | 6309 | /* |
| 6310 | * \fn static int get_vsbmer(struct i2c_device_addr *dev_addr, u16 *mer) | 6310 | * \fn static int get_vsbmer(struct i2c_device_addr *dev_addr, u16 *mer) |
| 6311 | * \brief Get the values of MER | 6311 | * \brief Get the values of MER |
| 6312 | * \return Error code | 6312 | * \return Error code |
| @@ -6340,7 +6340,7 @@ rw_error: | |||
| 6340 | /*============================================================================*/ | 6340 | /*============================================================================*/ |
| 6341 | /*============================================================================*/ | 6341 | /*============================================================================*/ |
| 6342 | 6342 | ||
| 6343 | /** | 6343 | /* |
| 6344 | * \fn int power_down_qam () | 6344 | * \fn int power_down_qam () |
| 6345 | * \brief Powr down QAM related blocks. | 6345 | * \brief Powr down QAM related blocks. |
| 6346 | * \param demod instance of demodulator. | 6346 | * \param demod instance of demodulator. |
| @@ -6444,7 +6444,7 @@ rw_error: | |||
| 6444 | 6444 | ||
| 6445 | /*============================================================================*/ | 6445 | /*============================================================================*/ |
| 6446 | 6446 | ||
| 6447 | /** | 6447 | /* |
| 6448 | * \fn int set_qam_measurement () | 6448 | * \fn int set_qam_measurement () |
| 6449 | * \brief Setup of the QAM Measuremnt intervals for signal quality | 6449 | * \brief Setup of the QAM Measuremnt intervals for signal quality |
| 6450 | * \param demod instance of demod. | 6450 | * \param demod instance of demod. |
| @@ -6656,7 +6656,7 @@ rw_error: | |||
| 6656 | 6656 | ||
| 6657 | /*============================================================================*/ | 6657 | /*============================================================================*/ |
| 6658 | 6658 | ||
| 6659 | /** | 6659 | /* |
| 6660 | * \fn int set_qam16 () | 6660 | * \fn int set_qam16 () |
| 6661 | * \brief QAM16 specific setup | 6661 | * \brief QAM16 specific setup |
| 6662 | * \param demod instance of demod. | 6662 | * \param demod instance of demod. |
| @@ -6891,7 +6891,7 @@ rw_error: | |||
| 6891 | 6891 | ||
| 6892 | /*============================================================================*/ | 6892 | /*============================================================================*/ |
| 6893 | 6893 | ||
| 6894 | /** | 6894 | /* |
| 6895 | * \fn int set_qam32 () | 6895 | * \fn int set_qam32 () |
| 6896 | * \brief QAM32 specific setup | 6896 | * \brief QAM32 specific setup |
| 6897 | * \param demod instance of demod. | 6897 | * \param demod instance of demod. |
| @@ -7126,7 +7126,7 @@ rw_error: | |||
| 7126 | 7126 | ||
| 7127 | /*============================================================================*/ | 7127 | /*============================================================================*/ |
| 7128 | 7128 | ||
| 7129 | /** | 7129 | /* |
| 7130 | * \fn int set_qam64 () | 7130 | * \fn int set_qam64 () |
| 7131 | * \brief QAM64 specific setup | 7131 | * \brief QAM64 specific setup |
| 7132 | * \param demod instance of demod. | 7132 | * \param demod instance of demod. |
| @@ -7362,7 +7362,7 @@ rw_error: | |||
| 7362 | 7362 | ||
| 7363 | /*============================================================================*/ | 7363 | /*============================================================================*/ |
| 7364 | 7364 | ||
| 7365 | /** | 7365 | /* |
| 7366 | * \fn int set_qam128 () | 7366 | * \fn int set_qam128 () |
| 7367 | * \brief QAM128 specific setup | 7367 | * \brief QAM128 specific setup |
| 7368 | * \param demod: instance of demod. | 7368 | * \param demod: instance of demod. |
| @@ -7597,7 +7597,7 @@ rw_error: | |||
| 7597 | 7597 | ||
| 7598 | /*============================================================================*/ | 7598 | /*============================================================================*/ |
| 7599 | 7599 | ||
| 7600 | /** | 7600 | /* |
| 7601 | * \fn int set_qam256 () | 7601 | * \fn int set_qam256 () |
| 7602 | * \brief QAM256 specific setup | 7602 | * \brief QAM256 specific setup |
| 7603 | * \param demod: instance of demod. | 7603 | * \param demod: instance of demod. |
| @@ -7835,7 +7835,7 @@ rw_error: | |||
| 7835 | #define QAM_SET_OP_CONSTELLATION 0x2 | 7835 | #define QAM_SET_OP_CONSTELLATION 0x2 |
| 7836 | #define QAM_SET_OP_SPECTRUM 0X4 | 7836 | #define QAM_SET_OP_SPECTRUM 0X4 |
| 7837 | 7837 | ||
| 7838 | /** | 7838 | /* |
| 7839 | * \fn int set_qam () | 7839 | * \fn int set_qam () |
| 7840 | * \brief Set QAM demod. | 7840 | * \brief Set QAM demod. |
| 7841 | * \param demod: instance of demod. | 7841 | * \param demod: instance of demod. |
| @@ -8845,7 +8845,7 @@ rw_error: | |||
| 8845 | #define DEMOD_LOCKED 0x1 | 8845 | #define DEMOD_LOCKED 0x1 |
| 8846 | #define SYNC_FLIPPED 0x2 | 8846 | #define SYNC_FLIPPED 0x2 |
| 8847 | #define SPEC_MIRRORED 0x4 | 8847 | #define SPEC_MIRRORED 0x4 |
| 8848 | /** | 8848 | /* |
| 8849 | * \fn int qam64auto () | 8849 | * \fn int qam64auto () |
| 8850 | * \brief auto do sync pattern switching and mirroring. | 8850 | * \brief auto do sync pattern switching and mirroring. |
| 8851 | * \param demod: instance of demod. | 8851 | * \param demod: instance of demod. |
| @@ -8993,7 +8993,7 @@ rw_error: | |||
| 8993 | return rc; | 8993 | return rc; |
| 8994 | } | 8994 | } |
| 8995 | 8995 | ||
| 8996 | /** | 8996 | /* |
| 8997 | * \fn int qam256auto () | 8997 | * \fn int qam256auto () |
| 8998 | * \brief auto do sync pattern switching and mirroring. | 8998 | * \brief auto do sync pattern switching and mirroring. |
| 8999 | * \param demod: instance of demod. | 8999 | * \param demod: instance of demod. |
| @@ -9077,7 +9077,7 @@ rw_error: | |||
| 9077 | return rc; | 9077 | return rc; |
| 9078 | } | 9078 | } |
| 9079 | 9079 | ||
| 9080 | /** | 9080 | /* |
| 9081 | * \fn int set_qam_channel () | 9081 | * \fn int set_qam_channel () |
| 9082 | * \brief Set QAM channel according to the requested constellation. | 9082 | * \brief Set QAM channel according to the requested constellation. |
| 9083 | * \param demod: instance of demod. | 9083 | * \param demod: instance of demod. |
| @@ -9284,7 +9284,7 @@ rw_error: | |||
| 9284 | 9284 | ||
| 9285 | /*============================================================================*/ | 9285 | /*============================================================================*/ |
| 9286 | 9286 | ||
| 9287 | /** | 9287 | /* |
| 9288 | * \fn static short get_qamrs_err_count(struct i2c_device_addr *dev_addr) | 9288 | * \fn static short get_qamrs_err_count(struct i2c_device_addr *dev_addr) |
| 9289 | * \brief Get RS error count in QAM mode (used for post RS BER calculation) | 9289 | * \brief Get RS error count in QAM mode (used for post RS BER calculation) |
| 9290 | * \return Error code | 9290 | * \return Error code |
| @@ -9355,7 +9355,7 @@ rw_error: | |||
| 9355 | 9355 | ||
| 9356 | /*============================================================================*/ | 9356 | /*============================================================================*/ |
| 9357 | 9357 | ||
| 9358 | /** | 9358 | /* |
| 9359 | * \fn int get_sig_strength() | 9359 | * \fn int get_sig_strength() |
| 9360 | * \brief Retrieve signal strength for VSB and QAM. | 9360 | * \brief Retrieve signal strength for VSB and QAM. |
| 9361 | * \param demod Pointer to demod instance | 9361 | * \param demod Pointer to demod instance |
| @@ -9435,7 +9435,7 @@ rw_error: | |||
| 9435 | return rc; | 9435 | return rc; |
| 9436 | } | 9436 | } |
| 9437 | 9437 | ||
| 9438 | /** | 9438 | /* |
| 9439 | * \fn int ctrl_get_qam_sig_quality() | 9439 | * \fn int ctrl_get_qam_sig_quality() |
| 9440 | * \brief Retrieve QAM signal quality from device. | 9440 | * \brief Retrieve QAM signal quality from device. |
| 9441 | * \param devmod Pointer to demodulator instance. | 9441 | * \param devmod Pointer to demodulator instance. |
| @@ -9721,7 +9721,7 @@ rw_error: | |||
| 9721 | */ | 9721 | */ |
| 9722 | /* -------------------------------------------------------------------------- */ | 9722 | /* -------------------------------------------------------------------------- */ |
| 9723 | 9723 | ||
| 9724 | /** | 9724 | /* |
| 9725 | * \fn int power_down_atv () | 9725 | * \fn int power_down_atv () |
| 9726 | * \brief Power down ATV. | 9726 | * \brief Power down ATV. |
| 9727 | * \param demod instance of demodulator | 9727 | * \param demod instance of demodulator |
| @@ -9822,7 +9822,7 @@ rw_error: | |||
| 9822 | 9822 | ||
| 9823 | /*============================================================================*/ | 9823 | /*============================================================================*/ |
| 9824 | 9824 | ||
| 9825 | /** | 9825 | /* |
| 9826 | * \brief Power up AUD. | 9826 | * \brief Power up AUD. |
| 9827 | * \param demod instance of demodulator | 9827 | * \param demod instance of demodulator |
| 9828 | * \return int. | 9828 | * \return int. |
| @@ -9850,7 +9850,7 @@ rw_error: | |||
| 9850 | return rc; | 9850 | return rc; |
| 9851 | } | 9851 | } |
| 9852 | 9852 | ||
| 9853 | /** | 9853 | /* |
| 9854 | * \fn int set_orx_nsu_aox() | 9854 | * \fn int set_orx_nsu_aox() |
| 9855 | * \brief Configure OrxNsuAox for OOB | 9855 | * \brief Configure OrxNsuAox for OOB |
| 9856 | * \param demod instance of demodulator. | 9856 | * \param demod instance of demodulator. |
| @@ -9884,7 +9884,7 @@ rw_error: | |||
| 9884 | return rc; | 9884 | return rc; |
| 9885 | } | 9885 | } |
| 9886 | 9886 | ||
| 9887 | /** | 9887 | /* |
| 9888 | * \fn int ctrl_set_oob() | 9888 | * \fn int ctrl_set_oob() |
| 9889 | * \brief Set OOB channel to be used. | 9889 | * \brief Set OOB channel to be used. |
| 9890 | * \param demod instance of demodulator | 9890 | * \param demod instance of demodulator |
| @@ -9986,9 +9986,9 @@ static int ctrl_set_oob(struct drx_demod_instance *demod, struct drxoob *oob_par | |||
| 9986 | 20; | 9986 | 20; |
| 9987 | } | 9987 | } |
| 9988 | 9988 | ||
| 9989 | /*********/ | 9989 | /********/ |
| 9990 | /* Stop */ | 9990 | /* Stop */ |
| 9991 | /*********/ | 9991 | /********/ |
| 9992 | rc = drxj_dap_write_reg16(dev_addr, ORX_COMM_EXEC__A, ORX_COMM_EXEC_STOP, 0); | 9992 | rc = drxj_dap_write_reg16(dev_addr, ORX_COMM_EXEC__A, ORX_COMM_EXEC_STOP, 0); |
| 9993 | if (rc != 0) { | 9993 | if (rc != 0) { |
| 9994 | pr_err("error %d\n", rc); | 9994 | pr_err("error %d\n", rc); |
| @@ -10004,9 +10004,9 @@ static int ctrl_set_oob(struct drx_demod_instance *demod, struct drxoob *oob_par | |||
| 10004 | pr_err("error %d\n", rc); | 10004 | pr_err("error %d\n", rc); |
| 10005 | goto rw_error; | 10005 | goto rw_error; |
| 10006 | } | 10006 | } |
| 10007 | /*********/ | 10007 | /********/ |
| 10008 | /* Reset */ | 10008 | /* Reset */ |
| 10009 | /*********/ | 10009 | /********/ |
| 10010 | scu_cmd.command = SCU_RAM_COMMAND_STANDARD_OOB | 10010 | scu_cmd.command = SCU_RAM_COMMAND_STANDARD_OOB |
| 10011 | | SCU_RAM_COMMAND_CMD_DEMOD_RESET; | 10011 | | SCU_RAM_COMMAND_CMD_DEMOD_RESET; |
| 10012 | scu_cmd.parameter_len = 0; | 10012 | scu_cmd.parameter_len = 0; |
| @@ -10017,9 +10017,9 @@ static int ctrl_set_oob(struct drx_demod_instance *demod, struct drxoob *oob_par | |||
| 10017 | pr_err("error %d\n", rc); | 10017 | pr_err("error %d\n", rc); |
| 10018 | goto rw_error; | 10018 | goto rw_error; |
| 10019 | } | 10019 | } |
| 10020 | /***********/ | 10020 | /**********/ |
| 10021 | /* SET_ENV */ | 10021 | /* SET_ENV */ |
| 10022 | /***********/ | 10022 | /**********/ |
| 10023 | /* set frequency, spectrum inversion and data rate */ | 10023 | /* set frequency, spectrum inversion and data rate */ |
| 10024 | scu_cmd.command = SCU_RAM_COMMAND_STANDARD_OOB | 10024 | scu_cmd.command = SCU_RAM_COMMAND_STANDARD_OOB |
| 10025 | | SCU_RAM_COMMAND_CMD_DEMOD_SET_ENV; | 10025 | | SCU_RAM_COMMAND_CMD_DEMOD_SET_ENV; |
| @@ -10376,9 +10376,9 @@ static int ctrl_set_oob(struct drx_demod_instance *demod, struct drxoob *oob_par | |||
| 10376 | pr_err("error %d\n", rc); | 10376 | pr_err("error %d\n", rc); |
| 10377 | goto rw_error; | 10377 | goto rw_error; |
| 10378 | } | 10378 | } |
| 10379 | /*********/ | 10379 | /********/ |
| 10380 | /* Start */ | 10380 | /* Start */ |
| 10381 | /*********/ | 10381 | /********/ |
| 10382 | scu_cmd.command = SCU_RAM_COMMAND_STANDARD_OOB | 10382 | scu_cmd.command = SCU_RAM_COMMAND_STANDARD_OOB |
| 10383 | | SCU_RAM_COMMAND_CMD_DEMOD_START; | 10383 | | SCU_RAM_COMMAND_CMD_DEMOD_START; |
| 10384 | scu_cmd.parameter_len = 0; | 10384 | scu_cmd.parameter_len = 0; |
| @@ -10419,7 +10419,7 @@ rw_error: | |||
| 10419 | /*============================================================================= | 10419 | /*============================================================================= |
| 10420 | ===== ctrl_set_channel() ========================================================== | 10420 | ===== ctrl_set_channel() ========================================================== |
| 10421 | ===========================================================================*/ | 10421 | ===========================================================================*/ |
| 10422 | /** | 10422 | /* |
| 10423 | * \fn int ctrl_set_channel() | 10423 | * \fn int ctrl_set_channel() |
| 10424 | * \brief Select a new transmission channel. | 10424 | * \brief Select a new transmission channel. |
| 10425 | * \param demod instance of demod. | 10425 | * \param demod instance of demod. |
| @@ -10652,7 +10652,7 @@ rw_error: | |||
| 10652 | ===== SigQuality() ========================================================== | 10652 | ===== SigQuality() ========================================================== |
| 10653 | ===========================================================================*/ | 10653 | ===========================================================================*/ |
| 10654 | 10654 | ||
| 10655 | /** | 10655 | /* |
| 10656 | * \fn int ctrl_sig_quality() | 10656 | * \fn int ctrl_sig_quality() |
| 10657 | * \brief Retrieve signal quality form device. | 10657 | * \brief Retrieve signal quality form device. |
| 10658 | * \param devmod Pointer to demodulator instance. | 10658 | * \param devmod Pointer to demodulator instance. |
| @@ -10768,7 +10768,7 @@ rw_error: | |||
| 10768 | 10768 | ||
| 10769 | /*============================================================================*/ | 10769 | /*============================================================================*/ |
| 10770 | 10770 | ||
| 10771 | /** | 10771 | /* |
| 10772 | * \fn int ctrl_lock_status() | 10772 | * \fn int ctrl_lock_status() |
| 10773 | * \brief Retrieve lock status . | 10773 | * \brief Retrieve lock status . |
| 10774 | * \param dev_addr Pointer to demodulator device address. | 10774 | * \param dev_addr Pointer to demodulator device address. |
| @@ -10856,7 +10856,7 @@ rw_error: | |||
| 10856 | 10856 | ||
| 10857 | /*============================================================================*/ | 10857 | /*============================================================================*/ |
| 10858 | 10858 | ||
| 10859 | /** | 10859 | /* |
| 10860 | * \fn int ctrl_set_standard() | 10860 | * \fn int ctrl_set_standard() |
| 10861 | * \brief Set modulation standard to be used. | 10861 | * \brief Set modulation standard to be used. |
| 10862 | * \param standard Modulation standard. | 10862 | * \param standard Modulation standard. |
| @@ -11012,7 +11012,7 @@ static void drxj_reset_mode(struct drxj_data *ext_attr) | |||
| 11012 | ext_attr->vsb_pre_saw_cfg.use_pre_saw = true; | 11012 | ext_attr->vsb_pre_saw_cfg.use_pre_saw = true; |
| 11013 | } | 11013 | } |
| 11014 | 11014 | ||
| 11015 | /** | 11015 | /* |
| 11016 | * \fn int ctrl_power_mode() | 11016 | * \fn int ctrl_power_mode() |
| 11017 | * \brief Set the power mode of the device to the specified power mode | 11017 | * \brief Set the power mode of the device to the specified power mode |
| 11018 | * \param demod Pointer to demodulator instance. | 11018 | * \param demod Pointer to demodulator instance. |
| @@ -11171,7 +11171,7 @@ rw_error: | |||
| 11171 | /*== CTRL Set/Get Config related functions ===================================*/ | 11171 | /*== CTRL Set/Get Config related functions ===================================*/ |
| 11172 | /*============================================================================*/ | 11172 | /*============================================================================*/ |
| 11173 | 11173 | ||
| 11174 | /** | 11174 | /* |
| 11175 | * \fn int ctrl_set_cfg_pre_saw() | 11175 | * \fn int ctrl_set_cfg_pre_saw() |
| 11176 | * \brief Set Pre-saw reference. | 11176 | * \brief Set Pre-saw reference. |
| 11177 | * \param demod demod instance | 11177 | * \param demod demod instance |
| @@ -11234,7 +11234,7 @@ rw_error: | |||
| 11234 | 11234 | ||
| 11235 | /*============================================================================*/ | 11235 | /*============================================================================*/ |
| 11236 | 11236 | ||
| 11237 | /** | 11237 | /* |
| 11238 | * \fn int ctrl_set_cfg_afe_gain() | 11238 | * \fn int ctrl_set_cfg_afe_gain() |
| 11239 | * \brief Set AFE Gain. | 11239 | * \brief Set AFE Gain. |
| 11240 | * \param demod demod instance | 11240 | * \param demod demod instance |
| @@ -11324,7 +11324,7 @@ static int drx_ctrl_u_code(struct drx_demod_instance *demod, | |||
| 11324 | enum drxu_code_action action); | 11324 | enum drxu_code_action action); |
| 11325 | static int drxj_set_lna_state(struct drx_demod_instance *demod, bool state); | 11325 | static int drxj_set_lna_state(struct drx_demod_instance *demod, bool state); |
| 11326 | 11326 | ||
| 11327 | /** | 11327 | /* |
| 11328 | * \fn drxj_open() | 11328 | * \fn drxj_open() |
| 11329 | * \brief Open the demod instance, configure device, configure drxdriver | 11329 | * \brief Open the demod instance, configure device, configure drxdriver |
| 11330 | * \return Status_t Return status. | 11330 | * \return Status_t Return status. |
| @@ -11543,7 +11543,7 @@ rw_error: | |||
| 11543 | } | 11543 | } |
| 11544 | 11544 | ||
| 11545 | /*============================================================================*/ | 11545 | /*============================================================================*/ |
| 11546 | /** | 11546 | /* |
| 11547 | * \fn drxj_close() | 11547 | * \fn drxj_close() |
| 11548 | * \brief Close the demod instance, power down the device | 11548 | * \brief Close the demod instance, power down the device |
| 11549 | * \return Status_t Return status. | 11549 | * \return Status_t Return status. |
| @@ -11594,7 +11594,7 @@ rw_error: | |||
| 11594 | * Microcode related functions | 11594 | * Microcode related functions |
| 11595 | */ | 11595 | */ |
| 11596 | 11596 | ||
| 11597 | /** | 11597 | /* |
| 11598 | * drx_u_code_compute_crc - Compute CRC of block of microcode data. | 11598 | * drx_u_code_compute_crc - Compute CRC of block of microcode data. |
| 11599 | * @block_data: Pointer to microcode data. | 11599 | * @block_data: Pointer to microcode data. |
| 11600 | * @nr_words: Size of microcode block (number of 16 bits words). | 11600 | * @nr_words: Size of microcode block (number of 16 bits words). |
| @@ -11622,7 +11622,7 @@ static u16 drx_u_code_compute_crc(u8 *block_data, u16 nr_words) | |||
| 11622 | return (u16)(crc_word >> 16); | 11622 | return (u16)(crc_word >> 16); |
| 11623 | } | 11623 | } |
| 11624 | 11624 | ||
| 11625 | /** | 11625 | /* |
| 11626 | * drx_check_firmware - checks if the loaded firmware is valid | 11626 | * drx_check_firmware - checks if the loaded firmware is valid |
| 11627 | * | 11627 | * |
| 11628 | * @demod: demod structure | 11628 | * @demod: demod structure |
| @@ -11708,7 +11708,7 @@ eof: | |||
| 11708 | return -EINVAL; | 11708 | return -EINVAL; |
| 11709 | } | 11709 | } |
| 11710 | 11710 | ||
| 11711 | /** | 11711 | /* |
| 11712 | * drx_ctrl_u_code - Handle microcode upload or verify. | 11712 | * drx_ctrl_u_code - Handle microcode upload or verify. |
| 11713 | * @dev_addr: Address of device. | 11713 | * @dev_addr: Address of device. |
| 11714 | * @mc_info: Pointer to information about microcode data. | 11714 | * @mc_info: Pointer to information about microcode data. |
diff --git a/drivers/media/dvb-frontends/drx39xyj/drxj.h b/drivers/media/dvb-frontends/drx39xyj/drxj.h index 6c5b8f78f9f6..d3ee1c23bb2f 100644 --- a/drivers/media/dvb-frontends/drx39xyj/drxj.h +++ b/drivers/media/dvb-frontends/drx39xyj/drxj.h | |||
| @@ -69,15 +69,15 @@ TYPEDEFS | |||
| 69 | 69 | ||
| 70 | struct drxjscu_cmd { | 70 | struct drxjscu_cmd { |
| 71 | u16 command; | 71 | u16 command; |
| 72 | /**< Command number */ | 72 | /*< Command number */ |
| 73 | u16 parameter_len; | 73 | u16 parameter_len; |
| 74 | /**< Data length in byte */ | 74 | /*< Data length in byte */ |
| 75 | u16 result_len; | 75 | u16 result_len; |
| 76 | /**< result length in byte */ | 76 | /*< result length in byte */ |
| 77 | u16 *parameter; | 77 | u16 *parameter; |
| 78 | /**< General purpous param */ | 78 | /*< General purpous param */ |
| 79 | u16 *result; | 79 | u16 *result; |
| 80 | /**< General purpous param */}; | 80 | /*< General purpous param */}; |
| 81 | 81 | ||
| 82 | /*============================================================================*/ | 82 | /*============================================================================*/ |
| 83 | /*============================================================================*/ | 83 | /*============================================================================*/ |
| @@ -130,7 +130,7 @@ TYPEDEFS | |||
| 130 | 130 | ||
| 131 | DRXJ_CFG_MAX /* dummy, never to be used */}; | 131 | DRXJ_CFG_MAX /* dummy, never to be used */}; |
| 132 | 132 | ||
| 133 | /** | 133 | /* |
| 134 | * /struct enum drxj_cfg_smart_ant_io * smart antenna i/o. | 134 | * /struct enum drxj_cfg_smart_ant_io * smart antenna i/o. |
| 135 | */ | 135 | */ |
| 136 | enum drxj_cfg_smart_ant_io { | 136 | enum drxj_cfg_smart_ant_io { |
| @@ -138,7 +138,7 @@ enum drxj_cfg_smart_ant_io { | |||
| 138 | DRXJ_SMT_ANT_INPUT | 138 | DRXJ_SMT_ANT_INPUT |
| 139 | }; | 139 | }; |
| 140 | 140 | ||
| 141 | /** | 141 | /* |
| 142 | * /struct struct drxj_cfg_smart_ant * Set smart antenna. | 142 | * /struct struct drxj_cfg_smart_ant * Set smart antenna. |
| 143 | */ | 143 | */ |
| 144 | struct drxj_cfg_smart_ant { | 144 | struct drxj_cfg_smart_ant { |
| @@ -146,7 +146,7 @@ enum drxj_cfg_smart_ant_io { | |||
| 146 | u16 ctrl_data; | 146 | u16 ctrl_data; |
| 147 | }; | 147 | }; |
| 148 | 148 | ||
| 149 | /** | 149 | /* |
| 150 | * /struct DRXJAGCSTATUS_t | 150 | * /struct DRXJAGCSTATUS_t |
| 151 | * AGC status information from the DRXJ-IQM-AF. | 151 | * AGC status information from the DRXJ-IQM-AF. |
| 152 | */ | 152 | */ |
| @@ -158,7 +158,7 @@ struct drxj_agc_status { | |||
| 158 | 158 | ||
| 159 | /* DRXJ_CFG_AGC_RF, DRXJ_CFG_AGC_IF */ | 159 | /* DRXJ_CFG_AGC_RF, DRXJ_CFG_AGC_IF */ |
| 160 | 160 | ||
| 161 | /** | 161 | /* |
| 162 | * /struct enum drxj_agc_ctrl_mode * Available AGCs modes in the DRXJ. | 162 | * /struct enum drxj_agc_ctrl_mode * Available AGCs modes in the DRXJ. |
| 163 | */ | 163 | */ |
| 164 | enum drxj_agc_ctrl_mode { | 164 | enum drxj_agc_ctrl_mode { |
| @@ -166,7 +166,7 @@ struct drxj_agc_status { | |||
| 166 | DRX_AGC_CTRL_USER, | 166 | DRX_AGC_CTRL_USER, |
| 167 | DRX_AGC_CTRL_OFF}; | 167 | DRX_AGC_CTRL_OFF}; |
| 168 | 168 | ||
| 169 | /** | 169 | /* |
| 170 | * /struct struct drxj_cfg_agc * Generic interface for all AGCs present on the DRXJ. | 170 | * /struct struct drxj_cfg_agc * Generic interface for all AGCs present on the DRXJ. |
| 171 | */ | 171 | */ |
| 172 | struct drxj_cfg_agc { | 172 | struct drxj_cfg_agc { |
| @@ -182,7 +182,7 @@ struct drxj_agc_status { | |||
| 182 | 182 | ||
| 183 | /* DRXJ_CFG_PRE_SAW */ | 183 | /* DRXJ_CFG_PRE_SAW */ |
| 184 | 184 | ||
| 185 | /** | 185 | /* |
| 186 | * /struct struct drxj_cfg_pre_saw * Interface to configure pre SAW sense. | 186 | * /struct struct drxj_cfg_pre_saw * Interface to configure pre SAW sense. |
| 187 | */ | 187 | */ |
| 188 | struct drxj_cfg_pre_saw { | 188 | struct drxj_cfg_pre_saw { |
| @@ -192,14 +192,14 @@ struct drxj_agc_status { | |||
| 192 | 192 | ||
| 193 | /* DRXJ_CFG_AFE_GAIN */ | 193 | /* DRXJ_CFG_AFE_GAIN */ |
| 194 | 194 | ||
| 195 | /** | 195 | /* |
| 196 | * /struct struct drxj_cfg_afe_gain * Interface to configure gain of AFE (LNA + PGA). | 196 | * /struct struct drxj_cfg_afe_gain * Interface to configure gain of AFE (LNA + PGA). |
| 197 | */ | 197 | */ |
| 198 | struct drxj_cfg_afe_gain { | 198 | struct drxj_cfg_afe_gain { |
| 199 | enum drx_standard standard; /* standard to which these settings apply */ | 199 | enum drx_standard standard; /* standard to which these settings apply */ |
| 200 | u16 gain; /* gain in 0.1 dB steps, DRXJ range 140 .. 335 */}; | 200 | u16 gain; /* gain in 0.1 dB steps, DRXJ range 140 .. 335 */}; |
| 201 | 201 | ||
| 202 | /** | 202 | /* |
| 203 | * /struct drxjrs_errors | 203 | * /struct drxjrs_errors |
| 204 | * Available failure information in DRXJ_FEC_RS. | 204 | * Available failure information in DRXJ_FEC_RS. |
| 205 | * | 205 | * |
| @@ -208,25 +208,25 @@ struct drxj_agc_status { | |||
| 208 | */ | 208 | */ |
| 209 | struct drxjrs_errors { | 209 | struct drxjrs_errors { |
| 210 | u16 nr_bit_errors; | 210 | u16 nr_bit_errors; |
| 211 | /**< no of pre RS bit errors */ | 211 | /*< no of pre RS bit errors */ |
| 212 | u16 nr_symbol_errors; | 212 | u16 nr_symbol_errors; |
| 213 | /**< no of pre RS symbol errors */ | 213 | /*< no of pre RS symbol errors */ |
| 214 | u16 nr_packet_errors; | 214 | u16 nr_packet_errors; |
| 215 | /**< no of pre RS packet errors */ | 215 | /*< no of pre RS packet errors */ |
| 216 | u16 nr_failures; | 216 | u16 nr_failures; |
| 217 | /**< no of post RS failures to decode */ | 217 | /*< no of post RS failures to decode */ |
| 218 | u16 nr_snc_par_fail_count; | 218 | u16 nr_snc_par_fail_count; |
| 219 | /**< no of post RS bit erros */ | 219 | /*< no of post RS bit erros */ |
| 220 | }; | 220 | }; |
| 221 | 221 | ||
| 222 | /** | 222 | /* |
| 223 | * /struct struct drxj_cfg_vsb_misc * symbol error rate | 223 | * /struct struct drxj_cfg_vsb_misc * symbol error rate |
| 224 | */ | 224 | */ |
| 225 | struct drxj_cfg_vsb_misc { | 225 | struct drxj_cfg_vsb_misc { |
| 226 | u32 symb_error; | 226 | u32 symb_error; |
| 227 | /**< symbol error rate sps */}; | 227 | /*< symbol error rate sps */}; |
| 228 | 228 | ||
| 229 | /** | 229 | /* |
| 230 | * /enum enum drxj_mpeg_output_clock_rate * Mpeg output clock rate. | 230 | * /enum enum drxj_mpeg_output_clock_rate * Mpeg output clock rate. |
| 231 | * | 231 | * |
| 232 | */ | 232 | */ |
| @@ -234,7 +234,7 @@ struct drxj_agc_status { | |||
| 234 | DRXJ_MPEG_START_WIDTH_1CLKCYC, | 234 | DRXJ_MPEG_START_WIDTH_1CLKCYC, |
| 235 | DRXJ_MPEG_START_WIDTH_8CLKCYC}; | 235 | DRXJ_MPEG_START_WIDTH_8CLKCYC}; |
| 236 | 236 | ||
| 237 | /** | 237 | /* |
| 238 | * /enum enum drxj_mpeg_output_clock_rate * Mpeg output clock rate. | 238 | * /enum enum drxj_mpeg_output_clock_rate * Mpeg output clock rate. |
| 239 | * | 239 | * |
| 240 | */ | 240 | */ |
| @@ -247,20 +247,20 @@ struct drxj_agc_status { | |||
| 247 | DRXJ_MPEGOUTPUT_CLOCK_RATE_25313K, | 247 | DRXJ_MPEGOUTPUT_CLOCK_RATE_25313K, |
| 248 | DRXJ_MPEGOUTPUT_CLOCK_RATE_21696K}; | 248 | DRXJ_MPEGOUTPUT_CLOCK_RATE_21696K}; |
| 249 | 249 | ||
| 250 | /** | 250 | /* |
| 251 | * /struct DRXJCfgMisc_t | 251 | * /struct DRXJCfgMisc_t |
| 252 | * Change TEI bit of MPEG output | 252 | * Change TEI bit of MPEG output |
| 253 | * reverse MPEG output bit order | 253 | * reverse MPEG output bit order |
| 254 | * set MPEG output clock rate | 254 | * set MPEG output clock rate |
| 255 | */ | 255 | */ |
| 256 | struct drxj_cfg_mpeg_output_misc { | 256 | struct drxj_cfg_mpeg_output_misc { |
| 257 | bool disable_tei_handling; /**< if true pass (not change) TEI bit */ | 257 | bool disable_tei_handling; /*< if true pass (not change) TEI bit */ |
| 258 | bool bit_reverse_mpeg_outout; /**< if true, parallel: msb on MD0; serial: lsb out first */ | 258 | bool bit_reverse_mpeg_outout; /*< if true, parallel: msb on MD0; serial: lsb out first */ |
| 259 | enum drxj_mpeg_output_clock_rate mpeg_output_clock_rate; | 259 | enum drxj_mpeg_output_clock_rate mpeg_output_clock_rate; |
| 260 | /**< set MPEG output clock rate that overwirtes the derived one from symbol rate */ | 260 | /*< set MPEG output clock rate that overwirtes the derived one from symbol rate */ |
| 261 | enum drxj_mpeg_start_width mpeg_start_width; /**< set MPEG output start width */}; | 261 | enum drxj_mpeg_start_width mpeg_start_width; /*< set MPEG output start width */}; |
| 262 | 262 | ||
| 263 | /** | 263 | /* |
| 264 | * /enum enum drxj_xtal_freq * Supported external crystal reference frequency. | 264 | * /enum enum drxj_xtal_freq * Supported external crystal reference frequency. |
| 265 | */ | 265 | */ |
| 266 | enum drxj_xtal_freq { | 266 | enum drxj_xtal_freq { |
| @@ -269,21 +269,21 @@ struct drxj_agc_status { | |||
| 269 | DRXJ_XTAL_FREQ_20P25MHZ, | 269 | DRXJ_XTAL_FREQ_20P25MHZ, |
| 270 | DRXJ_XTAL_FREQ_4MHZ}; | 270 | DRXJ_XTAL_FREQ_4MHZ}; |
| 271 | 271 | ||
| 272 | /** | 272 | /* |
| 273 | * /enum enum drxj_xtal_freq * Supported external crystal reference frequency. | 273 | * /enum enum drxj_xtal_freq * Supported external crystal reference frequency. |
| 274 | */ | 274 | */ |
| 275 | enum drxji2c_speed { | 275 | enum drxji2c_speed { |
| 276 | DRXJ_I2C_SPEED_400KBPS, | 276 | DRXJ_I2C_SPEED_400KBPS, |
| 277 | DRXJ_I2C_SPEED_100KBPS}; | 277 | DRXJ_I2C_SPEED_100KBPS}; |
| 278 | 278 | ||
| 279 | /** | 279 | /* |
| 280 | * /struct struct drxj_cfg_hw_cfg * Get hw configuration, such as crystal reference frequency, I2C speed, etc... | 280 | * /struct struct drxj_cfg_hw_cfg * Get hw configuration, such as crystal reference frequency, I2C speed, etc... |
| 281 | */ | 281 | */ |
| 282 | struct drxj_cfg_hw_cfg { | 282 | struct drxj_cfg_hw_cfg { |
| 283 | enum drxj_xtal_freq xtal_freq; | 283 | enum drxj_xtal_freq xtal_freq; |
| 284 | /**< crystal reference frequency */ | 284 | /*< crystal reference frequency */ |
| 285 | enum drxji2c_speed i2c_speed; | 285 | enum drxji2c_speed i2c_speed; |
| 286 | /**< 100 or 400 kbps */}; | 286 | /*< 100 or 400 kbps */}; |
| 287 | 287 | ||
| 288 | /* | 288 | /* |
| 289 | * DRXJ_CFG_ATV_MISC | 289 | * DRXJ_CFG_ATV_MISC |
| @@ -352,7 +352,7 @@ struct drxj_cfg_oob_misc { | |||
| 352 | * DRXJ_CFG_ATV_OUTPUT | 352 | * DRXJ_CFG_ATV_OUTPUT |
| 353 | */ | 353 | */ |
| 354 | 354 | ||
| 355 | /** | 355 | /* |
| 356 | * /enum DRXJAttenuation_t | 356 | * /enum DRXJAttenuation_t |
| 357 | * Attenuation setting for SIF AGC. | 357 | * Attenuation setting for SIF AGC. |
| 358 | * | 358 | * |
| @@ -363,7 +363,7 @@ struct drxj_cfg_oob_misc { | |||
| 363 | DRXJ_SIF_ATTENUATION_6DB, | 363 | DRXJ_SIF_ATTENUATION_6DB, |
| 364 | DRXJ_SIF_ATTENUATION_9DB}; | 364 | DRXJ_SIF_ATTENUATION_9DB}; |
| 365 | 365 | ||
| 366 | /** | 366 | /* |
| 367 | * /struct struct drxj_cfg_atv_output * SIF attenuation setting. | 367 | * /struct struct drxj_cfg_atv_output * SIF attenuation setting. |
| 368 | * | 368 | * |
| 369 | */ | 369 | */ |
| @@ -398,7 +398,7 @@ struct drxj_cfg_atv_output { | |||
| 398 | /*============================================================================*/ | 398 | /*============================================================================*/ |
| 399 | 399 | ||
| 400 | /*========================================*/ | 400 | /*========================================*/ |
| 401 | /** | 401 | /* |
| 402 | * /struct struct drxj_data * DRXJ specific attributes. | 402 | * /struct struct drxj_data * DRXJ specific attributes. |
| 403 | * | 403 | * |
| 404 | * Global data container for DRXJ specific data. | 404 | * Global data container for DRXJ specific data. |
| @@ -406,93 +406,93 @@ struct drxj_cfg_atv_output { | |||
| 406 | */ | 406 | */ |
| 407 | struct drxj_data { | 407 | struct drxj_data { |
| 408 | /* device capabilties (determined during drx_open()) */ | 408 | /* device capabilties (determined during drx_open()) */ |
| 409 | bool has_lna; /**< true if LNA (aka PGA) present */ | 409 | bool has_lna; /*< true if LNA (aka PGA) present */ |
| 410 | bool has_oob; /**< true if OOB supported */ | 410 | bool has_oob; /*< true if OOB supported */ |
| 411 | bool has_ntsc; /**< true if NTSC supported */ | 411 | bool has_ntsc; /*< true if NTSC supported */ |
| 412 | bool has_btsc; /**< true if BTSC supported */ | 412 | bool has_btsc; /*< true if BTSC supported */ |
| 413 | bool has_smatx; /**< true if mat_tx is available */ | 413 | bool has_smatx; /*< true if mat_tx is available */ |
| 414 | bool has_smarx; /**< true if mat_rx is available */ | 414 | bool has_smarx; /*< true if mat_rx is available */ |
| 415 | bool has_gpio; /**< true if GPIO is available */ | 415 | bool has_gpio; /*< true if GPIO is available */ |
| 416 | bool has_irqn; /**< true if IRQN is available */ | 416 | bool has_irqn; /*< true if IRQN is available */ |
| 417 | /* A1/A2/A... */ | 417 | /* A1/A2/A... */ |
| 418 | u8 mfx; /**< metal fix */ | 418 | u8 mfx; /*< metal fix */ |
| 419 | 419 | ||
| 420 | /* tuner settings */ | 420 | /* tuner settings */ |
| 421 | bool mirror_freq_spect_oob;/**< tuner inversion (true = tuner mirrors the signal */ | 421 | bool mirror_freq_spect_oob;/*< tuner inversion (true = tuner mirrors the signal */ |
| 422 | 422 | ||
| 423 | /* standard/channel settings */ | 423 | /* standard/channel settings */ |
| 424 | enum drx_standard standard; /**< current standard information */ | 424 | enum drx_standard standard; /*< current standard information */ |
| 425 | enum drx_modulation constellation; | 425 | enum drx_modulation constellation; |
| 426 | /**< current constellation */ | 426 | /*< current constellation */ |
| 427 | s32 frequency; /**< center signal frequency in KHz */ | 427 | s32 frequency; /*< center signal frequency in KHz */ |
| 428 | enum drx_bandwidth curr_bandwidth; | 428 | enum drx_bandwidth curr_bandwidth; |
| 429 | /**< current channel bandwidth */ | 429 | /*< current channel bandwidth */ |
| 430 | enum drx_mirror mirror; /**< current channel mirror */ | 430 | enum drx_mirror mirror; /*< current channel mirror */ |
| 431 | 431 | ||
| 432 | /* signal quality information */ | 432 | /* signal quality information */ |
| 433 | u32 fec_bits_desired; /**< BER accounting period */ | 433 | u32 fec_bits_desired; /*< BER accounting period */ |
| 434 | u16 fec_vd_plen; /**< no of trellis symbols: VD SER measurement period */ | 434 | u16 fec_vd_plen; /*< no of trellis symbols: VD SER measurement period */ |
| 435 | u16 qam_vd_prescale; /**< Viterbi Measurement Prescale */ | 435 | u16 qam_vd_prescale; /*< Viterbi Measurement Prescale */ |
| 436 | u16 qam_vd_period; /**< Viterbi Measurement period */ | 436 | u16 qam_vd_period; /*< Viterbi Measurement period */ |
| 437 | u16 fec_rs_plen; /**< defines RS BER measurement period */ | 437 | u16 fec_rs_plen; /*< defines RS BER measurement period */ |
| 438 | u16 fec_rs_prescale; /**< ReedSolomon Measurement Prescale */ | 438 | u16 fec_rs_prescale; /*< ReedSolomon Measurement Prescale */ |
| 439 | u16 fec_rs_period; /**< ReedSolomon Measurement period */ | 439 | u16 fec_rs_period; /*< ReedSolomon Measurement period */ |
| 440 | bool reset_pkt_err_acc; /**< Set a flag to reset accumulated packet error */ | 440 | bool reset_pkt_err_acc; /*< Set a flag to reset accumulated packet error */ |
| 441 | u16 pkt_err_acc_start; /**< Set a flag to reset accumulated packet error */ | 441 | u16 pkt_err_acc_start; /*< Set a flag to reset accumulated packet error */ |
| 442 | 442 | ||
| 443 | /* HI configuration */ | 443 | /* HI configuration */ |
| 444 | u16 hi_cfg_timing_div; /**< HI Configure() parameter 2 */ | 444 | u16 hi_cfg_timing_div; /*< HI Configure() parameter 2 */ |
| 445 | u16 hi_cfg_bridge_delay; /**< HI Configure() parameter 3 */ | 445 | u16 hi_cfg_bridge_delay; /*< HI Configure() parameter 3 */ |
| 446 | u16 hi_cfg_wake_up_key; /**< HI Configure() parameter 4 */ | 446 | u16 hi_cfg_wake_up_key; /*< HI Configure() parameter 4 */ |
| 447 | u16 hi_cfg_ctrl; /**< HI Configure() parameter 5 */ | 447 | u16 hi_cfg_ctrl; /*< HI Configure() parameter 5 */ |
| 448 | u16 hi_cfg_transmit; /**< HI Configure() parameter 6 */ | 448 | u16 hi_cfg_transmit; /*< HI Configure() parameter 6 */ |
| 449 | 449 | ||
| 450 | /* UIO configuration */ | 450 | /* UIO configuration */ |
| 451 | enum drxuio_mode uio_sma_rx_mode;/**< current mode of SmaRx pin */ | 451 | enum drxuio_mode uio_sma_rx_mode;/*< current mode of SmaRx pin */ |
| 452 | enum drxuio_mode uio_sma_tx_mode;/**< current mode of SmaTx pin */ | 452 | enum drxuio_mode uio_sma_tx_mode;/*< current mode of SmaTx pin */ |
| 453 | enum drxuio_mode uio_gpio_mode; /**< current mode of ASEL pin */ | 453 | enum drxuio_mode uio_gpio_mode; /*< current mode of ASEL pin */ |
| 454 | enum drxuio_mode uio_irqn_mode; /**< current mode of IRQN pin */ | 454 | enum drxuio_mode uio_irqn_mode; /*< current mode of IRQN pin */ |
| 455 | 455 | ||
| 456 | /* IQM fs frequecy shift and inversion */ | 456 | /* IQM fs frequecy shift and inversion */ |
| 457 | u32 iqm_fs_rate_ofs; /**< frequency shifter setting after setchannel */ | 457 | u32 iqm_fs_rate_ofs; /*< frequency shifter setting after setchannel */ |
| 458 | bool pos_image; /**< Ture: positive image */ | 458 | bool pos_image; /*< Ture: positive image */ |
| 459 | /* IQM RC frequecy shift */ | 459 | /* IQM RC frequecy shift */ |
| 460 | u32 iqm_rc_rate_ofs; /**< frequency shifter setting after setchannel */ | 460 | u32 iqm_rc_rate_ofs; /*< frequency shifter setting after setchannel */ |
| 461 | 461 | ||
| 462 | /* ATV configuration */ | 462 | /* ATV configuration */ |
| 463 | u32 atv_cfg_changed_flags; /**< flag: flags cfg changes */ | 463 | u32 atv_cfg_changed_flags; /*< flag: flags cfg changes */ |
| 464 | s16 atv_top_equ0[DRXJ_COEF_IDX_MAX]; /**< shadow of ATV_TOP_EQU0__A */ | 464 | s16 atv_top_equ0[DRXJ_COEF_IDX_MAX]; /*< shadow of ATV_TOP_EQU0__A */ |
| 465 | s16 atv_top_equ1[DRXJ_COEF_IDX_MAX]; /**< shadow of ATV_TOP_EQU1__A */ | 465 | s16 atv_top_equ1[DRXJ_COEF_IDX_MAX]; /*< shadow of ATV_TOP_EQU1__A */ |
| 466 | s16 atv_top_equ2[DRXJ_COEF_IDX_MAX]; /**< shadow of ATV_TOP_EQU2__A */ | 466 | s16 atv_top_equ2[DRXJ_COEF_IDX_MAX]; /*< shadow of ATV_TOP_EQU2__A */ |
| 467 | s16 atv_top_equ3[DRXJ_COEF_IDX_MAX]; /**< shadow of ATV_TOP_EQU3__A */ | 467 | s16 atv_top_equ3[DRXJ_COEF_IDX_MAX]; /*< shadow of ATV_TOP_EQU3__A */ |
| 468 | bool phase_correction_bypass;/**< flag: true=bypass */ | 468 | bool phase_correction_bypass;/*< flag: true=bypass */ |
| 469 | s16 atv_top_vid_peak; /**< shadow of ATV_TOP_VID_PEAK__A */ | 469 | s16 atv_top_vid_peak; /*< shadow of ATV_TOP_VID_PEAK__A */ |
| 470 | u16 atv_top_noise_th; /**< shadow of ATV_TOP_NOISE_TH__A */ | 470 | u16 atv_top_noise_th; /*< shadow of ATV_TOP_NOISE_TH__A */ |
| 471 | bool enable_cvbs_output; /**< flag CVBS ouput enable */ | 471 | bool enable_cvbs_output; /*< flag CVBS ouput enable */ |
| 472 | bool enable_sif_output; /**< flag SIF ouput enable */ | 472 | bool enable_sif_output; /*< flag SIF ouput enable */ |
| 473 | enum drxjsif_attenuation sif_attenuation; | 473 | enum drxjsif_attenuation sif_attenuation; |
| 474 | /**< current SIF att setting */ | 474 | /*< current SIF att setting */ |
| 475 | /* Agc configuration for QAM and VSB */ | 475 | /* Agc configuration for QAM and VSB */ |
| 476 | struct drxj_cfg_agc qam_rf_agc_cfg; /**< qam RF AGC config */ | 476 | struct drxj_cfg_agc qam_rf_agc_cfg; /*< qam RF AGC config */ |
| 477 | struct drxj_cfg_agc qam_if_agc_cfg; /**< qam IF AGC config */ | 477 | struct drxj_cfg_agc qam_if_agc_cfg; /*< qam IF AGC config */ |
| 478 | struct drxj_cfg_agc vsb_rf_agc_cfg; /**< vsb RF AGC config */ | 478 | struct drxj_cfg_agc vsb_rf_agc_cfg; /*< vsb RF AGC config */ |
| 479 | struct drxj_cfg_agc vsb_if_agc_cfg; /**< vsb IF AGC config */ | 479 | struct drxj_cfg_agc vsb_if_agc_cfg; /*< vsb IF AGC config */ |
| 480 | 480 | ||
| 481 | /* PGA gain configuration for QAM and VSB */ | 481 | /* PGA gain configuration for QAM and VSB */ |
| 482 | u16 qam_pga_cfg; /**< qam PGA config */ | 482 | u16 qam_pga_cfg; /*< qam PGA config */ |
| 483 | u16 vsb_pga_cfg; /**< vsb PGA config */ | 483 | u16 vsb_pga_cfg; /*< vsb PGA config */ |
| 484 | 484 | ||
| 485 | /* Pre SAW configuration for QAM and VSB */ | 485 | /* Pre SAW configuration for QAM and VSB */ |
| 486 | struct drxj_cfg_pre_saw qam_pre_saw_cfg; | 486 | struct drxj_cfg_pre_saw qam_pre_saw_cfg; |
| 487 | /**< qam pre SAW config */ | 487 | /*< qam pre SAW config */ |
| 488 | struct drxj_cfg_pre_saw vsb_pre_saw_cfg; | 488 | struct drxj_cfg_pre_saw vsb_pre_saw_cfg; |
| 489 | /**< qam pre SAW config */ | 489 | /*< qam pre SAW config */ |
| 490 | 490 | ||
| 491 | /* Version information */ | 491 | /* Version information */ |
| 492 | char v_text[2][12]; /**< allocated text versions */ | 492 | char v_text[2][12]; /*< allocated text versions */ |
| 493 | struct drx_version v_version[2]; /**< allocated versions structs */ | 493 | struct drx_version v_version[2]; /*< allocated versions structs */ |
| 494 | struct drx_version_list v_list_elements[2]; | 494 | struct drx_version_list v_list_elements[2]; |
| 495 | /**< allocated version list */ | 495 | /*< allocated version list */ |
| 496 | 496 | ||
| 497 | /* smart antenna configuration */ | 497 | /* smart antenna configuration */ |
| 498 | bool smart_ant_inverted; | 498 | bool smart_ant_inverted; |
| @@ -502,25 +502,25 @@ struct drxj_cfg_atv_output { | |||
| 502 | bool oob_power_on; | 502 | bool oob_power_on; |
| 503 | 503 | ||
| 504 | /* MPEG static bitrate setting */ | 504 | /* MPEG static bitrate setting */ |
| 505 | u32 mpeg_ts_static_bitrate; /**< bitrate static MPEG output */ | 505 | u32 mpeg_ts_static_bitrate; /*< bitrate static MPEG output */ |
| 506 | bool disable_te_ihandling; /**< MPEG TS TEI handling */ | 506 | bool disable_te_ihandling; /*< MPEG TS TEI handling */ |
| 507 | bool bit_reverse_mpeg_outout;/**< MPEG output bit order */ | 507 | bool bit_reverse_mpeg_outout;/*< MPEG output bit order */ |
| 508 | enum drxj_mpeg_output_clock_rate mpeg_output_clock_rate; | 508 | enum drxj_mpeg_output_clock_rate mpeg_output_clock_rate; |
| 509 | /**< MPEG output clock rate */ | 509 | /*< MPEG output clock rate */ |
| 510 | enum drxj_mpeg_start_width mpeg_start_width; | 510 | enum drxj_mpeg_start_width mpeg_start_width; |
| 511 | /**< MPEG Start width */ | 511 | /*< MPEG Start width */ |
| 512 | 512 | ||
| 513 | /* Pre SAW & Agc configuration for ATV */ | 513 | /* Pre SAW & Agc configuration for ATV */ |
| 514 | struct drxj_cfg_pre_saw atv_pre_saw_cfg; | 514 | struct drxj_cfg_pre_saw atv_pre_saw_cfg; |
| 515 | /**< atv pre SAW config */ | 515 | /*< atv pre SAW config */ |
| 516 | struct drxj_cfg_agc atv_rf_agc_cfg; /**< atv RF AGC config */ | 516 | struct drxj_cfg_agc atv_rf_agc_cfg; /*< atv RF AGC config */ |
| 517 | struct drxj_cfg_agc atv_if_agc_cfg; /**< atv IF AGC config */ | 517 | struct drxj_cfg_agc atv_if_agc_cfg; /*< atv IF AGC config */ |
| 518 | u16 atv_pga_cfg; /**< atv pga config */ | 518 | u16 atv_pga_cfg; /*< atv pga config */ |
| 519 | 519 | ||
| 520 | u32 curr_symbol_rate; | 520 | u32 curr_symbol_rate; |
| 521 | 521 | ||
| 522 | /* pin-safe mode */ | 522 | /* pin-safe mode */ |
| 523 | bool pdr_safe_mode; /**< PDR safe mode activated */ | 523 | bool pdr_safe_mode; /*< PDR safe mode activated */ |
| 524 | u16 pdr_safe_restore_val_gpio; | 524 | u16 pdr_safe_restore_val_gpio; |
| 525 | u16 pdr_safe_restore_val_v_sync; | 525 | u16 pdr_safe_restore_val_v_sync; |
| 526 | u16 pdr_safe_restore_val_sma_rx; | 526 | u16 pdr_safe_restore_val_sma_rx; |
| @@ -531,12 +531,12 @@ struct drxj_cfg_atv_output { | |||
| 531 | enum drxj_cfg_oob_lo_power oob_lo_pow; | 531 | enum drxj_cfg_oob_lo_power oob_lo_pow; |
| 532 | 532 | ||
| 533 | struct drx_aud_data aud_data; | 533 | struct drx_aud_data aud_data; |
| 534 | /**< audio storage */}; | 534 | /*< audio storage */}; |
| 535 | 535 | ||
| 536 | /*------------------------------------------------------------------------- | 536 | /*------------------------------------------------------------------------- |
| 537 | Access MACROS | 537 | Access MACROS |
| 538 | -------------------------------------------------------------------------*/ | 538 | -------------------------------------------------------------------------*/ |
| 539 | /** | 539 | /* |
| 540 | * \brief Compilable references to attributes | 540 | * \brief Compilable references to attributes |
| 541 | * \param d pointer to demod instance | 541 | * \param d pointer to demod instance |
| 542 | * | 542 | * |
| @@ -554,7 +554,7 @@ Access MACROS | |||
| 554 | DEFINES | 554 | DEFINES |
| 555 | -------------------------------------------------------------------------*/ | 555 | -------------------------------------------------------------------------*/ |
| 556 | 556 | ||
| 557 | /** | 557 | /* |
| 558 | * \def DRXJ_NTSC_CARRIER_FREQ_OFFSET | 558 | * \def DRXJ_NTSC_CARRIER_FREQ_OFFSET |
| 559 | * \brief Offset from picture carrier to centre frequency in kHz, in RF domain | 559 | * \brief Offset from picture carrier to centre frequency in kHz, in RF domain |
| 560 | * | 560 | * |
| @@ -569,7 +569,7 @@ DEFINES | |||
| 569 | */ | 569 | */ |
| 570 | #define DRXJ_NTSC_CARRIER_FREQ_OFFSET ((s32)(1750)) | 570 | #define DRXJ_NTSC_CARRIER_FREQ_OFFSET ((s32)(1750)) |
| 571 | 571 | ||
| 572 | /** | 572 | /* |
| 573 | * \def DRXJ_PAL_SECAM_BG_CARRIER_FREQ_OFFSET | 573 | * \def DRXJ_PAL_SECAM_BG_CARRIER_FREQ_OFFSET |
| 574 | * \brief Offset from picture carrier to centre frequency in kHz, in RF domain | 574 | * \brief Offset from picture carrier to centre frequency in kHz, in RF domain |
| 575 | * | 575 | * |
| @@ -585,7 +585,7 @@ DEFINES | |||
| 585 | */ | 585 | */ |
| 586 | #define DRXJ_PAL_SECAM_BG_CARRIER_FREQ_OFFSET ((s32)(2375)) | 586 | #define DRXJ_PAL_SECAM_BG_CARRIER_FREQ_OFFSET ((s32)(2375)) |
| 587 | 587 | ||
| 588 | /** | 588 | /* |
| 589 | * \def DRXJ_PAL_SECAM_DKIL_CARRIER_FREQ_OFFSET | 589 | * \def DRXJ_PAL_SECAM_DKIL_CARRIER_FREQ_OFFSET |
| 590 | * \brief Offset from picture carrier to centre frequency in kHz, in RF domain | 590 | * \brief Offset from picture carrier to centre frequency in kHz, in RF domain |
| 591 | * | 591 | * |
| @@ -601,7 +601,7 @@ DEFINES | |||
| 601 | */ | 601 | */ |
| 602 | #define DRXJ_PAL_SECAM_DKIL_CARRIER_FREQ_OFFSET ((s32)(2775)) | 602 | #define DRXJ_PAL_SECAM_DKIL_CARRIER_FREQ_OFFSET ((s32)(2775)) |
| 603 | 603 | ||
| 604 | /** | 604 | /* |
| 605 | * \def DRXJ_PAL_SECAM_LP_CARRIER_FREQ_OFFSET | 605 | * \def DRXJ_PAL_SECAM_LP_CARRIER_FREQ_OFFSET |
| 606 | * \brief Offset from picture carrier to centre frequency in kHz, in RF domain | 606 | * \brief Offset from picture carrier to centre frequency in kHz, in RF domain |
| 607 | * | 607 | * |
| @@ -616,7 +616,7 @@ DEFINES | |||
| 616 | */ | 616 | */ |
| 617 | #define DRXJ_PAL_SECAM_LP_CARRIER_FREQ_OFFSET ((s32)(-3255)) | 617 | #define DRXJ_PAL_SECAM_LP_CARRIER_FREQ_OFFSET ((s32)(-3255)) |
| 618 | 618 | ||
| 619 | /** | 619 | /* |
| 620 | * \def DRXJ_FM_CARRIER_FREQ_OFFSET | 620 | * \def DRXJ_FM_CARRIER_FREQ_OFFSET |
| 621 | * \brief Offset from sound carrier to centre frequency in kHz, in RF domain | 621 | * \brief Offset from sound carrier to centre frequency in kHz, in RF domain |
| 622 | * | 622 | * |
diff --git a/drivers/media/dvb-frontends/drxk.h b/drivers/media/dvb-frontends/drxk.h index eb9bdc9f59c4..b16fedbb53a3 100644 --- a/drivers/media/dvb-frontends/drxk.h +++ b/drivers/media/dvb-frontends/drxk.h | |||
| @@ -20,17 +20,18 @@ | |||
| 20 | * @antenna_dvbt: GPIO bit for changing antenna to DVB-C. A value of 1 | 20 | * @antenna_dvbt: GPIO bit for changing antenna to DVB-C. A value of 1 |
| 21 | * means that 1=DVBC, 0 = DVBT. Zero means the opposite. | 21 | * means that 1=DVBC, 0 = DVBT. Zero means the opposite. |
| 22 | * @mpeg_out_clk_strength: DRXK Mpeg output clock drive strength. | 22 | * @mpeg_out_clk_strength: DRXK Mpeg output clock drive strength. |
| 23 | * @chunk_size: maximum size for I2C messages | ||
| 23 | * @microcode_name: Name of the firmware file with the microcode | 24 | * @microcode_name: Name of the firmware file with the microcode |
| 24 | * @qam_demod_parameter_count: The number of parameters used for the command | 25 | * @qam_demod_parameter_count: The number of parameters used for the command |
| 25 | * to set the demodulator parameters. All | 26 | * to set the demodulator parameters. All |
| 26 | * firmwares are using the 2-parameter commmand. | 27 | * firmwares are using the 2-parameter commmand. |
| 27 | * An exception is the "drxk_a3.mc" firmware, | 28 | * An exception is the ``drxk_a3.mc`` firmware, |
| 28 | * which uses the 4-parameter command. | 29 | * which uses the 4-parameter command. |
| 29 | * A value of 0 (default) or lower indicates that | 30 | * A value of 0 (default) or lower indicates that |
| 30 | * the correct number of parameters will be | 31 | * the correct number of parameters will be |
| 31 | * automatically detected. | 32 | * automatically detected. |
| 32 | * | 33 | * |
| 33 | * On the *_gpio vars, bit 0 is UIO-1, bit 1 is UIO-2 and bit 2 is | 34 | * On the ``*_gpio`` vars, bit 0 is UIO-1, bit 1 is UIO-2 and bit 2 is |
| 34 | * UIO-3. | 35 | * UIO-3. |
| 35 | */ | 36 | */ |
| 36 | struct drxk_config { | 37 | struct drxk_config { |
| @@ -52,6 +53,14 @@ struct drxk_config { | |||
| 52 | }; | 53 | }; |
| 53 | 54 | ||
| 54 | #if IS_REACHABLE(CONFIG_DVB_DRXK) | 55 | #if IS_REACHABLE(CONFIG_DVB_DRXK) |
| 56 | /** | ||
| 57 | * Attach a drxk demod | ||
| 58 | * | ||
| 59 | * @config: pointer to &struct drxk_config with demod configuration. | ||
| 60 | * @i2c: i2c adapter to use. | ||
| 61 | * | ||
| 62 | * return: FE pointer on success, NULL on failure. | ||
| 63 | */ | ||
| 55 | extern struct dvb_frontend *drxk_attach(const struct drxk_config *config, | 64 | extern struct dvb_frontend *drxk_attach(const struct drxk_config *config, |
| 56 | struct i2c_adapter *i2c); | 65 | struct i2c_adapter *i2c); |
| 57 | #else | 66 | #else |
diff --git a/drivers/media/dvb-frontends/drxk_hard.c b/drivers/media/dvb-frontends/drxk_hard.c index 48a8aad47a74..f59ac2e91c59 100644 --- a/drivers/media/dvb-frontends/drxk_hard.c +++ b/drivers/media/dvb-frontends/drxk_hard.c | |||
| @@ -207,9 +207,9 @@ static inline u32 log10times100(u32 value) | |||
| 207 | return (100L * intlog10(value)) >> 24; | 207 | return (100L * intlog10(value)) >> 24; |
| 208 | } | 208 | } |
| 209 | 209 | ||
| 210 | /****************************************************************************/ | 210 | /***************************************************************************/ |
| 211 | /* I2C **********************************************************************/ | 211 | /* I2C **********************************************************************/ |
| 212 | /****************************************************************************/ | 212 | /***************************************************************************/ |
| 213 | 213 | ||
| 214 | static int drxk_i2c_lock(struct drxk_state *state) | 214 | static int drxk_i2c_lock(struct drxk_state *state) |
| 215 | { | 215 | { |
| @@ -3444,7 +3444,7 @@ error: | |||
| 3444 | 3444 | ||
| 3445 | /*============================================================================*/ | 3445 | /*============================================================================*/ |
| 3446 | 3446 | ||
| 3447 | /** | 3447 | /* |
| 3448 | * \brief Activate DVBT specific presets | 3448 | * \brief Activate DVBT specific presets |
| 3449 | * \param demod instance of demodulator. | 3449 | * \param demod instance of demodulator. |
| 3450 | * \return DRXStatus_t. | 3450 | * \return DRXStatus_t. |
| @@ -3484,7 +3484,7 @@ error: | |||
| 3484 | 3484 | ||
| 3485 | /*============================================================================*/ | 3485 | /*============================================================================*/ |
| 3486 | 3486 | ||
| 3487 | /** | 3487 | /* |
| 3488 | * \brief Initialize channelswitch-independent settings for DVBT. | 3488 | * \brief Initialize channelswitch-independent settings for DVBT. |
| 3489 | * \param demod instance of demodulator. | 3489 | * \param demod instance of demodulator. |
| 3490 | * \return DRXStatus_t. | 3490 | * \return DRXStatus_t. |
| @@ -3696,7 +3696,7 @@ error: | |||
| 3696 | } | 3696 | } |
| 3697 | 3697 | ||
| 3698 | /*============================================================================*/ | 3698 | /*============================================================================*/ |
| 3699 | /** | 3699 | /* |
| 3700 | * \brief start dvbt demodulating for channel. | 3700 | * \brief start dvbt demodulating for channel. |
| 3701 | * \param demod instance of demodulator. | 3701 | * \param demod instance of demodulator. |
| 3702 | * \return DRXStatus_t. | 3702 | * \return DRXStatus_t. |
| @@ -3732,7 +3732,7 @@ error: | |||
| 3732 | 3732 | ||
| 3733 | /*============================================================================*/ | 3733 | /*============================================================================*/ |
| 3734 | 3734 | ||
| 3735 | /** | 3735 | /* |
| 3736 | * \brief Set up dvbt demodulator for channel. | 3736 | * \brief Set up dvbt demodulator for channel. |
| 3737 | * \param demod instance of demodulator. | 3737 | * \param demod instance of demodulator. |
| 3738 | * \return DRXStatus_t. | 3738 | * \return DRXStatus_t. |
| @@ -4086,7 +4086,7 @@ error: | |||
| 4086 | 4086 | ||
| 4087 | /*============================================================================*/ | 4087 | /*============================================================================*/ |
| 4088 | 4088 | ||
| 4089 | /** | 4089 | /* |
| 4090 | * \brief Retrieve lock status . | 4090 | * \brief Retrieve lock status . |
| 4091 | * \param demod Pointer to demodulator instance. | 4091 | * \param demod Pointer to demodulator instance. |
| 4092 | * \param lockStat Pointer to lock status structure. | 4092 | * \param lockStat Pointer to lock status structure. |
| @@ -4148,7 +4148,7 @@ static int power_up_qam(struct drxk_state *state) | |||
| 4148 | } | 4148 | } |
| 4149 | 4149 | ||
| 4150 | 4150 | ||
| 4151 | /** Power Down QAM */ | 4151 | /* Power Down QAM */ |
| 4152 | static int power_down_qam(struct drxk_state *state) | 4152 | static int power_down_qam(struct drxk_state *state) |
| 4153 | { | 4153 | { |
| 4154 | u16 data = 0; | 4154 | u16 data = 0; |
| @@ -4186,7 +4186,7 @@ error: | |||
| 4186 | 4186 | ||
| 4187 | /*============================================================================*/ | 4187 | /*============================================================================*/ |
| 4188 | 4188 | ||
| 4189 | /** | 4189 | /* |
| 4190 | * \brief Setup of the QAM Measurement intervals for signal quality | 4190 | * \brief Setup of the QAM Measurement intervals for signal quality |
| 4191 | * \param demod instance of demod. | 4191 | * \param demod instance of demod. |
| 4192 | * \param modulation current modulation. | 4192 | * \param modulation current modulation. |
| @@ -4461,7 +4461,7 @@ error: | |||
| 4461 | 4461 | ||
| 4462 | /*============================================================================*/ | 4462 | /*============================================================================*/ |
| 4463 | 4463 | ||
| 4464 | /** | 4464 | /* |
| 4465 | * \brief QAM32 specific setup | 4465 | * \brief QAM32 specific setup |
| 4466 | * \param demod instance of demod. | 4466 | * \param demod instance of demod. |
| 4467 | * \return DRXStatus_t. | 4467 | * \return DRXStatus_t. |
| @@ -4657,7 +4657,7 @@ error: | |||
| 4657 | 4657 | ||
| 4658 | /*============================================================================*/ | 4658 | /*============================================================================*/ |
| 4659 | 4659 | ||
| 4660 | /** | 4660 | /* |
| 4661 | * \brief QAM64 specific setup | 4661 | * \brief QAM64 specific setup |
| 4662 | * \param demod instance of demod. | 4662 | * \param demod instance of demod. |
| 4663 | * \return DRXStatus_t. | 4663 | * \return DRXStatus_t. |
| @@ -4852,7 +4852,7 @@ error: | |||
| 4852 | 4852 | ||
| 4853 | /*============================================================================*/ | 4853 | /*============================================================================*/ |
| 4854 | 4854 | ||
| 4855 | /** | 4855 | /* |
| 4856 | * \brief QAM128 specific setup | 4856 | * \brief QAM128 specific setup |
| 4857 | * \param demod: instance of demod. | 4857 | * \param demod: instance of demod. |
| 4858 | * \return DRXStatus_t. | 4858 | * \return DRXStatus_t. |
| @@ -5049,7 +5049,7 @@ error: | |||
| 5049 | 5049 | ||
| 5050 | /*============================================================================*/ | 5050 | /*============================================================================*/ |
| 5051 | 5051 | ||
| 5052 | /** | 5052 | /* |
| 5053 | * \brief QAM256 specific setup | 5053 | * \brief QAM256 specific setup |
| 5054 | * \param demod: instance of demod. | 5054 | * \param demod: instance of demod. |
| 5055 | * \return DRXStatus_t. | 5055 | * \return DRXStatus_t. |
| @@ -5244,7 +5244,7 @@ error: | |||
| 5244 | 5244 | ||
| 5245 | 5245 | ||
| 5246 | /*============================================================================*/ | 5246 | /*============================================================================*/ |
| 5247 | /** | 5247 | /* |
| 5248 | * \brief Reset QAM block. | 5248 | * \brief Reset QAM block. |
| 5249 | * \param demod: instance of demod. | 5249 | * \param demod: instance of demod. |
| 5250 | * \param channel: pointer to channel data. | 5250 | * \param channel: pointer to channel data. |
| @@ -5272,7 +5272,7 @@ error: | |||
| 5272 | 5272 | ||
| 5273 | /*============================================================================*/ | 5273 | /*============================================================================*/ |
| 5274 | 5274 | ||
| 5275 | /** | 5275 | /* |
| 5276 | * \brief Set QAM symbolrate. | 5276 | * \brief Set QAM symbolrate. |
| 5277 | * \param demod: instance of demod. | 5277 | * \param demod: instance of demod. |
| 5278 | * \param channel: pointer to channel data. | 5278 | * \param channel: pointer to channel data. |
| @@ -5341,7 +5341,7 @@ error: | |||
| 5341 | 5341 | ||
| 5342 | /*============================================================================*/ | 5342 | /*============================================================================*/ |
| 5343 | 5343 | ||
| 5344 | /** | 5344 | /* |
| 5345 | * \brief Get QAM lock status. | 5345 | * \brief Get QAM lock status. |
| 5346 | * \param demod: instance of demod. | 5346 | * \param demod: instance of demod. |
| 5347 | * \param channel: pointer to channel data. | 5347 | * \param channel: pointer to channel data. |
diff --git a/drivers/media/dvb-frontends/dvb-pll.h b/drivers/media/dvb-frontends/dvb-pll.h index 6aaa9c6bff9c..212e0730f154 100644 --- a/drivers/media/dvb-frontends/dvb-pll.h +++ b/drivers/media/dvb-frontends/dvb-pll.h | |||
| @@ -30,16 +30,17 @@ | |||
| 30 | #define DVB_PLL_TDEE4 18 | 30 | #define DVB_PLL_TDEE4 18 |
| 31 | #define DVB_PLL_THOMSON_DTT7520X 19 | 31 | #define DVB_PLL_THOMSON_DTT7520X 19 |
| 32 | 32 | ||
| 33 | #if IS_REACHABLE(CONFIG_DVB_PLL) | ||
| 33 | /** | 34 | /** |
| 34 | * Attach a dvb-pll to the supplied frontend structure. | 35 | * Attach a dvb-pll to the supplied frontend structure. |
| 35 | * | 36 | * |
| 36 | * @param fe Frontend to attach to. | 37 | * @fe: Frontend to attach to. |
| 37 | * @param pll_addr i2c address of the PLL (if used). | 38 | * @pll_addr: i2c address of the PLL (if used). |
| 38 | * @param i2c i2c adapter to use (set to NULL if not used). | 39 | * @i2c: i2c adapter to use (set to NULL if not used). |
| 39 | * @param pll_desc_id dvb_pll_desc to use. | 40 | * @pll_desc_id: dvb_pll_desc to use. |
| 40 | * @return Frontend pointer on success, NULL on failure | 41 | * |
| 42 | * return: Frontend pointer on success, NULL on failure | ||
| 41 | */ | 43 | */ |
| 42 | #if IS_REACHABLE(CONFIG_DVB_PLL) | ||
| 43 | extern struct dvb_frontend *dvb_pll_attach(struct dvb_frontend *fe, | 44 | extern struct dvb_frontend *dvb_pll_attach(struct dvb_frontend *fe, |
| 44 | int pll_addr, | 45 | int pll_addr, |
| 45 | struct i2c_adapter *i2c, | 46 | struct i2c_adapter *i2c, |
diff --git a/drivers/media/dvb-frontends/helene.h b/drivers/media/dvb-frontends/helene.h index 333615491d9e..c9fc81c7e4e7 100644 --- a/drivers/media/dvb-frontends/helene.h +++ b/drivers/media/dvb-frontends/helene.h | |||
| @@ -38,6 +38,7 @@ enum helene_xtal { | |||
| 38 | * @set_tuner_priv: Callback function private context | 38 | * @set_tuner_priv: Callback function private context |
| 39 | * @set_tuner_callback: Callback function that notifies the parent driver | 39 | * @set_tuner_callback: Callback function that notifies the parent driver |
| 40 | * which tuner is active now | 40 | * which tuner is active now |
| 41 | * @xtal: Cristal frequency as described by &enum helene_xtal | ||
| 41 | */ | 42 | */ |
| 42 | struct helene_config { | 43 | struct helene_config { |
| 43 | u8 i2c_address; | 44 | u8 i2c_address; |
| @@ -48,9 +49,31 @@ struct helene_config { | |||
| 48 | }; | 49 | }; |
| 49 | 50 | ||
| 50 | #if IS_REACHABLE(CONFIG_DVB_HELENE) | 51 | #if IS_REACHABLE(CONFIG_DVB_HELENE) |
| 52 | /** | ||
| 53 | * Attach a helene tuner (terrestrial and cable standards) | ||
| 54 | * | ||
| 55 | * @fe: frontend to be attached | ||
| 56 | * @config: pointer to &struct helene_config with tuner configuration. | ||
| 57 | * @i2c: i2c adapter to use. | ||
| 58 | * | ||
| 59 | * return: FE pointer on success, NULL on failure. | ||
| 60 | */ | ||
| 51 | extern struct dvb_frontend *helene_attach(struct dvb_frontend *fe, | 61 | extern struct dvb_frontend *helene_attach(struct dvb_frontend *fe, |
| 52 | const struct helene_config *config, | 62 | const struct helene_config *config, |
| 53 | struct i2c_adapter *i2c); | 63 | struct i2c_adapter *i2c); |
| 64 | |||
| 65 | /** | ||
| 66 | * Attach a helene tuner (satellite standards) | ||
| 67 | * | ||
| 68 | * @fe: frontend to be attached | ||
| 69 | * @config: pointer to &struct helene_config with tuner configuration. | ||
| 70 | * @i2c: i2c adapter to use. | ||
| 71 | * | ||
| 72 | * return: FE pointer on success, NULL on failure. | ||
| 73 | */ | ||
| 74 | extern struct dvb_frontend *helene_attach_s(struct dvb_frontend *fe, | ||
| 75 | const struct helene_config *config, | ||
| 76 | struct i2c_adapter *i2c); | ||
| 54 | #else | 77 | #else |
| 55 | static inline struct dvb_frontend *helene_attach(struct dvb_frontend *fe, | 78 | static inline struct dvb_frontend *helene_attach(struct dvb_frontend *fe, |
| 56 | const struct helene_config *config, | 79 | const struct helene_config *config, |
| @@ -59,13 +82,6 @@ static inline struct dvb_frontend *helene_attach(struct dvb_frontend *fe, | |||
| 59 | pr_warn("%s: driver disabled by Kconfig\n", __func__); | 82 | pr_warn("%s: driver disabled by Kconfig\n", __func__); |
| 60 | return NULL; | 83 | return NULL; |
| 61 | } | 84 | } |
| 62 | #endif | ||
| 63 | |||
| 64 | #if IS_REACHABLE(CONFIG_DVB_HELENE) | ||
| 65 | extern struct dvb_frontend *helene_attach_s(struct dvb_frontend *fe, | ||
| 66 | const struct helene_config *config, | ||
| 67 | struct i2c_adapter *i2c); | ||
| 68 | #else | ||
| 69 | static inline struct dvb_frontend *helene_attach_s(struct dvb_frontend *fe, | 85 | static inline struct dvb_frontend *helene_attach_s(struct dvb_frontend *fe, |
| 70 | const struct helene_config *config, | 86 | const struct helene_config *config, |
| 71 | struct i2c_adapter *i2c) | 87 | struct i2c_adapter *i2c) |
diff --git a/drivers/media/dvb-frontends/horus3a.h b/drivers/media/dvb-frontends/horus3a.h index 672a556df71a..9157fd037e2f 100644 --- a/drivers/media/dvb-frontends/horus3a.h +++ b/drivers/media/dvb-frontends/horus3a.h | |||
| @@ -41,6 +41,15 @@ struct horus3a_config { | |||
| 41 | }; | 41 | }; |
| 42 | 42 | ||
| 43 | #if IS_REACHABLE(CONFIG_DVB_HORUS3A) | 43 | #if IS_REACHABLE(CONFIG_DVB_HORUS3A) |
| 44 | /** | ||
| 45 | * Attach a horus3a tuner | ||
| 46 | * | ||
| 47 | * @fe: frontend to be attached | ||
| 48 | * @config: pointer to &struct helene_config with tuner configuration. | ||
| 49 | * @i2c: i2c adapter to use. | ||
| 50 | * | ||
| 51 | * return: FE pointer on success, NULL on failure. | ||
| 52 | */ | ||
| 44 | extern struct dvb_frontend *horus3a_attach(struct dvb_frontend *fe, | 53 | extern struct dvb_frontend *horus3a_attach(struct dvb_frontend *fe, |
| 45 | const struct horus3a_config *config, | 54 | const struct horus3a_config *config, |
| 46 | struct i2c_adapter *i2c); | 55 | struct i2c_adapter *i2c); |
diff --git a/drivers/media/dvb-frontends/ix2505v.c b/drivers/media/dvb-frontends/ix2505v.c index 534b24fa2b95..965012ad5c59 100644 --- a/drivers/media/dvb-frontends/ix2505v.c +++ b/drivers/media/dvb-frontends/ix2505v.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /** | 1 | /* |
| 2 | * Driver for Sharp IX2505V (marked B0017) DVB-S silicon tuner | 2 | * Driver for Sharp IX2505V (marked B0017) DVB-S silicon tuner |
| 3 | * | 3 | * |
| 4 | * Copyright (C) 2010 Malcolm Priestley | 4 | * Copyright (C) 2010 Malcolm Priestley |
| @@ -36,7 +36,7 @@ struct ix2505v_state { | |||
| 36 | u32 frequency; | 36 | u32 frequency; |
| 37 | }; | 37 | }; |
| 38 | 38 | ||
| 39 | /** | 39 | /* |
| 40 | * Data read format of the Sharp IX2505V B0017 | 40 | * Data read format of the Sharp IX2505V B0017 |
| 41 | * | 41 | * |
| 42 | * byte1: 1 | 1 | 0 | 0 | 0 | MA1 | MA0 | 1 | 42 | * byte1: 1 | 1 | 0 | 0 | 0 | MA1 | MA0 | 1 |
| @@ -99,7 +99,7 @@ static void ix2505v_release(struct dvb_frontend *fe) | |||
| 99 | 99 | ||
| 100 | } | 100 | } |
| 101 | 101 | ||
| 102 | /** | 102 | /* |
| 103 | * Data write format of the Sharp IX2505V B0017 | 103 | * Data write format of the Sharp IX2505V B0017 |
| 104 | * | 104 | * |
| 105 | * byte1: 1 | 1 | 0 | 0 | 0 | 0(MA1)| 0(MA0)| 0 | 105 | * byte1: 1 | 1 | 0 | 0 | 0 | 0(MA1)| 0(MA0)| 0 |
diff --git a/drivers/media/dvb-frontends/ix2505v.h b/drivers/media/dvb-frontends/ix2505v.h index 0b0a431c74f6..49ed93e754ed 100644 --- a/drivers/media/dvb-frontends/ix2505v.h +++ b/drivers/media/dvb-frontends/ix2505v.h | |||
| @@ -20,31 +20,33 @@ | |||
| 20 | #include "dvb_frontend.h" | 20 | #include "dvb_frontend.h" |
| 21 | 21 | ||
| 22 | /** | 22 | /** |
| 23 | * Attach a ix2505v tuner to the supplied frontend structure. | 23 | * struct ix2505v_config - ix2505 attachment configuration |
| 24 | * | 24 | * |
| 25 | * @param fe Frontend to attach to. | 25 | * @tuner_address: tuner address |
| 26 | * @param config ix2505v_config structure | 26 | * @tuner_gain: Baseband AMP gain control 0/1=0dB(default) 2=-2bB 3=-4dB |
| 27 | * @return FE pointer on success, NULL on failure. | 27 | * @tuner_chargepump: Charge pump output +/- 0=120 1=260 2=555 3=1200(default) |
| 28 | * @min_delay_ms: delay after tune | ||
| 29 | * @tuner_write_only: disables reads | ||
| 28 | */ | 30 | */ |
| 29 | |||
| 30 | struct ix2505v_config { | 31 | struct ix2505v_config { |
| 31 | u8 tuner_address; | 32 | u8 tuner_address; |
| 32 | |||
| 33 | /*Baseband AMP gain control 0/1=0dB(default) 2=-2bB 3=-4dB */ | ||
| 34 | u8 tuner_gain; | 33 | u8 tuner_gain; |
| 35 | |||
| 36 | /*Charge pump output +/- 0=120 1=260 2=555 3=1200(default) */ | ||
| 37 | u8 tuner_chargepump; | 34 | u8 tuner_chargepump; |
| 38 | |||
| 39 | /* delay after tune */ | ||
| 40 | int min_delay_ms; | 35 | int min_delay_ms; |
| 41 | |||
| 42 | /* disables reads*/ | ||
| 43 | u8 tuner_write_only; | 36 | u8 tuner_write_only; |
| 44 | 37 | ||
| 45 | }; | 38 | }; |
| 46 | 39 | ||
| 47 | #if IS_REACHABLE(CONFIG_DVB_IX2505V) | 40 | #if IS_REACHABLE(CONFIG_DVB_IX2505V) |
| 41 | /** | ||
| 42 | * Attach a ix2505v tuner to the supplied frontend structure. | ||
| 43 | * | ||
| 44 | * @fe: Frontend to attach to. | ||
| 45 | * @config: pointer to &struct ix2505v_config | ||
| 46 | * @i2c: pointer to &struct i2c_adapter. | ||
| 47 | * | ||
| 48 | * return: FE pointer on success, NULL on failure. | ||
| 49 | */ | ||
| 48 | extern struct dvb_frontend *ix2505v_attach(struct dvb_frontend *fe, | 50 | extern struct dvb_frontend *ix2505v_attach(struct dvb_frontend *fe, |
| 49 | const struct ix2505v_config *config, struct i2c_adapter *i2c); | 51 | const struct ix2505v_config *config, struct i2c_adapter *i2c); |
| 50 | #else | 52 | #else |
diff --git a/drivers/media/dvb-frontends/l64781.c b/drivers/media/dvb-frontends/l64781.c index 68923c84679a..e5a6c1766664 100644 --- a/drivers/media/dvb-frontends/l64781.c +++ b/drivers/media/dvb-frontends/l64781.c | |||
| @@ -517,7 +517,7 @@ struct dvb_frontend* l64781_attach(const struct l64781_config* config, | |||
| 517 | state->i2c = i2c; | 517 | state->i2c = i2c; |
| 518 | state->first = 1; | 518 | state->first = 1; |
| 519 | 519 | ||
| 520 | /** | 520 | /* |
| 521 | * the L64781 won't show up before we send the reset_and_configure() | 521 | * the L64781 won't show up before we send the reset_and_configure() |
| 522 | * broadcast. If nothing responds there is no L64781 on the bus... | 522 | * broadcast. If nothing responds there is no L64781 on the bus... |
| 523 | */ | 523 | */ |
diff --git a/drivers/media/dvb-frontends/m88ds3103.h b/drivers/media/dvb-frontends/m88ds3103.h index 04b355a005fb..1a8964a2265d 100644 --- a/drivers/media/dvb-frontends/m88ds3103.h +++ b/drivers/media/dvb-frontends/m88ds3103.h | |||
| @@ -25,6 +25,34 @@ | |||
| 25 | */ | 25 | */ |
| 26 | 26 | ||
| 27 | /** | 27 | /** |
| 28 | * enum m88ds3103_ts_mode - TS connection mode | ||
| 29 | * @M88DS3103_TS_SERIAL: TS output pin D0, normal | ||
| 30 | * @M88DS3103_TS_SERIAL_D7: TS output pin D7 | ||
| 31 | * @M88DS3103_TS_PARALLEL: TS Parallel mode | ||
| 32 | * @M88DS3103_TS_CI: TS CI Mode | ||
| 33 | */ | ||
| 34 | enum m88ds3103_ts_mode { | ||
| 35 | M88DS3103_TS_SERIAL, | ||
| 36 | M88DS3103_TS_SERIAL_D7, | ||
| 37 | M88DS3103_TS_PARALLEL, | ||
| 38 | M88DS3103_TS_CI | ||
| 39 | }; | ||
| 40 | |||
| 41 | /** | ||
| 42 | * enum m88ds3103_clock_out | ||
| 43 | * @M88DS3103_CLOCK_OUT_DISABLED: Clock output is disabled | ||
| 44 | * @M88DS3103_CLOCK_OUT_ENABLED: Clock output is enabled with crystal | ||
| 45 | * clock. | ||
| 46 | * @M88DS3103_CLOCK_OUT_ENABLED_DIV2: Clock output is enabled with half | ||
| 47 | * crystal clock. | ||
| 48 | */ | ||
| 49 | enum m88ds3103_clock_out { | ||
| 50 | M88DS3103_CLOCK_OUT_DISABLED, | ||
| 51 | M88DS3103_CLOCK_OUT_ENABLED, | ||
| 52 | M88DS3103_CLOCK_OUT_ENABLED_DIV2 | ||
| 53 | }; | ||
| 54 | |||
| 55 | /** | ||
| 28 | * struct m88ds3103_platform_data - Platform data for the m88ds3103 driver | 56 | * struct m88ds3103_platform_data - Platform data for the m88ds3103 driver |
| 29 | * @clk: Clock frequency. | 57 | * @clk: Clock frequency. |
| 30 | * @i2c_wr_max: Max bytes I2C adapter can write at once. | 58 | * @i2c_wr_max: Max bytes I2C adapter can write at once. |
| @@ -44,24 +72,16 @@ | |||
| 44 | * @get_dvb_frontend: Get DVB frontend. | 72 | * @get_dvb_frontend: Get DVB frontend. |
| 45 | * @get_i2c_adapter: Get I2C adapter. | 73 | * @get_i2c_adapter: Get I2C adapter. |
| 46 | */ | 74 | */ |
| 47 | |||
| 48 | struct m88ds3103_platform_data { | 75 | struct m88ds3103_platform_data { |
| 49 | u32 clk; | 76 | u32 clk; |
| 50 | u16 i2c_wr_max; | 77 | u16 i2c_wr_max; |
| 51 | #define M88DS3103_TS_SERIAL 0 /* TS output pin D0, normal */ | 78 | enum m88ds3103_ts_mode ts_mode; |
| 52 | #define M88DS3103_TS_SERIAL_D7 1 /* TS output pin D7 */ | ||
| 53 | #define M88DS3103_TS_PARALLEL 2 /* TS Parallel mode */ | ||
| 54 | #define M88DS3103_TS_CI 3 /* TS CI Mode */ | ||
| 55 | u8 ts_mode:2; | ||
| 56 | u32 ts_clk; | 79 | u32 ts_clk; |
| 80 | enum m88ds3103_clock_out clk_out; | ||
| 57 | u8 ts_clk_pol:1; | 81 | u8 ts_clk_pol:1; |
| 58 | u8 spec_inv:1; | 82 | u8 spec_inv:1; |
| 59 | u8 agc; | 83 | u8 agc; |
| 60 | u8 agc_inv:1; | 84 | u8 agc_inv:1; |
| 61 | #define M88DS3103_CLOCK_OUT_DISABLED 0 | ||
| 62 | #define M88DS3103_CLOCK_OUT_ENABLED 1 | ||
| 63 | #define M88DS3103_CLOCK_OUT_ENABLED_DIV2 2 | ||
| 64 | u8 clk_out:2; | ||
| 65 | u8 envelope_mode:1; | 85 | u8 envelope_mode:1; |
| 66 | u8 lnb_hv_pol:1; | 86 | u8 lnb_hv_pol:1; |
| 67 | u8 lnb_en_pol:1; | 87 | u8 lnb_en_pol:1; |
| @@ -73,105 +93,60 @@ struct m88ds3103_platform_data { | |||
| 73 | u8 attach_in_use:1; | 93 | u8 attach_in_use:1; |
| 74 | }; | 94 | }; |
| 75 | 95 | ||
| 76 | /* | 96 | /** |
| 77 | * Do not add new m88ds3103_attach() users! Use I2C bindings instead. | 97 | * struct m88ds3103_config - m88ds3102 configuration |
| 98 | * | ||
| 99 | * @i2c_addr: I2C address. Default: none, must set. Example: 0x68, ... | ||
| 100 | * @clock: Device's clock. Default: none, must set. Example: 27000000 | ||
| 101 | * @i2c_wr_max: Max bytes I2C provider is asked to write at once. | ||
| 102 | * Default: none, must set. Example: 33, 65, ... | ||
| 103 | * @ts_mode: TS output mode, as defined by &enum m88ds3103_ts_mode. | ||
| 104 | * Default: M88DS3103_TS_SERIAL. | ||
| 105 | * @ts_clk: TS clk in KHz. Default: 0. | ||
| 106 | * @ts_clk_pol: TS clk polarity.Default: 0. | ||
| 107 | * 1-active at falling edge; 0-active at rising edge. | ||
| 108 | * @spec_inv: Spectrum inversion. Default: 0. | ||
| 109 | * @agc_inv: AGC polarity. Default: 0. | ||
| 110 | * @clock_out: Clock output, as defined by &enum m88ds3103_clock_out. | ||
| 111 | * Default: M88DS3103_CLOCK_OUT_DISABLED. | ||
| 112 | * @envelope_mode: DiSEqC envelope mode. Default: 0. | ||
| 113 | * @agc: AGC configuration. Default: none, must set. | ||
| 114 | * @lnb_hv_pol: LNB H/V pin polarity. Default: 0. Values: | ||
| 115 | * 1: pin high set to VOLTAGE_13, pin low to set VOLTAGE_18; | ||
| 116 | * 0: pin high set to VOLTAGE_18, pin low to set VOLTAGE_13. | ||
| 117 | * @lnb_en_pol: LNB enable pin polarity. Default: 0. Values: | ||
| 118 | * 1: pin high to enable, pin low to disable; | ||
| 119 | * 0: pin high to disable, pin low to enable. | ||
| 78 | */ | 120 | */ |
| 79 | struct m88ds3103_config { | 121 | struct m88ds3103_config { |
| 80 | /* | ||
| 81 | * I2C address | ||
| 82 | * Default: none, must set | ||
| 83 | * 0x68, ... | ||
| 84 | */ | ||
| 85 | u8 i2c_addr; | 122 | u8 i2c_addr; |
| 86 | |||
| 87 | /* | ||
| 88 | * clock | ||
| 89 | * Default: none, must set | ||
| 90 | * 27000000 | ||
| 91 | */ | ||
| 92 | u32 clock; | 123 | u32 clock; |
| 93 | |||
| 94 | /* | ||
| 95 | * max bytes I2C provider is asked to write at once | ||
| 96 | * Default: none, must set | ||
| 97 | * 33, 65, ... | ||
| 98 | */ | ||
| 99 | u16 i2c_wr_max; | 124 | u16 i2c_wr_max; |
| 100 | |||
| 101 | /* | ||
| 102 | * TS output mode | ||
| 103 | * Default: M88DS3103_TS_SERIAL | ||
| 104 | */ | ||
| 105 | #define M88DS3103_TS_SERIAL 0 /* TS output pin D0, normal */ | ||
| 106 | #define M88DS3103_TS_SERIAL_D7 1 /* TS output pin D7 */ | ||
| 107 | #define M88DS3103_TS_PARALLEL 2 /* TS Parallel mode */ | ||
| 108 | #define M88DS3103_TS_CI 3 /* TS CI Mode */ | ||
| 109 | u8 ts_mode; | 125 | u8 ts_mode; |
| 110 | |||
| 111 | /* | ||
| 112 | * TS clk in KHz | ||
| 113 | * Default: 0. | ||
| 114 | */ | ||
| 115 | u32 ts_clk; | 126 | u32 ts_clk; |
| 116 | |||
| 117 | /* | ||
| 118 | * TS clk polarity. | ||
| 119 | * Default: 0. 1-active at falling edge; 0-active at rising edge. | ||
| 120 | */ | ||
| 121 | u8 ts_clk_pol:1; | 127 | u8 ts_clk_pol:1; |
| 122 | |||
| 123 | /* | ||
| 124 | * spectrum inversion | ||
| 125 | * Default: 0 | ||
| 126 | */ | ||
| 127 | u8 spec_inv:1; | 128 | u8 spec_inv:1; |
| 128 | |||
| 129 | /* | ||
| 130 | * AGC polarity | ||
| 131 | * Default: 0 | ||
| 132 | */ | ||
| 133 | u8 agc_inv:1; | 129 | u8 agc_inv:1; |
| 134 | |||
| 135 | /* | ||
| 136 | * clock output | ||
| 137 | * Default: M88DS3103_CLOCK_OUT_DISABLED | ||
| 138 | */ | ||
| 139 | #define M88DS3103_CLOCK_OUT_DISABLED 0 | ||
| 140 | #define M88DS3103_CLOCK_OUT_ENABLED 1 | ||
| 141 | #define M88DS3103_CLOCK_OUT_ENABLED_DIV2 2 | ||
| 142 | u8 clock_out; | 130 | u8 clock_out; |
| 143 | |||
| 144 | /* | ||
| 145 | * DiSEqC envelope mode | ||
| 146 | * Default: 0 | ||
| 147 | */ | ||
| 148 | u8 envelope_mode:1; | 131 | u8 envelope_mode:1; |
| 149 | |||
| 150 | /* | ||
| 151 | * AGC configuration | ||
| 152 | * Default: none, must set | ||
| 153 | */ | ||
| 154 | u8 agc; | 132 | u8 agc; |
| 155 | |||
| 156 | /* | ||
| 157 | * LNB H/V pin polarity | ||
| 158 | * Default: 0. | ||
| 159 | * 1: pin high set to VOLTAGE_13, pin low to set VOLTAGE_18. | ||
| 160 | * 0: pin high set to VOLTAGE_18, pin low to set VOLTAGE_13. | ||
| 161 | */ | ||
| 162 | u8 lnb_hv_pol:1; | 133 | u8 lnb_hv_pol:1; |
| 163 | |||
| 164 | /* | ||
| 165 | * LNB enable pin polarity | ||
| 166 | * Default: 0. | ||
| 167 | * 1: pin high to enable, pin low to disable. | ||
| 168 | * 0: pin high to disable, pin low to enable. | ||
| 169 | */ | ||
| 170 | u8 lnb_en_pol:1; | 134 | u8 lnb_en_pol:1; |
| 171 | }; | 135 | }; |
| 172 | 136 | ||
| 173 | #if defined(CONFIG_DVB_M88DS3103) || \ | 137 | #if defined(CONFIG_DVB_M88DS3103) || \ |
| 174 | (defined(CONFIG_DVB_M88DS3103_MODULE) && defined(MODULE)) | 138 | (defined(CONFIG_DVB_M88DS3103_MODULE) && defined(MODULE)) |
| 139 | /** | ||
| 140 | * Attach a m88ds3103 demod | ||
| 141 | * | ||
| 142 | * @config: pointer to &struct m88ds3103_config with demod configuration. | ||
| 143 | * @i2c: i2c adapter to use. | ||
| 144 | * @tuner_i2c: on success, returns the I2C adapter associated with | ||
| 145 | * m88ds3103 tuner. | ||
| 146 | * | ||
| 147 | * return: FE pointer on success, NULL on failure. | ||
| 148 | * Note: Do not add new m88ds3103_attach() users! Use I2C bindings instead. | ||
| 149 | */ | ||
| 175 | extern struct dvb_frontend *m88ds3103_attach( | 150 | extern struct dvb_frontend *m88ds3103_attach( |
| 176 | const struct m88ds3103_config *config, | 151 | const struct m88ds3103_config *config, |
| 177 | struct i2c_adapter *i2c, | 152 | struct i2c_adapter *i2c, |
diff --git a/drivers/media/dvb-frontends/mb86a20s.h b/drivers/media/dvb-frontends/mb86a20s.h index dfb02db2126c..05c9725d1c5f 100644 --- a/drivers/media/dvb-frontends/mb86a20s.h +++ b/drivers/media/dvb-frontends/mb86a20s.h | |||
| @@ -26,7 +26,6 @@ | |||
| 26 | * @demod_address: the demodulator's i2c address | 26 | * @demod_address: the demodulator's i2c address |
| 27 | * @is_serial: if true, TS is serial. Otherwise, TS is parallel | 27 | * @is_serial: if true, TS is serial. Otherwise, TS is parallel |
| 28 | */ | 28 | */ |
| 29 | |||
| 30 | struct mb86a20s_config { | 29 | struct mb86a20s_config { |
| 31 | u32 fclk; | 30 | u32 fclk; |
| 32 | u8 demod_address; | 31 | u8 demod_address; |
| @@ -34,9 +33,17 @@ struct mb86a20s_config { | |||
| 34 | }; | 33 | }; |
| 35 | 34 | ||
| 36 | #if IS_REACHABLE(CONFIG_DVB_MB86A20S) | 35 | #if IS_REACHABLE(CONFIG_DVB_MB86A20S) |
| 36 | /** | ||
| 37 | * Attach a mb86a20s demod | ||
| 38 | * | ||
| 39 | * @config: pointer to &struct mb86a20s_config with demod configuration. | ||
| 40 | * @i2c: i2c adapter to use. | ||
| 41 | * | ||
| 42 | * return: FE pointer on success, NULL on failure. | ||
| 43 | */ | ||
| 37 | extern struct dvb_frontend *mb86a20s_attach(const struct mb86a20s_config *config, | 44 | extern struct dvb_frontend *mb86a20s_attach(const struct mb86a20s_config *config, |
| 38 | struct i2c_adapter *i2c); | 45 | struct i2c_adapter *i2c); |
| 39 | extern struct i2c_adapter *mb86a20s_get_tuner_i2c_adapter(struct dvb_frontend *); | 46 | |
| 40 | #else | 47 | #else |
| 41 | static inline struct dvb_frontend *mb86a20s_attach( | 48 | static inline struct dvb_frontend *mb86a20s_attach( |
| 42 | const struct mb86a20s_config *config, struct i2c_adapter *i2c) | 49 | const struct mb86a20s_config *config, struct i2c_adapter *i2c) |
| @@ -44,12 +51,6 @@ static inline struct dvb_frontend *mb86a20s_attach( | |||
| 44 | printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); | 51 | printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); |
| 45 | return NULL; | 52 | return NULL; |
| 46 | } | 53 | } |
| 47 | static inline struct i2c_adapter * | ||
| 48 | mb86a20s_get_tuner_i2c_adapter(struct dvb_frontend *fe) | ||
| 49 | { | ||
| 50 | printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); | ||
| 51 | return NULL; | ||
| 52 | } | ||
| 53 | #endif | 54 | #endif |
| 54 | 55 | ||
| 55 | #endif /* MB86A20S */ | 56 | #endif /* MB86A20S */ |
diff --git a/drivers/media/dvb-frontends/mn88472.h b/drivers/media/dvb-frontends/mn88472.h index 323632523876..8cd5ef61903b 100644 --- a/drivers/media/dvb-frontends/mn88472.h +++ b/drivers/media/dvb-frontends/mn88472.h | |||
| @@ -19,21 +19,21 @@ | |||
| 19 | 19 | ||
| 20 | #include <linux/dvb/frontend.h> | 20 | #include <linux/dvb/frontend.h> |
| 21 | 21 | ||
| 22 | /* Define old names for backward compatibility */ | ||
| 23 | #define VARIABLE_TS_CLOCK MN88472_TS_CLK_VARIABLE | ||
| 24 | #define FIXED_TS_CLOCK MN88472_TS_CLK_FIXED | ||
| 25 | #define SERIAL_TS_MODE MN88472_TS_MODE_SERIAL | ||
| 26 | #define PARALLEL_TS_MODE MN88472_TS_MODE_PARALLEL | ||
| 27 | |||
| 22 | /** | 28 | /** |
| 23 | * struct mn88472_config - Platform data for the mn88472 driver | 29 | * struct mn88472_config - Platform data for the mn88472 driver |
| 24 | * @xtal: Clock frequency. | 30 | * @xtal: Clock frequency. |
| 25 | * @ts_mode: TS mode. | 31 | * @ts_mode: TS mode. |
| 26 | * @ts_clock: TS clock config. | 32 | * @ts_clock: TS clock config. |
| 27 | * @i2c_wr_max: Max number of bytes driver writes to I2C at once. | 33 | * @i2c_wr_max: Max number of bytes driver writes to I2C at once. |
| 28 | * @get_dvb_frontend: Get DVB frontend. | 34 | * @fe: pointer to a frontend pointer |
| 35 | * @get_dvb_frontend: Get DVB frontend callback. | ||
| 29 | */ | 36 | */ |
| 30 | |||
| 31 | /* Define old names for backward compatibility */ | ||
| 32 | #define VARIABLE_TS_CLOCK MN88472_TS_CLK_VARIABLE | ||
| 33 | #define FIXED_TS_CLOCK MN88472_TS_CLK_FIXED | ||
| 34 | #define SERIAL_TS_MODE MN88472_TS_MODE_SERIAL | ||
| 35 | #define PARALLEL_TS_MODE MN88472_TS_MODE_PARALLEL | ||
| 36 | |||
| 37 | struct mn88472_config { | 37 | struct mn88472_config { |
| 38 | unsigned int xtal; | 38 | unsigned int xtal; |
| 39 | 39 | ||
diff --git a/drivers/media/dvb-frontends/rtl2830.h b/drivers/media/dvb-frontends/rtl2830.h index 0cde151e6608..458ac94e8a8b 100644 --- a/drivers/media/dvb-frontends/rtl2830.h +++ b/drivers/media/dvb-frontends/rtl2830.h | |||
| @@ -32,7 +32,6 @@ | |||
| 32 | * @pid_filter: Set PID to PID filter. | 32 | * @pid_filter: Set PID to PID filter. |
| 33 | * @pid_filter_ctrl: Control PID filter. | 33 | * @pid_filter_ctrl: Control PID filter. |
| 34 | */ | 34 | */ |
| 35 | |||
| 36 | struct rtl2830_platform_data { | 35 | struct rtl2830_platform_data { |
| 37 | u32 clk; | 36 | u32 clk; |
| 38 | bool spec_inv; | 37 | bool spec_inv; |
diff --git a/drivers/media/dvb-frontends/rtl2832.h b/drivers/media/dvb-frontends/rtl2832.h index 03c0de039fa9..6a124ff71c2b 100644 --- a/drivers/media/dvb-frontends/rtl2832.h +++ b/drivers/media/dvb-frontends/rtl2832.h | |||
| @@ -35,7 +35,6 @@ | |||
| 35 | * @pid_filter: Set PID to PID filter. | 35 | * @pid_filter: Set PID to PID filter. |
| 36 | * @pid_filter_ctrl: Control PID filter. | 36 | * @pid_filter_ctrl: Control PID filter. |
| 37 | */ | 37 | */ |
| 38 | |||
| 39 | struct rtl2832_platform_data { | 38 | struct rtl2832_platform_data { |
| 40 | u32 clk; | 39 | u32 clk; |
| 41 | /* | 40 | /* |
diff --git a/drivers/media/dvb-frontends/rtl2832_sdr.h b/drivers/media/dvb-frontends/rtl2832_sdr.h index d8fc7e7212e3..8f88c2fb8627 100644 --- a/drivers/media/dvb-frontends/rtl2832_sdr.h +++ b/drivers/media/dvb-frontends/rtl2832_sdr.h | |||
| @@ -33,15 +33,11 @@ | |||
| 33 | * struct rtl2832_sdr_platform_data - Platform data for the rtl2832_sdr driver | 33 | * struct rtl2832_sdr_platform_data - Platform data for the rtl2832_sdr driver |
| 34 | * @clk: Clock frequency (4000000, 16000000, 25000000, 28800000). | 34 | * @clk: Clock frequency (4000000, 16000000, 25000000, 28800000). |
| 35 | * @tuner: Used tuner model. | 35 | * @tuner: Used tuner model. |
| 36 | * @i2c_client: rtl2832 demod driver I2C client. | 36 | * @regmap: pointer to &struct regmap. |
| 37 | * @bulk_read: rtl2832 driver private I/O interface. | ||
| 38 | * @bulk_write: rtl2832 driver private I/O interface. | ||
| 39 | * @update_bits: rtl2832 driver private I/O interface. | ||
| 40 | * @dvb_frontend: rtl2832 DVB frontend. | 37 | * @dvb_frontend: rtl2832 DVB frontend. |
| 41 | * @v4l2_subdev: Tuner v4l2 controls. | 38 | * @v4l2_subdev: Tuner v4l2 controls. |
| 42 | * @dvb_usb_device: DVB USB interface for USB streaming. | 39 | * @dvb_usb_device: DVB USB interface for USB streaming. |
| 43 | */ | 40 | */ |
| 44 | |||
| 45 | struct rtl2832_sdr_platform_data { | 41 | struct rtl2832_sdr_platform_data { |
| 46 | u32 clk; | 42 | u32 clk; |
| 47 | /* | 43 | /* |
diff --git a/drivers/media/dvb-frontends/sp887x.c b/drivers/media/dvb-frontends/sp887x.c index 7c511c3cd4ca..d2c402b52c6e 100644 --- a/drivers/media/dvb-frontends/sp887x.c +++ b/drivers/media/dvb-frontends/sp887x.c | |||
| @@ -57,7 +57,7 @@ static int sp887x_writereg (struct sp887x_state* state, u16 reg, u16 data) | |||
| 57 | int ret; | 57 | int ret; |
| 58 | 58 | ||
| 59 | if ((ret = i2c_transfer(state->i2c, &msg, 1)) != 1) { | 59 | if ((ret = i2c_transfer(state->i2c, &msg, 1)) != 1) { |
| 60 | /** | 60 | /* |
| 61 | * in case of soft reset we ignore ACK errors... | 61 | * in case of soft reset we ignore ACK errors... |
| 62 | */ | 62 | */ |
| 63 | if (!(reg == 0xf1a && data == 0x000 && | 63 | if (!(reg == 0xf1a && data == 0x000 && |
| @@ -130,7 +130,7 @@ static void sp887x_setup_agc (struct sp887x_state* state) | |||
| 130 | 130 | ||
| 131 | #define BLOCKSIZE 30 | 131 | #define BLOCKSIZE 30 |
| 132 | #define FW_SIZE 0x4000 | 132 | #define FW_SIZE 0x4000 |
| 133 | /** | 133 | /* |
| 134 | * load firmware and setup MPEG interface... | 134 | * load firmware and setup MPEG interface... |
| 135 | */ | 135 | */ |
| 136 | static int sp887x_initial_setup (struct dvb_frontend* fe, const struct firmware *fw) | 136 | static int sp887x_initial_setup (struct dvb_frontend* fe, const struct firmware *fw) |
| @@ -279,7 +279,7 @@ static int configure_reg0xc05(struct dtv_frontend_properties *p, u16 *reg0xc05) | |||
| 279 | return 0; | 279 | return 0; |
| 280 | } | 280 | } |
| 281 | 281 | ||
| 282 | /** | 282 | /* |
| 283 | * estimates division of two 24bit numbers, | 283 | * estimates division of two 24bit numbers, |
| 284 | * derived from the ves1820/stv0299 driver code | 284 | * derived from the ves1820/stv0299 driver code |
| 285 | */ | 285 | */ |
diff --git a/drivers/media/dvb-frontends/stb6000.h b/drivers/media/dvb-frontends/stb6000.h index 78e75dfc317f..e94a3d5facf6 100644 --- a/drivers/media/dvb-frontends/stb6000.h +++ b/drivers/media/dvb-frontends/stb6000.h | |||
| @@ -26,15 +26,16 @@ | |||
| 26 | #include <linux/i2c.h> | 26 | #include <linux/i2c.h> |
| 27 | #include "dvb_frontend.h" | 27 | #include "dvb_frontend.h" |
| 28 | 28 | ||
| 29 | #if IS_REACHABLE(CONFIG_DVB_STB6000) | ||
| 29 | /** | 30 | /** |
| 30 | * Attach a stb6000 tuner to the supplied frontend structure. | 31 | * Attach a stb6000 tuner to the supplied frontend structure. |
| 31 | * | 32 | * |
| 32 | * @param fe Frontend to attach to. | 33 | * @fe: Frontend to attach to. |
| 33 | * @param addr i2c address of the tuner. | 34 | * @addr: i2c address of the tuner. |
| 34 | * @param i2c i2c adapter to use. | 35 | * @i2c: i2c adapter to use. |
| 35 | * @return FE pointer on success, NULL on failure. | 36 | * |
| 37 | * return: FE pointer on success, NULL on failure. | ||
| 36 | */ | 38 | */ |
| 37 | #if IS_REACHABLE(CONFIG_DVB_STB6000) | ||
| 38 | extern struct dvb_frontend *stb6000_attach(struct dvb_frontend *fe, int addr, | 39 | extern struct dvb_frontend *stb6000_attach(struct dvb_frontend *fe, int addr, |
| 39 | struct i2c_adapter *i2c); | 40 | struct i2c_adapter *i2c); |
| 40 | #else | 41 | #else |
diff --git a/drivers/media/dvb-frontends/stv0299.c b/drivers/media/dvb-frontends/stv0299.c index b36b21a13201..b1f3d675d316 100644 --- a/drivers/media/dvb-frontends/stv0299.c +++ b/drivers/media/dvb-frontends/stv0299.c | |||
| @@ -368,7 +368,7 @@ static int stv0299_set_voltage(struct dvb_frontend *fe, | |||
| 368 | reg0x08 = stv0299_readreg (state, 0x08); | 368 | reg0x08 = stv0299_readreg (state, 0x08); |
| 369 | reg0x0c = stv0299_readreg (state, 0x0c); | 369 | reg0x0c = stv0299_readreg (state, 0x0c); |
| 370 | 370 | ||
| 371 | /** | 371 | /* |
| 372 | * H/V switching over OP0, OP1 and OP2 are LNB power enable bits | 372 | * H/V switching over OP0, OP1 and OP2 are LNB power enable bits |
| 373 | */ | 373 | */ |
| 374 | reg0x0c &= 0x0f; | 374 | reg0x0c &= 0x0f; |
diff --git a/drivers/media/dvb-frontends/tda10071.h b/drivers/media/dvb-frontends/tda10071.h index 8f184026ee11..da1a87bc1603 100644 --- a/drivers/media/dvb-frontends/tda10071.h +++ b/drivers/media/dvb-frontends/tda10071.h | |||
| @@ -38,7 +38,6 @@ | |||
| 38 | * @tuner_i2c_addr: CX24118A tuner I2C address (0x14, 0x54, ...). | 38 | * @tuner_i2c_addr: CX24118A tuner I2C address (0x14, 0x54, ...). |
| 39 | * @get_dvb_frontend: Get DVB frontend. | 39 | * @get_dvb_frontend: Get DVB frontend. |
| 40 | */ | 40 | */ |
| 41 | |||
| 42 | struct tda10071_platform_data { | 41 | struct tda10071_platform_data { |
| 43 | u32 clk; | 42 | u32 clk; |
| 44 | u16 i2c_wr_max; | 43 | u16 i2c_wr_max; |
diff --git a/drivers/media/dvb-frontends/tda826x.h b/drivers/media/dvb-frontends/tda826x.h index 81abe1aebe9f..6a7bed12e741 100644 --- a/drivers/media/dvb-frontends/tda826x.h +++ b/drivers/media/dvb-frontends/tda826x.h | |||
| @@ -29,11 +29,12 @@ | |||
| 29 | /** | 29 | /** |
| 30 | * Attach a tda826x tuner to the supplied frontend structure. | 30 | * Attach a tda826x tuner to the supplied frontend structure. |
| 31 | * | 31 | * |
| 32 | * @param fe Frontend to attach to. | 32 | * @fe: Frontend to attach to. |
| 33 | * @param addr i2c address of the tuner. | 33 | * @addr: i2c address of the tuner. |
| 34 | * @param i2c i2c adapter to use. | 34 | * @i2c: i2c adapter to use. |
| 35 | * @param has_loopthrough Set to 1 if the card has a loopthrough RF connector. | 35 | * @has_loopthrough: Set to 1 if the card has a loopthrough RF connector. |
| 36 | * @return FE pointer on success, NULL on failure. | 36 | * |
| 37 | * return: FE pointer on success, NULL on failure. | ||
| 37 | */ | 38 | */ |
| 38 | #if IS_REACHABLE(CONFIG_DVB_TDA826X) | 39 | #if IS_REACHABLE(CONFIG_DVB_TDA826X) |
| 39 | extern struct dvb_frontend* tda826x_attach(struct dvb_frontend *fe, int addr, | 40 | extern struct dvb_frontend* tda826x_attach(struct dvb_frontend *fe, int addr, |
diff --git a/drivers/media/dvb-frontends/tua6100.c b/drivers/media/dvb-frontends/tua6100.c index 18e6d4c5be21..1d41abd47f04 100644 --- a/drivers/media/dvb-frontends/tua6100.c +++ b/drivers/media/dvb-frontends/tua6100.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /** | 1 | /* |
| 2 | * Driver for Infineon tua6100 pll. | 2 | * Driver for Infineon tua6100 pll. |
| 3 | * | 3 | * |
| 4 | * (c) 2006 Andrew de Quincey | 4 | * (c) 2006 Andrew de Quincey |
diff --git a/drivers/media/dvb-frontends/tua6100.h b/drivers/media/dvb-frontends/tua6100.h index 9f15cbdfdeca..6c098a894ea6 100644 --- a/drivers/media/dvb-frontends/tua6100.h +++ b/drivers/media/dvb-frontends/tua6100.h | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /** | 1 | /* |
| 2 | * Driver for Infineon tua6100 PLL. | 2 | * Driver for Infineon tua6100 PLL. |
| 3 | * | 3 | * |
| 4 | * (c) 2006 Andrew de Quincey | 4 | * (c) 2006 Andrew de Quincey |
diff --git a/drivers/media/dvb-frontends/zd1301_demod.h b/drivers/media/dvb-frontends/zd1301_demod.h index ceb2e05e873c..6cd8f6f9c415 100644 --- a/drivers/media/dvb-frontends/zd1301_demod.h +++ b/drivers/media/dvb-frontends/zd1301_demod.h | |||
| @@ -27,7 +27,6 @@ | |||
| 27 | * @reg_read: Register read callback. | 27 | * @reg_read: Register read callback. |
| 28 | * @reg_write: Register write callback. | 28 | * @reg_write: Register write callback. |
| 29 | */ | 29 | */ |
| 30 | |||
| 31 | struct zd1301_demod_platform_data { | 30 | struct zd1301_demod_platform_data { |
| 32 | void *reg_priv; | 31 | void *reg_priv; |
| 33 | int (*reg_read)(void *, u16, u8 *); | 32 | int (*reg_read)(void *, u16, u8 *); |
| @@ -41,8 +40,7 @@ struct zd1301_demod_platform_data { | |||
| 41 | * | 40 | * |
| 42 | * Return: Pointer to DVB frontend which given platform device owns. | 41 | * Return: Pointer to DVB frontend which given platform device owns. |
| 43 | */ | 42 | */ |
| 44 | 43 | struct dvb_frontend *zd1301_demod_get_dvb_frontend(struct platform_device *pdev); | |
| 45 | struct dvb_frontend *zd1301_demod_get_dvb_frontend(struct platform_device *); | ||
| 46 | 44 | ||
| 47 | /** | 45 | /** |
| 48 | * zd1301_demod_get_i2c_adapter() - Get pointer to I2C adapter | 46 | * zd1301_demod_get_i2c_adapter() - Get pointer to I2C adapter |
| @@ -50,11 +48,16 @@ struct dvb_frontend *zd1301_demod_get_dvb_frontend(struct platform_device *); | |||
| 50 | * | 48 | * |
| 51 | * Return: Pointer to I2C adapter which given platform device owns. | 49 | * Return: Pointer to I2C adapter which given platform device owns. |
| 52 | */ | 50 | */ |
| 53 | 51 | struct i2c_adapter *zd1301_demod_get_i2c_adapter(struct platform_device *pdev); | |
| 54 | struct i2c_adapter *zd1301_demod_get_i2c_adapter(struct platform_device *); | ||
| 55 | 52 | ||
| 56 | #else | 53 | #else |
| 57 | 54 | ||
| 55 | /** | ||
| 56 | * zd1301_demod_get_dvb_frontend() - Attach a zd1301 frontend | ||
| 57 | * @dev: Pointer to platform device | ||
| 58 | * | ||
| 59 | * Return: Pointer to %struct dvb_frontend or NULL if attach fails. | ||
| 60 | */ | ||
| 58 | static inline struct dvb_frontend *zd1301_demod_get_dvb_frontend(struct platform_device *dev) | 61 | static inline struct dvb_frontend *zd1301_demod_get_dvb_frontend(struct platform_device *dev) |
| 59 | { | 62 | { |
| 60 | printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); | 63 | printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); |
diff --git a/drivers/media/dvb-frontends/zl10036.c b/drivers/media/dvb-frontends/zl10036.c index 062282739ce5..89dd65ae88ad 100644 --- a/drivers/media/dvb-frontends/zl10036.c +++ b/drivers/media/dvb-frontends/zl10036.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /** | 1 | /* |
| 2 | * Driver for Zarlink zl10036 DVB-S silicon tuner | 2 | * Driver for Zarlink zl10036 DVB-S silicon tuner |
| 3 | * | 3 | * |
| 4 | * Copyright (C) 2006 Tino Reichardt | 4 | * Copyright (C) 2006 Tino Reichardt |
| @@ -157,7 +157,7 @@ static int zl10036_sleep(struct dvb_frontend *fe) | |||
| 157 | return ret; | 157 | return ret; |
| 158 | } | 158 | } |
| 159 | 159 | ||
| 160 | /** | 160 | /* |
| 161 | * register map of the ZL10036/ZL10038 | 161 | * register map of the ZL10036/ZL10038 |
| 162 | * | 162 | * |
| 163 | * reg[default] content | 163 | * reg[default] content |
| @@ -219,7 +219,7 @@ static int zl10036_set_bandwidth(struct zl10036_state *state, u32 fbw) | |||
| 219 | if (fbw <= 28820) { | 219 | if (fbw <= 28820) { |
| 220 | br = _BR_MAXIMUM; | 220 | br = _BR_MAXIMUM; |
| 221 | } else { | 221 | } else { |
| 222 | /** | 222 | /* |
| 223 | * f(bw)=34,6MHz f(xtal)=10.111MHz | 223 | * f(bw)=34,6MHz f(xtal)=10.111MHz |
| 224 | * br = (10111/34600) * 63 * 1/K = 14; | 224 | * br = (10111/34600) * 63 * 1/K = 14; |
| 225 | */ | 225 | */ |
| @@ -315,7 +315,7 @@ static int zl10036_set_params(struct dvb_frontend *fe) | |||
| 315 | || (frequency > fe->ops.info.frequency_max)) | 315 | || (frequency > fe->ops.info.frequency_max)) |
| 316 | return -EINVAL; | 316 | return -EINVAL; |
| 317 | 317 | ||
| 318 | /** | 318 | /* |
| 319 | * alpha = 1.35 for dvb-s | 319 | * alpha = 1.35 for dvb-s |
| 320 | * fBW = (alpha*symbolrate)/(2*0.8) | 320 | * fBW = (alpha*symbolrate)/(2*0.8) |
| 321 | * 1.35 / (2*0.8) = 27 / 32 | 321 | * 1.35 / (2*0.8) = 27 / 32 |
diff --git a/drivers/media/dvb-frontends/zl10036.h b/drivers/media/dvb-frontends/zl10036.h index 88751adfecf7..ec90ca927739 100644 --- a/drivers/media/dvb-frontends/zl10036.h +++ b/drivers/media/dvb-frontends/zl10036.h | |||
| @@ -20,20 +20,20 @@ | |||
| 20 | #include <linux/i2c.h> | 20 | #include <linux/i2c.h> |
| 21 | #include "dvb_frontend.h" | 21 | #include "dvb_frontend.h" |
| 22 | 22 | ||
| 23 | /** | ||
| 24 | * Attach a zl10036 tuner to the supplied frontend structure. | ||
| 25 | * | ||
| 26 | * @param fe Frontend to attach to. | ||
| 27 | * @param config zl10036_config structure | ||
| 28 | * @return FE pointer on success, NULL on failure. | ||
| 29 | */ | ||
| 30 | |||
| 31 | struct zl10036_config { | 23 | struct zl10036_config { |
| 32 | u8 tuner_address; | 24 | u8 tuner_address; |
| 33 | int rf_loop_enable; | 25 | int rf_loop_enable; |
| 34 | }; | 26 | }; |
| 35 | 27 | ||
| 36 | #if IS_REACHABLE(CONFIG_DVB_ZL10036) | 28 | #if IS_REACHABLE(CONFIG_DVB_ZL10036) |
| 29 | /** | ||
| 30 | * Attach a zl10036 tuner to the supplied frontend structure. | ||
| 31 | * | ||
| 32 | * @fe: Frontend to attach to. | ||
| 33 | * @config: zl10036_config structure. | ||
| 34 | * @i2c: pointer to struct i2c_adapter. | ||
| 35 | * return: FE pointer on success, NULL on failure. | ||
| 36 | */ | ||
| 37 | extern struct dvb_frontend *zl10036_attach(struct dvb_frontend *fe, | 37 | extern struct dvb_frontend *zl10036_attach(struct dvb_frontend *fe, |
| 38 | const struct zl10036_config *config, struct i2c_adapter *i2c); | 38 | const struct zl10036_config *config, struct i2c_adapter *i2c); |
| 39 | #else | 39 | #else |
diff --git a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig index 3c6d6428f525..cb5d7ff82915 100644 --- a/drivers/media/i2c/Kconfig +++ b/drivers/media/i2c/Kconfig | |||
| @@ -676,6 +676,7 @@ config VIDEO_OV13858 | |||
| 676 | tristate "OmniVision OV13858 sensor support" | 676 | tristate "OmniVision OV13858 sensor support" |
| 677 | depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API | 677 | depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API |
| 678 | depends on MEDIA_CAMERA_SUPPORT | 678 | depends on MEDIA_CAMERA_SUPPORT |
| 679 | select V4L2_FWNODE | ||
| 679 | ---help--- | 680 | ---help--- |
| 680 | This is a Video4Linux2 sensor-level driver for the OmniVision | 681 | This is a Video4Linux2 sensor-level driver for the OmniVision |
| 681 | OV13858 camera. | 682 | OV13858 camera. |
diff --git a/drivers/media/i2c/et8ek8/Kconfig b/drivers/media/i2c/et8ek8/Kconfig index 14399365ad7f..9fe409e95666 100644 --- a/drivers/media/i2c/et8ek8/Kconfig +++ b/drivers/media/i2c/et8ek8/Kconfig | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | config VIDEO_ET8EK8 | 1 | config VIDEO_ET8EK8 |
| 2 | tristate "ET8EK8 camera sensor support" | 2 | tristate "ET8EK8 camera sensor support" |
| 3 | depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API | 3 | depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API |
| 4 | select V4L2_FWNODE | ||
| 4 | ---help--- | 5 | ---help--- |
| 5 | This is a driver for the Toshiba ET8EK8 5 MP camera sensor. | 6 | This is a driver for the Toshiba ET8EK8 5 MP camera sensor. |
| 6 | It is used for example in Nokia N900 (RX-51). | 7 | It is used for example in Nokia N900 (RX-51). |
diff --git a/drivers/media/i2c/imx274.c b/drivers/media/i2c/imx274.c index 800b9bf9cdd3..2f71af2f90bf 100644 --- a/drivers/media/i2c/imx274.c +++ b/drivers/media/i2c/imx274.c | |||
| @@ -1770,8 +1770,7 @@ static int imx274_probe(struct i2c_client *client, | |||
| 1770 | return 0; | 1770 | return 0; |
| 1771 | 1771 | ||
| 1772 | err_ctrls: | 1772 | err_ctrls: |
| 1773 | v4l2_async_unregister_subdev(sd); | 1773 | v4l2_ctrl_handler_free(&imx274->ctrls.handler); |
| 1774 | v4l2_ctrl_handler_free(sd->ctrl_handler); | ||
| 1775 | err_me: | 1774 | err_me: |
| 1776 | media_entity_cleanup(&sd->entity); | 1775 | media_entity_cleanup(&sd->entity); |
| 1777 | err_regmap: | 1776 | err_regmap: |
| @@ -1788,7 +1787,7 @@ static int imx274_remove(struct i2c_client *client) | |||
| 1788 | imx274_write_table(imx274, mode_table[IMX274_MODE_STOP_STREAM]); | 1787 | imx274_write_table(imx274, mode_table[IMX274_MODE_STOP_STREAM]); |
| 1789 | 1788 | ||
| 1790 | v4l2_async_unregister_subdev(sd); | 1789 | v4l2_async_unregister_subdev(sd); |
| 1791 | v4l2_ctrl_handler_free(sd->ctrl_handler); | 1790 | v4l2_ctrl_handler_free(&imx274->ctrls.handler); |
| 1792 | media_entity_cleanup(&sd->entity); | 1791 | media_entity_cleanup(&sd->entity); |
| 1793 | mutex_destroy(&imx274->lock); | 1792 | mutex_destroy(&imx274->lock); |
| 1794 | return 0; | 1793 | return 0; |
diff --git a/drivers/media/i2c/lm3560.c b/drivers/media/i2c/lm3560.c index 251a2aaf98c3..b600e03aa94b 100644 --- a/drivers/media/i2c/lm3560.c +++ b/drivers/media/i2c/lm3560.c | |||
| @@ -50,6 +50,7 @@ enum led_enable { | |||
| 50 | /** | 50 | /** |
| 51 | * struct lm3560_flash | 51 | * struct lm3560_flash |
| 52 | * | 52 | * |
| 53 | * @dev: pointer to &struct device | ||
| 53 | * @pdata: platform data | 54 | * @pdata: platform data |
| 54 | * @regmap: reg. map for i2c | 55 | * @regmap: reg. map for i2c |
| 55 | * @lock: muxtex for serial access. | 56 | * @lock: muxtex for serial access. |
diff --git a/drivers/media/i2c/m5mols/m5mols_capture.c b/drivers/media/i2c/m5mols/m5mols_capture.c index a0cd6dc32eb0..0fb457f57995 100644 --- a/drivers/media/i2c/m5mols/m5mols_capture.c +++ b/drivers/media/i2c/m5mols/m5mols_capture.c | |||
| @@ -33,6 +33,10 @@ | |||
| 33 | 33 | ||
| 34 | /** | 34 | /** |
| 35 | * m5mols_read_rational - I2C read of a rational number | 35 | * m5mols_read_rational - I2C read of a rational number |
| 36 | * @sd: sub-device, as pointed by struct v4l2_subdev | ||
| 37 | * @addr_num: numerator register | ||
| 38 | * @addr_den: denominator register | ||
| 39 | * @val: place to store the division result | ||
| 36 | * | 40 | * |
| 37 | * Read numerator and denominator from registers @addr_num and @addr_den | 41 | * Read numerator and denominator from registers @addr_num and @addr_den |
| 38 | * respectively and return the division result in @val. | 42 | * respectively and return the division result in @val. |
| @@ -53,6 +57,7 @@ static int m5mols_read_rational(struct v4l2_subdev *sd, u32 addr_num, | |||
| 53 | 57 | ||
| 54 | /** | 58 | /** |
| 55 | * m5mols_capture_info - Gather captured image information | 59 | * m5mols_capture_info - Gather captured image information |
| 60 | * @info: M-5MOLS driver data structure | ||
| 56 | * | 61 | * |
| 57 | * For now it gathers only EXIF information and file size. | 62 | * For now it gathers only EXIF information and file size. |
| 58 | */ | 63 | */ |
diff --git a/drivers/media/i2c/m5mols/m5mols_controls.c b/drivers/media/i2c/m5mols/m5mols_controls.c index c2218c0a9e6f..82eab7c2bc8c 100644 --- a/drivers/media/i2c/m5mols/m5mols_controls.c +++ b/drivers/media/i2c/m5mols/m5mols_controls.c | |||
| @@ -126,6 +126,7 @@ static struct m5mols_scenemode m5mols_default_scenemode[] = { | |||
| 126 | 126 | ||
| 127 | /** | 127 | /** |
| 128 | * m5mols_do_scenemode() - Change current scenemode | 128 | * m5mols_do_scenemode() - Change current scenemode |
| 129 | * @info: M-5MOLS driver data structure | ||
| 129 | * @mode: Desired mode of the scenemode | 130 | * @mode: Desired mode of the scenemode |
| 130 | * | 131 | * |
| 131 | * WARNING: The execution order is important. Do not change the order. | 132 | * WARNING: The execution order is important. Do not change the order. |
diff --git a/drivers/media/i2c/m5mols/m5mols_core.c b/drivers/media/i2c/m5mols/m5mols_core.c index 463534d44756..12e79f9e32d5 100644 --- a/drivers/media/i2c/m5mols/m5mols_core.c +++ b/drivers/media/i2c/m5mols/m5mols_core.c | |||
| @@ -114,7 +114,8 @@ static const struct m5mols_resolution m5mols_reg_res[] = { | |||
| 114 | 114 | ||
| 115 | /** | 115 | /** |
| 116 | * m5mols_swap_byte - an byte array to integer conversion function | 116 | * m5mols_swap_byte - an byte array to integer conversion function |
| 117 | * @size: size in bytes of I2C packet defined in the M-5MOLS datasheet | 117 | * @data: byte array |
| 118 | * @length: size in bytes of I2C packet defined in the M-5MOLS datasheet | ||
| 118 | * | 119 | * |
| 119 | * Convert I2C data byte array with performing any required byte | 120 | * Convert I2C data byte array with performing any required byte |
| 120 | * reordering to assure proper values for each data type, regardless | 121 | * reordering to assure proper values for each data type, regardless |
| @@ -132,8 +133,9 @@ static u32 m5mols_swap_byte(u8 *data, u8 length) | |||
| 132 | 133 | ||
| 133 | /** | 134 | /** |
| 134 | * m5mols_read - I2C read function | 135 | * m5mols_read - I2C read function |
| 135 | * @reg: combination of size, category and command for the I2C packet | 136 | * @sd: sub-device, as pointed by struct v4l2_subdev |
| 136 | * @size: desired size of I2C packet | 137 | * @size: desired size of I2C packet |
| 138 | * @reg: combination of size, category and command for the I2C packet | ||
| 137 | * @val: read value | 139 | * @val: read value |
| 138 | * | 140 | * |
| 139 | * Returns 0 on success, or else negative errno. | 141 | * Returns 0 on success, or else negative errno. |
| @@ -232,6 +234,7 @@ int m5mols_read_u32(struct v4l2_subdev *sd, u32 reg, u32 *val) | |||
| 232 | 234 | ||
| 233 | /** | 235 | /** |
| 234 | * m5mols_write - I2C command write function | 236 | * m5mols_write - I2C command write function |
| 237 | * @sd: sub-device, as pointed by struct v4l2_subdev | ||
| 235 | * @reg: combination of size, category and command for the I2C packet | 238 | * @reg: combination of size, category and command for the I2C packet |
| 236 | * @val: value to write | 239 | * @val: value to write |
| 237 | * | 240 | * |
| @@ -284,6 +287,7 @@ int m5mols_write(struct v4l2_subdev *sd, u32 reg, u32 val) | |||
| 284 | 287 | ||
| 285 | /** | 288 | /** |
| 286 | * m5mols_busy_wait - Busy waiting with I2C register polling | 289 | * m5mols_busy_wait - Busy waiting with I2C register polling |
| 290 | * @sd: sub-device, as pointed by struct v4l2_subdev | ||
| 287 | * @reg: the I2C_REG() address of an 8-bit status register to check | 291 | * @reg: the I2C_REG() address of an 8-bit status register to check |
| 288 | * @value: expected status register value | 292 | * @value: expected status register value |
| 289 | * @mask: bit mask for the read status register value | 293 | * @mask: bit mask for the read status register value |
| @@ -316,6 +320,8 @@ int m5mols_busy_wait(struct v4l2_subdev *sd, u32 reg, u32 value, u32 mask, | |||
| 316 | 320 | ||
| 317 | /** | 321 | /** |
| 318 | * m5mols_enable_interrupt - Clear interrupt pending bits and unmask interrupts | 322 | * m5mols_enable_interrupt - Clear interrupt pending bits and unmask interrupts |
| 323 | * @sd: sub-device, as pointed by struct v4l2_subdev | ||
| 324 | * @reg: combination of size, category and command for the I2C packet | ||
| 319 | * | 325 | * |
| 320 | * Before writing desired interrupt value the INT_FACTOR register should | 326 | * Before writing desired interrupt value the INT_FACTOR register should |
| 321 | * be read to clear pending interrupts. | 327 | * be read to clear pending interrupts. |
| @@ -349,6 +355,8 @@ int m5mols_wait_interrupt(struct v4l2_subdev *sd, u8 irq_mask, u32 timeout) | |||
| 349 | 355 | ||
| 350 | /** | 356 | /** |
| 351 | * m5mols_reg_mode - Write the mode and check busy status | 357 | * m5mols_reg_mode - Write the mode and check busy status |
| 358 | * @sd: sub-device, as pointed by struct v4l2_subdev | ||
| 359 | * @mode: the required operation mode | ||
| 352 | * | 360 | * |
| 353 | * It always accompanies a little delay changing the M-5MOLS mode, so it is | 361 | * It always accompanies a little delay changing the M-5MOLS mode, so it is |
| 354 | * needed checking current busy status to guarantee right mode. | 362 | * needed checking current busy status to guarantee right mode. |
| @@ -364,6 +372,7 @@ static int m5mols_reg_mode(struct v4l2_subdev *sd, u8 mode) | |||
| 364 | 372 | ||
| 365 | /** | 373 | /** |
| 366 | * m5mols_set_mode - set the M-5MOLS controller mode | 374 | * m5mols_set_mode - set the M-5MOLS controller mode |
| 375 | * @info: M-5MOLS driver data structure | ||
| 367 | * @mode: the required operation mode | 376 | * @mode: the required operation mode |
| 368 | * | 377 | * |
| 369 | * The commands of M-5MOLS are grouped into specific modes. Each functionality | 378 | * The commands of M-5MOLS are grouped into specific modes. Each functionality |
| @@ -421,6 +430,7 @@ int m5mols_set_mode(struct m5mols_info *info, u8 mode) | |||
| 421 | 430 | ||
| 422 | /** | 431 | /** |
| 423 | * m5mols_get_version - retrieve full revisions information of M-5MOLS | 432 | * m5mols_get_version - retrieve full revisions information of M-5MOLS |
| 433 | * @sd: sub-device, as pointed by struct v4l2_subdev | ||
| 424 | * | 434 | * |
| 425 | * The version information includes revisions of hardware and firmware, | 435 | * The version information includes revisions of hardware and firmware, |
| 426 | * AutoFocus alghorithm version and the version string. | 436 | * AutoFocus alghorithm version and the version string. |
| @@ -489,6 +499,7 @@ static enum m5mols_restype __find_restype(u32 code) | |||
| 489 | 499 | ||
| 490 | /** | 500 | /** |
| 491 | * __find_resolution - Lookup preset and type of M-5MOLS's resolution | 501 | * __find_resolution - Lookup preset and type of M-5MOLS's resolution |
| 502 | * @sd: sub-device, as pointed by struct v4l2_subdev | ||
| 492 | * @mf: pixel format to find/negotiate the resolution preset for | 503 | * @mf: pixel format to find/negotiate the resolution preset for |
| 493 | * @type: M-5MOLS resolution type | 504 | * @type: M-5MOLS resolution type |
| 494 | * @resolution: M-5MOLS resolution preset register value | 505 | * @resolution: M-5MOLS resolution preset register value |
| @@ -662,6 +673,7 @@ static const struct v4l2_subdev_pad_ops m5mols_pad_ops = { | |||
| 662 | 673 | ||
| 663 | /** | 674 | /** |
| 664 | * m5mols_restore_controls - Apply current control values to the registers | 675 | * m5mols_restore_controls - Apply current control values to the registers |
| 676 | * @info: M-5MOLS driver data structure | ||
| 665 | * | 677 | * |
| 666 | * m5mols_do_scenemode() handles all parameters for which there is yet no | 678 | * m5mols_do_scenemode() handles all parameters for which there is yet no |
| 667 | * individual control. It should be replaced at some point by setting each | 679 | * individual control. It should be replaced at some point by setting each |
| @@ -686,6 +698,7 @@ int m5mols_restore_controls(struct m5mols_info *info) | |||
| 686 | 698 | ||
| 687 | /** | 699 | /** |
| 688 | * m5mols_start_monitor - Start the monitor mode | 700 | * m5mols_start_monitor - Start the monitor mode |
| 701 | * @info: M-5MOLS driver data structure | ||
| 689 | * | 702 | * |
| 690 | * Before applying the controls setup the resolution and frame rate | 703 | * Before applying the controls setup the resolution and frame rate |
| 691 | * in PARAMETER mode, and then switch over to MONITOR mode. | 704 | * in PARAMETER mode, and then switch over to MONITOR mode. |
| @@ -789,6 +802,7 @@ int __attribute__ ((weak)) m5mols_update_fw(struct v4l2_subdev *sd, | |||
| 789 | 802 | ||
| 790 | /** | 803 | /** |
| 791 | * m5mols_fw_start - M-5MOLS internal ARM controller initialization | 804 | * m5mols_fw_start - M-5MOLS internal ARM controller initialization |
| 805 | * @sd: sub-device, as pointed by struct v4l2_subdev | ||
| 792 | * | 806 | * |
| 793 | * Execute the M-5MOLS internal ARM controller initialization sequence. | 807 | * Execute the M-5MOLS internal ARM controller initialization sequence. |
| 794 | * This function should be called after the supply voltage has been | 808 | * This function should be called after the supply voltage has been |
| @@ -844,6 +858,8 @@ static int m5mols_auto_focus_stop(struct m5mols_info *info) | |||
| 844 | 858 | ||
| 845 | /** | 859 | /** |
| 846 | * m5mols_s_power - Main sensor power control function | 860 | * m5mols_s_power - Main sensor power control function |
| 861 | * @sd: sub-device, as pointed by struct v4l2_subdev | ||
| 862 | * @on: if true, powers on the device; powers off otherwise. | ||
| 847 | * | 863 | * |
| 848 | * To prevent breaking the lens when the sensor is powered off the Soft-Landing | 864 | * To prevent breaking the lens when the sensor is powered off the Soft-Landing |
| 849 | * algorithm is called where available. The Soft-Landing algorithm availability | 865 | * algorithm is called where available. The Soft-Landing algorithm availability |
diff --git a/drivers/media/i2c/ov5647.c b/drivers/media/i2c/ov5647.c index 34179d232a35..da39c49de503 100644 --- a/drivers/media/i2c/ov5647.c +++ b/drivers/media/i2c/ov5647.c | |||
| @@ -428,8 +428,8 @@ static int ov5647_sensor_set_register(struct v4l2_subdev *sd, | |||
| 428 | } | 428 | } |
| 429 | #endif | 429 | #endif |
| 430 | 430 | ||
| 431 | /** | 431 | /* |
| 432 | * @short Subdev core operations registration | 432 | * Subdev core operations registration |
| 433 | */ | 433 | */ |
| 434 | static const struct v4l2_subdev_core_ops ov5647_subdev_core_ops = { | 434 | static const struct v4l2_subdev_core_ops ov5647_subdev_core_ops = { |
| 435 | .s_power = ov5647_sensor_power, | 435 | .s_power = ov5647_sensor_power, |
diff --git a/drivers/media/i2c/s5k6a3.c b/drivers/media/i2c/s5k6a3.c index 67dcca76f981..2e140272794b 100644 --- a/drivers/media/i2c/s5k6a3.c +++ b/drivers/media/i2c/s5k6a3.c | |||
| @@ -53,6 +53,9 @@ enum { | |||
| 53 | * @gpio_reset: GPIO connected to the sensor's reset pin | 53 | * @gpio_reset: GPIO connected to the sensor's reset pin |
| 54 | * @lock: mutex protecting the structure's members below | 54 | * @lock: mutex protecting the structure's members below |
| 55 | * @format: media bus format at the sensor's source pad | 55 | * @format: media bus format at the sensor's source pad |
| 56 | * @clock: pointer to &struct clk. | ||
| 57 | * @clock_frequency: clock frequency | ||
| 58 | * @power_count: stores state if device is powered | ||
| 56 | */ | 59 | */ |
| 57 | struct s5k6a3 { | 60 | struct s5k6a3 { |
| 58 | struct device *dev; | 61 | struct device *dev; |
diff --git a/drivers/media/i2c/s5k6aa.c b/drivers/media/i2c/s5k6aa.c index 9fd254a8e20d..13c10b5e2b45 100644 --- a/drivers/media/i2c/s5k6aa.c +++ b/drivers/media/i2c/s5k6aa.c | |||
| @@ -421,6 +421,7 @@ static int s5k6aa_set_ahb_address(struct i2c_client *client) | |||
| 421 | 421 | ||
| 422 | /** | 422 | /** |
| 423 | * s5k6aa_configure_pixel_clock - apply ISP main clock/PLL configuration | 423 | * s5k6aa_configure_pixel_clock - apply ISP main clock/PLL configuration |
| 424 | * @s5k6aa: pointer to &struct s5k6aa describing the device | ||
| 424 | * | 425 | * |
| 425 | * Configure the internal ISP PLL for the required output frequency. | 426 | * Configure the internal ISP PLL for the required output frequency. |
| 426 | * Locking: called with s5k6aa.lock mutex held. | 427 | * Locking: called with s5k6aa.lock mutex held. |
| @@ -669,6 +670,7 @@ static int s5k6aa_set_input_params(struct s5k6aa *s5k6aa) | |||
| 669 | 670 | ||
| 670 | /** | 671 | /** |
| 671 | * s5k6aa_configure_video_bus - configure the video output interface | 672 | * s5k6aa_configure_video_bus - configure the video output interface |
| 673 | * @s5k6aa: pointer to &struct s5k6aa describing the device | ||
| 672 | * @bus_type: video bus type: parallel or MIPI-CSI | 674 | * @bus_type: video bus type: parallel or MIPI-CSI |
| 673 | * @nlanes: number of MIPI lanes to be used (MIPI-CSI only) | 675 | * @nlanes: number of MIPI lanes to be used (MIPI-CSI only) |
| 674 | * | 676 | * |
| @@ -724,6 +726,8 @@ static int s5k6aa_new_config_sync(struct i2c_client *client, int timeout, | |||
| 724 | 726 | ||
| 725 | /** | 727 | /** |
| 726 | * s5k6aa_set_prev_config - write user preview register set | 728 | * s5k6aa_set_prev_config - write user preview register set |
| 729 | * @s5k6aa: pointer to &struct s5k6aa describing the device | ||
| 730 | * @preset: s5kaa preset to be applied | ||
| 727 | * | 731 | * |
| 728 | * Configure output resolution and color fromat, pixel clock | 732 | * Configure output resolution and color fromat, pixel clock |
| 729 | * frequency range, device frame rate type and frame period range. | 733 | * frequency range, device frame rate type and frame period range. |
| @@ -777,6 +781,7 @@ static int s5k6aa_set_prev_config(struct s5k6aa *s5k6aa, | |||
| 777 | 781 | ||
| 778 | /** | 782 | /** |
| 779 | * s5k6aa_initialize_isp - basic ISP MCU initialization | 783 | * s5k6aa_initialize_isp - basic ISP MCU initialization |
| 784 | * @sd: pointer to V4L2 sub-device descriptor | ||
| 780 | * | 785 | * |
| 781 | * Configure AHB addresses for registers read/write; configure PLLs for | 786 | * Configure AHB addresses for registers read/write; configure PLLs for |
| 782 | * required output pixel clock. The ISP power supply needs to be already | 787 | * required output pixel clock. The ISP power supply needs to be already |
diff --git a/drivers/media/i2c/tvp514x.c b/drivers/media/i2c/tvp514x.c index ad2df998f9c5..d575b3e7e835 100644 --- a/drivers/media/i2c/tvp514x.c +++ b/drivers/media/i2c/tvp514x.c | |||
| @@ -86,6 +86,7 @@ static int tvp514x_s_stream(struct v4l2_subdev *sd, int enable); | |||
| 86 | /** | 86 | /** |
| 87 | * struct tvp514x_decoder - TVP5146/47 decoder object | 87 | * struct tvp514x_decoder - TVP5146/47 decoder object |
| 88 | * @sd: Subdevice Slave handle | 88 | * @sd: Subdevice Slave handle |
| 89 | * @hdl: embedded &struct v4l2_ctrl_handler | ||
| 89 | * @tvp514x_regs: copy of hw's regs with preset values. | 90 | * @tvp514x_regs: copy of hw's regs with preset values. |
| 90 | * @pdata: Board specific | 91 | * @pdata: Board specific |
| 91 | * @ver: Chip version | 92 | * @ver: Chip version |
| @@ -98,6 +99,9 @@ static int tvp514x_s_stream(struct v4l2_subdev *sd, int enable); | |||
| 98 | * @std_list: Standards list | 99 | * @std_list: Standards list |
| 99 | * @input: Input routing at chip level | 100 | * @input: Input routing at chip level |
| 100 | * @output: Output routing at chip level | 101 | * @output: Output routing at chip level |
| 102 | * @pad: subdev media pad associated with the decoder | ||
| 103 | * @format: media bus frame format | ||
| 104 | * @int_seq: driver's register init sequence | ||
| 101 | */ | 105 | */ |
| 102 | struct tvp514x_decoder { | 106 | struct tvp514x_decoder { |
| 103 | struct v4l2_subdev sd; | 107 | struct v4l2_subdev sd; |
| @@ -211,7 +215,7 @@ static struct tvp514x_reg tvp514x_reg_list_default[] = { | |||
| 211 | {TOK_TERM, 0, 0}, | 215 | {TOK_TERM, 0, 0}, |
| 212 | }; | 216 | }; |
| 213 | 217 | ||
| 214 | /** | 218 | /* |
| 215 | * List of image formats supported by TVP5146/47 decoder | 219 | * List of image formats supported by TVP5146/47 decoder |
| 216 | * Currently we are using 8 bit mode only, but can be | 220 | * Currently we are using 8 bit mode only, but can be |
| 217 | * extended to 10/20 bit mode. | 221 | * extended to 10/20 bit mode. |
| @@ -226,7 +230,7 @@ static const struct v4l2_fmtdesc tvp514x_fmt_list[] = { | |||
| 226 | }, | 230 | }, |
| 227 | }; | 231 | }; |
| 228 | 232 | ||
| 229 | /** | 233 | /* |
| 230 | * Supported standards - | 234 | * Supported standards - |
| 231 | * | 235 | * |
| 232 | * Currently supports two standards only, need to add support for rest of the | 236 | * Currently supports two standards only, need to add support for rest of the |
| @@ -931,7 +935,7 @@ static int tvp514x_get_pad_format(struct v4l2_subdev *sd, | |||
| 931 | * tvp514x_set_pad_format() - V4L2 decoder interface handler for set pad format | 935 | * tvp514x_set_pad_format() - V4L2 decoder interface handler for set pad format |
| 932 | * @sd: pointer to standard V4L2 sub-device structure | 936 | * @sd: pointer to standard V4L2 sub-device structure |
| 933 | * @cfg: pad configuration | 937 | * @cfg: pad configuration |
| 934 | * @format: pointer to v4l2_subdev_format structure | 938 | * @fmt: pointer to v4l2_subdev_format structure |
| 935 | * | 939 | * |
| 936 | * Set pad format for the output pad | 940 | * Set pad format for the output pad |
| 937 | */ | 941 | */ |
| @@ -1199,7 +1203,7 @@ static const struct tvp514x_reg tvp514xm_init_reg_seq[] = { | |||
| 1199 | {TOK_TERM, 0, 0}, | 1203 | {TOK_TERM, 0, 0}, |
| 1200 | }; | 1204 | }; |
| 1201 | 1205 | ||
| 1202 | /** | 1206 | /* |
| 1203 | * I2C Device Table - | 1207 | * I2C Device Table - |
| 1204 | * | 1208 | * |
| 1205 | * name - Name of the actual device/chip. | 1209 | * name - Name of the actual device/chip. |
diff --git a/drivers/media/pci/netup_unidvb/netup_unidvb_core.c b/drivers/media/pci/netup_unidvb/netup_unidvb_core.c index 11829c0fa138..509d69e6ca4a 100644 --- a/drivers/media/pci/netup_unidvb/netup_unidvb_core.c +++ b/drivers/media/pci/netup_unidvb/netup_unidvb_core.c | |||
| @@ -82,11 +82,11 @@ DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr); | |||
| 82 | * @start_addr_lo: DMA ring buffer start address, lower part | 82 | * @start_addr_lo: DMA ring buffer start address, lower part |
| 83 | * @start_addr_hi: DMA ring buffer start address, higher part | 83 | * @start_addr_hi: DMA ring buffer start address, higher part |
| 84 | * @size: DMA ring buffer size register | 84 | * @size: DMA ring buffer size register |
| 85 | Bits [0-7]: DMA packet size, 188 bytes | 85 | * * Bits [0-7]: DMA packet size, 188 bytes |
| 86 | Bits [16-23]: packets count in block, 128 packets | 86 | * * Bits [16-23]: packets count in block, 128 packets |
| 87 | Bits [24-31]: blocks count, 8 blocks | 87 | * * Bits [24-31]: blocks count, 8 blocks |
| 88 | * @timeout: DMA timeout in units of 8ns | 88 | * @timeout: DMA timeout in units of 8ns |
| 89 | For example, value of 375000000 equals to 3 sec | 89 | * For example, value of 375000000 equals to 3 sec |
| 90 | * @curr_addr_lo: Current ring buffer head address, lower part | 90 | * @curr_addr_lo: Current ring buffer head address, lower part |
| 91 | * @curr_addr_hi: Current ring buffer head address, higher part | 91 | * @curr_addr_hi: Current ring buffer head address, higher part |
| 92 | * @stat_pkt_received: Statistic register, not tested | 92 | * @stat_pkt_received: Statistic register, not tested |
diff --git a/drivers/media/pci/solo6x10/solo6x10-enc.c b/drivers/media/pci/solo6x10/solo6x10-enc.c index d28211bb9674..58d6b5131dd0 100644 --- a/drivers/media/pci/solo6x10/solo6x10-enc.c +++ b/drivers/media/pci/solo6x10/solo6x10-enc.c | |||
| @@ -175,7 +175,7 @@ out: | |||
| 175 | return 0; | 175 | return 0; |
| 176 | } | 176 | } |
| 177 | 177 | ||
| 178 | /** | 178 | /* |
| 179 | * Set channel Quality Profile (0-3). | 179 | * Set channel Quality Profile (0-3). |
| 180 | */ | 180 | */ |
| 181 | void solo_s_jpeg_qp(struct solo_dev *solo_dev, unsigned int ch, | 181 | void solo_s_jpeg_qp(struct solo_dev *solo_dev, unsigned int ch, |
diff --git a/drivers/media/pci/sta2x11/sta2x11_vip.c b/drivers/media/pci/sta2x11/sta2x11_vip.c index eb5a9eae7c8e..dd199bfc1d45 100644 --- a/drivers/media/pci/sta2x11/sta2x11_vip.c +++ b/drivers/media/pci/sta2x11/sta2x11_vip.c | |||
| @@ -404,6 +404,7 @@ static const struct v4l2_file_operations vip_fops = { | |||
| 404 | * vidioc_querycap - return capabilities of device | 404 | * vidioc_querycap - return capabilities of device |
| 405 | * @file: descriptor of device | 405 | * @file: descriptor of device |
| 406 | * @cap: contains return values | 406 | * @cap: contains return values |
| 407 | * @priv: unused | ||
| 407 | * | 408 | * |
| 408 | * the capabilities of the device are returned | 409 | * the capabilities of the device are returned |
| 409 | * | 410 | * |
| @@ -429,6 +430,7 @@ static int vidioc_querycap(struct file *file, void *priv, | |||
| 429 | * vidioc_s_std - set video standard | 430 | * vidioc_s_std - set video standard |
| 430 | * @file: descriptor of device | 431 | * @file: descriptor of device |
| 431 | * @std: contains standard to be set | 432 | * @std: contains standard to be set |
| 433 | * @priv: unused | ||
| 432 | * | 434 | * |
| 433 | * the video standard is set | 435 | * the video standard is set |
| 434 | * | 436 | * |
| @@ -466,6 +468,7 @@ static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id std) | |||
| 466 | /** | 468 | /** |
| 467 | * vidioc_g_std - get video standard | 469 | * vidioc_g_std - get video standard |
| 468 | * @file: descriptor of device | 470 | * @file: descriptor of device |
| 471 | * @priv: unused | ||
| 469 | * @std: contains return values | 472 | * @std: contains return values |
| 470 | * | 473 | * |
| 471 | * the current video standard is returned | 474 | * the current video standard is returned |
| @@ -483,6 +486,7 @@ static int vidioc_g_std(struct file *file, void *priv, v4l2_std_id *std) | |||
| 483 | /** | 486 | /** |
| 484 | * vidioc_querystd - get possible video standards | 487 | * vidioc_querystd - get possible video standards |
| 485 | * @file: descriptor of device | 488 | * @file: descriptor of device |
| 489 | * @priv: unused | ||
| 486 | * @std: contains return values | 490 | * @std: contains return values |
| 487 | * | 491 | * |
| 488 | * all possible video standards are returned | 492 | * all possible video standards are returned |
| @@ -512,6 +516,7 @@ static int vidioc_enum_input(struct file *file, void *priv, | |||
| 512 | /** | 516 | /** |
| 513 | * vidioc_s_input - set input line | 517 | * vidioc_s_input - set input line |
| 514 | * @file: descriptor of device | 518 | * @file: descriptor of device |
| 519 | * @priv: unused | ||
| 515 | * @i: new input line number | 520 | * @i: new input line number |
| 516 | * | 521 | * |
| 517 | * the current active input line is set | 522 | * the current active input line is set |
| @@ -538,6 +543,7 @@ static int vidioc_s_input(struct file *file, void *priv, unsigned int i) | |||
| 538 | /** | 543 | /** |
| 539 | * vidioc_g_input - return input line | 544 | * vidioc_g_input - return input line |
| 540 | * @file: descriptor of device | 545 | * @file: descriptor of device |
| 546 | * @priv: unused | ||
| 541 | * @i: returned input line number | 547 | * @i: returned input line number |
| 542 | * | 548 | * |
| 543 | * the current active input line is returned | 549 | * the current active input line is returned |
| @@ -554,6 +560,8 @@ static int vidioc_g_input(struct file *file, void *priv, unsigned int *i) | |||
| 554 | 560 | ||
| 555 | /** | 561 | /** |
| 556 | * vidioc_enum_fmt_vid_cap - return video capture format | 562 | * vidioc_enum_fmt_vid_cap - return video capture format |
| 563 | * @file: descriptor of device | ||
| 564 | * @priv: unused | ||
| 557 | * @f: returned format information | 565 | * @f: returned format information |
| 558 | * | 566 | * |
| 559 | * returns name and format of video capture | 567 | * returns name and format of video capture |
| @@ -577,6 +585,7 @@ static int vidioc_enum_fmt_vid_cap(struct file *file, void *priv, | |||
| 577 | /** | 585 | /** |
| 578 | * vidioc_try_fmt_vid_cap - set video capture format | 586 | * vidioc_try_fmt_vid_cap - set video capture format |
| 579 | * @file: descriptor of device | 587 | * @file: descriptor of device |
| 588 | * @priv: unused | ||
| 580 | * @f: new format | 589 | * @f: new format |
| 581 | * | 590 | * |
| 582 | * new video format is set which includes width and | 591 | * new video format is set which includes width and |
| @@ -639,6 +648,7 @@ static int vidioc_try_fmt_vid_cap(struct file *file, void *priv, | |||
| 639 | /** | 648 | /** |
| 640 | * vidioc_s_fmt_vid_cap - set current video format parameters | 649 | * vidioc_s_fmt_vid_cap - set current video format parameters |
| 641 | * @file: descriptor of device | 650 | * @file: descriptor of device |
| 651 | * @priv: unused | ||
| 642 | * @f: returned format information | 652 | * @f: returned format information |
| 643 | * | 653 | * |
| 644 | * set new capture format | 654 | * set new capture format |
| @@ -706,6 +716,7 @@ static int vidioc_s_fmt_vid_cap(struct file *file, void *priv, | |||
| 706 | /** | 716 | /** |
| 707 | * vidioc_g_fmt_vid_cap - get current video format parameters | 717 | * vidioc_g_fmt_vid_cap - get current video format parameters |
| 708 | * @file: descriptor of device | 718 | * @file: descriptor of device |
| 719 | * @priv: unused | ||
| 709 | * @f: contains format information | 720 | * @f: contains format information |
| 710 | * | 721 | * |
| 711 | * returns current video format parameters | 722 | * returns current video format parameters |
diff --git a/drivers/media/pci/tw68/tw68-risc.c b/drivers/media/pci/tw68/tw68-risc.c index 7439db212a69..82ff9c9494f3 100644 --- a/drivers/media/pci/tw68/tw68-risc.c +++ b/drivers/media/pci/tw68/tw68-risc.c | |||
| @@ -29,14 +29,15 @@ | |||
| 29 | #include "tw68.h" | 29 | #include "tw68.h" |
| 30 | 30 | ||
| 31 | /** | 31 | /** |
| 32 | * @rp pointer to current risc program position | 32 | * tw68_risc_field |
| 33 | * @sglist pointer to "scatter-gather list" of buffer pointers | 33 | * @rp: pointer to current risc program position |
| 34 | * @offset offset to target memory buffer | 34 | * @sglist: pointer to "scatter-gather list" of buffer pointers |
| 35 | * @sync_line 0 -> no sync, 1 -> odd sync, 2 -> even sync | 35 | * @offset: offset to target memory buffer |
| 36 | * @bpl number of bytes per scan line | 36 | * @sync_line: 0 -> no sync, 1 -> odd sync, 2 -> even sync |
| 37 | * @padding number of bytes of padding to add | 37 | * @bpl: number of bytes per scan line |
| 38 | * @lines number of lines in field | 38 | * @padding: number of bytes of padding to add |
| 39 | * @jump insert a jump at the start | 39 | * @lines: number of lines in field |
| 40 | * @jump: insert a jump at the start | ||
| 40 | */ | 41 | */ |
| 41 | static __le32 *tw68_risc_field(__le32 *rp, struct scatterlist *sglist, | 42 | static __le32 *tw68_risc_field(__le32 *rp, struct scatterlist *sglist, |
| 42 | unsigned int offset, u32 sync_line, | 43 | unsigned int offset, u32 sync_line, |
| @@ -120,18 +121,18 @@ static __le32 *tw68_risc_field(__le32 *rp, struct scatterlist *sglist, | |||
| 120 | * memory for the dma controller "program" and then fills in that | 121 | * memory for the dma controller "program" and then fills in that |
| 121 | * memory with the appropriate "instructions". | 122 | * memory with the appropriate "instructions". |
| 122 | * | 123 | * |
| 123 | * @pci_dev structure with info about the pci | 124 | * @pci: structure with info about the pci |
| 124 | * slot which our device is in. | 125 | * slot which our device is in. |
| 125 | * @risc structure with info about the memory | 126 | * @buf: structure with info about the memory |
| 126 | * used for our controller program. | 127 | * used for our controller program. |
| 127 | * @sglist scatter-gather list entry | 128 | * @sglist: scatter-gather list entry |
| 128 | * @top_offset offset within the risc program area for the | 129 | * @top_offset: offset within the risc program area for the |
| 129 | * first odd frame line | 130 | * first odd frame line |
| 130 | * @bottom_offset offset within the risc program area for the | 131 | * @bottom_offset: offset within the risc program area for the |
| 131 | * first even frame line | 132 | * first even frame line |
| 132 | * @bpl number of data bytes per scan line | 133 | * @bpl: number of data bytes per scan line |
| 133 | * @padding number of extra bytes to add at end of line | 134 | * @padding: number of extra bytes to add at end of line |
| 134 | * @lines number of scan lines | 135 | * @lines: number of scan lines |
| 135 | */ | 136 | */ |
| 136 | int tw68_risc_buffer(struct pci_dev *pci, | 137 | int tw68_risc_buffer(struct pci_dev *pci, |
| 137 | struct tw68_buf *buf, | 138 | struct tw68_buf *buf, |
diff --git a/drivers/media/platform/davinci/vpif.c b/drivers/media/platform/davinci/vpif.c index 07e89a4985a6..16352e2263d2 100644 --- a/drivers/media/platform/davinci/vpif.c +++ b/drivers/media/platform/davinci/vpif.c | |||
| @@ -47,8 +47,9 @@ EXPORT_SYMBOL_GPL(vpif_lock); | |||
| 47 | void __iomem *vpif_base; | 47 | void __iomem *vpif_base; |
| 48 | EXPORT_SYMBOL_GPL(vpif_base); | 48 | EXPORT_SYMBOL_GPL(vpif_base); |
| 49 | 49 | ||
| 50 | /** | 50 | /* |
| 51 | * vpif_ch_params: video standard configuration parameters for vpif | 51 | * vpif_ch_params: video standard configuration parameters for vpif |
| 52 | * | ||
| 52 | * The table must include all presets from supported subdevices. | 53 | * The table must include all presets from supported subdevices. |
| 53 | */ | 54 | */ |
| 54 | const struct vpif_channel_config_params vpif_ch_params[] = { | 55 | const struct vpif_channel_config_params vpif_ch_params[] = { |
diff --git a/drivers/media/platform/davinci/vpif_capture.c b/drivers/media/platform/davinci/vpif_capture.c index a89367ab1e06..fca4dc829f73 100644 --- a/drivers/media/platform/davinci/vpif_capture.c +++ b/drivers/media/platform/davinci/vpif_capture.c | |||
| @@ -109,7 +109,7 @@ static int vpif_buffer_prepare(struct vb2_buffer *vb) | |||
| 109 | * @vq: vb2_queue ptr | 109 | * @vq: vb2_queue ptr |
| 110 | * @nbuffers: ptr to number of buffers requested by application | 110 | * @nbuffers: ptr to number of buffers requested by application |
| 111 | * @nplanes:: contains number of distinct video planes needed to hold a frame | 111 | * @nplanes:: contains number of distinct video planes needed to hold a frame |
| 112 | * @sizes[]: contains the size (in bytes) of each plane. | 112 | * @sizes: contains the size (in bytes) of each plane. |
| 113 | * @alloc_devs: ptr to allocation context | 113 | * @alloc_devs: ptr to allocation context |
| 114 | * | 114 | * |
| 115 | * This callback function is called when reqbuf() is called to adjust | 115 | * This callback function is called when reqbuf() is called to adjust |
| @@ -167,7 +167,7 @@ static void vpif_buffer_queue(struct vb2_buffer *vb) | |||
| 167 | 167 | ||
| 168 | /** | 168 | /** |
| 169 | * vpif_start_streaming : Starts the DMA engine for streaming | 169 | * vpif_start_streaming : Starts the DMA engine for streaming |
| 170 | * @vb: ptr to vb2_buffer | 170 | * @vq: ptr to vb2_buffer |
| 171 | * @count: number of buffers | 171 | * @count: number of buffers |
| 172 | */ | 172 | */ |
| 173 | static int vpif_start_streaming(struct vb2_queue *vq, unsigned int count) | 173 | static int vpif_start_streaming(struct vb2_queue *vq, unsigned int count) |
| @@ -629,7 +629,7 @@ static void vpif_calculate_offsets(struct channel_obj *ch) | |||
| 629 | 629 | ||
| 630 | /** | 630 | /** |
| 631 | * vpif_get_default_field() - Get default field type based on interface | 631 | * vpif_get_default_field() - Get default field type based on interface |
| 632 | * @vpif_params - ptr to vpif params | 632 | * @iface: ptr to vpif interface |
| 633 | */ | 633 | */ |
| 634 | static inline enum v4l2_field vpif_get_default_field( | 634 | static inline enum v4l2_field vpif_get_default_field( |
| 635 | struct vpif_interface *iface) | 635 | struct vpif_interface *iface) |
| @@ -640,8 +640,8 @@ static inline enum v4l2_field vpif_get_default_field( | |||
| 640 | 640 | ||
| 641 | /** | 641 | /** |
| 642 | * vpif_config_addr() - function to configure buffer address in vpif | 642 | * vpif_config_addr() - function to configure buffer address in vpif |
| 643 | * @ch - channel ptr | 643 | * @ch: channel ptr |
| 644 | * @muxmode - channel mux mode | 644 | * @muxmode: channel mux mode |
| 645 | */ | 645 | */ |
| 646 | static void vpif_config_addr(struct channel_obj *ch, int muxmode) | 646 | static void vpif_config_addr(struct channel_obj *ch, int muxmode) |
| 647 | { | 647 | { |
| @@ -661,9 +661,9 @@ static void vpif_config_addr(struct channel_obj *ch, int muxmode) | |||
| 661 | 661 | ||
| 662 | /** | 662 | /** |
| 663 | * vpif_input_to_subdev() - Maps input to sub device | 663 | * vpif_input_to_subdev() - Maps input to sub device |
| 664 | * @vpif_cfg - global config ptr | 664 | * @vpif_cfg: global config ptr |
| 665 | * @chan_cfg - channel config ptr | 665 | * @chan_cfg: channel config ptr |
| 666 | * @input_index - Given input index from application | 666 | * @input_index: Given input index from application |
| 667 | * | 667 | * |
| 668 | * lookup the sub device information for a given input index. | 668 | * lookup the sub device information for a given input index. |
| 669 | * we report all the inputs to application. inputs table also | 669 | * we report all the inputs to application. inputs table also |
| @@ -699,9 +699,9 @@ static int vpif_input_to_subdev( | |||
| 699 | 699 | ||
| 700 | /** | 700 | /** |
| 701 | * vpif_set_input() - Select an input | 701 | * vpif_set_input() - Select an input |
| 702 | * @vpif_cfg - global config ptr | 702 | * @vpif_cfg: global config ptr |
| 703 | * @ch - channel | 703 | * @ch: channel |
| 704 | * @_index - Given input index from application | 704 | * @index: Given input index from application |
| 705 | * | 705 | * |
| 706 | * Select the given input. | 706 | * Select the given input. |
| 707 | */ | 707 | */ |
| @@ -792,7 +792,7 @@ static int vpif_querystd(struct file *file, void *priv, v4l2_std_id *std_id) | |||
| 792 | * vpif_g_std() - get STD handler | 792 | * vpif_g_std() - get STD handler |
| 793 | * @file: file ptr | 793 | * @file: file ptr |
| 794 | * @priv: file handle | 794 | * @priv: file handle |
| 795 | * @std_id: ptr to std id | 795 | * @std: ptr to std id |
| 796 | */ | 796 | */ |
| 797 | static int vpif_g_std(struct file *file, void *priv, v4l2_std_id *std) | 797 | static int vpif_g_std(struct file *file, void *priv, v4l2_std_id *std) |
| 798 | { | 798 | { |
| @@ -933,7 +933,7 @@ static int vpif_s_input(struct file *file, void *priv, unsigned int index) | |||
| 933 | * vpif_enum_fmt_vid_cap() - ENUM_FMT handler | 933 | * vpif_enum_fmt_vid_cap() - ENUM_FMT handler |
| 934 | * @file: file ptr | 934 | * @file: file ptr |
| 935 | * @priv: file handle | 935 | * @priv: file handle |
| 936 | * @index: input index | 936 | * @fmt: ptr to V4L2 format descriptor |
| 937 | */ | 937 | */ |
| 938 | static int vpif_enum_fmt_vid_cap(struct file *file, void *priv, | 938 | static int vpif_enum_fmt_vid_cap(struct file *file, void *priv, |
| 939 | struct v4l2_fmtdesc *fmt) | 939 | struct v4l2_fmtdesc *fmt) |
| @@ -1745,6 +1745,7 @@ static int vpif_remove(struct platform_device *device) | |||
| 1745 | #ifdef CONFIG_PM_SLEEP | 1745 | #ifdef CONFIG_PM_SLEEP |
| 1746 | /** | 1746 | /** |
| 1747 | * vpif_suspend: vpif device suspend | 1747 | * vpif_suspend: vpif device suspend |
| 1748 | * @dev: pointer to &struct device | ||
| 1748 | */ | 1749 | */ |
| 1749 | static int vpif_suspend(struct device *dev) | 1750 | static int vpif_suspend(struct device *dev) |
| 1750 | { | 1751 | { |
diff --git a/drivers/media/platform/davinci/vpif_display.c b/drivers/media/platform/davinci/vpif_display.c index ff2f75a328c9..7be636237acf 100644 --- a/drivers/media/platform/davinci/vpif_display.c +++ b/drivers/media/platform/davinci/vpif_display.c | |||
| @@ -102,7 +102,7 @@ static int vpif_buffer_prepare(struct vb2_buffer *vb) | |||
| 102 | * @vq: vb2_queue ptr | 102 | * @vq: vb2_queue ptr |
| 103 | * @nbuffers: ptr to number of buffers requested by application | 103 | * @nbuffers: ptr to number of buffers requested by application |
| 104 | * @nplanes:: contains number of distinct video planes needed to hold a frame | 104 | * @nplanes:: contains number of distinct video planes needed to hold a frame |
| 105 | * @sizes[]: contains the size (in bytes) of each plane. | 105 | * @sizes: contains the size (in bytes) of each plane. |
| 106 | * @alloc_devs: ptr to allocation context | 106 | * @alloc_devs: ptr to allocation context |
| 107 | * | 107 | * |
| 108 | * This callback function is called when reqbuf() is called to adjust | 108 | * This callback function is called when reqbuf() is called to adjust |
| @@ -158,7 +158,7 @@ static void vpif_buffer_queue(struct vb2_buffer *vb) | |||
| 158 | 158 | ||
| 159 | /** | 159 | /** |
| 160 | * vpif_start_streaming : Starts the DMA engine for streaming | 160 | * vpif_start_streaming : Starts the DMA engine for streaming |
| 161 | * @vb: ptr to vb2_buffer | 161 | * @vq: ptr to vb2_buffer |
| 162 | * @count: number of buffers | 162 | * @count: number of buffers |
| 163 | */ | 163 | */ |
| 164 | static int vpif_start_streaming(struct vb2_queue *vq, unsigned int count) | 164 | static int vpif_start_streaming(struct vb2_queue *vq, unsigned int count) |
| @@ -766,9 +766,9 @@ static int vpif_enum_output(struct file *file, void *fh, | |||
| 766 | 766 | ||
| 767 | /** | 767 | /** |
| 768 | * vpif_output_to_subdev() - Maps output to sub device | 768 | * vpif_output_to_subdev() - Maps output to sub device |
| 769 | * @vpif_cfg - global config ptr | 769 | * @vpif_cfg: global config ptr |
| 770 | * @chan_cfg - channel config ptr | 770 | * @chan_cfg: channel config ptr |
| 771 | * @index - Given output index from application | 771 | * @index: Given output index from application |
| 772 | * | 772 | * |
| 773 | * lookup the sub device information for a given output index. | 773 | * lookup the sub device information for a given output index. |
| 774 | * we report all the output to application. output table also | 774 | * we report all the output to application. output table also |
| @@ -802,9 +802,9 @@ vpif_output_to_subdev(struct vpif_display_config *vpif_cfg, | |||
| 802 | 802 | ||
| 803 | /** | 803 | /** |
| 804 | * vpif_set_output() - Select an output | 804 | * vpif_set_output() - Select an output |
| 805 | * @vpif_cfg - global config ptr | 805 | * @vpif_cfg: global config ptr |
| 806 | * @ch - channel | 806 | * @ch: channel |
| 807 | * @index - Given output index from application | 807 | * @index: Given output index from application |
| 808 | * | 808 | * |
| 809 | * Select the given output. | 809 | * Select the given output. |
| 810 | */ | 810 | */ |
diff --git a/drivers/media/platform/exynos4-is/fimc-capture.c b/drivers/media/platform/exynos4-is/fimc-capture.c index 948fe01f6c96..ed9302caa004 100644 --- a/drivers/media/platform/exynos4-is/fimc-capture.c +++ b/drivers/media/platform/exynos4-is/fimc-capture.c | |||
| @@ -146,6 +146,7 @@ static int fimc_stop_capture(struct fimc_dev *fimc, bool suspend) | |||
| 146 | 146 | ||
| 147 | /** | 147 | /** |
| 148 | * fimc_capture_config_update - apply the camera interface configuration | 148 | * fimc_capture_config_update - apply the camera interface configuration |
| 149 | * @ctx: FIMC capture context | ||
| 149 | * | 150 | * |
| 150 | * To be called from within the interrupt handler with fimc.slock | 151 | * To be called from within the interrupt handler with fimc.slock |
| 151 | * spinlock held. It updates the camera pixel crop, rotation and | 152 | * spinlock held. It updates the camera pixel crop, rotation and |
| @@ -858,6 +859,7 @@ static int fimc_pipeline_try_format(struct fimc_ctx *ctx, | |||
| 858 | * fimc_get_sensor_frame_desc - query the sensor for media bus frame parameters | 859 | * fimc_get_sensor_frame_desc - query the sensor for media bus frame parameters |
| 859 | * @sensor: pointer to the sensor subdev | 860 | * @sensor: pointer to the sensor subdev |
| 860 | * @plane_fmt: provides plane sizes corresponding to the frame layout entries | 861 | * @plane_fmt: provides plane sizes corresponding to the frame layout entries |
| 862 | * @num_planes: number of planes | ||
| 861 | * @try: true to set the frame parameters, false to query only | 863 | * @try: true to set the frame parameters, false to query only |
| 862 | * | 864 | * |
| 863 | * This function is used by this driver only for compressed/blob data formats. | 865 | * This function is used by this driver only for compressed/blob data formats. |
| @@ -1101,6 +1103,7 @@ static int fimc_cap_g_input(struct file *file, void *priv, unsigned int *i) | |||
| 1101 | /** | 1103 | /** |
| 1102 | * fimc_pipeline_validate - check for formats inconsistencies | 1104 | * fimc_pipeline_validate - check for formats inconsistencies |
| 1103 | * between source and sink pad of each link | 1105 | * between source and sink pad of each link |
| 1106 | * @fimc: the FIMC device this context applies to | ||
| 1104 | * | 1107 | * |
| 1105 | * Return 0 if all formats match or -EPIPE otherwise. | 1108 | * Return 0 if all formats match or -EPIPE otherwise. |
| 1106 | */ | 1109 | */ |
diff --git a/drivers/media/platform/exynos4-is/media-dev.c b/drivers/media/platform/exynos4-is/media-dev.c index c15596b56dc9..0ef583cfc424 100644 --- a/drivers/media/platform/exynos4-is/media-dev.c +++ b/drivers/media/platform/exynos4-is/media-dev.c | |||
| @@ -60,6 +60,7 @@ static void __setup_sensor_notification(struct fimc_md *fmd, | |||
| 60 | 60 | ||
| 61 | /** | 61 | /** |
| 62 | * fimc_pipeline_prepare - update pipeline information with subdevice pointers | 62 | * fimc_pipeline_prepare - update pipeline information with subdevice pointers |
| 63 | * @p: fimc pipeline | ||
| 63 | * @me: media entity terminating the pipeline | 64 | * @me: media entity terminating the pipeline |
| 64 | * | 65 | * |
| 65 | * Caller holds the graph mutex. | 66 | * Caller holds the graph mutex. |
| @@ -151,8 +152,8 @@ static int __subdev_set_power(struct v4l2_subdev *sd, int on) | |||
| 151 | 152 | ||
| 152 | /** | 153 | /** |
| 153 | * fimc_pipeline_s_power - change power state of all pipeline subdevs | 154 | * fimc_pipeline_s_power - change power state of all pipeline subdevs |
| 154 | * @fimc: fimc device terminating the pipeline | 155 | * @p: fimc device terminating the pipeline |
| 155 | * @state: true to power on, false to power off | 156 | * @on: true to power on, false to power off |
| 156 | * | 157 | * |
| 157 | * Needs to be called with the graph mutex held. | 158 | * Needs to be called with the graph mutex held. |
| 158 | */ | 159 | */ |
| @@ -219,6 +220,7 @@ static int __fimc_pipeline_enable(struct exynos_media_pipeline *ep, | |||
| 219 | /** | 220 | /** |
| 220 | * __fimc_pipeline_open - update the pipeline information, enable power | 221 | * __fimc_pipeline_open - update the pipeline information, enable power |
| 221 | * of all pipeline subdevs and the sensor clock | 222 | * of all pipeline subdevs and the sensor clock |
| 223 | * @ep: fimc device terminating the pipeline | ||
| 222 | * @me: media entity to start graph walk with | 224 | * @me: media entity to start graph walk with |
| 223 | * @prepare: true to walk the current pipeline and acquire all subdevs | 225 | * @prepare: true to walk the current pipeline and acquire all subdevs |
| 224 | * | 226 | * |
| @@ -252,7 +254,7 @@ static int __fimc_pipeline_open(struct exynos_media_pipeline *ep, | |||
| 252 | 254 | ||
| 253 | /** | 255 | /** |
| 254 | * __fimc_pipeline_close - disable the sensor clock and pipeline power | 256 | * __fimc_pipeline_close - disable the sensor clock and pipeline power |
| 255 | * @fimc: fimc device terminating the pipeline | 257 | * @ep: fimc device terminating the pipeline |
| 256 | * | 258 | * |
| 257 | * Disable power of all subdevs and turn the external sensor clock off. | 259 | * Disable power of all subdevs and turn the external sensor clock off. |
| 258 | */ | 260 | */ |
| @@ -281,7 +283,7 @@ static int __fimc_pipeline_close(struct exynos_media_pipeline *ep) | |||
| 281 | 283 | ||
| 282 | /** | 284 | /** |
| 283 | * __fimc_pipeline_s_stream - call s_stream() on pipeline subdevs | 285 | * __fimc_pipeline_s_stream - call s_stream() on pipeline subdevs |
| 284 | * @pipeline: video pipeline structure | 286 | * @ep: video pipeline structure |
| 285 | * @on: passed as the s_stream() callback argument | 287 | * @on: passed as the s_stream() callback argument |
| 286 | */ | 288 | */ |
| 287 | static int __fimc_pipeline_s_stream(struct exynos_media_pipeline *ep, bool on) | 289 | static int __fimc_pipeline_s_stream(struct exynos_media_pipeline *ep, bool on) |
| @@ -902,6 +904,7 @@ static int __fimc_md_create_fimc_is_links(struct fimc_md *fmd) | |||
| 902 | 904 | ||
| 903 | /** | 905 | /** |
| 904 | * fimc_md_create_links - create default links between registered entities | 906 | * fimc_md_create_links - create default links between registered entities |
| 907 | * @fmd: fimc media device | ||
| 905 | * | 908 | * |
| 906 | * Parallel interface sensor entities are connected directly to FIMC capture | 909 | * Parallel interface sensor entities are connected directly to FIMC capture |
| 907 | * entities. The sensors using MIPI CSIS bus are connected through immutable | 910 | * entities. The sensors using MIPI CSIS bus are connected through immutable |
diff --git a/drivers/media/platform/exynos4-is/mipi-csis.c b/drivers/media/platform/exynos4-is/mipi-csis.c index 560aadabcb11..cba46a656338 100644 --- a/drivers/media/platform/exynos4-is/mipi-csis.c +++ b/drivers/media/platform/exynos4-is/mipi-csis.c | |||
| @@ -189,7 +189,7 @@ struct csis_drvdata { | |||
| 189 | * @irq: requested s5p-mipi-csis irq number | 189 | * @irq: requested s5p-mipi-csis irq number |
| 190 | * @interrupt_mask: interrupt mask of the all used interrupts | 190 | * @interrupt_mask: interrupt mask of the all used interrupts |
| 191 | * @flags: the state variable for power and streaming control | 191 | * @flags: the state variable for power and streaming control |
| 192 | * @clock_frequency: device bus clock frequency | 192 | * @clk_frequency: device bus clock frequency |
| 193 | * @hs_settle: HS-RX settle time | 193 | * @hs_settle: HS-RX settle time |
| 194 | * @num_lanes: number of MIPI-CSI data lanes used | 194 | * @num_lanes: number of MIPI-CSI data lanes used |
| 195 | * @max_num_lanes: maximum number of MIPI-CSI data lanes supported | 195 | * @max_num_lanes: maximum number of MIPI-CSI data lanes supported |
diff --git a/drivers/media/platform/mtk-vcodec/vdec/vdec_h264_if.c b/drivers/media/platform/mtk-vcodec/vdec/vdec_h264_if.c index b7731b18ecae..aa3ce41898bc 100644 --- a/drivers/media/platform/mtk-vcodec/vdec/vdec_h264_if.c +++ b/drivers/media/platform/mtk-vcodec/vdec/vdec_h264_if.c | |||
| @@ -59,6 +59,7 @@ struct h264_fb { | |||
| 59 | * @read_idx : read index | 59 | * @read_idx : read index |
| 60 | * @write_idx : write index | 60 | * @write_idx : write index |
| 61 | * @count : buffer count in list | 61 | * @count : buffer count in list |
| 62 | * @reserved : for 8 bytes alignment | ||
| 62 | */ | 63 | */ |
| 63 | struct h264_ring_fb_list { | 64 | struct h264_ring_fb_list { |
| 64 | struct h264_fb fb_list[H264_MAX_FB_NUM]; | 65 | struct h264_fb fb_list[H264_MAX_FB_NUM]; |
diff --git a/drivers/media/platform/mtk-vcodec/vdec/vdec_vp8_if.c b/drivers/media/platform/mtk-vcodec/vdec/vdec_vp8_if.c index b9fad6a48879..3e84a761db3a 100644 --- a/drivers/media/platform/mtk-vcodec/vdec/vdec_vp8_if.c +++ b/drivers/media/platform/mtk-vcodec/vdec/vdec_vp8_if.c | |||
| @@ -155,7 +155,6 @@ struct vdec_vp8_vpu_inst { | |||
| 155 | * @reg_base : HW register base address | 155 | * @reg_base : HW register base address |
| 156 | * @frm_cnt : decode frame count | 156 | * @frm_cnt : decode frame count |
| 157 | * @ctx : V4L2 context | 157 | * @ctx : V4L2 context |
| 158 | * @dev : platform device | ||
| 159 | * @vpu : VPU instance for decoder | 158 | * @vpu : VPU instance for decoder |
| 160 | * @vsi : VPU share information | 159 | * @vsi : VPU share information |
| 161 | */ | 160 | */ |
diff --git a/drivers/media/platform/mtk-vcodec/venc/venc_h264_if.c b/drivers/media/platform/mtk-vcodec/venc/venc_h264_if.c index 4eb3be37ba14..6cf31b366aad 100644 --- a/drivers/media/platform/mtk-vcodec/venc/venc_h264_if.c +++ b/drivers/media/platform/mtk-vcodec/venc/venc_h264_if.c | |||
| @@ -34,7 +34,7 @@ static const char h264_filler_marker[] = {0x0, 0x0, 0x0, 0x1, 0xc}; | |||
| 34 | #define H264_FILLER_MARKER_SIZE ARRAY_SIZE(h264_filler_marker) | 34 | #define H264_FILLER_MARKER_SIZE ARRAY_SIZE(h264_filler_marker) |
| 35 | #define VENC_PIC_BITSTREAM_BYTE_CNT 0x0098 | 35 | #define VENC_PIC_BITSTREAM_BYTE_CNT 0x0098 |
| 36 | 36 | ||
| 37 | /** | 37 | /* |
| 38 | * enum venc_h264_vpu_work_buf - h264 encoder buffer index | 38 | * enum venc_h264_vpu_work_buf - h264 encoder buffer index |
| 39 | */ | 39 | */ |
| 40 | enum venc_h264_vpu_work_buf { | 40 | enum venc_h264_vpu_work_buf { |
| @@ -50,7 +50,7 @@ enum venc_h264_vpu_work_buf { | |||
| 50 | VENC_H264_VPU_WORK_BUF_MAX, | 50 | VENC_H264_VPU_WORK_BUF_MAX, |
| 51 | }; | 51 | }; |
| 52 | 52 | ||
| 53 | /** | 53 | /* |
| 54 | * enum venc_h264_bs_mode - for bs_mode argument in h264_enc_vpu_encode | 54 | * enum venc_h264_bs_mode - for bs_mode argument in h264_enc_vpu_encode |
| 55 | */ | 55 | */ |
| 56 | enum venc_h264_bs_mode { | 56 | enum venc_h264_bs_mode { |
diff --git a/drivers/media/platform/mtk-vcodec/venc/venc_vp8_if.c b/drivers/media/platform/mtk-vcodec/venc/venc_vp8_if.c index acb639c4abd2..957420dd60de 100644 --- a/drivers/media/platform/mtk-vcodec/venc/venc_vp8_if.c +++ b/drivers/media/platform/mtk-vcodec/venc/venc_vp8_if.c | |||
| @@ -34,7 +34,7 @@ | |||
| 34 | /* This ac_tag is vp8 frame tag. */ | 34 | /* This ac_tag is vp8 frame tag. */ |
| 35 | #define MAX_AC_TAG_SIZE 10 | 35 | #define MAX_AC_TAG_SIZE 10 |
| 36 | 36 | ||
| 37 | /** | 37 | /* |
| 38 | * enum venc_vp8_vpu_work_buf - vp8 encoder buffer index | 38 | * enum venc_vp8_vpu_work_buf - vp8 encoder buffer index |
| 39 | */ | 39 | */ |
| 40 | enum venc_vp8_vpu_work_buf { | 40 | enum venc_vp8_vpu_work_buf { |
diff --git a/drivers/media/platform/mtk-vpu/mtk_vpu.c b/drivers/media/platform/mtk-vpu/mtk_vpu.c index 853d598937f6..1ff6a93262b7 100644 --- a/drivers/media/platform/mtk-vpu/mtk_vpu.c +++ b/drivers/media/platform/mtk-vpu/mtk_vpu.c | |||
| @@ -181,6 +181,7 @@ struct share_obj { | |||
| 181 | * @extmem: VPU extended memory information | 181 | * @extmem: VPU extended memory information |
| 182 | * @reg: VPU TCM and configuration registers | 182 | * @reg: VPU TCM and configuration registers |
| 183 | * @run: VPU initialization status | 183 | * @run: VPU initialization status |
| 184 | * @wdt: VPU watchdog workqueue | ||
| 184 | * @ipi_desc: VPU IPI descriptor | 185 | * @ipi_desc: VPU IPI descriptor |
| 185 | * @recv_buf: VPU DTCM share buffer for receiving. The | 186 | * @recv_buf: VPU DTCM share buffer for receiving. The |
| 186 | * receive buffer is only accessed in interrupt context. | 187 | * receive buffer is only accessed in interrupt context. |
| @@ -194,7 +195,7 @@ struct share_obj { | |||
| 194 | * suppose a client is using VPU to decode VP8. | 195 | * suppose a client is using VPU to decode VP8. |
| 195 | * If the other client wants to encode VP8, | 196 | * If the other client wants to encode VP8, |
| 196 | * it has to wait until VP8 decode completes. | 197 | * it has to wait until VP8 decode completes. |
| 197 | * @wdt_refcnt WDT reference count to make sure the watchdog can be | 198 | * @wdt_refcnt: WDT reference count to make sure the watchdog can be |
| 198 | * disabled if no other client is using VPU service | 199 | * disabled if no other client is using VPU service |
| 199 | * @ack_wq: The wait queue for each codec and mdp. When sleeping | 200 | * @ack_wq: The wait queue for each codec and mdp. When sleeping |
| 200 | * processes wake up, they will check the condition | 201 | * processes wake up, they will check the condition |
diff --git a/drivers/media/platform/pxa_camera.c b/drivers/media/platform/pxa_camera.c index 9d3f0cb1d95a..295f34ad1080 100644 --- a/drivers/media/platform/pxa_camera.c +++ b/drivers/media/platform/pxa_camera.c | |||
| @@ -235,6 +235,7 @@ enum pxa_mbus_layout { | |||
| 235 | * stored in memory in the following way: | 235 | * stored in memory in the following way: |
| 236 | * @packing: Type of sample-packing, that has to be used | 236 | * @packing: Type of sample-packing, that has to be used |
| 237 | * @order: Sample order when storing in memory | 237 | * @order: Sample order when storing in memory |
| 238 | * @layout: Planes layout in memory | ||
| 238 | * @bits_per_sample: How many bits the bridge has to sample | 239 | * @bits_per_sample: How many bits the bridge has to sample |
| 239 | */ | 240 | */ |
| 240 | struct pxa_mbus_pixelfmt { | 241 | struct pxa_mbus_pixelfmt { |
| @@ -852,10 +853,10 @@ static void pxa_camera_dma_irq_v(void *data) | |||
| 852 | /** | 853 | /** |
| 853 | * pxa_init_dma_channel - init dma descriptors | 854 | * pxa_init_dma_channel - init dma descriptors |
| 854 | * @pcdev: pxa camera device | 855 | * @pcdev: pxa camera device |
| 855 | * @vb: videobuffer2 buffer | 856 | * @buf: pxa camera buffer |
| 856 | * @dma: dma video buffer | ||
| 857 | * @channel: dma channel (0 => 'Y', 1 => 'U', 2 => 'V') | 857 | * @channel: dma channel (0 => 'Y', 1 => 'U', 2 => 'V') |
| 858 | * @cibr: camera Receive Buffer Register | 858 | * @sg: dma scatter list |
| 859 | * @sglen: dma scatter list length | ||
| 859 | * | 860 | * |
| 860 | * Prepares the pxa dma descriptors to transfer one camera channel. | 861 | * Prepares the pxa dma descriptors to transfer one camera channel. |
| 861 | * | 862 | * |
| @@ -1010,6 +1011,8 @@ static void pxa_camera_wakeup(struct pxa_camera_dev *pcdev, | |||
| 1010 | /** | 1011 | /** |
| 1011 | * pxa_camera_check_link_miss - check missed DMA linking | 1012 | * pxa_camera_check_link_miss - check missed DMA linking |
| 1012 | * @pcdev: camera device | 1013 | * @pcdev: camera device |
| 1014 | * @last_submitted: an opaque DMA cookie for last submitted | ||
| 1015 | * @last_issued: an opaque DMA cookie for last issued | ||
| 1013 | * | 1016 | * |
| 1014 | * The DMA chaining is done with DMA running. This means a tiny temporal window | 1017 | * The DMA chaining is done with DMA running. This means a tiny temporal window |
| 1015 | * remains, where a buffer is queued on the chain, while the chain is already | 1018 | * remains, where a buffer is queued on the chain, while the chain is already |
diff --git a/drivers/media/platform/rcar_fdp1.c b/drivers/media/platform/rcar_fdp1.c index 3245bc45f4a0..b13dec3081e5 100644 --- a/drivers/media/platform/rcar_fdp1.c +++ b/drivers/media/platform/rcar_fdp1.c | |||
| @@ -1132,7 +1132,7 @@ static int fdp1_device_process(struct fdp1_ctx *ctx) | |||
| 1132 | * mem2mem callbacks | 1132 | * mem2mem callbacks |
| 1133 | */ | 1133 | */ |
| 1134 | 1134 | ||
| 1135 | /** | 1135 | /* |
| 1136 | * job_ready() - check whether an instance is ready to be scheduled to run | 1136 | * job_ready() - check whether an instance is ready to be scheduled to run |
| 1137 | */ | 1137 | */ |
| 1138 | static int fdp1_m2m_job_ready(void *priv) | 1138 | static int fdp1_m2m_job_ready(void *priv) |
diff --git a/drivers/media/platform/rcar_jpu.c b/drivers/media/platform/rcar_jpu.c index 070bac36d766..f6092ae45912 100644 --- a/drivers/media/platform/rcar_jpu.c +++ b/drivers/media/platform/rcar_jpu.c | |||
| @@ -257,7 +257,7 @@ struct jpu_fmt { | |||
| 257 | }; | 257 | }; |
| 258 | 258 | ||
| 259 | /** | 259 | /** |
| 260 | * jpu_q_data - parameters of one queue | 260 | * struct jpu_q_data - parameters of one queue |
| 261 | * @fmtinfo: driver-specific format of this queue | 261 | * @fmtinfo: driver-specific format of this queue |
| 262 | * @format: multiplanar format of this queue | 262 | * @format: multiplanar format of this queue |
| 263 | * @sequence: sequence number | 263 | * @sequence: sequence number |
| @@ -269,7 +269,7 @@ struct jpu_q_data { | |||
| 269 | }; | 269 | }; |
| 270 | 270 | ||
| 271 | /** | 271 | /** |
| 272 | * jpu_ctx - the device context data | 272 | * struct jpu_ctx - the device context data |
| 273 | * @jpu: JPEG IP device for this context | 273 | * @jpu: JPEG IP device for this context |
| 274 | * @encoder: compression (encode) operation or decompression (decode) | 274 | * @encoder: compression (encode) operation or decompression (decode) |
| 275 | * @compr_quality: destination image quality in compression (encode) mode | 275 | * @compr_quality: destination image quality in compression (encode) mode |
diff --git a/drivers/media/platform/s3c-camif/camif-core.c b/drivers/media/platform/s3c-camif/camif-core.c index c4ab63986c8f..79bc0ef6bb41 100644 --- a/drivers/media/platform/s3c-camif/camif-core.c +++ b/drivers/media/platform/s3c-camif/camif-core.c | |||
| @@ -103,6 +103,7 @@ static const struct camif_fmt camif_formats[] = { | |||
| 103 | 103 | ||
| 104 | /** | 104 | /** |
| 105 | * s3c_camif_find_format() - lookup camif color format by fourcc or an index | 105 | * s3c_camif_find_format() - lookup camif color format by fourcc or an index |
| 106 | * @vp: video path (DMA) description (codec/preview) | ||
| 106 | * @pixelformat: fourcc to match, ignored if null | 107 | * @pixelformat: fourcc to match, ignored if null |
| 107 | * @index: index to the camif_formats array, ignored if negative | 108 | * @index: index to the camif_formats array, ignored if negative |
| 108 | */ | 109 | */ |
diff --git a/drivers/media/platform/sh_veu.c b/drivers/media/platform/sh_veu.c index 15a562af13c7..dedc1b024f6f 100644 --- a/drivers/media/platform/sh_veu.c +++ b/drivers/media/platform/sh_veu.c | |||
| @@ -267,7 +267,7 @@ static void sh_veu_process(struct sh_veu_dev *veu, | |||
| 267 | sh_veu_reg_write(veu, VEU_EIER, 1); /* enable interrupt in VEU */ | 267 | sh_veu_reg_write(veu, VEU_EIER, 1); /* enable interrupt in VEU */ |
| 268 | } | 268 | } |
| 269 | 269 | ||
| 270 | /** | 270 | /* |
| 271 | * sh_veu_device_run() - prepares and starts the device | 271 | * sh_veu_device_run() - prepares and starts the device |
| 272 | * | 272 | * |
| 273 | * This will be called by the framework when it decides to schedule a particular | 273 | * This will be called by the framework when it decides to schedule a particular |
diff --git a/drivers/media/platform/soc_camera/soc_scale_crop.c b/drivers/media/platform/soc_camera/soc_scale_crop.c index 0116097c0c0f..270ec613c27c 100644 --- a/drivers/media/platform/soc_camera/soc_scale_crop.c +++ b/drivers/media/platform/soc_camera/soc_scale_crop.c | |||
| @@ -306,16 +306,17 @@ update_cache: | |||
| 306 | } | 306 | } |
| 307 | 307 | ||
| 308 | /** | 308 | /** |
| 309 | * @icd - soc-camera device | 309 | * soc_camera_client_scale |
| 310 | * @rect - camera cropping window | 310 | * @icd: soc-camera device |
| 311 | * @subrect - part of rect, sent to the user | 311 | * @rect: camera cropping window |
| 312 | * @mf - in- / output camera output window | 312 | * @subrect: part of rect, sent to the user |
| 313 | * @width - on input: max host input width | 313 | * @mf: in- / output camera output window |
| 314 | * on output: user width, mapped back to input | 314 | * @width: on input: max host input width; |
| 315 | * @height - on input: max host input height | 315 | * on output: user width, mapped back to input |
| 316 | * on output: user height, mapped back to input | 316 | * @height: on input: max host input height; |
| 317 | * @host_can_scale - host can scale this pixel format | 317 | * on output: user height, mapped back to input |
| 318 | * @shift - shift, used for scaling | 318 | * @host_can_scale: host can scale this pixel format |
| 319 | * @shift: shift, used for scaling | ||
| 319 | */ | 320 | */ |
| 320 | int soc_camera_client_scale(struct soc_camera_device *icd, | 321 | int soc_camera_client_scale(struct soc_camera_device *icd, |
| 321 | struct v4l2_rect *rect, struct v4l2_rect *subrect, | 322 | struct v4l2_rect *rect, struct v4l2_rect *subrect, |
diff --git a/drivers/media/platform/sti/hva/hva-h264.c b/drivers/media/platform/sti/hva/hva-h264.c index a7e5eed17ada..17f1eb0ba957 100644 --- a/drivers/media/platform/sti/hva/hva-h264.c +++ b/drivers/media/platform/sti/hva/hva-h264.c | |||
| @@ -134,7 +134,7 @@ enum hva_h264_sei_payload_type { | |||
| 134 | SEI_FRAME_PACKING_ARRANGEMENT = 45 | 134 | SEI_FRAME_PACKING_ARRANGEMENT = 45 |
| 135 | }; | 135 | }; |
| 136 | 136 | ||
| 137 | /** | 137 | /* |
| 138 | * stereo Video Info struct | 138 | * stereo Video Info struct |
| 139 | */ | 139 | */ |
| 140 | struct hva_h264_stereo_video_sei { | 140 | struct hva_h264_stereo_video_sei { |
| @@ -146,7 +146,9 @@ struct hva_h264_stereo_video_sei { | |||
| 146 | u8 right_view_self_contained_flag; | 146 | u8 right_view_self_contained_flag; |
| 147 | }; | 147 | }; |
| 148 | 148 | ||
| 149 | /** | 149 | /* |
| 150 | * struct hva_h264_td | ||
| 151 | * | ||
| 150 | * @frame_width: width in pixels of the buffer containing the input frame | 152 | * @frame_width: width in pixels of the buffer containing the input frame |
| 151 | * @frame_height: height in pixels of the buffer containing the input frame | 153 | * @frame_height: height in pixels of the buffer containing the input frame |
| 152 | * @frame_num: the parameter to be written in the slice header | 154 | * @frame_num: the parameter to be written in the slice header |
| @@ -352,7 +354,9 @@ struct hva_h264_td { | |||
| 352 | u32 addr_brc_in_out_parameter; | 354 | u32 addr_brc_in_out_parameter; |
| 353 | }; | 355 | }; |
| 354 | 356 | ||
| 355 | /** | 357 | /* |
| 358 | * struct hva_h264_slice_po | ||
| 359 | * | ||
| 356 | * @ slice_size: slice size | 360 | * @ slice_size: slice size |
| 357 | * @ slice_start_time: start time | 361 | * @ slice_start_time: start time |
| 358 | * @ slice_stop_time: stop time | 362 | * @ slice_stop_time: stop time |
| @@ -365,7 +369,9 @@ struct hva_h264_slice_po { | |||
| 365 | u32 slice_num; | 369 | u32 slice_num; |
| 366 | }; | 370 | }; |
| 367 | 371 | ||
| 368 | /** | 372 | /* |
| 373 | * struct hva_h264_po | ||
| 374 | * | ||
| 369 | * @ bitstream_size: bitstream size | 375 | * @ bitstream_size: bitstream size |
| 370 | * @ dct_bitstream_size: dtc bitstream size | 376 | * @ dct_bitstream_size: dtc bitstream size |
| 371 | * @ stuffing_bits: number of stuffing bits inserted by the encoder | 377 | * @ stuffing_bits: number of stuffing bits inserted by the encoder |
| @@ -391,7 +397,9 @@ struct hva_h264_task { | |||
| 391 | struct hva_h264_po po; | 397 | struct hva_h264_po po; |
| 392 | }; | 398 | }; |
| 393 | 399 | ||
| 394 | /** | 400 | /* |
| 401 | * struct hva_h264_ctx | ||
| 402 | * | ||
| 395 | * @seq_info: sequence information buffer | 403 | * @seq_info: sequence information buffer |
| 396 | * @ref_frame: reference frame buffer | 404 | * @ref_frame: reference frame buffer |
| 397 | * @rec_frame: reconstructed frame buffer | 405 | * @rec_frame: reconstructed frame buffer |
diff --git a/drivers/media/platform/ti-vpe/vpe.c b/drivers/media/platform/ti-vpe/vpe.c index 45bd10544189..e395aa85c8ad 100644 --- a/drivers/media/platform/ti-vpe/vpe.c +++ b/drivers/media/platform/ti-vpe/vpe.c | |||
| @@ -926,7 +926,7 @@ static struct vpe_ctx *file2ctx(struct file *file) | |||
| 926 | * mem2mem callbacks | 926 | * mem2mem callbacks |
| 927 | */ | 927 | */ |
| 928 | 928 | ||
| 929 | /** | 929 | /* |
| 930 | * job_ready() - check whether an instance is ready to be scheduled to run | 930 | * job_ready() - check whether an instance is ready to be scheduled to run |
| 931 | */ | 931 | */ |
| 932 | static int job_ready(void *priv) | 932 | static int job_ready(void *priv) |
diff --git a/drivers/media/platform/vim2m.c b/drivers/media/platform/vim2m.c index 7bf9fa2f8534..065483e62db4 100644 --- a/drivers/media/platform/vim2m.c +++ b/drivers/media/platform/vim2m.c | |||
| @@ -343,7 +343,7 @@ static void schedule_irq(struct vim2m_dev *dev, int msec_timeout) | |||
| 343 | * mem2mem callbacks | 343 | * mem2mem callbacks |
| 344 | */ | 344 | */ |
| 345 | 345 | ||
| 346 | /** | 346 | /* |
| 347 | * job_ready() - check whether an instance is ready to be scheduled to run | 347 | * job_ready() - check whether an instance is ready to be scheduled to run |
| 348 | */ | 348 | */ |
| 349 | static int job_ready(void *priv) | 349 | static int job_ready(void *priv) |
diff --git a/drivers/media/platform/vsp1/vsp1_dl.c b/drivers/media/platform/vsp1/vsp1_dl.c index 8b5cbb6b7a70..4257451f1bd8 100644 --- a/drivers/media/platform/vsp1/vsp1_dl.c +++ b/drivers/media/platform/vsp1/vsp1_dl.c | |||
| @@ -70,6 +70,7 @@ struct vsp1_dl_body { | |||
| 70 | * @dma: DMA address for the header | 70 | * @dma: DMA address for the header |
| 71 | * @body0: first display list body | 71 | * @body0: first display list body |
| 72 | * @fragments: list of extra display list bodies | 72 | * @fragments: list of extra display list bodies |
| 73 | * @has_chain: if true, indicates that there's a partition chain | ||
| 73 | * @chain: entry in the display list partition chain | 74 | * @chain: entry in the display list partition chain |
| 74 | */ | 75 | */ |
| 75 | struct vsp1_dl_list { | 76 | struct vsp1_dl_list { |
diff --git a/drivers/media/radio/radio-si476x.c b/drivers/media/radio/radio-si476x.c index 271f725b17e8..540ac887a63c 100644 --- a/drivers/media/radio/radio-si476x.c +++ b/drivers/media/radio/radio-si476x.c | |||
| @@ -158,7 +158,7 @@ enum si476x_ctrl_idx { | |||
| 158 | }; | 158 | }; |
| 159 | static struct v4l2_ctrl_config si476x_ctrls[] = { | 159 | static struct v4l2_ctrl_config si476x_ctrls[] = { |
| 160 | 160 | ||
| 161 | /** | 161 | /* |
| 162 | * SI476X during its station seeking(or tuning) process uses several | 162 | * SI476X during its station seeking(or tuning) process uses several |
| 163 | * parameters to detrmine if "the station" is valid: | 163 | * parameters to detrmine if "the station" is valid: |
| 164 | * | 164 | * |
| @@ -197,7 +197,7 @@ static struct v4l2_ctrl_config si476x_ctrls[] = { | |||
| 197 | .step = 2, | 197 | .step = 2, |
| 198 | }, | 198 | }, |
| 199 | 199 | ||
| 200 | /** | 200 | /* |
| 201 | * #V4L2_CID_SI476X_HARMONICS_COUNT -- number of harmonics | 201 | * #V4L2_CID_SI476X_HARMONICS_COUNT -- number of harmonics |
| 202 | * built-in power-line noise supression filter is to reject | 202 | * built-in power-line noise supression filter is to reject |
| 203 | * during AM-mode operation. | 203 | * during AM-mode operation. |
| @@ -213,7 +213,7 @@ static struct v4l2_ctrl_config si476x_ctrls[] = { | |||
| 213 | .step = 1, | 213 | .step = 1, |
| 214 | }, | 214 | }, |
| 215 | 215 | ||
| 216 | /** | 216 | /* |
| 217 | * #V4L2_CID_SI476X_DIVERSITY_MODE -- configuration which | 217 | * #V4L2_CID_SI476X_DIVERSITY_MODE -- configuration which |
| 218 | * two tuners working in diversity mode are to work in. | 218 | * two tuners working in diversity mode are to work in. |
| 219 | * | 219 | * |
| @@ -237,7 +237,7 @@ static struct v4l2_ctrl_config si476x_ctrls[] = { | |||
| 237 | .max = ARRAY_SIZE(phase_diversity_modes) - 1, | 237 | .max = ARRAY_SIZE(phase_diversity_modes) - 1, |
| 238 | }, | 238 | }, |
| 239 | 239 | ||
| 240 | /** | 240 | /* |
| 241 | * #V4L2_CID_SI476X_INTERCHIP_LINK -- inter-chip link in | 241 | * #V4L2_CID_SI476X_INTERCHIP_LINK -- inter-chip link in |
| 242 | * diversity mode indicator. Allows user to determine if two | 242 | * diversity mode indicator. Allows user to determine if two |
| 243 | * chips working in diversity mode have established a link | 243 | * chips working in diversity mode have established a link |
| @@ -296,11 +296,15 @@ struct si476x_radio_ops { | |||
| 296 | /** | 296 | /** |
| 297 | * struct si476x_radio - radio device | 297 | * struct si476x_radio - radio device |
| 298 | * | 298 | * |
| 299 | * @core: Pointer to underlying core device | 299 | * @v4l2dev: Pointer to V4L2 device created by V4L2 subsystem |
| 300 | * @videodev: Pointer to video device created by V4L2 subsystem | 300 | * @videodev: Pointer to video device created by V4L2 subsystem |
| 301 | * @ctrl_handler: V4L2 controls handler | ||
| 302 | * @core: Pointer to underlying core device | ||
| 301 | * @ops: Vtable of functions. See struct si476x_radio_ops for details | 303 | * @ops: Vtable of functions. See struct si476x_radio_ops for details |
| 302 | * @kref: Reference counter | 304 | * @debugfs: pointer to &strucd dentry for debugfs |
| 303 | * @core_lock: An r/w semaphore to brebvent the deletion of underlying | 305 | * @audmode: audio mode, as defined for the rxsubchans field |
| 306 | * at videodev2.h | ||
| 307 | * | ||
| 304 | * core structure is the radio device is being used | 308 | * core structure is the radio device is being used |
| 305 | */ | 309 | */ |
| 306 | struct si476x_radio { | 310 | struct si476x_radio { |
diff --git a/drivers/media/radio/radio-wl1273.c b/drivers/media/radio/radio-wl1273.c index 903fcd5e99c0..3cbdc085c65d 100644 --- a/drivers/media/radio/radio-wl1273.c +++ b/drivers/media/radio/radio-wl1273.c | |||
| @@ -1330,7 +1330,7 @@ static int wl1273_fm_vidioc_s_input(struct file *file, void *priv, | |||
| 1330 | 1330 | ||
| 1331 | /** | 1331 | /** |
| 1332 | * wl1273_fm_set_tx_power() - Set the transmission power value. | 1332 | * wl1273_fm_set_tx_power() - Set the transmission power value. |
| 1333 | * @core: A pointer to the device struct. | 1333 | * @radio: A pointer to the device struct. |
| 1334 | * @power: The new power value. | 1334 | * @power: The new power value. |
| 1335 | */ | 1335 | */ |
| 1336 | static int wl1273_fm_set_tx_power(struct wl1273_device *radio, u16 power) | 1336 | static int wl1273_fm_set_tx_power(struct wl1273_device *radio, u16 power) |
diff --git a/drivers/media/rc/img-ir/img-ir-hw.c b/drivers/media/rc/img-ir/img-ir-hw.c index f54bc5d23893..ec4ded84cd17 100644 --- a/drivers/media/rc/img-ir/img-ir-hw.c +++ b/drivers/media/rc/img-ir/img-ir-hw.c | |||
| @@ -339,7 +339,7 @@ static void img_ir_decoder_preprocess(struct img_ir_decoder *decoder) | |||
| 339 | /** | 339 | /** |
| 340 | * img_ir_decoder_convert() - Generate internal timings in decoder. | 340 | * img_ir_decoder_convert() - Generate internal timings in decoder. |
| 341 | * @decoder: Decoder to be converted to internal timings. | 341 | * @decoder: Decoder to be converted to internal timings. |
| 342 | * @timings: Timing register values. | 342 | * @reg_timings: Timing register values. |
| 343 | * @clock_hz: IR clock rate in Hz. | 343 | * @clock_hz: IR clock rate in Hz. |
| 344 | * | 344 | * |
| 345 | * Fills out the repeat timings and timing register values for a specific clock | 345 | * Fills out the repeat timings and timing register values for a specific clock |
diff --git a/drivers/media/rc/imon.c b/drivers/media/rc/imon.c index b25b35b3f6da..eb943e862515 100644 --- a/drivers/media/rc/imon.c +++ b/drivers/media/rc/imon.c | |||
| @@ -492,7 +492,7 @@ static void free_imon_context(struct imon_context *ictx) | |||
| 492 | dev_dbg(dev, "%s: iMON context freed\n", __func__); | 492 | dev_dbg(dev, "%s: iMON context freed\n", __func__); |
| 493 | } | 493 | } |
| 494 | 494 | ||
| 495 | /** | 495 | /* |
| 496 | * Called when the Display device (e.g. /dev/lcd0) | 496 | * Called when the Display device (e.g. /dev/lcd0) |
| 497 | * is opened by the application. | 497 | * is opened by the application. |
| 498 | */ | 498 | */ |
| @@ -542,7 +542,7 @@ exit: | |||
| 542 | return retval; | 542 | return retval; |
| 543 | } | 543 | } |
| 544 | 544 | ||
| 545 | /** | 545 | /* |
| 546 | * Called when the display device (e.g. /dev/lcd0) | 546 | * Called when the display device (e.g. /dev/lcd0) |
| 547 | * is closed by the application. | 547 | * is closed by the application. |
| 548 | */ | 548 | */ |
| @@ -575,7 +575,7 @@ static int display_close(struct inode *inode, struct file *file) | |||
| 575 | return retval; | 575 | return retval; |
| 576 | } | 576 | } |
| 577 | 577 | ||
| 578 | /** | 578 | /* |
| 579 | * Sends a packet to the device -- this function must be called with | 579 | * Sends a packet to the device -- this function must be called with |
| 580 | * ictx->lock held, or its unlock/lock sequence while waiting for tx | 580 | * ictx->lock held, or its unlock/lock sequence while waiting for tx |
| 581 | * to complete can/will lead to a deadlock. | 581 | * to complete can/will lead to a deadlock. |
| @@ -664,7 +664,7 @@ static int send_packet(struct imon_context *ictx) | |||
| 664 | return retval; | 664 | return retval; |
| 665 | } | 665 | } |
| 666 | 666 | ||
| 667 | /** | 667 | /* |
| 668 | * Sends an associate packet to the iMON 2.4G. | 668 | * Sends an associate packet to the iMON 2.4G. |
| 669 | * | 669 | * |
| 670 | * This might not be such a good idea, since it has an id collision with | 670 | * This might not be such a good idea, since it has an id collision with |
| @@ -694,7 +694,7 @@ static int send_associate_24g(struct imon_context *ictx) | |||
| 694 | return retval; | 694 | return retval; |
| 695 | } | 695 | } |
| 696 | 696 | ||
| 697 | /** | 697 | /* |
| 698 | * Sends packets to setup and show clock on iMON display | 698 | * Sends packets to setup and show clock on iMON display |
| 699 | * | 699 | * |
| 700 | * Arguments: year - last 2 digits of year, month - 1..12, | 700 | * Arguments: year - last 2 digits of year, month - 1..12, |
| @@ -781,7 +781,7 @@ static int send_set_imon_clock(struct imon_context *ictx, | |||
| 781 | return retval; | 781 | return retval; |
| 782 | } | 782 | } |
| 783 | 783 | ||
| 784 | /** | 784 | /* |
| 785 | * These are the sysfs functions to handle the association on the iMON 2.4G LT. | 785 | * These are the sysfs functions to handle the association on the iMON 2.4G LT. |
| 786 | */ | 786 | */ |
| 787 | static ssize_t show_associate_remote(struct device *d, | 787 | static ssize_t show_associate_remote(struct device *d, |
| @@ -823,7 +823,7 @@ static ssize_t store_associate_remote(struct device *d, | |||
| 823 | return count; | 823 | return count; |
| 824 | } | 824 | } |
| 825 | 825 | ||
| 826 | /** | 826 | /* |
| 827 | * sysfs functions to control internal imon clock | 827 | * sysfs functions to control internal imon clock |
| 828 | */ | 828 | */ |
| 829 | static ssize_t show_imon_clock(struct device *d, | 829 | static ssize_t show_imon_clock(struct device *d, |
| @@ -923,7 +923,7 @@ static const struct attribute_group imon_rf_attr_group = { | |||
| 923 | .attrs = imon_rf_sysfs_entries | 923 | .attrs = imon_rf_sysfs_entries |
| 924 | }; | 924 | }; |
| 925 | 925 | ||
| 926 | /** | 926 | /* |
| 927 | * Writes data to the VFD. The iMON VFD is 2x16 characters | 927 | * Writes data to the VFD. The iMON VFD is 2x16 characters |
| 928 | * and requires data in 5 consecutive USB interrupt packets, | 928 | * and requires data in 5 consecutive USB interrupt packets, |
| 929 | * each packet but the last carrying 7 bytes. | 929 | * each packet but the last carrying 7 bytes. |
| @@ -1008,7 +1008,7 @@ exit: | |||
| 1008 | return (!retval) ? n_bytes : retval; | 1008 | return (!retval) ? n_bytes : retval; |
| 1009 | } | 1009 | } |
| 1010 | 1010 | ||
| 1011 | /** | 1011 | /* |
| 1012 | * Writes data to the LCD. The iMON OEM LCD screen expects 8-byte | 1012 | * Writes data to the LCD. The iMON OEM LCD screen expects 8-byte |
| 1013 | * packets. We accept data as 16 hexadecimal digits, followed by a | 1013 | * packets. We accept data as 16 hexadecimal digits, followed by a |
| 1014 | * newline (to make it easy to drive the device from a command-line | 1014 | * newline (to make it easy to drive the device from a command-line |
| @@ -1066,7 +1066,7 @@ exit: | |||
| 1066 | return (!retval) ? n_bytes : retval; | 1066 | return (!retval) ? n_bytes : retval; |
| 1067 | } | 1067 | } |
| 1068 | 1068 | ||
| 1069 | /** | 1069 | /* |
| 1070 | * Callback function for USB core API: transmit data | 1070 | * Callback function for USB core API: transmit data |
| 1071 | */ | 1071 | */ |
| 1072 | static void usb_tx_callback(struct urb *urb) | 1072 | static void usb_tx_callback(struct urb *urb) |
| @@ -1087,7 +1087,7 @@ static void usb_tx_callback(struct urb *urb) | |||
| 1087 | complete(&ictx->tx.finished); | 1087 | complete(&ictx->tx.finished); |
| 1088 | } | 1088 | } |
| 1089 | 1089 | ||
| 1090 | /** | 1090 | /* |
| 1091 | * report touchscreen input | 1091 | * report touchscreen input |
| 1092 | */ | 1092 | */ |
| 1093 | static void imon_touch_display_timeout(struct timer_list *t) | 1093 | static void imon_touch_display_timeout(struct timer_list *t) |
| @@ -1103,7 +1103,7 @@ static void imon_touch_display_timeout(struct timer_list *t) | |||
| 1103 | input_sync(ictx->touch); | 1103 | input_sync(ictx->touch); |
| 1104 | } | 1104 | } |
| 1105 | 1105 | ||
| 1106 | /** | 1106 | /* |
| 1107 | * iMON IR receivers support two different signal sets -- those used by | 1107 | * iMON IR receivers support two different signal sets -- those used by |
| 1108 | * the iMON remotes, and those used by the Windows MCE remotes (which is | 1108 | * the iMON remotes, and those used by the Windows MCE remotes (which is |
| 1109 | * really just RC-6), but only one or the other at a time, as the signals | 1109 | * really just RC-6), but only one or the other at a time, as the signals |
| @@ -1191,7 +1191,7 @@ static inline int tv2int(const struct timeval *a, const struct timeval *b) | |||
| 1191 | return sec; | 1191 | return sec; |
| 1192 | } | 1192 | } |
| 1193 | 1193 | ||
| 1194 | /** | 1194 | /* |
| 1195 | * The directional pad behaves a bit differently, depending on whether this is | 1195 | * The directional pad behaves a bit differently, depending on whether this is |
| 1196 | * one of the older ffdc devices or a newer device. Newer devices appear to | 1196 | * one of the older ffdc devices or a newer device. Newer devices appear to |
| 1197 | * have a higher resolution matrix for more precise mouse movement, but it | 1197 | * have a higher resolution matrix for more precise mouse movement, but it |
| @@ -1543,7 +1543,7 @@ static void imon_pad_to_keys(struct imon_context *ictx, unsigned char *buf) | |||
| 1543 | } | 1543 | } |
| 1544 | } | 1544 | } |
| 1545 | 1545 | ||
| 1546 | /** | 1546 | /* |
| 1547 | * figure out if these is a press or a release. We don't actually | 1547 | * figure out if these is a press or a release. We don't actually |
| 1548 | * care about repeats, as those will be auto-generated within the IR | 1548 | * care about repeats, as those will be auto-generated within the IR |
| 1549 | * subsystem for repeating scancodes. | 1549 | * subsystem for repeating scancodes. |
| @@ -1592,10 +1592,10 @@ static int imon_parse_press_type(struct imon_context *ictx, | |||
| 1592 | return press_type; | 1592 | return press_type; |
| 1593 | } | 1593 | } |
| 1594 | 1594 | ||
| 1595 | /** | 1595 | /* |
| 1596 | * Process the incoming packet | 1596 | * Process the incoming packet |
| 1597 | */ | 1597 | */ |
| 1598 | /** | 1598 | /* |
| 1599 | * Convert bit count to time duration (in us) and submit | 1599 | * Convert bit count to time duration (in us) and submit |
| 1600 | * the value to lirc_dev. | 1600 | * the value to lirc_dev. |
| 1601 | */ | 1601 | */ |
| @@ -1608,7 +1608,7 @@ static void submit_data(struct imon_context *context) | |||
| 1608 | ir_raw_event_store_with_filter(context->rdev, &ev); | 1608 | ir_raw_event_store_with_filter(context->rdev, &ev); |
| 1609 | } | 1609 | } |
| 1610 | 1610 | ||
| 1611 | /** | 1611 | /* |
| 1612 | * Process the incoming packet | 1612 | * Process the incoming packet |
| 1613 | */ | 1613 | */ |
| 1614 | static void imon_incoming_ir_raw(struct imon_context *context, | 1614 | static void imon_incoming_ir_raw(struct imon_context *context, |
| @@ -1831,7 +1831,7 @@ not_input_data: | |||
| 1831 | } | 1831 | } |
| 1832 | } | 1832 | } |
| 1833 | 1833 | ||
| 1834 | /** | 1834 | /* |
| 1835 | * Callback function for USB core API: receive data | 1835 | * Callback function for USB core API: receive data |
| 1836 | */ | 1836 | */ |
| 1837 | static void usb_rx_callback_intf0(struct urb *urb) | 1837 | static void usb_rx_callback_intf0(struct urb *urb) |
| @@ -2485,7 +2485,7 @@ static void imon_init_display(struct imon_context *ictx, | |||
| 2485 | 2485 | ||
| 2486 | } | 2486 | } |
| 2487 | 2487 | ||
| 2488 | /** | 2488 | /* |
| 2489 | * Callback function for USB core API: Probe | 2489 | * Callback function for USB core API: Probe |
| 2490 | */ | 2490 | */ |
| 2491 | static int imon_probe(struct usb_interface *interface, | 2491 | static int imon_probe(struct usb_interface *interface, |
| @@ -2583,7 +2583,7 @@ fail: | |||
| 2583 | return ret; | 2583 | return ret; |
| 2584 | } | 2584 | } |
| 2585 | 2585 | ||
| 2586 | /** | 2586 | /* |
| 2587 | * Callback function for USB core API: disconnect | 2587 | * Callback function for USB core API: disconnect |
| 2588 | */ | 2588 | */ |
| 2589 | static void imon_disconnect(struct usb_interface *interface) | 2589 | static void imon_disconnect(struct usb_interface *interface) |
diff --git a/drivers/media/rc/ir-jvc-decoder.c b/drivers/media/rc/ir-jvc-decoder.c index e2bd68c42edf..22c8aee3df4f 100644 --- a/drivers/media/rc/ir-jvc-decoder.c +++ b/drivers/media/rc/ir-jvc-decoder.c | |||
| @@ -39,7 +39,7 @@ enum jvc_state { | |||
| 39 | /** | 39 | /** |
| 40 | * ir_jvc_decode() - Decode one JVC pulse or space | 40 | * ir_jvc_decode() - Decode one JVC pulse or space |
| 41 | * @dev: the struct rc_dev descriptor of the device | 41 | * @dev: the struct rc_dev descriptor of the device |
| 42 | * @duration: the struct ir_raw_event descriptor of the pulse/space | 42 | * @ev: the struct ir_raw_event descriptor of the pulse/space |
| 43 | * | 43 | * |
| 44 | * This function returns -EINVAL if the pulse violates the state machine | 44 | * This function returns -EINVAL if the pulse violates the state machine |
| 45 | */ | 45 | */ |
diff --git a/drivers/media/rc/ir-lirc-codec.c b/drivers/media/rc/ir-lirc-codec.c index 8f2f37412fc5..4fd4521693d9 100644 --- a/drivers/media/rc/ir-lirc-codec.c +++ b/drivers/media/rc/ir-lirc-codec.c | |||
| @@ -25,8 +25,8 @@ | |||
| 25 | /** | 25 | /** |
| 26 | * ir_lirc_decode() - Send raw IR data to lirc_dev to be relayed to the | 26 | * ir_lirc_decode() - Send raw IR data to lirc_dev to be relayed to the |
| 27 | * lircd userspace daemon for decoding. | 27 | * lircd userspace daemon for decoding. |
| 28 | * @input_dev: the struct rc_dev descriptor of the device | 28 | * @dev: the struct rc_dev descriptor of the device |
| 29 | * @duration: the struct ir_raw_event descriptor of the pulse/space | 29 | * @ev: the struct ir_raw_event descriptor of the pulse/space |
| 30 | * | 30 | * |
| 31 | * This function returns -EINVAL if the lirc interfaces aren't wired up. | 31 | * This function returns -EINVAL if the lirc interfaces aren't wired up. |
| 32 | */ | 32 | */ |
diff --git a/drivers/media/rc/ir-nec-decoder.c b/drivers/media/rc/ir-nec-decoder.c index a95d09acc22a..6880c190dcd2 100644 --- a/drivers/media/rc/ir-nec-decoder.c +++ b/drivers/media/rc/ir-nec-decoder.c | |||
| @@ -41,7 +41,7 @@ enum nec_state { | |||
| 41 | /** | 41 | /** |
| 42 | * ir_nec_decode() - Decode one NEC pulse or space | 42 | * ir_nec_decode() - Decode one NEC pulse or space |
| 43 | * @dev: the struct rc_dev descriptor of the device | 43 | * @dev: the struct rc_dev descriptor of the device |
| 44 | * @duration: the struct ir_raw_event descriptor of the pulse/space | 44 | * @ev: the struct ir_raw_event descriptor of the pulse/space |
| 45 | * | 45 | * |
| 46 | * This function returns -EINVAL if the pulse violates the state machine | 46 | * This function returns -EINVAL if the pulse violates the state machine |
| 47 | */ | 47 | */ |
| @@ -183,7 +183,6 @@ static int ir_nec_decode(struct rc_dev *dev, struct ir_raw_event ev) | |||
| 183 | * ir_nec_scancode_to_raw() - encode an NEC scancode ready for modulation. | 183 | * ir_nec_scancode_to_raw() - encode an NEC scancode ready for modulation. |
| 184 | * @protocol: specific protocol to use | 184 | * @protocol: specific protocol to use |
| 185 | * @scancode: a single NEC scancode. | 185 | * @scancode: a single NEC scancode. |
| 186 | * @raw: raw data to be modulated. | ||
| 187 | */ | 186 | */ |
| 188 | static u32 ir_nec_scancode_to_raw(enum rc_proto protocol, u32 scancode) | 187 | static u32 ir_nec_scancode_to_raw(enum rc_proto protocol, u32 scancode) |
| 189 | { | 188 | { |
diff --git a/drivers/media/rc/ir-sanyo-decoder.c b/drivers/media/rc/ir-sanyo-decoder.c index 758c60956850..d94e07b02f3b 100644 --- a/drivers/media/rc/ir-sanyo-decoder.c +++ b/drivers/media/rc/ir-sanyo-decoder.c | |||
| @@ -48,7 +48,7 @@ enum sanyo_state { | |||
| 48 | /** | 48 | /** |
| 49 | * ir_sanyo_decode() - Decode one SANYO pulse or space | 49 | * ir_sanyo_decode() - Decode one SANYO pulse or space |
| 50 | * @dev: the struct rc_dev descriptor of the device | 50 | * @dev: the struct rc_dev descriptor of the device |
| 51 | * @duration: the struct ir_raw_event descriptor of the pulse/space | 51 | * @ev: the struct ir_raw_event descriptor of the pulse/space |
| 52 | * | 52 | * |
| 53 | * This function returns -EINVAL if the pulse violates the state machine | 53 | * This function returns -EINVAL if the pulse violates the state machine |
| 54 | */ | 54 | */ |
diff --git a/drivers/media/rc/ir-sharp-decoder.c b/drivers/media/rc/ir-sharp-decoder.c index 129b558acc92..7140dd6160ee 100644 --- a/drivers/media/rc/ir-sharp-decoder.c +++ b/drivers/media/rc/ir-sharp-decoder.c | |||
| @@ -39,7 +39,7 @@ enum sharp_state { | |||
| 39 | /** | 39 | /** |
| 40 | * ir_sharp_decode() - Decode one Sharp pulse or space | 40 | * ir_sharp_decode() - Decode one Sharp pulse or space |
| 41 | * @dev: the struct rc_dev descriptor of the device | 41 | * @dev: the struct rc_dev descriptor of the device |
| 42 | * @duration: the struct ir_raw_event descriptor of the pulse/space | 42 | * @ev: the struct ir_raw_event descriptor of the pulse/space |
| 43 | * | 43 | * |
| 44 | * This function returns -EINVAL if the pulse violates the state machine | 44 | * This function returns -EINVAL if the pulse violates the state machine |
| 45 | */ | 45 | */ |
diff --git a/drivers/media/rc/ir-xmp-decoder.c b/drivers/media/rc/ir-xmp-decoder.c index 6f464be1c8d7..712bc6d76e92 100644 --- a/drivers/media/rc/ir-xmp-decoder.c +++ b/drivers/media/rc/ir-xmp-decoder.c | |||
| @@ -35,7 +35,7 @@ enum xmp_state { | |||
| 35 | /** | 35 | /** |
| 36 | * ir_xmp_decode() - Decode one XMP pulse or space | 36 | * ir_xmp_decode() - Decode one XMP pulse or space |
| 37 | * @dev: the struct rc_dev descriptor of the device | 37 | * @dev: the struct rc_dev descriptor of the device |
| 38 | * @duration: the struct ir_raw_event descriptor of the pulse/space | 38 | * @ev: the struct ir_raw_event descriptor of the pulse/space |
| 39 | * | 39 | * |
| 40 | * This function returns -EINVAL if the pulse violates the state machine | 40 | * This function returns -EINVAL if the pulse violates the state machine |
| 41 | */ | 41 | */ |
diff --git a/drivers/media/rc/rc-ir-raw.c b/drivers/media/rc/rc-ir-raw.c index f6e5ba4fbb49..d78483a504c9 100644 --- a/drivers/media/rc/rc-ir-raw.c +++ b/drivers/media/rc/rc-ir-raw.c | |||
| @@ -128,7 +128,7 @@ EXPORT_SYMBOL_GPL(ir_raw_event_store_edge); | |||
| 128 | /** | 128 | /** |
| 129 | * ir_raw_event_store_with_filter() - pass next pulse/space to decoders with some processing | 129 | * ir_raw_event_store_with_filter() - pass next pulse/space to decoders with some processing |
| 130 | * @dev: the struct rc_dev device descriptor | 130 | * @dev: the struct rc_dev device descriptor |
| 131 | * @type: the type of the event that has occurred | 131 | * @ev: the event that has occurred |
| 132 | * | 132 | * |
| 133 | * This routine (which may be called from an interrupt context) works | 133 | * This routine (which may be called from an interrupt context) works |
| 134 | * in similar manner to ir_raw_event_store_edge. | 134 | * in similar manner to ir_raw_event_store_edge. |
diff --git a/drivers/media/rc/rc-main.c b/drivers/media/rc/rc-main.c index 17950e29d4e3..c144b77eac98 100644 --- a/drivers/media/rc/rc-main.c +++ b/drivers/media/rc/rc-main.c | |||
| @@ -39,41 +39,41 @@ static const struct { | |||
| 39 | [RC_PROTO_UNKNOWN] = { .name = "unknown", .repeat_period = 250 }, | 39 | [RC_PROTO_UNKNOWN] = { .name = "unknown", .repeat_period = 250 }, |
| 40 | [RC_PROTO_OTHER] = { .name = "other", .repeat_period = 250 }, | 40 | [RC_PROTO_OTHER] = { .name = "other", .repeat_period = 250 }, |
| 41 | [RC_PROTO_RC5] = { .name = "rc-5", | 41 | [RC_PROTO_RC5] = { .name = "rc-5", |
| 42 | .scancode_bits = 0x1f7f, .repeat_period = 164 }, | 42 | .scancode_bits = 0x1f7f, .repeat_period = 250 }, |
| 43 | [RC_PROTO_RC5X_20] = { .name = "rc-5x-20", | 43 | [RC_PROTO_RC5X_20] = { .name = "rc-5x-20", |
| 44 | .scancode_bits = 0x1f7f3f, .repeat_period = 164 }, | 44 | .scancode_bits = 0x1f7f3f, .repeat_period = 250 }, |
| 45 | [RC_PROTO_RC5_SZ] = { .name = "rc-5-sz", | 45 | [RC_PROTO_RC5_SZ] = { .name = "rc-5-sz", |
| 46 | .scancode_bits = 0x2fff, .repeat_period = 164 }, | 46 | .scancode_bits = 0x2fff, .repeat_period = 250 }, |
| 47 | [RC_PROTO_JVC] = { .name = "jvc", | 47 | [RC_PROTO_JVC] = { .name = "jvc", |
| 48 | .scancode_bits = 0xffff, .repeat_period = 250 }, | 48 | .scancode_bits = 0xffff, .repeat_period = 250 }, |
| 49 | [RC_PROTO_SONY12] = { .name = "sony-12", | 49 | [RC_PROTO_SONY12] = { .name = "sony-12", |
| 50 | .scancode_bits = 0x1f007f, .repeat_period = 100 }, | 50 | .scancode_bits = 0x1f007f, .repeat_period = 250 }, |
| 51 | [RC_PROTO_SONY15] = { .name = "sony-15", | 51 | [RC_PROTO_SONY15] = { .name = "sony-15", |
| 52 | .scancode_bits = 0xff007f, .repeat_period = 100 }, | 52 | .scancode_bits = 0xff007f, .repeat_period = 250 }, |
| 53 | [RC_PROTO_SONY20] = { .name = "sony-20", | 53 | [RC_PROTO_SONY20] = { .name = "sony-20", |
| 54 | .scancode_bits = 0x1fff7f, .repeat_period = 100 }, | 54 | .scancode_bits = 0x1fff7f, .repeat_period = 250 }, |
| 55 | [RC_PROTO_NEC] = { .name = "nec", | 55 | [RC_PROTO_NEC] = { .name = "nec", |
| 56 | .scancode_bits = 0xffff, .repeat_period = 160 }, | 56 | .scancode_bits = 0xffff, .repeat_period = 250 }, |
| 57 | [RC_PROTO_NECX] = { .name = "nec-x", | 57 | [RC_PROTO_NECX] = { .name = "nec-x", |
| 58 | .scancode_bits = 0xffffff, .repeat_period = 160 }, | 58 | .scancode_bits = 0xffffff, .repeat_period = 250 }, |
| 59 | [RC_PROTO_NEC32] = { .name = "nec-32", | 59 | [RC_PROTO_NEC32] = { .name = "nec-32", |
| 60 | .scancode_bits = 0xffffffff, .repeat_period = 160 }, | 60 | .scancode_bits = 0xffffffff, .repeat_period = 250 }, |
| 61 | [RC_PROTO_SANYO] = { .name = "sanyo", | 61 | [RC_PROTO_SANYO] = { .name = "sanyo", |
| 62 | .scancode_bits = 0x1fffff, .repeat_period = 250 }, | 62 | .scancode_bits = 0x1fffff, .repeat_period = 250 }, |
| 63 | [RC_PROTO_MCIR2_KBD] = { .name = "mcir2-kbd", | 63 | [RC_PROTO_MCIR2_KBD] = { .name = "mcir2-kbd", |
| 64 | .scancode_bits = 0xffff, .repeat_period = 150 }, | 64 | .scancode_bits = 0xffff, .repeat_period = 250 }, |
| 65 | [RC_PROTO_MCIR2_MSE] = { .name = "mcir2-mse", | 65 | [RC_PROTO_MCIR2_MSE] = { .name = "mcir2-mse", |
| 66 | .scancode_bits = 0x1fffff, .repeat_period = 150 }, | 66 | .scancode_bits = 0x1fffff, .repeat_period = 250 }, |
| 67 | [RC_PROTO_RC6_0] = { .name = "rc-6-0", | 67 | [RC_PROTO_RC6_0] = { .name = "rc-6-0", |
| 68 | .scancode_bits = 0xffff, .repeat_period = 164 }, | 68 | .scancode_bits = 0xffff, .repeat_period = 250 }, |
| 69 | [RC_PROTO_RC6_6A_20] = { .name = "rc-6-6a-20", | 69 | [RC_PROTO_RC6_6A_20] = { .name = "rc-6-6a-20", |
| 70 | .scancode_bits = 0xfffff, .repeat_period = 164 }, | 70 | .scancode_bits = 0xfffff, .repeat_period = 250 }, |
| 71 | [RC_PROTO_RC6_6A_24] = { .name = "rc-6-6a-24", | 71 | [RC_PROTO_RC6_6A_24] = { .name = "rc-6-6a-24", |
| 72 | .scancode_bits = 0xffffff, .repeat_period = 164 }, | 72 | .scancode_bits = 0xffffff, .repeat_period = 250 }, |
| 73 | [RC_PROTO_RC6_6A_32] = { .name = "rc-6-6a-32", | 73 | [RC_PROTO_RC6_6A_32] = { .name = "rc-6-6a-32", |
| 74 | .scancode_bits = 0xffffffff, .repeat_period = 164 }, | 74 | .scancode_bits = 0xffffffff, .repeat_period = 250 }, |
| 75 | [RC_PROTO_RC6_MCE] = { .name = "rc-6-mce", | 75 | [RC_PROTO_RC6_MCE] = { .name = "rc-6-mce", |
| 76 | .scancode_bits = 0xffff7fff, .repeat_period = 164 }, | 76 | .scancode_bits = 0xffff7fff, .repeat_period = 250 }, |
| 77 | [RC_PROTO_SHARP] = { .name = "sharp", | 77 | [RC_PROTO_SHARP] = { .name = "sharp", |
| 78 | .scancode_bits = 0x1fff, .repeat_period = 250 }, | 78 | .scancode_bits = 0x1fff, .repeat_period = 250 }, |
| 79 | [RC_PROTO_XMP] = { .name = "xmp", .repeat_period = 250 }, | 79 | [RC_PROTO_XMP] = { .name = "xmp", .repeat_period = 250 }, |
| @@ -170,10 +170,11 @@ static struct rc_map_list empty_map = { | |||
| 170 | * @name: name to assign to the table | 170 | * @name: name to assign to the table |
| 171 | * @rc_proto: ir type to assign to the new table | 171 | * @rc_proto: ir type to assign to the new table |
| 172 | * @size: initial size of the table | 172 | * @size: initial size of the table |
| 173 | * @return: zero on success or a negative error code | ||
| 174 | * | 173 | * |
| 175 | * This routine will initialize the rc_map and will allocate | 174 | * This routine will initialize the rc_map and will allocate |
| 176 | * memory to hold at least the specified number of elements. | 175 | * memory to hold at least the specified number of elements. |
| 176 | * | ||
| 177 | * return: zero on success or a negative error code | ||
| 177 | */ | 178 | */ |
| 178 | static int ir_create_table(struct rc_map *rc_map, | 179 | static int ir_create_table(struct rc_map *rc_map, |
| 179 | const char *name, u64 rc_proto, size_t size) | 180 | const char *name, u64 rc_proto, size_t size) |
| @@ -216,10 +217,11 @@ static void ir_free_table(struct rc_map *rc_map) | |||
| 216 | * ir_resize_table() - resizes a scancode table if necessary | 217 | * ir_resize_table() - resizes a scancode table if necessary |
| 217 | * @rc_map: the rc_map to resize | 218 | * @rc_map: the rc_map to resize |
| 218 | * @gfp_flags: gfp flags to use when allocating memory | 219 | * @gfp_flags: gfp flags to use when allocating memory |
| 219 | * @return: zero on success or a negative error code | ||
| 220 | * | 220 | * |
| 221 | * This routine will shrink the rc_map if it has lots of | 221 | * This routine will shrink the rc_map if it has lots of |
| 222 | * unused entries and grow it if it is full. | 222 | * unused entries and grow it if it is full. |
| 223 | * | ||
| 224 | * return: zero on success or a negative error code | ||
| 223 | */ | 225 | */ |
| 224 | static int ir_resize_table(struct rc_map *rc_map, gfp_t gfp_flags) | 226 | static int ir_resize_table(struct rc_map *rc_map, gfp_t gfp_flags) |
| 225 | { | 227 | { |
| @@ -265,11 +267,13 @@ static int ir_resize_table(struct rc_map *rc_map, gfp_t gfp_flags) | |||
| 265 | * @dev: the struct rc_dev device descriptor | 267 | * @dev: the struct rc_dev device descriptor |
| 266 | * @rc_map: scancode table to be adjusted | 268 | * @rc_map: scancode table to be adjusted |
| 267 | * @index: index of the mapping that needs to be updated | 269 | * @index: index of the mapping that needs to be updated |
| 268 | * @keycode: the desired keycode | 270 | * @new_keycode: the desired keycode |
| 269 | * @return: previous keycode assigned to the mapping | ||
| 270 | * | 271 | * |
| 271 | * This routine is used to update scancode->keycode mapping at given | 272 | * This routine is used to update scancode->keycode mapping at given |
| 272 | * position. | 273 | * position. |
| 274 | * | ||
| 275 | * return: previous keycode assigned to the mapping | ||
| 276 | * | ||
| 273 | */ | 277 | */ |
| 274 | static unsigned int ir_update_mapping(struct rc_dev *dev, | 278 | static unsigned int ir_update_mapping(struct rc_dev *dev, |
| 275 | struct rc_map *rc_map, | 279 | struct rc_map *rc_map, |
| @@ -320,12 +324,13 @@ static unsigned int ir_update_mapping(struct rc_dev *dev, | |||
| 320 | * @scancode: the desired scancode | 324 | * @scancode: the desired scancode |
| 321 | * @resize: controls whether we allowed to resize the table to | 325 | * @resize: controls whether we allowed to resize the table to |
| 322 | * accommodate not yet present scancodes | 326 | * accommodate not yet present scancodes |
| 323 | * @return: index of the mapping containing scancode in question | ||
| 324 | * or -1U in case of failure. | ||
| 325 | * | 327 | * |
| 326 | * This routine is used to locate given scancode in rc_map. | 328 | * This routine is used to locate given scancode in rc_map. |
| 327 | * If scancode is not yet present the routine will allocate a new slot | 329 | * If scancode is not yet present the routine will allocate a new slot |
| 328 | * for it. | 330 | * for it. |
| 331 | * | ||
| 332 | * return: index of the mapping containing scancode in question | ||
| 333 | * or -1U in case of failure. | ||
| 329 | */ | 334 | */ |
| 330 | static unsigned int ir_establish_scancode(struct rc_dev *dev, | 335 | static unsigned int ir_establish_scancode(struct rc_dev *dev, |
| 331 | struct rc_map *rc_map, | 336 | struct rc_map *rc_map, |
| @@ -375,11 +380,12 @@ static unsigned int ir_establish_scancode(struct rc_dev *dev, | |||
| 375 | /** | 380 | /** |
| 376 | * ir_setkeycode() - set a keycode in the scancode->keycode table | 381 | * ir_setkeycode() - set a keycode in the scancode->keycode table |
| 377 | * @idev: the struct input_dev device descriptor | 382 | * @idev: the struct input_dev device descriptor |
| 378 | * @scancode: the desired scancode | 383 | * @ke: Input keymap entry |
| 379 | * @keycode: result | 384 | * @old_keycode: result |
| 380 | * @return: -EINVAL if the keycode could not be inserted, otherwise zero. | ||
| 381 | * | 385 | * |
| 382 | * This routine is used to handle evdev EVIOCSKEY ioctl. | 386 | * This routine is used to handle evdev EVIOCSKEY ioctl. |
| 387 | * | ||
| 388 | * return: -EINVAL if the keycode could not be inserted, otherwise zero. | ||
| 383 | */ | 389 | */ |
| 384 | static int ir_setkeycode(struct input_dev *idev, | 390 | static int ir_setkeycode(struct input_dev *idev, |
| 385 | const struct input_keymap_entry *ke, | 391 | const struct input_keymap_entry *ke, |
| @@ -422,11 +428,11 @@ out: | |||
| 422 | /** | 428 | /** |
| 423 | * ir_setkeytable() - sets several entries in the scancode->keycode table | 429 | * ir_setkeytable() - sets several entries in the scancode->keycode table |
| 424 | * @dev: the struct rc_dev device descriptor | 430 | * @dev: the struct rc_dev device descriptor |
| 425 | * @to: the struct rc_map to copy entries to | ||
| 426 | * @from: the struct rc_map to copy entries from | 431 | * @from: the struct rc_map to copy entries from |
| 427 | * @return: -ENOMEM if all keycodes could not be inserted, otherwise zero. | ||
| 428 | * | 432 | * |
| 429 | * This routine is used to handle table initialization. | 433 | * This routine is used to handle table initialization. |
| 434 | * | ||
| 435 | * return: -ENOMEM if all keycodes could not be inserted, otherwise zero. | ||
| 430 | */ | 436 | */ |
| 431 | static int ir_setkeytable(struct rc_dev *dev, | 437 | static int ir_setkeytable(struct rc_dev *dev, |
| 432 | const struct rc_map *from) | 438 | const struct rc_map *from) |
| @@ -474,10 +480,11 @@ static int rc_map_cmp(const void *key, const void *elt) | |||
| 474 | * ir_lookup_by_scancode() - locate mapping by scancode | 480 | * ir_lookup_by_scancode() - locate mapping by scancode |
| 475 | * @rc_map: the struct rc_map to search | 481 | * @rc_map: the struct rc_map to search |
| 476 | * @scancode: scancode to look for in the table | 482 | * @scancode: scancode to look for in the table |
| 477 | * @return: index in the table, -1U if not found | ||
| 478 | * | 483 | * |
| 479 | * This routine performs binary search in RC keykeymap table for | 484 | * This routine performs binary search in RC keykeymap table for |
| 480 | * given scancode. | 485 | * given scancode. |
| 486 | * | ||
| 487 | * return: index in the table, -1U if not found | ||
| 481 | */ | 488 | */ |
| 482 | static unsigned int ir_lookup_by_scancode(const struct rc_map *rc_map, | 489 | static unsigned int ir_lookup_by_scancode(const struct rc_map *rc_map, |
| 483 | unsigned int scancode) | 490 | unsigned int scancode) |
| @@ -495,11 +502,11 @@ static unsigned int ir_lookup_by_scancode(const struct rc_map *rc_map, | |||
| 495 | /** | 502 | /** |
| 496 | * ir_getkeycode() - get a keycode from the scancode->keycode table | 503 | * ir_getkeycode() - get a keycode from the scancode->keycode table |
| 497 | * @idev: the struct input_dev device descriptor | 504 | * @idev: the struct input_dev device descriptor |
| 498 | * @scancode: the desired scancode | 505 | * @ke: Input keymap entry |
| 499 | * @keycode: used to return the keycode, if found, or KEY_RESERVED | ||
| 500 | * @return: always returns zero. | ||
| 501 | * | 506 | * |
| 502 | * This routine is used to handle evdev EVIOCGKEY ioctl. | 507 | * This routine is used to handle evdev EVIOCGKEY ioctl. |
| 508 | * | ||
| 509 | * return: always returns zero. | ||
| 503 | */ | 510 | */ |
| 504 | static int ir_getkeycode(struct input_dev *idev, | 511 | static int ir_getkeycode(struct input_dev *idev, |
| 505 | struct input_keymap_entry *ke) | 512 | struct input_keymap_entry *ke) |
| @@ -556,11 +563,12 @@ out: | |||
| 556 | * rc_g_keycode_from_table() - gets the keycode that corresponds to a scancode | 563 | * rc_g_keycode_from_table() - gets the keycode that corresponds to a scancode |
| 557 | * @dev: the struct rc_dev descriptor of the device | 564 | * @dev: the struct rc_dev descriptor of the device |
| 558 | * @scancode: the scancode to look for | 565 | * @scancode: the scancode to look for |
| 559 | * @return: the corresponding keycode, or KEY_RESERVED | ||
| 560 | * | 566 | * |
| 561 | * This routine is used by drivers which need to convert a scancode to a | 567 | * This routine is used by drivers which need to convert a scancode to a |
| 562 | * keycode. Normally it should not be used since drivers should have no | 568 | * keycode. Normally it should not be used since drivers should have no |
| 563 | * interest in keycodes. | 569 | * interest in keycodes. |
| 570 | * | ||
| 571 | * return: the corresponding keycode, or KEY_RESERVED | ||
| 564 | */ | 572 | */ |
| 565 | u32 rc_g_keycode_from_table(struct rc_dev *dev, u32 scancode) | 573 | u32 rc_g_keycode_from_table(struct rc_dev *dev, u32 scancode) |
| 566 | { | 574 | { |
| @@ -625,7 +633,8 @@ EXPORT_SYMBOL_GPL(rc_keyup); | |||
| 625 | 633 | ||
| 626 | /** | 634 | /** |
| 627 | * ir_timer_keyup() - generates a keyup event after a timeout | 635 | * ir_timer_keyup() - generates a keyup event after a timeout |
| 628 | * @cookie: a pointer to the struct rc_dev for the device | 636 | * |
| 637 | * @t: a pointer to the struct timer_list | ||
| 629 | * | 638 | * |
| 630 | * This routine will generate a keyup event some time after a keydown event | 639 | * This routine will generate a keyup event some time after a keydown event |
| 631 | * is generated when no further activity has been detected. | 640 | * is generated when no further activity has been detected. |
| @@ -780,7 +789,8 @@ EXPORT_SYMBOL_GPL(rc_keydown_notimeout); | |||
| 780 | * provides sensible defaults | 789 | * provides sensible defaults |
| 781 | * @dev: the struct rc_dev descriptor of the device | 790 | * @dev: the struct rc_dev descriptor of the device |
| 782 | * @filter: the scancode and mask | 791 | * @filter: the scancode and mask |
| 783 | * @return: 0 or -EINVAL if the filter is not valid | 792 | * |
| 793 | * return: 0 or -EINVAL if the filter is not valid | ||
| 784 | */ | 794 | */ |
| 785 | static int rc_validate_filter(struct rc_dev *dev, | 795 | static int rc_validate_filter(struct rc_dev *dev, |
| 786 | struct rc_scancode_filter *filter) | 796 | struct rc_scancode_filter *filter) |
diff --git a/drivers/media/rc/sir_ir.c b/drivers/media/rc/sir_ir.c index 76120664b700..9ee2c9196b4d 100644 --- a/drivers/media/rc/sir_ir.c +++ b/drivers/media/rc/sir_ir.c | |||
| @@ -57,7 +57,7 @@ static void add_read_queue(int flag, unsigned long val); | |||
| 57 | static irqreturn_t sir_interrupt(int irq, void *dev_id); | 57 | static irqreturn_t sir_interrupt(int irq, void *dev_id); |
| 58 | static void send_space(unsigned long len); | 58 | static void send_space(unsigned long len); |
| 59 | static void send_pulse(unsigned long len); | 59 | static void send_pulse(unsigned long len); |
| 60 | static void init_hardware(void); | 60 | static int init_hardware(void); |
| 61 | static void drop_hardware(void); | 61 | static void drop_hardware(void); |
| 62 | /* Initialisation */ | 62 | /* Initialisation */ |
| 63 | 63 | ||
| @@ -263,11 +263,36 @@ static void send_pulse(unsigned long len) | |||
| 263 | } | 263 | } |
| 264 | } | 264 | } |
| 265 | 265 | ||
| 266 | static void init_hardware(void) | 266 | static int init_hardware(void) |
| 267 | { | 267 | { |
| 268 | u8 scratch, scratch2, scratch3; | ||
| 268 | unsigned long flags; | 269 | unsigned long flags; |
| 269 | 270 | ||
| 270 | spin_lock_irqsave(&hardware_lock, flags); | 271 | spin_lock_irqsave(&hardware_lock, flags); |
| 272 | |||
| 273 | /* | ||
| 274 | * This is a simple port existence test, borrowed from the autoconfig | ||
| 275 | * function in drivers/tty/serial/8250/8250_port.c | ||
| 276 | */ | ||
| 277 | scratch = sinp(UART_IER); | ||
| 278 | soutp(UART_IER, 0); | ||
| 279 | #ifdef __i386__ | ||
| 280 | outb(0xff, 0x080); | ||
| 281 | #endif | ||
| 282 | scratch2 = sinp(UART_IER) & 0x0f; | ||
| 283 | soutp(UART_IER, 0x0f); | ||
| 284 | #ifdef __i386__ | ||
| 285 | outb(0x00, 0x080); | ||
| 286 | #endif | ||
| 287 | scratch3 = sinp(UART_IER) & 0x0f; | ||
| 288 | soutp(UART_IER, scratch); | ||
| 289 | if (scratch2 != 0 || scratch3 != 0x0f) { | ||
| 290 | /* we fail, there's nothing here */ | ||
| 291 | spin_unlock_irqrestore(&hardware_lock, flags); | ||
| 292 | pr_err("port existence test failed, cannot continue\n"); | ||
| 293 | return -ENODEV; | ||
| 294 | } | ||
| 295 | |||
| 271 | /* reset UART */ | 296 | /* reset UART */ |
| 272 | outb(0, io + UART_MCR); | 297 | outb(0, io + UART_MCR); |
| 273 | outb(0, io + UART_IER); | 298 | outb(0, io + UART_IER); |
| @@ -285,6 +310,8 @@ static void init_hardware(void) | |||
| 285 | /* turn on UART */ | 310 | /* turn on UART */ |
| 286 | outb(UART_MCR_DTR | UART_MCR_RTS | UART_MCR_OUT2, io + UART_MCR); | 311 | outb(UART_MCR_DTR | UART_MCR_RTS | UART_MCR_OUT2, io + UART_MCR); |
| 287 | spin_unlock_irqrestore(&hardware_lock, flags); | 312 | spin_unlock_irqrestore(&hardware_lock, flags); |
| 313 | |||
| 314 | return 0; | ||
| 288 | } | 315 | } |
| 289 | 316 | ||
| 290 | static void drop_hardware(void) | 317 | static void drop_hardware(void) |
| @@ -334,14 +361,19 @@ static int sir_ir_probe(struct platform_device *dev) | |||
| 334 | pr_err("IRQ %d already in use.\n", irq); | 361 | pr_err("IRQ %d already in use.\n", irq); |
| 335 | return retval; | 362 | return retval; |
| 336 | } | 363 | } |
| 364 | |||
| 365 | retval = init_hardware(); | ||
| 366 | if (retval) { | ||
| 367 | del_timer_sync(&timerlist); | ||
| 368 | return retval; | ||
| 369 | } | ||
| 370 | |||
| 337 | pr_info("I/O port 0x%.4x, IRQ %d.\n", io, irq); | 371 | pr_info("I/O port 0x%.4x, IRQ %d.\n", io, irq); |
| 338 | 372 | ||
| 339 | retval = devm_rc_register_device(&sir_ir_dev->dev, rcdev); | 373 | retval = devm_rc_register_device(&sir_ir_dev->dev, rcdev); |
| 340 | if (retval < 0) | 374 | if (retval < 0) |
| 341 | return retval; | 375 | return retval; |
| 342 | 376 | ||
| 343 | init_hardware(); | ||
| 344 | |||
| 345 | return 0; | 377 | return 0; |
| 346 | } | 378 | } |
| 347 | 379 | ||
diff --git a/drivers/media/rc/st_rc.c b/drivers/media/rc/st_rc.c index a8e39c635f34..d2efd7b2c3bc 100644 --- a/drivers/media/rc/st_rc.c +++ b/drivers/media/rc/st_rc.c | |||
| @@ -49,7 +49,7 @@ struct st_rc_device { | |||
| 49 | #define IRB_RX_NOISE_SUPPR 0x5c /* noise suppression */ | 49 | #define IRB_RX_NOISE_SUPPR 0x5c /* noise suppression */ |
| 50 | #define IRB_RX_POLARITY_INV 0x68 /* polarity inverter */ | 50 | #define IRB_RX_POLARITY_INV 0x68 /* polarity inverter */ |
| 51 | 51 | ||
| 52 | /** | 52 | /* |
| 53 | * IRQ set: Enable full FIFO 1 -> bit 3; | 53 | * IRQ set: Enable full FIFO 1 -> bit 3; |
| 54 | * Enable overrun IRQ 1 -> bit 2; | 54 | * Enable overrun IRQ 1 -> bit 2; |
| 55 | * Enable last symbol IRQ 1 -> bit 1: | 55 | * Enable last symbol IRQ 1 -> bit 1: |
| @@ -72,7 +72,7 @@ static void st_rc_send_lirc_timeout(struct rc_dev *rdev) | |||
| 72 | ir_raw_event_store(rdev, &ev); | 72 | ir_raw_event_store(rdev, &ev); |
| 73 | } | 73 | } |
| 74 | 74 | ||
| 75 | /** | 75 | /* |
| 76 | * RX graphical example to better understand the difference between ST IR block | 76 | * RX graphical example to better understand the difference between ST IR block |
| 77 | * output and standard definition used by LIRC (and most of the world!) | 77 | * output and standard definition used by LIRC (and most of the world!) |
| 78 | * | 78 | * |
| @@ -317,7 +317,7 @@ static int st_rc_probe(struct platform_device *pdev) | |||
| 317 | device_init_wakeup(dev, true); | 317 | device_init_wakeup(dev, true); |
| 318 | dev_pm_set_wake_irq(dev, rc_dev->irq); | 318 | dev_pm_set_wake_irq(dev, rc_dev->irq); |
| 319 | 319 | ||
| 320 | /** | 320 | /* |
| 321 | * for LIRC_MODE_MODE2 or LIRC_MODE_PULSE or LIRC_MODE_RAW | 321 | * for LIRC_MODE_MODE2 or LIRC_MODE_PULSE or LIRC_MODE_RAW |
| 322 | * lircd expects a long space first before a signal train to sync. | 322 | * lircd expects a long space first before a signal train to sync. |
| 323 | */ | 323 | */ |
diff --git a/drivers/media/rc/streamzap.c b/drivers/media/rc/streamzap.c index 4eebfcfc10f3..c9a70fda88a8 100644 --- a/drivers/media/rc/streamzap.c +++ b/drivers/media/rc/streamzap.c | |||
| @@ -191,7 +191,7 @@ static void sz_push_half_space(struct streamzap_ir *sz, | |||
| 191 | sz_push_full_space(sz, value & SZ_SPACE_MASK); | 191 | sz_push_full_space(sz, value & SZ_SPACE_MASK); |
| 192 | } | 192 | } |
| 193 | 193 | ||
| 194 | /** | 194 | /* |
| 195 | * streamzap_callback - usb IRQ handler callback | 195 | * streamzap_callback - usb IRQ handler callback |
| 196 | * | 196 | * |
| 197 | * This procedure is invoked on reception of data from | 197 | * This procedure is invoked on reception of data from |
| @@ -321,7 +321,7 @@ out: | |||
| 321 | return NULL; | 321 | return NULL; |
| 322 | } | 322 | } |
| 323 | 323 | ||
| 324 | /** | 324 | /* |
| 325 | * streamzap_probe | 325 | * streamzap_probe |
| 326 | * | 326 | * |
| 327 | * Called by usb-core to associated with a candidate device | 327 | * Called by usb-core to associated with a candidate device |
| @@ -450,7 +450,7 @@ free_sz: | |||
| 450 | return retval; | 450 | return retval; |
| 451 | } | 451 | } |
| 452 | 452 | ||
| 453 | /** | 453 | /* |
| 454 | * streamzap_disconnect | 454 | * streamzap_disconnect |
| 455 | * | 455 | * |
| 456 | * Called by the usb core when the device is removed from the system. | 456 | * Called by the usb core when the device is removed from the system. |
diff --git a/drivers/media/tuners/mt2063.c b/drivers/media/tuners/mt2063.c index 8b39d8dc97a0..5c87c5c6a455 100644 --- a/drivers/media/tuners/mt2063.c +++ b/drivers/media/tuners/mt2063.c | |||
| @@ -1397,9 +1397,9 @@ static u32 MT2063_Round_fLO(u32 f_LO, u32 f_LO_Step, u32 f_ref) | |||
| 1397 | * risk of overflow. It accurately calculates | 1397 | * risk of overflow. It accurately calculates |
| 1398 | * f_ref * num / denom to within 1 HZ with fixed math. | 1398 | * f_ref * num / denom to within 1 HZ with fixed math. |
| 1399 | * | 1399 | * |
| 1400 | * @num : Fractional portion of the multiplier | 1400 | * @f_ref: SRO frequency. |
| 1401 | * @num: Fractional portion of the multiplier | ||
| 1401 | * @denom: denominator portion of the ratio | 1402 | * @denom: denominator portion of the ratio |
| 1402 | * @f_Ref: SRO frequency. | ||
| 1403 | * | 1403 | * |
| 1404 | * This calculation handles f_ref as two separate 14-bit fields. | 1404 | * This calculation handles f_ref as two separate 14-bit fields. |
| 1405 | * Therefore, a maximum value of 2^28-1 may safely be used for f_ref. | 1405 | * Therefore, a maximum value of 2^28-1 may safely be used for f_ref. |
| @@ -1464,8 +1464,6 @@ static u32 MT2063_CalcLO1Mult(u32 *Div, | |||
| 1464 | * @f_LO: desired LO frequency. | 1464 | * @f_LO: desired LO frequency. |
| 1465 | * @f_LO_Step: Minimum step size for the LO (in Hz). | 1465 | * @f_LO_Step: Minimum step size for the LO (in Hz). |
| 1466 | * @f_Ref: SRO frequency. | 1466 | * @f_Ref: SRO frequency. |
| 1467 | * @f_Avoid: Range of PLL frequencies to avoid near | ||
| 1468 | * integer multiples of f_Ref (in Hz). | ||
| 1469 | * | 1467 | * |
| 1470 | * Returns: Recalculated LO frequency. | 1468 | * Returns: Recalculated LO frequency. |
| 1471 | */ | 1469 | */ |
diff --git a/drivers/media/usb/dvb-usb/cinergyT2-fe.c b/drivers/media/usb/dvb-usb/cinergyT2-fe.c index f9772ad0a2a5..5a2f81311fb7 100644 --- a/drivers/media/usb/dvb-usb/cinergyT2-fe.c +++ b/drivers/media/usb/dvb-usb/cinergyT2-fe.c | |||
| @@ -26,7 +26,7 @@ | |||
| 26 | #include "cinergyT2.h" | 26 | #include "cinergyT2.h" |
| 27 | 27 | ||
| 28 | 28 | ||
| 29 | /** | 29 | /* |
| 30 | * convert linux-dvb frontend parameter set into TPS. | 30 | * convert linux-dvb frontend parameter set into TPS. |
| 31 | * See ETSI ETS-300744, section 4.6.2, table 9 for details. | 31 | * See ETSI ETS-300744, section 4.6.2, table 9 for details. |
| 32 | * | 32 | * |
diff --git a/drivers/media/usb/dvb-usb/dib0700_devices.c b/drivers/media/usb/dvb-usb/dib0700_devices.c index 92098c1b78e5..366b05529915 100644 --- a/drivers/media/usb/dvb-usb/dib0700_devices.c +++ b/drivers/media/usb/dvb-usb/dib0700_devices.c | |||
| @@ -1677,10 +1677,10 @@ static int dib8096_set_param_override(struct dvb_frontend *fe) | |||
| 1677 | return -EINVAL; | 1677 | return -EINVAL; |
| 1678 | } | 1678 | } |
| 1679 | 1679 | ||
| 1680 | /** Update PLL if needed ratio **/ | 1680 | /* Update PLL if needed ratio */ |
| 1681 | state->dib8000_ops.update_pll(fe, &dib8090_pll_config_12mhz, fe->dtv_property_cache.bandwidth_hz / 1000, 0); | 1681 | state->dib8000_ops.update_pll(fe, &dib8090_pll_config_12mhz, fe->dtv_property_cache.bandwidth_hz / 1000, 0); |
| 1682 | 1682 | ||
| 1683 | /** Get optimize PLL ratio to remove spurious **/ | 1683 | /* Get optimize PLL ratio to remove spurious */ |
| 1684 | pll_ratio = dib8090_compute_pll_parameters(fe); | 1684 | pll_ratio = dib8090_compute_pll_parameters(fe); |
| 1685 | if (pll_ratio == 17) | 1685 | if (pll_ratio == 17) |
| 1686 | timf = 21387946; | 1686 | timf = 21387946; |
| @@ -1691,7 +1691,7 @@ static int dib8096_set_param_override(struct dvb_frontend *fe) | |||
| 1691 | else | 1691 | else |
| 1692 | timf = 18179756; | 1692 | timf = 18179756; |
| 1693 | 1693 | ||
| 1694 | /** Update ratio **/ | 1694 | /* Update ratio */ |
| 1695 | state->dib8000_ops.update_pll(fe, &dib8090_pll_config_12mhz, fe->dtv_property_cache.bandwidth_hz / 1000, pll_ratio); | 1695 | state->dib8000_ops.update_pll(fe, &dib8090_pll_config_12mhz, fe->dtv_property_cache.bandwidth_hz / 1000, pll_ratio); |
| 1696 | 1696 | ||
| 1697 | state->dib8000_ops.ctrl_timf(fe, DEMOD_TIMF_SET, timf); | 1697 | state->dib8000_ops.ctrl_timf(fe, DEMOD_TIMF_SET, timf); |
| @@ -3357,7 +3357,7 @@ static int novatd_sleep_override(struct dvb_frontend* fe) | |||
| 3357 | return state->sleep(fe); | 3357 | return state->sleep(fe); |
| 3358 | } | 3358 | } |
| 3359 | 3359 | ||
| 3360 | /** | 3360 | /* |
| 3361 | * novatd_frontend_attach - Nova-TD specific attach | 3361 | * novatd_frontend_attach - Nova-TD specific attach |
| 3362 | * | 3362 | * |
| 3363 | * Nova-TD has GPIO0, 1 and 2 for LEDs. So do not fiddle with them except for | 3363 | * Nova-TD has GPIO0, 1 and 2 for LEDs. So do not fiddle with them except for |
diff --git a/drivers/media/usb/dvb-usb/dibusb-common.c b/drivers/media/usb/dvb-usb/dibusb-common.c index 8207e6900656..bcacb0f22028 100644 --- a/drivers/media/usb/dvb-usb/dibusb-common.c +++ b/drivers/media/usb/dvb-usb/dibusb-common.c | |||
| @@ -223,8 +223,20 @@ EXPORT_SYMBOL(dibusb_i2c_algo); | |||
| 223 | 223 | ||
| 224 | int dibusb_read_eeprom_byte(struct dvb_usb_device *d, u8 offs, u8 *val) | 224 | int dibusb_read_eeprom_byte(struct dvb_usb_device *d, u8 offs, u8 *val) |
| 225 | { | 225 | { |
| 226 | u8 wbuf[1] = { offs }; | 226 | u8 *buf; |
| 227 | return dibusb_i2c_msg(d, 0x50, wbuf, 1, val, 1); | 227 | int rc; |
| 228 | |||
| 229 | buf = kmalloc(2, GFP_KERNEL); | ||
| 230 | if (!buf) | ||
| 231 | return -ENOMEM; | ||
| 232 | |||
| 233 | buf[0] = offs; | ||
| 234 | |||
| 235 | rc = dibusb_i2c_msg(d, 0x50, &buf[0], 1, &buf[1], 1); | ||
| 236 | *val = buf[1]; | ||
| 237 | kfree(buf); | ||
| 238 | |||
| 239 | return rc; | ||
| 228 | } | 240 | } |
| 229 | EXPORT_SYMBOL(dibusb_read_eeprom_byte); | 241 | EXPORT_SYMBOL(dibusb_read_eeprom_byte); |
| 230 | 242 | ||
diff --git a/drivers/media/usb/dvb-usb/friio-fe.c b/drivers/media/usb/dvb-usb/friio-fe.c index 41261317bd5c..b6046e0e07f6 100644 --- a/drivers/media/usb/dvb-usb/friio-fe.c +++ b/drivers/media/usb/dvb-usb/friio-fe.c | |||
| @@ -297,7 +297,7 @@ static int jdvbt90502_set_frontend(struct dvb_frontend *fe) | |||
| 297 | } | 297 | } |
| 298 | 298 | ||
| 299 | 299 | ||
| 300 | /** | 300 | /* |
| 301 | * (reg, val) commad list to initialize this module. | 301 | * (reg, val) commad list to initialize this module. |
| 302 | * captured on a Windows box. | 302 | * captured on a Windows box. |
| 303 | */ | 303 | */ |
diff --git a/drivers/media/usb/dvb-usb/friio.c b/drivers/media/usb/dvb-usb/friio.c index 62abe6c43a32..16875945e662 100644 --- a/drivers/media/usb/dvb-usb/friio.c +++ b/drivers/media/usb/dvb-usb/friio.c | |||
| @@ -21,7 +21,7 @@ MODULE_PARM_DESC(debug, | |||
| 21 | 21 | ||
| 22 | DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr); | 22 | DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr); |
| 23 | 23 | ||
| 24 | /** | 24 | /* |
| 25 | * Indirect I2C access to the PLL via FE. | 25 | * Indirect I2C access to the PLL via FE. |
| 26 | * whole I2C protocol data to the PLL is sent via the FE's I2C register. | 26 | * whole I2C protocol data to the PLL is sent via the FE's I2C register. |
| 27 | * This is done by a control msg to the FE with the I2C data accompanied, and | 27 | * This is done by a control msg to the FE with the I2C data accompanied, and |
diff --git a/drivers/media/usb/gspca/ov519.c b/drivers/media/usb/gspca/ov519.c index f1537daf4e2e..1b30434b72ef 100644 --- a/drivers/media/usb/gspca/ov519.c +++ b/drivers/media/usb/gspca/ov519.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /** | 1 | /* |
| 2 | * OV519 driver | 2 | * OV519 driver |
| 3 | * | 3 | * |
| 4 | * Copyright (C) 2008-2011 Jean-François Moine <moinejf@free.fr> | 4 | * Copyright (C) 2008-2011 Jean-François Moine <moinejf@free.fr> |
diff --git a/drivers/media/usb/pwc/pwc-dec23.c b/drivers/media/usb/pwc/pwc-dec23.c index 3792fedff951..1283b3bd9800 100644 --- a/drivers/media/usb/pwc/pwc-dec23.c +++ b/drivers/media/usb/pwc/pwc-dec23.c | |||
| @@ -649,11 +649,10 @@ static void DecompressBand23(struct pwc_dec23_private *pdec, | |||
| 649 | } | 649 | } |
| 650 | 650 | ||
| 651 | /** | 651 | /** |
| 652 | * | ||
| 653 | * Uncompress a pwc23 buffer. | 652 | * Uncompress a pwc23 buffer. |
| 654 | * | 653 | * @pdev: pointer to pwc device's internal struct |
| 655 | * src: raw data | 654 | * @src: raw data |
| 656 | * dst: image output | 655 | * @dst: image output |
| 657 | */ | 656 | */ |
| 658 | void pwc_dec23_decompress(struct pwc_device *pdev, | 657 | void pwc_dec23_decompress(struct pwc_device *pdev, |
| 659 | const void *src, | 658 | const void *src, |
diff --git a/drivers/media/usb/siano/smsusb.c b/drivers/media/usb/siano/smsusb.c index 8c1f926567ec..d07349cf9489 100644 --- a/drivers/media/usb/siano/smsusb.c +++ b/drivers/media/usb/siano/smsusb.c | |||
| @@ -74,7 +74,7 @@ struct smsusb_device_t { | |||
| 74 | static int smsusb_submit_urb(struct smsusb_device_t *dev, | 74 | static int smsusb_submit_urb(struct smsusb_device_t *dev, |
| 75 | struct smsusb_urb_t *surb); | 75 | struct smsusb_urb_t *surb); |
| 76 | 76 | ||
| 77 | /** | 77 | /* |
| 78 | * Completing URB's callback handler - bottom half (proccess context) | 78 | * Completing URB's callback handler - bottom half (proccess context) |
| 79 | * submits the URB prepared on smsusb_onresponse() | 79 | * submits the URB prepared on smsusb_onresponse() |
| 80 | */ | 80 | */ |
| @@ -86,7 +86,7 @@ static void do_submit_urb(struct work_struct *work) | |||
| 86 | smsusb_submit_urb(dev, surb); | 86 | smsusb_submit_urb(dev, surb); |
| 87 | } | 87 | } |
| 88 | 88 | ||
| 89 | /** | 89 | /* |
| 90 | * Completing URB's callback handler - top half (interrupt context) | 90 | * Completing URB's callback handler - top half (interrupt context) |
| 91 | * adds completing sms urb to the global surbs list and activtes the worker | 91 | * adds completing sms urb to the global surbs list and activtes the worker |
| 92 | * thread the surb | 92 | * thread the surb |
diff --git a/drivers/media/usb/ttusb-budget/dvb-ttusb-budget.c b/drivers/media/usb/ttusb-budget/dvb-ttusb-budget.c index b842f367249f..a142b9dc0feb 100644 --- a/drivers/media/usb/ttusb-budget/dvb-ttusb-budget.c +++ b/drivers/media/usb/ttusb-budget/dvb-ttusb-budget.c | |||
| @@ -76,7 +76,7 @@ DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr); | |||
| 76 | #define TTUSB_REV_2_2 0x22 | 76 | #define TTUSB_REV_2_2 0x22 |
| 77 | #define TTUSB_BUDGET_NAME "ttusb_stc_fw" | 77 | #define TTUSB_BUDGET_NAME "ttusb_stc_fw" |
| 78 | 78 | ||
| 79 | /** | 79 | /* |
| 80 | * since we're casting (struct ttusb*) <-> (struct dvb_demux*) around | 80 | * since we're casting (struct ttusb*) <-> (struct dvb_demux*) around |
| 81 | * the dvb_demux field must be the first in struct!! | 81 | * the dvb_demux field must be the first in struct!! |
| 82 | */ | 82 | */ |
| @@ -713,7 +713,7 @@ static void ttusb_process_frame(struct ttusb *ttusb, u8 * data, int len) | |||
| 713 | } | 713 | } |
| 714 | } | 714 | } |
| 715 | 715 | ||
| 716 | /** | 716 | /* |
| 717 | * if length is valid and we reached the end: | 717 | * if length is valid and we reached the end: |
| 718 | * goto next muxpack | 718 | * goto next muxpack |
| 719 | */ | 719 | */ |
| @@ -729,7 +729,7 @@ static void ttusb_process_frame(struct ttusb *ttusb, u8 * data, int len) | |||
| 729 | /* maximum bytes, until we know the length */ | 729 | /* maximum bytes, until we know the length */ |
| 730 | ttusb->muxpack_len = 2; | 730 | ttusb->muxpack_len = 2; |
| 731 | 731 | ||
| 732 | /** | 732 | /* |
| 733 | * no muxpacks left? | 733 | * no muxpacks left? |
| 734 | * return to search-sync state | 734 | * return to search-sync state |
| 735 | */ | 735 | */ |
diff --git a/drivers/media/usb/usbtv/usbtv-core.c b/drivers/media/usb/usbtv/usbtv-core.c index b55b79b8e921..127f8a0c098b 100644 --- a/drivers/media/usb/usbtv/usbtv-core.c +++ b/drivers/media/usb/usbtv/usbtv-core.c | |||
| @@ -144,6 +144,7 @@ static void usbtv_disconnect(struct usb_interface *intf) | |||
| 144 | 144 | ||
| 145 | static const struct usb_device_id usbtv_id_table[] = { | 145 | static const struct usb_device_id usbtv_id_table[] = { |
| 146 | { USB_DEVICE(0x1b71, 0x3002) }, | 146 | { USB_DEVICE(0x1b71, 0x3002) }, |
| 147 | { USB_DEVICE(0x1f71, 0x3301) }, | ||
| 147 | {} | 148 | {} |
| 148 | }; | 149 | }; |
| 149 | MODULE_DEVICE_TABLE(usb, usbtv_id_table); | 150 | MODULE_DEVICE_TABLE(usb, usbtv_id_table); |
diff --git a/drivers/media/v4l2-core/tuner-core.c b/drivers/media/v4l2-core/tuner-core.c index 8db45dfc271b..82852f23a3b6 100644 --- a/drivers/media/v4l2-core/tuner-core.c +++ b/drivers/media/v4l2-core/tuner-core.c | |||
| @@ -239,7 +239,7 @@ static const struct analog_demod_ops tuner_analog_ops = { | |||
| 239 | * @type: type of the tuner (e. g. tuner number) | 239 | * @type: type of the tuner (e. g. tuner number) |
| 240 | * @new_mode_mask: Indicates if tuner supports TV and/or Radio | 240 | * @new_mode_mask: Indicates if tuner supports TV and/or Radio |
| 241 | * @new_config: an optional parameter used by a few tuners to adjust | 241 | * @new_config: an optional parameter used by a few tuners to adjust |
| 242 | internal parameters, like LNA mode | 242 | * internal parameters, like LNA mode |
| 243 | * @tuner_callback: an optional function to be called when switching | 243 | * @tuner_callback: an optional function to be called when switching |
| 244 | * to analog mode | 244 | * to analog mode |
| 245 | * | 245 | * |
| @@ -750,6 +750,7 @@ static int tuner_remove(struct i2c_client *client) | |||
| 750 | /** | 750 | /** |
| 751 | * check_mode - Verify if tuner supports the requested mode | 751 | * check_mode - Verify if tuner supports the requested mode |
| 752 | * @t: a pointer to the module's internal struct_tuner | 752 | * @t: a pointer to the module's internal struct_tuner |
| 753 | * @mode: mode of the tuner, as defined by &enum v4l2_tuner_type. | ||
| 753 | * | 754 | * |
| 754 | * This function checks if the tuner is capable of tuning analog TV, | 755 | * This function checks if the tuner is capable of tuning analog TV, |
| 755 | * digital TV or radio, depending on what the caller wants. If the | 756 | * digital TV or radio, depending on what the caller wants. If the |
| @@ -757,6 +758,7 @@ static int tuner_remove(struct i2c_client *client) | |||
| 757 | * returns 0. | 758 | * returns 0. |
| 758 | * This function is needed for boards that have a separate tuner for | 759 | * This function is needed for boards that have a separate tuner for |
| 759 | * radio (like devices with tea5767). | 760 | * radio (like devices with tea5767). |
| 761 | * | ||
| 760 | * NOTE: mt20xx uses V4L2_TUNER_DIGITAL_TV and calls set_tv_freq to | 762 | * NOTE: mt20xx uses V4L2_TUNER_DIGITAL_TV and calls set_tv_freq to |
| 761 | * select a TV frequency. So, t_mode = T_ANALOG_TV could actually | 763 | * select a TV frequency. So, t_mode = T_ANALOG_TV could actually |
| 762 | * be used to represent a Digital TV too. | 764 | * be used to represent a Digital TV too. |
diff --git a/drivers/media/v4l2-core/v4l2-async.c b/drivers/media/v4l2-core/v4l2-async.c index a7c3464976f2..e5acfab470a5 100644 --- a/drivers/media/v4l2-core/v4l2-async.c +++ b/drivers/media/v4l2-core/v4l2-async.c | |||
| @@ -558,8 +558,7 @@ int v4l2_async_register_subdev(struct v4l2_subdev *sd) | |||
| 558 | if (!asd) | 558 | if (!asd) |
| 559 | continue; | 559 | continue; |
| 560 | 560 | ||
| 561 | ret = v4l2_async_match_notify(notifier, notifier->v4l2_dev, sd, | 561 | ret = v4l2_async_match_notify(notifier, v4l2_dev, sd, asd); |
| 562 | asd); | ||
| 563 | if (ret) | 562 | if (ret) |
| 564 | goto err_unbind; | 563 | goto err_unbind; |
| 565 | 564 | ||
diff --git a/drivers/media/v4l2-core/v4l2-dv-timings.c b/drivers/media/v4l2-core/v4l2-dv-timings.c index 5c8c49d240d1..930f9c53a64e 100644 --- a/drivers/media/v4l2-core/v4l2-dv-timings.c +++ b/drivers/media/v4l2-core/v4l2-dv-timings.c | |||
| @@ -245,11 +245,11 @@ EXPORT_SYMBOL_GPL(v4l2_find_dv_timings_cea861_vic); | |||
| 245 | 245 | ||
| 246 | /** | 246 | /** |
| 247 | * v4l2_match_dv_timings - check if two timings match | 247 | * v4l2_match_dv_timings - check if two timings match |
| 248 | * @t1 - compare this v4l2_dv_timings struct... | 248 | * @t1: compare this v4l2_dv_timings struct... |
| 249 | * @t2 - with this struct. | 249 | * @t2: with this struct. |
| 250 | * @pclock_delta - the allowed pixelclock deviation. | 250 | * @pclock_delta: the allowed pixelclock deviation. |
| 251 | * @match_reduced_fps - if true, then fail if V4L2_DV_FL_REDUCED_FPS does not | 251 | * @match_reduced_fps: if true, then fail if V4L2_DV_FL_REDUCED_FPS does not |
| 252 | * match. | 252 | * match. |
| 253 | * | 253 | * |
| 254 | * Compare t1 with t2 with a given margin of error for the pixelclock. | 254 | * Compare t1 with t2 with a given margin of error for the pixelclock. |
| 255 | */ | 255 | */ |
diff --git a/drivers/media/v4l2-core/v4l2-fwnode.c b/drivers/media/v4l2-core/v4l2-fwnode.c index 681b192420d9..fb72c7ac04d4 100644 --- a/drivers/media/v4l2-core/v4l2-fwnode.c +++ b/drivers/media/v4l2-core/v4l2-fwnode.c | |||
| @@ -458,11 +458,6 @@ static int __v4l2_async_notifier_parse_fwnode_endpoints( | |||
| 458 | if (!is_available) | 458 | if (!is_available) |
| 459 | continue; | 459 | continue; |
| 460 | 460 | ||
| 461 | if (WARN_ON(notifier->num_subdevs >= notifier->max_subdevs)) { | ||
| 462 | ret = -EINVAL; | ||
| 463 | break; | ||
| 464 | } | ||
| 465 | |||
| 466 | if (has_port) { | 461 | if (has_port) { |
| 467 | struct fwnode_endpoint ep; | 462 | struct fwnode_endpoint ep; |
| 468 | 463 | ||
| @@ -474,6 +469,11 @@ static int __v4l2_async_notifier_parse_fwnode_endpoints( | |||
| 474 | continue; | 469 | continue; |
| 475 | } | 470 | } |
| 476 | 471 | ||
| 472 | if (WARN_ON(notifier->num_subdevs >= notifier->max_subdevs)) { | ||
| 473 | ret = -EINVAL; | ||
| 474 | break; | ||
| 475 | } | ||
| 476 | |||
| 477 | ret = v4l2_async_notifier_fwnode_parse_endpoint( | 477 | ret = v4l2_async_notifier_fwnode_parse_endpoint( |
| 478 | dev, notifier, fwnode, asd_struct_size, parse_endpoint); | 478 | dev, notifier, fwnode, asd_struct_size, parse_endpoint); |
| 479 | if (ret < 0) | 479 | if (ret < 0) |
diff --git a/drivers/media/v4l2-core/v4l2-mem2mem.c b/drivers/media/v4l2-core/v4l2-mem2mem.c index f62e68aa04c4..bc580fbe18fa 100644 --- a/drivers/media/v4l2-core/v4l2-mem2mem.c +++ b/drivers/media/v4l2-core/v4l2-mem2mem.c | |||
| @@ -183,6 +183,7 @@ EXPORT_SYMBOL(v4l2_m2m_get_curr_priv); | |||
| 183 | 183 | ||
| 184 | /** | 184 | /** |
| 185 | * v4l2_m2m_try_run() - select next job to perform and run it if possible | 185 | * v4l2_m2m_try_run() - select next job to perform and run it if possible |
| 186 | * @m2m_dev: per-device context | ||
| 186 | * | 187 | * |
| 187 | * Get next transaction (if present) from the waiting jobs list and run it. | 188 | * Get next transaction (if present) from the waiting jobs list and run it. |
| 188 | */ | 189 | */ |
| @@ -281,6 +282,7 @@ EXPORT_SYMBOL_GPL(v4l2_m2m_try_schedule); | |||
| 281 | 282 | ||
| 282 | /** | 283 | /** |
| 283 | * v4l2_m2m_cancel_job() - cancel pending jobs for the context | 284 | * v4l2_m2m_cancel_job() - cancel pending jobs for the context |
| 285 | * @m2m_ctx: m2m context with jobs to be canceled | ||
| 284 | * | 286 | * |
| 285 | * In case of streamoff or release called on any context, | 287 | * In case of streamoff or release called on any context, |
| 286 | * 1] If the context is currently running, then abort job will be called | 288 | * 1] If the context is currently running, then abort job will be called |
diff --git a/drivers/media/v4l2-core/videobuf-core.c b/drivers/media/v4l2-core/videobuf-core.c index 1dbf6f7785bb..e87fb13b22dc 100644 --- a/drivers/media/v4l2-core/videobuf-core.c +++ b/drivers/media/v4l2-core/videobuf-core.c | |||
| @@ -222,7 +222,7 @@ int videobuf_queue_is_busy(struct videobuf_queue *q) | |||
| 222 | } | 222 | } |
| 223 | EXPORT_SYMBOL_GPL(videobuf_queue_is_busy); | 223 | EXPORT_SYMBOL_GPL(videobuf_queue_is_busy); |
| 224 | 224 | ||
| 225 | /** | 225 | /* |
| 226 | * __videobuf_free() - free all the buffers and their control structures | 226 | * __videobuf_free() - free all the buffers and their control structures |
| 227 | * | 227 | * |
| 228 | * This function can only be called if streaming/reading is off, i.e. no buffers | 228 | * This function can only be called if streaming/reading is off, i.e. no buffers |
diff --git a/drivers/media/v4l2-core/videobuf-dma-sg.c b/drivers/media/v4l2-core/videobuf-dma-sg.c index 0b5c43f7e020..f412429cf5ba 100644 --- a/drivers/media/v4l2-core/videobuf-dma-sg.c +++ b/drivers/media/v4l2-core/videobuf-dma-sg.c | |||
| @@ -185,12 +185,13 @@ static int videobuf_dma_init_user_locked(struct videobuf_dmabuf *dma, | |||
| 185 | dprintk(1, "init user [0x%lx+0x%lx => %d pages]\n", | 185 | dprintk(1, "init user [0x%lx+0x%lx => %d pages]\n", |
| 186 | data, size, dma->nr_pages); | 186 | data, size, dma->nr_pages); |
| 187 | 187 | ||
| 188 | err = get_user_pages(data & PAGE_MASK, dma->nr_pages, | 188 | err = get_user_pages_longterm(data & PAGE_MASK, dma->nr_pages, |
| 189 | flags, dma->pages, NULL); | 189 | flags, dma->pages, NULL); |
| 190 | 190 | ||
| 191 | if (err != dma->nr_pages) { | 191 | if (err != dma->nr_pages) { |
| 192 | dma->nr_pages = (err >= 0) ? err : 0; | 192 | dma->nr_pages = (err >= 0) ? err : 0; |
| 193 | dprintk(1, "get_user_pages: err=%d [%d]\n", err, dma->nr_pages); | 193 | dprintk(1, "get_user_pages_longterm: err=%d [%d]\n", err, |
| 194 | dma->nr_pages); | ||
| 194 | return err < 0 ? err : -EINVAL; | 195 | return err < 0 ? err : -EINVAL; |
| 195 | } | 196 | } |
| 196 | return 0; | 197 | return 0; |
diff --git a/drivers/media/v4l2-core/videobuf2-core.c b/drivers/media/v4l2-core/videobuf2-core.c index cb115ba6a1d2..a8589d96ef72 100644 --- a/drivers/media/v4l2-core/videobuf2-core.c +++ b/drivers/media/v4l2-core/videobuf2-core.c | |||
| @@ -188,7 +188,7 @@ module_param(debug, int, 0644); | |||
| 188 | static void __vb2_queue_cancel(struct vb2_queue *q); | 188 | static void __vb2_queue_cancel(struct vb2_queue *q); |
| 189 | static void __enqueue_in_driver(struct vb2_buffer *vb); | 189 | static void __enqueue_in_driver(struct vb2_buffer *vb); |
| 190 | 190 | ||
| 191 | /** | 191 | /* |
| 192 | * __vb2_buf_mem_alloc() - allocate video memory for the given buffer | 192 | * __vb2_buf_mem_alloc() - allocate video memory for the given buffer |
| 193 | */ | 193 | */ |
| 194 | static int __vb2_buf_mem_alloc(struct vb2_buffer *vb) | 194 | static int __vb2_buf_mem_alloc(struct vb2_buffer *vb) |
| @@ -229,7 +229,7 @@ free: | |||
| 229 | return ret; | 229 | return ret; |
| 230 | } | 230 | } |
| 231 | 231 | ||
| 232 | /** | 232 | /* |
| 233 | * __vb2_buf_mem_free() - free memory of the given buffer | 233 | * __vb2_buf_mem_free() - free memory of the given buffer |
| 234 | */ | 234 | */ |
| 235 | static void __vb2_buf_mem_free(struct vb2_buffer *vb) | 235 | static void __vb2_buf_mem_free(struct vb2_buffer *vb) |
| @@ -243,7 +243,7 @@ static void __vb2_buf_mem_free(struct vb2_buffer *vb) | |||
| 243 | } | 243 | } |
| 244 | } | 244 | } |
| 245 | 245 | ||
| 246 | /** | 246 | /* |
| 247 | * __vb2_buf_userptr_put() - release userspace memory associated with | 247 | * __vb2_buf_userptr_put() - release userspace memory associated with |
| 248 | * a USERPTR buffer | 248 | * a USERPTR buffer |
| 249 | */ | 249 | */ |
| @@ -258,7 +258,7 @@ static void __vb2_buf_userptr_put(struct vb2_buffer *vb) | |||
| 258 | } | 258 | } |
| 259 | } | 259 | } |
| 260 | 260 | ||
| 261 | /** | 261 | /* |
| 262 | * __vb2_plane_dmabuf_put() - release memory associated with | 262 | * __vb2_plane_dmabuf_put() - release memory associated with |
| 263 | * a DMABUF shared plane | 263 | * a DMABUF shared plane |
| 264 | */ | 264 | */ |
| @@ -277,7 +277,7 @@ static void __vb2_plane_dmabuf_put(struct vb2_buffer *vb, struct vb2_plane *p) | |||
| 277 | p->dbuf_mapped = 0; | 277 | p->dbuf_mapped = 0; |
| 278 | } | 278 | } |
| 279 | 279 | ||
| 280 | /** | 280 | /* |
| 281 | * __vb2_buf_dmabuf_put() - release memory associated with | 281 | * __vb2_buf_dmabuf_put() - release memory associated with |
| 282 | * a DMABUF shared buffer | 282 | * a DMABUF shared buffer |
| 283 | */ | 283 | */ |
| @@ -289,7 +289,7 @@ static void __vb2_buf_dmabuf_put(struct vb2_buffer *vb) | |||
| 289 | __vb2_plane_dmabuf_put(vb, &vb->planes[plane]); | 289 | __vb2_plane_dmabuf_put(vb, &vb->planes[plane]); |
| 290 | } | 290 | } |
| 291 | 291 | ||
| 292 | /** | 292 | /* |
| 293 | * __setup_offsets() - setup unique offsets ("cookies") for every plane in | 293 | * __setup_offsets() - setup unique offsets ("cookies") for every plane in |
| 294 | * the buffer. | 294 | * the buffer. |
| 295 | */ | 295 | */ |
| @@ -317,7 +317,7 @@ static void __setup_offsets(struct vb2_buffer *vb) | |||
| 317 | } | 317 | } |
| 318 | } | 318 | } |
| 319 | 319 | ||
| 320 | /** | 320 | /* |
| 321 | * __vb2_queue_alloc() - allocate videobuf buffer structures and (for MMAP type) | 321 | * __vb2_queue_alloc() - allocate videobuf buffer structures and (for MMAP type) |
| 322 | * video buffer memory for all buffers/planes on the queue and initializes the | 322 | * video buffer memory for all buffers/planes on the queue and initializes the |
| 323 | * queue | 323 | * queue |
| @@ -386,7 +386,7 @@ static int __vb2_queue_alloc(struct vb2_queue *q, enum vb2_memory memory, | |||
| 386 | return buffer; | 386 | return buffer; |
| 387 | } | 387 | } |
| 388 | 388 | ||
| 389 | /** | 389 | /* |
| 390 | * __vb2_free_mem() - release all video buffer memory for a given queue | 390 | * __vb2_free_mem() - release all video buffer memory for a given queue |
| 391 | */ | 391 | */ |
| 392 | static void __vb2_free_mem(struct vb2_queue *q, unsigned int buffers) | 392 | static void __vb2_free_mem(struct vb2_queue *q, unsigned int buffers) |
| @@ -410,7 +410,7 @@ static void __vb2_free_mem(struct vb2_queue *q, unsigned int buffers) | |||
| 410 | } | 410 | } |
| 411 | } | 411 | } |
| 412 | 412 | ||
| 413 | /** | 413 | /* |
| 414 | * __vb2_queue_free() - free buffers at the end of the queue - video memory and | 414 | * __vb2_queue_free() - free buffers at the end of the queue - video memory and |
| 415 | * related information, if no buffers are left return the queue to an | 415 | * related information, if no buffers are left return the queue to an |
| 416 | * uninitialized state. Might be called even if the queue has already been freed. | 416 | * uninitialized state. Might be called even if the queue has already been freed. |
| @@ -544,7 +544,7 @@ bool vb2_buffer_in_use(struct vb2_queue *q, struct vb2_buffer *vb) | |||
| 544 | } | 544 | } |
| 545 | EXPORT_SYMBOL(vb2_buffer_in_use); | 545 | EXPORT_SYMBOL(vb2_buffer_in_use); |
| 546 | 546 | ||
| 547 | /** | 547 | /* |
| 548 | * __buffers_in_use() - return true if any buffers on the queue are in use and | 548 | * __buffers_in_use() - return true if any buffers on the queue are in use and |
| 549 | * the queue cannot be freed (by the means of REQBUFS(0)) call | 549 | * the queue cannot be freed (by the means of REQBUFS(0)) call |
| 550 | */ | 550 | */ |
| @@ -564,7 +564,7 @@ void vb2_core_querybuf(struct vb2_queue *q, unsigned int index, void *pb) | |||
| 564 | } | 564 | } |
| 565 | EXPORT_SYMBOL_GPL(vb2_core_querybuf); | 565 | EXPORT_SYMBOL_GPL(vb2_core_querybuf); |
| 566 | 566 | ||
| 567 | /** | 567 | /* |
| 568 | * __verify_userptr_ops() - verify that all memory operations required for | 568 | * __verify_userptr_ops() - verify that all memory operations required for |
| 569 | * USERPTR queue type have been provided | 569 | * USERPTR queue type have been provided |
| 570 | */ | 570 | */ |
| @@ -577,7 +577,7 @@ static int __verify_userptr_ops(struct vb2_queue *q) | |||
| 577 | return 0; | 577 | return 0; |
| 578 | } | 578 | } |
| 579 | 579 | ||
| 580 | /** | 580 | /* |
| 581 | * __verify_mmap_ops() - verify that all memory operations required for | 581 | * __verify_mmap_ops() - verify that all memory operations required for |
| 582 | * MMAP queue type have been provided | 582 | * MMAP queue type have been provided |
| 583 | */ | 583 | */ |
| @@ -590,7 +590,7 @@ static int __verify_mmap_ops(struct vb2_queue *q) | |||
| 590 | return 0; | 590 | return 0; |
| 591 | } | 591 | } |
| 592 | 592 | ||
| 593 | /** | 593 | /* |
| 594 | * __verify_dmabuf_ops() - verify that all memory operations required for | 594 | * __verify_dmabuf_ops() - verify that all memory operations required for |
| 595 | * DMABUF queue type have been provided | 595 | * DMABUF queue type have been provided |
| 596 | */ | 596 | */ |
| @@ -953,7 +953,7 @@ void vb2_discard_done(struct vb2_queue *q) | |||
| 953 | } | 953 | } |
| 954 | EXPORT_SYMBOL_GPL(vb2_discard_done); | 954 | EXPORT_SYMBOL_GPL(vb2_discard_done); |
| 955 | 955 | ||
| 956 | /** | 956 | /* |
| 957 | * __prepare_mmap() - prepare an MMAP buffer | 957 | * __prepare_mmap() - prepare an MMAP buffer |
| 958 | */ | 958 | */ |
| 959 | static int __prepare_mmap(struct vb2_buffer *vb, const void *pb) | 959 | static int __prepare_mmap(struct vb2_buffer *vb, const void *pb) |
| @@ -966,7 +966,7 @@ static int __prepare_mmap(struct vb2_buffer *vb, const void *pb) | |||
| 966 | return ret ? ret : call_vb_qop(vb, buf_prepare, vb); | 966 | return ret ? ret : call_vb_qop(vb, buf_prepare, vb); |
| 967 | } | 967 | } |
| 968 | 968 | ||
| 969 | /** | 969 | /* |
| 970 | * __prepare_userptr() - prepare a USERPTR buffer | 970 | * __prepare_userptr() - prepare a USERPTR buffer |
| 971 | */ | 971 | */ |
| 972 | static int __prepare_userptr(struct vb2_buffer *vb, const void *pb) | 972 | static int __prepare_userptr(struct vb2_buffer *vb, const void *pb) |
| @@ -1082,7 +1082,7 @@ err: | |||
| 1082 | return ret; | 1082 | return ret; |
| 1083 | } | 1083 | } |
| 1084 | 1084 | ||
| 1085 | /** | 1085 | /* |
| 1086 | * __prepare_dmabuf() - prepare a DMABUF buffer | 1086 | * __prepare_dmabuf() - prepare a DMABUF buffer |
| 1087 | */ | 1087 | */ |
| 1088 | static int __prepare_dmabuf(struct vb2_buffer *vb, const void *pb) | 1088 | static int __prepare_dmabuf(struct vb2_buffer *vb, const void *pb) |
| @@ -1215,7 +1215,7 @@ err: | |||
| 1215 | return ret; | 1215 | return ret; |
| 1216 | } | 1216 | } |
| 1217 | 1217 | ||
| 1218 | /** | 1218 | /* |
| 1219 | * __enqueue_in_driver() - enqueue a vb2_buffer in driver for processing | 1219 | * __enqueue_in_driver() - enqueue a vb2_buffer in driver for processing |
| 1220 | */ | 1220 | */ |
| 1221 | static void __enqueue_in_driver(struct vb2_buffer *vb) | 1221 | static void __enqueue_in_driver(struct vb2_buffer *vb) |
| @@ -1298,7 +1298,7 @@ int vb2_core_prepare_buf(struct vb2_queue *q, unsigned int index, void *pb) | |||
| 1298 | } | 1298 | } |
| 1299 | EXPORT_SYMBOL_GPL(vb2_core_prepare_buf); | 1299 | EXPORT_SYMBOL_GPL(vb2_core_prepare_buf); |
| 1300 | 1300 | ||
| 1301 | /** | 1301 | /* |
| 1302 | * vb2_start_streaming() - Attempt to start streaming. | 1302 | * vb2_start_streaming() - Attempt to start streaming. |
| 1303 | * @q: videobuf2 queue | 1303 | * @q: videobuf2 queue |
| 1304 | * | 1304 | * |
| @@ -1427,7 +1427,7 @@ int vb2_core_qbuf(struct vb2_queue *q, unsigned int index, void *pb) | |||
| 1427 | } | 1427 | } |
| 1428 | EXPORT_SYMBOL_GPL(vb2_core_qbuf); | 1428 | EXPORT_SYMBOL_GPL(vb2_core_qbuf); |
| 1429 | 1429 | ||
| 1430 | /** | 1430 | /* |
| 1431 | * __vb2_wait_for_done_vb() - wait for a buffer to become available | 1431 | * __vb2_wait_for_done_vb() - wait for a buffer to become available |
| 1432 | * for dequeuing | 1432 | * for dequeuing |
| 1433 | * | 1433 | * |
| @@ -1502,7 +1502,7 @@ static int __vb2_wait_for_done_vb(struct vb2_queue *q, int nonblocking) | |||
| 1502 | return 0; | 1502 | return 0; |
| 1503 | } | 1503 | } |
| 1504 | 1504 | ||
| 1505 | /** | 1505 | /* |
| 1506 | * __vb2_get_done_vb() - get a buffer ready for dequeuing | 1506 | * __vb2_get_done_vb() - get a buffer ready for dequeuing |
| 1507 | * | 1507 | * |
| 1508 | * Will sleep if required for nonblocking == false. | 1508 | * Will sleep if required for nonblocking == false. |
| @@ -1553,7 +1553,7 @@ int vb2_wait_for_all_buffers(struct vb2_queue *q) | |||
| 1553 | } | 1553 | } |
| 1554 | EXPORT_SYMBOL_GPL(vb2_wait_for_all_buffers); | 1554 | EXPORT_SYMBOL_GPL(vb2_wait_for_all_buffers); |
| 1555 | 1555 | ||
| 1556 | /** | 1556 | /* |
| 1557 | * __vb2_dqbuf() - bring back the buffer to the DEQUEUED state | 1557 | * __vb2_dqbuf() - bring back the buffer to the DEQUEUED state |
| 1558 | */ | 1558 | */ |
| 1559 | static void __vb2_dqbuf(struct vb2_buffer *vb) | 1559 | static void __vb2_dqbuf(struct vb2_buffer *vb) |
| @@ -1625,7 +1625,7 @@ int vb2_core_dqbuf(struct vb2_queue *q, unsigned int *pindex, void *pb, | |||
| 1625 | } | 1625 | } |
| 1626 | EXPORT_SYMBOL_GPL(vb2_core_dqbuf); | 1626 | EXPORT_SYMBOL_GPL(vb2_core_dqbuf); |
| 1627 | 1627 | ||
| 1628 | /** | 1628 | /* |
| 1629 | * __vb2_queue_cancel() - cancel and stop (pause) streaming | 1629 | * __vb2_queue_cancel() - cancel and stop (pause) streaming |
| 1630 | * | 1630 | * |
| 1631 | * Removes all queued buffers from driver's queue and all buffers queued by | 1631 | * Removes all queued buffers from driver's queue and all buffers queued by |
| @@ -1773,7 +1773,7 @@ int vb2_core_streamoff(struct vb2_queue *q, unsigned int type) | |||
| 1773 | } | 1773 | } |
| 1774 | EXPORT_SYMBOL_GPL(vb2_core_streamoff); | 1774 | EXPORT_SYMBOL_GPL(vb2_core_streamoff); |
| 1775 | 1775 | ||
| 1776 | /** | 1776 | /* |
| 1777 | * __find_plane_by_offset() - find plane associated with the given offset off | 1777 | * __find_plane_by_offset() - find plane associated with the given offset off |
| 1778 | */ | 1778 | */ |
| 1779 | static int __find_plane_by_offset(struct vb2_queue *q, unsigned long off, | 1779 | static int __find_plane_by_offset(struct vb2_queue *q, unsigned long off, |
| @@ -2104,7 +2104,7 @@ unsigned int vb2_core_poll(struct vb2_queue *q, struct file *file, | |||
| 2104 | } | 2104 | } |
| 2105 | EXPORT_SYMBOL_GPL(vb2_core_poll); | 2105 | EXPORT_SYMBOL_GPL(vb2_core_poll); |
| 2106 | 2106 | ||
| 2107 | /** | 2107 | /* |
| 2108 | * struct vb2_fileio_buf - buffer context used by file io emulator | 2108 | * struct vb2_fileio_buf - buffer context used by file io emulator |
| 2109 | * | 2109 | * |
| 2110 | * vb2 provides a compatibility layer and emulator of file io (read and | 2110 | * vb2 provides a compatibility layer and emulator of file io (read and |
| @@ -2118,7 +2118,7 @@ struct vb2_fileio_buf { | |||
| 2118 | unsigned int queued:1; | 2118 | unsigned int queued:1; |
| 2119 | }; | 2119 | }; |
| 2120 | 2120 | ||
| 2121 | /** | 2121 | /* |
| 2122 | * struct vb2_fileio_data - queue context used by file io emulator | 2122 | * struct vb2_fileio_data - queue context used by file io emulator |
| 2123 | * | 2123 | * |
| 2124 | * @cur_index: the index of the buffer currently being read from or | 2124 | * @cur_index: the index of the buffer currently being read from or |
| @@ -2155,7 +2155,7 @@ struct vb2_fileio_data { | |||
| 2155 | unsigned write_immediately:1; | 2155 | unsigned write_immediately:1; |
| 2156 | }; | 2156 | }; |
| 2157 | 2157 | ||
| 2158 | /** | 2158 | /* |
| 2159 | * __vb2_init_fileio() - initialize file io emulator | 2159 | * __vb2_init_fileio() - initialize file io emulator |
| 2160 | * @q: videobuf2 queue | 2160 | * @q: videobuf2 queue |
| 2161 | * @read: mode selector (1 means read, 0 means write) | 2161 | * @read: mode selector (1 means read, 0 means write) |
| @@ -2274,7 +2274,7 @@ err_kfree: | |||
| 2274 | return ret; | 2274 | return ret; |
| 2275 | } | 2275 | } |
| 2276 | 2276 | ||
| 2277 | /** | 2277 | /* |
| 2278 | * __vb2_cleanup_fileio() - free resourced used by file io emulator | 2278 | * __vb2_cleanup_fileio() - free resourced used by file io emulator |
| 2279 | * @q: videobuf2 queue | 2279 | * @q: videobuf2 queue |
| 2280 | */ | 2280 | */ |
| @@ -2293,7 +2293,7 @@ static int __vb2_cleanup_fileio(struct vb2_queue *q) | |||
| 2293 | return 0; | 2293 | return 0; |
| 2294 | } | 2294 | } |
| 2295 | 2295 | ||
| 2296 | /** | 2296 | /* |
| 2297 | * __vb2_perform_fileio() - perform a single file io (read or write) operation | 2297 | * __vb2_perform_fileio() - perform a single file io (read or write) operation |
| 2298 | * @q: videobuf2 queue | 2298 | * @q: videobuf2 queue |
| 2299 | * @data: pointed to target userspace buffer | 2299 | * @data: pointed to target userspace buffer |
diff --git a/drivers/media/v4l2-core/videobuf2-memops.c b/drivers/media/v4l2-core/videobuf2-memops.c index 4bb8424114ce..89e51989332b 100644 --- a/drivers/media/v4l2-core/videobuf2-memops.c +++ b/drivers/media/v4l2-core/videobuf2-memops.c | |||
| @@ -120,7 +120,7 @@ static void vb2_common_vm_close(struct vm_area_struct *vma) | |||
| 120 | h->put(h->arg); | 120 | h->put(h->arg); |
| 121 | } | 121 | } |
| 122 | 122 | ||
| 123 | /** | 123 | /* |
| 124 | * vb2_common_vm_ops - common vm_ops used for tracking refcount of mmaped | 124 | * vb2_common_vm_ops - common vm_ops used for tracking refcount of mmaped |
| 125 | * video buffers | 125 | * video buffers |
| 126 | */ | 126 | */ |
diff --git a/drivers/media/v4l2-core/videobuf2-v4l2.c b/drivers/media/v4l2-core/videobuf2-v4l2.c index 0c0669976bdc..4075314a6989 100644 --- a/drivers/media/v4l2-core/videobuf2-v4l2.c +++ b/drivers/media/v4l2-core/videobuf2-v4l2.c | |||
| @@ -49,7 +49,7 @@ module_param(debug, int, 0644); | |||
| 49 | #define V4L2_BUFFER_OUT_FLAGS (V4L2_BUF_FLAG_PFRAME | V4L2_BUF_FLAG_BFRAME | \ | 49 | #define V4L2_BUFFER_OUT_FLAGS (V4L2_BUF_FLAG_PFRAME | V4L2_BUF_FLAG_BFRAME | \ |
| 50 | V4L2_BUF_FLAG_KEYFRAME | V4L2_BUF_FLAG_TIMECODE) | 50 | V4L2_BUF_FLAG_KEYFRAME | V4L2_BUF_FLAG_TIMECODE) |
| 51 | 51 | ||
| 52 | /** | 52 | /* |
| 53 | * __verify_planes_array() - verify that the planes array passed in struct | 53 | * __verify_planes_array() - verify that the planes array passed in struct |
| 54 | * v4l2_buffer from userspace can be safely used | 54 | * v4l2_buffer from userspace can be safely used |
| 55 | */ | 55 | */ |
| @@ -78,7 +78,7 @@ static int __verify_planes_array_core(struct vb2_buffer *vb, const void *pb) | |||
| 78 | return __verify_planes_array(vb, pb); | 78 | return __verify_planes_array(vb, pb); |
| 79 | } | 79 | } |
| 80 | 80 | ||
| 81 | /** | 81 | /* |
| 82 | * __verify_length() - Verify that the bytesused value for each plane fits in | 82 | * __verify_length() - Verify that the bytesused value for each plane fits in |
| 83 | * the plane length and that the data offset doesn't exceed the bytesused value. | 83 | * the plane length and that the data offset doesn't exceed the bytesused value. |
| 84 | */ | 84 | */ |
| @@ -181,7 +181,7 @@ static int vb2_queue_or_prepare_buf(struct vb2_queue *q, struct v4l2_buffer *b, | |||
| 181 | return __verify_planes_array(q->bufs[b->index], b); | 181 | return __verify_planes_array(q->bufs[b->index], b); |
| 182 | } | 182 | } |
| 183 | 183 | ||
| 184 | /** | 184 | /* |
| 185 | * __fill_v4l2_buffer() - fill in a struct v4l2_buffer with information to be | 185 | * __fill_v4l2_buffer() - fill in a struct v4l2_buffer with information to be |
| 186 | * returned to userspace | 186 | * returned to userspace |
| 187 | */ | 187 | */ |
| @@ -286,7 +286,7 @@ static void __fill_v4l2_buffer(struct vb2_buffer *vb, void *pb) | |||
| 286 | q->last_buffer_dequeued = true; | 286 | q->last_buffer_dequeued = true; |
| 287 | } | 287 | } |
| 288 | 288 | ||
| 289 | /** | 289 | /* |
| 290 | * __fill_vb2_buffer() - fill a vb2_buffer with information provided in a | 290 | * __fill_vb2_buffer() - fill a vb2_buffer with information provided in a |
| 291 | * v4l2_buffer by the userspace. It also verifies that struct | 291 | * v4l2_buffer by the userspace. It also verifies that struct |
| 292 | * v4l2_buffer has a valid number of planes. | 292 | * v4l2_buffer has a valid number of planes. |
| @@ -446,7 +446,7 @@ static const struct vb2_buf_ops v4l2_buf_ops = { | |||
| 446 | .copy_timestamp = __copy_timestamp, | 446 | .copy_timestamp = __copy_timestamp, |
| 447 | }; | 447 | }; |
| 448 | 448 | ||
| 449 | /** | 449 | /* |
| 450 | * vb2_querybuf() - query video buffer information | 450 | * vb2_querybuf() - query video buffer information |
| 451 | * @q: videobuf queue | 451 | * @q: videobuf queue |
| 452 | * @b: buffer struct passed from userspace to vidioc_querybuf handler | 452 | * @b: buffer struct passed from userspace to vidioc_querybuf handler |
diff --git a/drivers/misc/cxl/pci.c b/drivers/misc/cxl/pci.c index bb7fd3f4edab..19969ee86d6f 100644 --- a/drivers/misc/cxl/pci.c +++ b/drivers/misc/cxl/pci.c | |||
| @@ -2083,6 +2083,9 @@ static pci_ers_result_t cxl_vphb_error_detected(struct cxl_afu *afu, | |||
| 2083 | /* There should only be one entry, but go through the list | 2083 | /* There should only be one entry, but go through the list |
| 2084 | * anyway | 2084 | * anyway |
| 2085 | */ | 2085 | */ |
| 2086 | if (afu->phb == NULL) | ||
| 2087 | return result; | ||
| 2088 | |||
| 2086 | list_for_each_entry(afu_dev, &afu->phb->bus->devices, bus_list) { | 2089 | list_for_each_entry(afu_dev, &afu->phb->bus->devices, bus_list) { |
| 2087 | if (!afu_dev->driver) | 2090 | if (!afu_dev->driver) |
| 2088 | continue; | 2091 | continue; |
| @@ -2124,8 +2127,7 @@ static pci_ers_result_t cxl_pci_error_detected(struct pci_dev *pdev, | |||
| 2124 | * Tell the AFU drivers; but we don't care what they | 2127 | * Tell the AFU drivers; but we don't care what they |
| 2125 | * say, we're going away. | 2128 | * say, we're going away. |
| 2126 | */ | 2129 | */ |
| 2127 | if (afu->phb != NULL) | 2130 | cxl_vphb_error_detected(afu, state); |
| 2128 | cxl_vphb_error_detected(afu, state); | ||
| 2129 | } | 2131 | } |
| 2130 | return PCI_ERS_RESULT_DISCONNECT; | 2132 | return PCI_ERS_RESULT_DISCONNECT; |
| 2131 | } | 2133 | } |
| @@ -2265,6 +2267,9 @@ static pci_ers_result_t cxl_pci_slot_reset(struct pci_dev *pdev) | |||
| 2265 | if (cxl_afu_select_best_mode(afu)) | 2267 | if (cxl_afu_select_best_mode(afu)) |
| 2266 | goto err; | 2268 | goto err; |
| 2267 | 2269 | ||
| 2270 | if (afu->phb == NULL) | ||
| 2271 | continue; | ||
| 2272 | |||
| 2268 | list_for_each_entry(afu_dev, &afu->phb->bus->devices, bus_list) { | 2273 | list_for_each_entry(afu_dev, &afu->phb->bus->devices, bus_list) { |
| 2269 | /* Reset the device context. | 2274 | /* Reset the device context. |
| 2270 | * TODO: make this less disruptive | 2275 | * TODO: make this less disruptive |
| @@ -2327,6 +2332,9 @@ static void cxl_pci_resume(struct pci_dev *pdev) | |||
| 2327 | for (i = 0; i < adapter->slices; i++) { | 2332 | for (i = 0; i < adapter->slices; i++) { |
| 2328 | afu = adapter->afu[i]; | 2333 | afu = adapter->afu[i]; |
| 2329 | 2334 | ||
| 2335 | if (afu->phb == NULL) | ||
| 2336 | continue; | ||
| 2337 | |||
| 2330 | list_for_each_entry(afu_dev, &afu->phb->bus->devices, bus_list) { | 2338 | list_for_each_entry(afu_dev, &afu->phb->bus->devices, bus_list) { |
| 2331 | if (afu_dev->driver && afu_dev->driver->err_handler && | 2339 | if (afu_dev->driver && afu_dev->driver->err_handler && |
| 2332 | afu_dev->driver->err_handler->resume) | 2340 | afu_dev->driver->err_handler->resume) |
diff --git a/drivers/misc/eeprom/at24.c b/drivers/misc/eeprom/at24.c index e0b4b36ef010..4d63ac8a82e0 100644 --- a/drivers/misc/eeprom/at24.c +++ b/drivers/misc/eeprom/at24.c | |||
| @@ -425,7 +425,8 @@ static ssize_t at24_eeprom_read_mac(struct at24_data *at24, char *buf, | |||
| 425 | memset(msg, 0, sizeof(msg)); | 425 | memset(msg, 0, sizeof(msg)); |
| 426 | msg[0].addr = client->addr; | 426 | msg[0].addr = client->addr; |
| 427 | msg[0].buf = addrbuf; | 427 | msg[0].buf = addrbuf; |
| 428 | addrbuf[0] = 0x90 + offset; | 428 | /* EUI-48 starts from 0x9a, EUI-64 from 0x98 */ |
| 429 | addrbuf[0] = 0xa0 - at24->chip.byte_len + offset; | ||
| 429 | msg[0].len = 1; | 430 | msg[0].len = 1; |
| 430 | msg[1].addr = client->addr; | 431 | msg[1].addr = client->addr; |
| 431 | msg[1].flags = I2C_M_RD; | 432 | msg[1].flags = I2C_M_RD; |
| @@ -561,18 +562,19 @@ static ssize_t at24_eeprom_write_i2c(struct at24_data *at24, const char *buf, | |||
| 561 | static int at24_read(void *priv, unsigned int off, void *val, size_t count) | 562 | static int at24_read(void *priv, unsigned int off, void *val, size_t count) |
| 562 | { | 563 | { |
| 563 | struct at24_data *at24 = priv; | 564 | struct at24_data *at24 = priv; |
| 564 | struct i2c_client *client; | 565 | struct device *dev = &at24->client[0]->dev; |
| 565 | char *buf = val; | 566 | char *buf = val; |
| 566 | int ret; | 567 | int ret; |
| 567 | 568 | ||
| 568 | if (unlikely(!count)) | 569 | if (unlikely(!count)) |
| 569 | return count; | 570 | return count; |
| 570 | 571 | ||
| 571 | client = at24_translate_offset(at24, &off); | 572 | if (off + count > at24->chip.byte_len) |
| 573 | return -EINVAL; | ||
| 572 | 574 | ||
| 573 | ret = pm_runtime_get_sync(&client->dev); | 575 | ret = pm_runtime_get_sync(dev); |
| 574 | if (ret < 0) { | 576 | if (ret < 0) { |
| 575 | pm_runtime_put_noidle(&client->dev); | 577 | pm_runtime_put_noidle(dev); |
| 576 | return ret; | 578 | return ret; |
| 577 | } | 579 | } |
| 578 | 580 | ||
| @@ -588,7 +590,7 @@ static int at24_read(void *priv, unsigned int off, void *val, size_t count) | |||
| 588 | status = at24->read_func(at24, buf, off, count); | 590 | status = at24->read_func(at24, buf, off, count); |
| 589 | if (status < 0) { | 591 | if (status < 0) { |
| 590 | mutex_unlock(&at24->lock); | 592 | mutex_unlock(&at24->lock); |
| 591 | pm_runtime_put(&client->dev); | 593 | pm_runtime_put(dev); |
| 592 | return status; | 594 | return status; |
| 593 | } | 595 | } |
| 594 | buf += status; | 596 | buf += status; |
| @@ -598,7 +600,7 @@ static int at24_read(void *priv, unsigned int off, void *val, size_t count) | |||
| 598 | 600 | ||
| 599 | mutex_unlock(&at24->lock); | 601 | mutex_unlock(&at24->lock); |
| 600 | 602 | ||
| 601 | pm_runtime_put(&client->dev); | 603 | pm_runtime_put(dev); |
| 602 | 604 | ||
| 603 | return 0; | 605 | return 0; |
| 604 | } | 606 | } |
| @@ -606,18 +608,19 @@ static int at24_read(void *priv, unsigned int off, void *val, size_t count) | |||
| 606 | static int at24_write(void *priv, unsigned int off, void *val, size_t count) | 608 | static int at24_write(void *priv, unsigned int off, void *val, size_t count) |
| 607 | { | 609 | { |
| 608 | struct at24_data *at24 = priv; | 610 | struct at24_data *at24 = priv; |
| 609 | struct i2c_client *client; | 611 | struct device *dev = &at24->client[0]->dev; |
| 610 | char *buf = val; | 612 | char *buf = val; |
| 611 | int ret; | 613 | int ret; |
| 612 | 614 | ||
| 613 | if (unlikely(!count)) | 615 | if (unlikely(!count)) |
| 614 | return -EINVAL; | 616 | return -EINVAL; |
| 615 | 617 | ||
| 616 | client = at24_translate_offset(at24, &off); | 618 | if (off + count > at24->chip.byte_len) |
| 619 | return -EINVAL; | ||
| 617 | 620 | ||
| 618 | ret = pm_runtime_get_sync(&client->dev); | 621 | ret = pm_runtime_get_sync(dev); |
| 619 | if (ret < 0) { | 622 | if (ret < 0) { |
| 620 | pm_runtime_put_noidle(&client->dev); | 623 | pm_runtime_put_noidle(dev); |
| 621 | return ret; | 624 | return ret; |
| 622 | } | 625 | } |
| 623 | 626 | ||
| @@ -633,7 +636,7 @@ static int at24_write(void *priv, unsigned int off, void *val, size_t count) | |||
| 633 | status = at24->write_func(at24, buf, off, count); | 636 | status = at24->write_func(at24, buf, off, count); |
| 634 | if (status < 0) { | 637 | if (status < 0) { |
| 635 | mutex_unlock(&at24->lock); | 638 | mutex_unlock(&at24->lock); |
| 636 | pm_runtime_put(&client->dev); | 639 | pm_runtime_put(dev); |
| 637 | return status; | 640 | return status; |
| 638 | } | 641 | } |
| 639 | buf += status; | 642 | buf += status; |
| @@ -643,7 +646,7 @@ static int at24_write(void *priv, unsigned int off, void *val, size_t count) | |||
| 643 | 646 | ||
| 644 | mutex_unlock(&at24->lock); | 647 | mutex_unlock(&at24->lock); |
| 645 | 648 | ||
| 646 | pm_runtime_put(&client->dev); | 649 | pm_runtime_put(dev); |
| 647 | 650 | ||
| 648 | return 0; | 651 | return 0; |
| 649 | } | 652 | } |
| @@ -730,6 +733,16 @@ static int at24_probe(struct i2c_client *client, const struct i2c_device_id *id) | |||
| 730 | dev_warn(&client->dev, | 733 | dev_warn(&client->dev, |
| 731 | "page_size looks suspicious (no power of 2)!\n"); | 734 | "page_size looks suspicious (no power of 2)!\n"); |
| 732 | 735 | ||
| 736 | /* | ||
| 737 | * REVISIT: the size of the EUI-48 byte array is 6 in at24mac402, while | ||
| 738 | * the call to ilog2() in AT24_DEVICE_MAGIC() rounds it down to 4. | ||
| 739 | * | ||
| 740 | * Eventually we'll get rid of the magic values altoghether in favor of | ||
| 741 | * real structs, but for now just manually set the right size. | ||
| 742 | */ | ||
| 743 | if (chip.flags & AT24_FLAG_MAC && chip.byte_len == 4) | ||
| 744 | chip.byte_len = 6; | ||
| 745 | |||
| 733 | /* Use I2C operations unless we're stuck with SMBus extensions. */ | 746 | /* Use I2C operations unless we're stuck with SMBus extensions. */ |
| 734 | if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { | 747 | if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { |
| 735 | if (chip.flags & AT24_FLAG_ADDR16) | 748 | if (chip.flags & AT24_FLAG_ADDR16) |
| @@ -863,7 +876,7 @@ static int at24_probe(struct i2c_client *client, const struct i2c_device_id *id) | |||
| 863 | at24->nvmem_config.reg_read = at24_read; | 876 | at24->nvmem_config.reg_read = at24_read; |
| 864 | at24->nvmem_config.reg_write = at24_write; | 877 | at24->nvmem_config.reg_write = at24_write; |
| 865 | at24->nvmem_config.priv = at24; | 878 | at24->nvmem_config.priv = at24; |
| 866 | at24->nvmem_config.stride = 4; | 879 | at24->nvmem_config.stride = 1; |
| 867 | at24->nvmem_config.word_size = 1; | 880 | at24->nvmem_config.word_size = 1; |
| 868 | at24->nvmem_config.size = chip.byte_len; | 881 | at24->nvmem_config.size = chip.byte_len; |
| 869 | 882 | ||
diff --git a/drivers/misc/pti.c b/drivers/misc/pti.c index eda38cbe8530..41f2a9f6851d 100644 --- a/drivers/misc/pti.c +++ b/drivers/misc/pti.c | |||
| @@ -32,7 +32,7 @@ | |||
| 32 | #include <linux/pci.h> | 32 | #include <linux/pci.h> |
| 33 | #include <linux/mutex.h> | 33 | #include <linux/mutex.h> |
| 34 | #include <linux/miscdevice.h> | 34 | #include <linux/miscdevice.h> |
| 35 | #include <linux/pti.h> | 35 | #include <linux/intel-pti.h> |
| 36 | #include <linux/slab.h> | 36 | #include <linux/slab.h> |
| 37 | #include <linux/uaccess.h> | 37 | #include <linux/uaccess.h> |
| 38 | 38 | ||
diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c index ea80ff4cd7f9..ccfa98af1dd3 100644 --- a/drivers/mmc/core/block.c +++ b/drivers/mmc/core/block.c | |||
| @@ -122,6 +122,10 @@ struct mmc_blk_data { | |||
| 122 | struct device_attribute force_ro; | 122 | struct device_attribute force_ro; |
| 123 | struct device_attribute power_ro_lock; | 123 | struct device_attribute power_ro_lock; |
| 124 | int area_type; | 124 | int area_type; |
| 125 | |||
| 126 | /* debugfs files (only in main mmc_blk_data) */ | ||
| 127 | struct dentry *status_dentry; | ||
| 128 | struct dentry *ext_csd_dentry; | ||
| 125 | }; | 129 | }; |
| 126 | 130 | ||
| 127 | /* Device type for RPMB character devices */ | 131 | /* Device type for RPMB character devices */ |
| @@ -233,9 +237,14 @@ static ssize_t power_ro_lock_store(struct device *dev, | |||
| 233 | 237 | ||
| 234 | /* Dispatch locking to the block layer */ | 238 | /* Dispatch locking to the block layer */ |
| 235 | req = blk_get_request(mq->queue, REQ_OP_DRV_OUT, __GFP_RECLAIM); | 239 | req = blk_get_request(mq->queue, REQ_OP_DRV_OUT, __GFP_RECLAIM); |
| 240 | if (IS_ERR(req)) { | ||
| 241 | count = PTR_ERR(req); | ||
| 242 | goto out_put; | ||
| 243 | } | ||
| 236 | req_to_mmc_queue_req(req)->drv_op = MMC_DRV_OP_BOOT_WP; | 244 | req_to_mmc_queue_req(req)->drv_op = MMC_DRV_OP_BOOT_WP; |
| 237 | blk_execute_rq(mq->queue, NULL, req, 0); | 245 | blk_execute_rq(mq->queue, NULL, req, 0); |
| 238 | ret = req_to_mmc_queue_req(req)->drv_op_result; | 246 | ret = req_to_mmc_queue_req(req)->drv_op_result; |
| 247 | blk_put_request(req); | ||
| 239 | 248 | ||
| 240 | if (!ret) { | 249 | if (!ret) { |
| 241 | pr_info("%s: Locking boot partition ro until next power on\n", | 250 | pr_info("%s: Locking boot partition ro until next power on\n", |
| @@ -248,7 +257,7 @@ static ssize_t power_ro_lock_store(struct device *dev, | |||
| 248 | set_disk_ro(part_md->disk, 1); | 257 | set_disk_ro(part_md->disk, 1); |
| 249 | } | 258 | } |
| 250 | } | 259 | } |
| 251 | 260 | out_put: | |
| 252 | mmc_blk_put(md); | 261 | mmc_blk_put(md); |
| 253 | return count; | 262 | return count; |
| 254 | } | 263 | } |
| @@ -624,6 +633,10 @@ static int mmc_blk_ioctl_cmd(struct mmc_blk_data *md, | |||
| 624 | req = blk_get_request(mq->queue, | 633 | req = blk_get_request(mq->queue, |
| 625 | idata->ic.write_flag ? REQ_OP_DRV_OUT : REQ_OP_DRV_IN, | 634 | idata->ic.write_flag ? REQ_OP_DRV_OUT : REQ_OP_DRV_IN, |
| 626 | __GFP_RECLAIM); | 635 | __GFP_RECLAIM); |
| 636 | if (IS_ERR(req)) { | ||
| 637 | err = PTR_ERR(req); | ||
| 638 | goto cmd_done; | ||
| 639 | } | ||
| 627 | idatas[0] = idata; | 640 | idatas[0] = idata; |
| 628 | req_to_mmc_queue_req(req)->drv_op = | 641 | req_to_mmc_queue_req(req)->drv_op = |
| 629 | rpmb ? MMC_DRV_OP_IOCTL_RPMB : MMC_DRV_OP_IOCTL; | 642 | rpmb ? MMC_DRV_OP_IOCTL_RPMB : MMC_DRV_OP_IOCTL; |
| @@ -691,6 +704,10 @@ static int mmc_blk_ioctl_multi_cmd(struct mmc_blk_data *md, | |||
| 691 | req = blk_get_request(mq->queue, | 704 | req = blk_get_request(mq->queue, |
| 692 | idata[0]->ic.write_flag ? REQ_OP_DRV_OUT : REQ_OP_DRV_IN, | 705 | idata[0]->ic.write_flag ? REQ_OP_DRV_OUT : REQ_OP_DRV_IN, |
| 693 | __GFP_RECLAIM); | 706 | __GFP_RECLAIM); |
| 707 | if (IS_ERR(req)) { | ||
| 708 | err = PTR_ERR(req); | ||
| 709 | goto cmd_err; | ||
| 710 | } | ||
| 694 | req_to_mmc_queue_req(req)->drv_op = | 711 | req_to_mmc_queue_req(req)->drv_op = |
| 695 | rpmb ? MMC_DRV_OP_IOCTL_RPMB : MMC_DRV_OP_IOCTL; | 712 | rpmb ? MMC_DRV_OP_IOCTL_RPMB : MMC_DRV_OP_IOCTL; |
| 696 | req_to_mmc_queue_req(req)->drv_op_data = idata; | 713 | req_to_mmc_queue_req(req)->drv_op_data = idata; |
| @@ -2550,6 +2567,8 @@ static int mmc_dbg_card_status_get(void *data, u64 *val) | |||
| 2550 | 2567 | ||
| 2551 | /* Ask the block layer about the card status */ | 2568 | /* Ask the block layer about the card status */ |
| 2552 | req = blk_get_request(mq->queue, REQ_OP_DRV_IN, __GFP_RECLAIM); | 2569 | req = blk_get_request(mq->queue, REQ_OP_DRV_IN, __GFP_RECLAIM); |
| 2570 | if (IS_ERR(req)) | ||
| 2571 | return PTR_ERR(req); | ||
| 2553 | req_to_mmc_queue_req(req)->drv_op = MMC_DRV_OP_GET_CARD_STATUS; | 2572 | req_to_mmc_queue_req(req)->drv_op = MMC_DRV_OP_GET_CARD_STATUS; |
| 2554 | blk_execute_rq(mq->queue, NULL, req, 0); | 2573 | blk_execute_rq(mq->queue, NULL, req, 0); |
| 2555 | ret = req_to_mmc_queue_req(req)->drv_op_result; | 2574 | ret = req_to_mmc_queue_req(req)->drv_op_result; |
| @@ -2557,6 +2576,7 @@ static int mmc_dbg_card_status_get(void *data, u64 *val) | |||
| 2557 | *val = ret; | 2576 | *val = ret; |
| 2558 | ret = 0; | 2577 | ret = 0; |
| 2559 | } | 2578 | } |
| 2579 | blk_put_request(req); | ||
| 2560 | 2580 | ||
| 2561 | return ret; | 2581 | return ret; |
| 2562 | } | 2582 | } |
| @@ -2583,10 +2603,15 @@ static int mmc_ext_csd_open(struct inode *inode, struct file *filp) | |||
| 2583 | 2603 | ||
| 2584 | /* Ask the block layer for the EXT CSD */ | 2604 | /* Ask the block layer for the EXT CSD */ |
| 2585 | req = blk_get_request(mq->queue, REQ_OP_DRV_IN, __GFP_RECLAIM); | 2605 | req = blk_get_request(mq->queue, REQ_OP_DRV_IN, __GFP_RECLAIM); |
| 2606 | if (IS_ERR(req)) { | ||
| 2607 | err = PTR_ERR(req); | ||
| 2608 | goto out_free; | ||
| 2609 | } | ||
| 2586 | req_to_mmc_queue_req(req)->drv_op = MMC_DRV_OP_GET_EXT_CSD; | 2610 | req_to_mmc_queue_req(req)->drv_op = MMC_DRV_OP_GET_EXT_CSD; |
| 2587 | req_to_mmc_queue_req(req)->drv_op_data = &ext_csd; | 2611 | req_to_mmc_queue_req(req)->drv_op_data = &ext_csd; |
| 2588 | blk_execute_rq(mq->queue, NULL, req, 0); | 2612 | blk_execute_rq(mq->queue, NULL, req, 0); |
| 2589 | err = req_to_mmc_queue_req(req)->drv_op_result; | 2613 | err = req_to_mmc_queue_req(req)->drv_op_result; |
| 2614 | blk_put_request(req); | ||
| 2590 | if (err) { | 2615 | if (err) { |
| 2591 | pr_err("FAILED %d\n", err); | 2616 | pr_err("FAILED %d\n", err); |
| 2592 | goto out_free; | 2617 | goto out_free; |
| @@ -2632,7 +2657,7 @@ static const struct file_operations mmc_dbg_ext_csd_fops = { | |||
| 2632 | .llseek = default_llseek, | 2657 | .llseek = default_llseek, |
| 2633 | }; | 2658 | }; |
| 2634 | 2659 | ||
| 2635 | static int mmc_blk_add_debugfs(struct mmc_card *card) | 2660 | static int mmc_blk_add_debugfs(struct mmc_card *card, struct mmc_blk_data *md) |
| 2636 | { | 2661 | { |
| 2637 | struct dentry *root; | 2662 | struct dentry *root; |
| 2638 | 2663 | ||
| @@ -2642,28 +2667,53 @@ static int mmc_blk_add_debugfs(struct mmc_card *card) | |||
| 2642 | root = card->debugfs_root; | 2667 | root = card->debugfs_root; |
| 2643 | 2668 | ||
| 2644 | if (mmc_card_mmc(card) || mmc_card_sd(card)) { | 2669 | if (mmc_card_mmc(card) || mmc_card_sd(card)) { |
| 2645 | if (!debugfs_create_file("status", S_IRUSR, root, card, | 2670 | md->status_dentry = |
| 2646 | &mmc_dbg_card_status_fops)) | 2671 | debugfs_create_file("status", S_IRUSR, root, card, |
| 2672 | &mmc_dbg_card_status_fops); | ||
| 2673 | if (!md->status_dentry) | ||
| 2647 | return -EIO; | 2674 | return -EIO; |
| 2648 | } | 2675 | } |
| 2649 | 2676 | ||
| 2650 | if (mmc_card_mmc(card)) { | 2677 | if (mmc_card_mmc(card)) { |
| 2651 | if (!debugfs_create_file("ext_csd", S_IRUSR, root, card, | 2678 | md->ext_csd_dentry = |
| 2652 | &mmc_dbg_ext_csd_fops)) | 2679 | debugfs_create_file("ext_csd", S_IRUSR, root, card, |
| 2680 | &mmc_dbg_ext_csd_fops); | ||
| 2681 | if (!md->ext_csd_dentry) | ||
| 2653 | return -EIO; | 2682 | return -EIO; |
| 2654 | } | 2683 | } |
| 2655 | 2684 | ||
| 2656 | return 0; | 2685 | return 0; |
| 2657 | } | 2686 | } |
| 2658 | 2687 | ||
| 2688 | static void mmc_blk_remove_debugfs(struct mmc_card *card, | ||
| 2689 | struct mmc_blk_data *md) | ||
| 2690 | { | ||
| 2691 | if (!card->debugfs_root) | ||
| 2692 | return; | ||
| 2693 | |||
| 2694 | if (!IS_ERR_OR_NULL(md->status_dentry)) { | ||
| 2695 | debugfs_remove(md->status_dentry); | ||
| 2696 | md->status_dentry = NULL; | ||
| 2697 | } | ||
| 2698 | |||
| 2699 | if (!IS_ERR_OR_NULL(md->ext_csd_dentry)) { | ||
| 2700 | debugfs_remove(md->ext_csd_dentry); | ||
| 2701 | md->ext_csd_dentry = NULL; | ||
| 2702 | } | ||
| 2703 | } | ||
| 2659 | 2704 | ||
| 2660 | #else | 2705 | #else |
| 2661 | 2706 | ||
| 2662 | static int mmc_blk_add_debugfs(struct mmc_card *card) | 2707 | static int mmc_blk_add_debugfs(struct mmc_card *card, struct mmc_blk_data *md) |
| 2663 | { | 2708 | { |
| 2664 | return 0; | 2709 | return 0; |
| 2665 | } | 2710 | } |
| 2666 | 2711 | ||
| 2712 | static void mmc_blk_remove_debugfs(struct mmc_card *card, | ||
| 2713 | struct mmc_blk_data *md) | ||
| 2714 | { | ||
| 2715 | } | ||
| 2716 | |||
| 2667 | #endif /* CONFIG_DEBUG_FS */ | 2717 | #endif /* CONFIG_DEBUG_FS */ |
| 2668 | 2718 | ||
| 2669 | static int mmc_blk_probe(struct mmc_card *card) | 2719 | static int mmc_blk_probe(struct mmc_card *card) |
| @@ -2703,7 +2753,7 @@ static int mmc_blk_probe(struct mmc_card *card) | |||
| 2703 | } | 2753 | } |
| 2704 | 2754 | ||
| 2705 | /* Add two debugfs entries */ | 2755 | /* Add two debugfs entries */ |
| 2706 | mmc_blk_add_debugfs(card); | 2756 | mmc_blk_add_debugfs(card, md); |
| 2707 | 2757 | ||
| 2708 | pm_runtime_set_autosuspend_delay(&card->dev, 3000); | 2758 | pm_runtime_set_autosuspend_delay(&card->dev, 3000); |
| 2709 | pm_runtime_use_autosuspend(&card->dev); | 2759 | pm_runtime_use_autosuspend(&card->dev); |
| @@ -2729,6 +2779,7 @@ static void mmc_blk_remove(struct mmc_card *card) | |||
| 2729 | { | 2779 | { |
| 2730 | struct mmc_blk_data *md = dev_get_drvdata(&card->dev); | 2780 | struct mmc_blk_data *md = dev_get_drvdata(&card->dev); |
| 2731 | 2781 | ||
| 2782 | mmc_blk_remove_debugfs(card, md); | ||
| 2732 | mmc_blk_remove_parts(card, md); | 2783 | mmc_blk_remove_parts(card, md); |
| 2733 | pm_runtime_get_sync(&card->dev); | 2784 | pm_runtime_get_sync(&card->dev); |
| 2734 | mmc_claim_host(card->host); | 2785 | mmc_claim_host(card->host); |
diff --git a/drivers/mmc/core/bus.c b/drivers/mmc/core/bus.c index a4b49e25fe96..7586ff2ad1f1 100644 --- a/drivers/mmc/core/bus.c +++ b/drivers/mmc/core/bus.c | |||
| @@ -157,6 +157,9 @@ static int mmc_bus_suspend(struct device *dev) | |||
| 157 | return ret; | 157 | return ret; |
| 158 | 158 | ||
| 159 | ret = host->bus_ops->suspend(host); | 159 | ret = host->bus_ops->suspend(host); |
| 160 | if (ret) | ||
| 161 | pm_generic_resume(dev); | ||
| 162 | |||
| 160 | return ret; | 163 | return ret; |
| 161 | } | 164 | } |
| 162 | 165 | ||
diff --git a/drivers/mmc/core/card.h b/drivers/mmc/core/card.h index f06cd91964ce..79a5b985ccf5 100644 --- a/drivers/mmc/core/card.h +++ b/drivers/mmc/core/card.h | |||
| @@ -75,9 +75,11 @@ struct mmc_fixup { | |||
| 75 | #define EXT_CSD_REV_ANY (-1u) | 75 | #define EXT_CSD_REV_ANY (-1u) |
| 76 | 76 | ||
| 77 | #define CID_MANFID_SANDISK 0x2 | 77 | #define CID_MANFID_SANDISK 0x2 |
| 78 | #define CID_MANFID_ATP 0x9 | ||
| 78 | #define CID_MANFID_TOSHIBA 0x11 | 79 | #define CID_MANFID_TOSHIBA 0x11 |
| 79 | #define CID_MANFID_MICRON 0x13 | 80 | #define CID_MANFID_MICRON 0x13 |
| 80 | #define CID_MANFID_SAMSUNG 0x15 | 81 | #define CID_MANFID_SAMSUNG 0x15 |
| 82 | #define CID_MANFID_APACER 0x27 | ||
| 81 | #define CID_MANFID_KINGSTON 0x70 | 83 | #define CID_MANFID_KINGSTON 0x70 |
| 82 | #define CID_MANFID_HYNIX 0x90 | 84 | #define CID_MANFID_HYNIX 0x90 |
| 83 | 85 | ||
diff --git a/drivers/mmc/core/debugfs.c b/drivers/mmc/core/debugfs.c index 01e459a34f33..0f4a7d7b2626 100644 --- a/drivers/mmc/core/debugfs.c +++ b/drivers/mmc/core/debugfs.c | |||
| @@ -314,4 +314,5 @@ err: | |||
| 314 | void mmc_remove_card_debugfs(struct mmc_card *card) | 314 | void mmc_remove_card_debugfs(struct mmc_card *card) |
| 315 | { | 315 | { |
| 316 | debugfs_remove_recursive(card->debugfs_root); | 316 | debugfs_remove_recursive(card->debugfs_root); |
| 317 | card->debugfs_root = NULL; | ||
| 317 | } | 318 | } |
diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c index a552f61060d2..208a762b87ef 100644 --- a/drivers/mmc/core/mmc.c +++ b/drivers/mmc/core/mmc.c | |||
| @@ -781,7 +781,7 @@ MMC_DEV_ATTR(name, "%s\n", card->cid.prod_name); | |||
| 781 | MMC_DEV_ATTR(oemid, "0x%04x\n", card->cid.oemid); | 781 | MMC_DEV_ATTR(oemid, "0x%04x\n", card->cid.oemid); |
| 782 | MMC_DEV_ATTR(prv, "0x%x\n", card->cid.prv); | 782 | MMC_DEV_ATTR(prv, "0x%x\n", card->cid.prv); |
| 783 | MMC_DEV_ATTR(rev, "0x%x\n", card->ext_csd.rev); | 783 | MMC_DEV_ATTR(rev, "0x%x\n", card->ext_csd.rev); |
| 784 | MMC_DEV_ATTR(pre_eol_info, "%02x\n", card->ext_csd.pre_eol_info); | 784 | MMC_DEV_ATTR(pre_eol_info, "0x%02x\n", card->ext_csd.pre_eol_info); |
| 785 | MMC_DEV_ATTR(life_time, "0x%02x 0x%02x\n", | 785 | MMC_DEV_ATTR(life_time, "0x%02x 0x%02x\n", |
| 786 | card->ext_csd.device_life_time_est_typ_a, | 786 | card->ext_csd.device_life_time_est_typ_a, |
| 787 | card->ext_csd.device_life_time_est_typ_b); | 787 | card->ext_csd.device_life_time_est_typ_b); |
| @@ -791,7 +791,7 @@ MMC_DEV_ATTR(enhanced_area_offset, "%llu\n", | |||
| 791 | MMC_DEV_ATTR(enhanced_area_size, "%u\n", card->ext_csd.enhanced_area_size); | 791 | MMC_DEV_ATTR(enhanced_area_size, "%u\n", card->ext_csd.enhanced_area_size); |
| 792 | MMC_DEV_ATTR(raw_rpmb_size_mult, "%#x\n", card->ext_csd.raw_rpmb_size_mult); | 792 | MMC_DEV_ATTR(raw_rpmb_size_mult, "%#x\n", card->ext_csd.raw_rpmb_size_mult); |
| 793 | MMC_DEV_ATTR(rel_sectors, "%#x\n", card->ext_csd.rel_sectors); | 793 | MMC_DEV_ATTR(rel_sectors, "%#x\n", card->ext_csd.rel_sectors); |
| 794 | MMC_DEV_ATTR(ocr, "%08x\n", card->ocr); | 794 | MMC_DEV_ATTR(ocr, "0x%08x\n", card->ocr); |
| 795 | MMC_DEV_ATTR(cmdq_en, "%d\n", card->ext_csd.cmdq_en); | 795 | MMC_DEV_ATTR(cmdq_en, "%d\n", card->ext_csd.cmdq_en); |
| 796 | 796 | ||
| 797 | static ssize_t mmc_fwrev_show(struct device *dev, | 797 | static ssize_t mmc_fwrev_show(struct device *dev, |
| @@ -1290,7 +1290,7 @@ out_err: | |||
| 1290 | 1290 | ||
| 1291 | static void mmc_select_driver_type(struct mmc_card *card) | 1291 | static void mmc_select_driver_type(struct mmc_card *card) |
| 1292 | { | 1292 | { |
| 1293 | int card_drv_type, drive_strength, drv_type; | 1293 | int card_drv_type, drive_strength, drv_type = 0; |
| 1294 | int fixed_drv_type = card->host->fixed_drv_type; | 1294 | int fixed_drv_type = card->host->fixed_drv_type; |
| 1295 | 1295 | ||
| 1296 | card_drv_type = card->ext_csd.raw_driver_strength | | 1296 | card_drv_type = card->ext_csd.raw_driver_strength | |
diff --git a/drivers/mmc/core/quirks.h b/drivers/mmc/core/quirks.h index f664e9cbc9f8..75d317623852 100644 --- a/drivers/mmc/core/quirks.h +++ b/drivers/mmc/core/quirks.h | |||
| @@ -53,6 +53,14 @@ static const struct mmc_fixup mmc_blk_fixups[] = { | |||
| 53 | MMC_QUIRK_BLK_NO_CMD23), | 53 | MMC_QUIRK_BLK_NO_CMD23), |
| 54 | 54 | ||
| 55 | /* | 55 | /* |
| 56 | * Some SD cards lockup while using CMD23 multiblock transfers. | ||
| 57 | */ | ||
| 58 | MMC_FIXUP("AF SD", CID_MANFID_ATP, CID_OEMID_ANY, add_quirk_sd, | ||
| 59 | MMC_QUIRK_BLK_NO_CMD23), | ||
| 60 | MMC_FIXUP("APUSD", CID_MANFID_APACER, 0x5048, add_quirk_sd, | ||
| 61 | MMC_QUIRK_BLK_NO_CMD23), | ||
| 62 | |||
| 63 | /* | ||
| 56 | * Some MMC cards need longer data read timeout than indicated in CSD. | 64 | * Some MMC cards need longer data read timeout than indicated in CSD. |
| 57 | */ | 65 | */ |
| 58 | MMC_FIXUP(CID_NAME_ANY, CID_MANFID_MICRON, 0x200, add_quirk_mmc, | 66 | MMC_FIXUP(CID_NAME_ANY, CID_MANFID_MICRON, 0x200, add_quirk_mmc, |
diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c index 45bf78f32716..62b84dd8f9fe 100644 --- a/drivers/mmc/core/sd.c +++ b/drivers/mmc/core/sd.c | |||
| @@ -675,7 +675,7 @@ MMC_DEV_ATTR(manfid, "0x%06x\n", card->cid.manfid); | |||
| 675 | MMC_DEV_ATTR(name, "%s\n", card->cid.prod_name); | 675 | MMC_DEV_ATTR(name, "%s\n", card->cid.prod_name); |
| 676 | MMC_DEV_ATTR(oemid, "0x%04x\n", card->cid.oemid); | 676 | MMC_DEV_ATTR(oemid, "0x%04x\n", card->cid.oemid); |
| 677 | MMC_DEV_ATTR(serial, "0x%08x\n", card->cid.serial); | 677 | MMC_DEV_ATTR(serial, "0x%08x\n", card->cid.serial); |
| 678 | MMC_DEV_ATTR(ocr, "%08x\n", card->ocr); | 678 | MMC_DEV_ATTR(ocr, "0x%08x\n", card->ocr); |
| 679 | 679 | ||
| 680 | 680 | ||
| 681 | static ssize_t mmc_dsr_show(struct device *dev, | 681 | static ssize_t mmc_dsr_show(struct device *dev, |
diff --git a/drivers/mmc/host/sdhci-msm.c b/drivers/mmc/host/sdhci-msm.c index 3fb7d2eec93f..c283291db705 100644 --- a/drivers/mmc/host/sdhci-msm.c +++ b/drivers/mmc/host/sdhci-msm.c | |||
| @@ -29,6 +29,9 @@ | |||
| 29 | #define CORE_VERSION_MAJOR_MASK (0xf << CORE_VERSION_MAJOR_SHIFT) | 29 | #define CORE_VERSION_MAJOR_MASK (0xf << CORE_VERSION_MAJOR_SHIFT) |
| 30 | #define CORE_VERSION_MINOR_MASK 0xff | 30 | #define CORE_VERSION_MINOR_MASK 0xff |
| 31 | 31 | ||
| 32 | #define CORE_MCI_GENERICS 0x70 | ||
| 33 | #define SWITCHABLE_SIGNALING_VOLTAGE BIT(29) | ||
| 34 | |||
| 32 | #define CORE_HC_MODE 0x78 | 35 | #define CORE_HC_MODE 0x78 |
| 33 | #define HC_MODE_EN 0x1 | 36 | #define HC_MODE_EN 0x1 |
| 34 | #define CORE_POWER 0x0 | 37 | #define CORE_POWER 0x0 |
| @@ -1028,12 +1031,23 @@ static void sdhci_msm_check_power_status(struct sdhci_host *host, u32 req_type) | |||
| 1028 | struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); | 1031 | struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); |
| 1029 | struct sdhci_msm_host *msm_host = sdhci_pltfm_priv(pltfm_host); | 1032 | struct sdhci_msm_host *msm_host = sdhci_pltfm_priv(pltfm_host); |
| 1030 | bool done = false; | 1033 | bool done = false; |
| 1034 | u32 val; | ||
| 1031 | 1035 | ||
| 1032 | pr_debug("%s: %s: request %d curr_pwr_state %x curr_io_level %x\n", | 1036 | pr_debug("%s: %s: request %d curr_pwr_state %x curr_io_level %x\n", |
| 1033 | mmc_hostname(host->mmc), __func__, req_type, | 1037 | mmc_hostname(host->mmc), __func__, req_type, |
| 1034 | msm_host->curr_pwr_state, msm_host->curr_io_level); | 1038 | msm_host->curr_pwr_state, msm_host->curr_io_level); |
| 1035 | 1039 | ||
| 1036 | /* | 1040 | /* |
| 1041 | * The power interrupt will not be generated for signal voltage | ||
| 1042 | * switches if SWITCHABLE_SIGNALING_VOLTAGE in MCI_GENERICS is not set. | ||
| 1043 | */ | ||
| 1044 | val = readl(msm_host->core_mem + CORE_MCI_GENERICS); | ||
| 1045 | if ((req_type & REQ_IO_HIGH || req_type & REQ_IO_LOW) && | ||
| 1046 | !(val & SWITCHABLE_SIGNALING_VOLTAGE)) { | ||
| 1047 | return; | ||
| 1048 | } | ||
| 1049 | |||
| 1050 | /* | ||
| 1037 | * The IRQ for request type IO High/LOW will be generated when - | 1051 | * The IRQ for request type IO High/LOW will be generated when - |
| 1038 | * there is a state change in 1.8V enable bit (bit 3) of | 1052 | * there is a state change in 1.8V enable bit (bit 3) of |
| 1039 | * SDHCI_HOST_CONTROL2 register. The reset state of that bit is 0 | 1053 | * SDHCI_HOST_CONTROL2 register. The reset state of that bit is 0 |
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index 2f14334e42df..e9290a3439d5 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c | |||
| @@ -21,6 +21,7 @@ | |||
| 21 | #include <linux/dma-mapping.h> | 21 | #include <linux/dma-mapping.h> |
| 22 | #include <linux/slab.h> | 22 | #include <linux/slab.h> |
| 23 | #include <linux/scatterlist.h> | 23 | #include <linux/scatterlist.h> |
| 24 | #include <linux/swiotlb.h> | ||
| 24 | #include <linux/regulator/consumer.h> | 25 | #include <linux/regulator/consumer.h> |
| 25 | #include <linux/pm_runtime.h> | 26 | #include <linux/pm_runtime.h> |
| 26 | #include <linux/of.h> | 27 | #include <linux/of.h> |
| @@ -3651,22 +3652,29 @@ int sdhci_setup_host(struct sdhci_host *host) | |||
| 3651 | spin_lock_init(&host->lock); | 3652 | spin_lock_init(&host->lock); |
| 3652 | 3653 | ||
| 3653 | /* | 3654 | /* |
| 3655 | * Maximum number of sectors in one transfer. Limited by SDMA boundary | ||
| 3656 | * size (512KiB). Note some tuning modes impose a 4MiB limit, but this | ||
| 3657 | * is less anyway. | ||
| 3658 | */ | ||
| 3659 | mmc->max_req_size = 524288; | ||
| 3660 | |||
| 3661 | /* | ||
| 3654 | * Maximum number of segments. Depends on if the hardware | 3662 | * Maximum number of segments. Depends on if the hardware |
| 3655 | * can do scatter/gather or not. | 3663 | * can do scatter/gather or not. |
| 3656 | */ | 3664 | */ |
| 3657 | if (host->flags & SDHCI_USE_ADMA) | 3665 | if (host->flags & SDHCI_USE_ADMA) { |
| 3658 | mmc->max_segs = SDHCI_MAX_SEGS; | 3666 | mmc->max_segs = SDHCI_MAX_SEGS; |
| 3659 | else if (host->flags & SDHCI_USE_SDMA) | 3667 | } else if (host->flags & SDHCI_USE_SDMA) { |
| 3660 | mmc->max_segs = 1; | 3668 | mmc->max_segs = 1; |
| 3661 | else /* PIO */ | 3669 | if (swiotlb_max_segment()) { |
| 3670 | unsigned int max_req_size = (1 << IO_TLB_SHIFT) * | ||
| 3671 | IO_TLB_SEGSIZE; | ||
| 3672 | mmc->max_req_size = min(mmc->max_req_size, | ||
| 3673 | max_req_size); | ||
| 3674 | } | ||
| 3675 | } else { /* PIO */ | ||
| 3662 | mmc->max_segs = SDHCI_MAX_SEGS; | 3676 | mmc->max_segs = SDHCI_MAX_SEGS; |
| 3663 | 3677 | } | |
| 3664 | /* | ||
| 3665 | * Maximum number of sectors in one transfer. Limited by SDMA boundary | ||
| 3666 | * size (512KiB). Note some tuning modes impose a 4MiB limit, but this | ||
| 3667 | * is less anyway. | ||
| 3668 | */ | ||
| 3669 | mmc->max_req_size = 524288; | ||
| 3670 | 3678 | ||
| 3671 | /* | 3679 | /* |
| 3672 | * Maximum segment size. Could be one segment with the maximum number | 3680 | * Maximum segment size. Could be one segment with the maximum number |
diff --git a/drivers/mtd/mtdsuper.c b/drivers/mtd/mtdsuper.c index e43fea896d1e..d58a61c09304 100644 --- a/drivers/mtd/mtdsuper.c +++ b/drivers/mtd/mtdsuper.c | |||
| @@ -79,14 +79,14 @@ static struct dentry *mount_mtd_aux(struct file_system_type *fs_type, int flags, | |||
| 79 | pr_debug("MTDSB: New superblock for device %d (\"%s\")\n", | 79 | pr_debug("MTDSB: New superblock for device %d (\"%s\")\n", |
| 80 | mtd->index, mtd->name); | 80 | mtd->index, mtd->name); |
| 81 | 81 | ||
| 82 | ret = fill_super(sb, data, flags & MS_SILENT ? 1 : 0); | 82 | ret = fill_super(sb, data, flags & SB_SILENT ? 1 : 0); |
| 83 | if (ret < 0) { | 83 | if (ret < 0) { |
| 84 | deactivate_locked_super(sb); | 84 | deactivate_locked_super(sb); |
| 85 | return ERR_PTR(ret); | 85 | return ERR_PTR(ret); |
| 86 | } | 86 | } |
| 87 | 87 | ||
| 88 | /* go */ | 88 | /* go */ |
| 89 | sb->s_flags |= MS_ACTIVE; | 89 | sb->s_flags |= SB_ACTIVE; |
| 90 | return dget(sb->s_root); | 90 | return dget(sb->s_root); |
| 91 | 91 | ||
| 92 | /* new mountpoint for an already mounted superblock */ | 92 | /* new mountpoint for an already mounted superblock */ |
| @@ -202,7 +202,7 @@ struct dentry *mount_mtd(struct file_system_type *fs_type, int flags, | |||
| 202 | not_an_MTD_device: | 202 | not_an_MTD_device: |
| 203 | #endif /* CONFIG_BLOCK */ | 203 | #endif /* CONFIG_BLOCK */ |
| 204 | 204 | ||
| 205 | if (!(flags & MS_SILENT)) | 205 | if (!(flags & SB_SILENT)) |
| 206 | printk(KERN_NOTICE | 206 | printk(KERN_NOTICE |
| 207 | "MTD: Attempt to mount non-MTD device \"%s\"\n", | 207 | "MTD: Attempt to mount non-MTD device \"%s\"\n", |
| 208 | dev_name); | 208 | dev_name); |
diff --git a/drivers/net/bonding/bond_netlink.c b/drivers/net/bonding/bond_netlink.c index a1b33aa6054a..9697977b80f0 100644 --- a/drivers/net/bonding/bond_netlink.c +++ b/drivers/net/bonding/bond_netlink.c | |||
| @@ -423,7 +423,7 @@ static int bond_changelink(struct net_device *bond_dev, struct nlattr *tb[], | |||
| 423 | return -EINVAL; | 423 | return -EINVAL; |
| 424 | 424 | ||
| 425 | bond_opt_initval(&newval, | 425 | bond_opt_initval(&newval, |
| 426 | nla_get_be64(data[IFLA_BOND_AD_ACTOR_SYSTEM])); | 426 | nla_get_u64(data[IFLA_BOND_AD_ACTOR_SYSTEM])); |
| 427 | err = __bond_opt_set(bond, BOND_OPT_AD_ACTOR_SYSTEM, &newval); | 427 | err = __bond_opt_set(bond, BOND_OPT_AD_ACTOR_SYSTEM, &newval); |
| 428 | if (err) | 428 | if (err) |
| 429 | return err; | 429 | return err; |
diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c index a13a4896a8bd..0626dcfd1f3d 100644 --- a/drivers/net/can/flexcan.c +++ b/drivers/net/can/flexcan.c | |||
| @@ -184,12 +184,12 @@ | |||
| 184 | * Below is some version info we got: | 184 | * Below is some version info we got: |
| 185 | * SOC Version IP-Version Glitch- [TR]WRN_INT IRQ Err Memory err RTR re- | 185 | * SOC Version IP-Version Glitch- [TR]WRN_INT IRQ Err Memory err RTR re- |
| 186 | * Filter? connected? Passive detection ception in MB | 186 | * Filter? connected? Passive detection ception in MB |
| 187 | * MX25 FlexCAN2 03.00.00.00 no no ? no no | 187 | * MX25 FlexCAN2 03.00.00.00 no no no no no |
| 188 | * MX28 FlexCAN2 03.00.04.00 yes yes no no no | 188 | * MX28 FlexCAN2 03.00.04.00 yes yes no no no |
| 189 | * MX35 FlexCAN2 03.00.00.00 no no ? no no | 189 | * MX35 FlexCAN2 03.00.00.00 no no no no no |
| 190 | * MX53 FlexCAN2 03.00.00.00 yes no no no no | 190 | * MX53 FlexCAN2 03.00.00.00 yes no no no no |
| 191 | * MX6s FlexCAN3 10.00.12.00 yes yes no no yes | 191 | * MX6s FlexCAN3 10.00.12.00 yes yes no no yes |
| 192 | * VF610 FlexCAN3 ? no yes ? yes yes? | 192 | * VF610 FlexCAN3 ? no yes no yes yes? |
| 193 | * | 193 | * |
| 194 | * Some SOCs do not have the RX_WARN & TX_WARN interrupt line connected. | 194 | * Some SOCs do not have the RX_WARN & TX_WARN interrupt line connected. |
| 195 | */ | 195 | */ |
| @@ -297,7 +297,8 @@ static const struct flexcan_devtype_data fsl_imx6q_devtype_data = { | |||
| 297 | 297 | ||
| 298 | static const struct flexcan_devtype_data fsl_vf610_devtype_data = { | 298 | static const struct flexcan_devtype_data fsl_vf610_devtype_data = { |
| 299 | .quirks = FLEXCAN_QUIRK_DISABLE_RXFG | FLEXCAN_QUIRK_ENABLE_EACEN_RRS | | 299 | .quirks = FLEXCAN_QUIRK_DISABLE_RXFG | FLEXCAN_QUIRK_ENABLE_EACEN_RRS | |
| 300 | FLEXCAN_QUIRK_DISABLE_MECR | FLEXCAN_QUIRK_USE_OFF_TIMESTAMP, | 300 | FLEXCAN_QUIRK_DISABLE_MECR | FLEXCAN_QUIRK_USE_OFF_TIMESTAMP | |
| 301 | FLEXCAN_QUIRK_BROKEN_PERR_STATE, | ||
| 301 | }; | 302 | }; |
| 302 | 303 | ||
| 303 | static const struct can_bittiming_const flexcan_bittiming_const = { | 304 | static const struct can_bittiming_const flexcan_bittiming_const = { |
diff --git a/drivers/net/can/peak_canfd/peak_canfd.c b/drivers/net/can/peak_canfd/peak_canfd.c index 85268be0c913..55513411a82e 100644 --- a/drivers/net/can/peak_canfd/peak_canfd.c +++ b/drivers/net/can/peak_canfd/peak_canfd.c | |||
| @@ -258,21 +258,18 @@ static int pucan_handle_can_rx(struct peak_canfd_priv *priv, | |||
| 258 | /* if this frame is an echo, */ | 258 | /* if this frame is an echo, */ |
| 259 | if ((rx_msg_flags & PUCAN_MSG_LOOPED_BACK) && | 259 | if ((rx_msg_flags & PUCAN_MSG_LOOPED_BACK) && |
| 260 | !(rx_msg_flags & PUCAN_MSG_SELF_RECEIVE)) { | 260 | !(rx_msg_flags & PUCAN_MSG_SELF_RECEIVE)) { |
| 261 | int n; | ||
| 262 | unsigned long flags; | 261 | unsigned long flags; |
| 263 | 262 | ||
| 264 | spin_lock_irqsave(&priv->echo_lock, flags); | 263 | spin_lock_irqsave(&priv->echo_lock, flags); |
| 265 | n = can_get_echo_skb(priv->ndev, msg->client); | 264 | can_get_echo_skb(priv->ndev, msg->client); |
| 266 | spin_unlock_irqrestore(&priv->echo_lock, flags); | 265 | spin_unlock_irqrestore(&priv->echo_lock, flags); |
| 267 | 266 | ||
| 268 | /* count bytes of the echo instead of skb */ | 267 | /* count bytes of the echo instead of skb */ |
| 269 | stats->tx_bytes += cf_len; | 268 | stats->tx_bytes += cf_len; |
| 270 | stats->tx_packets++; | 269 | stats->tx_packets++; |
| 271 | 270 | ||
| 272 | if (n) { | 271 | /* restart tx queue (a slot is free) */ |
| 273 | /* restart tx queue only if a slot is free */ | 272 | netif_wake_queue(priv->ndev); |
| 274 | netif_wake_queue(priv->ndev); | ||
| 275 | } | ||
| 276 | 273 | ||
| 277 | return 0; | 274 | return 0; |
| 278 | } | 275 | } |
diff --git a/drivers/net/can/peak_canfd/peak_pciefd_main.c b/drivers/net/can/peak_canfd/peak_pciefd_main.c index b4efd711f824..788c3464a3b0 100644 --- a/drivers/net/can/peak_canfd/peak_pciefd_main.c +++ b/drivers/net/can/peak_canfd/peak_pciefd_main.c | |||
| @@ -825,7 +825,10 @@ err_release_regions: | |||
| 825 | err_disable_pci: | 825 | err_disable_pci: |
| 826 | pci_disable_device(pdev); | 826 | pci_disable_device(pdev); |
| 827 | 827 | ||
| 828 | return err; | 828 | /* pci_xxx_config_word() return positive PCIBIOS_xxx error codes while |
| 829 | * the probe() function must return a negative errno in case of failure | ||
| 830 | * (err is unchanged if negative) */ | ||
| 831 | return pcibios_err_to_errno(err); | ||
| 829 | } | 832 | } |
| 830 | 833 | ||
| 831 | /* free the board structure object, as well as its resources: */ | 834 | /* free the board structure object, as well as its resources: */ |
diff --git a/drivers/net/can/sja1000/peak_pci.c b/drivers/net/can/sja1000/peak_pci.c index 131026fbc2d7..5adc95c922ee 100644 --- a/drivers/net/can/sja1000/peak_pci.c +++ b/drivers/net/can/sja1000/peak_pci.c | |||
| @@ -717,7 +717,10 @@ failure_release_regions: | |||
| 717 | failure_disable_pci: | 717 | failure_disable_pci: |
| 718 | pci_disable_device(pdev); | 718 | pci_disable_device(pdev); |
| 719 | 719 | ||
| 720 | return err; | 720 | /* pci_xxx_config_word() return positive PCIBIOS_xxx error codes while |
| 721 | * the probe() function must return a negative errno in case of failure | ||
| 722 | * (err is unchanged if negative) */ | ||
| 723 | return pcibios_err_to_errno(err); | ||
| 721 | } | 724 | } |
| 722 | 725 | ||
| 723 | static void peak_pci_remove(struct pci_dev *pdev) | 726 | static void peak_pci_remove(struct pci_dev *pdev) |
diff --git a/drivers/net/can/ti_hecc.c b/drivers/net/can/ti_hecc.c index 4d4941469cfc..db6ea936dc3f 100644 --- a/drivers/net/can/ti_hecc.c +++ b/drivers/net/can/ti_hecc.c | |||
| @@ -637,6 +637,9 @@ static int ti_hecc_rx_poll(struct napi_struct *napi, int quota) | |||
| 637 | mbx_mask = hecc_read(priv, HECC_CANMIM); | 637 | mbx_mask = hecc_read(priv, HECC_CANMIM); |
| 638 | mbx_mask |= HECC_TX_MBOX_MASK; | 638 | mbx_mask |= HECC_TX_MBOX_MASK; |
| 639 | hecc_write(priv, HECC_CANMIM, mbx_mask); | 639 | hecc_write(priv, HECC_CANMIM, mbx_mask); |
| 640 | } else { | ||
| 641 | /* repoll is done only if whole budget is used */ | ||
| 642 | num_pkts = quota; | ||
| 640 | } | 643 | } |
| 641 | 644 | ||
| 642 | return num_pkts; | 645 | return num_pkts; |
diff --git a/drivers/net/can/usb/ems_usb.c b/drivers/net/can/usb/ems_usb.c index b3d02759c226..b00358297424 100644 --- a/drivers/net/can/usb/ems_usb.c +++ b/drivers/net/can/usb/ems_usb.c | |||
| @@ -288,6 +288,8 @@ static void ems_usb_read_interrupt_callback(struct urb *urb) | |||
| 288 | 288 | ||
| 289 | case -ECONNRESET: /* unlink */ | 289 | case -ECONNRESET: /* unlink */ |
| 290 | case -ENOENT: | 290 | case -ENOENT: |
| 291 | case -EPIPE: | ||
| 292 | case -EPROTO: | ||
| 291 | case -ESHUTDOWN: | 293 | case -ESHUTDOWN: |
| 292 | return; | 294 | return; |
| 293 | 295 | ||
diff --git a/drivers/net/can/usb/esd_usb2.c b/drivers/net/can/usb/esd_usb2.c index 9fdb0f0bfa06..c6dcf93675c0 100644 --- a/drivers/net/can/usb/esd_usb2.c +++ b/drivers/net/can/usb/esd_usb2.c | |||
| @@ -393,6 +393,8 @@ static void esd_usb2_read_bulk_callback(struct urb *urb) | |||
| 393 | break; | 393 | break; |
| 394 | 394 | ||
| 395 | case -ENOENT: | 395 | case -ENOENT: |
| 396 | case -EPIPE: | ||
| 397 | case -EPROTO: | ||
| 396 | case -ESHUTDOWN: | 398 | case -ESHUTDOWN: |
| 397 | return; | 399 | return; |
| 398 | 400 | ||
diff --git a/drivers/net/can/usb/kvaser_usb.c b/drivers/net/can/usb/kvaser_usb.c index 9b18d96ef526..63587b8e6825 100644 --- a/drivers/net/can/usb/kvaser_usb.c +++ b/drivers/net/can/usb/kvaser_usb.c | |||
| @@ -609,8 +609,8 @@ static int kvaser_usb_wait_msg(const struct kvaser_usb *dev, u8 id, | |||
| 609 | } | 609 | } |
| 610 | 610 | ||
| 611 | if (pos + tmp->len > actual_len) { | 611 | if (pos + tmp->len > actual_len) { |
| 612 | dev_err(dev->udev->dev.parent, | 612 | dev_err_ratelimited(dev->udev->dev.parent, |
| 613 | "Format error\n"); | 613 | "Format error\n"); |
| 614 | break; | 614 | break; |
| 615 | } | 615 | } |
| 616 | 616 | ||
| @@ -813,6 +813,7 @@ static int kvaser_usb_simple_msg_async(struct kvaser_usb_net_priv *priv, | |||
| 813 | if (err) { | 813 | if (err) { |
| 814 | netdev_err(netdev, "Error transmitting URB\n"); | 814 | netdev_err(netdev, "Error transmitting URB\n"); |
| 815 | usb_unanchor_urb(urb); | 815 | usb_unanchor_urb(urb); |
| 816 | kfree(buf); | ||
| 816 | usb_free_urb(urb); | 817 | usb_free_urb(urb); |
| 817 | return err; | 818 | return err; |
| 818 | } | 819 | } |
| @@ -1325,6 +1326,8 @@ static void kvaser_usb_read_bulk_callback(struct urb *urb) | |||
| 1325 | case 0: | 1326 | case 0: |
| 1326 | break; | 1327 | break; |
| 1327 | case -ENOENT: | 1328 | case -ENOENT: |
| 1329 | case -EPIPE: | ||
| 1330 | case -EPROTO: | ||
| 1328 | case -ESHUTDOWN: | 1331 | case -ESHUTDOWN: |
| 1329 | return; | 1332 | return; |
| 1330 | default: | 1333 | default: |
| @@ -1333,7 +1336,7 @@ static void kvaser_usb_read_bulk_callback(struct urb *urb) | |||
| 1333 | goto resubmit_urb; | 1336 | goto resubmit_urb; |
| 1334 | } | 1337 | } |
| 1335 | 1338 | ||
| 1336 | while (pos <= urb->actual_length - MSG_HEADER_LEN) { | 1339 | while (pos <= (int)(urb->actual_length - MSG_HEADER_LEN)) { |
| 1337 | msg = urb->transfer_buffer + pos; | 1340 | msg = urb->transfer_buffer + pos; |
| 1338 | 1341 | ||
| 1339 | /* The Kvaser firmware can only read and write messages that | 1342 | /* The Kvaser firmware can only read and write messages that |
| @@ -1352,7 +1355,8 @@ static void kvaser_usb_read_bulk_callback(struct urb *urb) | |||
| 1352 | } | 1355 | } |
| 1353 | 1356 | ||
| 1354 | if (pos + msg->len > urb->actual_length) { | 1357 | if (pos + msg->len > urb->actual_length) { |
| 1355 | dev_err(dev->udev->dev.parent, "Format error\n"); | 1358 | dev_err_ratelimited(dev->udev->dev.parent, |
| 1359 | "Format error\n"); | ||
| 1356 | break; | 1360 | break; |
| 1357 | } | 1361 | } |
| 1358 | 1362 | ||
| @@ -1768,6 +1772,7 @@ static netdev_tx_t kvaser_usb_start_xmit(struct sk_buff *skb, | |||
| 1768 | spin_unlock_irqrestore(&priv->tx_contexts_lock, flags); | 1772 | spin_unlock_irqrestore(&priv->tx_contexts_lock, flags); |
| 1769 | 1773 | ||
| 1770 | usb_unanchor_urb(urb); | 1774 | usb_unanchor_urb(urb); |
| 1775 | kfree(buf); | ||
| 1771 | 1776 | ||
| 1772 | stats->tx_dropped++; | 1777 | stats->tx_dropped++; |
| 1773 | 1778 | ||
diff --git a/drivers/net/can/usb/mcba_usb.c b/drivers/net/can/usb/mcba_usb.c index 7f0272558bef..8d8c2086424d 100644 --- a/drivers/net/can/usb/mcba_usb.c +++ b/drivers/net/can/usb/mcba_usb.c | |||
| @@ -592,6 +592,8 @@ static void mcba_usb_read_bulk_callback(struct urb *urb) | |||
| 592 | break; | 592 | break; |
| 593 | 593 | ||
| 594 | case -ENOENT: | 594 | case -ENOENT: |
| 595 | case -EPIPE: | ||
| 596 | case -EPROTO: | ||
| 595 | case -ESHUTDOWN: | 597 | case -ESHUTDOWN: |
| 596 | return; | 598 | return; |
| 597 | 599 | ||
| @@ -862,7 +864,7 @@ static int mcba_usb_probe(struct usb_interface *intf, | |||
| 862 | goto cleanup_unregister_candev; | 864 | goto cleanup_unregister_candev; |
| 863 | } | 865 | } |
| 864 | 866 | ||
| 865 | dev_info(&intf->dev, "Microchip CAN BUS analizer connected\n"); | 867 | dev_info(&intf->dev, "Microchip CAN BUS Analyzer connected\n"); |
| 866 | 868 | ||
| 867 | return 0; | 869 | return 0; |
| 868 | 870 | ||
diff --git a/drivers/net/can/usb/usb_8dev.c b/drivers/net/can/usb/usb_8dev.c index d000cb62d6ae..27861c417c94 100644 --- a/drivers/net/can/usb/usb_8dev.c +++ b/drivers/net/can/usb/usb_8dev.c | |||
| @@ -524,6 +524,8 @@ static void usb_8dev_read_bulk_callback(struct urb *urb) | |||
| 524 | break; | 524 | break; |
| 525 | 525 | ||
| 526 | case -ENOENT: | 526 | case -ENOENT: |
| 527 | case -EPIPE: | ||
| 528 | case -EPROTO: | ||
| 527 | case -ESHUTDOWN: | 529 | case -ESHUTDOWN: |
| 528 | return; | 530 | return; |
| 529 | 531 | ||
diff --git a/drivers/net/dsa/bcm_sf2.c b/drivers/net/dsa/bcm_sf2.c index ea01f24f15e7..b62d47210db8 100644 --- a/drivers/net/dsa/bcm_sf2.c +++ b/drivers/net/dsa/bcm_sf2.c | |||
| @@ -14,7 +14,6 @@ | |||
| 14 | #include <linux/netdevice.h> | 14 | #include <linux/netdevice.h> |
| 15 | #include <linux/interrupt.h> | 15 | #include <linux/interrupt.h> |
| 16 | #include <linux/platform_device.h> | 16 | #include <linux/platform_device.h> |
| 17 | #include <linux/of.h> | ||
| 18 | #include <linux/phy.h> | 17 | #include <linux/phy.h> |
| 19 | #include <linux/phy_fixed.h> | 18 | #include <linux/phy_fixed.h> |
| 20 | #include <linux/mii.h> | 19 | #include <linux/mii.h> |
diff --git a/drivers/net/dsa/bcm_sf2_cfp.c b/drivers/net/dsa/bcm_sf2_cfp.c index b721a2009b50..23b45da784cb 100644 --- a/drivers/net/dsa/bcm_sf2_cfp.c +++ b/drivers/net/dsa/bcm_sf2_cfp.c | |||
| @@ -625,7 +625,7 @@ static int bcm_sf2_cfp_ipv6_rule_set(struct bcm_sf2_priv *priv, int port, | |||
| 625 | bcm_sf2_cfp_slice_ipv6(priv, v6_spec->ip6src, v6_spec->psrc, | 625 | bcm_sf2_cfp_slice_ipv6(priv, v6_spec->ip6src, v6_spec->psrc, |
| 626 | slice_num, false); | 626 | slice_num, false); |
| 627 | bcm_sf2_cfp_slice_ipv6(priv, v6_m_spec->ip6src, v6_m_spec->psrc, | 627 | bcm_sf2_cfp_slice_ipv6(priv, v6_m_spec->ip6src, v6_m_spec->psrc, |
| 628 | slice_num, true); | 628 | SLICE_NUM_MASK, true); |
| 629 | 629 | ||
| 630 | /* Insert into TCAM now because we need to insert a second rule */ | 630 | /* Insert into TCAM now because we need to insert a second rule */ |
| 631 | bcm_sf2_cfp_rule_addr_set(priv, rule_index[0]); | 631 | bcm_sf2_cfp_rule_addr_set(priv, rule_index[0]); |
| @@ -699,7 +699,7 @@ static int bcm_sf2_cfp_ipv6_rule_set(struct bcm_sf2_priv *priv, int port, | |||
| 699 | /* Insert into Action and policer RAMs now, set chain ID to | 699 | /* Insert into Action and policer RAMs now, set chain ID to |
| 700 | * the one we are chained to | 700 | * the one we are chained to |
| 701 | */ | 701 | */ |
| 702 | ret = bcm_sf2_cfp_act_pol_set(priv, rule_index[0], port_num, | 702 | ret = bcm_sf2_cfp_act_pol_set(priv, rule_index[1], port_num, |
| 703 | queue_num, true); | 703 | queue_num, true); |
| 704 | if (ret) | 704 | if (ret) |
| 705 | goto out_err; | 705 | goto out_err; |
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c index 8171055fde7a..66d33e97cbc5 100644 --- a/drivers/net/dsa/mv88e6xxx/chip.c +++ b/drivers/net/dsa/mv88e6xxx/chip.c | |||
| @@ -339,7 +339,7 @@ static void mv88e6xxx_g1_irq_free(struct mv88e6xxx_chip *chip) | |||
| 339 | u16 mask; | 339 | u16 mask; |
| 340 | 340 | ||
| 341 | mv88e6xxx_g1_read(chip, MV88E6XXX_G1_CTL1, &mask); | 341 | mv88e6xxx_g1_read(chip, MV88E6XXX_G1_CTL1, &mask); |
| 342 | mask |= GENMASK(chip->g1_irq.nirqs, 0); | 342 | mask &= ~GENMASK(chip->g1_irq.nirqs, 0); |
| 343 | mv88e6xxx_g1_write(chip, MV88E6XXX_G1_CTL1, mask); | 343 | mv88e6xxx_g1_write(chip, MV88E6XXX_G1_CTL1, mask); |
| 344 | 344 | ||
| 345 | free_irq(chip->irq, chip); | 345 | free_irq(chip->irq, chip); |
| @@ -395,7 +395,7 @@ static int mv88e6xxx_g1_irq_setup(struct mv88e6xxx_chip *chip) | |||
| 395 | return 0; | 395 | return 0; |
| 396 | 396 | ||
| 397 | out_disable: | 397 | out_disable: |
| 398 | mask |= GENMASK(chip->g1_irq.nirqs, 0); | 398 | mask &= ~GENMASK(chip->g1_irq.nirqs, 0); |
| 399 | mv88e6xxx_g1_write(chip, MV88E6XXX_G1_CTL1, mask); | 399 | mv88e6xxx_g1_write(chip, MV88E6XXX_G1_CTL1, mask); |
| 400 | 400 | ||
| 401 | out_mapping: | 401 | out_mapping: |
| @@ -2177,6 +2177,19 @@ static const struct of_device_id mv88e6xxx_mdio_external_match[] = { | |||
| 2177 | { }, | 2177 | { }, |
| 2178 | }; | 2178 | }; |
| 2179 | 2179 | ||
| 2180 | static void mv88e6xxx_mdios_unregister(struct mv88e6xxx_chip *chip) | ||
| 2181 | |||
| 2182 | { | ||
| 2183 | struct mv88e6xxx_mdio_bus *mdio_bus; | ||
| 2184 | struct mii_bus *bus; | ||
| 2185 | |||
| 2186 | list_for_each_entry(mdio_bus, &chip->mdios, list) { | ||
| 2187 | bus = mdio_bus->bus; | ||
| 2188 | |||
| 2189 | mdiobus_unregister(bus); | ||
| 2190 | } | ||
| 2191 | } | ||
| 2192 | |||
| 2180 | static int mv88e6xxx_mdios_register(struct mv88e6xxx_chip *chip, | 2193 | static int mv88e6xxx_mdios_register(struct mv88e6xxx_chip *chip, |
| 2181 | struct device_node *np) | 2194 | struct device_node *np) |
| 2182 | { | 2195 | { |
| @@ -2201,27 +2214,16 @@ static int mv88e6xxx_mdios_register(struct mv88e6xxx_chip *chip, | |||
| 2201 | match = of_match_node(mv88e6xxx_mdio_external_match, child); | 2214 | match = of_match_node(mv88e6xxx_mdio_external_match, child); |
| 2202 | if (match) { | 2215 | if (match) { |
| 2203 | err = mv88e6xxx_mdio_register(chip, child, true); | 2216 | err = mv88e6xxx_mdio_register(chip, child, true); |
| 2204 | if (err) | 2217 | if (err) { |
| 2218 | mv88e6xxx_mdios_unregister(chip); | ||
| 2205 | return err; | 2219 | return err; |
| 2220 | } | ||
| 2206 | } | 2221 | } |
| 2207 | } | 2222 | } |
| 2208 | 2223 | ||
| 2209 | return 0; | 2224 | return 0; |
| 2210 | } | 2225 | } |
| 2211 | 2226 | ||
| 2212 | static void mv88e6xxx_mdios_unregister(struct mv88e6xxx_chip *chip) | ||
| 2213 | |||
| 2214 | { | ||
| 2215 | struct mv88e6xxx_mdio_bus *mdio_bus; | ||
| 2216 | struct mii_bus *bus; | ||
| 2217 | |||
| 2218 | list_for_each_entry(mdio_bus, &chip->mdios, list) { | ||
| 2219 | bus = mdio_bus->bus; | ||
| 2220 | |||
| 2221 | mdiobus_unregister(bus); | ||
| 2222 | } | ||
| 2223 | } | ||
| 2224 | |||
| 2225 | static int mv88e6xxx_get_eeprom_len(struct dsa_switch *ds) | 2227 | static int mv88e6xxx_get_eeprom_len(struct dsa_switch *ds) |
| 2226 | { | 2228 | { |
| 2227 | struct mv88e6xxx_chip *chip = ds->priv; | 2229 | struct mv88e6xxx_chip *chip = ds->priv; |
diff --git a/drivers/net/dsa/mv88e6xxx/port.c b/drivers/net/dsa/mv88e6xxx/port.c index a7801f6668a5..6315774d72b3 100644 --- a/drivers/net/dsa/mv88e6xxx/port.c +++ b/drivers/net/dsa/mv88e6xxx/port.c | |||
| @@ -338,6 +338,7 @@ int mv88e6390x_port_set_cmode(struct mv88e6xxx_chip *chip, int port, | |||
| 338 | cmode = MV88E6XXX_PORT_STS_CMODE_2500BASEX; | 338 | cmode = MV88E6XXX_PORT_STS_CMODE_2500BASEX; |
| 339 | break; | 339 | break; |
| 340 | case PHY_INTERFACE_MODE_XGMII: | 340 | case PHY_INTERFACE_MODE_XGMII: |
| 341 | case PHY_INTERFACE_MODE_XAUI: | ||
| 341 | cmode = MV88E6XXX_PORT_STS_CMODE_XAUI; | 342 | cmode = MV88E6XXX_PORT_STS_CMODE_XAUI; |
| 342 | break; | 343 | break; |
| 343 | case PHY_INTERFACE_MODE_RXAUI: | 344 | case PHY_INTERFACE_MODE_RXAUI: |
diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_cfg.h b/drivers/net/ethernet/aquantia/atlantic/aq_cfg.h index 57e796870595..105fdb958cef 100644 --- a/drivers/net/ethernet/aquantia/atlantic/aq_cfg.h +++ b/drivers/net/ethernet/aquantia/atlantic/aq_cfg.h | |||
| @@ -50,7 +50,7 @@ | |||
| 50 | #define AQ_CFG_PCI_FUNC_MSIX_IRQS 9U | 50 | #define AQ_CFG_PCI_FUNC_MSIX_IRQS 9U |
| 51 | #define AQ_CFG_PCI_FUNC_PORTS 2U | 51 | #define AQ_CFG_PCI_FUNC_PORTS 2U |
| 52 | 52 | ||
| 53 | #define AQ_CFG_SERVICE_TIMER_INTERVAL (2 * HZ) | 53 | #define AQ_CFG_SERVICE_TIMER_INTERVAL (1 * HZ) |
| 54 | #define AQ_CFG_POLLING_TIMER_INTERVAL ((unsigned int)(2 * HZ)) | 54 | #define AQ_CFG_POLLING_TIMER_INTERVAL ((unsigned int)(2 * HZ)) |
| 55 | 55 | ||
| 56 | #define AQ_CFG_SKB_FRAGS_MAX 32U | 56 | #define AQ_CFG_SKB_FRAGS_MAX 32U |
| @@ -80,6 +80,7 @@ | |||
| 80 | #define AQ_CFG_DRV_VERSION __stringify(NIC_MAJOR_DRIVER_VERSION)"."\ | 80 | #define AQ_CFG_DRV_VERSION __stringify(NIC_MAJOR_DRIVER_VERSION)"."\ |
| 81 | __stringify(NIC_MINOR_DRIVER_VERSION)"."\ | 81 | __stringify(NIC_MINOR_DRIVER_VERSION)"."\ |
| 82 | __stringify(NIC_BUILD_DRIVER_VERSION)"."\ | 82 | __stringify(NIC_BUILD_DRIVER_VERSION)"."\ |
| 83 | __stringify(NIC_REVISION_DRIVER_VERSION) | 83 | __stringify(NIC_REVISION_DRIVER_VERSION) \ |
| 84 | AQ_CFG_DRV_VERSION_SUFFIX | ||
| 84 | 85 | ||
| 85 | #endif /* AQ_CFG_H */ | 86 | #endif /* AQ_CFG_H */ |
diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_ethtool.c b/drivers/net/ethernet/aquantia/atlantic/aq_ethtool.c index 70efb7467bf3..f2d8063a2cef 100644 --- a/drivers/net/ethernet/aquantia/atlantic/aq_ethtool.c +++ b/drivers/net/ethernet/aquantia/atlantic/aq_ethtool.c | |||
| @@ -66,14 +66,14 @@ static const char aq_ethtool_stat_names[][ETH_GSTRING_LEN] = { | |||
| 66 | "OutUCast", | 66 | "OutUCast", |
| 67 | "OutMCast", | 67 | "OutMCast", |
| 68 | "OutBCast", | 68 | "OutBCast", |
| 69 | "InUCastOctects", | 69 | "InUCastOctets", |
| 70 | "OutUCastOctects", | 70 | "OutUCastOctets", |
| 71 | "InMCastOctects", | 71 | "InMCastOctets", |
| 72 | "OutMCastOctects", | 72 | "OutMCastOctets", |
| 73 | "InBCastOctects", | 73 | "InBCastOctets", |
| 74 | "OutBCastOctects", | 74 | "OutBCastOctets", |
| 75 | "InOctects", | 75 | "InOctets", |
| 76 | "OutOctects", | 76 | "OutOctets", |
| 77 | "InPacketsDma", | 77 | "InPacketsDma", |
| 78 | "OutPacketsDma", | 78 | "OutPacketsDma", |
| 79 | "InOctetsDma", | 79 | "InOctetsDma", |
diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_hw.h b/drivers/net/ethernet/aquantia/atlantic/aq_hw.h index 0207927dc8a6..b3825de6cdfb 100644 --- a/drivers/net/ethernet/aquantia/atlantic/aq_hw.h +++ b/drivers/net/ethernet/aquantia/atlantic/aq_hw.h | |||
| @@ -46,6 +46,28 @@ struct aq_hw_link_status_s { | |||
| 46 | unsigned int mbps; | 46 | unsigned int mbps; |
| 47 | }; | 47 | }; |
| 48 | 48 | ||
| 49 | struct aq_stats_s { | ||
| 50 | u64 uprc; | ||
| 51 | u64 mprc; | ||
| 52 | u64 bprc; | ||
| 53 | u64 erpt; | ||
| 54 | u64 uptc; | ||
| 55 | u64 mptc; | ||
| 56 | u64 bptc; | ||
| 57 | u64 erpr; | ||
| 58 | u64 mbtc; | ||
| 59 | u64 bbtc; | ||
| 60 | u64 mbrc; | ||
| 61 | u64 bbrc; | ||
| 62 | u64 ubrc; | ||
| 63 | u64 ubtc; | ||
| 64 | u64 dpc; | ||
| 65 | u64 dma_pkt_rc; | ||
| 66 | u64 dma_pkt_tc; | ||
| 67 | u64 dma_oct_rc; | ||
| 68 | u64 dma_oct_tc; | ||
| 69 | }; | ||
| 70 | |||
| 49 | #define AQ_HW_IRQ_INVALID 0U | 71 | #define AQ_HW_IRQ_INVALID 0U |
| 50 | #define AQ_HW_IRQ_LEGACY 1U | 72 | #define AQ_HW_IRQ_LEGACY 1U |
| 51 | #define AQ_HW_IRQ_MSI 2U | 73 | #define AQ_HW_IRQ_MSI 2U |
| @@ -85,7 +107,9 @@ struct aq_hw_ops { | |||
| 85 | void (*destroy)(struct aq_hw_s *self); | 107 | void (*destroy)(struct aq_hw_s *self); |
| 86 | 108 | ||
| 87 | int (*get_hw_caps)(struct aq_hw_s *self, | 109 | int (*get_hw_caps)(struct aq_hw_s *self, |
| 88 | struct aq_hw_caps_s *aq_hw_caps); | 110 | struct aq_hw_caps_s *aq_hw_caps, |
| 111 | unsigned short device, | ||
| 112 | unsigned short subsystem_device); | ||
| 89 | 113 | ||
| 90 | int (*hw_ring_tx_xmit)(struct aq_hw_s *self, struct aq_ring_s *aq_ring, | 114 | int (*hw_ring_tx_xmit)(struct aq_hw_s *self, struct aq_ring_s *aq_ring, |
| 91 | unsigned int frags); | 115 | unsigned int frags); |
| @@ -164,8 +188,7 @@ struct aq_hw_ops { | |||
| 164 | 188 | ||
| 165 | int (*hw_update_stats)(struct aq_hw_s *self); | 189 | int (*hw_update_stats)(struct aq_hw_s *self); |
| 166 | 190 | ||
| 167 | int (*hw_get_hw_stats)(struct aq_hw_s *self, u64 *data, | 191 | struct aq_stats_s *(*hw_get_hw_stats)(struct aq_hw_s *self); |
| 168 | unsigned int *p_count); | ||
| 169 | 192 | ||
| 170 | int (*hw_get_fw_version)(struct aq_hw_s *self, u32 *fw_version); | 193 | int (*hw_get_fw_version)(struct aq_hw_s *self, u32 *fw_version); |
| 171 | 194 | ||
diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_nic.c b/drivers/net/ethernet/aquantia/atlantic/aq_nic.c index 78dfb2ab78ce..75a894a9251c 100644 --- a/drivers/net/ethernet/aquantia/atlantic/aq_nic.c +++ b/drivers/net/ethernet/aquantia/atlantic/aq_nic.c | |||
| @@ -37,6 +37,8 @@ static unsigned int aq_itr_rx; | |||
| 37 | module_param_named(aq_itr_rx, aq_itr_rx, uint, 0644); | 37 | module_param_named(aq_itr_rx, aq_itr_rx, uint, 0644); |
| 38 | MODULE_PARM_DESC(aq_itr_rx, "RX interrupt throttle rate"); | 38 | MODULE_PARM_DESC(aq_itr_rx, "RX interrupt throttle rate"); |
| 39 | 39 | ||
| 40 | static void aq_nic_update_ndev_stats(struct aq_nic_s *self); | ||
| 41 | |||
| 40 | static void aq_nic_rss_init(struct aq_nic_s *self, unsigned int num_rss_queues) | 42 | static void aq_nic_rss_init(struct aq_nic_s *self, unsigned int num_rss_queues) |
| 41 | { | 43 | { |
| 42 | struct aq_nic_cfg_s *cfg = &self->aq_nic_cfg; | 44 | struct aq_nic_cfg_s *cfg = &self->aq_nic_cfg; |
| @@ -166,11 +168,8 @@ static int aq_nic_update_link_status(struct aq_nic_s *self) | |||
| 166 | static void aq_nic_service_timer_cb(struct timer_list *t) | 168 | static void aq_nic_service_timer_cb(struct timer_list *t) |
| 167 | { | 169 | { |
| 168 | struct aq_nic_s *self = from_timer(self, t, service_timer); | 170 | struct aq_nic_s *self = from_timer(self, t, service_timer); |
| 169 | struct net_device *ndev = aq_nic_get_ndev(self); | 171 | int ctimer = AQ_CFG_SERVICE_TIMER_INTERVAL; |
| 170 | int err = 0; | 172 | int err = 0; |
| 171 | unsigned int i = 0U; | ||
| 172 | struct aq_ring_stats_rx_s stats_rx; | ||
| 173 | struct aq_ring_stats_tx_s stats_tx; | ||
| 174 | 173 | ||
| 175 | if (aq_utils_obj_test(&self->header.flags, AQ_NIC_FLAGS_IS_NOT_READY)) | 174 | if (aq_utils_obj_test(&self->header.flags, AQ_NIC_FLAGS_IS_NOT_READY)) |
| 176 | goto err_exit; | 175 | goto err_exit; |
| @@ -182,23 +181,14 @@ static void aq_nic_service_timer_cb(struct timer_list *t) | |||
| 182 | if (self->aq_hw_ops.hw_update_stats) | 181 | if (self->aq_hw_ops.hw_update_stats) |
| 183 | self->aq_hw_ops.hw_update_stats(self->aq_hw); | 182 | self->aq_hw_ops.hw_update_stats(self->aq_hw); |
| 184 | 183 | ||
| 185 | memset(&stats_rx, 0U, sizeof(struct aq_ring_stats_rx_s)); | 184 | aq_nic_update_ndev_stats(self); |
| 186 | memset(&stats_tx, 0U, sizeof(struct aq_ring_stats_tx_s)); | ||
| 187 | for (i = AQ_DIMOF(self->aq_vec); i--;) { | ||
| 188 | if (self->aq_vec[i]) | ||
| 189 | aq_vec_add_stats(self->aq_vec[i], &stats_rx, &stats_tx); | ||
| 190 | } | ||
| 191 | 185 | ||
| 192 | ndev->stats.rx_packets = stats_rx.packets; | 186 | /* If no link - use faster timer rate to detect link up asap */ |
| 193 | ndev->stats.rx_bytes = stats_rx.bytes; | 187 | if (!netif_carrier_ok(self->ndev)) |
| 194 | ndev->stats.rx_errors = stats_rx.errors; | 188 | ctimer = max(ctimer / 2, 1); |
| 195 | ndev->stats.tx_packets = stats_tx.packets; | ||
| 196 | ndev->stats.tx_bytes = stats_tx.bytes; | ||
| 197 | ndev->stats.tx_errors = stats_tx.errors; | ||
| 198 | 189 | ||
| 199 | err_exit: | 190 | err_exit: |
| 200 | mod_timer(&self->service_timer, | 191 | mod_timer(&self->service_timer, jiffies + ctimer); |
| 201 | jiffies + AQ_CFG_SERVICE_TIMER_INTERVAL); | ||
| 202 | } | 192 | } |
| 203 | 193 | ||
| 204 | static void aq_nic_polling_timer_cb(struct timer_list *t) | 194 | static void aq_nic_polling_timer_cb(struct timer_list *t) |
| @@ -222,7 +212,7 @@ static struct net_device *aq_nic_ndev_alloc(void) | |||
| 222 | 212 | ||
| 223 | struct aq_nic_s *aq_nic_alloc_cold(const struct net_device_ops *ndev_ops, | 213 | struct aq_nic_s *aq_nic_alloc_cold(const struct net_device_ops *ndev_ops, |
| 224 | const struct ethtool_ops *et_ops, | 214 | const struct ethtool_ops *et_ops, |
| 225 | struct device *dev, | 215 | struct pci_dev *pdev, |
| 226 | struct aq_pci_func_s *aq_pci_func, | 216 | struct aq_pci_func_s *aq_pci_func, |
| 227 | unsigned int port, | 217 | unsigned int port, |
| 228 | const struct aq_hw_ops *aq_hw_ops) | 218 | const struct aq_hw_ops *aq_hw_ops) |
| @@ -242,7 +232,7 @@ struct aq_nic_s *aq_nic_alloc_cold(const struct net_device_ops *ndev_ops, | |||
| 242 | ndev->netdev_ops = ndev_ops; | 232 | ndev->netdev_ops = ndev_ops; |
| 243 | ndev->ethtool_ops = et_ops; | 233 | ndev->ethtool_ops = et_ops; |
| 244 | 234 | ||
| 245 | SET_NETDEV_DEV(ndev, dev); | 235 | SET_NETDEV_DEV(ndev, &pdev->dev); |
| 246 | 236 | ||
| 247 | ndev->if_port = port; | 237 | ndev->if_port = port; |
| 248 | self->ndev = ndev; | 238 | self->ndev = ndev; |
| @@ -254,7 +244,8 @@ struct aq_nic_s *aq_nic_alloc_cold(const struct net_device_ops *ndev_ops, | |||
| 254 | 244 | ||
| 255 | self->aq_hw = self->aq_hw_ops.create(aq_pci_func, self->port, | 245 | self->aq_hw = self->aq_hw_ops.create(aq_pci_func, self->port, |
| 256 | &self->aq_hw_ops); | 246 | &self->aq_hw_ops); |
| 257 | err = self->aq_hw_ops.get_hw_caps(self->aq_hw, &self->aq_hw_caps); | 247 | err = self->aq_hw_ops.get_hw_caps(self->aq_hw, &self->aq_hw_caps, |
| 248 | pdev->device, pdev->subsystem_device); | ||
| 258 | if (err < 0) | 249 | if (err < 0) |
| 259 | goto err_exit; | 250 | goto err_exit; |
| 260 | 251 | ||
| @@ -749,16 +740,40 @@ int aq_nic_get_regs_count(struct aq_nic_s *self) | |||
| 749 | 740 | ||
| 750 | void aq_nic_get_stats(struct aq_nic_s *self, u64 *data) | 741 | void aq_nic_get_stats(struct aq_nic_s *self, u64 *data) |
| 751 | { | 742 | { |
| 752 | struct aq_vec_s *aq_vec = NULL; | ||
| 753 | unsigned int i = 0U; | 743 | unsigned int i = 0U; |
| 754 | unsigned int count = 0U; | 744 | unsigned int count = 0U; |
| 755 | int err = 0; | 745 | struct aq_vec_s *aq_vec = NULL; |
| 746 | struct aq_stats_s *stats = self->aq_hw_ops.hw_get_hw_stats(self->aq_hw); | ||
| 756 | 747 | ||
| 757 | err = self->aq_hw_ops.hw_get_hw_stats(self->aq_hw, data, &count); | 748 | if (!stats) |
| 758 | if (err < 0) | ||
| 759 | goto err_exit; | 749 | goto err_exit; |
| 760 | 750 | ||
| 761 | data += count; | 751 | data[i] = stats->uprc + stats->mprc + stats->bprc; |
| 752 | data[++i] = stats->uprc; | ||
| 753 | data[++i] = stats->mprc; | ||
| 754 | data[++i] = stats->bprc; | ||
| 755 | data[++i] = stats->erpt; | ||
| 756 | data[++i] = stats->uptc + stats->mptc + stats->bptc; | ||
| 757 | data[++i] = stats->uptc; | ||
| 758 | data[++i] = stats->mptc; | ||
| 759 | data[++i] = stats->bptc; | ||
| 760 | data[++i] = stats->ubrc; | ||
| 761 | data[++i] = stats->ubtc; | ||
| 762 | data[++i] = stats->mbrc; | ||
| 763 | data[++i] = stats->mbtc; | ||
| 764 | data[++i] = stats->bbrc; | ||
| 765 | data[++i] = stats->bbtc; | ||
| 766 | data[++i] = stats->ubrc + stats->mbrc + stats->bbrc; | ||
| 767 | data[++i] = stats->ubtc + stats->mbtc + stats->bbtc; | ||
| 768 | data[++i] = stats->dma_pkt_rc; | ||
| 769 | data[++i] = stats->dma_pkt_tc; | ||
| 770 | data[++i] = stats->dma_oct_rc; | ||
| 771 | data[++i] = stats->dma_oct_tc; | ||
| 772 | data[++i] = stats->dpc; | ||
| 773 | |||
| 774 | i++; | ||
| 775 | |||
| 776 | data += i; | ||
| 762 | count = 0U; | 777 | count = 0U; |
| 763 | 778 | ||
| 764 | for (i = 0U, aq_vec = self->aq_vec[0]; | 779 | for (i = 0U, aq_vec = self->aq_vec[0]; |
| @@ -768,7 +783,20 @@ void aq_nic_get_stats(struct aq_nic_s *self, u64 *data) | |||
| 768 | } | 783 | } |
| 769 | 784 | ||
| 770 | err_exit:; | 785 | err_exit:; |
| 771 | (void)err; | 786 | } |
| 787 | |||
| 788 | static void aq_nic_update_ndev_stats(struct aq_nic_s *self) | ||
| 789 | { | ||
| 790 | struct net_device *ndev = self->ndev; | ||
| 791 | struct aq_stats_s *stats = self->aq_hw_ops.hw_get_hw_stats(self->aq_hw); | ||
| 792 | |||
| 793 | ndev->stats.rx_packets = stats->uprc + stats->mprc + stats->bprc; | ||
| 794 | ndev->stats.rx_bytes = stats->ubrc + stats->mbrc + stats->bbrc; | ||
| 795 | ndev->stats.rx_errors = stats->erpr; | ||
| 796 | ndev->stats.tx_packets = stats->uptc + stats->mptc + stats->bptc; | ||
| 797 | ndev->stats.tx_bytes = stats->ubtc + stats->mbtc + stats->bbtc; | ||
| 798 | ndev->stats.tx_errors = stats->erpt; | ||
| 799 | ndev->stats.multicast = stats->mprc; | ||
| 772 | } | 800 | } |
| 773 | 801 | ||
| 774 | void aq_nic_get_link_ksettings(struct aq_nic_s *self, | 802 | void aq_nic_get_link_ksettings(struct aq_nic_s *self, |
diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_nic.h b/drivers/net/ethernet/aquantia/atlantic/aq_nic.h index 4309983acdd6..3c9f8db03d5f 100644 --- a/drivers/net/ethernet/aquantia/atlantic/aq_nic.h +++ b/drivers/net/ethernet/aquantia/atlantic/aq_nic.h | |||
| @@ -71,7 +71,7 @@ struct aq_nic_cfg_s { | |||
| 71 | 71 | ||
| 72 | struct aq_nic_s *aq_nic_alloc_cold(const struct net_device_ops *ndev_ops, | 72 | struct aq_nic_s *aq_nic_alloc_cold(const struct net_device_ops *ndev_ops, |
| 73 | const struct ethtool_ops *et_ops, | 73 | const struct ethtool_ops *et_ops, |
| 74 | struct device *dev, | 74 | struct pci_dev *pdev, |
| 75 | struct aq_pci_func_s *aq_pci_func, | 75 | struct aq_pci_func_s *aq_pci_func, |
| 76 | unsigned int port, | 76 | unsigned int port, |
| 77 | const struct aq_hw_ops *aq_hw_ops); | 77 | const struct aq_hw_ops *aq_hw_ops); |
diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_pci_func.c b/drivers/net/ethernet/aquantia/atlantic/aq_pci_func.c index cadaa646c89f..58c29d04b186 100644 --- a/drivers/net/ethernet/aquantia/atlantic/aq_pci_func.c +++ b/drivers/net/ethernet/aquantia/atlantic/aq_pci_func.c | |||
| @@ -51,7 +51,8 @@ struct aq_pci_func_s *aq_pci_func_alloc(struct aq_hw_ops *aq_hw_ops, | |||
| 51 | pci_set_drvdata(pdev, self); | 51 | pci_set_drvdata(pdev, self); |
| 52 | self->pdev = pdev; | 52 | self->pdev = pdev; |
| 53 | 53 | ||
| 54 | err = aq_hw_ops->get_hw_caps(NULL, &self->aq_hw_caps); | 54 | err = aq_hw_ops->get_hw_caps(NULL, &self->aq_hw_caps, pdev->device, |
| 55 | pdev->subsystem_device); | ||
| 55 | if (err < 0) | 56 | if (err < 0) |
| 56 | goto err_exit; | 57 | goto err_exit; |
| 57 | 58 | ||
| @@ -59,7 +60,7 @@ struct aq_pci_func_s *aq_pci_func_alloc(struct aq_hw_ops *aq_hw_ops, | |||
| 59 | 60 | ||
| 60 | for (port = 0; port < self->ports; ++port) { | 61 | for (port = 0; port < self->ports; ++port) { |
| 61 | struct aq_nic_s *aq_nic = aq_nic_alloc_cold(ndev_ops, eth_ops, | 62 | struct aq_nic_s *aq_nic = aq_nic_alloc_cold(ndev_ops, eth_ops, |
| 62 | &pdev->dev, self, | 63 | pdev, self, |
| 63 | port, aq_hw_ops); | 64 | port, aq_hw_ops); |
| 64 | 65 | ||
| 65 | if (!aq_nic) { | 66 | if (!aq_nic) { |
diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_a0.c b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_a0.c index 07b3c49a16a4..f18dce14c93c 100644 --- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_a0.c +++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_a0.c | |||
| @@ -18,9 +18,20 @@ | |||
| 18 | #include "hw_atl_a0_internal.h" | 18 | #include "hw_atl_a0_internal.h" |
| 19 | 19 | ||
| 20 | static int hw_atl_a0_get_hw_caps(struct aq_hw_s *self, | 20 | static int hw_atl_a0_get_hw_caps(struct aq_hw_s *self, |
| 21 | struct aq_hw_caps_s *aq_hw_caps) | 21 | struct aq_hw_caps_s *aq_hw_caps, |
| 22 | unsigned short device, | ||
| 23 | unsigned short subsystem_device) | ||
| 22 | { | 24 | { |
| 23 | memcpy(aq_hw_caps, &hw_atl_a0_hw_caps_, sizeof(*aq_hw_caps)); | 25 | memcpy(aq_hw_caps, &hw_atl_a0_hw_caps_, sizeof(*aq_hw_caps)); |
| 26 | |||
| 27 | if (device == HW_ATL_DEVICE_ID_D108 && subsystem_device == 0x0001) | ||
| 28 | aq_hw_caps->link_speed_msk &= ~HW_ATL_A0_RATE_10G; | ||
| 29 | |||
| 30 | if (device == HW_ATL_DEVICE_ID_D109 && subsystem_device == 0x0001) { | ||
| 31 | aq_hw_caps->link_speed_msk &= ~HW_ATL_A0_RATE_10G; | ||
| 32 | aq_hw_caps->link_speed_msk &= ~HW_ATL_A0_RATE_5G; | ||
| 33 | } | ||
| 34 | |||
| 24 | return 0; | 35 | return 0; |
| 25 | } | 36 | } |
| 26 | 37 | ||
| @@ -333,6 +344,10 @@ static int hw_atl_a0_hw_init(struct aq_hw_s *self, | |||
| 333 | hw_atl_a0_hw_rss_set(self, &aq_nic_cfg->aq_rss); | 344 | hw_atl_a0_hw_rss_set(self, &aq_nic_cfg->aq_rss); |
| 334 | hw_atl_a0_hw_rss_hash_set(self, &aq_nic_cfg->aq_rss); | 345 | hw_atl_a0_hw_rss_hash_set(self, &aq_nic_cfg->aq_rss); |
| 335 | 346 | ||
| 347 | /* Reset link status and read out initial hardware counters */ | ||
| 348 | self->aq_link_status.mbps = 0; | ||
| 349 | hw_atl_utils_update_stats(self); | ||
| 350 | |||
| 336 | err = aq_hw_err_from_flags(self); | 351 | err = aq_hw_err_from_flags(self); |
| 337 | if (err < 0) | 352 | if (err < 0) |
| 338 | goto err_exit; | 353 | goto err_exit; |
diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c index ec68c20efcbd..e4a22ce7bf09 100644 --- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c +++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c | |||
| @@ -16,11 +16,23 @@ | |||
| 16 | #include "hw_atl_utils.h" | 16 | #include "hw_atl_utils.h" |
| 17 | #include "hw_atl_llh.h" | 17 | #include "hw_atl_llh.h" |
| 18 | #include "hw_atl_b0_internal.h" | 18 | #include "hw_atl_b0_internal.h" |
| 19 | #include "hw_atl_llh_internal.h" | ||
| 19 | 20 | ||
| 20 | static int hw_atl_b0_get_hw_caps(struct aq_hw_s *self, | 21 | static int hw_atl_b0_get_hw_caps(struct aq_hw_s *self, |
| 21 | struct aq_hw_caps_s *aq_hw_caps) | 22 | struct aq_hw_caps_s *aq_hw_caps, |
| 23 | unsigned short device, | ||
| 24 | unsigned short subsystem_device) | ||
| 22 | { | 25 | { |
| 23 | memcpy(aq_hw_caps, &hw_atl_b0_hw_caps_, sizeof(*aq_hw_caps)); | 26 | memcpy(aq_hw_caps, &hw_atl_b0_hw_caps_, sizeof(*aq_hw_caps)); |
| 27 | |||
| 28 | if (device == HW_ATL_DEVICE_ID_D108 && subsystem_device == 0x0001) | ||
| 29 | aq_hw_caps->link_speed_msk &= ~HW_ATL_B0_RATE_10G; | ||
| 30 | |||
| 31 | if (device == HW_ATL_DEVICE_ID_D109 && subsystem_device == 0x0001) { | ||
| 32 | aq_hw_caps->link_speed_msk &= ~HW_ATL_B0_RATE_10G; | ||
| 33 | aq_hw_caps->link_speed_msk &= ~HW_ATL_B0_RATE_5G; | ||
| 34 | } | ||
| 35 | |||
| 24 | return 0; | 36 | return 0; |
| 25 | } | 37 | } |
| 26 | 38 | ||
| @@ -357,6 +369,7 @@ static int hw_atl_b0_hw_init(struct aq_hw_s *self, | |||
| 357 | }; | 369 | }; |
| 358 | 370 | ||
| 359 | int err = 0; | 371 | int err = 0; |
| 372 | u32 val; | ||
| 360 | 373 | ||
| 361 | self->aq_nic_cfg = aq_nic_cfg; | 374 | self->aq_nic_cfg = aq_nic_cfg; |
| 362 | 375 | ||
| @@ -374,6 +387,20 @@ static int hw_atl_b0_hw_init(struct aq_hw_s *self, | |||
| 374 | hw_atl_b0_hw_rss_set(self, &aq_nic_cfg->aq_rss); | 387 | hw_atl_b0_hw_rss_set(self, &aq_nic_cfg->aq_rss); |
| 375 | hw_atl_b0_hw_rss_hash_set(self, &aq_nic_cfg->aq_rss); | 388 | hw_atl_b0_hw_rss_hash_set(self, &aq_nic_cfg->aq_rss); |
| 376 | 389 | ||
| 390 | /* Force limit MRRS on RDM/TDM to 2K */ | ||
| 391 | val = aq_hw_read_reg(self, pci_reg_control6_adr); | ||
| 392 | aq_hw_write_reg(self, pci_reg_control6_adr, (val & ~0x707) | 0x404); | ||
| 393 | |||
| 394 | /* TX DMA total request limit. B0 hardware is not capable to | ||
| 395 | * handle more than (8K-MRRS) incoming DMA data. | ||
| 396 | * Value 24 in 256byte units | ||
| 397 | */ | ||
| 398 | aq_hw_write_reg(self, tx_dma_total_req_limit_adr, 24); | ||
| 399 | |||
| 400 | /* Reset link status and read out initial hardware counters */ | ||
| 401 | self->aq_link_status.mbps = 0; | ||
| 402 | hw_atl_utils_update_stats(self); | ||
| 403 | |||
| 377 | err = aq_hw_err_from_flags(self); | 404 | err = aq_hw_err_from_flags(self); |
| 378 | if (err < 0) | 405 | if (err < 0) |
| 379 | goto err_exit; | 406 | goto err_exit; |
diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh_internal.h b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh_internal.h index 5527fc0e5942..93450ec930e8 100644 --- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh_internal.h +++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh_internal.h | |||
| @@ -2343,6 +2343,9 @@ | |||
| 2343 | #define tx_dma_desc_base_addrmsw_adr(descriptor) \ | 2343 | #define tx_dma_desc_base_addrmsw_adr(descriptor) \ |
| 2344 | (0x00007c04u + (descriptor) * 0x40) | 2344 | (0x00007c04u + (descriptor) * 0x40) |
| 2345 | 2345 | ||
| 2346 | /* tx dma total request limit */ | ||
| 2347 | #define tx_dma_total_req_limit_adr 0x00007b20u | ||
| 2348 | |||
| 2346 | /* tx interrupt moderation control register definitions | 2349 | /* tx interrupt moderation control register definitions |
| 2347 | * Preprocessor definitions for TX Interrupt Moderation Control Register | 2350 | * Preprocessor definitions for TX Interrupt Moderation Control Register |
| 2348 | * Base Address: 0x00008980 | 2351 | * Base Address: 0x00008980 |
| @@ -2369,6 +2372,9 @@ | |||
| 2369 | /* default value of bitfield reg_res_dsbl */ | 2372 | /* default value of bitfield reg_res_dsbl */ |
| 2370 | #define pci_reg_res_dsbl_default 0x1 | 2373 | #define pci_reg_res_dsbl_default 0x1 |
| 2371 | 2374 | ||
| 2375 | /* PCI core control register */ | ||
| 2376 | #define pci_reg_control6_adr 0x1014u | ||
| 2377 | |||
| 2372 | /* global microprocessor scratch pad definitions */ | 2378 | /* global microprocessor scratch pad definitions */ |
| 2373 | #define glb_cpu_scratch_scp_adr(scratch_scp) (0x00000300u + (scratch_scp) * 0x4) | 2379 | #define glb_cpu_scratch_scp_adr(scratch_scp) (0x00000300u + (scratch_scp) * 0x4) |
| 2374 | 2380 | ||
diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.c b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.c index 1fe016fc4bc7..f2ce12ed4218 100644 --- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.c +++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.c | |||
| @@ -503,73 +503,43 @@ int hw_atl_utils_update_stats(struct aq_hw_s *self) | |||
| 503 | struct hw_atl_s *hw_self = PHAL_ATLANTIC; | 503 | struct hw_atl_s *hw_self = PHAL_ATLANTIC; |
| 504 | struct hw_aq_atl_utils_mbox mbox; | 504 | struct hw_aq_atl_utils_mbox mbox; |
| 505 | 505 | ||
| 506 | if (!self->aq_link_status.mbps) | ||
| 507 | return 0; | ||
| 508 | |||
| 509 | hw_atl_utils_mpi_read_stats(self, &mbox); | 506 | hw_atl_utils_mpi_read_stats(self, &mbox); |
| 510 | 507 | ||
| 511 | #define AQ_SDELTA(_N_) (hw_self->curr_stats._N_ += \ | 508 | #define AQ_SDELTA(_N_) (hw_self->curr_stats._N_ += \ |
| 512 | mbox.stats._N_ - hw_self->last_stats._N_) | 509 | mbox.stats._N_ - hw_self->last_stats._N_) |
| 513 | 510 | if (self->aq_link_status.mbps) { | |
| 514 | AQ_SDELTA(uprc); | 511 | AQ_SDELTA(uprc); |
| 515 | AQ_SDELTA(mprc); | 512 | AQ_SDELTA(mprc); |
| 516 | AQ_SDELTA(bprc); | 513 | AQ_SDELTA(bprc); |
| 517 | AQ_SDELTA(erpt); | 514 | AQ_SDELTA(erpt); |
| 518 | 515 | ||
| 519 | AQ_SDELTA(uptc); | 516 | AQ_SDELTA(uptc); |
| 520 | AQ_SDELTA(mptc); | 517 | AQ_SDELTA(mptc); |
| 521 | AQ_SDELTA(bptc); | 518 | AQ_SDELTA(bptc); |
| 522 | AQ_SDELTA(erpr); | 519 | AQ_SDELTA(erpr); |
| 523 | 520 | ||
| 524 | AQ_SDELTA(ubrc); | 521 | AQ_SDELTA(ubrc); |
| 525 | AQ_SDELTA(ubtc); | 522 | AQ_SDELTA(ubtc); |
| 526 | AQ_SDELTA(mbrc); | 523 | AQ_SDELTA(mbrc); |
| 527 | AQ_SDELTA(mbtc); | 524 | AQ_SDELTA(mbtc); |
| 528 | AQ_SDELTA(bbrc); | 525 | AQ_SDELTA(bbrc); |
| 529 | AQ_SDELTA(bbtc); | 526 | AQ_SDELTA(bbtc); |
| 530 | AQ_SDELTA(dpc); | 527 | AQ_SDELTA(dpc); |
| 531 | 528 | } | |
| 532 | #undef AQ_SDELTA | 529 | #undef AQ_SDELTA |
| 530 | hw_self->curr_stats.dma_pkt_rc = stats_rx_dma_good_pkt_counterlsw_get(self); | ||
| 531 | hw_self->curr_stats.dma_pkt_tc = stats_tx_dma_good_pkt_counterlsw_get(self); | ||
| 532 | hw_self->curr_stats.dma_oct_rc = stats_rx_dma_good_octet_counterlsw_get(self); | ||
| 533 | hw_self->curr_stats.dma_oct_tc = stats_tx_dma_good_octet_counterlsw_get(self); | ||
| 533 | 534 | ||
| 534 | memcpy(&hw_self->last_stats, &mbox.stats, sizeof(mbox.stats)); | 535 | memcpy(&hw_self->last_stats, &mbox.stats, sizeof(mbox.stats)); |
| 535 | 536 | ||
| 536 | return 0; | 537 | return 0; |
| 537 | } | 538 | } |
| 538 | 539 | ||
| 539 | int hw_atl_utils_get_hw_stats(struct aq_hw_s *self, | 540 | struct aq_stats_s *hw_atl_utils_get_hw_stats(struct aq_hw_s *self) |
| 540 | u64 *data, unsigned int *p_count) | ||
| 541 | { | 541 | { |
| 542 | struct hw_atl_s *hw_self = PHAL_ATLANTIC; | 542 | return &PHAL_ATLANTIC->curr_stats; |
| 543 | struct hw_atl_stats_s *stats = &hw_self->curr_stats; | ||
| 544 | int i = 0; | ||
| 545 | |||
| 546 | data[i] = stats->uprc + stats->mprc + stats->bprc; | ||
| 547 | data[++i] = stats->uprc; | ||
| 548 | data[++i] = stats->mprc; | ||
| 549 | data[++i] = stats->bprc; | ||
| 550 | data[++i] = stats->erpt; | ||
| 551 | data[++i] = stats->uptc + stats->mptc + stats->bptc; | ||
| 552 | data[++i] = stats->uptc; | ||
| 553 | data[++i] = stats->mptc; | ||
| 554 | data[++i] = stats->bptc; | ||
| 555 | data[++i] = stats->ubrc; | ||
| 556 | data[++i] = stats->ubtc; | ||
| 557 | data[++i] = stats->mbrc; | ||
| 558 | data[++i] = stats->mbtc; | ||
| 559 | data[++i] = stats->bbrc; | ||
| 560 | data[++i] = stats->bbtc; | ||
| 561 | data[++i] = stats->ubrc + stats->mbrc + stats->bbrc; | ||
| 562 | data[++i] = stats->ubtc + stats->mbtc + stats->bbtc; | ||
| 563 | data[++i] = stats_rx_dma_good_pkt_counterlsw_get(self); | ||
| 564 | data[++i] = stats_tx_dma_good_pkt_counterlsw_get(self); | ||
| 565 | data[++i] = stats_rx_dma_good_octet_counterlsw_get(self); | ||
| 566 | data[++i] = stats_tx_dma_good_octet_counterlsw_get(self); | ||
| 567 | data[++i] = stats->dpc; | ||
| 568 | |||
| 569 | if (p_count) | ||
| 570 | *p_count = ++i; | ||
| 571 | |||
| 572 | return 0; | ||
| 573 | } | 543 | } |
| 574 | 544 | ||
| 575 | static const u32 hw_atl_utils_hw_mac_regs[] = { | 545 | static const u32 hw_atl_utils_hw_mac_regs[] = { |
diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.h b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.h index c99cc690e425..21aeca6908d3 100644 --- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.h +++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.h | |||
| @@ -129,7 +129,7 @@ struct __packed hw_aq_atl_utils_mbox { | |||
| 129 | struct __packed hw_atl_s { | 129 | struct __packed hw_atl_s { |
| 130 | struct aq_hw_s base; | 130 | struct aq_hw_s base; |
| 131 | struct hw_atl_stats_s last_stats; | 131 | struct hw_atl_stats_s last_stats; |
| 132 | struct hw_atl_stats_s curr_stats; | 132 | struct aq_stats_s curr_stats; |
| 133 | u64 speed; | 133 | u64 speed; |
| 134 | unsigned int chip_features; | 134 | unsigned int chip_features; |
| 135 | u32 fw_ver_actual; | 135 | u32 fw_ver_actual; |
| @@ -207,8 +207,6 @@ int hw_atl_utils_get_fw_version(struct aq_hw_s *self, u32 *fw_version); | |||
| 207 | 207 | ||
| 208 | int hw_atl_utils_update_stats(struct aq_hw_s *self); | 208 | int hw_atl_utils_update_stats(struct aq_hw_s *self); |
| 209 | 209 | ||
| 210 | int hw_atl_utils_get_hw_stats(struct aq_hw_s *self, | 210 | struct aq_stats_s *hw_atl_utils_get_hw_stats(struct aq_hw_s *self); |
| 211 | u64 *data, | ||
| 212 | unsigned int *p_count); | ||
| 213 | 211 | ||
| 214 | #endif /* HW_ATL_UTILS_H */ | 212 | #endif /* HW_ATL_UTILS_H */ |
diff --git a/drivers/net/ethernet/aquantia/atlantic/ver.h b/drivers/net/ethernet/aquantia/atlantic/ver.h index 0de858d215c2..9009f2651e70 100644 --- a/drivers/net/ethernet/aquantia/atlantic/ver.h +++ b/drivers/net/ethernet/aquantia/atlantic/ver.h | |||
| @@ -11,8 +11,10 @@ | |||
| 11 | #define VER_H | 11 | #define VER_H |
| 12 | 12 | ||
| 13 | #define NIC_MAJOR_DRIVER_VERSION 1 | 13 | #define NIC_MAJOR_DRIVER_VERSION 1 |
| 14 | #define NIC_MINOR_DRIVER_VERSION 5 | 14 | #define NIC_MINOR_DRIVER_VERSION 6 |
| 15 | #define NIC_BUILD_DRIVER_VERSION 345 | 15 | #define NIC_BUILD_DRIVER_VERSION 13 |
| 16 | #define NIC_REVISION_DRIVER_VERSION 0 | 16 | #define NIC_REVISION_DRIVER_VERSION 0 |
| 17 | 17 | ||
| 18 | #define AQ_CFG_DRV_VERSION_SUFFIX "-kern" | ||
| 19 | |||
| 18 | #endif /* VER_H */ | 20 | #endif /* VER_H */ |
diff --git a/drivers/net/ethernet/arc/emac_rockchip.c b/drivers/net/ethernet/arc/emac_rockchip.c index e278e3d96ee0..16f9bee992fe 100644 --- a/drivers/net/ethernet/arc/emac_rockchip.c +++ b/drivers/net/ethernet/arc/emac_rockchip.c | |||
| @@ -199,9 +199,11 @@ static int emac_rockchip_probe(struct platform_device *pdev) | |||
| 199 | 199 | ||
| 200 | /* RMII interface needs always a rate of 50MHz */ | 200 | /* RMII interface needs always a rate of 50MHz */ |
| 201 | err = clk_set_rate(priv->refclk, 50000000); | 201 | err = clk_set_rate(priv->refclk, 50000000); |
| 202 | if (err) | 202 | if (err) { |
| 203 | dev_err(dev, | 203 | dev_err(dev, |
| 204 | "failed to change reference clock rate (%d)\n", err); | 204 | "failed to change reference clock rate (%d)\n", err); |
| 205 | goto out_regulator_disable; | ||
| 206 | } | ||
| 205 | 207 | ||
| 206 | if (priv->soc_data->need_div_macclk) { | 208 | if (priv->soc_data->need_div_macclk) { |
| 207 | priv->macclk = devm_clk_get(dev, "macclk"); | 209 | priv->macclk = devm_clk_get(dev, "macclk"); |
| @@ -220,19 +222,24 @@ static int emac_rockchip_probe(struct platform_device *pdev) | |||
| 220 | 222 | ||
| 221 | /* RMII TX/RX needs always a rate of 25MHz */ | 223 | /* RMII TX/RX needs always a rate of 25MHz */ |
| 222 | err = clk_set_rate(priv->macclk, 25000000); | 224 | err = clk_set_rate(priv->macclk, 25000000); |
| 223 | if (err) | 225 | if (err) { |
| 224 | dev_err(dev, | 226 | dev_err(dev, |
| 225 | "failed to change mac clock rate (%d)\n", err); | 227 | "failed to change mac clock rate (%d)\n", err); |
| 228 | goto out_clk_disable_macclk; | ||
| 229 | } | ||
| 226 | } | 230 | } |
| 227 | 231 | ||
| 228 | err = arc_emac_probe(ndev, interface); | 232 | err = arc_emac_probe(ndev, interface); |
| 229 | if (err) { | 233 | if (err) { |
| 230 | dev_err(dev, "failed to probe arc emac (%d)\n", err); | 234 | dev_err(dev, "failed to probe arc emac (%d)\n", err); |
| 231 | goto out_regulator_disable; | 235 | goto out_clk_disable_macclk; |
| 232 | } | 236 | } |
| 233 | 237 | ||
| 234 | return 0; | 238 | return 0; |
| 235 | 239 | ||
| 240 | out_clk_disable_macclk: | ||
| 241 | if (priv->soc_data->need_div_macclk) | ||
| 242 | clk_disable_unprepare(priv->macclk); | ||
| 236 | out_regulator_disable: | 243 | out_regulator_disable: |
| 237 | if (priv->regulator) | 244 | if (priv->regulator) |
| 238 | regulator_disable(priv->regulator); | 245 | regulator_disable(priv->regulator); |
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c index c5c38d4b7d1c..61ca4eb7c6fa 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c | |||
| @@ -1883,7 +1883,7 @@ static int bnxt_poll_work(struct bnxt *bp, struct bnxt_napi *bnapi, int budget) | |||
| 1883 | * here forever if we consistently cannot allocate | 1883 | * here forever if we consistently cannot allocate |
| 1884 | * buffers. | 1884 | * buffers. |
| 1885 | */ | 1885 | */ |
| 1886 | else if (rc == -ENOMEM) | 1886 | else if (rc == -ENOMEM && budget) |
| 1887 | rx_pkts++; | 1887 | rx_pkts++; |
| 1888 | else if (rc == -EBUSY) /* partial completion */ | 1888 | else if (rc == -EBUSY) /* partial completion */ |
| 1889 | break; | 1889 | break; |
| @@ -1969,7 +1969,7 @@ static int bnxt_poll_nitroa0(struct napi_struct *napi, int budget) | |||
| 1969 | cpu_to_le32(RX_CMPL_ERRORS_CRC_ERROR); | 1969 | cpu_to_le32(RX_CMPL_ERRORS_CRC_ERROR); |
| 1970 | 1970 | ||
| 1971 | rc = bnxt_rx_pkt(bp, bnapi, &raw_cons, &event); | 1971 | rc = bnxt_rx_pkt(bp, bnapi, &raw_cons, &event); |
| 1972 | if (likely(rc == -EIO)) | 1972 | if (likely(rc == -EIO) && budget) |
| 1973 | rx_pkts++; | 1973 | rx_pkts++; |
| 1974 | else if (rc == -EBUSY) /* partial completion */ | 1974 | else if (rc == -EBUSY) /* partial completion */ |
| 1975 | break; | 1975 | break; |
| @@ -3368,6 +3368,7 @@ static int bnxt_hwrm_do_send_msg(struct bnxt *bp, void *msg, u32 msg_len, | |||
| 3368 | u16 cp_ring_id, len = 0; | 3368 | u16 cp_ring_id, len = 0; |
| 3369 | struct hwrm_err_output *resp = bp->hwrm_cmd_resp_addr; | 3369 | struct hwrm_err_output *resp = bp->hwrm_cmd_resp_addr; |
| 3370 | u16 max_req_len = BNXT_HWRM_MAX_REQ_LEN; | 3370 | u16 max_req_len = BNXT_HWRM_MAX_REQ_LEN; |
| 3371 | struct hwrm_short_input short_input = {0}; | ||
| 3371 | 3372 | ||
| 3372 | req->seq_id = cpu_to_le16(bp->hwrm_cmd_seq++); | 3373 | req->seq_id = cpu_to_le16(bp->hwrm_cmd_seq++); |
| 3373 | memset(resp, 0, PAGE_SIZE); | 3374 | memset(resp, 0, PAGE_SIZE); |
| @@ -3376,7 +3377,6 @@ static int bnxt_hwrm_do_send_msg(struct bnxt *bp, void *msg, u32 msg_len, | |||
| 3376 | 3377 | ||
| 3377 | if (bp->flags & BNXT_FLAG_SHORT_CMD) { | 3378 | if (bp->flags & BNXT_FLAG_SHORT_CMD) { |
| 3378 | void *short_cmd_req = bp->hwrm_short_cmd_req_addr; | 3379 | void *short_cmd_req = bp->hwrm_short_cmd_req_addr; |
| 3379 | struct hwrm_short_input short_input = {0}; | ||
| 3380 | 3380 | ||
| 3381 | memcpy(short_cmd_req, req, msg_len); | 3381 | memcpy(short_cmd_req, req, msg_len); |
| 3382 | memset(short_cmd_req + msg_len, 0, BNXT_HWRM_MAX_REQ_LEN - | 3382 | memset(short_cmd_req + msg_len, 0, BNXT_HWRM_MAX_REQ_LEN - |
| @@ -8263,8 +8263,9 @@ static void bnxt_shutdown(struct pci_dev *pdev) | |||
| 8263 | if (netif_running(dev)) | 8263 | if (netif_running(dev)) |
| 8264 | dev_close(dev); | 8264 | dev_close(dev); |
| 8265 | 8265 | ||
| 8266 | bnxt_ulp_shutdown(bp); | ||
| 8267 | |||
| 8266 | if (system_state == SYSTEM_POWER_OFF) { | 8268 | if (system_state == SYSTEM_POWER_OFF) { |
| 8267 | bnxt_ulp_shutdown(bp); | ||
| 8268 | bnxt_clear_int_mode(bp); | 8269 | bnxt_clear_int_mode(bp); |
| 8269 | pci_wake_from_d3(pdev, bp->wol); | 8270 | pci_wake_from_d3(pdev, bp->wol); |
| 8270 | pci_set_power_state(pdev, PCI_D3hot); | 8271 | pci_set_power_state(pdev, PCI_D3hot); |
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c index 7ce1d4b7e67d..b13ce5ebde8d 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | |||
| @@ -2136,8 +2136,8 @@ static int bnxt_get_module_eeprom(struct net_device *dev, | |||
| 2136 | /* Read A2 portion of the EEPROM */ | 2136 | /* Read A2 portion of the EEPROM */ |
| 2137 | if (length) { | 2137 | if (length) { |
| 2138 | start -= ETH_MODULE_SFF_8436_LEN; | 2138 | start -= ETH_MODULE_SFF_8436_LEN; |
| 2139 | bnxt_read_sfp_module_eeprom_info(bp, I2C_DEV_ADDR_A2, 1, start, | 2139 | rc = bnxt_read_sfp_module_eeprom_info(bp, I2C_DEV_ADDR_A2, 1, |
| 2140 | length, data); | 2140 | start, length, data); |
| 2141 | } | 2141 | } |
| 2142 | return rc; | 2142 | return rc; |
| 2143 | } | 2143 | } |
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c index d5031f436f83..3d201d7324bd 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c | |||
| @@ -56,7 +56,6 @@ static int bnxt_tc_parse_redir(struct bnxt *bp, | |||
| 56 | { | 56 | { |
| 57 | int ifindex = tcf_mirred_ifindex(tc_act); | 57 | int ifindex = tcf_mirred_ifindex(tc_act); |
| 58 | struct net_device *dev; | 58 | struct net_device *dev; |
| 59 | u16 dst_fid; | ||
| 60 | 59 | ||
| 61 | dev = __dev_get_by_index(dev_net(bp->dev), ifindex); | 60 | dev = __dev_get_by_index(dev_net(bp->dev), ifindex); |
| 62 | if (!dev) { | 61 | if (!dev) { |
| @@ -64,15 +63,7 @@ static int bnxt_tc_parse_redir(struct bnxt *bp, | |||
| 64 | return -EINVAL; | 63 | return -EINVAL; |
| 65 | } | 64 | } |
| 66 | 65 | ||
| 67 | /* find the FID from dev */ | ||
| 68 | dst_fid = bnxt_flow_get_dst_fid(bp, dev); | ||
| 69 | if (dst_fid == BNXT_FID_INVALID) { | ||
| 70 | netdev_info(bp->dev, "can't get fid for ifindex=%d", ifindex); | ||
| 71 | return -EINVAL; | ||
| 72 | } | ||
| 73 | |||
| 74 | actions->flags |= BNXT_TC_ACTION_FLAG_FWD; | 66 | actions->flags |= BNXT_TC_ACTION_FLAG_FWD; |
| 75 | actions->dst_fid = dst_fid; | ||
| 76 | actions->dst_dev = dev; | 67 | actions->dst_dev = dev; |
| 77 | return 0; | 68 | return 0; |
| 78 | } | 69 | } |
| @@ -160,13 +151,17 @@ static int bnxt_tc_parse_actions(struct bnxt *bp, | |||
| 160 | if (rc) | 151 | if (rc) |
| 161 | return rc; | 152 | return rc; |
| 162 | 153 | ||
| 163 | /* Tunnel encap/decap action must be accompanied by a redirect action */ | 154 | if (actions->flags & BNXT_TC_ACTION_FLAG_FWD) { |
| 164 | if ((actions->flags & BNXT_TC_ACTION_FLAG_TUNNEL_ENCAP || | 155 | if (actions->flags & BNXT_TC_ACTION_FLAG_TUNNEL_ENCAP) { |
| 165 | actions->flags & BNXT_TC_ACTION_FLAG_TUNNEL_DECAP) && | 156 | /* dst_fid is PF's fid */ |
| 166 | !(actions->flags & BNXT_TC_ACTION_FLAG_FWD)) { | 157 | actions->dst_fid = bp->pf.fw_fid; |
| 167 | netdev_info(bp->dev, | 158 | } else { |
| 168 | "error: no redir action along with encap/decap"); | 159 | /* find the FID from dst_dev */ |
| 169 | return -EINVAL; | 160 | actions->dst_fid = |
| 161 | bnxt_flow_get_dst_fid(bp, actions->dst_dev); | ||
| 162 | if (actions->dst_fid == BNXT_FID_INVALID) | ||
| 163 | return -EINVAL; | ||
| 164 | } | ||
| 170 | } | 165 | } |
| 171 | 166 | ||
| 172 | return rc; | 167 | return rc; |
| @@ -532,10 +527,8 @@ static int hwrm_cfa_decap_filter_alloc(struct bnxt *bp, | |||
| 532 | } | 527 | } |
| 533 | 528 | ||
| 534 | if (flow->flags & BNXT_TC_FLOW_FLAGS_TUNL_ETH_ADDRS) { | 529 | if (flow->flags & BNXT_TC_FLOW_FLAGS_TUNL_ETH_ADDRS) { |
| 535 | enables |= CFA_DECAP_FILTER_ALLOC_REQ_ENABLES_DST_MACADDR | | 530 | enables |= CFA_DECAP_FILTER_ALLOC_REQ_ENABLES_DST_MACADDR; |
| 536 | CFA_DECAP_FILTER_ALLOC_REQ_ENABLES_SRC_MACADDR; | ||
| 537 | ether_addr_copy(req.dst_macaddr, l2_info->dmac); | 531 | ether_addr_copy(req.dst_macaddr, l2_info->dmac); |
| 538 | ether_addr_copy(req.src_macaddr, l2_info->smac); | ||
| 539 | } | 532 | } |
| 540 | if (l2_info->num_vlans) { | 533 | if (l2_info->num_vlans) { |
| 541 | enables |= CFA_DECAP_FILTER_ALLOC_REQ_ENABLES_T_IVLAN_VID; | 534 | enables |= CFA_DECAP_FILTER_ALLOC_REQ_ENABLES_T_IVLAN_VID; |
| @@ -901,10 +894,10 @@ static void bnxt_tc_put_decap_handle(struct bnxt *bp, | |||
| 901 | 894 | ||
| 902 | static int bnxt_tc_resolve_tunnel_hdrs(struct bnxt *bp, | 895 | static int bnxt_tc_resolve_tunnel_hdrs(struct bnxt *bp, |
| 903 | struct ip_tunnel_key *tun_key, | 896 | struct ip_tunnel_key *tun_key, |
| 904 | struct bnxt_tc_l2_key *l2_info, | 897 | struct bnxt_tc_l2_key *l2_info) |
| 905 | struct net_device *real_dst_dev) | ||
| 906 | { | 898 | { |
| 907 | #ifdef CONFIG_INET | 899 | #ifdef CONFIG_INET |
| 900 | struct net_device *real_dst_dev = bp->dev; | ||
| 908 | struct flowi4 flow = { {0} }; | 901 | struct flowi4 flow = { {0} }; |
| 909 | struct net_device *dst_dev; | 902 | struct net_device *dst_dev; |
| 910 | struct neighbour *nbr; | 903 | struct neighbour *nbr; |
| @@ -1008,14 +1001,13 @@ static int bnxt_tc_get_decap_handle(struct bnxt *bp, struct bnxt_tc_flow *flow, | |||
| 1008 | */ | 1001 | */ |
| 1009 | tun_key.u.ipv4.dst = flow->tun_key.u.ipv4.src; | 1002 | tun_key.u.ipv4.dst = flow->tun_key.u.ipv4.src; |
| 1010 | tun_key.tp_dst = flow->tun_key.tp_dst; | 1003 | tun_key.tp_dst = flow->tun_key.tp_dst; |
| 1011 | rc = bnxt_tc_resolve_tunnel_hdrs(bp, &tun_key, &l2_info, bp->dev); | 1004 | rc = bnxt_tc_resolve_tunnel_hdrs(bp, &tun_key, &l2_info); |
| 1012 | if (rc) | 1005 | if (rc) |
| 1013 | goto put_decap; | 1006 | goto put_decap; |
| 1014 | 1007 | ||
| 1015 | decap_key->ttl = tun_key.ttl; | ||
| 1016 | decap_l2_info = &decap_node->l2_info; | 1008 | decap_l2_info = &decap_node->l2_info; |
| 1009 | /* decap smac is wildcarded */ | ||
| 1017 | ether_addr_copy(decap_l2_info->dmac, l2_info.smac); | 1010 | ether_addr_copy(decap_l2_info->dmac, l2_info.smac); |
| 1018 | ether_addr_copy(decap_l2_info->smac, l2_info.dmac); | ||
| 1019 | if (l2_info.num_vlans) { | 1011 | if (l2_info.num_vlans) { |
| 1020 | decap_l2_info->num_vlans = l2_info.num_vlans; | 1012 | decap_l2_info->num_vlans = l2_info.num_vlans; |
| 1021 | decap_l2_info->inner_vlan_tpid = l2_info.inner_vlan_tpid; | 1013 | decap_l2_info->inner_vlan_tpid = l2_info.inner_vlan_tpid; |
| @@ -1095,8 +1087,7 @@ static int bnxt_tc_get_encap_handle(struct bnxt *bp, struct bnxt_tc_flow *flow, | |||
| 1095 | if (encap_node->tunnel_handle != INVALID_TUNNEL_HANDLE) | 1087 | if (encap_node->tunnel_handle != INVALID_TUNNEL_HANDLE) |
| 1096 | goto done; | 1088 | goto done; |
| 1097 | 1089 | ||
| 1098 | rc = bnxt_tc_resolve_tunnel_hdrs(bp, encap_key, &encap_node->l2_info, | 1090 | rc = bnxt_tc_resolve_tunnel_hdrs(bp, encap_key, &encap_node->l2_info); |
| 1099 | flow->actions.dst_dev); | ||
| 1100 | if (rc) | 1091 | if (rc) |
| 1101 | goto put_encap; | 1092 | goto put_encap; |
| 1102 | 1093 | ||
| @@ -1169,6 +1160,15 @@ static int __bnxt_tc_del_flow(struct bnxt *bp, | |||
| 1169 | return 0; | 1160 | return 0; |
| 1170 | } | 1161 | } |
| 1171 | 1162 | ||
| 1163 | static void bnxt_tc_set_src_fid(struct bnxt *bp, struct bnxt_tc_flow *flow, | ||
| 1164 | u16 src_fid) | ||
| 1165 | { | ||
| 1166 | if (flow->actions.flags & BNXT_TC_ACTION_FLAG_TUNNEL_DECAP) | ||
| 1167 | flow->src_fid = bp->pf.fw_fid; | ||
| 1168 | else | ||
| 1169 | flow->src_fid = src_fid; | ||
| 1170 | } | ||
| 1171 | |||
| 1172 | /* Add a new flow or replace an existing flow. | 1172 | /* Add a new flow or replace an existing flow. |
| 1173 | * Notes on locking: | 1173 | * Notes on locking: |
| 1174 | * There are essentially two critical sections here. | 1174 | * There are essentially two critical sections here. |
| @@ -1204,7 +1204,8 @@ static int bnxt_tc_add_flow(struct bnxt *bp, u16 src_fid, | |||
| 1204 | rc = bnxt_tc_parse_flow(bp, tc_flow_cmd, flow); | 1204 | rc = bnxt_tc_parse_flow(bp, tc_flow_cmd, flow); |
| 1205 | if (rc) | 1205 | if (rc) |
| 1206 | goto free_node; | 1206 | goto free_node; |
| 1207 | flow->src_fid = src_fid; | 1207 | |
| 1208 | bnxt_tc_set_src_fid(bp, flow, src_fid); | ||
| 1208 | 1209 | ||
| 1209 | if (!bnxt_tc_can_offload(bp, flow)) { | 1210 | if (!bnxt_tc_can_offload(bp, flow)) { |
| 1210 | rc = -ENOSPC; | 1211 | rc = -ENOSPC; |
diff --git a/drivers/net/ethernet/cavium/liquidio/lio_main.c b/drivers/net/ethernet/cavium/liquidio/lio_main.c index 6aa0eee88ea5..a5eecd895a82 100644 --- a/drivers/net/ethernet/cavium/liquidio/lio_main.c +++ b/drivers/net/ethernet/cavium/liquidio/lio_main.c | |||
| @@ -1113,7 +1113,7 @@ static int liquidio_watchdog(void *param) | |||
| 1113 | dev_err(&oct->pci_dev->dev, | 1113 | dev_err(&oct->pci_dev->dev, |
| 1114 | "ERROR: Octeon core %d crashed or got stuck! See oct-fwdump for details.\n", | 1114 | "ERROR: Octeon core %d crashed or got stuck! See oct-fwdump for details.\n", |
| 1115 | core); | 1115 | core); |
| 1116 | err_msg_was_printed[core] = true; | 1116 | err_msg_was_printed[core] = true; |
| 1117 | } | 1117 | } |
| 1118 | } | 1118 | } |
| 1119 | 1119 | ||
diff --git a/drivers/net/ethernet/cavium/thunder/nicvf_queues.c b/drivers/net/ethernet/cavium/thunder/nicvf_queues.c index d4496e9afcdf..a3d12dbde95b 100644 --- a/drivers/net/ethernet/cavium/thunder/nicvf_queues.c +++ b/drivers/net/ethernet/cavium/thunder/nicvf_queues.c | |||
| @@ -1355,7 +1355,8 @@ nicvf_sq_add_hdr_subdesc(struct nicvf *nic, struct snd_queue *sq, int qentry, | |||
| 1355 | 1355 | ||
| 1356 | /* Offload checksum calculation to HW */ | 1356 | /* Offload checksum calculation to HW */ |
| 1357 | if (skb->ip_summed == CHECKSUM_PARTIAL) { | 1357 | if (skb->ip_summed == CHECKSUM_PARTIAL) { |
| 1358 | hdr->csum_l3 = 1; /* Enable IP csum calculation */ | 1358 | if (ip.v4->version == 4) |
| 1359 | hdr->csum_l3 = 1; /* Enable IP csum calculation */ | ||
| 1359 | hdr->l3_offset = skb_network_offset(skb); | 1360 | hdr->l3_offset = skb_network_offset(skb); |
| 1360 | hdr->l4_offset = skb_transport_offset(skb); | 1361 | hdr->l4_offset = skb_transport_offset(skb); |
| 1361 | 1362 | ||
diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c index 5be52d89b182..7f837006bb6a 100644 --- a/drivers/net/ethernet/freescale/gianfar.c +++ b/drivers/net/ethernet/freescale/gianfar.c | |||
| @@ -1378,9 +1378,11 @@ static int gfar_probe(struct platform_device *ofdev) | |||
| 1378 | 1378 | ||
| 1379 | gfar_init_addr_hash_table(priv); | 1379 | gfar_init_addr_hash_table(priv); |
| 1380 | 1380 | ||
| 1381 | /* Insert receive time stamps into padding alignment bytes */ | 1381 | /* Insert receive time stamps into padding alignment bytes, and |
| 1382 | * plus 2 bytes padding to ensure the cpu alignment. | ||
| 1383 | */ | ||
| 1382 | if (priv->device_flags & FSL_GIANFAR_DEV_HAS_TIMER) | 1384 | if (priv->device_flags & FSL_GIANFAR_DEV_HAS_TIMER) |
| 1383 | priv->padding = 8; | 1385 | priv->padding = 8 + DEFAULT_PADDING; |
| 1384 | 1386 | ||
| 1385 | if (dev->features & NETIF_F_IP_CSUM || | 1387 | if (dev->features & NETIF_F_IP_CSUM || |
| 1386 | priv->device_flags & FSL_GIANFAR_DEV_HAS_TIMER) | 1388 | priv->device_flags & FSL_GIANFAR_DEV_HAS_TIMER) |
| @@ -1790,6 +1792,7 @@ static int init_phy(struct net_device *dev) | |||
| 1790 | GFAR_SUPPORTED_GBIT : 0; | 1792 | GFAR_SUPPORTED_GBIT : 0; |
| 1791 | phy_interface_t interface; | 1793 | phy_interface_t interface; |
| 1792 | struct phy_device *phydev; | 1794 | struct phy_device *phydev; |
| 1795 | struct ethtool_eee edata; | ||
| 1793 | 1796 | ||
| 1794 | priv->oldlink = 0; | 1797 | priv->oldlink = 0; |
| 1795 | priv->oldspeed = 0; | 1798 | priv->oldspeed = 0; |
| @@ -1814,6 +1817,10 @@ static int init_phy(struct net_device *dev) | |||
| 1814 | /* Add support for flow control, but don't advertise it by default */ | 1817 | /* Add support for flow control, but don't advertise it by default */ |
| 1815 | phydev->supported |= (SUPPORTED_Pause | SUPPORTED_Asym_Pause); | 1818 | phydev->supported |= (SUPPORTED_Pause | SUPPORTED_Asym_Pause); |
| 1816 | 1819 | ||
| 1820 | /* disable EEE autoneg, EEE not supported by eTSEC */ | ||
| 1821 | memset(&edata, 0, sizeof(struct ethtool_eee)); | ||
| 1822 | phy_ethtool_set_eee(phydev, &edata); | ||
| 1823 | |||
| 1817 | return 0; | 1824 | return 0; |
| 1818 | } | 1825 | } |
| 1819 | 1826 | ||
diff --git a/drivers/net/ethernet/intel/e1000/e1000_hw.c b/drivers/net/ethernet/intel/e1000/e1000_hw.c index 8172cf08cc33..3bac9df1c099 100644 --- a/drivers/net/ethernet/intel/e1000/e1000_hw.c +++ b/drivers/net/ethernet/intel/e1000/e1000_hw.c | |||
| @@ -4307,8 +4307,10 @@ static void e1000_init_rx_addrs(struct e1000_hw *hw) | |||
| 4307 | 4307 | ||
| 4308 | rar_num = E1000_RAR_ENTRIES; | 4308 | rar_num = E1000_RAR_ENTRIES; |
| 4309 | 4309 | ||
| 4310 | /* Zero out the other 15 receive addresses. */ | 4310 | /* Zero out the following 14 receive addresses. RAR[15] is for |
| 4311 | e_dbg("Clearing RAR[1-15]\n"); | 4311 | * manageability |
| 4312 | */ | ||
| 4313 | e_dbg("Clearing RAR[1-14]\n"); | ||
| 4312 | for (i = 1; i < rar_num; i++) { | 4314 | for (i = 1; i < rar_num; i++) { |
| 4313 | E1000_WRITE_REG_ARRAY(hw, RA, (i << 1), 0); | 4315 | E1000_WRITE_REG_ARRAY(hw, RA, (i << 1), 0); |
| 4314 | E1000_WRITE_FLUSH(); | 4316 | E1000_WRITE_FLUSH(); |
diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.h b/drivers/net/ethernet/intel/e1000e/ich8lan.h index 67163ca898ba..00a36df02a3f 100644 --- a/drivers/net/ethernet/intel/e1000e/ich8lan.h +++ b/drivers/net/ethernet/intel/e1000e/ich8lan.h | |||
| @@ -113,7 +113,8 @@ | |||
| 113 | #define NVM_SIZE_MULTIPLIER 4096 /*multiplier for NVMS field */ | 113 | #define NVM_SIZE_MULTIPLIER 4096 /*multiplier for NVMS field */ |
| 114 | #define E1000_FLASH_BASE_ADDR 0xE000 /*offset of NVM access regs */ | 114 | #define E1000_FLASH_BASE_ADDR 0xE000 /*offset of NVM access regs */ |
| 115 | #define E1000_CTRL_EXT_NVMVS 0x3 /*NVM valid sector */ | 115 | #define E1000_CTRL_EXT_NVMVS 0x3 /*NVM valid sector */ |
| 116 | #define E1000_TARC0_CB_MULTIQ_3_REQ (1 << 28 | 1 << 29) | 116 | #define E1000_TARC0_CB_MULTIQ_3_REQ 0x30000000 |
| 117 | #define E1000_TARC0_CB_MULTIQ_2_REQ 0x20000000 | ||
| 117 | #define PCIE_ICH8_SNOOP_ALL PCIE_NO_SNOOP_ALL | 118 | #define PCIE_ICH8_SNOOP_ALL PCIE_NO_SNOOP_ALL |
| 118 | 119 | ||
| 119 | #define E1000_ICH_RAR_ENTRIES 7 | 120 | #define E1000_ICH_RAR_ENTRIES 7 |
diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c index f2f49239b015..9f18d39bdc8f 100644 --- a/drivers/net/ethernet/intel/e1000e/netdev.c +++ b/drivers/net/ethernet/intel/e1000e/netdev.c | |||
| @@ -3034,9 +3034,12 @@ static void e1000_configure_tx(struct e1000_adapter *adapter) | |||
| 3034 | ew32(IOSFPC, reg_val); | 3034 | ew32(IOSFPC, reg_val); |
| 3035 | 3035 | ||
| 3036 | reg_val = er32(TARC(0)); | 3036 | reg_val = er32(TARC(0)); |
| 3037 | /* SPT and KBL Si errata workaround to avoid Tx hang */ | 3037 | /* SPT and KBL Si errata workaround to avoid Tx hang. |
| 3038 | reg_val &= ~BIT(28); | 3038 | * Dropping the number of outstanding requests from |
| 3039 | reg_val |= BIT(29); | 3039 | * 3 to 2 in order to avoid a buffer overrun. |
| 3040 | */ | ||
| 3041 | reg_val &= ~E1000_TARC0_CB_MULTIQ_3_REQ; | ||
| 3042 | reg_val |= E1000_TARC0_CB_MULTIQ_2_REQ; | ||
| 3040 | ew32(TARC(0), reg_val); | 3043 | ew32(TARC(0), reg_val); |
| 3041 | } | 3044 | } |
| 3042 | } | 3045 | } |
diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c index 4c08cc86463e..321d8be80871 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_main.c +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c | |||
| @@ -7401,7 +7401,6 @@ static int i40e_configure_clsflower(struct i40e_vsi *vsi, | |||
| 7401 | dev_err(&pf->pdev->dev, | 7401 | dev_err(&pf->pdev->dev, |
| 7402 | "Failed to add cloud filter, err %s\n", | 7402 | "Failed to add cloud filter, err %s\n", |
| 7403 | i40e_stat_str(&pf->hw, err)); | 7403 | i40e_stat_str(&pf->hw, err)); |
| 7404 | err = i40e_aq_rc_to_posix(err, pf->hw.aq.asq_last_status); | ||
| 7405 | goto err; | 7404 | goto err; |
| 7406 | } | 7405 | } |
| 7407 | 7406 | ||
diff --git a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c index a3dc9b932946..36cb8e068e85 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c +++ b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | |||
| @@ -2086,7 +2086,7 @@ static int i40e_vc_request_queues_msg(struct i40e_vf *vf, u8 *msg, int msglen) | |||
| 2086 | } | 2086 | } |
| 2087 | 2087 | ||
| 2088 | return i40e_vc_send_msg_to_vf(vf, VIRTCHNL_OP_REQUEST_QUEUES, 0, | 2088 | return i40e_vc_send_msg_to_vf(vf, VIRTCHNL_OP_REQUEST_QUEUES, 0, |
| 2089 | (u8 *)vfres, sizeof(vfres)); | 2089 | (u8 *)vfres, sizeof(*vfres)); |
| 2090 | } | 2090 | } |
| 2091 | 2091 | ||
| 2092 | /** | 2092 | /** |
diff --git a/drivers/net/ethernet/marvell/mvmdio.c b/drivers/net/ethernet/marvell/mvmdio.c index c9798210fa0f..0495487f7b42 100644 --- a/drivers/net/ethernet/marvell/mvmdio.c +++ b/drivers/net/ethernet/marvell/mvmdio.c | |||
| @@ -344,7 +344,8 @@ static int orion_mdio_probe(struct platform_device *pdev) | |||
| 344 | dev->regs + MVMDIO_ERR_INT_MASK); | 344 | dev->regs + MVMDIO_ERR_INT_MASK); |
| 345 | 345 | ||
| 346 | } else if (dev->err_interrupt == -EPROBE_DEFER) { | 346 | } else if (dev->err_interrupt == -EPROBE_DEFER) { |
| 347 | return -EPROBE_DEFER; | 347 | ret = -EPROBE_DEFER; |
| 348 | goto out_mdio; | ||
| 348 | } | 349 | } |
| 349 | 350 | ||
| 350 | if (pdev->dev.of_node) | 351 | if (pdev->dev.of_node) |
diff --git a/drivers/net/ethernet/marvell/mvpp2.c b/drivers/net/ethernet/marvell/mvpp2.c index 6c20e811f973..634b2f41cc9e 100644 --- a/drivers/net/ethernet/marvell/mvpp2.c +++ b/drivers/net/ethernet/marvell/mvpp2.c | |||
| @@ -85,7 +85,7 @@ | |||
| 85 | 85 | ||
| 86 | /* RSS Registers */ | 86 | /* RSS Registers */ |
| 87 | #define MVPP22_RSS_INDEX 0x1500 | 87 | #define MVPP22_RSS_INDEX 0x1500 |
| 88 | #define MVPP22_RSS_INDEX_TABLE_ENTRY(idx) ((idx) << 8) | 88 | #define MVPP22_RSS_INDEX_TABLE_ENTRY(idx) (idx) |
| 89 | #define MVPP22_RSS_INDEX_TABLE(idx) ((idx) << 8) | 89 | #define MVPP22_RSS_INDEX_TABLE(idx) ((idx) << 8) |
| 90 | #define MVPP22_RSS_INDEX_QUEUE(idx) ((idx) << 16) | 90 | #define MVPP22_RSS_INDEX_QUEUE(idx) ((idx) << 16) |
| 91 | #define MVPP22_RSS_TABLE_ENTRY 0x1508 | 91 | #define MVPP22_RSS_TABLE_ENTRY 0x1508 |
| @@ -4629,11 +4629,6 @@ static void mvpp2_port_mii_gmac_configure_mode(struct mvpp2_port *port) | |||
| 4629 | MVPP22_CTRL4_QSGMII_BYPASS_ACTIVE; | 4629 | MVPP22_CTRL4_QSGMII_BYPASS_ACTIVE; |
| 4630 | val &= ~MVPP22_CTRL4_EXT_PIN_GMII_SEL; | 4630 | val &= ~MVPP22_CTRL4_EXT_PIN_GMII_SEL; |
| 4631 | writel(val, port->base + MVPP22_GMAC_CTRL_4_REG); | 4631 | writel(val, port->base + MVPP22_GMAC_CTRL_4_REG); |
| 4632 | |||
| 4633 | val = readl(port->base + MVPP2_GMAC_CTRL_2_REG); | ||
| 4634 | val |= MVPP2_GMAC_DISABLE_PADDING; | ||
| 4635 | val &= ~MVPP2_GMAC_FLOW_CTRL_MASK; | ||
| 4636 | writel(val, port->base + MVPP2_GMAC_CTRL_2_REG); | ||
| 4637 | } else if (phy_interface_mode_is_rgmii(port->phy_interface)) { | 4632 | } else if (phy_interface_mode_is_rgmii(port->phy_interface)) { |
| 4638 | val = readl(port->base + MVPP22_GMAC_CTRL_4_REG); | 4633 | val = readl(port->base + MVPP22_GMAC_CTRL_4_REG); |
| 4639 | val |= MVPP22_CTRL4_EXT_PIN_GMII_SEL | | 4634 | val |= MVPP22_CTRL4_EXT_PIN_GMII_SEL | |
| @@ -4641,10 +4636,6 @@ static void mvpp2_port_mii_gmac_configure_mode(struct mvpp2_port *port) | |||
| 4641 | MVPP22_CTRL4_QSGMII_BYPASS_ACTIVE; | 4636 | MVPP22_CTRL4_QSGMII_BYPASS_ACTIVE; |
| 4642 | val &= ~MVPP22_CTRL4_DP_CLK_SEL; | 4637 | val &= ~MVPP22_CTRL4_DP_CLK_SEL; |
| 4643 | writel(val, port->base + MVPP22_GMAC_CTRL_4_REG); | 4638 | writel(val, port->base + MVPP22_GMAC_CTRL_4_REG); |
| 4644 | |||
| 4645 | val = readl(port->base + MVPP2_GMAC_CTRL_2_REG); | ||
| 4646 | val &= ~MVPP2_GMAC_DISABLE_PADDING; | ||
| 4647 | writel(val, port->base + MVPP2_GMAC_CTRL_2_REG); | ||
| 4648 | } | 4639 | } |
| 4649 | 4640 | ||
| 4650 | /* The port is connected to a copper PHY */ | 4641 | /* The port is connected to a copper PHY */ |
| @@ -5607,7 +5598,7 @@ static int mvpp2_aggr_txq_init(struct platform_device *pdev, | |||
| 5607 | u32 txq_dma; | 5598 | u32 txq_dma; |
| 5608 | 5599 | ||
| 5609 | /* Allocate memory for TX descriptors */ | 5600 | /* Allocate memory for TX descriptors */ |
| 5610 | aggr_txq->descs = dma_alloc_coherent(&pdev->dev, | 5601 | aggr_txq->descs = dma_zalloc_coherent(&pdev->dev, |
| 5611 | MVPP2_AGGR_TXQ_SIZE * MVPP2_DESC_ALIGNED_SIZE, | 5602 | MVPP2_AGGR_TXQ_SIZE * MVPP2_DESC_ALIGNED_SIZE, |
| 5612 | &aggr_txq->descs_dma, GFP_KERNEL); | 5603 | &aggr_txq->descs_dma, GFP_KERNEL); |
| 5613 | if (!aggr_txq->descs) | 5604 | if (!aggr_txq->descs) |
| @@ -5805,7 +5796,7 @@ static int mvpp2_txq_init(struct mvpp2_port *port, | |||
| 5805 | sizeof(*txq_pcpu->buffs), | 5796 | sizeof(*txq_pcpu->buffs), |
| 5806 | GFP_KERNEL); | 5797 | GFP_KERNEL); |
| 5807 | if (!txq_pcpu->buffs) | 5798 | if (!txq_pcpu->buffs) |
| 5808 | goto cleanup; | 5799 | return -ENOMEM; |
| 5809 | 5800 | ||
| 5810 | txq_pcpu->count = 0; | 5801 | txq_pcpu->count = 0; |
| 5811 | txq_pcpu->reserved_num = 0; | 5802 | txq_pcpu->reserved_num = 0; |
| @@ -5821,26 +5812,10 @@ static int mvpp2_txq_init(struct mvpp2_port *port, | |||
| 5821 | &txq_pcpu->tso_headers_dma, | 5812 | &txq_pcpu->tso_headers_dma, |
| 5822 | GFP_KERNEL); | 5813 | GFP_KERNEL); |
| 5823 | if (!txq_pcpu->tso_headers) | 5814 | if (!txq_pcpu->tso_headers) |
| 5824 | goto cleanup; | 5815 | return -ENOMEM; |
| 5825 | } | 5816 | } |
| 5826 | 5817 | ||
| 5827 | return 0; | 5818 | return 0; |
| 5828 | cleanup: | ||
| 5829 | for_each_present_cpu(cpu) { | ||
| 5830 | txq_pcpu = per_cpu_ptr(txq->pcpu, cpu); | ||
| 5831 | kfree(txq_pcpu->buffs); | ||
| 5832 | |||
| 5833 | dma_free_coherent(port->dev->dev.parent, | ||
| 5834 | txq_pcpu->size * TSO_HEADER_SIZE, | ||
| 5835 | txq_pcpu->tso_headers, | ||
| 5836 | txq_pcpu->tso_headers_dma); | ||
| 5837 | } | ||
| 5838 | |||
| 5839 | dma_free_coherent(port->dev->dev.parent, | ||
| 5840 | txq->size * MVPP2_DESC_ALIGNED_SIZE, | ||
| 5841 | txq->descs, txq->descs_dma); | ||
| 5842 | |||
| 5843 | return -ENOMEM; | ||
| 5844 | } | 5819 | } |
| 5845 | 5820 | ||
| 5846 | /* Free allocated TXQ resources */ | 5821 | /* Free allocated TXQ resources */ |
| @@ -6867,6 +6842,12 @@ static int mvpp2_check_ringparam_valid(struct net_device *dev, | |||
| 6867 | else if (!IS_ALIGNED(ring->tx_pending, 32)) | 6842 | else if (!IS_ALIGNED(ring->tx_pending, 32)) |
| 6868 | new_tx_pending = ALIGN(ring->tx_pending, 32); | 6843 | new_tx_pending = ALIGN(ring->tx_pending, 32); |
| 6869 | 6844 | ||
| 6845 | /* The Tx ring size cannot be smaller than the minimum number of | ||
| 6846 | * descriptors needed for TSO. | ||
| 6847 | */ | ||
| 6848 | if (new_tx_pending < MVPP2_MAX_SKB_DESCS) | ||
| 6849 | new_tx_pending = ALIGN(MVPP2_MAX_SKB_DESCS, 32); | ||
| 6850 | |||
| 6870 | if (ring->rx_pending != new_rx_pending) { | 6851 | if (ring->rx_pending != new_rx_pending) { |
| 6871 | netdev_info(dev, "illegal Rx ring size value %d, round to %d\n", | 6852 | netdev_info(dev, "illegal Rx ring size value %d, round to %d\n", |
| 6872 | ring->rx_pending, new_rx_pending); | 6853 | ring->rx_pending, new_rx_pending); |
| @@ -8345,7 +8326,7 @@ static int mvpp2_probe(struct platform_device *pdev) | |||
| 8345 | for_each_available_child_of_node(dn, port_node) { | 8326 | for_each_available_child_of_node(dn, port_node) { |
| 8346 | err = mvpp2_port_probe(pdev, port_node, priv, i); | 8327 | err = mvpp2_port_probe(pdev, port_node, priv, i); |
| 8347 | if (err < 0) | 8328 | if (err < 0) |
| 8348 | goto err_mg_clk; | 8329 | goto err_port_probe; |
| 8349 | i++; | 8330 | i++; |
| 8350 | } | 8331 | } |
| 8351 | 8332 | ||
| @@ -8361,12 +8342,19 @@ static int mvpp2_probe(struct platform_device *pdev) | |||
| 8361 | priv->stats_queue = create_singlethread_workqueue(priv->queue_name); | 8342 | priv->stats_queue = create_singlethread_workqueue(priv->queue_name); |
| 8362 | if (!priv->stats_queue) { | 8343 | if (!priv->stats_queue) { |
| 8363 | err = -ENOMEM; | 8344 | err = -ENOMEM; |
| 8364 | goto err_mg_clk; | 8345 | goto err_port_probe; |
| 8365 | } | 8346 | } |
| 8366 | 8347 | ||
| 8367 | platform_set_drvdata(pdev, priv); | 8348 | platform_set_drvdata(pdev, priv); |
| 8368 | return 0; | 8349 | return 0; |
| 8369 | 8350 | ||
| 8351 | err_port_probe: | ||
| 8352 | i = 0; | ||
| 8353 | for_each_available_child_of_node(dn, port_node) { | ||
| 8354 | if (priv->port_list[i]) | ||
| 8355 | mvpp2_port_remove(priv->port_list[i]); | ||
| 8356 | i++; | ||
| 8357 | } | ||
| 8370 | err_mg_clk: | 8358 | err_mg_clk: |
| 8371 | clk_disable_unprepare(priv->axi_clk); | 8359 | clk_disable_unprepare(priv->axi_clk); |
| 8372 | if (priv->hw_version == MVPP22) | 8360 | if (priv->hw_version == MVPP22) |
diff --git a/drivers/net/ethernet/marvell/skge.c b/drivers/net/ethernet/marvell/skge.c index 6e423f098a60..31efc47c847e 100644 --- a/drivers/net/ethernet/marvell/skge.c +++ b/drivers/net/ethernet/marvell/skge.c | |||
| @@ -4081,7 +4081,6 @@ static void skge_remove(struct pci_dev *pdev) | |||
| 4081 | if (hw->ports > 1) { | 4081 | if (hw->ports > 1) { |
| 4082 | skge_write32(hw, B0_IMSK, 0); | 4082 | skge_write32(hw, B0_IMSK, 0); |
| 4083 | skge_read32(hw, B0_IMSK); | 4083 | skge_read32(hw, B0_IMSK); |
| 4084 | free_irq(pdev->irq, hw); | ||
| 4085 | } | 4084 | } |
| 4086 | spin_unlock_irq(&hw->hw_lock); | 4085 | spin_unlock_irq(&hw->hw_lock); |
| 4087 | 4086 | ||
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_port.c b/drivers/net/ethernet/mellanox/mlx4/en_port.c index e0eb695318e6..1fa4849a6f56 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_port.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_port.c | |||
| @@ -188,7 +188,7 @@ int mlx4_en_DUMP_ETH_STATS(struct mlx4_en_dev *mdev, u8 port, u8 reset) | |||
| 188 | struct net_device *dev = mdev->pndev[port]; | 188 | struct net_device *dev = mdev->pndev[port]; |
| 189 | struct mlx4_en_priv *priv = netdev_priv(dev); | 189 | struct mlx4_en_priv *priv = netdev_priv(dev); |
| 190 | struct net_device_stats *stats = &dev->stats; | 190 | struct net_device_stats *stats = &dev->stats; |
| 191 | struct mlx4_cmd_mailbox *mailbox; | 191 | struct mlx4_cmd_mailbox *mailbox, *mailbox_priority; |
| 192 | u64 in_mod = reset << 8 | port; | 192 | u64 in_mod = reset << 8 | port; |
| 193 | int err; | 193 | int err; |
| 194 | int i, counter_index; | 194 | int i, counter_index; |
| @@ -198,6 +198,13 @@ int mlx4_en_DUMP_ETH_STATS(struct mlx4_en_dev *mdev, u8 port, u8 reset) | |||
| 198 | mailbox = mlx4_alloc_cmd_mailbox(mdev->dev); | 198 | mailbox = mlx4_alloc_cmd_mailbox(mdev->dev); |
| 199 | if (IS_ERR(mailbox)) | 199 | if (IS_ERR(mailbox)) |
| 200 | return PTR_ERR(mailbox); | 200 | return PTR_ERR(mailbox); |
| 201 | |||
| 202 | mailbox_priority = mlx4_alloc_cmd_mailbox(mdev->dev); | ||
| 203 | if (IS_ERR(mailbox_priority)) { | ||
| 204 | mlx4_free_cmd_mailbox(mdev->dev, mailbox); | ||
| 205 | return PTR_ERR(mailbox_priority); | ||
| 206 | } | ||
| 207 | |||
| 201 | err = mlx4_cmd_box(mdev->dev, 0, mailbox->dma, in_mod, 0, | 208 | err = mlx4_cmd_box(mdev->dev, 0, mailbox->dma, in_mod, 0, |
| 202 | MLX4_CMD_DUMP_ETH_STATS, MLX4_CMD_TIME_CLASS_B, | 209 | MLX4_CMD_DUMP_ETH_STATS, MLX4_CMD_TIME_CLASS_B, |
| 203 | MLX4_CMD_NATIVE); | 210 | MLX4_CMD_NATIVE); |
| @@ -206,6 +213,28 @@ int mlx4_en_DUMP_ETH_STATS(struct mlx4_en_dev *mdev, u8 port, u8 reset) | |||
| 206 | 213 | ||
| 207 | mlx4_en_stats = mailbox->buf; | 214 | mlx4_en_stats = mailbox->buf; |
| 208 | 215 | ||
| 216 | memset(&tmp_counter_stats, 0, sizeof(tmp_counter_stats)); | ||
| 217 | counter_index = mlx4_get_default_counter_index(mdev->dev, port); | ||
| 218 | err = mlx4_get_counter_stats(mdev->dev, counter_index, | ||
| 219 | &tmp_counter_stats, reset); | ||
| 220 | |||
| 221 | /* 0xffs indicates invalid value */ | ||
| 222 | memset(mailbox_priority->buf, 0xff, | ||
| 223 | sizeof(*flowstats) * MLX4_NUM_PRIORITIES); | ||
| 224 | |||
| 225 | if (mdev->dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_FLOWSTATS_EN) { | ||
| 226 | memset(mailbox_priority->buf, 0, | ||
| 227 | sizeof(*flowstats) * MLX4_NUM_PRIORITIES); | ||
| 228 | err = mlx4_cmd_box(mdev->dev, 0, mailbox_priority->dma, | ||
| 229 | in_mod | MLX4_DUMP_ETH_STATS_FLOW_CONTROL, | ||
| 230 | 0, MLX4_CMD_DUMP_ETH_STATS, | ||
| 231 | MLX4_CMD_TIME_CLASS_B, MLX4_CMD_NATIVE); | ||
| 232 | if (err) | ||
| 233 | goto out; | ||
| 234 | } | ||
| 235 | |||
| 236 | flowstats = mailbox_priority->buf; | ||
| 237 | |||
| 209 | spin_lock_bh(&priv->stats_lock); | 238 | spin_lock_bh(&priv->stats_lock); |
| 210 | 239 | ||
| 211 | mlx4_en_fold_software_stats(dev); | 240 | mlx4_en_fold_software_stats(dev); |
| @@ -345,31 +374,6 @@ int mlx4_en_DUMP_ETH_STATS(struct mlx4_en_dev *mdev, u8 port, u8 reset) | |||
| 345 | priv->pkstats.tx_prio[8][0] = be64_to_cpu(mlx4_en_stats->TTOT_novlan); | 374 | priv->pkstats.tx_prio[8][0] = be64_to_cpu(mlx4_en_stats->TTOT_novlan); |
| 346 | priv->pkstats.tx_prio[8][1] = be64_to_cpu(mlx4_en_stats->TOCT_novlan); | 375 | priv->pkstats.tx_prio[8][1] = be64_to_cpu(mlx4_en_stats->TOCT_novlan); |
| 347 | 376 | ||
| 348 | spin_unlock_bh(&priv->stats_lock); | ||
| 349 | |||
| 350 | memset(&tmp_counter_stats, 0, sizeof(tmp_counter_stats)); | ||
| 351 | counter_index = mlx4_get_default_counter_index(mdev->dev, port); | ||
| 352 | err = mlx4_get_counter_stats(mdev->dev, counter_index, | ||
| 353 | &tmp_counter_stats, reset); | ||
| 354 | |||
| 355 | /* 0xffs indicates invalid value */ | ||
| 356 | memset(mailbox->buf, 0xff, sizeof(*flowstats) * MLX4_NUM_PRIORITIES); | ||
| 357 | |||
| 358 | if (mdev->dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_FLOWSTATS_EN) { | ||
| 359 | memset(mailbox->buf, 0, | ||
| 360 | sizeof(*flowstats) * MLX4_NUM_PRIORITIES); | ||
| 361 | err = mlx4_cmd_box(mdev->dev, 0, mailbox->dma, | ||
| 362 | in_mod | MLX4_DUMP_ETH_STATS_FLOW_CONTROL, | ||
| 363 | 0, MLX4_CMD_DUMP_ETH_STATS, | ||
| 364 | MLX4_CMD_TIME_CLASS_B, MLX4_CMD_NATIVE); | ||
| 365 | if (err) | ||
| 366 | goto out; | ||
| 367 | } | ||
| 368 | |||
| 369 | flowstats = mailbox->buf; | ||
| 370 | |||
| 371 | spin_lock_bh(&priv->stats_lock); | ||
| 372 | |||
| 373 | if (tmp_counter_stats.counter_mode == 0) { | 377 | if (tmp_counter_stats.counter_mode == 0) { |
| 374 | priv->pf_stats.rx_bytes = be64_to_cpu(tmp_counter_stats.rx_bytes); | 378 | priv->pf_stats.rx_bytes = be64_to_cpu(tmp_counter_stats.rx_bytes); |
| 375 | priv->pf_stats.tx_bytes = be64_to_cpu(tmp_counter_stats.tx_bytes); | 379 | priv->pf_stats.tx_bytes = be64_to_cpu(tmp_counter_stats.tx_bytes); |
| @@ -410,6 +414,7 @@ int mlx4_en_DUMP_ETH_STATS(struct mlx4_en_dev *mdev, u8 port, u8 reset) | |||
| 410 | 414 | ||
| 411 | out: | 415 | out: |
| 412 | mlx4_free_cmd_mailbox(mdev->dev, mailbox); | 416 | mlx4_free_cmd_mailbox(mdev->dev, mailbox); |
| 417 | mlx4_free_cmd_mailbox(mdev->dev, mailbox_priority); | ||
| 413 | return err; | 418 | return err; |
| 414 | } | 419 | } |
| 415 | 420 | ||
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_selftest.c b/drivers/net/ethernet/mellanox/mlx4/en_selftest.c index 88699b181946..946d9db7c8c2 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_selftest.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_selftest.c | |||
| @@ -185,7 +185,7 @@ void mlx4_en_ex_selftest(struct net_device *dev, u32 *flags, u64 *buf) | |||
| 185 | if (priv->mdev->dev->caps.flags & | 185 | if (priv->mdev->dev->caps.flags & |
| 186 | MLX4_DEV_CAP_FLAG_UC_LOOPBACK) { | 186 | MLX4_DEV_CAP_FLAG_UC_LOOPBACK) { |
| 187 | buf[3] = mlx4_en_test_registers(priv); | 187 | buf[3] = mlx4_en_test_registers(priv); |
| 188 | if (priv->port_up) | 188 | if (priv->port_up && dev->mtu >= MLX4_SELFTEST_LB_MIN_MTU) |
| 189 | buf[4] = mlx4_en_test_loopback(priv); | 189 | buf[4] = mlx4_en_test_loopback(priv); |
| 190 | } | 190 | } |
| 191 | 191 | ||
diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h index 1856e279a7e0..2b72677eccd4 100644 --- a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h +++ b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h | |||
| @@ -153,6 +153,9 @@ | |||
| 153 | #define SMALL_PACKET_SIZE (256 - NET_IP_ALIGN) | 153 | #define SMALL_PACKET_SIZE (256 - NET_IP_ALIGN) |
| 154 | #define HEADER_COPY_SIZE (128 - NET_IP_ALIGN) | 154 | #define HEADER_COPY_SIZE (128 - NET_IP_ALIGN) |
| 155 | #define MLX4_LOOPBACK_TEST_PAYLOAD (HEADER_COPY_SIZE - ETH_HLEN) | 155 | #define MLX4_LOOPBACK_TEST_PAYLOAD (HEADER_COPY_SIZE - ETH_HLEN) |
| 156 | #define PREAMBLE_LEN 8 | ||
| 157 | #define MLX4_SELFTEST_LB_MIN_MTU (MLX4_LOOPBACK_TEST_PAYLOAD + NET_IP_ALIGN + \ | ||
| 158 | ETH_HLEN + PREAMBLE_LEN) | ||
| 156 | 159 | ||
| 157 | #define MLX4_EN_MIN_MTU 46 | 160 | #define MLX4_EN_MIN_MTU 46 |
| 158 | /* VLAN_HLEN is added twice,to support skb vlan tagged with multiple | 161 | /* VLAN_HLEN is added twice,to support skb vlan tagged with multiple |
diff --git a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c index 04304dd894c6..606a0e0beeae 100644 --- a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c +++ b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c | |||
| @@ -611,7 +611,6 @@ int mlx4_init_resource_tracker(struct mlx4_dev *dev) | |||
| 611 | MLX4_MAX_PORTS; | 611 | MLX4_MAX_PORTS; |
| 612 | else | 612 | else |
| 613 | res_alloc->guaranteed[t] = 0; | 613 | res_alloc->guaranteed[t] = 0; |
| 614 | res_alloc->res_free -= res_alloc->guaranteed[t]; | ||
| 615 | break; | 614 | break; |
| 616 | default: | 615 | default: |
| 617 | break; | 616 | break; |
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c index 2d0897b7d860..9bd8d28de152 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c | |||
| @@ -4300,6 +4300,7 @@ static int mlxsw_sp_port_stp_set(struct mlxsw_sp_port *mlxsw_sp_port, | |||
| 4300 | 4300 | ||
| 4301 | static int mlxsw_sp_port_ovs_join(struct mlxsw_sp_port *mlxsw_sp_port) | 4301 | static int mlxsw_sp_port_ovs_join(struct mlxsw_sp_port *mlxsw_sp_port) |
| 4302 | { | 4302 | { |
| 4303 | u16 vid = 1; | ||
| 4303 | int err; | 4304 | int err; |
| 4304 | 4305 | ||
| 4305 | err = mlxsw_sp_port_vp_mode_set(mlxsw_sp_port, true); | 4306 | err = mlxsw_sp_port_vp_mode_set(mlxsw_sp_port, true); |
| @@ -4312,8 +4313,19 @@ static int mlxsw_sp_port_ovs_join(struct mlxsw_sp_port *mlxsw_sp_port) | |||
| 4312 | true, false); | 4313 | true, false); |
| 4313 | if (err) | 4314 | if (err) |
| 4314 | goto err_port_vlan_set; | 4315 | goto err_port_vlan_set; |
| 4316 | |||
| 4317 | for (; vid <= VLAN_N_VID - 1; vid++) { | ||
| 4318 | err = mlxsw_sp_port_vid_learning_set(mlxsw_sp_port, | ||
| 4319 | vid, false); | ||
| 4320 | if (err) | ||
| 4321 | goto err_vid_learning_set; | ||
| 4322 | } | ||
| 4323 | |||
| 4315 | return 0; | 4324 | return 0; |
| 4316 | 4325 | ||
| 4326 | err_vid_learning_set: | ||
| 4327 | for (vid--; vid >= 1; vid--) | ||
| 4328 | mlxsw_sp_port_vid_learning_set(mlxsw_sp_port, vid, true); | ||
| 4317 | err_port_vlan_set: | 4329 | err_port_vlan_set: |
| 4318 | mlxsw_sp_port_stp_set(mlxsw_sp_port, false); | 4330 | mlxsw_sp_port_stp_set(mlxsw_sp_port, false); |
| 4319 | err_port_stp_set: | 4331 | err_port_stp_set: |
| @@ -4323,6 +4335,12 @@ err_port_stp_set: | |||
| 4323 | 4335 | ||
| 4324 | static void mlxsw_sp_port_ovs_leave(struct mlxsw_sp_port *mlxsw_sp_port) | 4336 | static void mlxsw_sp_port_ovs_leave(struct mlxsw_sp_port *mlxsw_sp_port) |
| 4325 | { | 4337 | { |
| 4338 | u16 vid; | ||
| 4339 | |||
| 4340 | for (vid = VLAN_N_VID - 1; vid >= 1; vid--) | ||
| 4341 | mlxsw_sp_port_vid_learning_set(mlxsw_sp_port, | ||
| 4342 | vid, true); | ||
| 4343 | |||
| 4326 | mlxsw_sp_port_vlan_set(mlxsw_sp_port, 2, VLAN_N_VID - 1, | 4344 | mlxsw_sp_port_vlan_set(mlxsw_sp_port, 2, VLAN_N_VID - 1, |
| 4327 | false, false); | 4345 | false, false); |
| 4328 | mlxsw_sp_port_stp_set(mlxsw_sp_port, false); | 4346 | mlxsw_sp_port_stp_set(mlxsw_sp_port, false); |
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c index 632c7b229054..72ef4f8025f0 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c | |||
| @@ -1370,8 +1370,9 @@ static void mlxsw_sp_netdevice_ipip_ol_down_event(struct mlxsw_sp *mlxsw_sp, | |||
| 1370 | mlxsw_sp_ipip_entry_ol_down_event(mlxsw_sp, ipip_entry); | 1370 | mlxsw_sp_ipip_entry_ol_down_event(mlxsw_sp, ipip_entry); |
| 1371 | } | 1371 | } |
| 1372 | 1372 | ||
| 1373 | static void mlxsw_sp_nexthop_rif_update(struct mlxsw_sp *mlxsw_sp, | 1373 | static void mlxsw_sp_nexthop_rif_migrate(struct mlxsw_sp *mlxsw_sp, |
| 1374 | struct mlxsw_sp_rif *rif); | 1374 | struct mlxsw_sp_rif *old_rif, |
| 1375 | struct mlxsw_sp_rif *new_rif); | ||
| 1375 | static int | 1376 | static int |
| 1376 | mlxsw_sp_ipip_entry_ol_lb_update(struct mlxsw_sp *mlxsw_sp, | 1377 | mlxsw_sp_ipip_entry_ol_lb_update(struct mlxsw_sp *mlxsw_sp, |
| 1377 | struct mlxsw_sp_ipip_entry *ipip_entry, | 1378 | struct mlxsw_sp_ipip_entry *ipip_entry, |
| @@ -1389,17 +1390,18 @@ mlxsw_sp_ipip_entry_ol_lb_update(struct mlxsw_sp *mlxsw_sp, | |||
| 1389 | return PTR_ERR(new_lb_rif); | 1390 | return PTR_ERR(new_lb_rif); |
| 1390 | ipip_entry->ol_lb = new_lb_rif; | 1391 | ipip_entry->ol_lb = new_lb_rif; |
| 1391 | 1392 | ||
| 1392 | if (keep_encap) { | 1393 | if (keep_encap) |
| 1393 | list_splice_init(&old_lb_rif->common.nexthop_list, | 1394 | mlxsw_sp_nexthop_rif_migrate(mlxsw_sp, &old_lb_rif->common, |
| 1394 | &new_lb_rif->common.nexthop_list); | 1395 | &new_lb_rif->common); |
| 1395 | mlxsw_sp_nexthop_rif_update(mlxsw_sp, &new_lb_rif->common); | ||
| 1396 | } | ||
| 1397 | 1396 | ||
| 1398 | mlxsw_sp_rif_destroy(&old_lb_rif->common); | 1397 | mlxsw_sp_rif_destroy(&old_lb_rif->common); |
| 1399 | 1398 | ||
| 1400 | return 0; | 1399 | return 0; |
| 1401 | } | 1400 | } |
| 1402 | 1401 | ||
| 1402 | static void mlxsw_sp_nexthop_rif_update(struct mlxsw_sp *mlxsw_sp, | ||
| 1403 | struct mlxsw_sp_rif *rif); | ||
| 1404 | |||
| 1403 | /** | 1405 | /** |
| 1404 | * Update the offload related to an IPIP entry. This always updates decap, and | 1406 | * Update the offload related to an IPIP entry. This always updates decap, and |
| 1405 | * in addition to that it also: | 1407 | * in addition to that it also: |
| @@ -1449,9 +1451,27 @@ static int mlxsw_sp_netdevice_ipip_ol_vrf_event(struct mlxsw_sp *mlxsw_sp, | |||
| 1449 | { | 1451 | { |
| 1450 | struct mlxsw_sp_ipip_entry *ipip_entry = | 1452 | struct mlxsw_sp_ipip_entry *ipip_entry = |
| 1451 | mlxsw_sp_ipip_entry_find_by_ol_dev(mlxsw_sp, ol_dev); | 1453 | mlxsw_sp_ipip_entry_find_by_ol_dev(mlxsw_sp, ol_dev); |
| 1454 | enum mlxsw_sp_l3proto ul_proto; | ||
| 1455 | union mlxsw_sp_l3addr saddr; | ||
| 1456 | u32 ul_tb_id; | ||
| 1452 | 1457 | ||
| 1453 | if (!ipip_entry) | 1458 | if (!ipip_entry) |
| 1454 | return 0; | 1459 | return 0; |
| 1460 | |||
| 1461 | /* For flat configuration cases, moving overlay to a different VRF might | ||
| 1462 | * cause local address conflict, and the conflicting tunnels need to be | ||
| 1463 | * demoted. | ||
| 1464 | */ | ||
| 1465 | ul_tb_id = mlxsw_sp_ipip_dev_ul_tb_id(ol_dev); | ||
| 1466 | ul_proto = mlxsw_sp->router->ipip_ops_arr[ipip_entry->ipipt]->ul_proto; | ||
| 1467 | saddr = mlxsw_sp_ipip_netdev_saddr(ul_proto, ol_dev); | ||
| 1468 | if (mlxsw_sp_ipip_demote_tunnel_by_saddr(mlxsw_sp, ul_proto, | ||
| 1469 | saddr, ul_tb_id, | ||
| 1470 | ipip_entry)) { | ||
| 1471 | mlxsw_sp_ipip_entry_demote_tunnel(mlxsw_sp, ipip_entry); | ||
| 1472 | return 0; | ||
| 1473 | } | ||
| 1474 | |||
| 1455 | return __mlxsw_sp_ipip_entry_update_tunnel(mlxsw_sp, ipip_entry, | 1475 | return __mlxsw_sp_ipip_entry_update_tunnel(mlxsw_sp, ipip_entry, |
| 1456 | true, false, false, extack); | 1476 | true, false, false, extack); |
| 1457 | } | 1477 | } |
| @@ -3343,22 +3363,19 @@ static bool mlxsw_sp_ipip_netdev_ul_up(struct net_device *ol_dev) | |||
| 3343 | return ul_dev ? (ul_dev->flags & IFF_UP) : true; | 3363 | return ul_dev ? (ul_dev->flags & IFF_UP) : true; |
| 3344 | } | 3364 | } |
| 3345 | 3365 | ||
| 3346 | static int mlxsw_sp_nexthop_ipip_init(struct mlxsw_sp *mlxsw_sp, | 3366 | static void mlxsw_sp_nexthop_ipip_init(struct mlxsw_sp *mlxsw_sp, |
| 3347 | struct mlxsw_sp_nexthop *nh, | 3367 | struct mlxsw_sp_nexthop *nh, |
| 3348 | struct net_device *ol_dev) | 3368 | struct mlxsw_sp_ipip_entry *ipip_entry) |
| 3349 | { | 3369 | { |
| 3350 | bool removing; | 3370 | bool removing; |
| 3351 | 3371 | ||
| 3352 | if (!nh->nh_grp->gateway || nh->ipip_entry) | 3372 | if (!nh->nh_grp->gateway || nh->ipip_entry) |
| 3353 | return 0; | 3373 | return; |
| 3354 | |||
| 3355 | nh->ipip_entry = mlxsw_sp_ipip_entry_find_by_ol_dev(mlxsw_sp, ol_dev); | ||
| 3356 | if (!nh->ipip_entry) | ||
| 3357 | return -ENOENT; | ||
| 3358 | 3374 | ||
| 3359 | removing = !mlxsw_sp_ipip_netdev_ul_up(ol_dev); | 3375 | nh->ipip_entry = ipip_entry; |
| 3376 | removing = !mlxsw_sp_ipip_netdev_ul_up(ipip_entry->ol_dev); | ||
| 3360 | __mlxsw_sp_nexthop_neigh_update(nh, removing); | 3377 | __mlxsw_sp_nexthop_neigh_update(nh, removing); |
| 3361 | return 0; | 3378 | mlxsw_sp_nexthop_rif_init(nh, &ipip_entry->ol_lb->common); |
| 3362 | } | 3379 | } |
| 3363 | 3380 | ||
| 3364 | static void mlxsw_sp_nexthop_ipip_fini(struct mlxsw_sp *mlxsw_sp, | 3381 | static void mlxsw_sp_nexthop_ipip_fini(struct mlxsw_sp *mlxsw_sp, |
| @@ -3403,21 +3420,21 @@ static int mlxsw_sp_nexthop4_type_init(struct mlxsw_sp *mlxsw_sp, | |||
| 3403 | struct mlxsw_sp_nexthop *nh, | 3420 | struct mlxsw_sp_nexthop *nh, |
| 3404 | struct fib_nh *fib_nh) | 3421 | struct fib_nh *fib_nh) |
| 3405 | { | 3422 | { |
| 3406 | struct mlxsw_sp_router *router = mlxsw_sp->router; | 3423 | const struct mlxsw_sp_ipip_ops *ipip_ops; |
| 3407 | struct net_device *dev = fib_nh->nh_dev; | 3424 | struct net_device *dev = fib_nh->nh_dev; |
| 3408 | enum mlxsw_sp_ipip_type ipipt; | 3425 | struct mlxsw_sp_ipip_entry *ipip_entry; |
| 3409 | struct mlxsw_sp_rif *rif; | 3426 | struct mlxsw_sp_rif *rif; |
| 3410 | int err; | 3427 | int err; |
| 3411 | 3428 | ||
| 3412 | if (mlxsw_sp_nexthop4_ipip_type(mlxsw_sp, fib_nh, &ipipt) && | 3429 | ipip_entry = mlxsw_sp_ipip_entry_find_by_ol_dev(mlxsw_sp, dev); |
| 3413 | router->ipip_ops_arr[ipipt]->can_offload(mlxsw_sp, dev, | 3430 | if (ipip_entry) { |
| 3414 | MLXSW_SP_L3_PROTO_IPV4)) { | 3431 | ipip_ops = mlxsw_sp->router->ipip_ops_arr[ipip_entry->ipipt]; |
| 3415 | nh->type = MLXSW_SP_NEXTHOP_TYPE_IPIP; | 3432 | if (ipip_ops->can_offload(mlxsw_sp, dev, |
| 3416 | err = mlxsw_sp_nexthop_ipip_init(mlxsw_sp, nh, dev); | 3433 | MLXSW_SP_L3_PROTO_IPV4)) { |
| 3417 | if (err) | 3434 | nh->type = MLXSW_SP_NEXTHOP_TYPE_IPIP; |
| 3418 | return err; | 3435 | mlxsw_sp_nexthop_ipip_init(mlxsw_sp, nh, ipip_entry); |
| 3419 | mlxsw_sp_nexthop_rif_init(nh, &nh->ipip_entry->ol_lb->common); | 3436 | return 0; |
| 3420 | return 0; | 3437 | } |
| 3421 | } | 3438 | } |
| 3422 | 3439 | ||
| 3423 | nh->type = MLXSW_SP_NEXTHOP_TYPE_ETH; | 3440 | nh->type = MLXSW_SP_NEXTHOP_TYPE_ETH; |
| @@ -3545,6 +3562,18 @@ static void mlxsw_sp_nexthop_rif_update(struct mlxsw_sp *mlxsw_sp, | |||
| 3545 | } | 3562 | } |
| 3546 | } | 3563 | } |
| 3547 | 3564 | ||
| 3565 | static void mlxsw_sp_nexthop_rif_migrate(struct mlxsw_sp *mlxsw_sp, | ||
| 3566 | struct mlxsw_sp_rif *old_rif, | ||
| 3567 | struct mlxsw_sp_rif *new_rif) | ||
| 3568 | { | ||
| 3569 | struct mlxsw_sp_nexthop *nh; | ||
| 3570 | |||
| 3571 | list_splice_init(&old_rif->nexthop_list, &new_rif->nexthop_list); | ||
| 3572 | list_for_each_entry(nh, &new_rif->nexthop_list, rif_list_node) | ||
| 3573 | nh->rif = new_rif; | ||
| 3574 | mlxsw_sp_nexthop_rif_update(mlxsw_sp, new_rif); | ||
| 3575 | } | ||
| 3576 | |||
| 3548 | static void mlxsw_sp_nexthop_rif_gone_sync(struct mlxsw_sp *mlxsw_sp, | 3577 | static void mlxsw_sp_nexthop_rif_gone_sync(struct mlxsw_sp *mlxsw_sp, |
| 3549 | struct mlxsw_sp_rif *rif) | 3578 | struct mlxsw_sp_rif *rif) |
| 3550 | { | 3579 | { |
| @@ -3996,7 +4025,7 @@ mlxsw_sp_fib4_entry_type_set(struct mlxsw_sp *mlxsw_sp, | |||
| 3996 | case RTN_LOCAL: | 4025 | case RTN_LOCAL: |
| 3997 | ipip_entry = mlxsw_sp_ipip_entry_find_by_decap(mlxsw_sp, dev, | 4026 | ipip_entry = mlxsw_sp_ipip_entry_find_by_decap(mlxsw_sp, dev, |
| 3998 | MLXSW_SP_L3_PROTO_IPV4, dip); | 4027 | MLXSW_SP_L3_PROTO_IPV4, dip); |
| 3999 | if (ipip_entry) { | 4028 | if (ipip_entry && ipip_entry->ol_dev->flags & IFF_UP) { |
| 4000 | fib_entry->type = MLXSW_SP_FIB_ENTRY_TYPE_IPIP_DECAP; | 4029 | fib_entry->type = MLXSW_SP_FIB_ENTRY_TYPE_IPIP_DECAP; |
| 4001 | return mlxsw_sp_fib_entry_decap_init(mlxsw_sp, | 4030 | return mlxsw_sp_fib_entry_decap_init(mlxsw_sp, |
| 4002 | fib_entry, | 4031 | fib_entry, |
| @@ -4694,21 +4723,21 @@ static int mlxsw_sp_nexthop6_type_init(struct mlxsw_sp *mlxsw_sp, | |||
| 4694 | struct mlxsw_sp_nexthop *nh, | 4723 | struct mlxsw_sp_nexthop *nh, |
| 4695 | const struct rt6_info *rt) | 4724 | const struct rt6_info *rt) |
| 4696 | { | 4725 | { |
| 4697 | struct mlxsw_sp_router *router = mlxsw_sp->router; | 4726 | const struct mlxsw_sp_ipip_ops *ipip_ops; |
| 4727 | struct mlxsw_sp_ipip_entry *ipip_entry; | ||
| 4698 | struct net_device *dev = rt->dst.dev; | 4728 | struct net_device *dev = rt->dst.dev; |
| 4699 | enum mlxsw_sp_ipip_type ipipt; | ||
| 4700 | struct mlxsw_sp_rif *rif; | 4729 | struct mlxsw_sp_rif *rif; |
| 4701 | int err; | 4730 | int err; |
| 4702 | 4731 | ||
| 4703 | if (mlxsw_sp_nexthop6_ipip_type(mlxsw_sp, rt, &ipipt) && | 4732 | ipip_entry = mlxsw_sp_ipip_entry_find_by_ol_dev(mlxsw_sp, dev); |
| 4704 | router->ipip_ops_arr[ipipt]->can_offload(mlxsw_sp, dev, | 4733 | if (ipip_entry) { |
| 4705 | MLXSW_SP_L3_PROTO_IPV6)) { | 4734 | ipip_ops = mlxsw_sp->router->ipip_ops_arr[ipip_entry->ipipt]; |
| 4706 | nh->type = MLXSW_SP_NEXTHOP_TYPE_IPIP; | 4735 | if (ipip_ops->can_offload(mlxsw_sp, dev, |
| 4707 | err = mlxsw_sp_nexthop_ipip_init(mlxsw_sp, nh, dev); | 4736 | MLXSW_SP_L3_PROTO_IPV6)) { |
| 4708 | if (err) | 4737 | nh->type = MLXSW_SP_NEXTHOP_TYPE_IPIP; |
| 4709 | return err; | 4738 | mlxsw_sp_nexthop_ipip_init(mlxsw_sp, nh, ipip_entry); |
| 4710 | mlxsw_sp_nexthop_rif_init(nh, &nh->ipip_entry->ol_lb->common); | 4739 | return 0; |
| 4711 | return 0; | 4740 | } |
| 4712 | } | 4741 | } |
| 4713 | 4742 | ||
| 4714 | nh->type = MLXSW_SP_NEXTHOP_TYPE_ETH; | 4743 | nh->type = MLXSW_SP_NEXTHOP_TYPE_ETH; |
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c b/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c index 924a05e05da0..78b36c67c232 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c | |||
| @@ -84,16 +84,13 @@ nfp_repr_phy_port_get_stats64(struct nfp_port *port, | |||
| 84 | { | 84 | { |
| 85 | u8 __iomem *mem = port->eth_stats; | 85 | u8 __iomem *mem = port->eth_stats; |
| 86 | 86 | ||
| 87 | /* TX and RX stats are flipped as we are returning the stats as seen | 87 | stats->tx_packets = readq(mem + NFP_MAC_STATS_TX_FRAMES_TRANSMITTED_OK); |
| 88 | * at the switch port corresponding to the phys port. | 88 | stats->tx_bytes = readq(mem + NFP_MAC_STATS_TX_OUT_OCTETS); |
| 89 | */ | 89 | stats->tx_dropped = readq(mem + NFP_MAC_STATS_TX_OUT_ERRORS); |
| 90 | stats->tx_packets = readq(mem + NFP_MAC_STATS_RX_FRAMES_RECEIVED_OK); | ||
| 91 | stats->tx_bytes = readq(mem + NFP_MAC_STATS_RX_IN_OCTETS); | ||
| 92 | stats->tx_dropped = readq(mem + NFP_MAC_STATS_RX_IN_ERRORS); | ||
| 93 | 90 | ||
| 94 | stats->rx_packets = readq(mem + NFP_MAC_STATS_TX_FRAMES_TRANSMITTED_OK); | 91 | stats->rx_packets = readq(mem + NFP_MAC_STATS_RX_FRAMES_RECEIVED_OK); |
| 95 | stats->rx_bytes = readq(mem + NFP_MAC_STATS_TX_OUT_OCTETS); | 92 | stats->rx_bytes = readq(mem + NFP_MAC_STATS_RX_IN_OCTETS); |
| 96 | stats->rx_dropped = readq(mem + NFP_MAC_STATS_TX_OUT_ERRORS); | 93 | stats->rx_dropped = readq(mem + NFP_MAC_STATS_RX_IN_ERRORS); |
| 97 | } | 94 | } |
| 98 | 95 | ||
| 99 | static void | 96 | static void |
diff --git a/drivers/net/ethernet/nvidia/forcedeth.c b/drivers/net/ethernet/nvidia/forcedeth.c index ac8439ceea10..481876b5424c 100644 --- a/drivers/net/ethernet/nvidia/forcedeth.c +++ b/drivers/net/ethernet/nvidia/forcedeth.c | |||
| @@ -1986,9 +1986,9 @@ static void nv_unmap_txskb(struct fe_priv *np, struct nv_skb_map *tx_skb) | |||
| 1986 | tx_skb->dma_len, | 1986 | tx_skb->dma_len, |
| 1987 | DMA_TO_DEVICE); | 1987 | DMA_TO_DEVICE); |
| 1988 | else | 1988 | else |
| 1989 | pci_unmap_page(np->pci_dev, tx_skb->dma, | 1989 | dma_unmap_page(&np->pci_dev->dev, tx_skb->dma, |
| 1990 | tx_skb->dma_len, | 1990 | tx_skb->dma_len, |
| 1991 | PCI_DMA_TODEVICE); | 1991 | DMA_TO_DEVICE); |
| 1992 | tx_skb->dma = 0; | 1992 | tx_skb->dma = 0; |
| 1993 | } | 1993 | } |
| 1994 | } | 1994 | } |
diff --git a/drivers/net/ethernet/qualcomm/emac/emac-phy.c b/drivers/net/ethernet/qualcomm/emac/emac-phy.c index 18461fcb9815..53dbf1e163a8 100644 --- a/drivers/net/ethernet/qualcomm/emac/emac-phy.c +++ b/drivers/net/ethernet/qualcomm/emac/emac-phy.c | |||
| @@ -47,6 +47,7 @@ | |||
| 47 | #define MDIO_CLK_25_28 7 | 47 | #define MDIO_CLK_25_28 7 |
| 48 | 48 | ||
| 49 | #define MDIO_WAIT_TIMES 1000 | 49 | #define MDIO_WAIT_TIMES 1000 |
| 50 | #define MDIO_STATUS_DELAY_TIME 1 | ||
| 50 | 51 | ||
| 51 | static int emac_mdio_read(struct mii_bus *bus, int addr, int regnum) | 52 | static int emac_mdio_read(struct mii_bus *bus, int addr, int regnum) |
| 52 | { | 53 | { |
| @@ -65,7 +66,7 @@ static int emac_mdio_read(struct mii_bus *bus, int addr, int regnum) | |||
| 65 | 66 | ||
| 66 | if (readl_poll_timeout(adpt->base + EMAC_MDIO_CTRL, reg, | 67 | if (readl_poll_timeout(adpt->base + EMAC_MDIO_CTRL, reg, |
| 67 | !(reg & (MDIO_START | MDIO_BUSY)), | 68 | !(reg & (MDIO_START | MDIO_BUSY)), |
| 68 | 100, MDIO_WAIT_TIMES * 100)) | 69 | MDIO_STATUS_DELAY_TIME, MDIO_WAIT_TIMES * 100)) |
| 69 | return -EIO; | 70 | return -EIO; |
| 70 | 71 | ||
| 71 | return (reg >> MDIO_DATA_SHFT) & MDIO_DATA_BMSK; | 72 | return (reg >> MDIO_DATA_SHFT) & MDIO_DATA_BMSK; |
| @@ -88,8 +89,8 @@ static int emac_mdio_write(struct mii_bus *bus, int addr, int regnum, u16 val) | |||
| 88 | writel(reg, adpt->base + EMAC_MDIO_CTRL); | 89 | writel(reg, adpt->base + EMAC_MDIO_CTRL); |
| 89 | 90 | ||
| 90 | if (readl_poll_timeout(adpt->base + EMAC_MDIO_CTRL, reg, | 91 | if (readl_poll_timeout(adpt->base + EMAC_MDIO_CTRL, reg, |
| 91 | !(reg & (MDIO_START | MDIO_BUSY)), 100, | 92 | !(reg & (MDIO_START | MDIO_BUSY)), |
| 92 | MDIO_WAIT_TIMES * 100)) | 93 | MDIO_STATUS_DELAY_TIME, MDIO_WAIT_TIMES * 100)) |
| 93 | return -EIO; | 94 | return -EIO; |
| 94 | 95 | ||
| 95 | return 0; | 96 | return 0; |
diff --git a/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c b/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c index 71bee1af71ef..df21e900f874 100644 --- a/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c +++ b/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c | |||
| @@ -195,6 +195,7 @@ err2: | |||
| 195 | err1: | 195 | err1: |
| 196 | rmnet_unregister_real_device(real_dev, port); | 196 | rmnet_unregister_real_device(real_dev, port); |
| 197 | err0: | 197 | err0: |
| 198 | kfree(ep); | ||
| 198 | return err; | 199 | return err; |
| 199 | } | 200 | } |
| 200 | 201 | ||
diff --git a/drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.c b/drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.c index 29842ccc91a9..08e4afc0ab39 100644 --- a/drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.c +++ b/drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.c | |||
| @@ -126,12 +126,12 @@ static int rmnet_map_egress_handler(struct sk_buff *skb, | |||
| 126 | 126 | ||
| 127 | if (skb_headroom(skb) < required_headroom) { | 127 | if (skb_headroom(skb) < required_headroom) { |
| 128 | if (pskb_expand_head(skb, required_headroom, 0, GFP_KERNEL)) | 128 | if (pskb_expand_head(skb, required_headroom, 0, GFP_KERNEL)) |
| 129 | return RMNET_MAP_CONSUMED; | 129 | goto fail; |
| 130 | } | 130 | } |
| 131 | 131 | ||
| 132 | map_header = rmnet_map_add_map_header(skb, additional_header_len, 0); | 132 | map_header = rmnet_map_add_map_header(skb, additional_header_len, 0); |
| 133 | if (!map_header) | 133 | if (!map_header) |
| 134 | return RMNET_MAP_CONSUMED; | 134 | goto fail; |
| 135 | 135 | ||
| 136 | if (port->egress_data_format & RMNET_EGRESS_FORMAT_MUXING) { | 136 | if (port->egress_data_format & RMNET_EGRESS_FORMAT_MUXING) { |
| 137 | if (mux_id == 0xff) | 137 | if (mux_id == 0xff) |
| @@ -143,6 +143,10 @@ static int rmnet_map_egress_handler(struct sk_buff *skb, | |||
| 143 | skb->protocol = htons(ETH_P_MAP); | 143 | skb->protocol = htons(ETH_P_MAP); |
| 144 | 144 | ||
| 145 | return RMNET_MAP_SUCCESS; | 145 | return RMNET_MAP_SUCCESS; |
| 146 | |||
| 147 | fail: | ||
| 148 | kfree_skb(skb); | ||
| 149 | return RMNET_MAP_CONSUMED; | ||
| 146 | } | 150 | } |
| 147 | 151 | ||
| 148 | static void | 152 | static void |
diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c index 2b962d349f5f..009780df664b 100644 --- a/drivers/net/ethernet/renesas/ravb_main.c +++ b/drivers/net/ethernet/renesas/ravb_main.c | |||
| @@ -2308,32 +2308,9 @@ static int __maybe_unused ravb_resume(struct device *dev) | |||
| 2308 | struct ravb_private *priv = netdev_priv(ndev); | 2308 | struct ravb_private *priv = netdev_priv(ndev); |
| 2309 | int ret = 0; | 2309 | int ret = 0; |
| 2310 | 2310 | ||
| 2311 | if (priv->wol_enabled) { | 2311 | /* If WoL is enabled set reset mode to rearm the WoL logic */ |
| 2312 | /* Reduce the usecount of the clock to zero and then | 2312 | if (priv->wol_enabled) |
| 2313 | * restore it to its original value. This is done to force | ||
| 2314 | * the clock to be re-enabled which is a workaround | ||
| 2315 | * for renesas-cpg-mssr driver which do not enable clocks | ||
| 2316 | * when resuming from PSCI suspend/resume. | ||
| 2317 | * | ||
| 2318 | * Without this workaround the driver fails to communicate | ||
| 2319 | * with the hardware if WoL was enabled when the system | ||
| 2320 | * entered PSCI suspend. This is due to that if WoL is enabled | ||
| 2321 | * we explicitly keep the clock from being turned off when | ||
| 2322 | * suspending, but in PSCI sleep power is cut so the clock | ||
| 2323 | * is disabled anyhow, the clock driver is not aware of this | ||
| 2324 | * so the clock is not turned back on when resuming. | ||
| 2325 | * | ||
| 2326 | * TODO: once the renesas-cpg-mssr suspend/resume is working | ||
| 2327 | * this clock dance should be removed. | ||
| 2328 | */ | ||
| 2329 | clk_disable(priv->clk); | ||
| 2330 | clk_disable(priv->clk); | ||
| 2331 | clk_enable(priv->clk); | ||
| 2332 | clk_enable(priv->clk); | ||
| 2333 | |||
| 2334 | /* Set reset mode to rearm the WoL logic */ | ||
| 2335 | ravb_write(ndev, CCC_OPC_RESET, CCC); | 2313 | ravb_write(ndev, CCC_OPC_RESET, CCC); |
| 2336 | } | ||
| 2337 | 2314 | ||
| 2338 | /* All register have been reset to default values. | 2315 | /* All register have been reset to default values. |
| 2339 | * Restore all registers which where setup at probe time and | 2316 | * Restore all registers which where setup at probe time and |
diff --git a/drivers/net/ethernet/renesas/sh_eth.c b/drivers/net/ethernet/renesas/sh_eth.c index 7e060aa9fbed..75323000c364 100644 --- a/drivers/net/ethernet/renesas/sh_eth.c +++ b/drivers/net/ethernet/renesas/sh_eth.c | |||
| @@ -1149,7 +1149,8 @@ static int sh_eth_tx_free(struct net_device *ndev, bool sent_only) | |||
| 1149 | entry, le32_to_cpu(txdesc->status)); | 1149 | entry, le32_to_cpu(txdesc->status)); |
| 1150 | /* Free the original skb. */ | 1150 | /* Free the original skb. */ |
| 1151 | if (mdp->tx_skbuff[entry]) { | 1151 | if (mdp->tx_skbuff[entry]) { |
| 1152 | dma_unmap_single(&ndev->dev, le32_to_cpu(txdesc->addr), | 1152 | dma_unmap_single(&mdp->pdev->dev, |
| 1153 | le32_to_cpu(txdesc->addr), | ||
| 1153 | le32_to_cpu(txdesc->len) >> 16, | 1154 | le32_to_cpu(txdesc->len) >> 16, |
| 1154 | DMA_TO_DEVICE); | 1155 | DMA_TO_DEVICE); |
| 1155 | dev_kfree_skb_irq(mdp->tx_skbuff[entry]); | 1156 | dev_kfree_skb_irq(mdp->tx_skbuff[entry]); |
| @@ -1179,14 +1180,14 @@ static void sh_eth_ring_free(struct net_device *ndev) | |||
| 1179 | if (mdp->rx_skbuff[i]) { | 1180 | if (mdp->rx_skbuff[i]) { |
| 1180 | struct sh_eth_rxdesc *rxdesc = &mdp->rx_ring[i]; | 1181 | struct sh_eth_rxdesc *rxdesc = &mdp->rx_ring[i]; |
| 1181 | 1182 | ||
| 1182 | dma_unmap_single(&ndev->dev, | 1183 | dma_unmap_single(&mdp->pdev->dev, |
| 1183 | le32_to_cpu(rxdesc->addr), | 1184 | le32_to_cpu(rxdesc->addr), |
| 1184 | ALIGN(mdp->rx_buf_sz, 32), | 1185 | ALIGN(mdp->rx_buf_sz, 32), |
| 1185 | DMA_FROM_DEVICE); | 1186 | DMA_FROM_DEVICE); |
| 1186 | } | 1187 | } |
| 1187 | } | 1188 | } |
| 1188 | ringsize = sizeof(struct sh_eth_rxdesc) * mdp->num_rx_ring; | 1189 | ringsize = sizeof(struct sh_eth_rxdesc) * mdp->num_rx_ring; |
| 1189 | dma_free_coherent(NULL, ringsize, mdp->rx_ring, | 1190 | dma_free_coherent(&mdp->pdev->dev, ringsize, mdp->rx_ring, |
| 1190 | mdp->rx_desc_dma); | 1191 | mdp->rx_desc_dma); |
| 1191 | mdp->rx_ring = NULL; | 1192 | mdp->rx_ring = NULL; |
| 1192 | } | 1193 | } |
| @@ -1203,7 +1204,7 @@ static void sh_eth_ring_free(struct net_device *ndev) | |||
| 1203 | sh_eth_tx_free(ndev, false); | 1204 | sh_eth_tx_free(ndev, false); |
| 1204 | 1205 | ||
| 1205 | ringsize = sizeof(struct sh_eth_txdesc) * mdp->num_tx_ring; | 1206 | ringsize = sizeof(struct sh_eth_txdesc) * mdp->num_tx_ring; |
| 1206 | dma_free_coherent(NULL, ringsize, mdp->tx_ring, | 1207 | dma_free_coherent(&mdp->pdev->dev, ringsize, mdp->tx_ring, |
| 1207 | mdp->tx_desc_dma); | 1208 | mdp->tx_desc_dma); |
| 1208 | mdp->tx_ring = NULL; | 1209 | mdp->tx_ring = NULL; |
| 1209 | } | 1210 | } |
| @@ -1245,9 +1246,9 @@ static void sh_eth_ring_format(struct net_device *ndev) | |||
| 1245 | 1246 | ||
| 1246 | /* The size of the buffer is a multiple of 32 bytes. */ | 1247 | /* The size of the buffer is a multiple of 32 bytes. */ |
| 1247 | buf_len = ALIGN(mdp->rx_buf_sz, 32); | 1248 | buf_len = ALIGN(mdp->rx_buf_sz, 32); |
| 1248 | dma_addr = dma_map_single(&ndev->dev, skb->data, buf_len, | 1249 | dma_addr = dma_map_single(&mdp->pdev->dev, skb->data, buf_len, |
| 1249 | DMA_FROM_DEVICE); | 1250 | DMA_FROM_DEVICE); |
| 1250 | if (dma_mapping_error(&ndev->dev, dma_addr)) { | 1251 | if (dma_mapping_error(&mdp->pdev->dev, dma_addr)) { |
| 1251 | kfree_skb(skb); | 1252 | kfree_skb(skb); |
| 1252 | break; | 1253 | break; |
| 1253 | } | 1254 | } |
| @@ -1323,8 +1324,8 @@ static int sh_eth_ring_init(struct net_device *ndev) | |||
| 1323 | 1324 | ||
| 1324 | /* Allocate all Rx descriptors. */ | 1325 | /* Allocate all Rx descriptors. */ |
| 1325 | rx_ringsize = sizeof(struct sh_eth_rxdesc) * mdp->num_rx_ring; | 1326 | rx_ringsize = sizeof(struct sh_eth_rxdesc) * mdp->num_rx_ring; |
| 1326 | mdp->rx_ring = dma_alloc_coherent(NULL, rx_ringsize, &mdp->rx_desc_dma, | 1327 | mdp->rx_ring = dma_alloc_coherent(&mdp->pdev->dev, rx_ringsize, |
| 1327 | GFP_KERNEL); | 1328 | &mdp->rx_desc_dma, GFP_KERNEL); |
| 1328 | if (!mdp->rx_ring) | 1329 | if (!mdp->rx_ring) |
| 1329 | goto ring_free; | 1330 | goto ring_free; |
| 1330 | 1331 | ||
| @@ -1332,8 +1333,8 @@ static int sh_eth_ring_init(struct net_device *ndev) | |||
| 1332 | 1333 | ||
| 1333 | /* Allocate all Tx descriptors. */ | 1334 | /* Allocate all Tx descriptors. */ |
| 1334 | tx_ringsize = sizeof(struct sh_eth_txdesc) * mdp->num_tx_ring; | 1335 | tx_ringsize = sizeof(struct sh_eth_txdesc) * mdp->num_tx_ring; |
| 1335 | mdp->tx_ring = dma_alloc_coherent(NULL, tx_ringsize, &mdp->tx_desc_dma, | 1336 | mdp->tx_ring = dma_alloc_coherent(&mdp->pdev->dev, tx_ringsize, |
| 1336 | GFP_KERNEL); | 1337 | &mdp->tx_desc_dma, GFP_KERNEL); |
| 1337 | if (!mdp->tx_ring) | 1338 | if (!mdp->tx_ring) |
| 1338 | goto ring_free; | 1339 | goto ring_free; |
| 1339 | return 0; | 1340 | return 0; |
| @@ -1527,7 +1528,7 @@ static int sh_eth_rx(struct net_device *ndev, u32 intr_status, int *quota) | |||
| 1527 | mdp->rx_skbuff[entry] = NULL; | 1528 | mdp->rx_skbuff[entry] = NULL; |
| 1528 | if (mdp->cd->rpadir) | 1529 | if (mdp->cd->rpadir) |
| 1529 | skb_reserve(skb, NET_IP_ALIGN); | 1530 | skb_reserve(skb, NET_IP_ALIGN); |
| 1530 | dma_unmap_single(&ndev->dev, dma_addr, | 1531 | dma_unmap_single(&mdp->pdev->dev, dma_addr, |
| 1531 | ALIGN(mdp->rx_buf_sz, 32), | 1532 | ALIGN(mdp->rx_buf_sz, 32), |
| 1532 | DMA_FROM_DEVICE); | 1533 | DMA_FROM_DEVICE); |
| 1533 | skb_put(skb, pkt_len); | 1534 | skb_put(skb, pkt_len); |
| @@ -1555,9 +1556,9 @@ static int sh_eth_rx(struct net_device *ndev, u32 intr_status, int *quota) | |||
| 1555 | if (skb == NULL) | 1556 | if (skb == NULL) |
| 1556 | break; /* Better luck next round. */ | 1557 | break; /* Better luck next round. */ |
| 1557 | sh_eth_set_receive_align(skb); | 1558 | sh_eth_set_receive_align(skb); |
| 1558 | dma_addr = dma_map_single(&ndev->dev, skb->data, | 1559 | dma_addr = dma_map_single(&mdp->pdev->dev, skb->data, |
| 1559 | buf_len, DMA_FROM_DEVICE); | 1560 | buf_len, DMA_FROM_DEVICE); |
| 1560 | if (dma_mapping_error(&ndev->dev, dma_addr)) { | 1561 | if (dma_mapping_error(&mdp->pdev->dev, dma_addr)) { |
| 1561 | kfree_skb(skb); | 1562 | kfree_skb(skb); |
| 1562 | break; | 1563 | break; |
| 1563 | } | 1564 | } |
| @@ -1891,6 +1892,16 @@ static int sh_eth_phy_init(struct net_device *ndev) | |||
| 1891 | return PTR_ERR(phydev); | 1892 | return PTR_ERR(phydev); |
| 1892 | } | 1893 | } |
| 1893 | 1894 | ||
| 1895 | /* mask with MAC supported features */ | ||
| 1896 | if (mdp->cd->register_type != SH_ETH_REG_GIGABIT) { | ||
| 1897 | int err = phy_set_max_speed(phydev, SPEED_100); | ||
| 1898 | if (err) { | ||
| 1899 | netdev_err(ndev, "failed to limit PHY to 100 Mbit/s\n"); | ||
| 1900 | phy_disconnect(phydev); | ||
| 1901 | return err; | ||
| 1902 | } | ||
| 1903 | } | ||
| 1904 | |||
| 1894 | phy_attached_info(phydev); | 1905 | phy_attached_info(phydev); |
| 1895 | 1906 | ||
| 1896 | return 0; | 1907 | return 0; |
| @@ -2441,9 +2452,9 @@ static int sh_eth_start_xmit(struct sk_buff *skb, struct net_device *ndev) | |||
| 2441 | /* soft swap. */ | 2452 | /* soft swap. */ |
| 2442 | if (!mdp->cd->hw_swap) | 2453 | if (!mdp->cd->hw_swap) |
| 2443 | sh_eth_soft_swap(PTR_ALIGN(skb->data, 4), skb->len + 2); | 2454 | sh_eth_soft_swap(PTR_ALIGN(skb->data, 4), skb->len + 2); |
| 2444 | dma_addr = dma_map_single(&ndev->dev, skb->data, skb->len, | 2455 | dma_addr = dma_map_single(&mdp->pdev->dev, skb->data, skb->len, |
| 2445 | DMA_TO_DEVICE); | 2456 | DMA_TO_DEVICE); |
| 2446 | if (dma_mapping_error(&ndev->dev, dma_addr)) { | 2457 | if (dma_mapping_error(&mdp->pdev->dev, dma_addr)) { |
| 2447 | kfree_skb(skb); | 2458 | kfree_skb(skb); |
| 2448 | return NETDEV_TX_OK; | 2459 | return NETDEV_TX_OK; |
| 2449 | } | 2460 | } |
diff --git a/drivers/net/ethernet/sfc/tx.c b/drivers/net/ethernet/sfc/tx.c index 0ea7e16f2e6e..9937a2450e57 100644 --- a/drivers/net/ethernet/sfc/tx.c +++ b/drivers/net/ethernet/sfc/tx.c | |||
| @@ -77,6 +77,7 @@ static void efx_dequeue_buffer(struct efx_tx_queue *tx_queue, | |||
| 77 | } | 77 | } |
| 78 | 78 | ||
| 79 | if (buffer->flags & EFX_TX_BUF_SKB) { | 79 | if (buffer->flags & EFX_TX_BUF_SKB) { |
| 80 | EFX_WARN_ON_PARANOID(!pkts_compl || !bytes_compl); | ||
| 80 | (*pkts_compl)++; | 81 | (*pkts_compl)++; |
| 81 | (*bytes_compl) += buffer->skb->len; | 82 | (*bytes_compl) += buffer->skb->len; |
| 82 | dev_consume_skb_any((struct sk_buff *)buffer->skb); | 83 | dev_consume_skb_any((struct sk_buff *)buffer->skb); |
| @@ -426,12 +427,14 @@ static int efx_tx_map_data(struct efx_tx_queue *tx_queue, struct sk_buff *skb, | |||
| 426 | static void efx_enqueue_unwind(struct efx_tx_queue *tx_queue) | 427 | static void efx_enqueue_unwind(struct efx_tx_queue *tx_queue) |
| 427 | { | 428 | { |
| 428 | struct efx_tx_buffer *buffer; | 429 | struct efx_tx_buffer *buffer; |
| 430 | unsigned int bytes_compl = 0; | ||
| 431 | unsigned int pkts_compl = 0; | ||
| 429 | 432 | ||
| 430 | /* Work backwards until we hit the original insert pointer value */ | 433 | /* Work backwards until we hit the original insert pointer value */ |
| 431 | while (tx_queue->insert_count != tx_queue->write_count) { | 434 | while (tx_queue->insert_count != tx_queue->write_count) { |
| 432 | --tx_queue->insert_count; | 435 | --tx_queue->insert_count; |
| 433 | buffer = __efx_tx_queue_get_insert_buffer(tx_queue); | 436 | buffer = __efx_tx_queue_get_insert_buffer(tx_queue); |
| 434 | efx_dequeue_buffer(tx_queue, buffer, NULL, NULL); | 437 | efx_dequeue_buffer(tx_queue, buffer, &pkts_compl, &bytes_compl); |
| 435 | } | 438 | } |
| 436 | } | 439 | } |
| 437 | 440 | ||
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-stm32.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-stm32.c index 61cb24810d10..9e6db16af663 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-stm32.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-stm32.c | |||
| @@ -1,8 +1,8 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * dwmac-stm32.c - DWMAC Specific Glue layer for STM32 MCU | 2 | * dwmac-stm32.c - DWMAC Specific Glue layer for STM32 MCU |
| 3 | * | 3 | * |
| 4 | * Copyright (C) Alexandre Torgue 2015 | 4 | * Copyright (C) STMicroelectronics SA 2017 |
| 5 | * Author: Alexandre Torgue <alexandre.torgue@gmail.com> | 5 | * Author: Alexandre Torgue <alexandre.torgue@st.com> for STMicroelectronics. |
| 6 | * License terms: GNU General Public License (GPL), version 2 | 6 | * License terms: GNU General Public License (GPL), version 2 |
| 7 | * | 7 | * |
| 8 | */ | 8 | */ |
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c index e5ff734d4f9b..9eb7f65d8000 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c | |||
| @@ -808,8 +808,7 @@ static int sun8i_dwmac_set_syscon(struct stmmac_priv *priv) | |||
| 808 | val, reg); | 808 | val, reg); |
| 809 | 809 | ||
| 810 | if (gmac->variant->soc_has_internal_phy) { | 810 | if (gmac->variant->soc_has_internal_phy) { |
| 811 | if (of_property_read_bool(priv->plat->phy_node, | 811 | if (of_property_read_bool(node, "allwinner,leds-active-low")) |
| 812 | "allwinner,leds-active-low")) | ||
| 813 | reg |= H3_EPHY_LED_POL; | 812 | reg |= H3_EPHY_LED_POL; |
| 814 | else | 813 | else |
| 815 | reg &= ~H3_EPHY_LED_POL; | 814 | reg &= ~H3_EPHY_LED_POL; |
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c index f63c2ddced3c..d7250539d0bd 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | |||
| @@ -2588,6 +2588,7 @@ static int stmmac_open(struct net_device *dev) | |||
| 2588 | 2588 | ||
| 2589 | priv->dma_buf_sz = STMMAC_ALIGN(buf_sz); | 2589 | priv->dma_buf_sz = STMMAC_ALIGN(buf_sz); |
| 2590 | priv->rx_copybreak = STMMAC_RX_COPYBREAK; | 2590 | priv->rx_copybreak = STMMAC_RX_COPYBREAK; |
| 2591 | priv->mss = 0; | ||
| 2591 | 2592 | ||
| 2592 | ret = alloc_dma_desc_resources(priv); | 2593 | ret = alloc_dma_desc_resources(priv); |
| 2593 | if (ret < 0) { | 2594 | if (ret < 0) { |
diff --git a/drivers/net/ethernet/via/via-rhine.c b/drivers/net/ethernet/via/via-rhine.c index 83e6f76eb965..33949248c829 100644 --- a/drivers/net/ethernet/via/via-rhine.c +++ b/drivers/net/ethernet/via/via-rhine.c | |||
| @@ -995,8 +995,8 @@ static int rhine_init_one_common(struct device *hwdev, u32 quirks, | |||
| 995 | else | 995 | else |
| 996 | name = "Rhine III"; | 996 | name = "Rhine III"; |
| 997 | 997 | ||
| 998 | netdev_info(dev, "VIA %s at 0x%lx, %pM, IRQ %d\n", | 998 | netdev_info(dev, "VIA %s at %p, %pM, IRQ %d\n", |
| 999 | name, (long)ioaddr, dev->dev_addr, rp->irq); | 999 | name, ioaddr, dev->dev_addr, rp->irq); |
| 1000 | 1000 | ||
| 1001 | dev_set_drvdata(hwdev, dev); | 1001 | dev_set_drvdata(hwdev, dev); |
| 1002 | 1002 | ||
diff --git a/drivers/net/ethernet/xilinx/Kconfig b/drivers/net/ethernet/xilinx/Kconfig index 6d68c8a8f4f2..da4ec575ccf9 100644 --- a/drivers/net/ethernet/xilinx/Kconfig +++ b/drivers/net/ethernet/xilinx/Kconfig | |||
| @@ -34,6 +34,7 @@ config XILINX_AXI_EMAC | |||
| 34 | config XILINX_LL_TEMAC | 34 | config XILINX_LL_TEMAC |
| 35 | tristate "Xilinx LL TEMAC (LocalLink Tri-mode Ethernet MAC) driver" | 35 | tristate "Xilinx LL TEMAC (LocalLink Tri-mode Ethernet MAC) driver" |
| 36 | depends on (PPC || MICROBLAZE) | 36 | depends on (PPC || MICROBLAZE) |
| 37 | depends on !64BIT || BROKEN | ||
| 37 | select PHYLIB | 38 | select PHYLIB |
| 38 | ---help--- | 39 | ---help--- |
| 39 | This driver supports the Xilinx 10/100/1000 LocalLink TEMAC | 40 | This driver supports the Xilinx 10/100/1000 LocalLink TEMAC |
diff --git a/drivers/net/hippi/rrunner.c b/drivers/net/hippi/rrunner.c index 8483f03d5a41..1ab97d99b9ba 100644 --- a/drivers/net/hippi/rrunner.c +++ b/drivers/net/hippi/rrunner.c | |||
| @@ -1379,8 +1379,8 @@ static int rr_close(struct net_device *dev) | |||
| 1379 | rrpriv->info_dma); | 1379 | rrpriv->info_dma); |
| 1380 | rrpriv->info = NULL; | 1380 | rrpriv->info = NULL; |
| 1381 | 1381 | ||
| 1382 | free_irq(pdev->irq, dev); | ||
| 1383 | spin_unlock_irqrestore(&rrpriv->lock, flags); | 1382 | spin_unlock_irqrestore(&rrpriv->lock, flags); |
| 1383 | free_irq(pdev->irq, dev); | ||
| 1384 | 1384 | ||
| 1385 | return 0; | 1385 | return 0; |
| 1386 | } | 1386 | } |
diff --git a/drivers/net/ipvlan/ipvlan_core.c b/drivers/net/ipvlan/ipvlan_core.c index 11c1e7950fe5..77cc4fbaeace 100644 --- a/drivers/net/ipvlan/ipvlan_core.c +++ b/drivers/net/ipvlan/ipvlan_core.c | |||
| @@ -393,6 +393,7 @@ static int ipvlan_process_v4_outbound(struct sk_buff *skb) | |||
| 393 | .flowi4_oif = dev->ifindex, | 393 | .flowi4_oif = dev->ifindex, |
| 394 | .flowi4_tos = RT_TOS(ip4h->tos), | 394 | .flowi4_tos = RT_TOS(ip4h->tos), |
| 395 | .flowi4_flags = FLOWI_FLAG_ANYSRC, | 395 | .flowi4_flags = FLOWI_FLAG_ANYSRC, |
| 396 | .flowi4_mark = skb->mark, | ||
| 396 | .daddr = ip4h->daddr, | 397 | .daddr = ip4h->daddr, |
| 397 | .saddr = ip4h->saddr, | 398 | .saddr = ip4h->saddr, |
| 398 | }; | 399 | }; |
diff --git a/drivers/net/phy/at803x.c b/drivers/net/phy/at803x.c index 5f93e6add563..e911e4990b20 100644 --- a/drivers/net/phy/at803x.c +++ b/drivers/net/phy/at803x.c | |||
| @@ -239,14 +239,10 @@ static int at803x_resume(struct phy_device *phydev) | |||
| 239 | { | 239 | { |
| 240 | int value; | 240 | int value; |
| 241 | 241 | ||
| 242 | mutex_lock(&phydev->lock); | ||
| 243 | |||
| 244 | value = phy_read(phydev, MII_BMCR); | 242 | value = phy_read(phydev, MII_BMCR); |
| 245 | value &= ~(BMCR_PDOWN | BMCR_ISOLATE); | 243 | value &= ~(BMCR_PDOWN | BMCR_ISOLATE); |
| 246 | phy_write(phydev, MII_BMCR, value); | 244 | phy_write(phydev, MII_BMCR, value); |
| 247 | 245 | ||
| 248 | mutex_unlock(&phydev->lock); | ||
| 249 | |||
| 250 | return 0; | 246 | return 0; |
| 251 | } | 247 | } |
| 252 | 248 | ||
diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c index 4d02b27df044..b5a8f750e433 100644 --- a/drivers/net/phy/marvell.c +++ b/drivers/net/phy/marvell.c | |||
| @@ -637,6 +637,10 @@ static int m88e1510_config_aneg(struct phy_device *phydev) | |||
| 637 | if (err < 0) | 637 | if (err < 0) |
| 638 | goto error; | 638 | goto error; |
| 639 | 639 | ||
| 640 | /* Do not touch the fiber page if we're in copper->sgmii mode */ | ||
| 641 | if (phydev->interface == PHY_INTERFACE_MODE_SGMII) | ||
| 642 | return 0; | ||
| 643 | |||
| 640 | /* Then the fiber link */ | 644 | /* Then the fiber link */ |
| 641 | err = marvell_set_page(phydev, MII_MARVELL_FIBER_PAGE); | 645 | err = marvell_set_page(phydev, MII_MARVELL_FIBER_PAGE); |
| 642 | if (err < 0) | 646 | if (err < 0) |
diff --git a/drivers/net/phy/marvell10g.c b/drivers/net/phy/marvell10g.c index aebc08beceba..21b3f36e023a 100644 --- a/drivers/net/phy/marvell10g.c +++ b/drivers/net/phy/marvell10g.c | |||
| @@ -16,6 +16,7 @@ | |||
| 16 | * link takes priority and the other port is completely locked out. | 16 | * link takes priority and the other port is completely locked out. |
| 17 | */ | 17 | */ |
| 18 | #include <linux/phy.h> | 18 | #include <linux/phy.h> |
| 19 | #include <linux/marvell_phy.h> | ||
| 19 | 20 | ||
| 20 | enum { | 21 | enum { |
| 21 | MV_PCS_BASE_T = 0x0000, | 22 | MV_PCS_BASE_T = 0x0000, |
| @@ -338,7 +339,7 @@ static int mv3310_read_status(struct phy_device *phydev) | |||
| 338 | static struct phy_driver mv3310_drivers[] = { | 339 | static struct phy_driver mv3310_drivers[] = { |
| 339 | { | 340 | { |
| 340 | .phy_id = 0x002b09aa, | 341 | .phy_id = 0x002b09aa, |
| 341 | .phy_id_mask = 0xffffffff, | 342 | .phy_id_mask = MARVELL_PHY_ID_MASK, |
| 342 | .name = "mv88x3310", | 343 | .name = "mv88x3310", |
| 343 | .features = SUPPORTED_10baseT_Full | | 344 | .features = SUPPORTED_10baseT_Full | |
| 344 | SUPPORTED_100baseT_Full | | 345 | SUPPORTED_100baseT_Full | |
| @@ -360,7 +361,7 @@ static struct phy_driver mv3310_drivers[] = { | |||
| 360 | module_phy_driver(mv3310_drivers); | 361 | module_phy_driver(mv3310_drivers); |
| 361 | 362 | ||
| 362 | static struct mdio_device_id __maybe_unused mv3310_tbl[] = { | 363 | static struct mdio_device_id __maybe_unused mv3310_tbl[] = { |
| 363 | { 0x002b09aa, 0xffffffff }, | 364 | { 0x002b09aa, MARVELL_PHY_ID_MASK }, |
| 364 | { }, | 365 | { }, |
| 365 | }; | 366 | }; |
| 366 | MODULE_DEVICE_TABLE(mdio, mv3310_tbl); | 367 | MODULE_DEVICE_TABLE(mdio, mv3310_tbl); |
diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c index 2df7b62c1a36..54d00a1d2bef 100644 --- a/drivers/net/phy/mdio_bus.c +++ b/drivers/net/phy/mdio_bus.c | |||
| @@ -270,6 +270,7 @@ static void of_mdiobus_link_mdiodev(struct mii_bus *bus, | |||
| 270 | 270 | ||
| 271 | if (addr == mdiodev->addr) { | 271 | if (addr == mdiodev->addr) { |
| 272 | dev->of_node = child; | 272 | dev->of_node = child; |
| 273 | dev->fwnode = of_fwnode_handle(child); | ||
| 273 | return; | 274 | return; |
| 274 | } | 275 | } |
| 275 | } | 276 | } |
diff --git a/drivers/net/phy/meson-gxl.c b/drivers/net/phy/meson-gxl.c index 1ea69b7585d9..842eb871a6e3 100644 --- a/drivers/net/phy/meson-gxl.c +++ b/drivers/net/phy/meson-gxl.c | |||
| @@ -22,6 +22,7 @@ | |||
| 22 | #include <linux/ethtool.h> | 22 | #include <linux/ethtool.h> |
| 23 | #include <linux/phy.h> | 23 | #include <linux/phy.h> |
| 24 | #include <linux/netdevice.h> | 24 | #include <linux/netdevice.h> |
| 25 | #include <linux/bitfield.h> | ||
| 25 | 26 | ||
| 26 | static int meson_gxl_config_init(struct phy_device *phydev) | 27 | static int meson_gxl_config_init(struct phy_device *phydev) |
| 27 | { | 28 | { |
| @@ -50,6 +51,77 @@ static int meson_gxl_config_init(struct phy_device *phydev) | |||
| 50 | return 0; | 51 | return 0; |
| 51 | } | 52 | } |
| 52 | 53 | ||
| 54 | /* This function is provided to cope with the possible failures of this phy | ||
| 55 | * during aneg process. When aneg fails, the PHY reports that aneg is done | ||
| 56 | * but the value found in MII_LPA is wrong: | ||
| 57 | * - Early failures: MII_LPA is just 0x0001. if MII_EXPANSION reports that | ||
| 58 | * the link partner (LP) supports aneg but the LP never acked our base | ||
| 59 | * code word, it is likely that we never sent it to begin with. | ||
| 60 | * - Late failures: MII_LPA is filled with a value which seems to make sense | ||
| 61 | * but it actually is not what the LP is advertising. It seems that we | ||
| 62 | * can detect this using a magic bit in the WOL bank (reg 12 - bit 12). | ||
| 63 | * If this particular bit is not set when aneg is reported being done, | ||
| 64 | * it means MII_LPA is likely to be wrong. | ||
| 65 | * | ||
| 66 | * In both case, forcing a restart of the aneg process solve the problem. | ||
| 67 | * When this failure happens, the first retry is usually successful but, | ||
| 68 | * in some cases, it may take up to 6 retries to get a decent result | ||
| 69 | */ | ||
| 70 | static int meson_gxl_read_status(struct phy_device *phydev) | ||
| 71 | { | ||
| 72 | int ret, wol, lpa, exp; | ||
| 73 | |||
| 74 | if (phydev->autoneg == AUTONEG_ENABLE) { | ||
| 75 | ret = genphy_aneg_done(phydev); | ||
| 76 | if (ret < 0) | ||
| 77 | return ret; | ||
| 78 | else if (!ret) | ||
| 79 | goto read_status_continue; | ||
| 80 | |||
| 81 | /* Need to access WOL bank, make sure the access is open */ | ||
| 82 | ret = phy_write(phydev, 0x14, 0x0000); | ||
| 83 | if (ret) | ||
| 84 | return ret; | ||
| 85 | ret = phy_write(phydev, 0x14, 0x0400); | ||
| 86 | if (ret) | ||
| 87 | return ret; | ||
| 88 | ret = phy_write(phydev, 0x14, 0x0000); | ||
| 89 | if (ret) | ||
| 90 | return ret; | ||
| 91 | ret = phy_write(phydev, 0x14, 0x0400); | ||
| 92 | if (ret) | ||
| 93 | return ret; | ||
| 94 | |||
| 95 | /* Request LPI_STATUS WOL register */ | ||
| 96 | ret = phy_write(phydev, 0x14, 0x8D80); | ||
| 97 | if (ret) | ||
| 98 | return ret; | ||
| 99 | |||
| 100 | /* Read LPI_STATUS value */ | ||
| 101 | wol = phy_read(phydev, 0x15); | ||
| 102 | if (wol < 0) | ||
| 103 | return wol; | ||
| 104 | |||
| 105 | lpa = phy_read(phydev, MII_LPA); | ||
| 106 | if (lpa < 0) | ||
| 107 | return lpa; | ||
| 108 | |||
| 109 | exp = phy_read(phydev, MII_EXPANSION); | ||
| 110 | if (exp < 0) | ||
| 111 | return exp; | ||
| 112 | |||
| 113 | if (!(wol & BIT(12)) || | ||
| 114 | ((exp & EXPANSION_NWAY) && !(lpa & LPA_LPACK))) { | ||
| 115 | /* Looks like aneg failed after all */ | ||
| 116 | phydev_dbg(phydev, "LPA corruption - aneg restart\n"); | ||
| 117 | return genphy_restart_aneg(phydev); | ||
| 118 | } | ||
| 119 | } | ||
| 120 | |||
| 121 | read_status_continue: | ||
| 122 | return genphy_read_status(phydev); | ||
| 123 | } | ||
| 124 | |||
| 53 | static struct phy_driver meson_gxl_phy[] = { | 125 | static struct phy_driver meson_gxl_phy[] = { |
| 54 | { | 126 | { |
| 55 | .phy_id = 0x01814400, | 127 | .phy_id = 0x01814400, |
| @@ -60,7 +132,7 @@ static struct phy_driver meson_gxl_phy[] = { | |||
| 60 | .config_init = meson_gxl_config_init, | 132 | .config_init = meson_gxl_config_init, |
| 61 | .config_aneg = genphy_config_aneg, | 133 | .config_aneg = genphy_config_aneg, |
| 62 | .aneg_done = genphy_aneg_done, | 134 | .aneg_done = genphy_aneg_done, |
| 63 | .read_status = genphy_read_status, | 135 | .read_status = meson_gxl_read_status, |
| 64 | .suspend = genphy_suspend, | 136 | .suspend = genphy_suspend, |
| 65 | .resume = genphy_resume, | 137 | .resume = genphy_resume, |
| 66 | }, | 138 | }, |
diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c index fdb43dd9b5cd..ab4614113403 100644 --- a/drivers/net/phy/micrel.c +++ b/drivers/net/phy/micrel.c | |||
| @@ -496,16 +496,18 @@ static int ksz9031_of_load_skew_values(struct phy_device *phydev, | |||
| 496 | return ksz9031_extended_write(phydev, OP_DATA, 2, reg, newval); | 496 | return ksz9031_extended_write(phydev, OP_DATA, 2, reg, newval); |
| 497 | } | 497 | } |
| 498 | 498 | ||
| 499 | /* Center KSZ9031RNX FLP timing at 16ms. */ | ||
| 499 | static int ksz9031_center_flp_timing(struct phy_device *phydev) | 500 | static int ksz9031_center_flp_timing(struct phy_device *phydev) |
| 500 | { | 501 | { |
| 501 | int result; | 502 | int result; |
| 502 | 503 | ||
| 503 | /* Center KSZ9031RNX FLP timing at 16ms. */ | ||
| 504 | result = ksz9031_extended_write(phydev, OP_DATA, 0, | 504 | result = ksz9031_extended_write(phydev, OP_DATA, 0, |
| 505 | MII_KSZ9031RN_FLP_BURST_TX_HI, 0x0006); | 505 | MII_KSZ9031RN_FLP_BURST_TX_HI, 0x0006); |
| 506 | if (result) | ||
| 507 | return result; | ||
| 508 | |||
| 506 | result = ksz9031_extended_write(phydev, OP_DATA, 0, | 509 | result = ksz9031_extended_write(phydev, OP_DATA, 0, |
| 507 | MII_KSZ9031RN_FLP_BURST_TX_LO, 0x1A80); | 510 | MII_KSZ9031RN_FLP_BURST_TX_LO, 0x1A80); |
| 508 | |||
| 509 | if (result) | 511 | if (result) |
| 510 | return result; | 512 | return result; |
| 511 | 513 | ||
diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c index 2b1e67bc1e73..ed10d1fc8f59 100644 --- a/drivers/net/phy/phy.c +++ b/drivers/net/phy/phy.c | |||
| @@ -828,7 +828,6 @@ EXPORT_SYMBOL(phy_stop); | |||
| 828 | */ | 828 | */ |
| 829 | void phy_start(struct phy_device *phydev) | 829 | void phy_start(struct phy_device *phydev) |
| 830 | { | 830 | { |
| 831 | bool do_resume = false; | ||
| 832 | int err = 0; | 831 | int err = 0; |
| 833 | 832 | ||
| 834 | mutex_lock(&phydev->lock); | 833 | mutex_lock(&phydev->lock); |
| @@ -841,6 +840,9 @@ void phy_start(struct phy_device *phydev) | |||
| 841 | phydev->state = PHY_UP; | 840 | phydev->state = PHY_UP; |
| 842 | break; | 841 | break; |
| 843 | case PHY_HALTED: | 842 | case PHY_HALTED: |
| 843 | /* if phy was suspended, bring the physical link up again */ | ||
| 844 | phy_resume(phydev); | ||
| 845 | |||
| 844 | /* make sure interrupts are re-enabled for the PHY */ | 846 | /* make sure interrupts are re-enabled for the PHY */ |
| 845 | if (phydev->irq != PHY_POLL) { | 847 | if (phydev->irq != PHY_POLL) { |
| 846 | err = phy_enable_interrupts(phydev); | 848 | err = phy_enable_interrupts(phydev); |
| @@ -849,17 +851,12 @@ void phy_start(struct phy_device *phydev) | |||
| 849 | } | 851 | } |
| 850 | 852 | ||
| 851 | phydev->state = PHY_RESUMING; | 853 | phydev->state = PHY_RESUMING; |
| 852 | do_resume = true; | ||
| 853 | break; | 854 | break; |
| 854 | default: | 855 | default: |
| 855 | break; | 856 | break; |
| 856 | } | 857 | } |
| 857 | mutex_unlock(&phydev->lock); | 858 | mutex_unlock(&phydev->lock); |
| 858 | 859 | ||
| 859 | /* if phy was suspended, bring the physical link up again */ | ||
| 860 | if (do_resume) | ||
| 861 | phy_resume(phydev); | ||
| 862 | |||
| 863 | phy_trigger_machine(phydev, true); | 860 | phy_trigger_machine(phydev, true); |
| 864 | } | 861 | } |
| 865 | EXPORT_SYMBOL(phy_start); | 862 | EXPORT_SYMBOL(phy_start); |
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index 67f25ac29025..b15b31ca2618 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c | |||
| @@ -135,7 +135,9 @@ static int mdio_bus_phy_resume(struct device *dev) | |||
| 135 | if (!mdio_bus_phy_may_suspend(phydev)) | 135 | if (!mdio_bus_phy_may_suspend(phydev)) |
| 136 | goto no_resume; | 136 | goto no_resume; |
| 137 | 137 | ||
| 138 | mutex_lock(&phydev->lock); | ||
| 138 | ret = phy_resume(phydev); | 139 | ret = phy_resume(phydev); |
| 140 | mutex_unlock(&phydev->lock); | ||
| 139 | if (ret < 0) | 141 | if (ret < 0) |
| 140 | return ret; | 142 | return ret; |
| 141 | 143 | ||
| @@ -1026,7 +1028,9 @@ int phy_attach_direct(struct net_device *dev, struct phy_device *phydev, | |||
| 1026 | if (err) | 1028 | if (err) |
| 1027 | goto error; | 1029 | goto error; |
| 1028 | 1030 | ||
| 1031 | mutex_lock(&phydev->lock); | ||
| 1029 | phy_resume(phydev); | 1032 | phy_resume(phydev); |
| 1033 | mutex_unlock(&phydev->lock); | ||
| 1030 | phy_led_triggers_register(phydev); | 1034 | phy_led_triggers_register(phydev); |
| 1031 | 1035 | ||
| 1032 | return err; | 1036 | return err; |
| @@ -1157,6 +1161,8 @@ int phy_resume(struct phy_device *phydev) | |||
| 1157 | struct phy_driver *phydrv = to_phy_driver(phydev->mdio.dev.driver); | 1161 | struct phy_driver *phydrv = to_phy_driver(phydev->mdio.dev.driver); |
| 1158 | int ret = 0; | 1162 | int ret = 0; |
| 1159 | 1163 | ||
| 1164 | WARN_ON(!mutex_is_locked(&phydev->lock)); | ||
| 1165 | |||
| 1160 | if (phydev->drv && phydrv->resume) | 1166 | if (phydev->drv && phydrv->resume) |
| 1161 | ret = phydrv->resume(phydev); | 1167 | ret = phydrv->resume(phydev); |
| 1162 | 1168 | ||
| @@ -1639,13 +1645,9 @@ int genphy_resume(struct phy_device *phydev) | |||
| 1639 | { | 1645 | { |
| 1640 | int value; | 1646 | int value; |
| 1641 | 1647 | ||
| 1642 | mutex_lock(&phydev->lock); | ||
| 1643 | |||
| 1644 | value = phy_read(phydev, MII_BMCR); | 1648 | value = phy_read(phydev, MII_BMCR); |
| 1645 | phy_write(phydev, MII_BMCR, value & ~BMCR_PDOWN); | 1649 | phy_write(phydev, MII_BMCR, value & ~BMCR_PDOWN); |
| 1646 | 1650 | ||
| 1647 | mutex_unlock(&phydev->lock); | ||
| 1648 | |||
| 1649 | return 0; | 1651 | return 0; |
| 1650 | } | 1652 | } |
| 1651 | EXPORT_SYMBOL(genphy_resume); | 1653 | EXPORT_SYMBOL(genphy_resume); |
diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c index e3bbc70372d3..5dc9668dde34 100644 --- a/drivers/net/phy/phylink.c +++ b/drivers/net/phy/phylink.c | |||
| @@ -773,6 +773,7 @@ void phylink_stop(struct phylink *pl) | |||
| 773 | sfp_upstream_stop(pl->sfp_bus); | 773 | sfp_upstream_stop(pl->sfp_bus); |
| 774 | 774 | ||
| 775 | set_bit(PHYLINK_DISABLE_STOPPED, &pl->phylink_disable_state); | 775 | set_bit(PHYLINK_DISABLE_STOPPED, &pl->phylink_disable_state); |
| 776 | queue_work(system_power_efficient_wq, &pl->resolve); | ||
| 776 | flush_work(&pl->resolve); | 777 | flush_work(&pl->resolve); |
| 777 | } | 778 | } |
| 778 | EXPORT_SYMBOL_GPL(phylink_stop); | 779 | EXPORT_SYMBOL_GPL(phylink_stop); |
diff --git a/drivers/net/phy/sfp.c b/drivers/net/phy/sfp.c index e381811e5f11..9dfc1c4c954f 100644 --- a/drivers/net/phy/sfp.c +++ b/drivers/net/phy/sfp.c | |||
| @@ -351,12 +351,13 @@ static void sfp_sm_link_check_los(struct sfp *sfp) | |||
| 351 | { | 351 | { |
| 352 | unsigned int los = sfp->state & SFP_F_LOS; | 352 | unsigned int los = sfp->state & SFP_F_LOS; |
| 353 | 353 | ||
| 354 | /* FIXME: what if neither SFP_OPTIONS_LOS_INVERTED nor | 354 | /* If neither SFP_OPTIONS_LOS_INVERTED nor SFP_OPTIONS_LOS_NORMAL |
| 355 | * SFP_OPTIONS_LOS_NORMAL are set? For now, we assume | 355 | * are set, we assume that no LOS signal is available. |
| 356 | * the same as SFP_OPTIONS_LOS_NORMAL set. | ||
| 357 | */ | 356 | */ |
| 358 | if (sfp->id.ext.options & SFP_OPTIONS_LOS_INVERTED) | 357 | if (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_LOS_INVERTED)) |
| 359 | los ^= SFP_F_LOS; | 358 | los ^= SFP_F_LOS; |
| 359 | else if (!(sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_LOS_NORMAL))) | ||
| 360 | los = 0; | ||
| 360 | 361 | ||
| 361 | if (los) | 362 | if (los) |
| 362 | sfp_sm_next(sfp, SFP_S_WAIT_LOS, 0); | 363 | sfp_sm_next(sfp, SFP_S_WAIT_LOS, 0); |
| @@ -364,6 +365,22 @@ static void sfp_sm_link_check_los(struct sfp *sfp) | |||
| 364 | sfp_sm_link_up(sfp); | 365 | sfp_sm_link_up(sfp); |
| 365 | } | 366 | } |
| 366 | 367 | ||
| 368 | static bool sfp_los_event_active(struct sfp *sfp, unsigned int event) | ||
| 369 | { | ||
| 370 | return (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_LOS_INVERTED) && | ||
| 371 | event == SFP_E_LOS_LOW) || | ||
| 372 | (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_LOS_NORMAL) && | ||
| 373 | event == SFP_E_LOS_HIGH); | ||
| 374 | } | ||
| 375 | |||
| 376 | static bool sfp_los_event_inactive(struct sfp *sfp, unsigned int event) | ||
| 377 | { | ||
| 378 | return (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_LOS_INVERTED) && | ||
| 379 | event == SFP_E_LOS_HIGH) || | ||
| 380 | (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_LOS_NORMAL) && | ||
| 381 | event == SFP_E_LOS_LOW); | ||
| 382 | } | ||
| 383 | |||
| 367 | static void sfp_sm_fault(struct sfp *sfp, bool warn) | 384 | static void sfp_sm_fault(struct sfp *sfp, bool warn) |
| 368 | { | 385 | { |
| 369 | if (sfp->sm_retries && !--sfp->sm_retries) { | 386 | if (sfp->sm_retries && !--sfp->sm_retries) { |
| @@ -470,6 +487,11 @@ static int sfp_sm_mod_probe(struct sfp *sfp) | |||
| 470 | return -EINVAL; | 487 | return -EINVAL; |
| 471 | } | 488 | } |
| 472 | 489 | ||
| 490 | /* If the module requires address swap mode, warn about it */ | ||
| 491 | if (sfp->id.ext.diagmon & SFP_DIAGMON_ADDRMODE) | ||
| 492 | dev_warn(sfp->dev, | ||
| 493 | "module address swap to access page 0xA2 is not supported.\n"); | ||
| 494 | |||
| 473 | return sfp_module_insert(sfp->sfp_bus, &sfp->id); | 495 | return sfp_module_insert(sfp->sfp_bus, &sfp->id); |
| 474 | } | 496 | } |
| 475 | 497 | ||
| @@ -581,9 +603,7 @@ static void sfp_sm_event(struct sfp *sfp, unsigned int event) | |||
| 581 | case SFP_S_WAIT_LOS: | 603 | case SFP_S_WAIT_LOS: |
| 582 | if (event == SFP_E_TX_FAULT) | 604 | if (event == SFP_E_TX_FAULT) |
| 583 | sfp_sm_fault(sfp, true); | 605 | sfp_sm_fault(sfp, true); |
| 584 | else if (event == | 606 | else if (sfp_los_event_inactive(sfp, event)) |
| 585 | (sfp->id.ext.options & SFP_OPTIONS_LOS_INVERTED ? | ||
| 586 | SFP_E_LOS_HIGH : SFP_E_LOS_LOW)) | ||
| 587 | sfp_sm_link_up(sfp); | 607 | sfp_sm_link_up(sfp); |
| 588 | break; | 608 | break; |
| 589 | 609 | ||
| @@ -591,9 +611,7 @@ static void sfp_sm_event(struct sfp *sfp, unsigned int event) | |||
| 591 | if (event == SFP_E_TX_FAULT) { | 611 | if (event == SFP_E_TX_FAULT) { |
| 592 | sfp_sm_link_down(sfp); | 612 | sfp_sm_link_down(sfp); |
| 593 | sfp_sm_fault(sfp, true); | 613 | sfp_sm_fault(sfp, true); |
| 594 | } else if (event == | 614 | } else if (sfp_los_event_active(sfp, event)) { |
| 595 | (sfp->id.ext.options & SFP_OPTIONS_LOS_INVERTED ? | ||
| 596 | SFP_E_LOS_LOW : SFP_E_LOS_HIGH)) { | ||
| 597 | sfp_sm_link_down(sfp); | 615 | sfp_sm_link_down(sfp); |
| 598 | sfp_sm_next(sfp, SFP_S_WAIT_LOS, 0); | 616 | sfp_sm_next(sfp, SFP_S_WAIT_LOS, 0); |
| 599 | } | 617 | } |
| @@ -639,7 +657,8 @@ static int sfp_module_info(struct sfp *sfp, struct ethtool_modinfo *modinfo) | |||
| 639 | { | 657 | { |
| 640 | /* locking... and check module is present */ | 658 | /* locking... and check module is present */ |
| 641 | 659 | ||
| 642 | if (sfp->id.ext.sff8472_compliance) { | 660 | if (sfp->id.ext.sff8472_compliance && |
| 661 | !(sfp->id.ext.diagmon & SFP_DIAGMON_ADDRMODE)) { | ||
| 643 | modinfo->type = ETH_MODULE_SFF_8472; | 662 | modinfo->type = ETH_MODULE_SFF_8472; |
| 644 | modinfo->eeprom_len = ETH_MODULE_SFF_8472_LEN; | 663 | modinfo->eeprom_len = ETH_MODULE_SFF_8472_LEN; |
| 645 | } else { | 664 | } else { |
diff --git a/drivers/net/tap.c b/drivers/net/tap.c index e9489b88407c..0a886fda0129 100644 --- a/drivers/net/tap.c +++ b/drivers/net/tap.c | |||
| @@ -829,8 +829,11 @@ static ssize_t tap_do_read(struct tap_queue *q, | |||
| 829 | DEFINE_WAIT(wait); | 829 | DEFINE_WAIT(wait); |
| 830 | ssize_t ret = 0; | 830 | ssize_t ret = 0; |
| 831 | 831 | ||
| 832 | if (!iov_iter_count(to)) | 832 | if (!iov_iter_count(to)) { |
| 833 | if (skb) | ||
| 834 | kfree_skb(skb); | ||
| 833 | return 0; | 835 | return 0; |
| 836 | } | ||
| 834 | 837 | ||
| 835 | if (skb) | 838 | if (skb) |
| 836 | goto put; | 839 | goto put; |
| @@ -1154,11 +1157,14 @@ static int tap_recvmsg(struct socket *sock, struct msghdr *m, | |||
| 1154 | size_t total_len, int flags) | 1157 | size_t total_len, int flags) |
| 1155 | { | 1158 | { |
| 1156 | struct tap_queue *q = container_of(sock, struct tap_queue, sock); | 1159 | struct tap_queue *q = container_of(sock, struct tap_queue, sock); |
| 1160 | struct sk_buff *skb = m->msg_control; | ||
| 1157 | int ret; | 1161 | int ret; |
| 1158 | if (flags & ~(MSG_DONTWAIT|MSG_TRUNC)) | 1162 | if (flags & ~(MSG_DONTWAIT|MSG_TRUNC)) { |
| 1163 | if (skb) | ||
| 1164 | kfree_skb(skb); | ||
| 1159 | return -EINVAL; | 1165 | return -EINVAL; |
| 1160 | ret = tap_do_read(q, &m->msg_iter, flags & MSG_DONTWAIT, | 1166 | } |
| 1161 | m->msg_control); | 1167 | ret = tap_do_read(q, &m->msg_iter, flags & MSG_DONTWAIT, skb); |
| 1162 | if (ret > total_len) { | 1168 | if (ret > total_len) { |
| 1163 | m->msg_flags |= MSG_TRUNC; | 1169 | m->msg_flags |= MSG_TRUNC; |
| 1164 | ret = flags & MSG_TRUNC ? ret : total_len; | 1170 | ret = flags & MSG_TRUNC ? ret : total_len; |
diff --git a/drivers/net/thunderbolt.c b/drivers/net/thunderbolt.c index 228d4aa6d9ae..ca5e375de27c 100644 --- a/drivers/net/thunderbolt.c +++ b/drivers/net/thunderbolt.c | |||
| @@ -335,7 +335,7 @@ static void tbnet_free_buffers(struct tbnet_ring *ring) | |||
| 335 | if (ring->ring->is_tx) { | 335 | if (ring->ring->is_tx) { |
| 336 | dir = DMA_TO_DEVICE; | 336 | dir = DMA_TO_DEVICE; |
| 337 | order = 0; | 337 | order = 0; |
| 338 | size = tbnet_frame_size(tf); | 338 | size = TBNET_FRAME_SIZE; |
| 339 | } else { | 339 | } else { |
| 340 | dir = DMA_FROM_DEVICE; | 340 | dir = DMA_FROM_DEVICE; |
| 341 | order = TBNET_RX_PAGE_ORDER; | 341 | order = TBNET_RX_PAGE_ORDER; |
| @@ -512,6 +512,7 @@ err_free: | |||
| 512 | static struct tbnet_frame *tbnet_get_tx_buffer(struct tbnet *net) | 512 | static struct tbnet_frame *tbnet_get_tx_buffer(struct tbnet *net) |
| 513 | { | 513 | { |
| 514 | struct tbnet_ring *ring = &net->tx_ring; | 514 | struct tbnet_ring *ring = &net->tx_ring; |
| 515 | struct device *dma_dev = tb_ring_dma_device(ring->ring); | ||
| 515 | struct tbnet_frame *tf; | 516 | struct tbnet_frame *tf; |
| 516 | unsigned int index; | 517 | unsigned int index; |
| 517 | 518 | ||
| @@ -522,7 +523,9 @@ static struct tbnet_frame *tbnet_get_tx_buffer(struct tbnet *net) | |||
| 522 | 523 | ||
| 523 | tf = &ring->frames[index]; | 524 | tf = &ring->frames[index]; |
| 524 | tf->frame.size = 0; | 525 | tf->frame.size = 0; |
| 525 | tf->frame.buffer_phy = 0; | 526 | |
| 527 | dma_sync_single_for_cpu(dma_dev, tf->frame.buffer_phy, | ||
| 528 | tbnet_frame_size(tf), DMA_TO_DEVICE); | ||
| 526 | 529 | ||
| 527 | return tf; | 530 | return tf; |
| 528 | } | 531 | } |
| @@ -531,13 +534,8 @@ static void tbnet_tx_callback(struct tb_ring *ring, struct ring_frame *frame, | |||
| 531 | bool canceled) | 534 | bool canceled) |
| 532 | { | 535 | { |
| 533 | struct tbnet_frame *tf = container_of(frame, typeof(*tf), frame); | 536 | struct tbnet_frame *tf = container_of(frame, typeof(*tf), frame); |
| 534 | struct device *dma_dev = tb_ring_dma_device(ring); | ||
| 535 | struct tbnet *net = netdev_priv(tf->dev); | 537 | struct tbnet *net = netdev_priv(tf->dev); |
| 536 | 538 | ||
| 537 | dma_unmap_page(dma_dev, tf->frame.buffer_phy, tbnet_frame_size(tf), | ||
| 538 | DMA_TO_DEVICE); | ||
| 539 | tf->frame.buffer_phy = 0; | ||
| 540 | |||
| 541 | /* Return buffer to the ring */ | 539 | /* Return buffer to the ring */ |
| 542 | net->tx_ring.prod++; | 540 | net->tx_ring.prod++; |
| 543 | 541 | ||
| @@ -548,10 +546,12 @@ static void tbnet_tx_callback(struct tb_ring *ring, struct ring_frame *frame, | |||
| 548 | static int tbnet_alloc_tx_buffers(struct tbnet *net) | 546 | static int tbnet_alloc_tx_buffers(struct tbnet *net) |
| 549 | { | 547 | { |
| 550 | struct tbnet_ring *ring = &net->tx_ring; | 548 | struct tbnet_ring *ring = &net->tx_ring; |
| 549 | struct device *dma_dev = tb_ring_dma_device(ring->ring); | ||
| 551 | unsigned int i; | 550 | unsigned int i; |
| 552 | 551 | ||
| 553 | for (i = 0; i < TBNET_RING_SIZE; i++) { | 552 | for (i = 0; i < TBNET_RING_SIZE; i++) { |
| 554 | struct tbnet_frame *tf = &ring->frames[i]; | 553 | struct tbnet_frame *tf = &ring->frames[i]; |
| 554 | dma_addr_t dma_addr; | ||
| 555 | 555 | ||
| 556 | tf->page = alloc_page(GFP_KERNEL); | 556 | tf->page = alloc_page(GFP_KERNEL); |
| 557 | if (!tf->page) { | 557 | if (!tf->page) { |
| @@ -559,7 +559,17 @@ static int tbnet_alloc_tx_buffers(struct tbnet *net) | |||
| 559 | return -ENOMEM; | 559 | return -ENOMEM; |
| 560 | } | 560 | } |
| 561 | 561 | ||
| 562 | dma_addr = dma_map_page(dma_dev, tf->page, 0, TBNET_FRAME_SIZE, | ||
| 563 | DMA_TO_DEVICE); | ||
| 564 | if (dma_mapping_error(dma_dev, dma_addr)) { | ||
| 565 | __free_page(tf->page); | ||
| 566 | tf->page = NULL; | ||
| 567 | tbnet_free_buffers(ring); | ||
| 568 | return -ENOMEM; | ||
| 569 | } | ||
| 570 | |||
| 562 | tf->dev = net->dev; | 571 | tf->dev = net->dev; |
| 572 | tf->frame.buffer_phy = dma_addr; | ||
| 563 | tf->frame.callback = tbnet_tx_callback; | 573 | tf->frame.callback = tbnet_tx_callback; |
| 564 | tf->frame.sof = TBIP_PDF_FRAME_START; | 574 | tf->frame.sof = TBIP_PDF_FRAME_START; |
| 565 | tf->frame.eof = TBIP_PDF_FRAME_END; | 575 | tf->frame.eof = TBIP_PDF_FRAME_END; |
| @@ -881,19 +891,6 @@ static int tbnet_stop(struct net_device *dev) | |||
| 881 | return 0; | 891 | return 0; |
| 882 | } | 892 | } |
| 883 | 893 | ||
| 884 | static bool tbnet_xmit_map(struct device *dma_dev, struct tbnet_frame *tf) | ||
| 885 | { | ||
| 886 | dma_addr_t dma_addr; | ||
| 887 | |||
| 888 | dma_addr = dma_map_page(dma_dev, tf->page, 0, tbnet_frame_size(tf), | ||
| 889 | DMA_TO_DEVICE); | ||
| 890 | if (dma_mapping_error(dma_dev, dma_addr)) | ||
| 891 | return false; | ||
| 892 | |||
| 893 | tf->frame.buffer_phy = dma_addr; | ||
| 894 | return true; | ||
| 895 | } | ||
| 896 | |||
| 897 | static bool tbnet_xmit_csum_and_map(struct tbnet *net, struct sk_buff *skb, | 894 | static bool tbnet_xmit_csum_and_map(struct tbnet *net, struct sk_buff *skb, |
| 898 | struct tbnet_frame **frames, u32 frame_count) | 895 | struct tbnet_frame **frames, u32 frame_count) |
| 899 | { | 896 | { |
| @@ -908,13 +905,14 @@ static bool tbnet_xmit_csum_and_map(struct tbnet *net, struct sk_buff *skb, | |||
| 908 | 905 | ||
| 909 | if (skb->ip_summed != CHECKSUM_PARTIAL) { | 906 | if (skb->ip_summed != CHECKSUM_PARTIAL) { |
| 910 | /* No need to calculate checksum so we just update the | 907 | /* No need to calculate checksum so we just update the |
| 911 | * total frame count and map the frames for DMA. | 908 | * total frame count and sync the frames for DMA. |
| 912 | */ | 909 | */ |
| 913 | for (i = 0; i < frame_count; i++) { | 910 | for (i = 0; i < frame_count; i++) { |
| 914 | hdr = page_address(frames[i]->page); | 911 | hdr = page_address(frames[i]->page); |
| 915 | hdr->frame_count = cpu_to_le32(frame_count); | 912 | hdr->frame_count = cpu_to_le32(frame_count); |
| 916 | if (!tbnet_xmit_map(dma_dev, frames[i])) | 913 | dma_sync_single_for_device(dma_dev, |
| 917 | goto err_unmap; | 914 | frames[i]->frame.buffer_phy, |
| 915 | tbnet_frame_size(frames[i]), DMA_TO_DEVICE); | ||
| 918 | } | 916 | } |
| 919 | 917 | ||
| 920 | return true; | 918 | return true; |
| @@ -983,21 +981,14 @@ static bool tbnet_xmit_csum_and_map(struct tbnet *net, struct sk_buff *skb, | |||
| 983 | *tucso = csum_fold(wsum); | 981 | *tucso = csum_fold(wsum); |
| 984 | 982 | ||
| 985 | /* Checksum is finally calculated and we don't touch the memory | 983 | /* Checksum is finally calculated and we don't touch the memory |
| 986 | * anymore, so DMA map the frames now. | 984 | * anymore, so DMA sync the frames now. |
| 987 | */ | 985 | */ |
| 988 | for (i = 0; i < frame_count; i++) { | 986 | for (i = 0; i < frame_count; i++) { |
| 989 | if (!tbnet_xmit_map(dma_dev, frames[i])) | 987 | dma_sync_single_for_device(dma_dev, frames[i]->frame.buffer_phy, |
| 990 | goto err_unmap; | 988 | tbnet_frame_size(frames[i]), DMA_TO_DEVICE); |
| 991 | } | 989 | } |
| 992 | 990 | ||
| 993 | return true; | 991 | return true; |
| 994 | |||
| 995 | err_unmap: | ||
| 996 | while (i--) | ||
| 997 | dma_unmap_page(dma_dev, frames[i]->frame.buffer_phy, | ||
| 998 | tbnet_frame_size(frames[i]), DMA_TO_DEVICE); | ||
| 999 | |||
| 1000 | return false; | ||
| 1001 | } | 992 | } |
| 1002 | 993 | ||
| 1003 | static void *tbnet_kmap_frag(struct sk_buff *skb, unsigned int frag_num, | 994 | static void *tbnet_kmap_frag(struct sk_buff *skb, unsigned int frag_num, |
diff --git a/drivers/net/tun.c b/drivers/net/tun.c index 95749006d687..4f4a842a1c9c 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c | |||
| @@ -1952,8 +1952,11 @@ static ssize_t tun_do_read(struct tun_struct *tun, struct tun_file *tfile, | |||
| 1952 | 1952 | ||
| 1953 | tun_debug(KERN_INFO, tun, "tun_do_read\n"); | 1953 | tun_debug(KERN_INFO, tun, "tun_do_read\n"); |
| 1954 | 1954 | ||
| 1955 | if (!iov_iter_count(to)) | 1955 | if (!iov_iter_count(to)) { |
| 1956 | if (skb) | ||
| 1957 | kfree_skb(skb); | ||
| 1956 | return 0; | 1958 | return 0; |
| 1959 | } | ||
| 1957 | 1960 | ||
| 1958 | if (!skb) { | 1961 | if (!skb) { |
| 1959 | /* Read frames from ring */ | 1962 | /* Read frames from ring */ |
| @@ -2069,22 +2072,24 @@ static int tun_recvmsg(struct socket *sock, struct msghdr *m, size_t total_len, | |||
| 2069 | { | 2072 | { |
| 2070 | struct tun_file *tfile = container_of(sock, struct tun_file, socket); | 2073 | struct tun_file *tfile = container_of(sock, struct tun_file, socket); |
| 2071 | struct tun_struct *tun = tun_get(tfile); | 2074 | struct tun_struct *tun = tun_get(tfile); |
| 2075 | struct sk_buff *skb = m->msg_control; | ||
| 2072 | int ret; | 2076 | int ret; |
| 2073 | 2077 | ||
| 2074 | if (!tun) | 2078 | if (!tun) { |
| 2075 | return -EBADFD; | 2079 | ret = -EBADFD; |
| 2080 | goto out_free_skb; | ||
| 2081 | } | ||
| 2076 | 2082 | ||
| 2077 | if (flags & ~(MSG_DONTWAIT|MSG_TRUNC|MSG_ERRQUEUE)) { | 2083 | if (flags & ~(MSG_DONTWAIT|MSG_TRUNC|MSG_ERRQUEUE)) { |
| 2078 | ret = -EINVAL; | 2084 | ret = -EINVAL; |
| 2079 | goto out; | 2085 | goto out_put_tun; |
| 2080 | } | 2086 | } |
| 2081 | if (flags & MSG_ERRQUEUE) { | 2087 | if (flags & MSG_ERRQUEUE) { |
| 2082 | ret = sock_recv_errqueue(sock->sk, m, total_len, | 2088 | ret = sock_recv_errqueue(sock->sk, m, total_len, |
| 2083 | SOL_PACKET, TUN_TX_TIMESTAMP); | 2089 | SOL_PACKET, TUN_TX_TIMESTAMP); |
| 2084 | goto out; | 2090 | goto out; |
| 2085 | } | 2091 | } |
| 2086 | ret = tun_do_read(tun, tfile, &m->msg_iter, flags & MSG_DONTWAIT, | 2092 | ret = tun_do_read(tun, tfile, &m->msg_iter, flags & MSG_DONTWAIT, skb); |
| 2087 | m->msg_control); | ||
| 2088 | if (ret > (ssize_t)total_len) { | 2093 | if (ret > (ssize_t)total_len) { |
| 2089 | m->msg_flags |= MSG_TRUNC; | 2094 | m->msg_flags |= MSG_TRUNC; |
| 2090 | ret = flags & MSG_TRUNC ? ret : total_len; | 2095 | ret = flags & MSG_TRUNC ? ret : total_len; |
| @@ -2092,6 +2097,13 @@ static int tun_recvmsg(struct socket *sock, struct msghdr *m, size_t total_len, | |||
| 2092 | out: | 2097 | out: |
| 2093 | tun_put(tun); | 2098 | tun_put(tun); |
| 2094 | return ret; | 2099 | return ret; |
| 2100 | |||
| 2101 | out_put_tun: | ||
| 2102 | tun_put(tun); | ||
| 2103 | out_free_skb: | ||
| 2104 | if (skb) | ||
| 2105 | kfree_skb(skb); | ||
| 2106 | return ret; | ||
| 2095 | } | 2107 | } |
| 2096 | 2108 | ||
| 2097 | static int tun_peek_len(struct socket *sock) | 2109 | static int tun_peek_len(struct socket *sock) |
diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c index c750cf7c042b..3000ddd1c7e2 100644 --- a/drivers/net/usb/qmi_wwan.c +++ b/drivers/net/usb/qmi_wwan.c | |||
| @@ -261,9 +261,11 @@ static void qmi_wwan_netdev_setup(struct net_device *net) | |||
| 261 | net->hard_header_len = 0; | 261 | net->hard_header_len = 0; |
| 262 | net->addr_len = 0; | 262 | net->addr_len = 0; |
| 263 | net->flags = IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST; | 263 | net->flags = IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST; |
| 264 | set_bit(EVENT_NO_IP_ALIGN, &dev->flags); | ||
| 264 | netdev_dbg(net, "mode: raw IP\n"); | 265 | netdev_dbg(net, "mode: raw IP\n"); |
| 265 | } else if (!net->header_ops) { /* don't bother if already set */ | 266 | } else if (!net->header_ops) { /* don't bother if already set */ |
| 266 | ether_setup(net); | 267 | ether_setup(net); |
| 268 | clear_bit(EVENT_NO_IP_ALIGN, &dev->flags); | ||
| 267 | netdev_dbg(net, "mode: Ethernet\n"); | 269 | netdev_dbg(net, "mode: Ethernet\n"); |
| 268 | } | 270 | } |
| 269 | 271 | ||
| @@ -1202,12 +1204,14 @@ static const struct usb_device_id products[] = { | |||
| 1202 | {QMI_FIXED_INTF(0x1199, 0x9079, 10)}, /* Sierra Wireless EM74xx */ | 1204 | {QMI_FIXED_INTF(0x1199, 0x9079, 10)}, /* Sierra Wireless EM74xx */ |
| 1203 | {QMI_FIXED_INTF(0x1199, 0x907b, 8)}, /* Sierra Wireless EM74xx */ | 1205 | {QMI_FIXED_INTF(0x1199, 0x907b, 8)}, /* Sierra Wireless EM74xx */ |
| 1204 | {QMI_FIXED_INTF(0x1199, 0x907b, 10)}, /* Sierra Wireless EM74xx */ | 1206 | {QMI_FIXED_INTF(0x1199, 0x907b, 10)}, /* Sierra Wireless EM74xx */ |
| 1207 | {QMI_FIXED_INTF(0x1199, 0x9091, 8)}, /* Sierra Wireless EM7565 */ | ||
| 1205 | {QMI_FIXED_INTF(0x1bbb, 0x011e, 4)}, /* Telekom Speedstick LTE II (Alcatel One Touch L100V LTE) */ | 1208 | {QMI_FIXED_INTF(0x1bbb, 0x011e, 4)}, /* Telekom Speedstick LTE II (Alcatel One Touch L100V LTE) */ |
| 1206 | {QMI_FIXED_INTF(0x1bbb, 0x0203, 2)}, /* Alcatel L800MA */ | 1209 | {QMI_FIXED_INTF(0x1bbb, 0x0203, 2)}, /* Alcatel L800MA */ |
| 1207 | {QMI_FIXED_INTF(0x2357, 0x0201, 4)}, /* TP-LINK HSUPA Modem MA180 */ | 1210 | {QMI_FIXED_INTF(0x2357, 0x0201, 4)}, /* TP-LINK HSUPA Modem MA180 */ |
| 1208 | {QMI_FIXED_INTF(0x2357, 0x9000, 4)}, /* TP-LINK MA260 */ | 1211 | {QMI_FIXED_INTF(0x2357, 0x9000, 4)}, /* TP-LINK MA260 */ |
| 1209 | {QMI_QUIRK_SET_DTR(0x1bc7, 0x1040, 2)}, /* Telit LE922A */ | 1212 | {QMI_QUIRK_SET_DTR(0x1bc7, 0x1040, 2)}, /* Telit LE922A */ |
| 1210 | {QMI_FIXED_INTF(0x1bc7, 0x1100, 3)}, /* Telit ME910 */ | 1213 | {QMI_FIXED_INTF(0x1bc7, 0x1100, 3)}, /* Telit ME910 */ |
| 1214 | {QMI_FIXED_INTF(0x1bc7, 0x1101, 3)}, /* Telit ME910 dual modem */ | ||
| 1211 | {QMI_FIXED_INTF(0x1bc7, 0x1200, 5)}, /* Telit LE920 */ | 1215 | {QMI_FIXED_INTF(0x1bc7, 0x1200, 5)}, /* Telit LE920 */ |
| 1212 | {QMI_QUIRK_SET_DTR(0x1bc7, 0x1201, 2)}, /* Telit LE920, LE920A4 */ | 1216 | {QMI_QUIRK_SET_DTR(0x1bc7, 0x1201, 2)}, /* Telit LE920, LE920A4 */ |
| 1213 | {QMI_FIXED_INTF(0x1c9e, 0x9801, 3)}, /* Telewell TW-3G HSPA+ */ | 1217 | {QMI_FIXED_INTF(0x1c9e, 0x9801, 3)}, /* Telewell TW-3G HSPA+ */ |
diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c index 80348b6a8646..d56fe32bf48d 100644 --- a/drivers/net/usb/usbnet.c +++ b/drivers/net/usb/usbnet.c | |||
| @@ -484,7 +484,10 @@ static int rx_submit (struct usbnet *dev, struct urb *urb, gfp_t flags) | |||
| 484 | return -ENOLINK; | 484 | return -ENOLINK; |
| 485 | } | 485 | } |
| 486 | 486 | ||
| 487 | skb = __netdev_alloc_skb_ip_align(dev->net, size, flags); | 487 | if (test_bit(EVENT_NO_IP_ALIGN, &dev->flags)) |
| 488 | skb = __netdev_alloc_skb(dev->net, size, flags); | ||
| 489 | else | ||
| 490 | skb = __netdev_alloc_skb_ip_align(dev->net, size, flags); | ||
| 488 | if (!skb) { | 491 | if (!skb) { |
| 489 | netif_dbg(dev, rx_err, dev->net, "no rx skb\n"); | 492 | netif_dbg(dev, rx_err, dev->net, "no rx skb\n"); |
| 490 | usbnet_defer_kevent (dev, EVENT_RX_MEMORY); | 493 | usbnet_defer_kevent (dev, EVENT_RX_MEMORY); |
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index 19a985ef9104..559b215c0169 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c | |||
| @@ -756,7 +756,7 @@ static struct sk_buff *receive_mergeable(struct net_device *dev, | |||
| 756 | int num_skb_frags; | 756 | int num_skb_frags; |
| 757 | 757 | ||
| 758 | buf = virtqueue_get_buf_ctx(rq->vq, &len, &ctx); | 758 | buf = virtqueue_get_buf_ctx(rq->vq, &len, &ctx); |
| 759 | if (unlikely(!ctx)) { | 759 | if (unlikely(!buf)) { |
| 760 | pr_debug("%s: rx error: %d buffers out of %d missing\n", | 760 | pr_debug("%s: rx error: %d buffers out of %d missing\n", |
| 761 | dev->name, num_buf, | 761 | dev->name, num_buf, |
| 762 | virtio16_to_cpu(vi->vdev, | 762 | virtio16_to_cpu(vi->vdev, |
diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c index 7ac487031b4b..19b9cc51079e 100644 --- a/drivers/net/vxlan.c +++ b/drivers/net/vxlan.c | |||
| @@ -874,8 +874,8 @@ static int vxlan_fdb_add(struct ndmsg *ndm, struct nlattr *tb[], | |||
| 874 | 874 | ||
| 875 | static int __vxlan_fdb_delete(struct vxlan_dev *vxlan, | 875 | static int __vxlan_fdb_delete(struct vxlan_dev *vxlan, |
| 876 | const unsigned char *addr, union vxlan_addr ip, | 876 | const unsigned char *addr, union vxlan_addr ip, |
| 877 | __be16 port, __be32 src_vni, u32 vni, u32 ifindex, | 877 | __be16 port, __be32 src_vni, __be32 vni, |
| 878 | u16 vid) | 878 | u32 ifindex, u16 vid) |
| 879 | { | 879 | { |
| 880 | struct vxlan_fdb *f; | 880 | struct vxlan_fdb *f; |
| 881 | struct vxlan_rdst *rd = NULL; | 881 | struct vxlan_rdst *rd = NULL; |
diff --git a/drivers/net/wan/lmc/lmc_main.c b/drivers/net/wan/lmc/lmc_main.c index 37b1e0d03e31..90a4ad9a2d08 100644 --- a/drivers/net/wan/lmc/lmc_main.c +++ b/drivers/net/wan/lmc/lmc_main.c | |||
| @@ -494,18 +494,11 @@ int lmc_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) /*fold00*/ | |||
| 494 | break; | 494 | break; |
| 495 | } | 495 | } |
| 496 | 496 | ||
| 497 | data = kmalloc(xc.len, GFP_KERNEL); | 497 | data = memdup_user(xc.data, xc.len); |
| 498 | if (!data) { | 498 | if (IS_ERR(data)) { |
| 499 | ret = -ENOMEM; | 499 | ret = PTR_ERR(data); |
| 500 | break; | 500 | break; |
| 501 | } | 501 | } |
| 502 | |||
| 503 | if(copy_from_user(data, xc.data, xc.len)) | ||
| 504 | { | ||
| 505 | kfree(data); | ||
| 506 | ret = -ENOMEM; | ||
| 507 | break; | ||
| 508 | } | ||
| 509 | 502 | ||
| 510 | printk("%s: Starting load of data Len: %d at 0x%p == 0x%p\n", dev->name, xc.len, xc.data, data); | 503 | printk("%s: Starting load of data Len: %d at 0x%p == 0x%p\n", dev->name, xc.len, xc.data, data); |
| 511 | 504 | ||
diff --git a/drivers/net/wireless/ath/ath9k/channel.c b/drivers/net/wireless/ath/ath9k/channel.c index dfb26f03c1a2..1b05b5d7a038 100644 --- a/drivers/net/wireless/ath/ath9k/channel.c +++ b/drivers/net/wireless/ath/ath9k/channel.c | |||
| @@ -1113,7 +1113,7 @@ ath_chanctx_send_vif_ps_frame(struct ath_softc *sc, struct ath_vif *avp, | |||
| 1113 | if (!avp->assoc) | 1113 | if (!avp->assoc) |
| 1114 | return false; | 1114 | return false; |
| 1115 | 1115 | ||
| 1116 | skb = ieee80211_nullfunc_get(sc->hw, vif); | 1116 | skb = ieee80211_nullfunc_get(sc->hw, vif, false); |
| 1117 | if (!skb) | 1117 | if (!skb) |
| 1118 | return false; | 1118 | return false; |
| 1119 | 1119 | ||
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c index 310c4e2746aa..cdf9e4161592 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | |||
| @@ -2070,7 +2070,7 @@ static int brcmf_sdio_txpkt_hdalign(struct brcmf_sdio *bus, struct sk_buff *pkt) | |||
| 2070 | return head_pad; | 2070 | return head_pad; |
| 2071 | } | 2071 | } |
| 2072 | 2072 | ||
| 2073 | /** | 2073 | /* |
| 2074 | * struct brcmf_skbuff_cb reserves first two bytes in sk_buff::cb for | 2074 | * struct brcmf_skbuff_cb reserves first two bytes in sk_buff::cb for |
| 2075 | * bus layer usage. | 2075 | * bus layer usage. |
| 2076 | */ | 2076 | */ |
| @@ -4121,8 +4121,8 @@ release: | |||
| 4121 | sdio_release_host(sdiodev->func[1]); | 4121 | sdio_release_host(sdiodev->func[1]); |
| 4122 | fail: | 4122 | fail: |
| 4123 | brcmf_dbg(TRACE, "failed: dev=%s, err=%d\n", dev_name(dev), err); | 4123 | brcmf_dbg(TRACE, "failed: dev=%s, err=%d\n", dev_name(dev), err); |
| 4124 | device_release_driver(dev); | ||
| 4125 | device_release_driver(&sdiodev->func[2]->dev); | 4124 | device_release_driver(&sdiodev->func[2]->dev); |
| 4125 | device_release_driver(dev); | ||
| 4126 | } | 4126 | } |
| 4127 | 4127 | ||
| 4128 | struct brcmf_sdio *brcmf_sdio_probe(struct brcmf_sdio_dev *sdiodev) | 4128 | struct brcmf_sdio *brcmf_sdio_probe(struct brcmf_sdio_dev *sdiodev) |
diff --git a/drivers/net/wireless/intel/iwlwifi/fw/api/txq.h b/drivers/net/wireless/intel/iwlwifi/fw/api/txq.h index 87b4434224a1..dfa111bb411e 100644 --- a/drivers/net/wireless/intel/iwlwifi/fw/api/txq.h +++ b/drivers/net/wireless/intel/iwlwifi/fw/api/txq.h | |||
| @@ -68,6 +68,9 @@ | |||
| 68 | * @IWL_MVM_DQA_CMD_QUEUE: a queue reserved for sending HCMDs to the FW | 68 | * @IWL_MVM_DQA_CMD_QUEUE: a queue reserved for sending HCMDs to the FW |
| 69 | * @IWL_MVM_DQA_AUX_QUEUE: a queue reserved for aux frames | 69 | * @IWL_MVM_DQA_AUX_QUEUE: a queue reserved for aux frames |
| 70 | * @IWL_MVM_DQA_P2P_DEVICE_QUEUE: a queue reserved for P2P device frames | 70 | * @IWL_MVM_DQA_P2P_DEVICE_QUEUE: a queue reserved for P2P device frames |
| 71 | * @IWL_MVM_DQA_INJECT_MONITOR_QUEUE: a queue reserved for injection using | ||
| 72 | * monitor mode. Note this queue is the same as the queue for P2P device | ||
| 73 | * but we can't have active monitor mode along with P2P device anyway. | ||
| 71 | * @IWL_MVM_DQA_GCAST_QUEUE: a queue reserved for P2P GO/SoftAP GCAST frames | 74 | * @IWL_MVM_DQA_GCAST_QUEUE: a queue reserved for P2P GO/SoftAP GCAST frames |
| 72 | * @IWL_MVM_DQA_BSS_CLIENT_QUEUE: a queue reserved for BSS activity, to ensure | 75 | * @IWL_MVM_DQA_BSS_CLIENT_QUEUE: a queue reserved for BSS activity, to ensure |
| 73 | * that we are never left without the possibility to connect to an AP. | 76 | * that we are never left without the possibility to connect to an AP. |
| @@ -87,6 +90,7 @@ enum iwl_mvm_dqa_txq { | |||
| 87 | IWL_MVM_DQA_CMD_QUEUE = 0, | 90 | IWL_MVM_DQA_CMD_QUEUE = 0, |
| 88 | IWL_MVM_DQA_AUX_QUEUE = 1, | 91 | IWL_MVM_DQA_AUX_QUEUE = 1, |
| 89 | IWL_MVM_DQA_P2P_DEVICE_QUEUE = 2, | 92 | IWL_MVM_DQA_P2P_DEVICE_QUEUE = 2, |
| 93 | IWL_MVM_DQA_INJECT_MONITOR_QUEUE = 2, | ||
| 90 | IWL_MVM_DQA_GCAST_QUEUE = 3, | 94 | IWL_MVM_DQA_GCAST_QUEUE = 3, |
| 91 | IWL_MVM_DQA_BSS_CLIENT_QUEUE = 4, | 95 | IWL_MVM_DQA_BSS_CLIENT_QUEUE = 4, |
| 92 | IWL_MVM_DQA_MIN_MGMT_QUEUE = 5, | 96 | IWL_MVM_DQA_MIN_MGMT_QUEUE = 5, |
diff --git a/drivers/net/wireless/intel/iwlwifi/fw/dbg.h b/drivers/net/wireless/intel/iwlwifi/fw/dbg.h index 9c889a32fe24..223fb77a3aa9 100644 --- a/drivers/net/wireless/intel/iwlwifi/fw/dbg.h +++ b/drivers/net/wireless/intel/iwlwifi/fw/dbg.h | |||
| @@ -209,8 +209,6 @@ static inline void iwl_fw_dbg_stop_recording(struct iwl_fw_runtime *fwrt) | |||
| 209 | 209 | ||
| 210 | static inline void iwl_fw_dump_conf_clear(struct iwl_fw_runtime *fwrt) | 210 | static inline void iwl_fw_dump_conf_clear(struct iwl_fw_runtime *fwrt) |
| 211 | { | 211 | { |
| 212 | iwl_fw_dbg_stop_recording(fwrt); | ||
| 213 | |||
| 214 | fwrt->dump.conf = FW_DBG_INVALID; | 212 | fwrt->dump.conf = FW_DBG_INVALID; |
| 215 | } | 213 | } |
| 216 | 214 | ||
diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-trans.h b/drivers/net/wireless/intel/iwlwifi/iwl-trans.h index ca0b5536a8a6..921cab9e2d73 100644 --- a/drivers/net/wireless/intel/iwlwifi/iwl-trans.h +++ b/drivers/net/wireless/intel/iwlwifi/iwl-trans.h | |||
| @@ -117,6 +117,7 @@ | |||
| 117 | #define FH_RSCSR_FRAME_INVALID 0x55550000 | 117 | #define FH_RSCSR_FRAME_INVALID 0x55550000 |
| 118 | #define FH_RSCSR_FRAME_ALIGN 0x40 | 118 | #define FH_RSCSR_FRAME_ALIGN 0x40 |
| 119 | #define FH_RSCSR_RPA_EN BIT(25) | 119 | #define FH_RSCSR_RPA_EN BIT(25) |
| 120 | #define FH_RSCSR_RADA_EN BIT(26) | ||
| 120 | #define FH_RSCSR_RXQ_POS 16 | 121 | #define FH_RSCSR_RXQ_POS 16 |
| 121 | #define FH_RSCSR_RXQ_MASK 0x3F0000 | 122 | #define FH_RSCSR_RXQ_MASK 0x3F0000 |
| 122 | 123 | ||
| @@ -128,7 +129,8 @@ struct iwl_rx_packet { | |||
| 128 | * 31: flag flush RB request | 129 | * 31: flag flush RB request |
| 129 | * 30: flag ignore TC (terminal counter) request | 130 | * 30: flag ignore TC (terminal counter) request |
| 130 | * 29: flag fast IRQ request | 131 | * 29: flag fast IRQ request |
| 131 | * 28-26: Reserved | 132 | * 28-27: Reserved |
| 133 | * 26: RADA enabled | ||
| 132 | * 25: Offload enabled | 134 | * 25: Offload enabled |
| 133 | * 24: RPF enabled | 135 | * 24: RPF enabled |
| 134 | * 23: RSS enabled | 136 | * 23: RSS enabled |
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c b/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c index a2bf530eeae4..2f22e14e00fe 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c | |||
| @@ -787,7 +787,7 @@ static int iwl_mvm_mac_ctxt_cmd_listener(struct iwl_mvm *mvm, | |||
| 787 | u32 action) | 787 | u32 action) |
| 788 | { | 788 | { |
| 789 | struct iwl_mac_ctx_cmd cmd = {}; | 789 | struct iwl_mac_ctx_cmd cmd = {}; |
| 790 | u32 tfd_queue_msk = 0; | 790 | u32 tfd_queue_msk = BIT(mvm->snif_queue); |
| 791 | int ret; | 791 | int ret; |
| 792 | 792 | ||
| 793 | WARN_ON(vif->type != NL80211_IFTYPE_MONITOR); | 793 | WARN_ON(vif->type != NL80211_IFTYPE_MONITOR); |
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h b/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h index 4575595ab022..55ab5349dd40 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h +++ b/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h | |||
| @@ -972,6 +972,7 @@ struct iwl_mvm { | |||
| 972 | 972 | ||
| 973 | /* Tx queues */ | 973 | /* Tx queues */ |
| 974 | u16 aux_queue; | 974 | u16 aux_queue; |
| 975 | u16 snif_queue; | ||
| 975 | u16 probe_queue; | 976 | u16 probe_queue; |
| 976 | u16 p2p_dev_queue; | 977 | u16 p2p_dev_queue; |
| 977 | 978 | ||
| @@ -1060,6 +1061,7 @@ struct iwl_mvm { | |||
| 1060 | * @IWL_MVM_STATUS_ROC_AUX_RUNNING: AUX remain-on-channel is running | 1061 | * @IWL_MVM_STATUS_ROC_AUX_RUNNING: AUX remain-on-channel is running |
| 1061 | * @IWL_MVM_STATUS_D3_RECONFIG: D3 reconfiguration is being done | 1062 | * @IWL_MVM_STATUS_D3_RECONFIG: D3 reconfiguration is being done |
| 1062 | * @IWL_MVM_STATUS_FIRMWARE_RUNNING: firmware is running | 1063 | * @IWL_MVM_STATUS_FIRMWARE_RUNNING: firmware is running |
| 1064 | * @IWL_MVM_STATUS_NEED_FLUSH_P2P: need to flush P2P bcast STA | ||
| 1063 | */ | 1065 | */ |
| 1064 | enum iwl_mvm_status { | 1066 | enum iwl_mvm_status { |
| 1065 | IWL_MVM_STATUS_HW_RFKILL, | 1067 | IWL_MVM_STATUS_HW_RFKILL, |
| @@ -1071,6 +1073,7 @@ enum iwl_mvm_status { | |||
| 1071 | IWL_MVM_STATUS_ROC_AUX_RUNNING, | 1073 | IWL_MVM_STATUS_ROC_AUX_RUNNING, |
| 1072 | IWL_MVM_STATUS_D3_RECONFIG, | 1074 | IWL_MVM_STATUS_D3_RECONFIG, |
| 1073 | IWL_MVM_STATUS_FIRMWARE_RUNNING, | 1075 | IWL_MVM_STATUS_FIRMWARE_RUNNING, |
| 1076 | IWL_MVM_STATUS_NEED_FLUSH_P2P, | ||
| 1074 | }; | 1077 | }; |
| 1075 | 1078 | ||
| 1076 | /* Keep track of completed init configuration */ | 1079 | /* Keep track of completed init configuration */ |
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/ops.c b/drivers/net/wireless/intel/iwlwifi/mvm/ops.c index 7078b7e458be..45470b6b351a 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/ops.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/ops.c | |||
| @@ -624,6 +624,7 @@ iwl_op_mode_mvm_start(struct iwl_trans *trans, const struct iwl_cfg *cfg, | |||
| 624 | mvm->fw_restart = iwlwifi_mod_params.fw_restart ? -1 : 0; | 624 | mvm->fw_restart = iwlwifi_mod_params.fw_restart ? -1 : 0; |
| 625 | 625 | ||
| 626 | mvm->aux_queue = IWL_MVM_DQA_AUX_QUEUE; | 626 | mvm->aux_queue = IWL_MVM_DQA_AUX_QUEUE; |
| 627 | mvm->snif_queue = IWL_MVM_DQA_INJECT_MONITOR_QUEUE; | ||
| 627 | mvm->probe_queue = IWL_MVM_DQA_AP_PROBE_RESP_QUEUE; | 628 | mvm->probe_queue = IWL_MVM_DQA_AP_PROBE_RESP_QUEUE; |
| 628 | mvm->p2p_dev_queue = IWL_MVM_DQA_P2P_DEVICE_QUEUE; | 629 | mvm->p2p_dev_queue = IWL_MVM_DQA_P2P_DEVICE_QUEUE; |
| 629 | 630 | ||
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c b/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c index 76dc58381e1c..3b8d44361380 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c | |||
| @@ -213,6 +213,7 @@ static void iwl_mvm_get_signal_strength(struct iwl_mvm *mvm, | |||
| 213 | struct ieee80211_rx_status *rx_status) | 213 | struct ieee80211_rx_status *rx_status) |
| 214 | { | 214 | { |
| 215 | int energy_a, energy_b, max_energy; | 215 | int energy_a, energy_b, max_energy; |
| 216 | u32 rate_flags = le32_to_cpu(desc->rate_n_flags); | ||
| 216 | 217 | ||
| 217 | energy_a = desc->energy_a; | 218 | energy_a = desc->energy_a; |
| 218 | energy_a = energy_a ? -energy_a : S8_MIN; | 219 | energy_a = energy_a ? -energy_a : S8_MIN; |
| @@ -224,7 +225,8 @@ static void iwl_mvm_get_signal_strength(struct iwl_mvm *mvm, | |||
| 224 | energy_a, energy_b, max_energy); | 225 | energy_a, energy_b, max_energy); |
| 225 | 226 | ||
| 226 | rx_status->signal = max_energy; | 227 | rx_status->signal = max_energy; |
| 227 | rx_status->chains = 0; /* TODO: phy info */ | 228 | rx_status->chains = |
| 229 | (rate_flags & RATE_MCS_ANT_AB_MSK) >> RATE_MCS_ANT_POS; | ||
| 228 | rx_status->chain_signal[0] = energy_a; | 230 | rx_status->chain_signal[0] = energy_a; |
| 229 | rx_status->chain_signal[1] = energy_b; | 231 | rx_status->chain_signal[1] = energy_b; |
| 230 | rx_status->chain_signal[2] = S8_MIN; | 232 | rx_status->chain_signal[2] = S8_MIN; |
| @@ -232,8 +234,8 @@ static void iwl_mvm_get_signal_strength(struct iwl_mvm *mvm, | |||
| 232 | 234 | ||
| 233 | static int iwl_mvm_rx_crypto(struct iwl_mvm *mvm, struct ieee80211_hdr *hdr, | 235 | static int iwl_mvm_rx_crypto(struct iwl_mvm *mvm, struct ieee80211_hdr *hdr, |
| 234 | struct ieee80211_rx_status *stats, | 236 | struct ieee80211_rx_status *stats, |
| 235 | struct iwl_rx_mpdu_desc *desc, int queue, | 237 | struct iwl_rx_mpdu_desc *desc, u32 pkt_flags, |
| 236 | u8 *crypt_len) | 238 | int queue, u8 *crypt_len) |
| 237 | { | 239 | { |
| 238 | u16 status = le16_to_cpu(desc->status); | 240 | u16 status = le16_to_cpu(desc->status); |
| 239 | 241 | ||
| @@ -253,6 +255,8 @@ static int iwl_mvm_rx_crypto(struct iwl_mvm *mvm, struct ieee80211_hdr *hdr, | |||
| 253 | return -1; | 255 | return -1; |
| 254 | 256 | ||
| 255 | stats->flag |= RX_FLAG_DECRYPTED; | 257 | stats->flag |= RX_FLAG_DECRYPTED; |
| 258 | if (pkt_flags & FH_RSCSR_RADA_EN) | ||
| 259 | stats->flag |= RX_FLAG_MIC_STRIPPED; | ||
| 256 | *crypt_len = IEEE80211_CCMP_HDR_LEN; | 260 | *crypt_len = IEEE80211_CCMP_HDR_LEN; |
| 257 | return 0; | 261 | return 0; |
| 258 | case IWL_RX_MPDU_STATUS_SEC_TKIP: | 262 | case IWL_RX_MPDU_STATUS_SEC_TKIP: |
| @@ -270,6 +274,10 @@ static int iwl_mvm_rx_crypto(struct iwl_mvm *mvm, struct ieee80211_hdr *hdr, | |||
| 270 | if ((status & IWL_RX_MPDU_STATUS_SEC_MASK) == | 274 | if ((status & IWL_RX_MPDU_STATUS_SEC_MASK) == |
| 271 | IWL_RX_MPDU_STATUS_SEC_WEP) | 275 | IWL_RX_MPDU_STATUS_SEC_WEP) |
| 272 | *crypt_len = IEEE80211_WEP_IV_LEN; | 276 | *crypt_len = IEEE80211_WEP_IV_LEN; |
| 277 | |||
| 278 | if (pkt_flags & FH_RSCSR_RADA_EN) | ||
| 279 | stats->flag |= RX_FLAG_ICV_STRIPPED; | ||
| 280 | |||
| 273 | return 0; | 281 | return 0; |
| 274 | case IWL_RX_MPDU_STATUS_SEC_EXT_ENC: | 282 | case IWL_RX_MPDU_STATUS_SEC_EXT_ENC: |
| 275 | if (!(status & IWL_RX_MPDU_STATUS_MIC_OK)) | 283 | if (!(status & IWL_RX_MPDU_STATUS_MIC_OK)) |
| @@ -848,7 +856,9 @@ void iwl_mvm_rx_mpdu_mq(struct iwl_mvm *mvm, struct napi_struct *napi, | |||
| 848 | 856 | ||
| 849 | rx_status = IEEE80211_SKB_RXCB(skb); | 857 | rx_status = IEEE80211_SKB_RXCB(skb); |
| 850 | 858 | ||
| 851 | if (iwl_mvm_rx_crypto(mvm, hdr, rx_status, desc, queue, &crypt_len)) { | 859 | if (iwl_mvm_rx_crypto(mvm, hdr, rx_status, desc, |
| 860 | le32_to_cpu(pkt->len_n_flags), queue, | ||
| 861 | &crypt_len)) { | ||
| 852 | kfree_skb(skb); | 862 | kfree_skb(skb); |
| 853 | return; | 863 | return; |
| 854 | } | 864 | } |
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/sta.c b/drivers/net/wireless/intel/iwlwifi/mvm/sta.c index c19f98489d4e..1add5615fc3a 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/sta.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/sta.c | |||
| @@ -1709,29 +1709,29 @@ void iwl_mvm_dealloc_int_sta(struct iwl_mvm *mvm, struct iwl_mvm_int_sta *sta) | |||
| 1709 | sta->sta_id = IWL_MVM_INVALID_STA; | 1709 | sta->sta_id = IWL_MVM_INVALID_STA; |
| 1710 | } | 1710 | } |
| 1711 | 1711 | ||
| 1712 | static void iwl_mvm_enable_aux_queue(struct iwl_mvm *mvm) | 1712 | static void iwl_mvm_enable_aux_snif_queue(struct iwl_mvm *mvm, u16 *queue, |
| 1713 | u8 sta_id, u8 fifo) | ||
| 1713 | { | 1714 | { |
| 1714 | unsigned int wdg_timeout = iwlmvm_mod_params.tfd_q_hang_detect ? | 1715 | unsigned int wdg_timeout = iwlmvm_mod_params.tfd_q_hang_detect ? |
| 1715 | mvm->cfg->base_params->wd_timeout : | 1716 | mvm->cfg->base_params->wd_timeout : |
| 1716 | IWL_WATCHDOG_DISABLED; | 1717 | IWL_WATCHDOG_DISABLED; |
| 1717 | 1718 | ||
| 1718 | if (iwl_mvm_has_new_tx_api(mvm)) { | 1719 | if (iwl_mvm_has_new_tx_api(mvm)) { |
| 1719 | int queue = iwl_mvm_tvqm_enable_txq(mvm, mvm->aux_queue, | 1720 | int tvqm_queue = |
| 1720 | mvm->aux_sta.sta_id, | 1721 | iwl_mvm_tvqm_enable_txq(mvm, *queue, sta_id, |
| 1721 | IWL_MAX_TID_COUNT, | 1722 | IWL_MAX_TID_COUNT, |
| 1722 | wdg_timeout); | 1723 | wdg_timeout); |
| 1723 | mvm->aux_queue = queue; | 1724 | *queue = tvqm_queue; |
| 1724 | } else { | 1725 | } else { |
| 1725 | struct iwl_trans_txq_scd_cfg cfg = { | 1726 | struct iwl_trans_txq_scd_cfg cfg = { |
| 1726 | .fifo = IWL_MVM_TX_FIFO_MCAST, | 1727 | .fifo = fifo, |
| 1727 | .sta_id = mvm->aux_sta.sta_id, | 1728 | .sta_id = sta_id, |
| 1728 | .tid = IWL_MAX_TID_COUNT, | 1729 | .tid = IWL_MAX_TID_COUNT, |
| 1729 | .aggregate = false, | 1730 | .aggregate = false, |
| 1730 | .frame_limit = IWL_FRAME_LIMIT, | 1731 | .frame_limit = IWL_FRAME_LIMIT, |
| 1731 | }; | 1732 | }; |
| 1732 | 1733 | ||
| 1733 | iwl_mvm_enable_txq(mvm, mvm->aux_queue, mvm->aux_queue, 0, &cfg, | 1734 | iwl_mvm_enable_txq(mvm, *queue, *queue, 0, &cfg, wdg_timeout); |
| 1734 | wdg_timeout); | ||
| 1735 | } | 1735 | } |
| 1736 | } | 1736 | } |
| 1737 | 1737 | ||
| @@ -1750,7 +1750,9 @@ int iwl_mvm_add_aux_sta(struct iwl_mvm *mvm) | |||
| 1750 | 1750 | ||
| 1751 | /* Map Aux queue to fifo - needs to happen before adding Aux station */ | 1751 | /* Map Aux queue to fifo - needs to happen before adding Aux station */ |
| 1752 | if (!iwl_mvm_has_new_tx_api(mvm)) | 1752 | if (!iwl_mvm_has_new_tx_api(mvm)) |
| 1753 | iwl_mvm_enable_aux_queue(mvm); | 1753 | iwl_mvm_enable_aux_snif_queue(mvm, &mvm->aux_queue, |
| 1754 | mvm->aux_sta.sta_id, | ||
| 1755 | IWL_MVM_TX_FIFO_MCAST); | ||
| 1754 | 1756 | ||
| 1755 | ret = iwl_mvm_add_int_sta_common(mvm, &mvm->aux_sta, NULL, | 1757 | ret = iwl_mvm_add_int_sta_common(mvm, &mvm->aux_sta, NULL, |
| 1756 | MAC_INDEX_AUX, 0); | 1758 | MAC_INDEX_AUX, 0); |
| @@ -1764,7 +1766,9 @@ int iwl_mvm_add_aux_sta(struct iwl_mvm *mvm) | |||
| 1764 | * to firmware so enable queue here - after the station was added | 1766 | * to firmware so enable queue here - after the station was added |
| 1765 | */ | 1767 | */ |
| 1766 | if (iwl_mvm_has_new_tx_api(mvm)) | 1768 | if (iwl_mvm_has_new_tx_api(mvm)) |
| 1767 | iwl_mvm_enable_aux_queue(mvm); | 1769 | iwl_mvm_enable_aux_snif_queue(mvm, &mvm->aux_queue, |
| 1770 | mvm->aux_sta.sta_id, | ||
| 1771 | IWL_MVM_TX_FIFO_MCAST); | ||
| 1768 | 1772 | ||
| 1769 | return 0; | 1773 | return 0; |
| 1770 | } | 1774 | } |
| @@ -1772,10 +1776,31 @@ int iwl_mvm_add_aux_sta(struct iwl_mvm *mvm) | |||
| 1772 | int iwl_mvm_add_snif_sta(struct iwl_mvm *mvm, struct ieee80211_vif *vif) | 1776 | int iwl_mvm_add_snif_sta(struct iwl_mvm *mvm, struct ieee80211_vif *vif) |
| 1773 | { | 1777 | { |
| 1774 | struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif); | 1778 | struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif); |
| 1779 | int ret; | ||
| 1775 | 1780 | ||
| 1776 | lockdep_assert_held(&mvm->mutex); | 1781 | lockdep_assert_held(&mvm->mutex); |
| 1777 | return iwl_mvm_add_int_sta_common(mvm, &mvm->snif_sta, vif->addr, | 1782 | |
| 1783 | /* Map snif queue to fifo - must happen before adding snif station */ | ||
| 1784 | if (!iwl_mvm_has_new_tx_api(mvm)) | ||
| 1785 | iwl_mvm_enable_aux_snif_queue(mvm, &mvm->snif_queue, | ||
| 1786 | mvm->snif_sta.sta_id, | ||
| 1787 | IWL_MVM_TX_FIFO_BE); | ||
| 1788 | |||
| 1789 | ret = iwl_mvm_add_int_sta_common(mvm, &mvm->snif_sta, vif->addr, | ||
| 1778 | mvmvif->id, 0); | 1790 | mvmvif->id, 0); |
| 1791 | if (ret) | ||
| 1792 | return ret; | ||
| 1793 | |||
| 1794 | /* | ||
| 1795 | * For 22000 firmware and on we cannot add queue to a station unknown | ||
| 1796 | * to firmware so enable queue here - after the station was added | ||
| 1797 | */ | ||
| 1798 | if (iwl_mvm_has_new_tx_api(mvm)) | ||
| 1799 | iwl_mvm_enable_aux_snif_queue(mvm, &mvm->snif_queue, | ||
| 1800 | mvm->snif_sta.sta_id, | ||
| 1801 | IWL_MVM_TX_FIFO_BE); | ||
| 1802 | |||
| 1803 | return 0; | ||
| 1779 | } | 1804 | } |
| 1780 | 1805 | ||
| 1781 | int iwl_mvm_rm_snif_sta(struct iwl_mvm *mvm, struct ieee80211_vif *vif) | 1806 | int iwl_mvm_rm_snif_sta(struct iwl_mvm *mvm, struct ieee80211_vif *vif) |
| @@ -1784,6 +1809,8 @@ int iwl_mvm_rm_snif_sta(struct iwl_mvm *mvm, struct ieee80211_vif *vif) | |||
| 1784 | 1809 | ||
| 1785 | lockdep_assert_held(&mvm->mutex); | 1810 | lockdep_assert_held(&mvm->mutex); |
| 1786 | 1811 | ||
| 1812 | iwl_mvm_disable_txq(mvm, mvm->snif_queue, mvm->snif_queue, | ||
| 1813 | IWL_MAX_TID_COUNT, 0); | ||
| 1787 | ret = iwl_mvm_rm_sta_common(mvm, mvm->snif_sta.sta_id); | 1814 | ret = iwl_mvm_rm_sta_common(mvm, mvm->snif_sta.sta_id); |
| 1788 | if (ret) | 1815 | if (ret) |
| 1789 | IWL_WARN(mvm, "Failed sending remove station\n"); | 1816 | IWL_WARN(mvm, "Failed sending remove station\n"); |
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/time-event.c b/drivers/net/wireless/intel/iwlwifi/mvm/time-event.c index 4d0314912e94..e25cda9fbf6c 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/time-event.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/time-event.c | |||
| @@ -132,6 +132,24 @@ void iwl_mvm_roc_done_wk(struct work_struct *wk) | |||
| 132 | * executed, and a new time event means a new command. | 132 | * executed, and a new time event means a new command. |
| 133 | */ | 133 | */ |
| 134 | iwl_mvm_flush_sta(mvm, &mvm->aux_sta, true, CMD_ASYNC); | 134 | iwl_mvm_flush_sta(mvm, &mvm->aux_sta, true, CMD_ASYNC); |
| 135 | |||
| 136 | /* Do the same for the P2P device queue (STA) */ | ||
| 137 | if (test_and_clear_bit(IWL_MVM_STATUS_NEED_FLUSH_P2P, &mvm->status)) { | ||
| 138 | struct iwl_mvm_vif *mvmvif; | ||
| 139 | |||
| 140 | /* | ||
| 141 | * NB: access to this pointer would be racy, but the flush bit | ||
| 142 | * can only be set when we had a P2P-Device VIF, and we have a | ||
| 143 | * flush of this work in iwl_mvm_prepare_mac_removal() so it's | ||
| 144 | * not really racy. | ||
| 145 | */ | ||
| 146 | |||
| 147 | if (!WARN_ON(!mvm->p2p_device_vif)) { | ||
| 148 | mvmvif = iwl_mvm_vif_from_mac80211(mvm->p2p_device_vif); | ||
| 149 | iwl_mvm_flush_sta(mvm, &mvmvif->bcast_sta, true, | ||
| 150 | CMD_ASYNC); | ||
| 151 | } | ||
| 152 | } | ||
| 135 | } | 153 | } |
| 136 | 154 | ||
| 137 | static void iwl_mvm_roc_finished(struct iwl_mvm *mvm) | 155 | static void iwl_mvm_roc_finished(struct iwl_mvm *mvm) |
| @@ -855,10 +873,12 @@ void iwl_mvm_stop_roc(struct iwl_mvm *mvm) | |||
| 855 | 873 | ||
| 856 | mvmvif = iwl_mvm_vif_from_mac80211(te_data->vif); | 874 | mvmvif = iwl_mvm_vif_from_mac80211(te_data->vif); |
| 857 | 875 | ||
| 858 | if (te_data->vif->type == NL80211_IFTYPE_P2P_DEVICE) | 876 | if (te_data->vif->type == NL80211_IFTYPE_P2P_DEVICE) { |
| 859 | iwl_mvm_remove_time_event(mvm, mvmvif, te_data); | 877 | iwl_mvm_remove_time_event(mvm, mvmvif, te_data); |
| 860 | else | 878 | set_bit(IWL_MVM_STATUS_NEED_FLUSH_P2P, &mvm->status); |
| 879 | } else { | ||
| 861 | iwl_mvm_remove_aux_roc_te(mvm, mvmvif, te_data); | 880 | iwl_mvm_remove_aux_roc_te(mvm, mvmvif, te_data); |
| 881 | } | ||
| 862 | 882 | ||
| 863 | iwl_mvm_roc_finished(mvm); | 883 | iwl_mvm_roc_finished(mvm); |
| 864 | } | 884 | } |
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c index 593b7f97b29c..333bcb75b8af 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c | |||
| @@ -657,7 +657,8 @@ int iwl_mvm_tx_skb_non_sta(struct iwl_mvm *mvm, struct sk_buff *skb) | |||
| 657 | if (ap_sta_id != IWL_MVM_INVALID_STA) | 657 | if (ap_sta_id != IWL_MVM_INVALID_STA) |
| 658 | sta_id = ap_sta_id; | 658 | sta_id = ap_sta_id; |
| 659 | } else if (info.control.vif->type == NL80211_IFTYPE_MONITOR) { | 659 | } else if (info.control.vif->type == NL80211_IFTYPE_MONITOR) { |
| 660 | queue = mvm->aux_queue; | 660 | queue = mvm->snif_queue; |
| 661 | sta_id = mvm->snif_sta.sta_id; | ||
| 661 | } | 662 | } |
| 662 | } | 663 | } |
| 663 | 664 | ||
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/utils.c b/drivers/net/wireless/intel/iwlwifi/mvm/utils.c index d46115e2d69e..03ffd84786ca 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/utils.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/utils.c | |||
| @@ -1134,9 +1134,18 @@ unsigned int iwl_mvm_get_wd_timeout(struct iwl_mvm *mvm, | |||
| 1134 | unsigned int default_timeout = | 1134 | unsigned int default_timeout = |
| 1135 | cmd_q ? IWL_DEF_WD_TIMEOUT : mvm->cfg->base_params->wd_timeout; | 1135 | cmd_q ? IWL_DEF_WD_TIMEOUT : mvm->cfg->base_params->wd_timeout; |
| 1136 | 1136 | ||
| 1137 | if (!iwl_fw_dbg_trigger_enabled(mvm->fw, FW_DBG_TRIGGER_TXQ_TIMERS)) | 1137 | if (!iwl_fw_dbg_trigger_enabled(mvm->fw, FW_DBG_TRIGGER_TXQ_TIMERS)) { |
| 1138 | /* | ||
| 1139 | * We can't know when the station is asleep or awake, so we | ||
| 1140 | * must disable the queue hang detection. | ||
| 1141 | */ | ||
| 1142 | if (fw_has_capa(&mvm->fw->ucode_capa, | ||
| 1143 | IWL_UCODE_TLV_CAPA_STA_PM_NOTIF) && | ||
| 1144 | vif && vif->type == NL80211_IFTYPE_AP) | ||
| 1145 | return IWL_WATCHDOG_DISABLED; | ||
| 1138 | return iwlmvm_mod_params.tfd_q_hang_detect ? | 1146 | return iwlmvm_mod_params.tfd_q_hang_detect ? |
| 1139 | default_timeout : IWL_WATCHDOG_DISABLED; | 1147 | default_timeout : IWL_WATCHDOG_DISABLED; |
| 1148 | } | ||
| 1140 | 1149 | ||
| 1141 | trigger = iwl_fw_dbg_get_trigger(mvm->fw, FW_DBG_TRIGGER_TXQ_TIMERS); | 1150 | trigger = iwl_fw_dbg_get_trigger(mvm->fw, FW_DBG_TRIGGER_TXQ_TIMERS); |
| 1142 | txq_timer = (void *)trigger->data; | 1151 | txq_timer = (void *)trigger->data; |
| @@ -1163,6 +1172,8 @@ unsigned int iwl_mvm_get_wd_timeout(struct iwl_mvm *mvm, | |||
| 1163 | return le32_to_cpu(txq_timer->p2p_go); | 1172 | return le32_to_cpu(txq_timer->p2p_go); |
| 1164 | case NL80211_IFTYPE_P2P_DEVICE: | 1173 | case NL80211_IFTYPE_P2P_DEVICE: |
| 1165 | return le32_to_cpu(txq_timer->p2p_device); | 1174 | return le32_to_cpu(txq_timer->p2p_device); |
| 1175 | case NL80211_IFTYPE_MONITOR: | ||
| 1176 | return default_timeout; | ||
| 1166 | default: | 1177 | default: |
| 1167 | WARN_ON(1); | 1178 | WARN_ON(1); |
| 1168 | return mvm->cfg->base_params->wd_timeout; | 1179 | return mvm->cfg->base_params->wd_timeout; |
diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c index f21fe59faccf..ccd7c33c4c28 100644 --- a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c +++ b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c | |||
| @@ -553,6 +553,7 @@ static const struct pci_device_id iwl_hw_card_ids[] = { | |||
| 553 | {IWL_PCI_DEVICE(0x271B, 0x0014, iwl9160_2ac_cfg)}, | 553 | {IWL_PCI_DEVICE(0x271B, 0x0014, iwl9160_2ac_cfg)}, |
| 554 | {IWL_PCI_DEVICE(0x271B, 0x0210, iwl9160_2ac_cfg)}, | 554 | {IWL_PCI_DEVICE(0x271B, 0x0210, iwl9160_2ac_cfg)}, |
| 555 | {IWL_PCI_DEVICE(0x271B, 0x0214, iwl9260_2ac_cfg)}, | 555 | {IWL_PCI_DEVICE(0x271B, 0x0214, iwl9260_2ac_cfg)}, |
| 556 | {IWL_PCI_DEVICE(0x271C, 0x0214, iwl9260_2ac_cfg)}, | ||
| 556 | {IWL_PCI_DEVICE(0x2720, 0x0034, iwl9560_2ac_cfg)}, | 557 | {IWL_PCI_DEVICE(0x2720, 0x0034, iwl9560_2ac_cfg)}, |
| 557 | {IWL_PCI_DEVICE(0x2720, 0x0038, iwl9560_2ac_cfg)}, | 558 | {IWL_PCI_DEVICE(0x2720, 0x0038, iwl9560_2ac_cfg)}, |
| 558 | {IWL_PCI_DEVICE(0x2720, 0x003C, iwl9560_2ac_cfg)}, | 559 | {IWL_PCI_DEVICE(0x2720, 0x003C, iwl9560_2ac_cfg)}, |
| @@ -664,6 +665,7 @@ static const struct pci_device_id iwl_hw_card_ids[] = { | |||
| 664 | {IWL_PCI_DEVICE(0x2720, 0x0310, iwla000_2ac_cfg_hr_cdb)}, | 665 | {IWL_PCI_DEVICE(0x2720, 0x0310, iwla000_2ac_cfg_hr_cdb)}, |
| 665 | {IWL_PCI_DEVICE(0x40C0, 0x0000, iwla000_2ax_cfg_hr)}, | 666 | {IWL_PCI_DEVICE(0x40C0, 0x0000, iwla000_2ax_cfg_hr)}, |
| 666 | {IWL_PCI_DEVICE(0x40C0, 0x0A10, iwla000_2ax_cfg_hr)}, | 667 | {IWL_PCI_DEVICE(0x40C0, 0x0A10, iwla000_2ax_cfg_hr)}, |
| 668 | {IWL_PCI_DEVICE(0xA0F0, 0x0000, iwla000_2ax_cfg_hr)}, | ||
| 667 | 669 | ||
| 668 | #endif /* CONFIG_IWLMVM */ | 670 | #endif /* CONFIG_IWLMVM */ |
| 669 | 671 | ||
diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/trans-gen2.c b/drivers/net/wireless/intel/iwlwifi/pcie/trans-gen2.c index c59f4581e972..ac05fd1e74c4 100644 --- a/drivers/net/wireless/intel/iwlwifi/pcie/trans-gen2.c +++ b/drivers/net/wireless/intel/iwlwifi/pcie/trans-gen2.c | |||
| @@ -49,6 +49,7 @@ | |||
| 49 | * | 49 | * |
| 50 | *****************************************************************************/ | 50 | *****************************************************************************/ |
| 51 | #include "iwl-trans.h" | 51 | #include "iwl-trans.h" |
| 52 | #include "iwl-prph.h" | ||
| 52 | #include "iwl-context-info.h" | 53 | #include "iwl-context-info.h" |
| 53 | #include "internal.h" | 54 | #include "internal.h" |
| 54 | 55 | ||
| @@ -156,6 +157,11 @@ void _iwl_trans_pcie_gen2_stop_device(struct iwl_trans *trans, bool low_power) | |||
| 156 | 157 | ||
| 157 | trans_pcie->is_down = true; | 158 | trans_pcie->is_down = true; |
| 158 | 159 | ||
| 160 | /* Stop dbgc before stopping device */ | ||
| 161 | iwl_write_prph(trans, DBGC_IN_SAMPLE, 0); | ||
| 162 | udelay(100); | ||
| 163 | iwl_write_prph(trans, DBGC_OUT_CTRL, 0); | ||
| 164 | |||
| 159 | /* tell the device to stop sending interrupts */ | 165 | /* tell the device to stop sending interrupts */ |
| 160 | iwl_disable_interrupts(trans); | 166 | iwl_disable_interrupts(trans); |
| 161 | 167 | ||
diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c index b7a51603465b..4541c86881d6 100644 --- a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c +++ b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c | |||
| @@ -166,6 +166,7 @@ static void iwl_trans_pcie_dump_regs(struct iwl_trans *trans) | |||
| 166 | print_hex_dump(KERN_ERR, prefix, DUMP_PREFIX_OFFSET, 32, | 166 | print_hex_dump(KERN_ERR, prefix, DUMP_PREFIX_OFFSET, 32, |
| 167 | 4, buf, i, 0); | 167 | 4, buf, i, 0); |
| 168 | } | 168 | } |
| 169 | goto out; | ||
| 169 | 170 | ||
| 170 | err_read: | 171 | err_read: |
| 171 | print_hex_dump(KERN_ERR, prefix, DUMP_PREFIX_OFFSET, 32, 4, buf, i, 0); | 172 | print_hex_dump(KERN_ERR, prefix, DUMP_PREFIX_OFFSET, 32, 4, buf, i, 0); |
| @@ -1226,6 +1227,15 @@ static void _iwl_trans_pcie_stop_device(struct iwl_trans *trans, bool low_power) | |||
| 1226 | 1227 | ||
| 1227 | trans_pcie->is_down = true; | 1228 | trans_pcie->is_down = true; |
| 1228 | 1229 | ||
| 1230 | /* Stop dbgc before stopping device */ | ||
| 1231 | if (trans->cfg->device_family == IWL_DEVICE_FAMILY_7000) { | ||
| 1232 | iwl_set_bits_prph(trans, MON_BUFF_SAMPLE_CTL, 0x100); | ||
| 1233 | } else { | ||
| 1234 | iwl_write_prph(trans, DBGC_IN_SAMPLE, 0); | ||
| 1235 | udelay(100); | ||
| 1236 | iwl_write_prph(trans, DBGC_OUT_CTRL, 0); | ||
| 1237 | } | ||
| 1238 | |||
| 1229 | /* tell the device to stop sending interrupts */ | 1239 | /* tell the device to stop sending interrupts */ |
| 1230 | iwl_disable_interrupts(trans); | 1240 | iwl_disable_interrupts(trans); |
| 1231 | 1241 | ||
diff --git a/drivers/net/wireless/st/cw1200/sta.c b/drivers/net/wireless/st/cw1200/sta.c index 03687a80d6e9..38678e9a0562 100644 --- a/drivers/net/wireless/st/cw1200/sta.c +++ b/drivers/net/wireless/st/cw1200/sta.c | |||
| @@ -198,7 +198,7 @@ void __cw1200_cqm_bssloss_sm(struct cw1200_common *priv, | |||
| 198 | 198 | ||
| 199 | priv->bss_loss_state++; | 199 | priv->bss_loss_state++; |
| 200 | 200 | ||
| 201 | skb = ieee80211_nullfunc_get(priv->hw, priv->vif); | 201 | skb = ieee80211_nullfunc_get(priv->hw, priv->vif, false); |
| 202 | WARN_ON(!skb); | 202 | WARN_ON(!skb); |
| 203 | if (skb) | 203 | if (skb) |
| 204 | cw1200_tx(priv->hw, NULL, skb); | 204 | cw1200_tx(priv->hw, NULL, skb); |
| @@ -2265,7 +2265,7 @@ static int cw1200_upload_null(struct cw1200_common *priv) | |||
| 2265 | .rate = 0xFF, | 2265 | .rate = 0xFF, |
| 2266 | }; | 2266 | }; |
| 2267 | 2267 | ||
| 2268 | frame.skb = ieee80211_nullfunc_get(priv->hw, priv->vif); | 2268 | frame.skb = ieee80211_nullfunc_get(priv->hw, priv->vif, false); |
| 2269 | if (!frame.skb) | 2269 | if (!frame.skb) |
| 2270 | return -ENOMEM; | 2270 | return -ENOMEM; |
| 2271 | 2271 | ||
diff --git a/drivers/net/wireless/ti/wl1251/main.c b/drivers/net/wireless/ti/wl1251/main.c index 9915d83a4a30..6d02c660b4ab 100644 --- a/drivers/net/wireless/ti/wl1251/main.c +++ b/drivers/net/wireless/ti/wl1251/main.c | |||
| @@ -566,7 +566,7 @@ static int wl1251_build_null_data(struct wl1251 *wl) | |||
| 566 | size = sizeof(struct wl12xx_null_data_template); | 566 | size = sizeof(struct wl12xx_null_data_template); |
| 567 | ptr = NULL; | 567 | ptr = NULL; |
| 568 | } else { | 568 | } else { |
| 569 | skb = ieee80211_nullfunc_get(wl->hw, wl->vif); | 569 | skb = ieee80211_nullfunc_get(wl->hw, wl->vif, false); |
| 570 | if (!skb) | 570 | if (!skb) |
| 571 | goto out; | 571 | goto out; |
| 572 | size = skb->len; | 572 | size = skb->len; |
diff --git a/drivers/net/wireless/ti/wlcore/cmd.c b/drivers/net/wireless/ti/wlcore/cmd.c index 2bfc12fdc929..761cf8573a80 100644 --- a/drivers/net/wireless/ti/wlcore/cmd.c +++ b/drivers/net/wireless/ti/wlcore/cmd.c | |||
| @@ -1069,7 +1069,8 @@ int wl12xx_cmd_build_null_data(struct wl1271 *wl, struct wl12xx_vif *wlvif) | |||
| 1069 | ptr = NULL; | 1069 | ptr = NULL; |
| 1070 | } else { | 1070 | } else { |
| 1071 | skb = ieee80211_nullfunc_get(wl->hw, | 1071 | skb = ieee80211_nullfunc_get(wl->hw, |
| 1072 | wl12xx_wlvif_to_vif(wlvif)); | 1072 | wl12xx_wlvif_to_vif(wlvif), |
| 1073 | false); | ||
| 1073 | if (!skb) | 1074 | if (!skb) |
| 1074 | goto out; | 1075 | goto out; |
| 1075 | size = skb->len; | 1076 | size = skb->len; |
| @@ -1096,7 +1097,7 @@ int wl12xx_cmd_build_klv_null_data(struct wl1271 *wl, | |||
| 1096 | struct sk_buff *skb = NULL; | 1097 | struct sk_buff *skb = NULL; |
| 1097 | int ret = -ENOMEM; | 1098 | int ret = -ENOMEM; |
| 1098 | 1099 | ||
| 1099 | skb = ieee80211_nullfunc_get(wl->hw, vif); | 1100 | skb = ieee80211_nullfunc_get(wl->hw, vif, false); |
| 1100 | if (!skb) | 1101 | if (!skb) |
| 1101 | goto out; | 1102 | goto out; |
| 1102 | 1103 | ||
diff --git a/drivers/net/xen-netback/interface.c b/drivers/net/xen-netback/interface.c index d6dff347f896..78ebe494fef0 100644 --- a/drivers/net/xen-netback/interface.c +++ b/drivers/net/xen-netback/interface.c | |||
| @@ -186,7 +186,7 @@ static int xenvif_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
| 186 | /* Obtain the queue to be used to transmit this packet */ | 186 | /* Obtain the queue to be used to transmit this packet */ |
| 187 | index = skb_get_queue_mapping(skb); | 187 | index = skb_get_queue_mapping(skb); |
| 188 | if (index >= num_queues) { | 188 | if (index >= num_queues) { |
| 189 | pr_warn_ratelimited("Invalid queue %hu for packet on interface %s\n.", | 189 | pr_warn_ratelimited("Invalid queue %hu for packet on interface %s\n", |
| 190 | index, vif->dev->name); | 190 | index, vif->dev->name); |
| 191 | index %= num_queues; | 191 | index %= num_queues; |
| 192 | } | 192 | } |
diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c index 18c85e55e76a..c5a34671abda 100644 --- a/drivers/net/xen-netfront.c +++ b/drivers/net/xen-netfront.c | |||
| @@ -87,6 +87,8 @@ struct netfront_cb { | |||
| 87 | /* IRQ name is queue name with "-tx" or "-rx" appended */ | 87 | /* IRQ name is queue name with "-tx" or "-rx" appended */ |
| 88 | #define IRQ_NAME_SIZE (QUEUE_NAME_SIZE + 3) | 88 | #define IRQ_NAME_SIZE (QUEUE_NAME_SIZE + 3) |
| 89 | 89 | ||
| 90 | static DECLARE_WAIT_QUEUE_HEAD(module_unload_q); | ||
| 91 | |||
| 90 | struct netfront_stats { | 92 | struct netfront_stats { |
| 91 | u64 packets; | 93 | u64 packets; |
| 92 | u64 bytes; | 94 | u64 bytes; |
| @@ -2020,10 +2022,12 @@ static void netback_changed(struct xenbus_device *dev, | |||
| 2020 | break; | 2022 | break; |
| 2021 | 2023 | ||
| 2022 | case XenbusStateClosed: | 2024 | case XenbusStateClosed: |
| 2025 | wake_up_all(&module_unload_q); | ||
| 2023 | if (dev->state == XenbusStateClosed) | 2026 | if (dev->state == XenbusStateClosed) |
| 2024 | break; | 2027 | break; |
| 2025 | /* Missed the backend's CLOSING state -- fallthrough */ | 2028 | /* Missed the backend's CLOSING state -- fallthrough */ |
| 2026 | case XenbusStateClosing: | 2029 | case XenbusStateClosing: |
| 2030 | wake_up_all(&module_unload_q); | ||
| 2027 | xenbus_frontend_closed(dev); | 2031 | xenbus_frontend_closed(dev); |
| 2028 | break; | 2032 | break; |
| 2029 | } | 2033 | } |
| @@ -2129,6 +2133,20 @@ static int xennet_remove(struct xenbus_device *dev) | |||
| 2129 | 2133 | ||
| 2130 | dev_dbg(&dev->dev, "%s\n", dev->nodename); | 2134 | dev_dbg(&dev->dev, "%s\n", dev->nodename); |
| 2131 | 2135 | ||
| 2136 | if (xenbus_read_driver_state(dev->otherend) != XenbusStateClosed) { | ||
| 2137 | xenbus_switch_state(dev, XenbusStateClosing); | ||
| 2138 | wait_event(module_unload_q, | ||
| 2139 | xenbus_read_driver_state(dev->otherend) == | ||
| 2140 | XenbusStateClosing); | ||
| 2141 | |||
| 2142 | xenbus_switch_state(dev, XenbusStateClosed); | ||
| 2143 | wait_event(module_unload_q, | ||
| 2144 | xenbus_read_driver_state(dev->otherend) == | ||
| 2145 | XenbusStateClosed || | ||
| 2146 | xenbus_read_driver_state(dev->otherend) == | ||
| 2147 | XenbusStateUnknown); | ||
| 2148 | } | ||
| 2149 | |||
| 2132 | xennet_disconnect_backend(info); | 2150 | xennet_disconnect_backend(info); |
| 2133 | 2151 | ||
| 2134 | unregister_netdev(info->netdev); | 2152 | unregister_netdev(info->netdev); |
diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index 25da74d310d1..f837d666cbd4 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c | |||
| @@ -1449,19 +1449,19 @@ static int nvme_pr_command(struct block_device *bdev, u32 cdw10, | |||
| 1449 | int srcu_idx, ret; | 1449 | int srcu_idx, ret; |
| 1450 | u8 data[16] = { 0, }; | 1450 | u8 data[16] = { 0, }; |
| 1451 | 1451 | ||
| 1452 | ns = nvme_get_ns_from_disk(bdev->bd_disk, &head, &srcu_idx); | ||
| 1453 | if (unlikely(!ns)) | ||
| 1454 | return -EWOULDBLOCK; | ||
| 1455 | |||
| 1452 | put_unaligned_le64(key, &data[0]); | 1456 | put_unaligned_le64(key, &data[0]); |
| 1453 | put_unaligned_le64(sa_key, &data[8]); | 1457 | put_unaligned_le64(sa_key, &data[8]); |
| 1454 | 1458 | ||
| 1455 | memset(&c, 0, sizeof(c)); | 1459 | memset(&c, 0, sizeof(c)); |
| 1456 | c.common.opcode = op; | 1460 | c.common.opcode = op; |
| 1457 | c.common.nsid = cpu_to_le32(head->ns_id); | 1461 | c.common.nsid = cpu_to_le32(ns->head->ns_id); |
| 1458 | c.common.cdw10[0] = cpu_to_le32(cdw10); | 1462 | c.common.cdw10[0] = cpu_to_le32(cdw10); |
| 1459 | 1463 | ||
| 1460 | ns = nvme_get_ns_from_disk(bdev->bd_disk, &head, &srcu_idx); | 1464 | ret = nvme_submit_sync_cmd(ns->queue, &c, data, 16); |
| 1461 | if (unlikely(!ns)) | ||
| 1462 | ret = -EWOULDBLOCK; | ||
| 1463 | else | ||
| 1464 | ret = nvme_submit_sync_cmd(ns->queue, &c, data, 16); | ||
| 1465 | nvme_put_ns_from_disk(head, srcu_idx); | 1465 | nvme_put_ns_from_disk(head, srcu_idx); |
| 1466 | return ret; | 1466 | return ret; |
| 1467 | } | 1467 | } |
| @@ -2961,8 +2961,6 @@ static void nvme_alloc_ns(struct nvme_ctrl *ctrl, unsigned nsid) | |||
| 2961 | 2961 | ||
| 2962 | static void nvme_ns_remove(struct nvme_ns *ns) | 2962 | static void nvme_ns_remove(struct nvme_ns *ns) |
| 2963 | { | 2963 | { |
| 2964 | struct nvme_ns_head *head = ns->head; | ||
| 2965 | |||
| 2966 | if (test_and_set_bit(NVME_NS_REMOVING, &ns->flags)) | 2964 | if (test_and_set_bit(NVME_NS_REMOVING, &ns->flags)) |
| 2967 | return; | 2965 | return; |
| 2968 | 2966 | ||
| @@ -2980,15 +2978,14 @@ static void nvme_ns_remove(struct nvme_ns *ns) | |||
| 2980 | 2978 | ||
| 2981 | mutex_lock(&ns->ctrl->subsys->lock); | 2979 | mutex_lock(&ns->ctrl->subsys->lock); |
| 2982 | nvme_mpath_clear_current_path(ns); | 2980 | nvme_mpath_clear_current_path(ns); |
| 2983 | if (head) | 2981 | list_del_rcu(&ns->siblings); |
| 2984 | list_del_rcu(&ns->siblings); | ||
| 2985 | mutex_unlock(&ns->ctrl->subsys->lock); | 2982 | mutex_unlock(&ns->ctrl->subsys->lock); |
| 2986 | 2983 | ||
| 2987 | mutex_lock(&ns->ctrl->namespaces_mutex); | 2984 | mutex_lock(&ns->ctrl->namespaces_mutex); |
| 2988 | list_del_init(&ns->list); | 2985 | list_del_init(&ns->list); |
| 2989 | mutex_unlock(&ns->ctrl->namespaces_mutex); | 2986 | mutex_unlock(&ns->ctrl->namespaces_mutex); |
| 2990 | 2987 | ||
| 2991 | synchronize_srcu(&head->srcu); | 2988 | synchronize_srcu(&ns->head->srcu); |
| 2992 | nvme_put_ns(ns); | 2989 | nvme_put_ns(ns); |
| 2993 | } | 2990 | } |
| 2994 | 2991 | ||
diff --git a/drivers/nvme/host/fabrics.h b/drivers/nvme/host/fabrics.h index 42232e731f19..9ba614953607 100644 --- a/drivers/nvme/host/fabrics.h +++ b/drivers/nvme/host/fabrics.h | |||
| @@ -156,4 +156,34 @@ void nvmf_free_options(struct nvmf_ctrl_options *opts); | |||
| 156 | int nvmf_get_address(struct nvme_ctrl *ctrl, char *buf, int size); | 156 | int nvmf_get_address(struct nvme_ctrl *ctrl, char *buf, int size); |
| 157 | bool nvmf_should_reconnect(struct nvme_ctrl *ctrl); | 157 | bool nvmf_should_reconnect(struct nvme_ctrl *ctrl); |
| 158 | 158 | ||
| 159 | static inline blk_status_t nvmf_check_init_req(struct nvme_ctrl *ctrl, | ||
| 160 | struct request *rq) | ||
| 161 | { | ||
| 162 | struct nvme_command *cmd = nvme_req(rq)->cmd; | ||
| 163 | |||
| 164 | /* | ||
| 165 | * We cannot accept any other command until the connect command has | ||
| 166 | * completed, so only allow connect to pass. | ||
| 167 | */ | ||
| 168 | if (!blk_rq_is_passthrough(rq) || | ||
| 169 | cmd->common.opcode != nvme_fabrics_command || | ||
| 170 | cmd->fabrics.fctype != nvme_fabrics_type_connect) { | ||
| 171 | /* | ||
| 172 | * Reconnecting state means transport disruption, which can take | ||
| 173 | * a long time and even might fail permanently, fail fast to | ||
| 174 | * give upper layers a chance to failover. | ||
| 175 | * Deleting state means that the ctrl will never accept commands | ||
| 176 | * again, fail it permanently. | ||
| 177 | */ | ||
| 178 | if (ctrl->state == NVME_CTRL_RECONNECTING || | ||
| 179 | ctrl->state == NVME_CTRL_DELETING) { | ||
| 180 | nvme_req(rq)->status = NVME_SC_ABORT_REQ; | ||
| 181 | return BLK_STS_IOERR; | ||
| 182 | } | ||
| 183 | return BLK_STS_RESOURCE; /* try again later */ | ||
| 184 | } | ||
| 185 | |||
| 186 | return BLK_STS_OK; | ||
| 187 | } | ||
| 188 | |||
| 159 | #endif /* _NVME_FABRICS_H */ | 189 | #endif /* _NVME_FABRICS_H */ |
diff --git a/drivers/nvme/host/fc.c b/drivers/nvme/host/fc.c index 7ab0be55c7d0..0a8af4daef89 100644 --- a/drivers/nvme/host/fc.c +++ b/drivers/nvme/host/fc.c | |||
| @@ -31,7 +31,8 @@ | |||
| 31 | 31 | ||
| 32 | 32 | ||
| 33 | enum nvme_fc_queue_flags { | 33 | enum nvme_fc_queue_flags { |
| 34 | NVME_FC_Q_CONNECTED = (1 << 0), | 34 | NVME_FC_Q_CONNECTED = 0, |
| 35 | NVME_FC_Q_LIVE, | ||
| 35 | }; | 36 | }; |
| 36 | 37 | ||
| 37 | #define NVMEFC_QUEUE_DELAY 3 /* ms units */ | 38 | #define NVMEFC_QUEUE_DELAY 3 /* ms units */ |
| @@ -1927,6 +1928,7 @@ nvme_fc_free_queue(struct nvme_fc_queue *queue) | |||
| 1927 | if (!test_and_clear_bit(NVME_FC_Q_CONNECTED, &queue->flags)) | 1928 | if (!test_and_clear_bit(NVME_FC_Q_CONNECTED, &queue->flags)) |
| 1928 | return; | 1929 | return; |
| 1929 | 1930 | ||
| 1931 | clear_bit(NVME_FC_Q_LIVE, &queue->flags); | ||
| 1930 | /* | 1932 | /* |
| 1931 | * Current implementation never disconnects a single queue. | 1933 | * Current implementation never disconnects a single queue. |
| 1932 | * It always terminates a whole association. So there is never | 1934 | * It always terminates a whole association. So there is never |
| @@ -1934,7 +1936,6 @@ nvme_fc_free_queue(struct nvme_fc_queue *queue) | |||
| 1934 | */ | 1936 | */ |
| 1935 | 1937 | ||
| 1936 | queue->connection_id = 0; | 1938 | queue->connection_id = 0; |
| 1937 | clear_bit(NVME_FC_Q_CONNECTED, &queue->flags); | ||
| 1938 | } | 1939 | } |
| 1939 | 1940 | ||
| 1940 | static void | 1941 | static void |
| @@ -2013,6 +2014,8 @@ nvme_fc_connect_io_queues(struct nvme_fc_ctrl *ctrl, u16 qsize) | |||
| 2013 | ret = nvmf_connect_io_queue(&ctrl->ctrl, i); | 2014 | ret = nvmf_connect_io_queue(&ctrl->ctrl, i); |
| 2014 | if (ret) | 2015 | if (ret) |
| 2015 | break; | 2016 | break; |
| 2017 | |||
| 2018 | set_bit(NVME_FC_Q_LIVE, &ctrl->queues[i].flags); | ||
| 2016 | } | 2019 | } |
| 2017 | 2020 | ||
| 2018 | return ret; | 2021 | return ret; |
| @@ -2320,6 +2323,14 @@ busy: | |||
| 2320 | return BLK_STS_RESOURCE; | 2323 | return BLK_STS_RESOURCE; |
| 2321 | } | 2324 | } |
| 2322 | 2325 | ||
| 2326 | static inline blk_status_t nvme_fc_is_ready(struct nvme_fc_queue *queue, | ||
| 2327 | struct request *rq) | ||
| 2328 | { | ||
| 2329 | if (unlikely(!test_bit(NVME_FC_Q_LIVE, &queue->flags))) | ||
| 2330 | return nvmf_check_init_req(&queue->ctrl->ctrl, rq); | ||
| 2331 | return BLK_STS_OK; | ||
| 2332 | } | ||
| 2333 | |||
| 2323 | static blk_status_t | 2334 | static blk_status_t |
| 2324 | nvme_fc_queue_rq(struct blk_mq_hw_ctx *hctx, | 2335 | nvme_fc_queue_rq(struct blk_mq_hw_ctx *hctx, |
| 2325 | const struct blk_mq_queue_data *bd) | 2336 | const struct blk_mq_queue_data *bd) |
| @@ -2335,6 +2346,10 @@ nvme_fc_queue_rq(struct blk_mq_hw_ctx *hctx, | |||
| 2335 | u32 data_len; | 2346 | u32 data_len; |
| 2336 | blk_status_t ret; | 2347 | blk_status_t ret; |
| 2337 | 2348 | ||
| 2349 | ret = nvme_fc_is_ready(queue, rq); | ||
| 2350 | if (unlikely(ret)) | ||
| 2351 | return ret; | ||
| 2352 | |||
| 2338 | ret = nvme_setup_cmd(ns, rq, sqe); | 2353 | ret = nvme_setup_cmd(ns, rq, sqe); |
| 2339 | if (ret) | 2354 | if (ret) |
| 2340 | return ret; | 2355 | return ret; |
| @@ -2727,6 +2742,8 @@ nvme_fc_create_association(struct nvme_fc_ctrl *ctrl) | |||
| 2727 | if (ret) | 2742 | if (ret) |
| 2728 | goto out_disconnect_admin_queue; | 2743 | goto out_disconnect_admin_queue; |
| 2729 | 2744 | ||
| 2745 | set_bit(NVME_FC_Q_LIVE, &ctrl->queues[0].flags); | ||
| 2746 | |||
| 2730 | /* | 2747 | /* |
| 2731 | * Check controller capabilities | 2748 | * Check controller capabilities |
| 2732 | * | 2749 | * |
diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c index 78d92151a904..1218a9fca846 100644 --- a/drivers/nvme/host/multipath.c +++ b/drivers/nvme/host/multipath.c | |||
| @@ -131,7 +131,7 @@ static blk_qc_t nvme_ns_head_make_request(struct request_queue *q, | |||
| 131 | bio->bi_opf |= REQ_NVME_MPATH; | 131 | bio->bi_opf |= REQ_NVME_MPATH; |
| 132 | ret = direct_make_request(bio); | 132 | ret = direct_make_request(bio); |
| 133 | } else if (!list_empty_careful(&head->list)) { | 133 | } else if (!list_empty_careful(&head->list)) { |
| 134 | dev_warn_ratelimited(dev, "no path available - requeing I/O\n"); | 134 | dev_warn_ratelimited(dev, "no path available - requeuing I/O\n"); |
| 135 | 135 | ||
| 136 | spin_lock_irq(&head->requeue_lock); | 136 | spin_lock_irq(&head->requeue_lock); |
| 137 | bio_list_add(&head->requeue_list, bio); | 137 | bio_list_add(&head->requeue_list, bio); |
diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h index c0873a68872f..ea1aa5283e8e 100644 --- a/drivers/nvme/host/nvme.h +++ b/drivers/nvme/host/nvme.h | |||
| @@ -114,7 +114,7 @@ static inline struct nvme_request *nvme_req(struct request *req) | |||
| 114 | * NVME_QUIRK_DELAY_BEFORE_CHK_RDY quirk enabled. The value (in ms) was | 114 | * NVME_QUIRK_DELAY_BEFORE_CHK_RDY quirk enabled. The value (in ms) was |
| 115 | * found empirically. | 115 | * found empirically. |
| 116 | */ | 116 | */ |
| 117 | #define NVME_QUIRK_DELAY_AMOUNT 2000 | 117 | #define NVME_QUIRK_DELAY_AMOUNT 2300 |
| 118 | 118 | ||
| 119 | enum nvme_ctrl_state { | 119 | enum nvme_ctrl_state { |
| 120 | NVME_CTRL_NEW, | 120 | NVME_CTRL_NEW, |
diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c index a11cfd470089..f5800c3c9082 100644 --- a/drivers/nvme/host/pci.c +++ b/drivers/nvme/host/pci.c | |||
| @@ -1759,6 +1759,7 @@ static void nvme_free_host_mem(struct nvme_dev *dev) | |||
| 1759 | dev->nr_host_mem_descs * sizeof(*dev->host_mem_descs), | 1759 | dev->nr_host_mem_descs * sizeof(*dev->host_mem_descs), |
| 1760 | dev->host_mem_descs, dev->host_mem_descs_dma); | 1760 | dev->host_mem_descs, dev->host_mem_descs_dma); |
| 1761 | dev->host_mem_descs = NULL; | 1761 | dev->host_mem_descs = NULL; |
| 1762 | dev->nr_host_mem_descs = 0; | ||
| 1762 | } | 1763 | } |
| 1763 | 1764 | ||
| 1764 | static int __nvme_alloc_host_mem(struct nvme_dev *dev, u64 preferred, | 1765 | static int __nvme_alloc_host_mem(struct nvme_dev *dev, u64 preferred, |
| @@ -1787,7 +1788,7 @@ static int __nvme_alloc_host_mem(struct nvme_dev *dev, u64 preferred, | |||
| 1787 | if (!bufs) | 1788 | if (!bufs) |
| 1788 | goto out_free_descs; | 1789 | goto out_free_descs; |
| 1789 | 1790 | ||
| 1790 | for (size = 0; size < preferred; size += len) { | 1791 | for (size = 0; size < preferred && i < max_entries; size += len) { |
| 1791 | dma_addr_t dma_addr; | 1792 | dma_addr_t dma_addr; |
| 1792 | 1793 | ||
| 1793 | len = min_t(u64, chunk_size, preferred - size); | 1794 | len = min_t(u64, chunk_size, preferred - size); |
| @@ -2428,7 +2429,7 @@ static int nvme_dev_map(struct nvme_dev *dev) | |||
| 2428 | return -ENODEV; | 2429 | return -ENODEV; |
| 2429 | } | 2430 | } |
| 2430 | 2431 | ||
| 2431 | static unsigned long check_dell_samsung_bug(struct pci_dev *pdev) | 2432 | static unsigned long check_vendor_combination_bug(struct pci_dev *pdev) |
| 2432 | { | 2433 | { |
| 2433 | if (pdev->vendor == 0x144d && pdev->device == 0xa802) { | 2434 | if (pdev->vendor == 0x144d && pdev->device == 0xa802) { |
| 2434 | /* | 2435 | /* |
| @@ -2443,6 +2444,14 @@ static unsigned long check_dell_samsung_bug(struct pci_dev *pdev) | |||
| 2443 | (dmi_match(DMI_PRODUCT_NAME, "XPS 15 9550") || | 2444 | (dmi_match(DMI_PRODUCT_NAME, "XPS 15 9550") || |
| 2444 | dmi_match(DMI_PRODUCT_NAME, "Precision 5510"))) | 2445 | dmi_match(DMI_PRODUCT_NAME, "Precision 5510"))) |
| 2445 | return NVME_QUIRK_NO_DEEPEST_PS; | 2446 | return NVME_QUIRK_NO_DEEPEST_PS; |
| 2447 | } else if (pdev->vendor == 0x144d && pdev->device == 0xa804) { | ||
| 2448 | /* | ||
| 2449 | * Samsung SSD 960 EVO drops off the PCIe bus after system | ||
| 2450 | * suspend on a Ryzen board, ASUS PRIME B350M-A. | ||
| 2451 | */ | ||
| 2452 | if (dmi_match(DMI_BOARD_VENDOR, "ASUSTeK COMPUTER INC.") && | ||
| 2453 | dmi_match(DMI_BOARD_NAME, "PRIME B350M-A")) | ||
| 2454 | return NVME_QUIRK_NO_APST; | ||
| 2446 | } | 2455 | } |
| 2447 | 2456 | ||
| 2448 | return 0; | 2457 | return 0; |
| @@ -2482,7 +2491,7 @@ static int nvme_probe(struct pci_dev *pdev, const struct pci_device_id *id) | |||
| 2482 | if (result) | 2491 | if (result) |
| 2483 | goto unmap; | 2492 | goto unmap; |
| 2484 | 2493 | ||
| 2485 | quirks |= check_dell_samsung_bug(pdev); | 2494 | quirks |= check_vendor_combination_bug(pdev); |
| 2486 | 2495 | ||
| 2487 | result = nvme_init_ctrl(&dev->ctrl, &pdev->dev, &nvme_pci_ctrl_ops, | 2496 | result = nvme_init_ctrl(&dev->ctrl, &pdev->dev, &nvme_pci_ctrl_ops, |
| 2488 | quirks); | 2497 | quirks); |
| @@ -2665,6 +2674,8 @@ static const struct pci_device_id nvme_id_table[] = { | |||
| 2665 | .driver_data = NVME_QUIRK_IDENTIFY_CNS, }, | 2674 | .driver_data = NVME_QUIRK_IDENTIFY_CNS, }, |
| 2666 | { PCI_DEVICE(0x1c58, 0x0003), /* HGST adapter */ | 2675 | { PCI_DEVICE(0x1c58, 0x0003), /* HGST adapter */ |
| 2667 | .driver_data = NVME_QUIRK_DELAY_BEFORE_CHK_RDY, }, | 2676 | .driver_data = NVME_QUIRK_DELAY_BEFORE_CHK_RDY, }, |
| 2677 | { PCI_DEVICE(0x1c58, 0x0023), /* WDC SN200 adapter */ | ||
| 2678 | .driver_data = NVME_QUIRK_DELAY_BEFORE_CHK_RDY, }, | ||
| 2668 | { PCI_DEVICE(0x1c5f, 0x0540), /* Memblaze Pblaze4 adapter */ | 2679 | { PCI_DEVICE(0x1c5f, 0x0540), /* Memblaze Pblaze4 adapter */ |
| 2669 | .driver_data = NVME_QUIRK_DELAY_BEFORE_CHK_RDY, }, | 2680 | .driver_data = NVME_QUIRK_DELAY_BEFORE_CHK_RDY, }, |
| 2670 | { PCI_DEVICE(0x144d, 0xa821), /* Samsung PM1725 */ | 2681 | { PCI_DEVICE(0x144d, 0xa821), /* Samsung PM1725 */ |
diff --git a/drivers/nvme/host/rdma.c b/drivers/nvme/host/rdma.c index 4f9bf2f815c3..37af56596be6 100644 --- a/drivers/nvme/host/rdma.c +++ b/drivers/nvme/host/rdma.c | |||
| @@ -15,6 +15,7 @@ | |||
| 15 | #include <linux/module.h> | 15 | #include <linux/module.h> |
| 16 | #include <linux/init.h> | 16 | #include <linux/init.h> |
| 17 | #include <linux/slab.h> | 17 | #include <linux/slab.h> |
| 18 | #include <rdma/mr_pool.h> | ||
| 18 | #include <linux/err.h> | 19 | #include <linux/err.h> |
| 19 | #include <linux/string.h> | 20 | #include <linux/string.h> |
| 20 | #include <linux/atomic.h> | 21 | #include <linux/atomic.h> |
| @@ -59,6 +60,9 @@ struct nvme_rdma_request { | |||
| 59 | struct nvme_request req; | 60 | struct nvme_request req; |
| 60 | struct ib_mr *mr; | 61 | struct ib_mr *mr; |
| 61 | struct nvme_rdma_qe sqe; | 62 | struct nvme_rdma_qe sqe; |
| 63 | union nvme_result result; | ||
| 64 | __le16 status; | ||
| 65 | refcount_t ref; | ||
| 62 | struct ib_sge sge[1 + NVME_RDMA_MAX_INLINE_SEGMENTS]; | 66 | struct ib_sge sge[1 + NVME_RDMA_MAX_INLINE_SEGMENTS]; |
| 63 | u32 num_sge; | 67 | u32 num_sge; |
| 64 | int nents; | 68 | int nents; |
| @@ -73,11 +77,11 @@ struct nvme_rdma_request { | |||
| 73 | enum nvme_rdma_queue_flags { | 77 | enum nvme_rdma_queue_flags { |
| 74 | NVME_RDMA_Q_ALLOCATED = 0, | 78 | NVME_RDMA_Q_ALLOCATED = 0, |
| 75 | NVME_RDMA_Q_LIVE = 1, | 79 | NVME_RDMA_Q_LIVE = 1, |
| 80 | NVME_RDMA_Q_TR_READY = 2, | ||
| 76 | }; | 81 | }; |
| 77 | 82 | ||
| 78 | struct nvme_rdma_queue { | 83 | struct nvme_rdma_queue { |
| 79 | struct nvme_rdma_qe *rsp_ring; | 84 | struct nvme_rdma_qe *rsp_ring; |
| 80 | atomic_t sig_count; | ||
| 81 | int queue_size; | 85 | int queue_size; |
| 82 | size_t cmnd_capsule_len; | 86 | size_t cmnd_capsule_len; |
| 83 | struct nvme_rdma_ctrl *ctrl; | 87 | struct nvme_rdma_ctrl *ctrl; |
| @@ -258,32 +262,6 @@ static int nvme_rdma_create_qp(struct nvme_rdma_queue *queue, const int factor) | |||
| 258 | return ret; | 262 | return ret; |
| 259 | } | 263 | } |
| 260 | 264 | ||
| 261 | static int nvme_rdma_reinit_request(void *data, struct request *rq) | ||
| 262 | { | ||
| 263 | struct nvme_rdma_ctrl *ctrl = data; | ||
| 264 | struct nvme_rdma_device *dev = ctrl->device; | ||
| 265 | struct nvme_rdma_request *req = blk_mq_rq_to_pdu(rq); | ||
| 266 | int ret = 0; | ||
| 267 | |||
| 268 | if (WARN_ON_ONCE(!req->mr)) | ||
| 269 | return 0; | ||
| 270 | |||
| 271 | ib_dereg_mr(req->mr); | ||
| 272 | |||
| 273 | req->mr = ib_alloc_mr(dev->pd, IB_MR_TYPE_MEM_REG, | ||
| 274 | ctrl->max_fr_pages); | ||
| 275 | if (IS_ERR(req->mr)) { | ||
| 276 | ret = PTR_ERR(req->mr); | ||
| 277 | req->mr = NULL; | ||
| 278 | goto out; | ||
| 279 | } | ||
| 280 | |||
| 281 | req->mr->need_inval = false; | ||
| 282 | |||
| 283 | out: | ||
| 284 | return ret; | ||
| 285 | } | ||
| 286 | |||
| 287 | static void nvme_rdma_exit_request(struct blk_mq_tag_set *set, | 265 | static void nvme_rdma_exit_request(struct blk_mq_tag_set *set, |
| 288 | struct request *rq, unsigned int hctx_idx) | 266 | struct request *rq, unsigned int hctx_idx) |
| 289 | { | 267 | { |
| @@ -293,9 +271,6 @@ static void nvme_rdma_exit_request(struct blk_mq_tag_set *set, | |||
| 293 | struct nvme_rdma_queue *queue = &ctrl->queues[queue_idx]; | 271 | struct nvme_rdma_queue *queue = &ctrl->queues[queue_idx]; |
| 294 | struct nvme_rdma_device *dev = queue->device; | 272 | struct nvme_rdma_device *dev = queue->device; |
| 295 | 273 | ||
| 296 | if (req->mr) | ||
| 297 | ib_dereg_mr(req->mr); | ||
| 298 | |||
| 299 | nvme_rdma_free_qe(dev->dev, &req->sqe, sizeof(struct nvme_command), | 274 | nvme_rdma_free_qe(dev->dev, &req->sqe, sizeof(struct nvme_command), |
| 300 | DMA_TO_DEVICE); | 275 | DMA_TO_DEVICE); |
| 301 | } | 276 | } |
| @@ -317,21 +292,9 @@ static int nvme_rdma_init_request(struct blk_mq_tag_set *set, | |||
| 317 | if (ret) | 292 | if (ret) |
| 318 | return ret; | 293 | return ret; |
| 319 | 294 | ||
| 320 | req->mr = ib_alloc_mr(dev->pd, IB_MR_TYPE_MEM_REG, | ||
| 321 | ctrl->max_fr_pages); | ||
| 322 | if (IS_ERR(req->mr)) { | ||
| 323 | ret = PTR_ERR(req->mr); | ||
| 324 | goto out_free_qe; | ||
| 325 | } | ||
| 326 | |||
| 327 | req->queue = queue; | 295 | req->queue = queue; |
| 328 | 296 | ||
| 329 | return 0; | 297 | return 0; |
| 330 | |||
| 331 | out_free_qe: | ||
| 332 | nvme_rdma_free_qe(dev->dev, &req->sqe, sizeof(struct nvme_command), | ||
| 333 | DMA_TO_DEVICE); | ||
| 334 | return -ENOMEM; | ||
| 335 | } | 298 | } |
| 336 | 299 | ||
| 337 | static int nvme_rdma_init_hctx(struct blk_mq_hw_ctx *hctx, void *data, | 300 | static int nvme_rdma_init_hctx(struct blk_mq_hw_ctx *hctx, void *data, |
| @@ -428,10 +391,23 @@ out_err: | |||
| 428 | 391 | ||
| 429 | static void nvme_rdma_destroy_queue_ib(struct nvme_rdma_queue *queue) | 392 | static void nvme_rdma_destroy_queue_ib(struct nvme_rdma_queue *queue) |
| 430 | { | 393 | { |
| 431 | struct nvme_rdma_device *dev = queue->device; | 394 | struct nvme_rdma_device *dev; |
| 432 | struct ib_device *ibdev = dev->dev; | 395 | struct ib_device *ibdev; |
| 433 | 396 | ||
| 434 | rdma_destroy_qp(queue->cm_id); | 397 | if (!test_and_clear_bit(NVME_RDMA_Q_TR_READY, &queue->flags)) |
| 398 | return; | ||
| 399 | |||
| 400 | dev = queue->device; | ||
| 401 | ibdev = dev->dev; | ||
| 402 | |||
| 403 | ib_mr_pool_destroy(queue->qp, &queue->qp->rdma_mrs); | ||
| 404 | |||
| 405 | /* | ||
| 406 | * The cm_id object might have been destroyed during RDMA connection | ||
| 407 | * establishment error flow to avoid getting other cma events, thus | ||
| 408 | * the destruction of the QP shouldn't use rdma_cm API. | ||
| 409 | */ | ||
| 410 | ib_destroy_qp(queue->qp); | ||
| 435 | ib_free_cq(queue->ib_cq); | 411 | ib_free_cq(queue->ib_cq); |
| 436 | 412 | ||
| 437 | nvme_rdma_free_ring(ibdev, queue->rsp_ring, queue->queue_size, | 413 | nvme_rdma_free_ring(ibdev, queue->rsp_ring, queue->queue_size, |
| @@ -440,6 +416,12 @@ static void nvme_rdma_destroy_queue_ib(struct nvme_rdma_queue *queue) | |||
| 440 | nvme_rdma_dev_put(dev); | 416 | nvme_rdma_dev_put(dev); |
| 441 | } | 417 | } |
| 442 | 418 | ||
| 419 | static int nvme_rdma_get_max_fr_pages(struct ib_device *ibdev) | ||
| 420 | { | ||
| 421 | return min_t(u32, NVME_RDMA_MAX_SEGMENTS, | ||
| 422 | ibdev->attrs.max_fast_reg_page_list_len); | ||
| 423 | } | ||
| 424 | |||
| 443 | static int nvme_rdma_create_queue_ib(struct nvme_rdma_queue *queue) | 425 | static int nvme_rdma_create_queue_ib(struct nvme_rdma_queue *queue) |
| 444 | { | 426 | { |
| 445 | struct ib_device *ibdev; | 427 | struct ib_device *ibdev; |
| @@ -482,8 +464,24 @@ static int nvme_rdma_create_queue_ib(struct nvme_rdma_queue *queue) | |||
| 482 | goto out_destroy_qp; | 464 | goto out_destroy_qp; |
| 483 | } | 465 | } |
| 484 | 466 | ||
| 467 | ret = ib_mr_pool_init(queue->qp, &queue->qp->rdma_mrs, | ||
| 468 | queue->queue_size, | ||
| 469 | IB_MR_TYPE_MEM_REG, | ||
| 470 | nvme_rdma_get_max_fr_pages(ibdev)); | ||
| 471 | if (ret) { | ||
| 472 | dev_err(queue->ctrl->ctrl.device, | ||
| 473 | "failed to initialize MR pool sized %d for QID %d\n", | ||
| 474 | queue->queue_size, idx); | ||
| 475 | goto out_destroy_ring; | ||
| 476 | } | ||
| 477 | |||
| 478 | set_bit(NVME_RDMA_Q_TR_READY, &queue->flags); | ||
| 479 | |||
| 485 | return 0; | 480 | return 0; |
| 486 | 481 | ||
| 482 | out_destroy_ring: | ||
| 483 | nvme_rdma_free_ring(ibdev, queue->rsp_ring, queue->queue_size, | ||
| 484 | sizeof(struct nvme_completion), DMA_FROM_DEVICE); | ||
| 487 | out_destroy_qp: | 485 | out_destroy_qp: |
| 488 | rdma_destroy_qp(queue->cm_id); | 486 | rdma_destroy_qp(queue->cm_id); |
| 489 | out_destroy_ib_cq: | 487 | out_destroy_ib_cq: |
| @@ -510,7 +508,6 @@ static int nvme_rdma_alloc_queue(struct nvme_rdma_ctrl *ctrl, | |||
| 510 | queue->cmnd_capsule_len = sizeof(struct nvme_command); | 508 | queue->cmnd_capsule_len = sizeof(struct nvme_command); |
| 511 | 509 | ||
| 512 | queue->queue_size = queue_size; | 510 | queue->queue_size = queue_size; |
| 513 | atomic_set(&queue->sig_count, 0); | ||
| 514 | 511 | ||
| 515 | queue->cm_id = rdma_create_id(&init_net, nvme_rdma_cm_handler, queue, | 512 | queue->cm_id = rdma_create_id(&init_net, nvme_rdma_cm_handler, queue, |
| 516 | RDMA_PS_TCP, IB_QPT_RC); | 513 | RDMA_PS_TCP, IB_QPT_RC); |
| @@ -546,6 +543,7 @@ static int nvme_rdma_alloc_queue(struct nvme_rdma_ctrl *ctrl, | |||
| 546 | 543 | ||
| 547 | out_destroy_cm_id: | 544 | out_destroy_cm_id: |
| 548 | rdma_destroy_id(queue->cm_id); | 545 | rdma_destroy_id(queue->cm_id); |
| 546 | nvme_rdma_destroy_queue_ib(queue); | ||
| 549 | return ret; | 547 | return ret; |
| 550 | } | 548 | } |
| 551 | 549 | ||
| @@ -756,8 +754,7 @@ static int nvme_rdma_configure_admin_queue(struct nvme_rdma_ctrl *ctrl, | |||
| 756 | 754 | ||
| 757 | ctrl->device = ctrl->queues[0].device; | 755 | ctrl->device = ctrl->queues[0].device; |
| 758 | 756 | ||
| 759 | ctrl->max_fr_pages = min_t(u32, NVME_RDMA_MAX_SEGMENTS, | 757 | ctrl->max_fr_pages = nvme_rdma_get_max_fr_pages(ctrl->device->dev); |
| 760 | ctrl->device->dev->attrs.max_fast_reg_page_list_len); | ||
| 761 | 758 | ||
| 762 | if (new) { | 759 | if (new) { |
| 763 | ctrl->ctrl.admin_tagset = nvme_rdma_alloc_tagset(&ctrl->ctrl, true); | 760 | ctrl->ctrl.admin_tagset = nvme_rdma_alloc_tagset(&ctrl->ctrl, true); |
| @@ -771,10 +768,6 @@ static int nvme_rdma_configure_admin_queue(struct nvme_rdma_ctrl *ctrl, | |||
| 771 | error = PTR_ERR(ctrl->ctrl.admin_q); | 768 | error = PTR_ERR(ctrl->ctrl.admin_q); |
| 772 | goto out_free_tagset; | 769 | goto out_free_tagset; |
| 773 | } | 770 | } |
| 774 | } else { | ||
| 775 | error = nvme_reinit_tagset(&ctrl->ctrl, ctrl->ctrl.admin_tagset); | ||
| 776 | if (error) | ||
| 777 | goto out_free_queue; | ||
| 778 | } | 771 | } |
| 779 | 772 | ||
| 780 | error = nvme_rdma_start_queue(ctrl, 0); | 773 | error = nvme_rdma_start_queue(ctrl, 0); |
| @@ -854,10 +847,6 @@ static int nvme_rdma_configure_io_queues(struct nvme_rdma_ctrl *ctrl, bool new) | |||
| 854 | goto out_free_tag_set; | 847 | goto out_free_tag_set; |
| 855 | } | 848 | } |
| 856 | } else { | 849 | } else { |
| 857 | ret = nvme_reinit_tagset(&ctrl->ctrl, ctrl->ctrl.tagset); | ||
| 858 | if (ret) | ||
| 859 | goto out_free_io_queues; | ||
| 860 | |||
| 861 | blk_mq_update_nr_hw_queues(&ctrl->tag_set, | 850 | blk_mq_update_nr_hw_queues(&ctrl->tag_set, |
| 862 | ctrl->ctrl.queue_count - 1); | 851 | ctrl->ctrl.queue_count - 1); |
| 863 | } | 852 | } |
| @@ -1018,8 +1007,18 @@ static void nvme_rdma_memreg_done(struct ib_cq *cq, struct ib_wc *wc) | |||
| 1018 | 1007 | ||
| 1019 | static void nvme_rdma_inv_rkey_done(struct ib_cq *cq, struct ib_wc *wc) | 1008 | static void nvme_rdma_inv_rkey_done(struct ib_cq *cq, struct ib_wc *wc) |
| 1020 | { | 1009 | { |
| 1021 | if (unlikely(wc->status != IB_WC_SUCCESS)) | 1010 | struct nvme_rdma_request *req = |
| 1011 | container_of(wc->wr_cqe, struct nvme_rdma_request, reg_cqe); | ||
| 1012 | struct request *rq = blk_mq_rq_from_pdu(req); | ||
| 1013 | |||
| 1014 | if (unlikely(wc->status != IB_WC_SUCCESS)) { | ||
| 1022 | nvme_rdma_wr_error(cq, wc, "LOCAL_INV"); | 1015 | nvme_rdma_wr_error(cq, wc, "LOCAL_INV"); |
| 1016 | return; | ||
| 1017 | } | ||
| 1018 | |||
| 1019 | if (refcount_dec_and_test(&req->ref)) | ||
| 1020 | nvme_end_request(rq, req->status, req->result); | ||
| 1021 | |||
| 1023 | } | 1022 | } |
| 1024 | 1023 | ||
| 1025 | static int nvme_rdma_inv_rkey(struct nvme_rdma_queue *queue, | 1024 | static int nvme_rdma_inv_rkey(struct nvme_rdma_queue *queue, |
| @@ -1030,7 +1029,7 @@ static int nvme_rdma_inv_rkey(struct nvme_rdma_queue *queue, | |||
| 1030 | .opcode = IB_WR_LOCAL_INV, | 1029 | .opcode = IB_WR_LOCAL_INV, |
| 1031 | .next = NULL, | 1030 | .next = NULL, |
| 1032 | .num_sge = 0, | 1031 | .num_sge = 0, |
| 1033 | .send_flags = 0, | 1032 | .send_flags = IB_SEND_SIGNALED, |
| 1034 | .ex.invalidate_rkey = req->mr->rkey, | 1033 | .ex.invalidate_rkey = req->mr->rkey, |
| 1035 | }; | 1034 | }; |
| 1036 | 1035 | ||
| @@ -1044,22 +1043,15 @@ static void nvme_rdma_unmap_data(struct nvme_rdma_queue *queue, | |||
| 1044 | struct request *rq) | 1043 | struct request *rq) |
| 1045 | { | 1044 | { |
| 1046 | struct nvme_rdma_request *req = blk_mq_rq_to_pdu(rq); | 1045 | struct nvme_rdma_request *req = blk_mq_rq_to_pdu(rq); |
| 1047 | struct nvme_rdma_ctrl *ctrl = queue->ctrl; | ||
| 1048 | struct nvme_rdma_device *dev = queue->device; | 1046 | struct nvme_rdma_device *dev = queue->device; |
| 1049 | struct ib_device *ibdev = dev->dev; | 1047 | struct ib_device *ibdev = dev->dev; |
| 1050 | int res; | ||
| 1051 | 1048 | ||
| 1052 | if (!blk_rq_bytes(rq)) | 1049 | if (!blk_rq_bytes(rq)) |
| 1053 | return; | 1050 | return; |
| 1054 | 1051 | ||
| 1055 | if (req->mr->need_inval && test_bit(NVME_RDMA_Q_LIVE, &req->queue->flags)) { | 1052 | if (req->mr) { |
| 1056 | res = nvme_rdma_inv_rkey(queue, req); | 1053 | ib_mr_pool_put(queue->qp, &queue->qp->rdma_mrs, req->mr); |
| 1057 | if (unlikely(res < 0)) { | 1054 | req->mr = NULL; |
| 1058 | dev_err(ctrl->ctrl.device, | ||
| 1059 | "Queueing INV WR for rkey %#x failed (%d)\n", | ||
| 1060 | req->mr->rkey, res); | ||
| 1061 | nvme_rdma_error_recovery(queue->ctrl); | ||
| 1062 | } | ||
| 1063 | } | 1055 | } |
| 1064 | 1056 | ||
| 1065 | ib_dma_unmap_sg(ibdev, req->sg_table.sgl, | 1057 | ib_dma_unmap_sg(ibdev, req->sg_table.sgl, |
| @@ -1118,12 +1110,18 @@ static int nvme_rdma_map_sg_fr(struct nvme_rdma_queue *queue, | |||
| 1118 | struct nvme_keyed_sgl_desc *sg = &c->common.dptr.ksgl; | 1110 | struct nvme_keyed_sgl_desc *sg = &c->common.dptr.ksgl; |
| 1119 | int nr; | 1111 | int nr; |
| 1120 | 1112 | ||
| 1113 | req->mr = ib_mr_pool_get(queue->qp, &queue->qp->rdma_mrs); | ||
| 1114 | if (WARN_ON_ONCE(!req->mr)) | ||
| 1115 | return -EAGAIN; | ||
| 1116 | |||
| 1121 | /* | 1117 | /* |
| 1122 | * Align the MR to a 4K page size to match the ctrl page size and | 1118 | * Align the MR to a 4K page size to match the ctrl page size and |
| 1123 | * the block virtual boundary. | 1119 | * the block virtual boundary. |
| 1124 | */ | 1120 | */ |
| 1125 | nr = ib_map_mr_sg(req->mr, req->sg_table.sgl, count, NULL, SZ_4K); | 1121 | nr = ib_map_mr_sg(req->mr, req->sg_table.sgl, count, NULL, SZ_4K); |
| 1126 | if (unlikely(nr < count)) { | 1122 | if (unlikely(nr < count)) { |
| 1123 | ib_mr_pool_put(queue->qp, &queue->qp->rdma_mrs, req->mr); | ||
| 1124 | req->mr = NULL; | ||
| 1127 | if (nr < 0) | 1125 | if (nr < 0) |
| 1128 | return nr; | 1126 | return nr; |
| 1129 | return -EINVAL; | 1127 | return -EINVAL; |
| @@ -1142,8 +1140,6 @@ static int nvme_rdma_map_sg_fr(struct nvme_rdma_queue *queue, | |||
| 1142 | IB_ACCESS_REMOTE_READ | | 1140 | IB_ACCESS_REMOTE_READ | |
| 1143 | IB_ACCESS_REMOTE_WRITE; | 1141 | IB_ACCESS_REMOTE_WRITE; |
| 1144 | 1142 | ||
| 1145 | req->mr->need_inval = true; | ||
| 1146 | |||
| 1147 | sg->addr = cpu_to_le64(req->mr->iova); | 1143 | sg->addr = cpu_to_le64(req->mr->iova); |
| 1148 | put_unaligned_le24(req->mr->length, sg->length); | 1144 | put_unaligned_le24(req->mr->length, sg->length); |
| 1149 | put_unaligned_le32(req->mr->rkey, sg->key); | 1145 | put_unaligned_le32(req->mr->rkey, sg->key); |
| @@ -1163,7 +1159,7 @@ static int nvme_rdma_map_data(struct nvme_rdma_queue *queue, | |||
| 1163 | 1159 | ||
| 1164 | req->num_sge = 1; | 1160 | req->num_sge = 1; |
| 1165 | req->inline_data = false; | 1161 | req->inline_data = false; |
| 1166 | req->mr->need_inval = false; | 1162 | refcount_set(&req->ref, 2); /* send and recv completions */ |
| 1167 | 1163 | ||
| 1168 | c->common.flags |= NVME_CMD_SGL_METABUF; | 1164 | c->common.flags |= NVME_CMD_SGL_METABUF; |
| 1169 | 1165 | ||
| @@ -1200,25 +1196,24 @@ static int nvme_rdma_map_data(struct nvme_rdma_queue *queue, | |||
| 1200 | 1196 | ||
| 1201 | static void nvme_rdma_send_done(struct ib_cq *cq, struct ib_wc *wc) | 1197 | static void nvme_rdma_send_done(struct ib_cq *cq, struct ib_wc *wc) |
| 1202 | { | 1198 | { |
| 1203 | if (unlikely(wc->status != IB_WC_SUCCESS)) | 1199 | struct nvme_rdma_qe *qe = |
| 1204 | nvme_rdma_wr_error(cq, wc, "SEND"); | 1200 | container_of(wc->wr_cqe, struct nvme_rdma_qe, cqe); |
| 1205 | } | 1201 | struct nvme_rdma_request *req = |
| 1202 | container_of(qe, struct nvme_rdma_request, sqe); | ||
| 1203 | struct request *rq = blk_mq_rq_from_pdu(req); | ||
| 1206 | 1204 | ||
| 1207 | /* | 1205 | if (unlikely(wc->status != IB_WC_SUCCESS)) { |
| 1208 | * We want to signal completion at least every queue depth/2. This returns the | 1206 | nvme_rdma_wr_error(cq, wc, "SEND"); |
| 1209 | * largest power of two that is not above half of (queue size + 1) to optimize | 1207 | return; |
| 1210 | * (avoid divisions). | 1208 | } |
| 1211 | */ | ||
| 1212 | static inline bool nvme_rdma_queue_sig_limit(struct nvme_rdma_queue *queue) | ||
| 1213 | { | ||
| 1214 | int limit = 1 << ilog2((queue->queue_size + 1) / 2); | ||
| 1215 | 1209 | ||
| 1216 | return (atomic_inc_return(&queue->sig_count) & (limit - 1)) == 0; | 1210 | if (refcount_dec_and_test(&req->ref)) |
| 1211 | nvme_end_request(rq, req->status, req->result); | ||
| 1217 | } | 1212 | } |
| 1218 | 1213 | ||
| 1219 | static int nvme_rdma_post_send(struct nvme_rdma_queue *queue, | 1214 | static int nvme_rdma_post_send(struct nvme_rdma_queue *queue, |
| 1220 | struct nvme_rdma_qe *qe, struct ib_sge *sge, u32 num_sge, | 1215 | struct nvme_rdma_qe *qe, struct ib_sge *sge, u32 num_sge, |
| 1221 | struct ib_send_wr *first, bool flush) | 1216 | struct ib_send_wr *first) |
| 1222 | { | 1217 | { |
| 1223 | struct ib_send_wr wr, *bad_wr; | 1218 | struct ib_send_wr wr, *bad_wr; |
| 1224 | int ret; | 1219 | int ret; |
| @@ -1227,31 +1222,12 @@ static int nvme_rdma_post_send(struct nvme_rdma_queue *queue, | |||
| 1227 | sge->length = sizeof(struct nvme_command), | 1222 | sge->length = sizeof(struct nvme_command), |
| 1228 | sge->lkey = queue->device->pd->local_dma_lkey; | 1223 | sge->lkey = queue->device->pd->local_dma_lkey; |
| 1229 | 1224 | ||
| 1230 | qe->cqe.done = nvme_rdma_send_done; | ||
| 1231 | |||
| 1232 | wr.next = NULL; | 1225 | wr.next = NULL; |
| 1233 | wr.wr_cqe = &qe->cqe; | 1226 | wr.wr_cqe = &qe->cqe; |
| 1234 | wr.sg_list = sge; | 1227 | wr.sg_list = sge; |
| 1235 | wr.num_sge = num_sge; | 1228 | wr.num_sge = num_sge; |
| 1236 | wr.opcode = IB_WR_SEND; | 1229 | wr.opcode = IB_WR_SEND; |
| 1237 | wr.send_flags = 0; | 1230 | wr.send_flags = IB_SEND_SIGNALED; |
| 1238 | |||
| 1239 | /* | ||
| 1240 | * Unsignalled send completions are another giant desaster in the | ||
| 1241 | * IB Verbs spec: If we don't regularly post signalled sends | ||
| 1242 | * the send queue will fill up and only a QP reset will rescue us. | ||
| 1243 | * Would have been way to obvious to handle this in hardware or | ||
| 1244 | * at least the RDMA stack.. | ||
| 1245 | * | ||
| 1246 | * Always signal the flushes. The magic request used for the flush | ||
| 1247 | * sequencer is not allocated in our driver's tagset and it's | ||
| 1248 | * triggered to be freed by blk_cleanup_queue(). So we need to | ||
| 1249 | * always mark it as signaled to ensure that the "wr_cqe", which is | ||
| 1250 | * embedded in request's payload, is not freed when __ib_process_cq() | ||
| 1251 | * calls wr_cqe->done(). | ||
| 1252 | */ | ||
| 1253 | if (nvme_rdma_queue_sig_limit(queue) || flush) | ||
| 1254 | wr.send_flags |= IB_SEND_SIGNALED; | ||
| 1255 | 1231 | ||
| 1256 | if (first) | 1232 | if (first) |
| 1257 | first->next = ≀ | 1233 | first->next = ≀ |
| @@ -1301,6 +1277,12 @@ static struct blk_mq_tags *nvme_rdma_tagset(struct nvme_rdma_queue *queue) | |||
| 1301 | return queue->ctrl->tag_set.tags[queue_idx - 1]; | 1277 | return queue->ctrl->tag_set.tags[queue_idx - 1]; |
| 1302 | } | 1278 | } |
| 1303 | 1279 | ||
| 1280 | static void nvme_rdma_async_done(struct ib_cq *cq, struct ib_wc *wc) | ||
| 1281 | { | ||
| 1282 | if (unlikely(wc->status != IB_WC_SUCCESS)) | ||
| 1283 | nvme_rdma_wr_error(cq, wc, "ASYNC"); | ||
| 1284 | } | ||
| 1285 | |||
| 1304 | static void nvme_rdma_submit_async_event(struct nvme_ctrl *arg) | 1286 | static void nvme_rdma_submit_async_event(struct nvme_ctrl *arg) |
| 1305 | { | 1287 | { |
| 1306 | struct nvme_rdma_ctrl *ctrl = to_rdma_ctrl(arg); | 1288 | struct nvme_rdma_ctrl *ctrl = to_rdma_ctrl(arg); |
| @@ -1319,10 +1301,12 @@ static void nvme_rdma_submit_async_event(struct nvme_ctrl *arg) | |||
| 1319 | cmd->common.flags |= NVME_CMD_SGL_METABUF; | 1301 | cmd->common.flags |= NVME_CMD_SGL_METABUF; |
| 1320 | nvme_rdma_set_sg_null(cmd); | 1302 | nvme_rdma_set_sg_null(cmd); |
| 1321 | 1303 | ||
| 1304 | sqe->cqe.done = nvme_rdma_async_done; | ||
| 1305 | |||
| 1322 | ib_dma_sync_single_for_device(dev, sqe->dma, sizeof(*cmd), | 1306 | ib_dma_sync_single_for_device(dev, sqe->dma, sizeof(*cmd), |
| 1323 | DMA_TO_DEVICE); | 1307 | DMA_TO_DEVICE); |
| 1324 | 1308 | ||
| 1325 | ret = nvme_rdma_post_send(queue, sqe, &sge, 1, NULL, false); | 1309 | ret = nvme_rdma_post_send(queue, sqe, &sge, 1, NULL); |
| 1326 | WARN_ON_ONCE(ret); | 1310 | WARN_ON_ONCE(ret); |
| 1327 | } | 1311 | } |
| 1328 | 1312 | ||
| @@ -1343,14 +1327,34 @@ static int nvme_rdma_process_nvme_rsp(struct nvme_rdma_queue *queue, | |||
| 1343 | } | 1327 | } |
| 1344 | req = blk_mq_rq_to_pdu(rq); | 1328 | req = blk_mq_rq_to_pdu(rq); |
| 1345 | 1329 | ||
| 1346 | if (rq->tag == tag) | 1330 | req->status = cqe->status; |
| 1347 | ret = 1; | 1331 | req->result = cqe->result; |
| 1348 | 1332 | ||
| 1349 | if ((wc->wc_flags & IB_WC_WITH_INVALIDATE) && | 1333 | if (wc->wc_flags & IB_WC_WITH_INVALIDATE) { |
| 1350 | wc->ex.invalidate_rkey == req->mr->rkey) | 1334 | if (unlikely(wc->ex.invalidate_rkey != req->mr->rkey)) { |
| 1351 | req->mr->need_inval = false; | 1335 | dev_err(queue->ctrl->ctrl.device, |
| 1336 | "Bogus remote invalidation for rkey %#x\n", | ||
| 1337 | req->mr->rkey); | ||
| 1338 | nvme_rdma_error_recovery(queue->ctrl); | ||
| 1339 | } | ||
| 1340 | } else if (req->mr) { | ||
| 1341 | ret = nvme_rdma_inv_rkey(queue, req); | ||
| 1342 | if (unlikely(ret < 0)) { | ||
| 1343 | dev_err(queue->ctrl->ctrl.device, | ||
| 1344 | "Queueing INV WR for rkey %#x failed (%d)\n", | ||
| 1345 | req->mr->rkey, ret); | ||
| 1346 | nvme_rdma_error_recovery(queue->ctrl); | ||
| 1347 | } | ||
| 1348 | /* the local invalidation completion will end the request */ | ||
| 1349 | return 0; | ||
| 1350 | } | ||
| 1351 | |||
| 1352 | if (refcount_dec_and_test(&req->ref)) { | ||
| 1353 | if (rq->tag == tag) | ||
| 1354 | ret = 1; | ||
| 1355 | nvme_end_request(rq, req->status, req->result); | ||
| 1356 | } | ||
| 1352 | 1357 | ||
| 1353 | nvme_end_request(rq, cqe->status, cqe->result); | ||
| 1354 | return ret; | 1358 | return ret; |
| 1355 | } | 1359 | } |
| 1356 | 1360 | ||
| @@ -1591,31 +1595,11 @@ nvme_rdma_timeout(struct request *rq, bool reserved) | |||
| 1591 | * We cannot accept any other command until the Connect command has completed. | 1595 | * We cannot accept any other command until the Connect command has completed. |
| 1592 | */ | 1596 | */ |
| 1593 | static inline blk_status_t | 1597 | static inline blk_status_t |
| 1594 | nvme_rdma_queue_is_ready(struct nvme_rdma_queue *queue, struct request *rq) | 1598 | nvme_rdma_is_ready(struct nvme_rdma_queue *queue, struct request *rq) |
| 1595 | { | 1599 | { |
| 1596 | if (unlikely(!test_bit(NVME_RDMA_Q_LIVE, &queue->flags))) { | 1600 | if (unlikely(!test_bit(NVME_RDMA_Q_LIVE, &queue->flags))) |
| 1597 | struct nvme_command *cmd = nvme_req(rq)->cmd; | 1601 | return nvmf_check_init_req(&queue->ctrl->ctrl, rq); |
| 1598 | 1602 | return BLK_STS_OK; | |
| 1599 | if (!blk_rq_is_passthrough(rq) || | ||
| 1600 | cmd->common.opcode != nvme_fabrics_command || | ||
| 1601 | cmd->fabrics.fctype != nvme_fabrics_type_connect) { | ||
| 1602 | /* | ||
| 1603 | * reconnecting state means transport disruption, which | ||
| 1604 | * can take a long time and even might fail permanently, | ||
| 1605 | * fail fast to give upper layers a chance to failover. | ||
| 1606 | * deleting state means that the ctrl will never accept | ||
| 1607 | * commands again, fail it permanently. | ||
| 1608 | */ | ||
| 1609 | if (queue->ctrl->ctrl.state == NVME_CTRL_RECONNECTING || | ||
| 1610 | queue->ctrl->ctrl.state == NVME_CTRL_DELETING) { | ||
| 1611 | nvme_req(rq)->status = NVME_SC_ABORT_REQ; | ||
| 1612 | return BLK_STS_IOERR; | ||
| 1613 | } | ||
| 1614 | return BLK_STS_RESOURCE; /* try again later */ | ||
| 1615 | } | ||
| 1616 | } | ||
| 1617 | |||
| 1618 | return 0; | ||
| 1619 | } | 1603 | } |
| 1620 | 1604 | ||
| 1621 | static blk_status_t nvme_rdma_queue_rq(struct blk_mq_hw_ctx *hctx, | 1605 | static blk_status_t nvme_rdma_queue_rq(struct blk_mq_hw_ctx *hctx, |
| @@ -1627,14 +1611,13 @@ static blk_status_t nvme_rdma_queue_rq(struct blk_mq_hw_ctx *hctx, | |||
| 1627 | struct nvme_rdma_request *req = blk_mq_rq_to_pdu(rq); | 1611 | struct nvme_rdma_request *req = blk_mq_rq_to_pdu(rq); |
| 1628 | struct nvme_rdma_qe *sqe = &req->sqe; | 1612 | struct nvme_rdma_qe *sqe = &req->sqe; |
| 1629 | struct nvme_command *c = sqe->data; | 1613 | struct nvme_command *c = sqe->data; |
| 1630 | bool flush = false; | ||
| 1631 | struct ib_device *dev; | 1614 | struct ib_device *dev; |
| 1632 | blk_status_t ret; | 1615 | blk_status_t ret; |
| 1633 | int err; | 1616 | int err; |
| 1634 | 1617 | ||
| 1635 | WARN_ON_ONCE(rq->tag < 0); | 1618 | WARN_ON_ONCE(rq->tag < 0); |
| 1636 | 1619 | ||
| 1637 | ret = nvme_rdma_queue_is_ready(queue, rq); | 1620 | ret = nvme_rdma_is_ready(queue, rq); |
| 1638 | if (unlikely(ret)) | 1621 | if (unlikely(ret)) |
| 1639 | return ret; | 1622 | return ret; |
| 1640 | 1623 | ||
| @@ -1656,13 +1639,13 @@ static blk_status_t nvme_rdma_queue_rq(struct blk_mq_hw_ctx *hctx, | |||
| 1656 | goto err; | 1639 | goto err; |
| 1657 | } | 1640 | } |
| 1658 | 1641 | ||
| 1642 | sqe->cqe.done = nvme_rdma_send_done; | ||
| 1643 | |||
| 1659 | ib_dma_sync_single_for_device(dev, sqe->dma, | 1644 | ib_dma_sync_single_for_device(dev, sqe->dma, |
| 1660 | sizeof(struct nvme_command), DMA_TO_DEVICE); | 1645 | sizeof(struct nvme_command), DMA_TO_DEVICE); |
| 1661 | 1646 | ||
| 1662 | if (req_op(rq) == REQ_OP_FLUSH) | ||
| 1663 | flush = true; | ||
| 1664 | err = nvme_rdma_post_send(queue, sqe, req->sge, req->num_sge, | 1647 | err = nvme_rdma_post_send(queue, sqe, req->sge, req->num_sge, |
| 1665 | req->mr->need_inval ? &req->reg_wr.wr : NULL, flush); | 1648 | req->mr ? &req->reg_wr.wr : NULL); |
| 1666 | if (unlikely(err)) { | 1649 | if (unlikely(err)) { |
| 1667 | nvme_rdma_unmap_data(queue, rq); | 1650 | nvme_rdma_unmap_data(queue, rq); |
| 1668 | goto err; | 1651 | goto err; |
| @@ -1810,7 +1793,6 @@ static const struct nvme_ctrl_ops nvme_rdma_ctrl_ops = { | |||
| 1810 | .submit_async_event = nvme_rdma_submit_async_event, | 1793 | .submit_async_event = nvme_rdma_submit_async_event, |
| 1811 | .delete_ctrl = nvme_rdma_delete_ctrl, | 1794 | .delete_ctrl = nvme_rdma_delete_ctrl, |
| 1812 | .get_address = nvmf_get_address, | 1795 | .get_address = nvmf_get_address, |
| 1813 | .reinit_request = nvme_rdma_reinit_request, | ||
| 1814 | }; | 1796 | }; |
| 1815 | 1797 | ||
| 1816 | static inline bool | 1798 | static inline bool |
diff --git a/drivers/nvme/target/fc.c b/drivers/nvme/target/fc.c index 664d3013f68f..5fd86039e353 100644 --- a/drivers/nvme/target/fc.c +++ b/drivers/nvme/target/fc.c | |||
| @@ -533,15 +533,15 @@ nvmet_fc_free_fcp_iod(struct nvmet_fc_tgt_queue *queue, | |||
| 533 | 533 | ||
| 534 | tgtport->ops->fcp_req_release(&tgtport->fc_target_port, fcpreq); | 534 | tgtport->ops->fcp_req_release(&tgtport->fc_target_port, fcpreq); |
| 535 | 535 | ||
| 536 | /* release the queue lookup reference on the completed IO */ | ||
| 537 | nvmet_fc_tgt_q_put(queue); | ||
| 538 | |||
| 536 | spin_lock_irqsave(&queue->qlock, flags); | 539 | spin_lock_irqsave(&queue->qlock, flags); |
| 537 | deferfcp = list_first_entry_or_null(&queue->pending_cmd_list, | 540 | deferfcp = list_first_entry_or_null(&queue->pending_cmd_list, |
| 538 | struct nvmet_fc_defer_fcp_req, req_list); | 541 | struct nvmet_fc_defer_fcp_req, req_list); |
| 539 | if (!deferfcp) { | 542 | if (!deferfcp) { |
| 540 | list_add_tail(&fod->fcp_list, &fod->queue->fod_list); | 543 | list_add_tail(&fod->fcp_list, &fod->queue->fod_list); |
| 541 | spin_unlock_irqrestore(&queue->qlock, flags); | 544 | spin_unlock_irqrestore(&queue->qlock, flags); |
| 542 | |||
| 543 | /* Release reference taken at queue lookup and fod allocation */ | ||
| 544 | nvmet_fc_tgt_q_put(queue); | ||
| 545 | return; | 545 | return; |
| 546 | } | 546 | } |
| 547 | 547 | ||
| @@ -760,6 +760,9 @@ nvmet_fc_delete_target_queue(struct nvmet_fc_tgt_queue *queue) | |||
| 760 | tgtport->ops->fcp_req_release(&tgtport->fc_target_port, | 760 | tgtport->ops->fcp_req_release(&tgtport->fc_target_port, |
| 761 | deferfcp->fcp_req); | 761 | deferfcp->fcp_req); |
| 762 | 762 | ||
| 763 | /* release the queue lookup reference */ | ||
| 764 | nvmet_fc_tgt_q_put(queue); | ||
| 765 | |||
| 763 | kfree(deferfcp); | 766 | kfree(deferfcp); |
| 764 | 767 | ||
| 765 | spin_lock_irqsave(&queue->qlock, flags); | 768 | spin_lock_irqsave(&queue->qlock, flags); |
diff --git a/drivers/nvme/target/loop.c b/drivers/nvme/target/loop.c index 96d390416789..1e21b286f299 100644 --- a/drivers/nvme/target/loop.c +++ b/drivers/nvme/target/loop.c | |||
| @@ -52,10 +52,15 @@ static inline struct nvme_loop_ctrl *to_loop_ctrl(struct nvme_ctrl *ctrl) | |||
| 52 | return container_of(ctrl, struct nvme_loop_ctrl, ctrl); | 52 | return container_of(ctrl, struct nvme_loop_ctrl, ctrl); |
| 53 | } | 53 | } |
| 54 | 54 | ||
| 55 | enum nvme_loop_queue_flags { | ||
| 56 | NVME_LOOP_Q_LIVE = 0, | ||
| 57 | }; | ||
| 58 | |||
| 55 | struct nvme_loop_queue { | 59 | struct nvme_loop_queue { |
| 56 | struct nvmet_cq nvme_cq; | 60 | struct nvmet_cq nvme_cq; |
| 57 | struct nvmet_sq nvme_sq; | 61 | struct nvmet_sq nvme_sq; |
| 58 | struct nvme_loop_ctrl *ctrl; | 62 | struct nvme_loop_ctrl *ctrl; |
| 63 | unsigned long flags; | ||
| 59 | }; | 64 | }; |
| 60 | 65 | ||
| 61 | static struct nvmet_port *nvmet_loop_port; | 66 | static struct nvmet_port *nvmet_loop_port; |
| @@ -144,6 +149,14 @@ nvme_loop_timeout(struct request *rq, bool reserved) | |||
| 144 | return BLK_EH_HANDLED; | 149 | return BLK_EH_HANDLED; |
| 145 | } | 150 | } |
| 146 | 151 | ||
| 152 | static inline blk_status_t nvme_loop_is_ready(struct nvme_loop_queue *queue, | ||
| 153 | struct request *rq) | ||
| 154 | { | ||
| 155 | if (unlikely(!test_bit(NVME_LOOP_Q_LIVE, &queue->flags))) | ||
| 156 | return nvmf_check_init_req(&queue->ctrl->ctrl, rq); | ||
| 157 | return BLK_STS_OK; | ||
| 158 | } | ||
| 159 | |||
| 147 | static blk_status_t nvme_loop_queue_rq(struct blk_mq_hw_ctx *hctx, | 160 | static blk_status_t nvme_loop_queue_rq(struct blk_mq_hw_ctx *hctx, |
| 148 | const struct blk_mq_queue_data *bd) | 161 | const struct blk_mq_queue_data *bd) |
| 149 | { | 162 | { |
| @@ -153,6 +166,10 @@ static blk_status_t nvme_loop_queue_rq(struct blk_mq_hw_ctx *hctx, | |||
| 153 | struct nvme_loop_iod *iod = blk_mq_rq_to_pdu(req); | 166 | struct nvme_loop_iod *iod = blk_mq_rq_to_pdu(req); |
| 154 | blk_status_t ret; | 167 | blk_status_t ret; |
| 155 | 168 | ||
| 169 | ret = nvme_loop_is_ready(queue, req); | ||
| 170 | if (unlikely(ret)) | ||
| 171 | return ret; | ||
| 172 | |||
| 156 | ret = nvme_setup_cmd(ns, req, &iod->cmd); | 173 | ret = nvme_setup_cmd(ns, req, &iod->cmd); |
| 157 | if (ret) | 174 | if (ret) |
| 158 | return ret; | 175 | return ret; |
| @@ -267,6 +284,7 @@ static const struct blk_mq_ops nvme_loop_admin_mq_ops = { | |||
| 267 | 284 | ||
| 268 | static void nvme_loop_destroy_admin_queue(struct nvme_loop_ctrl *ctrl) | 285 | static void nvme_loop_destroy_admin_queue(struct nvme_loop_ctrl *ctrl) |
| 269 | { | 286 | { |
| 287 | clear_bit(NVME_LOOP_Q_LIVE, &ctrl->queues[0].flags); | ||
| 270 | nvmet_sq_destroy(&ctrl->queues[0].nvme_sq); | 288 | nvmet_sq_destroy(&ctrl->queues[0].nvme_sq); |
| 271 | blk_cleanup_queue(ctrl->ctrl.admin_q); | 289 | blk_cleanup_queue(ctrl->ctrl.admin_q); |
| 272 | blk_mq_free_tag_set(&ctrl->admin_tag_set); | 290 | blk_mq_free_tag_set(&ctrl->admin_tag_set); |
| @@ -297,8 +315,10 @@ static void nvme_loop_destroy_io_queues(struct nvme_loop_ctrl *ctrl) | |||
| 297 | { | 315 | { |
| 298 | int i; | 316 | int i; |
| 299 | 317 | ||
| 300 | for (i = 1; i < ctrl->ctrl.queue_count; i++) | 318 | for (i = 1; i < ctrl->ctrl.queue_count; i++) { |
| 319 | clear_bit(NVME_LOOP_Q_LIVE, &ctrl->queues[i].flags); | ||
| 301 | nvmet_sq_destroy(&ctrl->queues[i].nvme_sq); | 320 | nvmet_sq_destroy(&ctrl->queues[i].nvme_sq); |
| 321 | } | ||
| 302 | } | 322 | } |
| 303 | 323 | ||
| 304 | static int nvme_loop_init_io_queues(struct nvme_loop_ctrl *ctrl) | 324 | static int nvme_loop_init_io_queues(struct nvme_loop_ctrl *ctrl) |
| @@ -338,6 +358,7 @@ static int nvme_loop_connect_io_queues(struct nvme_loop_ctrl *ctrl) | |||
| 338 | ret = nvmf_connect_io_queue(&ctrl->ctrl, i); | 358 | ret = nvmf_connect_io_queue(&ctrl->ctrl, i); |
| 339 | if (ret) | 359 | if (ret) |
| 340 | return ret; | 360 | return ret; |
| 361 | set_bit(NVME_LOOP_Q_LIVE, &ctrl->queues[i].flags); | ||
| 341 | } | 362 | } |
| 342 | 363 | ||
| 343 | return 0; | 364 | return 0; |
| @@ -380,6 +401,8 @@ static int nvme_loop_configure_admin_queue(struct nvme_loop_ctrl *ctrl) | |||
| 380 | if (error) | 401 | if (error) |
| 381 | goto out_cleanup_queue; | 402 | goto out_cleanup_queue; |
| 382 | 403 | ||
| 404 | set_bit(NVME_LOOP_Q_LIVE, &ctrl->queues[0].flags); | ||
| 405 | |||
| 383 | error = nvmf_reg_read64(&ctrl->ctrl, NVME_REG_CAP, &ctrl->ctrl.cap); | 406 | error = nvmf_reg_read64(&ctrl->ctrl, NVME_REG_CAP, &ctrl->ctrl.cap); |
| 384 | if (error) { | 407 | if (error) { |
| 385 | dev_err(ctrl->ctrl.device, | 408 | dev_err(ctrl->ctrl.device, |
diff --git a/drivers/of/dynamic.c b/drivers/of/dynamic.c index c454941b34ec..ab988d88704d 100644 --- a/drivers/of/dynamic.c +++ b/drivers/of/dynamic.c | |||
| @@ -695,7 +695,7 @@ int __of_changeset_apply_entries(struct of_changeset *ocs, int *ret_revert) | |||
| 695 | /* | 695 | /* |
| 696 | * Returns 0 on success, a negative error value in case of an error. | 696 | * Returns 0 on success, a negative error value in case of an error. |
| 697 | * | 697 | * |
| 698 | * If multiple changset entry notification errors occur then only the | 698 | * If multiple changeset entry notification errors occur then only the |
| 699 | * final notification error is reported. | 699 | * final notification error is reported. |
| 700 | */ | 700 | */ |
| 701 | int __of_changeset_apply_notify(struct of_changeset *ocs) | 701 | int __of_changeset_apply_notify(struct of_changeset *ocs) |
| @@ -795,7 +795,7 @@ int __of_changeset_revert_entries(struct of_changeset *ocs, int *ret_apply) | |||
| 795 | } | 795 | } |
| 796 | 796 | ||
| 797 | /* | 797 | /* |
| 798 | * If multiple changset entry notification errors occur then only the | 798 | * If multiple changeset entry notification errors occur then only the |
| 799 | * final notification error is reported. | 799 | * final notification error is reported. |
| 800 | */ | 800 | */ |
| 801 | int __of_changeset_revert_notify(struct of_changeset *ocs) | 801 | int __of_changeset_revert_notify(struct of_changeset *ocs) |
diff --git a/drivers/of/of_mdio.c b/drivers/of/of_mdio.c index 98258583abb0..3481e69738b5 100644 --- a/drivers/of/of_mdio.c +++ b/drivers/of/of_mdio.c | |||
| @@ -81,6 +81,7 @@ static int of_mdiobus_register_phy(struct mii_bus *mdio, | |||
| 81 | * can be looked up later */ | 81 | * can be looked up later */ |
| 82 | of_node_get(child); | 82 | of_node_get(child); |
| 83 | phy->mdio.dev.of_node = child; | 83 | phy->mdio.dev.of_node = child; |
| 84 | phy->mdio.dev.fwnode = of_fwnode_handle(child); | ||
| 84 | 85 | ||
| 85 | /* All data is now stored in the phy struct; | 86 | /* All data is now stored in the phy struct; |
| 86 | * register it */ | 87 | * register it */ |
| @@ -111,6 +112,7 @@ static int of_mdiobus_register_device(struct mii_bus *mdio, | |||
| 111 | */ | 112 | */ |
| 112 | of_node_get(child); | 113 | of_node_get(child); |
| 113 | mdiodev->dev.of_node = child; | 114 | mdiodev->dev.of_node = child; |
| 115 | mdiodev->dev.fwnode = of_fwnode_handle(child); | ||
| 114 | 116 | ||
| 115 | /* All data is now stored in the mdiodev struct; register it. */ | 117 | /* All data is now stored in the mdiodev struct; register it. */ |
| 116 | rc = mdio_device_register(mdiodev); | 118 | rc = mdio_device_register(mdiodev); |
| @@ -206,6 +208,7 @@ int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np) | |||
| 206 | mdio->phy_mask = ~0; | 208 | mdio->phy_mask = ~0; |
| 207 | 209 | ||
| 208 | mdio->dev.of_node = np; | 210 | mdio->dev.of_node = np; |
| 211 | mdio->dev.fwnode = of_fwnode_handle(np); | ||
| 209 | 212 | ||
| 210 | /* Get bus level PHY reset GPIO details */ | 213 | /* Get bus level PHY reset GPIO details */ |
| 211 | mdio->reset_delay_us = DEFAULT_GPIO_RESET_DELAY; | 214 | mdio->reset_delay_us = DEFAULT_GPIO_RESET_DELAY; |
diff --git a/drivers/of/overlay.c b/drivers/of/overlay.c index c150abb9049d..3981b7da4fa9 100644 --- a/drivers/of/overlay.c +++ b/drivers/of/overlay.c | |||
| @@ -522,7 +522,7 @@ static int init_overlay_changeset(struct overlay_changeset *ovcs, | |||
| 522 | struct device_node *node, *overlay_node; | 522 | struct device_node *node, *overlay_node; |
| 523 | struct fragment *fragment; | 523 | struct fragment *fragment; |
| 524 | struct fragment *fragments; | 524 | struct fragment *fragments; |
| 525 | int cnt, ret; | 525 | int cnt, id, ret; |
| 526 | 526 | ||
| 527 | /* | 527 | /* |
| 528 | * Warn for some issues. Can not return -EINVAL for these until | 528 | * Warn for some issues. Can not return -EINVAL for these until |
| @@ -543,9 +543,9 @@ static int init_overlay_changeset(struct overlay_changeset *ovcs, | |||
| 543 | 543 | ||
| 544 | of_changeset_init(&ovcs->cset); | 544 | of_changeset_init(&ovcs->cset); |
| 545 | 545 | ||
| 546 | ovcs->id = idr_alloc(&ovcs_idr, ovcs, 1, 0, GFP_KERNEL); | 546 | id = idr_alloc(&ovcs_idr, ovcs, 1, 0, GFP_KERNEL); |
| 547 | if (ovcs->id <= 0) | 547 | if (id <= 0) |
| 548 | return ovcs->id; | 548 | return id; |
| 549 | 549 | ||
| 550 | cnt = 0; | 550 | cnt = 0; |
| 551 | 551 | ||
| @@ -572,18 +572,20 @@ static int init_overlay_changeset(struct overlay_changeset *ovcs, | |||
| 572 | 572 | ||
| 573 | cnt = 0; | 573 | cnt = 0; |
| 574 | for_each_child_of_node(tree, node) { | 574 | for_each_child_of_node(tree, node) { |
| 575 | overlay_node = of_get_child_by_name(node, "__overlay__"); | ||
| 576 | if (!overlay_node) | ||
| 577 | continue; | ||
| 578 | |||
| 575 | fragment = &fragments[cnt]; | 579 | fragment = &fragments[cnt]; |
| 576 | fragment->overlay = of_get_child_by_name(node, "__overlay__"); | 580 | fragment->overlay = overlay_node; |
| 577 | if (fragment->overlay) { | 581 | fragment->target = find_target_node(node); |
| 578 | fragment->target = find_target_node(node); | 582 | if (!fragment->target) { |
| 579 | if (!fragment->target) { | 583 | of_node_put(fragment->overlay); |
| 580 | of_node_put(fragment->overlay); | 584 | ret = -EINVAL; |
| 581 | ret = -EINVAL; | 585 | goto err_free_fragments; |
| 582 | goto err_free_fragments; | ||
| 583 | } else { | ||
| 584 | cnt++; | ||
| 585 | } | ||
| 586 | } | 586 | } |
| 587 | |||
| 588 | cnt++; | ||
| 587 | } | 589 | } |
| 588 | 590 | ||
| 589 | /* | 591 | /* |
| @@ -611,6 +613,7 @@ static int init_overlay_changeset(struct overlay_changeset *ovcs, | |||
| 611 | goto err_free_fragments; | 613 | goto err_free_fragments; |
| 612 | } | 614 | } |
| 613 | 615 | ||
| 616 | ovcs->id = id; | ||
| 614 | ovcs->count = cnt; | 617 | ovcs->count = cnt; |
| 615 | ovcs->fragments = fragments; | 618 | ovcs->fragments = fragments; |
| 616 | 619 | ||
| @@ -619,7 +622,7 @@ static int init_overlay_changeset(struct overlay_changeset *ovcs, | |||
| 619 | err_free_fragments: | 622 | err_free_fragments: |
| 620 | kfree(fragments); | 623 | kfree(fragments); |
| 621 | err_free_idr: | 624 | err_free_idr: |
| 622 | idr_remove(&ovcs_idr, ovcs->id); | 625 | idr_remove(&ovcs_idr, id); |
| 623 | 626 | ||
| 624 | pr_err("%s() failed, ret = %d\n", __func__, ret); | 627 | pr_err("%s() failed, ret = %d\n", __func__, ret); |
| 625 | 628 | ||
| @@ -630,9 +633,8 @@ static void free_overlay_changeset(struct overlay_changeset *ovcs) | |||
| 630 | { | 633 | { |
| 631 | int i; | 634 | int i; |
| 632 | 635 | ||
| 633 | if (!ovcs->cset.entries.next) | 636 | if (ovcs->cset.entries.next) |
| 634 | return; | 637 | of_changeset_destroy(&ovcs->cset); |
| 635 | of_changeset_destroy(&ovcs->cset); | ||
| 636 | 638 | ||
| 637 | if (ovcs->id) | 639 | if (ovcs->id) |
| 638 | idr_remove(&ovcs_idr, ovcs->id); | 640 | idr_remove(&ovcs_idr, ovcs->id); |
| @@ -660,14 +662,14 @@ static void free_overlay_changeset(struct overlay_changeset *ovcs) | |||
| 660 | * A non-zero return value will not have created the changeset if error is from: | 662 | * A non-zero return value will not have created the changeset if error is from: |
| 661 | * - parameter checks | 663 | * - parameter checks |
| 662 | * - building the changeset | 664 | * - building the changeset |
| 663 | * - overlay changset pre-apply notifier | 665 | * - overlay changeset pre-apply notifier |
| 664 | * | 666 | * |
| 665 | * If an error is returned by an overlay changeset pre-apply notifier | 667 | * If an error is returned by an overlay changeset pre-apply notifier |
| 666 | * then no further overlay changeset pre-apply notifier will be called. | 668 | * then no further overlay changeset pre-apply notifier will be called. |
| 667 | * | 669 | * |
| 668 | * A non-zero return value will have created the changeset if error is from: | 670 | * A non-zero return value will have created the changeset if error is from: |
| 669 | * - overlay changeset entry notifier | 671 | * - overlay changeset entry notifier |
| 670 | * - overlay changset post-apply notifier | 672 | * - overlay changeset post-apply notifier |
| 671 | * | 673 | * |
| 672 | * If an error is returned by an overlay changeset post-apply notifier | 674 | * If an error is returned by an overlay changeset post-apply notifier |
| 673 | * then no further overlay changeset post-apply notifier will be called. | 675 | * then no further overlay changeset post-apply notifier will be called. |
| @@ -706,12 +708,11 @@ int of_overlay_apply(struct device_node *tree, int *ovcs_id) | |||
| 706 | } | 708 | } |
| 707 | 709 | ||
| 708 | of_overlay_mutex_lock(); | 710 | of_overlay_mutex_lock(); |
| 711 | mutex_lock(&of_mutex); | ||
| 709 | 712 | ||
| 710 | ret = of_resolve_phandles(tree); | 713 | ret = of_resolve_phandles(tree); |
| 711 | if (ret) | 714 | if (ret) |
| 712 | goto err_overlay_unlock; | 715 | goto err_free_overlay_changeset; |
| 713 | |||
| 714 | mutex_lock(&of_mutex); | ||
| 715 | 716 | ||
| 716 | ret = init_overlay_changeset(ovcs, tree); | 717 | ret = init_overlay_changeset(ovcs, tree); |
| 717 | if (ret) | 718 | if (ret) |
| @@ -736,14 +737,13 @@ int of_overlay_apply(struct device_node *tree, int *ovcs_id) | |||
| 736 | devicetree_state_flags |= DTSF_APPLY_FAIL; | 737 | devicetree_state_flags |= DTSF_APPLY_FAIL; |
| 737 | } | 738 | } |
| 738 | goto err_free_overlay_changeset; | 739 | goto err_free_overlay_changeset; |
| 739 | } else { | ||
| 740 | ret = __of_changeset_apply_notify(&ovcs->cset); | ||
| 741 | if (ret) | ||
| 742 | pr_err("overlay changeset entry notify error %d\n", | ||
| 743 | ret); | ||
| 744 | /* fall through */ | ||
| 745 | } | 740 | } |
| 746 | 741 | ||
| 742 | ret = __of_changeset_apply_notify(&ovcs->cset); | ||
| 743 | if (ret) | ||
| 744 | pr_err("overlay changeset entry notify error %d\n", ret); | ||
| 745 | /* notify failure is not fatal, continue */ | ||
| 746 | |||
| 747 | list_add_tail(&ovcs->ovcs_list, &ovcs_list); | 747 | list_add_tail(&ovcs->ovcs_list, &ovcs_list); |
| 748 | *ovcs_id = ovcs->id; | 748 | *ovcs_id = ovcs->id; |
| 749 | 749 | ||
| @@ -755,18 +755,14 @@ int of_overlay_apply(struct device_node *tree, int *ovcs_id) | |||
| 755 | ret = ret_tmp; | 755 | ret = ret_tmp; |
| 756 | } | 756 | } |
| 757 | 757 | ||
| 758 | mutex_unlock(&of_mutex); | 758 | goto out_unlock; |
| 759 | of_overlay_mutex_unlock(); | ||
| 760 | |||
| 761 | goto out; | ||
| 762 | |||
| 763 | err_overlay_unlock: | ||
| 764 | of_overlay_mutex_unlock(); | ||
| 765 | 759 | ||
| 766 | err_free_overlay_changeset: | 760 | err_free_overlay_changeset: |
| 767 | free_overlay_changeset(ovcs); | 761 | free_overlay_changeset(ovcs); |
| 768 | 762 | ||
| 763 | out_unlock: | ||
| 769 | mutex_unlock(&of_mutex); | 764 | mutex_unlock(&of_mutex); |
| 765 | of_overlay_mutex_unlock(); | ||
| 770 | 766 | ||
| 771 | out: | 767 | out: |
| 772 | pr_debug("%s() err=%d\n", __func__, ret); | 768 | pr_debug("%s() err=%d\n", __func__, ret); |
| @@ -871,7 +867,7 @@ static int overlay_removal_is_ok(struct overlay_changeset *remove_ovcs) | |||
| 871 | * | 867 | * |
| 872 | * A non-zero return value will not revert the changeset if error is from: | 868 | * A non-zero return value will not revert the changeset if error is from: |
| 873 | * - parameter checks | 869 | * - parameter checks |
| 874 | * - overlay changset pre-remove notifier | 870 | * - overlay changeset pre-remove notifier |
| 875 | * - overlay changeset entry revert | 871 | * - overlay changeset entry revert |
| 876 | * | 872 | * |
| 877 | * If an error is returned by an overlay changeset pre-remove notifier | 873 | * If an error is returned by an overlay changeset pre-remove notifier |
| @@ -882,7 +878,7 @@ static int overlay_removal_is_ok(struct overlay_changeset *remove_ovcs) | |||
| 882 | * | 878 | * |
| 883 | * A non-zero return value will revert the changeset if error is from: | 879 | * A non-zero return value will revert the changeset if error is from: |
| 884 | * - overlay changeset entry notifier | 880 | * - overlay changeset entry notifier |
| 885 | * - overlay changset post-remove notifier | 881 | * - overlay changeset post-remove notifier |
| 886 | * | 882 | * |
| 887 | * If an error is returned by an overlay changeset post-remove notifier | 883 | * If an error is returned by an overlay changeset post-remove notifier |
| 888 | * then no further overlay changeset post-remove notifier will be called. | 884 | * then no further overlay changeset post-remove notifier will be called. |
| @@ -931,15 +927,13 @@ int of_overlay_remove(int *ovcs_id) | |||
| 931 | if (ret_apply) | 927 | if (ret_apply) |
| 932 | devicetree_state_flags |= DTSF_REVERT_FAIL; | 928 | devicetree_state_flags |= DTSF_REVERT_FAIL; |
| 933 | goto out_unlock; | 929 | goto out_unlock; |
| 934 | } else { | ||
| 935 | ret = __of_changeset_revert_notify(&ovcs->cset); | ||
| 936 | if (ret) { | ||
| 937 | pr_err("overlay changeset entry notify error %d\n", | ||
| 938 | ret); | ||
| 939 | /* fall through - changeset was reverted */ | ||
| 940 | } | ||
| 941 | } | 930 | } |
| 942 | 931 | ||
| 932 | ret = __of_changeset_revert_notify(&ovcs->cset); | ||
| 933 | if (ret) | ||
| 934 | pr_err("overlay changeset entry notify error %d\n", ret); | ||
| 935 | /* notify failure is not fatal, continue */ | ||
| 936 | |||
| 943 | *ovcs_id = 0; | 937 | *ovcs_id = 0; |
| 944 | 938 | ||
| 945 | ret_tmp = overlay_notify(ovcs, OF_OVERLAY_POST_REMOVE); | 939 | ret_tmp = overlay_notify(ovcs, OF_OVERLAY_POST_REMOVE); |
diff --git a/drivers/of/unittest.c b/drivers/of/unittest.c index e568b1e82501..0f8052f1355c 100644 --- a/drivers/of/unittest.c +++ b/drivers/of/unittest.c | |||
| @@ -2165,7 +2165,6 @@ static int __init overlay_data_add(int onum) | |||
| 2165 | ret = of_overlay_apply(info->np_overlay, &info->overlay_id); | 2165 | ret = of_overlay_apply(info->np_overlay, &info->overlay_id); |
| 2166 | if (ret < 0) { | 2166 | if (ret < 0) { |
| 2167 | pr_err("of_overlay_apply() (ret=%d), %d\n", ret, onum); | 2167 | pr_err("of_overlay_apply() (ret=%d), %d\n", ret, onum); |
| 2168 | of_overlay_mutex_unlock(); | ||
| 2169 | goto out_free_np_overlay; | 2168 | goto out_free_np_overlay; |
| 2170 | } | 2169 | } |
| 2171 | 2170 | ||
diff --git a/drivers/pci/host/pcie-rcar.c b/drivers/pci/host/pcie-rcar.c index 12796eccb2be..52ab3cb0a0bf 100644 --- a/drivers/pci/host/pcie-rcar.c +++ b/drivers/pci/host/pcie-rcar.c | |||
| @@ -1128,12 +1128,12 @@ static int rcar_pcie_probe(struct platform_device *pdev) | |||
| 1128 | err = rcar_pcie_get_resources(pcie); | 1128 | err = rcar_pcie_get_resources(pcie); |
| 1129 | if (err < 0) { | 1129 | if (err < 0) { |
| 1130 | dev_err(dev, "failed to request resources: %d\n", err); | 1130 | dev_err(dev, "failed to request resources: %d\n", err); |
| 1131 | goto err_free_bridge; | 1131 | goto err_free_resource_list; |
| 1132 | } | 1132 | } |
| 1133 | 1133 | ||
| 1134 | err = rcar_pcie_parse_map_dma_ranges(pcie, dev->of_node); | 1134 | err = rcar_pcie_parse_map_dma_ranges(pcie, dev->of_node); |
| 1135 | if (err) | 1135 | if (err) |
| 1136 | goto err_free_bridge; | 1136 | goto err_free_resource_list; |
| 1137 | 1137 | ||
| 1138 | pm_runtime_enable(dev); | 1138 | pm_runtime_enable(dev); |
| 1139 | err = pm_runtime_get_sync(dev); | 1139 | err = pm_runtime_get_sync(dev); |
| @@ -1176,9 +1176,9 @@ err_pm_put: | |||
| 1176 | err_pm_disable: | 1176 | err_pm_disable: |
| 1177 | pm_runtime_disable(dev); | 1177 | pm_runtime_disable(dev); |
| 1178 | 1178 | ||
| 1179 | err_free_bridge: | 1179 | err_free_resource_list: |
| 1180 | pci_free_host_bridge(bridge); | ||
| 1181 | pci_free_resource_list(&pcie->resources); | 1180 | pci_free_resource_list(&pcie->resources); |
| 1181 | pci_free_host_bridge(bridge); | ||
| 1182 | 1182 | ||
| 1183 | return err; | 1183 | return err; |
| 1184 | } | 1184 | } |
diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c index 7f47bb72bf30..945099d49f8f 100644 --- a/drivers/pci/pci-driver.c +++ b/drivers/pci/pci-driver.c | |||
| @@ -999,7 +999,7 @@ static int pci_pm_thaw_noirq(struct device *dev) | |||
| 999 | * the subsequent "thaw" callbacks for the device. | 999 | * the subsequent "thaw" callbacks for the device. |
| 1000 | */ | 1000 | */ |
| 1001 | if (dev_pm_smart_suspend_and_suspended(dev)) { | 1001 | if (dev_pm_smart_suspend_and_suspended(dev)) { |
| 1002 | dev->power.direct_complete = true; | 1002 | dev_pm_skip_next_resume_phases(dev); |
| 1003 | return 0; | 1003 | return 0; |
| 1004 | } | 1004 | } |
| 1005 | 1005 | ||
diff --git a/drivers/pinctrl/intel/pinctrl-denverton.c b/drivers/pinctrl/intel/pinctrl-denverton.c index 4500880240f2..6572550cfe78 100644 --- a/drivers/pinctrl/intel/pinctrl-denverton.c +++ b/drivers/pinctrl/intel/pinctrl-denverton.c | |||
| @@ -207,7 +207,7 @@ static const unsigned int dnv_uart0_pins[] = { 60, 61, 64, 65 }; | |||
| 207 | static const unsigned int dnv_uart0_modes[] = { 2, 3, 1, 1 }; | 207 | static const unsigned int dnv_uart0_modes[] = { 2, 3, 1, 1 }; |
| 208 | static const unsigned int dnv_uart1_pins[] = { 94, 95, 96, 97 }; | 208 | static const unsigned int dnv_uart1_pins[] = { 94, 95, 96, 97 }; |
| 209 | static const unsigned int dnv_uart2_pins[] = { 60, 61, 62, 63 }; | 209 | static const unsigned int dnv_uart2_pins[] = { 60, 61, 62, 63 }; |
| 210 | static const unsigned int dnv_uart2_modes[] = { 1, 1, 2, 2 }; | 210 | static const unsigned int dnv_uart2_modes[] = { 1, 2, 2, 2 }; |
| 211 | static const unsigned int dnv_emmc_pins[] = { | 211 | static const unsigned int dnv_emmc_pins[] = { |
| 212 | 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, | 212 | 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, |
| 213 | }; | 213 | }; |
diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c index d45af31b86b4..bdb8d174efef 100644 --- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c +++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c | |||
| @@ -408,12 +408,21 @@ static int armada_37xx_gpio_direction_output(struct gpio_chip *chip, | |||
| 408 | { | 408 | { |
| 409 | struct armada_37xx_pinctrl *info = gpiochip_get_data(chip); | 409 | struct armada_37xx_pinctrl *info = gpiochip_get_data(chip); |
| 410 | unsigned int reg = OUTPUT_EN; | 410 | unsigned int reg = OUTPUT_EN; |
| 411 | unsigned int mask; | 411 | unsigned int mask, val, ret; |
| 412 | 412 | ||
| 413 | armada_37xx_update_reg(®, offset); | 413 | armada_37xx_update_reg(®, offset); |
| 414 | mask = BIT(offset); | 414 | mask = BIT(offset); |
| 415 | 415 | ||
| 416 | return regmap_update_bits(info->regmap, reg, mask, mask); | 416 | ret = regmap_update_bits(info->regmap, reg, mask, mask); |
| 417 | |||
| 418 | if (ret) | ||
| 419 | return ret; | ||
| 420 | |||
| 421 | reg = OUTPUT_VAL; | ||
| 422 | val = value ? mask : 0; | ||
| 423 | regmap_update_bits(info->regmap, reg, mask, val); | ||
| 424 | |||
| 425 | return 0; | ||
| 417 | } | 426 | } |
| 418 | 427 | ||
| 419 | static int armada_37xx_gpio_get(struct gpio_chip *chip, unsigned int offset) | 428 | static int armada_37xx_gpio_get(struct gpio_chip *chip, unsigned int offset) |
diff --git a/drivers/pinctrl/pinctrl-gemini.c b/drivers/pinctrl/pinctrl-gemini.c index e9b83e291edf..c11b8f14d841 100644 --- a/drivers/pinctrl/pinctrl-gemini.c +++ b/drivers/pinctrl/pinctrl-gemini.c | |||
| @@ -2322,7 +2322,7 @@ static const struct gemini_pin_conf *gemini_get_pin_conf(struct gemini_pmx *pmx, | |||
| 2322 | int i; | 2322 | int i; |
| 2323 | 2323 | ||
| 2324 | for (i = 0; i < pmx->nconfs; i++) { | 2324 | for (i = 0; i < pmx->nconfs; i++) { |
| 2325 | retconf = &gemini_confs_3516[i]; | 2325 | retconf = &pmx->confs[i]; |
| 2326 | if (retconf->pin == pin) | 2326 | if (retconf->pin == pin) |
| 2327 | return retconf; | 2327 | return retconf; |
| 2328 | } | 2328 | } |
diff --git a/drivers/pinctrl/sunxi/pinctrl-sun50i-a64.c b/drivers/pinctrl/sunxi/pinctrl-sun50i-a64.c index 4f2a726bbaeb..f5f77432ce6f 100644 --- a/drivers/pinctrl/sunxi/pinctrl-sun50i-a64.c +++ b/drivers/pinctrl/sunxi/pinctrl-sun50i-a64.c | |||
| @@ -428,7 +428,7 @@ static const struct sunxi_desc_pin a64_pins[] = { | |||
| 428 | SUNXI_FUNCTION(0x0, "gpio_in"), | 428 | SUNXI_FUNCTION(0x0, "gpio_in"), |
| 429 | SUNXI_FUNCTION(0x1, "gpio_out"), | 429 | SUNXI_FUNCTION(0x1, "gpio_out"), |
| 430 | SUNXI_FUNCTION(0x2, "mmc0"), /* D3 */ | 430 | SUNXI_FUNCTION(0x2, "mmc0"), /* D3 */ |
| 431 | SUNXI_FUNCTION(0x4, "uart0")), /* RX */ | 431 | SUNXI_FUNCTION(0x3, "uart0")), /* RX */ |
| 432 | SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 5), | 432 | SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 5), |
| 433 | SUNXI_FUNCTION(0x0, "gpio_in"), | 433 | SUNXI_FUNCTION(0x0, "gpio_in"), |
| 434 | SUNXI_FUNCTION(0x1, "gpio_out"), | 434 | SUNXI_FUNCTION(0x1, "gpio_out"), |
diff --git a/drivers/pinctrl/sunxi/pinctrl-sun50i-h5.c b/drivers/pinctrl/sunxi/pinctrl-sun50i-h5.c index 97b48336f84a..a78d7b922ef4 100644 --- a/drivers/pinctrl/sunxi/pinctrl-sun50i-h5.c +++ b/drivers/pinctrl/sunxi/pinctrl-sun50i-h5.c | |||
| @@ -535,14 +535,16 @@ static const struct sunxi_pinctrl_desc sun50i_h5_pinctrl_data_broken = { | |||
| 535 | .pins = sun50i_h5_pins, | 535 | .pins = sun50i_h5_pins, |
| 536 | .npins = ARRAY_SIZE(sun50i_h5_pins), | 536 | .npins = ARRAY_SIZE(sun50i_h5_pins), |
| 537 | .irq_banks = 2, | 537 | .irq_banks = 2, |
| 538 | .irq_read_needs_mux = true | 538 | .irq_read_needs_mux = true, |
| 539 | .disable_strict_mode = true, | ||
| 539 | }; | 540 | }; |
| 540 | 541 | ||
| 541 | static const struct sunxi_pinctrl_desc sun50i_h5_pinctrl_data = { | 542 | static const struct sunxi_pinctrl_desc sun50i_h5_pinctrl_data = { |
| 542 | .pins = sun50i_h5_pins, | 543 | .pins = sun50i_h5_pins, |
| 543 | .npins = ARRAY_SIZE(sun50i_h5_pins), | 544 | .npins = ARRAY_SIZE(sun50i_h5_pins), |
| 544 | .irq_banks = 3, | 545 | .irq_banks = 3, |
| 545 | .irq_read_needs_mux = true | 546 | .irq_read_needs_mux = true, |
| 547 | .disable_strict_mode = true, | ||
| 546 | }; | 548 | }; |
| 547 | 549 | ||
| 548 | static int sun50i_h5_pinctrl_probe(struct platform_device *pdev) | 550 | static int sun50i_h5_pinctrl_probe(struct platform_device *pdev) |
diff --git a/drivers/pinctrl/sunxi/pinctrl-sun9i-a80.c b/drivers/pinctrl/sunxi/pinctrl-sun9i-a80.c index 472ef0d91b99..5553c0eb0f41 100644 --- a/drivers/pinctrl/sunxi/pinctrl-sun9i-a80.c +++ b/drivers/pinctrl/sunxi/pinctrl-sun9i-a80.c | |||
| @@ -145,19 +145,19 @@ static const struct sunxi_desc_pin sun9i_a80_pins[] = { | |||
| 145 | SUNXI_FUNCTION(0x0, "gpio_in"), | 145 | SUNXI_FUNCTION(0x0, "gpio_in"), |
| 146 | SUNXI_FUNCTION(0x1, "gpio_out"), | 146 | SUNXI_FUNCTION(0x1, "gpio_out"), |
| 147 | SUNXI_FUNCTION(0x3, "mcsi"), /* MCLK */ | 147 | SUNXI_FUNCTION(0x3, "mcsi"), /* MCLK */ |
| 148 | SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 14)), /* PB_EINT14 */ | 148 | SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 14)), /* PB_EINT14 */ |
| 149 | SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 15), | 149 | SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 15), |
| 150 | SUNXI_FUNCTION(0x0, "gpio_in"), | 150 | SUNXI_FUNCTION(0x0, "gpio_in"), |
| 151 | SUNXI_FUNCTION(0x1, "gpio_out"), | 151 | SUNXI_FUNCTION(0x1, "gpio_out"), |
| 152 | SUNXI_FUNCTION(0x3, "mcsi"), /* SCK */ | 152 | SUNXI_FUNCTION(0x3, "mcsi"), /* SCK */ |
| 153 | SUNXI_FUNCTION(0x4, "i2c4"), /* SCK */ | 153 | SUNXI_FUNCTION(0x4, "i2c4"), /* SCK */ |
| 154 | SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 15)), /* PB_EINT15 */ | 154 | SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 15)), /* PB_EINT15 */ |
| 155 | SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 16), | 155 | SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 16), |
| 156 | SUNXI_FUNCTION(0x0, "gpio_in"), | 156 | SUNXI_FUNCTION(0x0, "gpio_in"), |
| 157 | SUNXI_FUNCTION(0x1, "gpio_out"), | 157 | SUNXI_FUNCTION(0x1, "gpio_out"), |
| 158 | SUNXI_FUNCTION(0x3, "mcsi"), /* SDA */ | 158 | SUNXI_FUNCTION(0x3, "mcsi"), /* SDA */ |
| 159 | SUNXI_FUNCTION(0x4, "i2c4"), /* SDA */ | 159 | SUNXI_FUNCTION(0x4, "i2c4"), /* SDA */ |
| 160 | SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 16)), /* PB_EINT16 */ | 160 | SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 16)), /* PB_EINT16 */ |
| 161 | 161 | ||
| 162 | /* Hole */ | 162 | /* Hole */ |
| 163 | SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 0), | 163 | SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 0), |
diff --git a/drivers/platform/x86/asus-wireless.c b/drivers/platform/x86/asus-wireless.c index f3796164329e..d4aeac3477f5 100644 --- a/drivers/platform/x86/asus-wireless.c +++ b/drivers/platform/x86/asus-wireless.c | |||
| @@ -118,6 +118,7 @@ static void asus_wireless_notify(struct acpi_device *adev, u32 event) | |||
| 118 | return; | 118 | return; |
| 119 | } | 119 | } |
| 120 | input_report_key(data->idev, KEY_RFKILL, 1); | 120 | input_report_key(data->idev, KEY_RFKILL, 1); |
| 121 | input_sync(data->idev); | ||
| 121 | input_report_key(data->idev, KEY_RFKILL, 0); | 122 | input_report_key(data->idev, KEY_RFKILL, 0); |
| 122 | input_sync(data->idev); | 123 | input_sync(data->idev); |
| 123 | } | 124 | } |
diff --git a/drivers/platform/x86/dell-laptop.c b/drivers/platform/x86/dell-laptop.c index bf897b1832b1..cd4725e7e0b5 100644 --- a/drivers/platform/x86/dell-laptop.c +++ b/drivers/platform/x86/dell-laptop.c | |||
| @@ -37,6 +37,7 @@ | |||
| 37 | 37 | ||
| 38 | struct quirk_entry { | 38 | struct quirk_entry { |
| 39 | u8 touchpad_led; | 39 | u8 touchpad_led; |
| 40 | u8 kbd_led_levels_off_1; | ||
| 40 | 41 | ||
| 41 | int needs_kbd_timeouts; | 42 | int needs_kbd_timeouts; |
| 42 | /* | 43 | /* |
| @@ -67,6 +68,10 @@ static struct quirk_entry quirk_dell_xps13_9333 = { | |||
| 67 | .kbd_timeouts = { 0, 5, 15, 60, 5 * 60, 15 * 60, -1 }, | 68 | .kbd_timeouts = { 0, 5, 15, 60, 5 * 60, 15 * 60, -1 }, |
| 68 | }; | 69 | }; |
| 69 | 70 | ||
| 71 | static struct quirk_entry quirk_dell_latitude_e6410 = { | ||
| 72 | .kbd_led_levels_off_1 = 1, | ||
| 73 | }; | ||
| 74 | |||
| 70 | static struct platform_driver platform_driver = { | 75 | static struct platform_driver platform_driver = { |
| 71 | .driver = { | 76 | .driver = { |
| 72 | .name = "dell-laptop", | 77 | .name = "dell-laptop", |
| @@ -269,6 +274,15 @@ static const struct dmi_system_id dell_quirks[] __initconst = { | |||
| 269 | }, | 274 | }, |
| 270 | .driver_data = &quirk_dell_xps13_9333, | 275 | .driver_data = &quirk_dell_xps13_9333, |
| 271 | }, | 276 | }, |
| 277 | { | ||
| 278 | .callback = dmi_matched, | ||
| 279 | .ident = "Dell Latitude E6410", | ||
| 280 | .matches = { | ||
| 281 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | ||
| 282 | DMI_MATCH(DMI_PRODUCT_NAME, "Latitude E6410"), | ||
| 283 | }, | ||
| 284 | .driver_data = &quirk_dell_latitude_e6410, | ||
| 285 | }, | ||
| 272 | { } | 286 | { } |
| 273 | }; | 287 | }; |
| 274 | 288 | ||
| @@ -1149,6 +1163,9 @@ static int kbd_get_info(struct kbd_info *info) | |||
| 1149 | units = (buffer->output[2] >> 8) & 0xFF; | 1163 | units = (buffer->output[2] >> 8) & 0xFF; |
| 1150 | info->levels = (buffer->output[2] >> 16) & 0xFF; | 1164 | info->levels = (buffer->output[2] >> 16) & 0xFF; |
| 1151 | 1165 | ||
| 1166 | if (quirks && quirks->kbd_led_levels_off_1 && info->levels) | ||
| 1167 | info->levels--; | ||
| 1168 | |||
| 1152 | if (units & BIT(0)) | 1169 | if (units & BIT(0)) |
| 1153 | info->seconds = (buffer->output[3] >> 0) & 0xFF; | 1170 | info->seconds = (buffer->output[3] >> 0) & 0xFF; |
| 1154 | if (units & BIT(1)) | 1171 | if (units & BIT(1)) |
diff --git a/drivers/platform/x86/dell-wmi.c b/drivers/platform/x86/dell-wmi.c index 39d2f4518483..fb25b20df316 100644 --- a/drivers/platform/x86/dell-wmi.c +++ b/drivers/platform/x86/dell-wmi.c | |||
| @@ -639,6 +639,8 @@ static int dell_wmi_events_set_enabled(bool enable) | |||
| 639 | int ret; | 639 | int ret; |
| 640 | 640 | ||
| 641 | buffer = kzalloc(sizeof(struct calling_interface_buffer), GFP_KERNEL); | 641 | buffer = kzalloc(sizeof(struct calling_interface_buffer), GFP_KERNEL); |
| 642 | if (!buffer) | ||
| 643 | return -ENOMEM; | ||
| 642 | buffer->cmd_class = CLASS_INFO; | 644 | buffer->cmd_class = CLASS_INFO; |
| 643 | buffer->cmd_select = SELECT_APP_REGISTRATION; | 645 | buffer->cmd_select = SELECT_APP_REGISTRATION; |
| 644 | buffer->input[0] = 0x10000; | 646 | buffer->input[0] = 0x10000; |
diff --git a/drivers/s390/Makefile b/drivers/s390/Makefile index e5225ad9c5b1..2fdab400c1fe 100644 --- a/drivers/s390/Makefile +++ b/drivers/s390/Makefile | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | # SPDX-License-Identifier: GPL-2.0 | ||
| 1 | # | 2 | # |
| 2 | # Makefile for the S/390 specific device drivers | 3 | # Makefile for the S/390 specific device drivers |
| 3 | # | 4 | # |
diff --git a/drivers/s390/block/Kconfig b/drivers/s390/block/Kconfig index 31f014b57bfc..bc27d716aa6b 100644 --- a/drivers/s390/block/Kconfig +++ b/drivers/s390/block/Kconfig | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | # SPDX-License-Identifier: GPL-2.0 | ||
| 1 | comment "S/390 block device drivers" | 2 | comment "S/390 block device drivers" |
| 2 | depends on S390 && BLOCK | 3 | depends on S390 && BLOCK |
| 3 | 4 | ||
diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c index 0f1ff0813493..d4e8dff673cc 100644 --- a/drivers/s390/block/dasd.c +++ b/drivers/s390/block/dasd.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * Author(s)......: Holger Smolinski <Holger.Smolinski@de.ibm.com> | 3 | * Author(s)......: Holger Smolinski <Holger.Smolinski@de.ibm.com> |
| 3 | * Horst Hummel <Horst.Hummel@de.ibm.com> | 4 | * Horst Hummel <Horst.Hummel@de.ibm.com> |
| @@ -758,7 +759,7 @@ static void dasd_profile_end_add_data(struct dasd_profile_info *data, | |||
| 758 | /* in case of an overflow, reset the whole profile */ | 759 | /* in case of an overflow, reset the whole profile */ |
| 759 | if (data->dasd_io_reqs == UINT_MAX) { | 760 | if (data->dasd_io_reqs == UINT_MAX) { |
| 760 | memset(data, 0, sizeof(*data)); | 761 | memset(data, 0, sizeof(*data)); |
| 761 | getnstimeofday(&data->starttod); | 762 | ktime_get_real_ts64(&data->starttod); |
| 762 | } | 763 | } |
| 763 | data->dasd_io_reqs++; | 764 | data->dasd_io_reqs++; |
| 764 | data->dasd_io_sects += sectors; | 765 | data->dasd_io_sects += sectors; |
| @@ -893,7 +894,7 @@ void dasd_profile_reset(struct dasd_profile *profile) | |||
| 893 | return; | 894 | return; |
| 894 | } | 895 | } |
| 895 | memset(data, 0, sizeof(*data)); | 896 | memset(data, 0, sizeof(*data)); |
| 896 | getnstimeofday(&data->starttod); | 897 | ktime_get_real_ts64(&data->starttod); |
| 897 | spin_unlock_bh(&profile->lock); | 898 | spin_unlock_bh(&profile->lock); |
| 898 | } | 899 | } |
| 899 | 900 | ||
| @@ -910,7 +911,7 @@ int dasd_profile_on(struct dasd_profile *profile) | |||
| 910 | kfree(data); | 911 | kfree(data); |
| 911 | return 0; | 912 | return 0; |
| 912 | } | 913 | } |
| 913 | getnstimeofday(&data->starttod); | 914 | ktime_get_real_ts64(&data->starttod); |
| 914 | profile->data = data; | 915 | profile->data = data; |
| 915 | spin_unlock_bh(&profile->lock); | 916 | spin_unlock_bh(&profile->lock); |
| 916 | return 0; | 917 | return 0; |
| @@ -994,8 +995,8 @@ static void dasd_stats_array(struct seq_file *m, unsigned int *array) | |||
| 994 | static void dasd_stats_seq_print(struct seq_file *m, | 995 | static void dasd_stats_seq_print(struct seq_file *m, |
| 995 | struct dasd_profile_info *data) | 996 | struct dasd_profile_info *data) |
| 996 | { | 997 | { |
| 997 | seq_printf(m, "start_time %ld.%09ld\n", | 998 | seq_printf(m, "start_time %lld.%09ld\n", |
| 998 | data->starttod.tv_sec, data->starttod.tv_nsec); | 999 | (s64)data->starttod.tv_sec, data->starttod.tv_nsec); |
| 999 | seq_printf(m, "total_requests %u\n", data->dasd_io_reqs); | 1000 | seq_printf(m, "total_requests %u\n", data->dasd_io_reqs); |
| 1000 | seq_printf(m, "total_sectors %u\n", data->dasd_io_sects); | 1001 | seq_printf(m, "total_sectors %u\n", data->dasd_io_sects); |
| 1001 | seq_printf(m, "total_pav %u\n", data->dasd_io_alias); | 1002 | seq_printf(m, "total_pav %u\n", data->dasd_io_alias); |
diff --git a/drivers/s390/block/dasd_devmap.c b/drivers/s390/block/dasd_devmap.c index c95a4784c191..e7cd28ff1984 100644 --- a/drivers/s390/block/dasd_devmap.c +++ b/drivers/s390/block/dasd_devmap.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * Author(s)......: Holger Smolinski <Holger.Smolinski@de.ibm.com> | 3 | * Author(s)......: Holger Smolinski <Holger.Smolinski@de.ibm.com> |
| 3 | * Horst Hummel <Horst.Hummel@de.ibm.com> | 4 | * Horst Hummel <Horst.Hummel@de.ibm.com> |
diff --git a/drivers/s390/block/dasd_diag.c b/drivers/s390/block/dasd_diag.c index 98fb28e49d2c..f035c2f25d35 100644 --- a/drivers/s390/block/dasd_diag.c +++ b/drivers/s390/block/dasd_diag.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * Author(s)......: Holger Smolinski <Holger.Smolinski@de.ibm.com> | 3 | * Author(s)......: Holger Smolinski <Holger.Smolinski@de.ibm.com> |
| 3 | * Based on.......: linux/drivers/s390/block/mdisk.c | 4 | * Based on.......: linux/drivers/s390/block/mdisk.c |
diff --git a/drivers/s390/block/dasd_eckd.c b/drivers/s390/block/dasd_eckd.c index 8eafcd5fa004..a2edf2a7ace9 100644 --- a/drivers/s390/block/dasd_eckd.c +++ b/drivers/s390/block/dasd_eckd.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * Author(s)......: Holger Smolinski <Holger.Smolinski@de.ibm.com> | 3 | * Author(s)......: Holger Smolinski <Holger.Smolinski@de.ibm.com> |
| 3 | * Horst Hummel <Horst.Hummel@de.ibm.com> | 4 | * Horst Hummel <Horst.Hummel@de.ibm.com> |
| @@ -530,10 +531,12 @@ static int prefix_LRE(struct ccw1 *ccw, struct PFX_eckd_data *pfxdata, | |||
| 530 | pfxdata->validity.define_extent = 1; | 531 | pfxdata->validity.define_extent = 1; |
| 531 | 532 | ||
| 532 | /* private uid is kept up to date, conf_data may be outdated */ | 533 | /* private uid is kept up to date, conf_data may be outdated */ |
| 533 | if (startpriv->uid.type != UA_BASE_DEVICE) { | 534 | if (startpriv->uid.type == UA_BASE_PAV_ALIAS) |
| 534 | pfxdata->validity.verify_base = 1; | 535 | pfxdata->validity.verify_base = 1; |
| 535 | if (startpriv->uid.type == UA_HYPER_PAV_ALIAS) | 536 | |
| 536 | pfxdata->validity.hyper_pav = 1; | 537 | if (startpriv->uid.type == UA_HYPER_PAV_ALIAS) { |
| 538 | pfxdata->validity.verify_base = 1; | ||
| 539 | pfxdata->validity.hyper_pav = 1; | ||
| 537 | } | 540 | } |
| 538 | 541 | ||
| 539 | rc = define_extent(NULL, dedata, trk, totrk, cmd, basedev, blksize); | 542 | rc = define_extent(NULL, dedata, trk, totrk, cmd, basedev, blksize); |
| @@ -3414,10 +3417,12 @@ static int prepare_itcw(struct itcw *itcw, | |||
| 3414 | pfxdata.validity.define_extent = 1; | 3417 | pfxdata.validity.define_extent = 1; |
| 3415 | 3418 | ||
| 3416 | /* private uid is kept up to date, conf_data may be outdated */ | 3419 | /* private uid is kept up to date, conf_data may be outdated */ |
| 3417 | if (startpriv->uid.type != UA_BASE_DEVICE) { | 3420 | if (startpriv->uid.type == UA_BASE_PAV_ALIAS) |
| 3421 | pfxdata.validity.verify_base = 1; | ||
| 3422 | |||
| 3423 | if (startpriv->uid.type == UA_HYPER_PAV_ALIAS) { | ||
| 3418 | pfxdata.validity.verify_base = 1; | 3424 | pfxdata.validity.verify_base = 1; |
| 3419 | if (startpriv->uid.type == UA_HYPER_PAV_ALIAS) | 3425 | pfxdata.validity.hyper_pav = 1; |
| 3420 | pfxdata.validity.hyper_pav = 1; | ||
| 3421 | } | 3426 | } |
| 3422 | 3427 | ||
| 3423 | switch (cmd) { | 3428 | switch (cmd) { |
diff --git a/drivers/s390/block/dasd_fba.c b/drivers/s390/block/dasd_fba.c index 6168ccdb389c..a6b132f7e869 100644 --- a/drivers/s390/block/dasd_fba.c +++ b/drivers/s390/block/dasd_fba.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * Author(s)......: Holger Smolinski <Holger.Smolinski@de.ibm.com> | 3 | * Author(s)......: Holger Smolinski <Holger.Smolinski@de.ibm.com> |
| 3 | * Bugreports.to..: <Linux390@de.ibm.com> | 4 | * Bugreports.to..: <Linux390@de.ibm.com> |
diff --git a/drivers/s390/block/dasd_int.h b/drivers/s390/block/dasd_int.h index b095a23bcc0c..96709b1a7bf8 100644 --- a/drivers/s390/block/dasd_int.h +++ b/drivers/s390/block/dasd_int.h | |||
| @@ -441,7 +441,7 @@ struct dasd_profile_info { | |||
| 441 | unsigned int dasd_io_nr_req[32]; /* hist. of # of requests in chanq */ | 441 | unsigned int dasd_io_nr_req[32]; /* hist. of # of requests in chanq */ |
| 442 | 442 | ||
| 443 | /* new data */ | 443 | /* new data */ |
| 444 | struct timespec starttod; /* time of start or last reset */ | 444 | struct timespec64 starttod; /* time of start or last reset */ |
| 445 | unsigned int dasd_io_alias; /* requests using an alias */ | 445 | unsigned int dasd_io_alias; /* requests using an alias */ |
| 446 | unsigned int dasd_io_tpm; /* requests using transport mode */ | 446 | unsigned int dasd_io_tpm; /* requests using transport mode */ |
| 447 | unsigned int dasd_read_reqs; /* total number of read requests */ | 447 | unsigned int dasd_read_reqs; /* total number of read requests */ |
diff --git a/drivers/s390/block/dcssblk.c b/drivers/s390/block/dcssblk.c index 7abb240847c0..6aaefb780436 100644 --- a/drivers/s390/block/dcssblk.c +++ b/drivers/s390/block/dcssblk.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * dcssblk.c -- the S/390 block driver for dcss memory | 3 | * dcssblk.c -- the S/390 block driver for dcss memory |
| 3 | * | 4 | * |
diff --git a/drivers/s390/block/scm_blk.c b/drivers/s390/block/scm_blk.c index eb51893c74a4..b4130c7880d8 100644 --- a/drivers/s390/block/scm_blk.c +++ b/drivers/s390/block/scm_blk.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * Block driver for s390 storage class memory. | 3 | * Block driver for s390 storage class memory. |
| 3 | * | 4 | * |
diff --git a/drivers/s390/block/xpram.c b/drivers/s390/block/xpram.c index 571a0709e1e5..2a6334ca750e 100644 --- a/drivers/s390/block/xpram.c +++ b/drivers/s390/block/xpram.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * Xpram.c -- the S/390 expanded memory RAM-disk | 3 | * Xpram.c -- the S/390 expanded memory RAM-disk |
| 3 | * | 4 | * |
diff --git a/drivers/s390/char/Kconfig b/drivers/s390/char/Kconfig index 97c4c9fdd53d..ab0b243a947d 100644 --- a/drivers/s390/char/Kconfig +++ b/drivers/s390/char/Kconfig | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | # SPDX-License-Identifier: GPL-2.0 | ||
| 1 | comment "S/390 character device drivers" | 2 | comment "S/390 character device drivers" |
| 2 | depends on S390 | 3 | depends on S390 |
| 3 | 4 | ||
diff --git a/drivers/s390/char/defkeymap.map b/drivers/s390/char/defkeymap.map index 353b3f268824..f4c095612a02 100644 --- a/drivers/s390/char/defkeymap.map +++ b/drivers/s390/char/defkeymap.map | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | # SPDX-License-Identifier: GPL-2.0 | ||
| 1 | # Default keymap for 3270 (ebcdic codepage 037). | 2 | # Default keymap for 3270 (ebcdic codepage 037). |
| 2 | keymaps 0-1,4-5 | 3 | keymaps 0-1,4-5 |
| 3 | 4 | ||
diff --git a/drivers/s390/char/fs3270.c b/drivers/s390/char/fs3270.c index c4518168fd02..61822480a2a0 100644 --- a/drivers/s390/char/fs3270.c +++ b/drivers/s390/char/fs3270.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * IBM/3270 Driver - fullscreen driver. | 3 | * IBM/3270 Driver - fullscreen driver. |
| 3 | * | 4 | * |
diff --git a/drivers/s390/char/hmcdrv_mod.c b/drivers/s390/char/hmcdrv_mod.c index 251a318a9b75..1447d0887225 100644 --- a/drivers/s390/char/hmcdrv_mod.c +++ b/drivers/s390/char/hmcdrv_mod.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * HMC Drive DVD Module | 3 | * HMC Drive DVD Module |
| 3 | * | 4 | * |
diff --git a/drivers/s390/char/monreader.c b/drivers/s390/char/monreader.c index 027ac6ae5eea..bf4ab4efed73 100644 --- a/drivers/s390/char/monreader.c +++ b/drivers/s390/char/monreader.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * Character device driver for reading z/VM *MONITOR service records. | 3 | * Character device driver for reading z/VM *MONITOR service records. |
| 3 | * | 4 | * |
diff --git a/drivers/s390/char/monwriter.c b/drivers/s390/char/monwriter.c index 571a7e352755..76c158c41510 100644 --- a/drivers/s390/char/monwriter.c +++ b/drivers/s390/char/monwriter.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * Character device driver for writing z/VM *MONITOR service records. | 3 | * Character device driver for writing z/VM *MONITOR service records. |
| 3 | * | 4 | * |
diff --git a/drivers/s390/char/raw3270.c b/drivers/s390/char/raw3270.c index 5d4f053d7c38..f8cd2935fbfd 100644 --- a/drivers/s390/char/raw3270.c +++ b/drivers/s390/char/raw3270.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * IBM/3270 Driver - core functions. | 3 | * IBM/3270 Driver - core functions. |
| 3 | * | 4 | * |
diff --git a/drivers/s390/char/sclp_async.c b/drivers/s390/char/sclp_async.c index 19c25427f27f..ee6f3b563728 100644 --- a/drivers/s390/char/sclp_async.c +++ b/drivers/s390/char/sclp_async.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * Enable Asynchronous Notification via SCLP. | 3 | * Enable Asynchronous Notification via SCLP. |
| 3 | * | 4 | * |
diff --git a/drivers/s390/char/tape_34xx.c b/drivers/s390/char/tape_34xx.c index de69f0ddc321..6d73ee3f827a 100644 --- a/drivers/s390/char/tape_34xx.c +++ b/drivers/s390/char/tape_34xx.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * tape device discipline for 3480/3490 tapes. | 3 | * tape device discipline for 3480/3490 tapes. |
| 3 | * | 4 | * |
diff --git a/drivers/s390/char/tape_3590.c b/drivers/s390/char/tape_3590.c index e352047ed9f7..37e65a05517f 100644 --- a/drivers/s390/char/tape_3590.c +++ b/drivers/s390/char/tape_3590.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * tape device discipline for 3590 tapes. | 3 | * tape device discipline for 3590 tapes. |
| 3 | * | 4 | * |
diff --git a/drivers/s390/char/tape_class.c b/drivers/s390/char/tape_class.c index e7d23048d3f0..a07102472ce9 100644 --- a/drivers/s390/char/tape_class.c +++ b/drivers/s390/char/tape_class.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * Copyright IBM Corp. 2004 | 3 | * Copyright IBM Corp. 2004 |
| 3 | * | 4 | * |
diff --git a/drivers/s390/char/tape_core.c b/drivers/s390/char/tape_core.c index 32503a60ee85..8d3370da2dfc 100644 --- a/drivers/s390/char/tape_core.c +++ b/drivers/s390/char/tape_core.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * basic function of the tape device driver | 3 | * basic function of the tape device driver |
| 3 | * | 4 | * |
diff --git a/drivers/s390/char/tty3270.c b/drivers/s390/char/tty3270.c index e417ccd9e299..1c98023cffd4 100644 --- a/drivers/s390/char/tty3270.c +++ b/drivers/s390/char/tty3270.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * IBM/3270 Driver - tty functions. | 3 | * IBM/3270 Driver - tty functions. |
| 3 | * | 4 | * |
diff --git a/drivers/s390/char/vmlogrdr.c b/drivers/s390/char/vmlogrdr.c index 62559dc0169f..069b9ef08206 100644 --- a/drivers/s390/char/vmlogrdr.c +++ b/drivers/s390/char/vmlogrdr.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * character device driver for reading z/VM system service records | 3 | * character device driver for reading z/VM system service records |
| 3 | * | 4 | * |
diff --git a/drivers/s390/char/vmur.c b/drivers/s390/char/vmur.c index fa90ef05afc0..52aa89424318 100644 --- a/drivers/s390/char/vmur.c +++ b/drivers/s390/char/vmur.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * Linux driver for System z and s390 unit record devices | 3 | * Linux driver for System z and s390 unit record devices |
| 3 | * (z/VM virtual punch, reader, printer) | 4 | * (z/VM virtual punch, reader, printer) |
diff --git a/drivers/s390/char/zcore.c b/drivers/s390/char/zcore.c index aaed778f67c4..4369662cfff5 100644 --- a/drivers/s390/char/zcore.c +++ b/drivers/s390/char/zcore.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-1.0+ | ||
| 1 | /* | 2 | /* |
| 2 | * zcore module to export memory content and register sets for creating system | 3 | * zcore module to export memory content and register sets for creating system |
| 3 | * dumps on SCSI disks (zfcpdump). The "zcore/mem" debugfs file shows the same | 4 | * dumps on SCSI disks (zfcpdump). The "zcore/mem" debugfs file shows the same |
| @@ -7,7 +8,6 @@ | |||
| 7 | * | 8 | * |
| 8 | * Copyright IBM Corp. 2003, 2008 | 9 | * Copyright IBM Corp. 2003, 2008 |
| 9 | * Author(s): Michael Holzheu | 10 | * Author(s): Michael Holzheu |
| 10 | * License: GPL | ||
| 11 | */ | 11 | */ |
| 12 | 12 | ||
| 13 | #define KMSG_COMPONENT "zdump" | 13 | #define KMSG_COMPONENT "zdump" |
diff --git a/drivers/s390/cio/blacklist.h b/drivers/s390/cio/blacklist.h index 95e25c1df922..140e3e4ee2fd 100644 --- a/drivers/s390/cio/blacklist.h +++ b/drivers/s390/cio/blacklist.h | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | /* SPDX-License-Identifier: GPL-2.0 */ | ||
| 1 | #ifndef S390_BLACKLIST_H | 2 | #ifndef S390_BLACKLIST_H |
| 2 | #define S390_BLACKLIST_H | 3 | #define S390_BLACKLIST_H |
| 3 | 4 | ||
diff --git a/drivers/s390/cio/ccwgroup.c b/drivers/s390/cio/ccwgroup.c index e2f7b6e93efd..bfec1485ca23 100644 --- a/drivers/s390/cio/ccwgroup.c +++ b/drivers/s390/cio/ccwgroup.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * bus driver for ccwgroup | 3 | * bus driver for ccwgroup |
| 3 | * | 4 | * |
diff --git a/drivers/s390/cio/chp.c b/drivers/s390/cio/chp.c index f4166f80c4d4..5c94a3aec4dd 100644 --- a/drivers/s390/cio/chp.c +++ b/drivers/s390/cio/chp.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * Copyright IBM Corp. 1999, 2010 | 3 | * Copyright IBM Corp. 1999, 2010 |
| 3 | * Author(s): Cornelia Huck (cornelia.huck@de.ibm.com) | 4 | * Author(s): Cornelia Huck (cornelia.huck@de.ibm.com) |
diff --git a/drivers/s390/cio/chsc.c b/drivers/s390/cio/chsc.c index 7b0b295b2313..c08fc5a8df0c 100644 --- a/drivers/s390/cio/chsc.c +++ b/drivers/s390/cio/chsc.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * S/390 common I/O routines -- channel subsystem call | 3 | * S/390 common I/O routines -- channel subsystem call |
| 3 | * | 4 | * |
diff --git a/drivers/s390/cio/chsc_sch.c b/drivers/s390/cio/chsc_sch.c index 8e7e19b9e92c..0015729d917d 100644 --- a/drivers/s390/cio/chsc_sch.c +++ b/drivers/s390/cio/chsc_sch.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * Driver for s390 chsc subchannels | 3 | * Driver for s390 chsc subchannels |
| 3 | * | 4 | * |
diff --git a/drivers/s390/cio/cio.c b/drivers/s390/cio/cio.c index 89216174fcbb..987bf9a8c9f7 100644 --- a/drivers/s390/cio/cio.c +++ b/drivers/s390/cio/cio.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * S/390 common I/O routines -- low level i/o calls | 3 | * S/390 common I/O routines -- low level i/o calls |
| 3 | * | 4 | * |
diff --git a/drivers/s390/cio/cmf.c b/drivers/s390/cio/cmf.c index 7d59230e88bb..5e495c62cfa7 100644 --- a/drivers/s390/cio/cmf.c +++ b/drivers/s390/cio/cmf.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0+ | ||
| 1 | /* | 2 | /* |
| 2 | * Linux on zSeries Channel Measurement Facility support | 3 | * Linux on zSeries Channel Measurement Facility support |
| 3 | * | 4 | * |
| @@ -7,20 +8,6 @@ | |||
| 7 | * Cornelia Huck <cornelia.huck@de.ibm.com> | 8 | * Cornelia Huck <cornelia.huck@de.ibm.com> |
| 8 | * | 9 | * |
| 9 | * original idea from Natarajan Krishnaswami <nkrishna@us.ibm.com> | 10 | * original idea from Natarajan Krishnaswami <nkrishna@us.ibm.com> |
| 10 | * | ||
| 11 | * This program is free software; you can redistribute it and/or modify | ||
| 12 | * it under the terms of the GNU General Public License as published by | ||
| 13 | * the Free Software Foundation; either version 2, or (at your option) | ||
| 14 | * any later version. | ||
| 15 | * | ||
| 16 | * This program is distributed in the hope that it will be useful, | ||
| 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 19 | * GNU General Public License for more details. | ||
| 20 | * | ||
| 21 | * You should have received a copy of the GNU General Public License | ||
| 22 | * along with this program; if not, write to the Free Software | ||
| 23 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 24 | */ | 11 | */ |
| 25 | 12 | ||
| 26 | #define KMSG_COMPONENT "cio" | 13 | #define KMSG_COMPONENT "cio" |
diff --git a/drivers/s390/cio/css.c b/drivers/s390/cio/css.c index d3e504c3c362..0f11dce6e224 100644 --- a/drivers/s390/cio/css.c +++ b/drivers/s390/cio/css.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * driver for channel subsystem | 3 | * driver for channel subsystem |
| 3 | * | 4 | * |
| @@ -5,8 +6,6 @@ | |||
| 5 | * | 6 | * |
| 6 | * Author(s): Arnd Bergmann (arndb@de.ibm.com) | 7 | * Author(s): Arnd Bergmann (arndb@de.ibm.com) |
| 7 | * Cornelia Huck (cornelia.huck@de.ibm.com) | 8 | * Cornelia Huck (cornelia.huck@de.ibm.com) |
| 8 | * | ||
| 9 | * License: GPL | ||
| 10 | */ | 9 | */ |
| 11 | 10 | ||
| 12 | #define KMSG_COMPONENT "cio" | 11 | #define KMSG_COMPONENT "cio" |
diff --git a/drivers/s390/cio/device.c b/drivers/s390/cio/device.c index 318d8269f5de..75a245f38e2e 100644 --- a/drivers/s390/cio/device.c +++ b/drivers/s390/cio/device.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-1.0+ | ||
| 1 | /* | 2 | /* |
| 2 | * bus driver for ccw devices | 3 | * bus driver for ccw devices |
| 3 | * | 4 | * |
| @@ -5,8 +6,6 @@ | |||
| 5 | * Author(s): Arnd Bergmann (arndb@de.ibm.com) | 6 | * Author(s): Arnd Bergmann (arndb@de.ibm.com) |
| 6 | * Cornelia Huck (cornelia.huck@de.ibm.com) | 7 | * Cornelia Huck (cornelia.huck@de.ibm.com) |
| 7 | * Martin Schwidefsky (schwidefsky@de.ibm.com) | 8 | * Martin Schwidefsky (schwidefsky@de.ibm.com) |
| 8 | * | ||
| 9 | * License: GPL | ||
| 10 | */ | 9 | */ |
| 11 | 10 | ||
| 12 | #define KMSG_COMPONENT "cio" | 11 | #define KMSG_COMPONENT "cio" |
diff --git a/drivers/s390/cio/device_fsm.c b/drivers/s390/cio/device_fsm.c index dd7d79d30edc..1319122e9d12 100644 --- a/drivers/s390/cio/device_fsm.c +++ b/drivers/s390/cio/device_fsm.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * finite state machine for device handling | 3 | * finite state machine for device handling |
| 3 | * | 4 | * |
diff --git a/drivers/s390/cio/device_ops.c b/drivers/s390/cio/device_ops.c index cf8c4ac6323a..1caf6a398760 100644 --- a/drivers/s390/cio/device_ops.c +++ b/drivers/s390/cio/device_ops.c | |||
| @@ -1,10 +1,9 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-1.0+ | ||
| 1 | /* | 2 | /* |
| 2 | * Copyright IBM Corp. 2002, 2009 | 3 | * Copyright IBM Corp. 2002, 2009 |
| 3 | * | 4 | * |
| 4 | * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com) | 5 | * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com) |
| 5 | * Cornelia Huck (cornelia.huck@de.ibm.com) | 6 | * Cornelia Huck (cornelia.huck@de.ibm.com) |
| 6 | * | ||
| 7 | * License: GPL | ||
| 8 | */ | 7 | */ |
| 9 | #include <linux/export.h> | 8 | #include <linux/export.h> |
| 10 | #include <linux/init.h> | 9 | #include <linux/init.h> |
diff --git a/drivers/s390/cio/eadm_sch.c b/drivers/s390/cio/eadm_sch.c index ce16e4f45d44..53468ae64b99 100644 --- a/drivers/s390/cio/eadm_sch.c +++ b/drivers/s390/cio/eadm_sch.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * Driver for s390 eadm subchannels | 3 | * Driver for s390 eadm subchannels |
| 3 | * | 4 | * |
diff --git a/drivers/s390/cio/isc.c b/drivers/s390/cio/isc.c index c592087be0f1..77fde9f5ea8b 100644 --- a/drivers/s390/cio/isc.c +++ b/drivers/s390/cio/isc.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * Functions for registration of I/O interruption subclasses on s390. | 3 | * Functions for registration of I/O interruption subclasses on s390. |
| 3 | * | 4 | * |
diff --git a/drivers/s390/cio/qdio_main.c b/drivers/s390/cio/qdio_main.c index ed4852fab44b..95b0efe28afb 100644 --- a/drivers/s390/cio/qdio_main.c +++ b/drivers/s390/cio/qdio_main.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * Linux for s390 qdio support, buffer handling, qdio API and module support. | 3 | * Linux for s390 qdio support, buffer handling, qdio API and module support. |
| 3 | * | 4 | * |
| @@ -430,8 +431,8 @@ static void process_buffer_error(struct qdio_q *q, int count) | |||
| 430 | q->qdio_error = QDIO_ERROR_SLSB_STATE; | 431 | q->qdio_error = QDIO_ERROR_SLSB_STATE; |
| 431 | 432 | ||
| 432 | /* special handling for no target buffer empty */ | 433 | /* special handling for no target buffer empty */ |
| 433 | if ((!q->is_input_q && | 434 | if (queue_type(q) == QDIO_IQDIO_QFMT && !q->is_input_q && |
| 434 | (q->sbal[q->first_to_check]->element[15].sflags) == 0x10)) { | 435 | q->sbal[q->first_to_check]->element[15].sflags == 0x10) { |
| 435 | qperf_inc(q, target_full); | 436 | qperf_inc(q, target_full); |
| 436 | DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "OUTFULL FTC:%02x", | 437 | DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "OUTFULL FTC:%02x", |
| 437 | q->first_to_check); | 438 | q->first_to_check); |
| @@ -535,7 +536,8 @@ static int get_inbound_buffer_frontier(struct qdio_q *q) | |||
| 535 | case SLSB_P_INPUT_ERROR: | 536 | case SLSB_P_INPUT_ERROR: |
| 536 | process_buffer_error(q, count); | 537 | process_buffer_error(q, count); |
| 537 | q->first_to_check = add_buf(q->first_to_check, count); | 538 | q->first_to_check = add_buf(q->first_to_check, count); |
| 538 | atomic_sub(count, &q->nr_buf_used); | 539 | if (atomic_sub_return(count, &q->nr_buf_used) == 0) |
| 540 | qperf_inc(q, inbound_queue_full); | ||
| 539 | if (q->irq_ptr->perf_stat_enabled) | 541 | if (q->irq_ptr->perf_stat_enabled) |
| 540 | account_sbals_error(q, count); | 542 | account_sbals_error(q, count); |
| 541 | break; | 543 | break; |
diff --git a/drivers/s390/cio/qdio_setup.c b/drivers/s390/cio/qdio_setup.c index 9ae1380cbc31..98f3cfdc0d02 100644 --- a/drivers/s390/cio/qdio_setup.c +++ b/drivers/s390/cio/qdio_setup.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * qdio queue initialization | 3 | * qdio queue initialization |
| 3 | * | 4 | * |
diff --git a/drivers/s390/cio/scm.c b/drivers/s390/cio/scm.c index 1fa53ecdc2aa..6bca1d5455d4 100644 --- a/drivers/s390/cio/scm.c +++ b/drivers/s390/cio/scm.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * Recognize and maintain s390 storage class memory. | 3 | * Recognize and maintain s390 storage class memory. |
| 3 | * | 4 | * |
diff --git a/drivers/s390/cio/vfio_ccw_drv.c b/drivers/s390/cio/vfio_ccw_drv.c index 82f05c4b8c52..ea6a2d0b2894 100644 --- a/drivers/s390/cio/vfio_ccw_drv.c +++ b/drivers/s390/cio/vfio_ccw_drv.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * VFIO based Physical Subchannel device driver | 3 | * VFIO based Physical Subchannel device driver |
| 3 | * | 4 | * |
diff --git a/drivers/s390/crypto/ap_bus.c b/drivers/s390/crypto/ap_bus.c index faeba9db3d95..48d55dc9e986 100644 --- a/drivers/s390/crypto/ap_bus.c +++ b/drivers/s390/crypto/ap_bus.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0+ | ||
| 1 | /* | 2 | /* |
| 2 | * Copyright IBM Corp. 2006, 2012 | 3 | * Copyright IBM Corp. 2006, 2012 |
| 3 | * Author(s): Cornelia Huck <cornelia.huck@de.ibm.com> | 4 | * Author(s): Cornelia Huck <cornelia.huck@de.ibm.com> |
| @@ -7,20 +8,6 @@ | |||
| 7 | * Holger Dengler <hd@linux.vnet.ibm.com> | 8 | * Holger Dengler <hd@linux.vnet.ibm.com> |
| 8 | * | 9 | * |
| 9 | * Adjunct processor bus. | 10 | * Adjunct processor bus. |
| 10 | * | ||
| 11 | * This program is free software; you can redistribute it and/or modify | ||
| 12 | * it under the terms of the GNU General Public License as published by | ||
| 13 | * the Free Software Foundation; either version 2, or (at your option) | ||
| 14 | * any later version. | ||
| 15 | * | ||
| 16 | * This program is distributed in the hope that it will be useful, | ||
| 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 19 | * GNU General Public License for more details. | ||
| 20 | * | ||
| 21 | * You should have received a copy of the GNU General Public License | ||
| 22 | * along with this program; if not, write to the Free Software | ||
| 23 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 24 | */ | 11 | */ |
| 25 | 12 | ||
| 26 | #define KMSG_COMPONENT "ap" | 13 | #define KMSG_COMPONENT "ap" |
diff --git a/drivers/s390/crypto/ap_bus.h b/drivers/s390/crypto/ap_bus.h index 7e45c4d08cad..e0827eaa42f1 100644 --- a/drivers/s390/crypto/ap_bus.h +++ b/drivers/s390/crypto/ap_bus.h | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0+ | ||
| 1 | /* | 2 | /* |
| 2 | * Copyright IBM Corp. 2006, 2012 | 3 | * Copyright IBM Corp. 2006, 2012 |
| 3 | * Author(s): Cornelia Huck <cornelia.huck@de.ibm.com> | 4 | * Author(s): Cornelia Huck <cornelia.huck@de.ibm.com> |
| @@ -7,20 +8,6 @@ | |||
| 7 | * Holger Dengler <hd@linux.vnet.ibm.com> | 8 | * Holger Dengler <hd@linux.vnet.ibm.com> |
| 8 | * | 9 | * |
| 9 | * Adjunct processor bus header file. | 10 | * Adjunct processor bus header file. |
| 10 | * | ||
| 11 | * This program is free software; you can redistribute it and/or modify | ||
| 12 | * it under the terms of the GNU General Public License as published by | ||
| 13 | * the Free Software Foundation; either version 2, or (at your option) | ||
| 14 | * any later version. | ||
| 15 | * | ||
| 16 | * This program is distributed in the hope that it will be useful, | ||
| 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 19 | * GNU General Public License for more details. | ||
| 20 | * | ||
| 21 | * You should have received a copy of the GNU General Public License | ||
| 22 | * along with this program; if not, write to the Free Software | ||
| 23 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 24 | */ | 11 | */ |
| 25 | 12 | ||
| 26 | #ifndef _AP_BUS_H_ | 13 | #ifndef _AP_BUS_H_ |
diff --git a/drivers/s390/crypto/pkey_api.c b/drivers/s390/crypto/pkey_api.c index 8dda5bb34a2f..e7c2e4f9529a 100644 --- a/drivers/s390/crypto/pkey_api.c +++ b/drivers/s390/crypto/pkey_api.c | |||
| @@ -1,13 +1,9 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * pkey device driver | 3 | * pkey device driver |
| 3 | * | 4 | * |
| 4 | * Copyright IBM Corp. 2017 | 5 | * Copyright IBM Corp. 2017 |
| 5 | * Author(s): Harald Freudenberger | 6 | * Author(s): Harald Freudenberger |
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or modify | ||
| 8 | * it under the terms of the GNU General Public License (version 2 only) | ||
| 9 | * as published by the Free Software Foundation. | ||
| 10 | * | ||
| 11 | */ | 7 | */ |
| 12 | 8 | ||
| 13 | #define KMSG_COMPONENT "pkey" | 9 | #define KMSG_COMPONENT "pkey" |
diff --git a/drivers/s390/crypto/zcrypt_api.c b/drivers/s390/crypto/zcrypt_api.c index b5f4006198b9..ce15f101ee28 100644 --- a/drivers/s390/crypto/zcrypt_api.c +++ b/drivers/s390/crypto/zcrypt_api.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0+ | ||
| 1 | /* | 2 | /* |
| 2 | * zcrypt 2.1.0 | 3 | * zcrypt 2.1.0 |
| 3 | * | 4 | * |
| @@ -10,20 +11,6 @@ | |||
| 10 | * Major cleanup & driver split: Martin Schwidefsky <schwidefsky@de.ibm.com> | 11 | * Major cleanup & driver split: Martin Schwidefsky <schwidefsky@de.ibm.com> |
| 11 | * Ralph Wuerthner <rwuerthn@de.ibm.com> | 12 | * Ralph Wuerthner <rwuerthn@de.ibm.com> |
| 12 | * MSGTYPE restruct: Holger Dengler <hd@linux.vnet.ibm.com> | 13 | * MSGTYPE restruct: Holger Dengler <hd@linux.vnet.ibm.com> |
| 13 | * | ||
| 14 | * This program is free software; you can redistribute it and/or modify | ||
| 15 | * it under the terms of the GNU General Public License as published by | ||
| 16 | * the Free Software Foundation; either version 2, or (at your option) | ||
| 17 | * any later version. | ||
| 18 | * | ||
| 19 | * This program is distributed in the hope that it will be useful, | ||
| 20 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 21 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 22 | * GNU General Public License for more details. | ||
| 23 | * | ||
| 24 | * You should have received a copy of the GNU General Public License | ||
| 25 | * along with this program; if not, write to the Free Software | ||
| 26 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 27 | */ | 14 | */ |
| 28 | 15 | ||
| 29 | #include <linux/module.h> | 16 | #include <linux/module.h> |
| @@ -218,8 +205,8 @@ static inline bool zcrypt_queue_compare(struct zcrypt_queue *zq, | |||
| 218 | weight += atomic_read(&zq->load); | 205 | weight += atomic_read(&zq->load); |
| 219 | pref_weight += atomic_read(&pref_zq->load); | 206 | pref_weight += atomic_read(&pref_zq->load); |
| 220 | if (weight == pref_weight) | 207 | if (weight == pref_weight) |
| 221 | return &zq->queue->total_request_count > | 208 | return zq->queue->total_request_count > |
| 222 | &pref_zq->queue->total_request_count; | 209 | pref_zq->queue->total_request_count; |
| 223 | return weight > pref_weight; | 210 | return weight > pref_weight; |
| 224 | } | 211 | } |
| 225 | 212 | ||
diff --git a/drivers/s390/crypto/zcrypt_api.h b/drivers/s390/crypto/zcrypt_api.h index 73541a798db7..9fff8912f6e3 100644 --- a/drivers/s390/crypto/zcrypt_api.h +++ b/drivers/s390/crypto/zcrypt_api.h | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0+ | ||
| 1 | /* | 2 | /* |
| 2 | * zcrypt 2.1.0 | 3 | * zcrypt 2.1.0 |
| 3 | * | 4 | * |
| @@ -10,20 +11,6 @@ | |||
| 10 | * Major cleanup & driver split: Martin Schwidefsky <schwidefsky@de.ibm.com> | 11 | * Major cleanup & driver split: Martin Schwidefsky <schwidefsky@de.ibm.com> |
| 11 | * Ralph Wuerthner <rwuerthn@de.ibm.com> | 12 | * Ralph Wuerthner <rwuerthn@de.ibm.com> |
| 12 | * MSGTYPE restruct: Holger Dengler <hd@linux.vnet.ibm.com> | 13 | * MSGTYPE restruct: Holger Dengler <hd@linux.vnet.ibm.com> |
| 13 | * | ||
| 14 | * This program is free software; you can redistribute it and/or modify | ||
| 15 | * it under the terms of the GNU General Public License as published by | ||
| 16 | * the Free Software Foundation; either version 2, or (at your option) | ||
| 17 | * any later version. | ||
| 18 | * | ||
| 19 | * This program is distributed in the hope that it will be useful, | ||
| 20 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 21 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 22 | * GNU General Public License for more details. | ||
| 23 | * | ||
| 24 | * You should have received a copy of the GNU General Public License | ||
| 25 | * along with this program; if not, write to the Free Software | ||
| 26 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 27 | */ | 14 | */ |
| 28 | 15 | ||
| 29 | #ifndef _ZCRYPT_API_H_ | 16 | #ifndef _ZCRYPT_API_H_ |
diff --git a/drivers/s390/crypto/zcrypt_card.c b/drivers/s390/crypto/zcrypt_card.c index f85dacf1c284..233e1e695208 100644 --- a/drivers/s390/crypto/zcrypt_card.c +++ b/drivers/s390/crypto/zcrypt_card.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0+ | ||
| 1 | /* | 2 | /* |
| 2 | * zcrypt 2.1.0 | 3 | * zcrypt 2.1.0 |
| 3 | * | 4 | * |
| @@ -10,16 +11,6 @@ | |||
| 10 | * Major cleanup & driver split: Martin Schwidefsky <schwidefsky@de.ibm.com> | 11 | * Major cleanup & driver split: Martin Schwidefsky <schwidefsky@de.ibm.com> |
| 11 | * Ralph Wuerthner <rwuerthn@de.ibm.com> | 12 | * Ralph Wuerthner <rwuerthn@de.ibm.com> |
| 12 | * MSGTYPE restruct: Holger Dengler <hd@linux.vnet.ibm.com> | 13 | * MSGTYPE restruct: Holger Dengler <hd@linux.vnet.ibm.com> |
| 13 | * | ||
| 14 | * This program is free software; you can redistribute it and/or modify | ||
| 15 | * it under the terms of the GNU General Public License as published by | ||
| 16 | * the Free Software Foundation; either version 2, or (at your option) | ||
| 17 | * any later version. | ||
| 18 | * | ||
| 19 | * This program is distributed in the hope that it will be useful, | ||
| 20 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 21 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 22 | * GNU General Public License for more details. | ||
| 23 | */ | 14 | */ |
| 24 | 15 | ||
| 25 | #include <linux/module.h> | 16 | #include <linux/module.h> |
diff --git a/drivers/s390/crypto/zcrypt_cca_key.h b/drivers/s390/crypto/zcrypt_cca_key.h index 12cff6262566..011d61d8a4ae 100644 --- a/drivers/s390/crypto/zcrypt_cca_key.h +++ b/drivers/s390/crypto/zcrypt_cca_key.h | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0+ | ||
| 1 | /* | 2 | /* |
| 2 | * zcrypt 2.1.0 | 3 | * zcrypt 2.1.0 |
| 3 | * | 4 | * |
| @@ -7,20 +8,6 @@ | |||
| 7 | * | 8 | * |
| 8 | * Hotplug & misc device support: Jochen Roehrig (roehrig@de.ibm.com) | 9 | * Hotplug & misc device support: Jochen Roehrig (roehrig@de.ibm.com) |
| 9 | * Major cleanup & driver split: Martin Schwidefsky <schwidefsky@de.ibm.com> | 10 | * Major cleanup & driver split: Martin Schwidefsky <schwidefsky@de.ibm.com> |
| 10 | * | ||
| 11 | * This program is free software; you can redistribute it and/or modify | ||
| 12 | * it under the terms of the GNU General Public License as published by | ||
| 13 | * the Free Software Foundation; either version 2, or (at your option) | ||
| 14 | * any later version. | ||
| 15 | * | ||
| 16 | * This program is distributed in the hope that it will be useful, | ||
| 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 19 | * GNU General Public License for more details. | ||
| 20 | * | ||
| 21 | * You should have received a copy of the GNU General Public License | ||
| 22 | * along with this program; if not, write to the Free Software | ||
| 23 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 24 | */ | 11 | */ |
| 25 | 12 | ||
| 26 | #ifndef _ZCRYPT_CCA_KEY_H_ | 13 | #ifndef _ZCRYPT_CCA_KEY_H_ |
diff --git a/drivers/s390/crypto/zcrypt_cex2a.c b/drivers/s390/crypto/zcrypt_cex2a.c index b97c5d5ee5a4..e701194d3611 100644 --- a/drivers/s390/crypto/zcrypt_cex2a.c +++ b/drivers/s390/crypto/zcrypt_cex2a.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0+ | ||
| 1 | /* | 2 | /* |
| 2 | * zcrypt 2.1.0 | 3 | * zcrypt 2.1.0 |
| 3 | * | 4 | * |
| @@ -9,20 +10,6 @@ | |||
| 9 | * Major cleanup & driver split: Martin Schwidefsky <schwidefsky@de.ibm.com> | 10 | * Major cleanup & driver split: Martin Schwidefsky <schwidefsky@de.ibm.com> |
| 10 | * Ralph Wuerthner <rwuerthn@de.ibm.com> | 11 | * Ralph Wuerthner <rwuerthn@de.ibm.com> |
| 11 | * MSGTYPE restruct: Holger Dengler <hd@linux.vnet.ibm.com> | 12 | * MSGTYPE restruct: Holger Dengler <hd@linux.vnet.ibm.com> |
| 12 | * | ||
| 13 | * This program is free software; you can redistribute it and/or modify | ||
| 14 | * it under the terms of the GNU General Public License as published by | ||
| 15 | * the Free Software Foundation; either version 2, or (at your option) | ||
| 16 | * any later version. | ||
| 17 | * | ||
| 18 | * This program is distributed in the hope that it will be useful, | ||
| 19 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 20 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 21 | * GNU General Public License for more details. | ||
| 22 | * | ||
| 23 | * You should have received a copy of the GNU General Public License | ||
| 24 | * along with this program; if not, write to the Free Software | ||
| 25 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 26 | */ | 13 | */ |
| 27 | 14 | ||
| 28 | #include <linux/module.h> | 15 | #include <linux/module.h> |
diff --git a/drivers/s390/crypto/zcrypt_cex2a.h b/drivers/s390/crypto/zcrypt_cex2a.h index 0dce4b9af184..c3c116777c93 100644 --- a/drivers/s390/crypto/zcrypt_cex2a.h +++ b/drivers/s390/crypto/zcrypt_cex2a.h | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0+ | ||
| 1 | /* | 2 | /* |
| 2 | * zcrypt 2.1.0 | 3 | * zcrypt 2.1.0 |
| 3 | * | 4 | * |
| @@ -7,20 +8,6 @@ | |||
| 7 | * | 8 | * |
| 8 | * Hotplug & misc device support: Jochen Roehrig (roehrig@de.ibm.com) | 9 | * Hotplug & misc device support: Jochen Roehrig (roehrig@de.ibm.com) |
| 9 | * Major cleanup & driver split: Martin Schwidefsky <schwidefsky@de.ibm.com> | 10 | * Major cleanup & driver split: Martin Schwidefsky <schwidefsky@de.ibm.com> |
| 10 | * | ||
| 11 | * This program is free software; you can redistribute it and/or modify | ||
| 12 | * it under the terms of the GNU General Public License as published by | ||
| 13 | * the Free Software Foundation; either version 2, or (at your option) | ||
| 14 | * any later version. | ||
| 15 | * | ||
| 16 | * This program is distributed in the hope that it will be useful, | ||
| 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 19 | * GNU General Public License for more details. | ||
| 20 | * | ||
| 21 | * You should have received a copy of the GNU General Public License | ||
| 22 | * along with this program; if not, write to the Free Software | ||
| 23 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 24 | */ | 11 | */ |
| 25 | 12 | ||
| 26 | #ifndef _ZCRYPT_CEX2A_H_ | 13 | #ifndef _ZCRYPT_CEX2A_H_ |
diff --git a/drivers/s390/crypto/zcrypt_cex4.c b/drivers/s390/crypto/zcrypt_cex4.c index e2eebc775a37..f305538334ad 100644 --- a/drivers/s390/crypto/zcrypt_cex4.c +++ b/drivers/s390/crypto/zcrypt_cex4.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * Copyright IBM Corp. 2012 | 3 | * Copyright IBM Corp. 2012 |
| 3 | * Author(s): Holger Dengler <hd@linux.vnet.ibm.com> | 4 | * Author(s): Holger Dengler <hd@linux.vnet.ibm.com> |
diff --git a/drivers/s390/crypto/zcrypt_error.h b/drivers/s390/crypto/zcrypt_error.h index 13df60209ed3..01598d83c60a 100644 --- a/drivers/s390/crypto/zcrypt_error.h +++ b/drivers/s390/crypto/zcrypt_error.h | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0+ | ||
| 1 | /* | 2 | /* |
| 2 | * zcrypt 2.1.0 | 3 | * zcrypt 2.1.0 |
| 3 | * | 4 | * |
| @@ -7,20 +8,6 @@ | |||
| 7 | * | 8 | * |
| 8 | * Hotplug & misc device support: Jochen Roehrig (roehrig@de.ibm.com) | 9 | * Hotplug & misc device support: Jochen Roehrig (roehrig@de.ibm.com) |
| 9 | * Major cleanup & driver split: Martin Schwidefsky <schwidefsky@de.ibm.com> | 10 | * Major cleanup & driver split: Martin Schwidefsky <schwidefsky@de.ibm.com> |
| 10 | * | ||
| 11 | * This program is free software; you can redistribute it and/or modify | ||
| 12 | * it under the terms of the GNU General Public License as published by | ||
| 13 | * the Free Software Foundation; either version 2, or (at your option) | ||
| 14 | * any later version. | ||
| 15 | * | ||
| 16 | * This program is distributed in the hope that it will be useful, | ||
| 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 19 | * GNU General Public License for more details. | ||
| 20 | * | ||
| 21 | * You should have received a copy of the GNU General Public License | ||
| 22 | * along with this program; if not, write to the Free Software | ||
| 23 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 24 | */ | 11 | */ |
| 25 | 12 | ||
| 26 | #ifndef _ZCRYPT_ERROR_H_ | 13 | #ifndef _ZCRYPT_ERROR_H_ |
diff --git a/drivers/s390/crypto/zcrypt_msgtype50.c b/drivers/s390/crypto/zcrypt_msgtype50.c index db5bde47dfb0..afe1b2bcd7ec 100644 --- a/drivers/s390/crypto/zcrypt_msgtype50.c +++ b/drivers/s390/crypto/zcrypt_msgtype50.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0+ | ||
| 1 | /* | 2 | /* |
| 2 | * zcrypt 2.1.0 | 3 | * zcrypt 2.1.0 |
| 3 | * | 4 | * |
| @@ -9,20 +10,6 @@ | |||
| 9 | * Major cleanup & driver split: Martin Schwidefsky <schwidefsky@de.ibm.com> | 10 | * Major cleanup & driver split: Martin Schwidefsky <schwidefsky@de.ibm.com> |
| 10 | * Ralph Wuerthner <rwuerthn@de.ibm.com> | 11 | * Ralph Wuerthner <rwuerthn@de.ibm.com> |
| 11 | * MSGTYPE restruct: Holger Dengler <hd@linux.vnet.ibm.com> | 12 | * MSGTYPE restruct: Holger Dengler <hd@linux.vnet.ibm.com> |
| 12 | * | ||
| 13 | * This program is free software; you can redistribute it and/or modify | ||
| 14 | * it under the terms of the GNU General Public License as published by | ||
| 15 | * the Free Software Foundation; either version 2, or (at your option) | ||
| 16 | * any later version. | ||
| 17 | * | ||
| 18 | * This program is distributed in the hope that it will be useful, | ||
| 19 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 20 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 21 | * GNU General Public License for more details. | ||
| 22 | * | ||
| 23 | * You should have received a copy of the GNU General Public License | ||
| 24 | * along with this program; if not, write to the Free Software | ||
| 25 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 26 | */ | 13 | */ |
| 27 | 14 | ||
| 28 | #define KMSG_COMPONENT "zcrypt" | 15 | #define KMSG_COMPONENT "zcrypt" |
diff --git a/drivers/s390/crypto/zcrypt_msgtype50.h b/drivers/s390/crypto/zcrypt_msgtype50.h index 5cc280318ee7..0a36545cfb8e 100644 --- a/drivers/s390/crypto/zcrypt_msgtype50.h +++ b/drivers/s390/crypto/zcrypt_msgtype50.h | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0+ | ||
| 1 | /* | 2 | /* |
| 2 | * zcrypt 2.1.0 | 3 | * zcrypt 2.1.0 |
| 3 | * | 4 | * |
| @@ -8,20 +9,6 @@ | |||
| 8 | * Hotplug & misc device support: Jochen Roehrig (roehrig@de.ibm.com) | 9 | * Hotplug & misc device support: Jochen Roehrig (roehrig@de.ibm.com) |
| 9 | * Major cleanup & driver split: Martin Schwidefsky <schwidefsky@de.ibm.com> | 10 | * Major cleanup & driver split: Martin Schwidefsky <schwidefsky@de.ibm.com> |
| 10 | * MSGTYPE restruct: Holger Dengler <hd@linux.vnet.ibm.com> | 11 | * MSGTYPE restruct: Holger Dengler <hd@linux.vnet.ibm.com> |
| 11 | * | ||
| 12 | * This program is free software; you can redistribute it and/or modify | ||
| 13 | * it under the terms of the GNU General Public License as published by | ||
| 14 | * the Free Software Foundation; either version 2, or (at your option) | ||
| 15 | * any later version. | ||
| 16 | * | ||
| 17 | * This program is distributed in the hope that it will be useful, | ||
| 18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 20 | * GNU General Public License for more details. | ||
| 21 | * | ||
| 22 | * You should have received a copy of the GNU General Public License | ||
| 23 | * along with this program; if not, write to the Free Software | ||
| 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 25 | */ | 12 | */ |
| 26 | 13 | ||
| 27 | #ifndef _ZCRYPT_MSGTYPE50_H_ | 14 | #ifndef _ZCRYPT_MSGTYPE50_H_ |
diff --git a/drivers/s390/crypto/zcrypt_msgtype6.c b/drivers/s390/crypto/zcrypt_msgtype6.c index 785620d30504..f54bef4a928e 100644 --- a/drivers/s390/crypto/zcrypt_msgtype6.c +++ b/drivers/s390/crypto/zcrypt_msgtype6.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0+ | ||
| 1 | /* | 2 | /* |
| 2 | * zcrypt 2.1.0 | 3 | * zcrypt 2.1.0 |
| 3 | * | 4 | * |
| @@ -9,20 +10,6 @@ | |||
| 9 | * Major cleanup & driver split: Martin Schwidefsky <schwidefsky@de.ibm.com> | 10 | * Major cleanup & driver split: Martin Schwidefsky <schwidefsky@de.ibm.com> |
| 10 | * Ralph Wuerthner <rwuerthn@de.ibm.com> | 11 | * Ralph Wuerthner <rwuerthn@de.ibm.com> |
| 11 | * MSGTYPE restruct: Holger Dengler <hd@linux.vnet.ibm.com> | 12 | * MSGTYPE restruct: Holger Dengler <hd@linux.vnet.ibm.com> |
| 12 | * | ||
| 13 | * This program is free software; you can redistribute it and/or modify | ||
| 14 | * it under the terms of the GNU General Public License as published by | ||
| 15 | * the Free Software Foundation; either version 2, or (at your option) | ||
| 16 | * any later version. | ||
| 17 | * | ||
| 18 | * This program is distributed in the hope that it will be useful, | ||
| 19 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 20 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 21 | * GNU General Public License for more details. | ||
| 22 | * | ||
| 23 | * You should have received a copy of the GNU General Public License | ||
| 24 | * along with this program; if not, write to the Free Software | ||
| 25 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 26 | */ | 13 | */ |
| 27 | 14 | ||
| 28 | #define KMSG_COMPONENT "zcrypt" | 15 | #define KMSG_COMPONENT "zcrypt" |
diff --git a/drivers/s390/crypto/zcrypt_msgtype6.h b/drivers/s390/crypto/zcrypt_msgtype6.h index 7a0d5b57821f..d314f4525518 100644 --- a/drivers/s390/crypto/zcrypt_msgtype6.h +++ b/drivers/s390/crypto/zcrypt_msgtype6.h | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0+ | ||
| 1 | /* | 2 | /* |
| 2 | * zcrypt 2.1.0 | 3 | * zcrypt 2.1.0 |
| 3 | * | 4 | * |
| @@ -8,20 +9,6 @@ | |||
| 8 | * Hotplug & misc device support: Jochen Roehrig (roehrig@de.ibm.com) | 9 | * Hotplug & misc device support: Jochen Roehrig (roehrig@de.ibm.com) |
| 9 | * Major cleanup & driver split: Martin Schwidefsky <schwidefsky@de.ibm.com> | 10 | * Major cleanup & driver split: Martin Schwidefsky <schwidefsky@de.ibm.com> |
| 10 | * MSGTYPE restruct: Holger Dengler <hd@linux.vnet.ibm.com> | 11 | * MSGTYPE restruct: Holger Dengler <hd@linux.vnet.ibm.com> |
| 11 | * | ||
| 12 | * This program is free software; you can redistribute it and/or modify | ||
| 13 | * it under the terms of the GNU General Public License as published by | ||
| 14 | * the Free Software Foundation; either version 2, or (at your option) | ||
| 15 | * any later version. | ||
| 16 | * | ||
| 17 | * This program is distributed in the hope that it will be useful, | ||
| 18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 20 | * GNU General Public License for more details. | ||
| 21 | * | ||
| 22 | * You should have received a copy of the GNU General Public License | ||
| 23 | * along with this program; if not, write to the Free Software | ||
| 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 25 | */ | 12 | */ |
| 26 | 13 | ||
| 27 | #ifndef _ZCRYPT_MSGTYPE6_H_ | 14 | #ifndef _ZCRYPT_MSGTYPE6_H_ |
diff --git a/drivers/s390/crypto/zcrypt_pcixcc.c b/drivers/s390/crypto/zcrypt_pcixcc.c index 600604782b65..159b0a0dd211 100644 --- a/drivers/s390/crypto/zcrypt_pcixcc.c +++ b/drivers/s390/crypto/zcrypt_pcixcc.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0+ | ||
| 1 | /* | 2 | /* |
| 2 | * zcrypt 2.1.0 | 3 | * zcrypt 2.1.0 |
| 3 | * | 4 | * |
| @@ -9,20 +10,6 @@ | |||
| 9 | * Major cleanup & driver split: Martin Schwidefsky <schwidefsky@de.ibm.com> | 10 | * Major cleanup & driver split: Martin Schwidefsky <schwidefsky@de.ibm.com> |
| 10 | * Ralph Wuerthner <rwuerthn@de.ibm.com> | 11 | * Ralph Wuerthner <rwuerthn@de.ibm.com> |
| 11 | * MSGTYPE restruct: Holger Dengler <hd@linux.vnet.ibm.com> | 12 | * MSGTYPE restruct: Holger Dengler <hd@linux.vnet.ibm.com> |
| 12 | * | ||
| 13 | * This program is free software; you can redistribute it and/or modify | ||
| 14 | * it under the terms of the GNU General Public License as published by | ||
| 15 | * the Free Software Foundation; either version 2, or (at your option) | ||
| 16 | * any later version. | ||
| 17 | * | ||
| 18 | * This program is distributed in the hope that it will be useful, | ||
| 19 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 20 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 21 | * GNU General Public License for more details. | ||
| 22 | * | ||
| 23 | * You should have received a copy of the GNU General Public License | ||
| 24 | * along with this program; if not, write to the Free Software | ||
| 25 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 26 | */ | 13 | */ |
| 27 | 14 | ||
| 28 | #include <linux/module.h> | 15 | #include <linux/module.h> |
diff --git a/drivers/s390/crypto/zcrypt_pcixcc.h b/drivers/s390/crypto/zcrypt_pcixcc.h index eacafc8962f2..d678a3af83a7 100644 --- a/drivers/s390/crypto/zcrypt_pcixcc.h +++ b/drivers/s390/crypto/zcrypt_pcixcc.h | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0+ | ||
| 1 | /* | 2 | /* |
| 2 | * zcrypt 2.1.0 | 3 | * zcrypt 2.1.0 |
| 3 | * | 4 | * |
| @@ -8,20 +9,6 @@ | |||
| 8 | * Hotplug & misc device support: Jochen Roehrig (roehrig@de.ibm.com) | 9 | * Hotplug & misc device support: Jochen Roehrig (roehrig@de.ibm.com) |
| 9 | * Major cleanup & driver split: Martin Schwidefsky <schwidefsky@de.ibm.com> | 10 | * Major cleanup & driver split: Martin Schwidefsky <schwidefsky@de.ibm.com> |
| 10 | * MSGTYPE restruct: Holger Dengler <hd@linux.vnet.ibm.com> | 11 | * MSGTYPE restruct: Holger Dengler <hd@linux.vnet.ibm.com> |
| 11 | * | ||
| 12 | * This program is free software; you can redistribute it and/or modify | ||
| 13 | * it under the terms of the GNU General Public License as published by | ||
| 14 | * the Free Software Foundation; either version 2, or (at your option) | ||
| 15 | * any later version. | ||
| 16 | * | ||
| 17 | * This program is distributed in the hope that it will be useful, | ||
| 18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 20 | * GNU General Public License for more details. | ||
| 21 | * | ||
| 22 | * You should have received a copy of the GNU General Public License | ||
| 23 | * along with this program; if not, write to the Free Software | ||
| 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 25 | */ | 12 | */ |
| 26 | 13 | ||
| 27 | #ifndef _ZCRYPT_PCIXCC_H_ | 14 | #ifndef _ZCRYPT_PCIXCC_H_ |
diff --git a/drivers/s390/crypto/zcrypt_queue.c b/drivers/s390/crypto/zcrypt_queue.c index 4742be0eec24..720434e18007 100644 --- a/drivers/s390/crypto/zcrypt_queue.c +++ b/drivers/s390/crypto/zcrypt_queue.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0+ | ||
| 1 | /* | 2 | /* |
| 2 | * zcrypt 2.1.0 | 3 | * zcrypt 2.1.0 |
| 3 | * | 4 | * |
| @@ -10,16 +11,6 @@ | |||
| 10 | * Major cleanup & driver split: Martin Schwidefsky <schwidefsky@de.ibm.com> | 11 | * Major cleanup & driver split: Martin Schwidefsky <schwidefsky@de.ibm.com> |
| 11 | * Ralph Wuerthner <rwuerthn@de.ibm.com> | 12 | * Ralph Wuerthner <rwuerthn@de.ibm.com> |
| 12 | * MSGTYPE restruct: Holger Dengler <hd@linux.vnet.ibm.com> | 13 | * MSGTYPE restruct: Holger Dengler <hd@linux.vnet.ibm.com> |
| 13 | * | ||
| 14 | * This program is free software; you can redistribute it and/or modify | ||
| 15 | * it under the terms of the GNU General Public License as published by | ||
| 16 | * the Free Software Foundation; either version 2, or (at your option) | ||
| 17 | * any later version. | ||
| 18 | * | ||
| 19 | * This program is distributed in the hope that it will be useful, | ||
| 20 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 21 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 22 | * GNU General Public License for more details. | ||
| 23 | */ | 14 | */ |
| 24 | 15 | ||
| 25 | #include <linux/module.h> | 16 | #include <linux/module.h> |
diff --git a/drivers/s390/net/Kconfig b/drivers/s390/net/Kconfig index b2837b1c70b7..a782a207ad31 100644 --- a/drivers/s390/net/Kconfig +++ b/drivers/s390/net/Kconfig | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | # SPDX-License-Identifier: GPL-2.0 | ||
| 1 | menu "S/390 network device drivers" | 2 | menu "S/390 network device drivers" |
| 2 | depends on NETDEVICES && S390 | 3 | depends on NETDEVICES && S390 |
| 3 | 4 | ||
diff --git a/drivers/s390/net/ctcm_main.c b/drivers/s390/net/ctcm_main.c index be9f17218531..7ce98b70cad3 100644 --- a/drivers/s390/net/ctcm_main.c +++ b/drivers/s390/net/ctcm_main.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * Copyright IBM Corp. 2001, 2009 | 3 | * Copyright IBM Corp. 2001, 2009 |
| 3 | * Author(s): | 4 | * Author(s): |
diff --git a/drivers/s390/net/fsm.c b/drivers/s390/net/fsm.c index c81adf8042d7..eb07862bd36a 100644 --- a/drivers/s390/net/fsm.c +++ b/drivers/s390/net/fsm.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /** | 2 | /** |
| 2 | * A generic FSM based on fsm used in isdn4linux | 3 | * A generic FSM based on fsm used in isdn4linux |
| 3 | * | 4 | * |
diff --git a/drivers/s390/net/lcs.c b/drivers/s390/net/lcs.c index e131a03262ad..92ae84a927fc 100644 --- a/drivers/s390/net/lcs.c +++ b/drivers/s390/net/lcs.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0+ | ||
| 1 | /* | 2 | /* |
| 2 | * Linux for S/390 Lan Channel Station Network Driver | 3 | * Linux for S/390 Lan Channel Station Network Driver |
| 3 | * | 4 | * |
| @@ -7,20 +8,6 @@ | |||
| 7 | * Rewritten by | 8 | * Rewritten by |
| 8 | * Frank Pavlic <fpavlic@de.ibm.com> and | 9 | * Frank Pavlic <fpavlic@de.ibm.com> and |
| 9 | * Martin Schwidefsky <schwidefsky@de.ibm.com> | 10 | * Martin Schwidefsky <schwidefsky@de.ibm.com> |
| 10 | * | ||
| 11 | * This program is free software; you can redistribute it and/or modify | ||
| 12 | * it under the terms of the GNU General Public License as published by | ||
| 13 | * the Free Software Foundation; either version 2, or (at your option) | ||
| 14 | * any later version. | ||
| 15 | * | ||
| 16 | * This program is distributed in the hope that it will be useful, | ||
| 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 19 | * GNU General Public License for more details. | ||
| 20 | * | ||
| 21 | * You should have received a copy of the GNU General Public License | ||
| 22 | * along with this program; if not, write to the Free Software | ||
| 23 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 24 | */ | 11 | */ |
| 25 | 12 | ||
| 26 | #define KMSG_COMPONENT "lcs" | 13 | #define KMSG_COMPONENT "lcs" |
diff --git a/drivers/s390/net/netiucv.c b/drivers/s390/net/netiucv.c index b9c7c1e61da2..5ce2424ca729 100644 --- a/drivers/s390/net/netiucv.c +++ b/drivers/s390/net/netiucv.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0+ | ||
| 1 | /* | 2 | /* |
| 2 | * IUCV network driver | 3 | * IUCV network driver |
| 3 | * | 4 | * |
| @@ -18,21 +19,6 @@ | |||
| 18 | * Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com) | 19 | * Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com) |
| 19 | * Martin Schwidefsky (schwidefsky@de.ibm.com) | 20 | * Martin Schwidefsky (schwidefsky@de.ibm.com) |
| 20 | * Alan Altmark (Alan_Altmark@us.ibm.com) Sept. 2000 | 21 | * Alan Altmark (Alan_Altmark@us.ibm.com) Sept. 2000 |
| 21 | * | ||
| 22 | * This program is free software; you can redistribute it and/or modify | ||
| 23 | * it under the terms of the GNU General Public License as published by | ||
| 24 | * the Free Software Foundation; either version 2, or (at your option) | ||
| 25 | * any later version. | ||
| 26 | * | ||
| 27 | * This program is distributed in the hope that it will be useful, | ||
| 28 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 29 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 30 | * GNU General Public License for more details. | ||
| 31 | * | ||
| 32 | * You should have received a copy of the GNU General Public License | ||
| 33 | * along with this program; if not, write to the Free Software | ||
| 34 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 35 | * | ||
| 36 | */ | 22 | */ |
| 37 | 23 | ||
| 38 | #define KMSG_COMPONENT "netiucv" | 24 | #define KMSG_COMPONENT "netiucv" |
diff --git a/drivers/s390/net/qeth_core.h b/drivers/s390/net/qeth_core.h index 9cd569ef43ec..badf42acbf95 100644 --- a/drivers/s390/net/qeth_core.h +++ b/drivers/s390/net/qeth_core.h | |||
| @@ -565,9 +565,9 @@ enum qeth_cq { | |||
| 565 | }; | 565 | }; |
| 566 | 566 | ||
| 567 | struct qeth_ipato { | 567 | struct qeth_ipato { |
| 568 | int enabled; | 568 | bool enabled; |
| 569 | int invert4; | 569 | bool invert4; |
| 570 | int invert6; | 570 | bool invert6; |
| 571 | struct list_head entries; | 571 | struct list_head entries; |
| 572 | }; | 572 | }; |
| 573 | 573 | ||
| @@ -987,6 +987,9 @@ struct qeth_cmd_buffer *qeth_get_setassparms_cmd(struct qeth_card *, | |||
| 987 | int qeth_set_features(struct net_device *, netdev_features_t); | 987 | int qeth_set_features(struct net_device *, netdev_features_t); |
| 988 | void qeth_recover_features(struct net_device *dev); | 988 | void qeth_recover_features(struct net_device *dev); |
| 989 | netdev_features_t qeth_fix_features(struct net_device *, netdev_features_t); | 989 | netdev_features_t qeth_fix_features(struct net_device *, netdev_features_t); |
| 990 | netdev_features_t qeth_features_check(struct sk_buff *skb, | ||
| 991 | struct net_device *dev, | ||
| 992 | netdev_features_t features); | ||
| 990 | int qeth_vm_request_mac(struct qeth_card *card); | 993 | int qeth_vm_request_mac(struct qeth_card *card); |
| 991 | int qeth_push_hdr(struct sk_buff *skb, struct qeth_hdr **hdr, unsigned int len); | 994 | int qeth_push_hdr(struct sk_buff *skb, struct qeth_hdr **hdr, unsigned int len); |
| 992 | 995 | ||
diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c index 49b9efeba1bd..6c815207f4f5 100644 --- a/drivers/s390/net/qeth_core_main.c +++ b/drivers/s390/net/qeth_core_main.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * Copyright IBM Corp. 2007, 2009 | 3 | * Copyright IBM Corp. 2007, 2009 |
| 3 | * Author(s): Utz Bacher <utz.bacher@de.ibm.com>, | 4 | * Author(s): Utz Bacher <utz.bacher@de.ibm.com>, |
| @@ -19,6 +20,11 @@ | |||
| 19 | #include <linux/mii.h> | 20 | #include <linux/mii.h> |
| 20 | #include <linux/kthread.h> | 21 | #include <linux/kthread.h> |
| 21 | #include <linux/slab.h> | 22 | #include <linux/slab.h> |
| 23 | #include <linux/if_vlan.h> | ||
| 24 | #include <linux/netdevice.h> | ||
| 25 | #include <linux/netdev_features.h> | ||
| 26 | #include <linux/skbuff.h> | ||
| 27 | |||
| 22 | #include <net/iucv/af_iucv.h> | 28 | #include <net/iucv/af_iucv.h> |
| 23 | #include <net/dsfield.h> | 29 | #include <net/dsfield.h> |
| 24 | 30 | ||
| @@ -1474,9 +1480,9 @@ static int qeth_setup_card(struct qeth_card *card) | |||
| 1474 | qeth_set_intial_options(card); | 1480 | qeth_set_intial_options(card); |
| 1475 | /* IP address takeover */ | 1481 | /* IP address takeover */ |
| 1476 | INIT_LIST_HEAD(&card->ipato.entries); | 1482 | INIT_LIST_HEAD(&card->ipato.entries); |
| 1477 | card->ipato.enabled = 0; | 1483 | card->ipato.enabled = false; |
| 1478 | card->ipato.invert4 = 0; | 1484 | card->ipato.invert4 = false; |
| 1479 | card->ipato.invert6 = 0; | 1485 | card->ipato.invert6 = false; |
| 1480 | /* init QDIO stuff */ | 1486 | /* init QDIO stuff */ |
| 1481 | qeth_init_qdio_info(card); | 1487 | qeth_init_qdio_info(card); |
| 1482 | INIT_DELAYED_WORK(&card->buffer_reclaim_work, qeth_buffer_reclaim_work); | 1488 | INIT_DELAYED_WORK(&card->buffer_reclaim_work, qeth_buffer_reclaim_work); |
| @@ -6438,6 +6444,32 @@ netdev_features_t qeth_fix_features(struct net_device *dev, | |||
| 6438 | } | 6444 | } |
| 6439 | EXPORT_SYMBOL_GPL(qeth_fix_features); | 6445 | EXPORT_SYMBOL_GPL(qeth_fix_features); |
| 6440 | 6446 | ||
| 6447 | netdev_features_t qeth_features_check(struct sk_buff *skb, | ||
| 6448 | struct net_device *dev, | ||
| 6449 | netdev_features_t features) | ||
| 6450 | { | ||
| 6451 | /* GSO segmentation builds skbs with | ||
| 6452 | * a (small) linear part for the headers, and | ||
| 6453 | * page frags for the data. | ||
| 6454 | * Compared to a linear skb, the header-only part consumes an | ||
| 6455 | * additional buffer element. This reduces buffer utilization, and | ||
| 6456 | * hurts throughput. So compress small segments into one element. | ||
| 6457 | */ | ||
| 6458 | if (netif_needs_gso(skb, features)) { | ||
| 6459 | /* match skb_segment(): */ | ||
| 6460 | unsigned int doffset = skb->data - skb_mac_header(skb); | ||
| 6461 | unsigned int hsize = skb_shinfo(skb)->gso_size; | ||
| 6462 | unsigned int hroom = skb_headroom(skb); | ||
| 6463 | |||
| 6464 | /* linearize only if resulting skb allocations are order-0: */ | ||
| 6465 | if (SKB_DATA_ALIGN(hroom + doffset + hsize) <= SKB_MAX_HEAD(0)) | ||
| 6466 | features &= ~NETIF_F_SG; | ||
| 6467 | } | ||
| 6468 | |||
| 6469 | return vlan_features_check(skb, features); | ||
| 6470 | } | ||
| 6471 | EXPORT_SYMBOL_GPL(qeth_features_check); | ||
| 6472 | |||
| 6441 | static int __init qeth_core_init(void) | 6473 | static int __init qeth_core_init(void) |
| 6442 | { | 6474 | { |
| 6443 | int rc; | 6475 | int rc; |
diff --git a/drivers/s390/net/qeth_core_sys.c b/drivers/s390/net/qeth_core_sys.c index b22ed2a57acd..ae81534de912 100644 --- a/drivers/s390/net/qeth_core_sys.c +++ b/drivers/s390/net/qeth_core_sys.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * Copyright IBM Corp. 2007 | 3 | * Copyright IBM Corp. 2007 |
| 3 | * Author(s): Utz Bacher <utz.bacher@de.ibm.com>, | 4 | * Author(s): Utz Bacher <utz.bacher@de.ibm.com>, |
diff --git a/drivers/s390/net/qeth_l2_main.c b/drivers/s390/net/qeth_l2_main.c index d2537c09126d..5863ea170ff2 100644 --- a/drivers/s390/net/qeth_l2_main.c +++ b/drivers/s390/net/qeth_l2_main.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * Copyright IBM Corp. 2007, 2009 | 3 | * Copyright IBM Corp. 2007, 2009 |
| 3 | * Author(s): Utz Bacher <utz.bacher@de.ibm.com>, | 4 | * Author(s): Utz Bacher <utz.bacher@de.ibm.com>, |
| @@ -960,6 +961,7 @@ static const struct net_device_ops qeth_l2_netdev_ops = { | |||
| 960 | .ndo_stop = qeth_l2_stop, | 961 | .ndo_stop = qeth_l2_stop, |
| 961 | .ndo_get_stats = qeth_get_stats, | 962 | .ndo_get_stats = qeth_get_stats, |
| 962 | .ndo_start_xmit = qeth_l2_hard_start_xmit, | 963 | .ndo_start_xmit = qeth_l2_hard_start_xmit, |
| 964 | .ndo_features_check = qeth_features_check, | ||
| 963 | .ndo_validate_addr = eth_validate_addr, | 965 | .ndo_validate_addr = eth_validate_addr, |
| 964 | .ndo_set_rx_mode = qeth_l2_set_rx_mode, | 966 | .ndo_set_rx_mode = qeth_l2_set_rx_mode, |
| 965 | .ndo_do_ioctl = qeth_do_ioctl, | 967 | .ndo_do_ioctl = qeth_do_ioctl, |
| @@ -1010,6 +1012,7 @@ static int qeth_l2_setup_netdev(struct qeth_card *card) | |||
| 1010 | if (card->info.type == QETH_CARD_TYPE_OSD && !card->info.guestlan) { | 1012 | if (card->info.type == QETH_CARD_TYPE_OSD && !card->info.guestlan) { |
| 1011 | card->dev->hw_features = NETIF_F_SG; | 1013 | card->dev->hw_features = NETIF_F_SG; |
| 1012 | card->dev->vlan_features = NETIF_F_SG; | 1014 | card->dev->vlan_features = NETIF_F_SG; |
| 1015 | card->dev->features |= NETIF_F_SG; | ||
| 1013 | /* OSA 3S and earlier has no RX/TX support */ | 1016 | /* OSA 3S and earlier has no RX/TX support */ |
| 1014 | if (qeth_is_supported(card, IPA_OUTBOUND_CHECKSUM)) { | 1017 | if (qeth_is_supported(card, IPA_OUTBOUND_CHECKSUM)) { |
| 1015 | card->dev->hw_features |= NETIF_F_IP_CSUM; | 1018 | card->dev->hw_features |= NETIF_F_IP_CSUM; |
| @@ -1028,8 +1031,6 @@ static int qeth_l2_setup_netdev(struct qeth_card *card) | |||
| 1028 | 1031 | ||
| 1029 | card->info.broadcast_capable = 1; | 1032 | card->info.broadcast_capable = 1; |
| 1030 | qeth_l2_request_initial_mac(card); | 1033 | qeth_l2_request_initial_mac(card); |
| 1031 | card->dev->gso_max_size = (QETH_MAX_BUFFER_ELEMENTS(card) - 1) * | ||
| 1032 | PAGE_SIZE; | ||
| 1033 | SET_NETDEV_DEV(card->dev, &card->gdev->dev); | 1034 | SET_NETDEV_DEV(card->dev, &card->gdev->dev); |
| 1034 | netif_napi_add(card->dev, &card->napi, qeth_poll, QETH_NAPI_WEIGHT); | 1035 | netif_napi_add(card->dev, &card->napi, qeth_poll, QETH_NAPI_WEIGHT); |
| 1035 | netif_carrier_off(card->dev); | 1036 | netif_carrier_off(card->dev); |
diff --git a/drivers/s390/net/qeth_l3.h b/drivers/s390/net/qeth_l3.h index 194ae9b577cc..e5833837b799 100644 --- a/drivers/s390/net/qeth_l3.h +++ b/drivers/s390/net/qeth_l3.h | |||
| @@ -82,7 +82,7 @@ void qeth_l3_del_vipa(struct qeth_card *, enum qeth_prot_versions, const u8 *); | |||
| 82 | int qeth_l3_add_rxip(struct qeth_card *, enum qeth_prot_versions, const u8 *); | 82 | int qeth_l3_add_rxip(struct qeth_card *, enum qeth_prot_versions, const u8 *); |
| 83 | void qeth_l3_del_rxip(struct qeth_card *card, enum qeth_prot_versions, | 83 | void qeth_l3_del_rxip(struct qeth_card *card, enum qeth_prot_versions, |
| 84 | const u8 *); | 84 | const u8 *); |
| 85 | int qeth_l3_is_addr_covered_by_ipato(struct qeth_card *, struct qeth_ipaddr *); | 85 | void qeth_l3_update_ipato(struct qeth_card *card); |
| 86 | struct qeth_ipaddr *qeth_l3_get_addr_buffer(enum qeth_prot_versions); | 86 | struct qeth_ipaddr *qeth_l3_get_addr_buffer(enum qeth_prot_versions); |
| 87 | int qeth_l3_add_ip(struct qeth_card *, struct qeth_ipaddr *); | 87 | int qeth_l3_add_ip(struct qeth_card *, struct qeth_ipaddr *); |
| 88 | int qeth_l3_delete_ip(struct qeth_card *, struct qeth_ipaddr *); | 88 | int qeth_l3_delete_ip(struct qeth_card *, struct qeth_ipaddr *); |
diff --git a/drivers/s390/net/qeth_l3_main.c b/drivers/s390/net/qeth_l3_main.c index aadd384316a3..ef0961e18686 100644 --- a/drivers/s390/net/qeth_l3_main.c +++ b/drivers/s390/net/qeth_l3_main.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * Copyright IBM Corp. 2007, 2009 | 3 | * Copyright IBM Corp. 2007, 2009 |
| 3 | * Author(s): Utz Bacher <utz.bacher@de.ibm.com>, | 4 | * Author(s): Utz Bacher <utz.bacher@de.ibm.com>, |
| @@ -163,8 +164,8 @@ static void qeth_l3_convert_addr_to_bits(u8 *addr, u8 *bits, int len) | |||
| 163 | } | 164 | } |
| 164 | } | 165 | } |
| 165 | 166 | ||
| 166 | int qeth_l3_is_addr_covered_by_ipato(struct qeth_card *card, | 167 | static bool qeth_l3_is_addr_covered_by_ipato(struct qeth_card *card, |
| 167 | struct qeth_ipaddr *addr) | 168 | struct qeth_ipaddr *addr) |
| 168 | { | 169 | { |
| 169 | struct qeth_ipato_entry *ipatoe; | 170 | struct qeth_ipato_entry *ipatoe; |
| 170 | u8 addr_bits[128] = {0, }; | 171 | u8 addr_bits[128] = {0, }; |
| @@ -173,6 +174,8 @@ int qeth_l3_is_addr_covered_by_ipato(struct qeth_card *card, | |||
| 173 | 174 | ||
| 174 | if (!card->ipato.enabled) | 175 | if (!card->ipato.enabled) |
| 175 | return 0; | 176 | return 0; |
| 177 | if (addr->type != QETH_IP_TYPE_NORMAL) | ||
| 178 | return 0; | ||
| 176 | 179 | ||
| 177 | qeth_l3_convert_addr_to_bits((u8 *) &addr->u, addr_bits, | 180 | qeth_l3_convert_addr_to_bits((u8 *) &addr->u, addr_bits, |
| 178 | (addr->proto == QETH_PROT_IPV4)? 4:16); | 181 | (addr->proto == QETH_PROT_IPV4)? 4:16); |
| @@ -289,8 +292,7 @@ int qeth_l3_add_ip(struct qeth_card *card, struct qeth_ipaddr *tmp_addr) | |||
| 289 | memcpy(addr, tmp_addr, sizeof(struct qeth_ipaddr)); | 292 | memcpy(addr, tmp_addr, sizeof(struct qeth_ipaddr)); |
| 290 | addr->ref_counter = 1; | 293 | addr->ref_counter = 1; |
| 291 | 294 | ||
| 292 | if (addr->type == QETH_IP_TYPE_NORMAL && | 295 | if (qeth_l3_is_addr_covered_by_ipato(card, addr)) { |
| 293 | qeth_l3_is_addr_covered_by_ipato(card, addr)) { | ||
| 294 | QETH_CARD_TEXT(card, 2, "tkovaddr"); | 296 | QETH_CARD_TEXT(card, 2, "tkovaddr"); |
| 295 | addr->set_flags |= QETH_IPA_SETIP_TAKEOVER_FLAG; | 297 | addr->set_flags |= QETH_IPA_SETIP_TAKEOVER_FLAG; |
| 296 | } | 298 | } |
| @@ -604,6 +606,27 @@ int qeth_l3_setrouting_v6(struct qeth_card *card) | |||
| 604 | /* | 606 | /* |
| 605 | * IP address takeover related functions | 607 | * IP address takeover related functions |
| 606 | */ | 608 | */ |
| 609 | |||
| 610 | /** | ||
| 611 | * qeth_l3_update_ipato() - Update 'takeover' property, for all NORMAL IPs. | ||
| 612 | * | ||
| 613 | * Caller must hold ip_lock. | ||
| 614 | */ | ||
| 615 | void qeth_l3_update_ipato(struct qeth_card *card) | ||
| 616 | { | ||
| 617 | struct qeth_ipaddr *addr; | ||
| 618 | unsigned int i; | ||
| 619 | |||
| 620 | hash_for_each(card->ip_htable, i, addr, hnode) { | ||
| 621 | if (addr->type != QETH_IP_TYPE_NORMAL) | ||
| 622 | continue; | ||
| 623 | if (qeth_l3_is_addr_covered_by_ipato(card, addr)) | ||
| 624 | addr->set_flags |= QETH_IPA_SETIP_TAKEOVER_FLAG; | ||
| 625 | else | ||
| 626 | addr->set_flags &= ~QETH_IPA_SETIP_TAKEOVER_FLAG; | ||
| 627 | } | ||
| 628 | } | ||
| 629 | |||
| 607 | static void qeth_l3_clear_ipato_list(struct qeth_card *card) | 630 | static void qeth_l3_clear_ipato_list(struct qeth_card *card) |
| 608 | { | 631 | { |
| 609 | struct qeth_ipato_entry *ipatoe, *tmp; | 632 | struct qeth_ipato_entry *ipatoe, *tmp; |
| @@ -615,6 +638,7 @@ static void qeth_l3_clear_ipato_list(struct qeth_card *card) | |||
| 615 | kfree(ipatoe); | 638 | kfree(ipatoe); |
| 616 | } | 639 | } |
| 617 | 640 | ||
| 641 | qeth_l3_update_ipato(card); | ||
| 618 | spin_unlock_bh(&card->ip_lock); | 642 | spin_unlock_bh(&card->ip_lock); |
| 619 | } | 643 | } |
| 620 | 644 | ||
| @@ -639,8 +663,10 @@ int qeth_l3_add_ipato_entry(struct qeth_card *card, | |||
| 639 | } | 663 | } |
| 640 | } | 664 | } |
| 641 | 665 | ||
| 642 | if (!rc) | 666 | if (!rc) { |
| 643 | list_add_tail(&new->entry, &card->ipato.entries); | 667 | list_add_tail(&new->entry, &card->ipato.entries); |
| 668 | qeth_l3_update_ipato(card); | ||
| 669 | } | ||
| 644 | 670 | ||
| 645 | spin_unlock_bh(&card->ip_lock); | 671 | spin_unlock_bh(&card->ip_lock); |
| 646 | 672 | ||
| @@ -663,6 +689,7 @@ void qeth_l3_del_ipato_entry(struct qeth_card *card, | |||
| 663 | (proto == QETH_PROT_IPV4)? 4:16) && | 689 | (proto == QETH_PROT_IPV4)? 4:16) && |
| 664 | (ipatoe->mask_bits == mask_bits)) { | 690 | (ipatoe->mask_bits == mask_bits)) { |
| 665 | list_del(&ipatoe->entry); | 691 | list_del(&ipatoe->entry); |
| 692 | qeth_l3_update_ipato(card); | ||
| 666 | kfree(ipatoe); | 693 | kfree(ipatoe); |
| 667 | } | 694 | } |
| 668 | } | 695 | } |
| @@ -1376,6 +1403,7 @@ qeth_l3_add_mc_to_hash(struct qeth_card *card, struct in_device *in4_dev) | |||
| 1376 | 1403 | ||
| 1377 | tmp->u.a4.addr = be32_to_cpu(im4->multiaddr); | 1404 | tmp->u.a4.addr = be32_to_cpu(im4->multiaddr); |
| 1378 | memcpy(tmp->mac, buf, sizeof(tmp->mac)); | 1405 | memcpy(tmp->mac, buf, sizeof(tmp->mac)); |
| 1406 | tmp->is_multicast = 1; | ||
| 1379 | 1407 | ||
| 1380 | ipm = qeth_l3_ip_from_hash(card, tmp); | 1408 | ipm = qeth_l3_ip_from_hash(card, tmp); |
| 1381 | if (ipm) { | 1409 | if (ipm) { |
| @@ -2917,6 +2945,7 @@ static const struct net_device_ops qeth_l3_osa_netdev_ops = { | |||
| 2917 | .ndo_stop = qeth_l3_stop, | 2945 | .ndo_stop = qeth_l3_stop, |
| 2918 | .ndo_get_stats = qeth_get_stats, | 2946 | .ndo_get_stats = qeth_get_stats, |
| 2919 | .ndo_start_xmit = qeth_l3_hard_start_xmit, | 2947 | .ndo_start_xmit = qeth_l3_hard_start_xmit, |
| 2948 | .ndo_features_check = qeth_features_check, | ||
| 2920 | .ndo_validate_addr = eth_validate_addr, | 2949 | .ndo_validate_addr = eth_validate_addr, |
| 2921 | .ndo_set_rx_mode = qeth_l3_set_multicast_list, | 2950 | .ndo_set_rx_mode = qeth_l3_set_multicast_list, |
| 2922 | .ndo_do_ioctl = qeth_do_ioctl, | 2951 | .ndo_do_ioctl = qeth_do_ioctl, |
| @@ -2957,6 +2986,7 @@ static int qeth_l3_setup_netdev(struct qeth_card *card) | |||
| 2957 | card->dev->vlan_features = NETIF_F_SG | | 2986 | card->dev->vlan_features = NETIF_F_SG | |
| 2958 | NETIF_F_RXCSUM | NETIF_F_IP_CSUM | | 2987 | NETIF_F_RXCSUM | NETIF_F_IP_CSUM | |
| 2959 | NETIF_F_TSO; | 2988 | NETIF_F_TSO; |
| 2989 | card->dev->features |= NETIF_F_SG; | ||
| 2960 | } | 2990 | } |
| 2961 | } | 2991 | } |
| 2962 | } else if (card->info.type == QETH_CARD_TYPE_IQD) { | 2992 | } else if (card->info.type == QETH_CARD_TYPE_IQD) { |
| @@ -2984,8 +3014,8 @@ static int qeth_l3_setup_netdev(struct qeth_card *card) | |||
| 2984 | NETIF_F_HW_VLAN_CTAG_RX | | 3014 | NETIF_F_HW_VLAN_CTAG_RX | |
| 2985 | NETIF_F_HW_VLAN_CTAG_FILTER; | 3015 | NETIF_F_HW_VLAN_CTAG_FILTER; |
| 2986 | netif_keep_dst(card->dev); | 3016 | netif_keep_dst(card->dev); |
| 2987 | card->dev->gso_max_size = (QETH_MAX_BUFFER_ELEMENTS(card) - 1) * | 3017 | netif_set_gso_max_size(card->dev, (QETH_MAX_BUFFER_ELEMENTS(card) - 1) * |
| 2988 | PAGE_SIZE; | 3018 | PAGE_SIZE); |
| 2989 | 3019 | ||
| 2990 | SET_NETDEV_DEV(card->dev, &card->gdev->dev); | 3020 | SET_NETDEV_DEV(card->dev, &card->gdev->dev); |
| 2991 | netif_napi_add(card->dev, &card->napi, qeth_poll, QETH_NAPI_WEIGHT); | 3021 | netif_napi_add(card->dev, &card->napi, qeth_poll, QETH_NAPI_WEIGHT); |
diff --git a/drivers/s390/net/qeth_l3_sys.c b/drivers/s390/net/qeth_l3_sys.c index bd12fdf678be..6ea2b528a64e 100644 --- a/drivers/s390/net/qeth_l3_sys.c +++ b/drivers/s390/net/qeth_l3_sys.c | |||
| @@ -370,8 +370,8 @@ static ssize_t qeth_l3_dev_ipato_enable_store(struct device *dev, | |||
| 370 | struct device_attribute *attr, const char *buf, size_t count) | 370 | struct device_attribute *attr, const char *buf, size_t count) |
| 371 | { | 371 | { |
| 372 | struct qeth_card *card = dev_get_drvdata(dev); | 372 | struct qeth_card *card = dev_get_drvdata(dev); |
| 373 | struct qeth_ipaddr *addr; | 373 | bool enable; |
| 374 | int i, rc = 0; | 374 | int rc = 0; |
| 375 | 375 | ||
| 376 | if (!card) | 376 | if (!card) |
| 377 | return -EINVAL; | 377 | return -EINVAL; |
| @@ -384,25 +384,18 @@ static ssize_t qeth_l3_dev_ipato_enable_store(struct device *dev, | |||
| 384 | } | 384 | } |
| 385 | 385 | ||
| 386 | if (sysfs_streq(buf, "toggle")) { | 386 | if (sysfs_streq(buf, "toggle")) { |
| 387 | card->ipato.enabled = (card->ipato.enabled)? 0 : 1; | 387 | enable = !card->ipato.enabled; |
| 388 | } else if (sysfs_streq(buf, "1")) { | 388 | } else if (kstrtobool(buf, &enable)) { |
| 389 | card->ipato.enabled = 1; | ||
| 390 | hash_for_each(card->ip_htable, i, addr, hnode) { | ||
| 391 | if ((addr->type == QETH_IP_TYPE_NORMAL) && | ||
| 392 | qeth_l3_is_addr_covered_by_ipato(card, addr)) | ||
| 393 | addr->set_flags |= | ||
| 394 | QETH_IPA_SETIP_TAKEOVER_FLAG; | ||
| 395 | } | ||
| 396 | } else if (sysfs_streq(buf, "0")) { | ||
| 397 | card->ipato.enabled = 0; | ||
| 398 | hash_for_each(card->ip_htable, i, addr, hnode) { | ||
| 399 | if (addr->set_flags & | ||
| 400 | QETH_IPA_SETIP_TAKEOVER_FLAG) | ||
| 401 | addr->set_flags &= | ||
| 402 | ~QETH_IPA_SETIP_TAKEOVER_FLAG; | ||
| 403 | } | ||
| 404 | } else | ||
| 405 | rc = -EINVAL; | 389 | rc = -EINVAL; |
| 390 | goto out; | ||
| 391 | } | ||
| 392 | |||
| 393 | if (card->ipato.enabled != enable) { | ||
| 394 | card->ipato.enabled = enable; | ||
| 395 | spin_lock_bh(&card->ip_lock); | ||
| 396 | qeth_l3_update_ipato(card); | ||
| 397 | spin_unlock_bh(&card->ip_lock); | ||
| 398 | } | ||
| 406 | out: | 399 | out: |
| 407 | mutex_unlock(&card->conf_mutex); | 400 | mutex_unlock(&card->conf_mutex); |
| 408 | return rc ? rc : count; | 401 | return rc ? rc : count; |
| @@ -428,20 +421,27 @@ static ssize_t qeth_l3_dev_ipato_invert4_store(struct device *dev, | |||
| 428 | const char *buf, size_t count) | 421 | const char *buf, size_t count) |
| 429 | { | 422 | { |
| 430 | struct qeth_card *card = dev_get_drvdata(dev); | 423 | struct qeth_card *card = dev_get_drvdata(dev); |
| 424 | bool invert; | ||
| 431 | int rc = 0; | 425 | int rc = 0; |
| 432 | 426 | ||
| 433 | if (!card) | 427 | if (!card) |
| 434 | return -EINVAL; | 428 | return -EINVAL; |
| 435 | 429 | ||
| 436 | mutex_lock(&card->conf_mutex); | 430 | mutex_lock(&card->conf_mutex); |
| 437 | if (sysfs_streq(buf, "toggle")) | 431 | if (sysfs_streq(buf, "toggle")) { |
| 438 | card->ipato.invert4 = (card->ipato.invert4)? 0 : 1; | 432 | invert = !card->ipato.invert4; |
| 439 | else if (sysfs_streq(buf, "1")) | 433 | } else if (kstrtobool(buf, &invert)) { |
| 440 | card->ipato.invert4 = 1; | ||
| 441 | else if (sysfs_streq(buf, "0")) | ||
| 442 | card->ipato.invert4 = 0; | ||
| 443 | else | ||
| 444 | rc = -EINVAL; | 434 | rc = -EINVAL; |
| 435 | goto out; | ||
| 436 | } | ||
| 437 | |||
| 438 | if (card->ipato.invert4 != invert) { | ||
| 439 | card->ipato.invert4 = invert; | ||
| 440 | spin_lock_bh(&card->ip_lock); | ||
| 441 | qeth_l3_update_ipato(card); | ||
| 442 | spin_unlock_bh(&card->ip_lock); | ||
| 443 | } | ||
| 444 | out: | ||
| 445 | mutex_unlock(&card->conf_mutex); | 445 | mutex_unlock(&card->conf_mutex); |
| 446 | return rc ? rc : count; | 446 | return rc ? rc : count; |
| 447 | } | 447 | } |
| @@ -607,20 +607,27 @@ static ssize_t qeth_l3_dev_ipato_invert6_store(struct device *dev, | |||
| 607 | struct device_attribute *attr, const char *buf, size_t count) | 607 | struct device_attribute *attr, const char *buf, size_t count) |
| 608 | { | 608 | { |
| 609 | struct qeth_card *card = dev_get_drvdata(dev); | 609 | struct qeth_card *card = dev_get_drvdata(dev); |
| 610 | bool invert; | ||
| 610 | int rc = 0; | 611 | int rc = 0; |
| 611 | 612 | ||
| 612 | if (!card) | 613 | if (!card) |
| 613 | return -EINVAL; | 614 | return -EINVAL; |
| 614 | 615 | ||
| 615 | mutex_lock(&card->conf_mutex); | 616 | mutex_lock(&card->conf_mutex); |
| 616 | if (sysfs_streq(buf, "toggle")) | 617 | if (sysfs_streq(buf, "toggle")) { |
| 617 | card->ipato.invert6 = (card->ipato.invert6)? 0 : 1; | 618 | invert = !card->ipato.invert6; |
| 618 | else if (sysfs_streq(buf, "1")) | 619 | } else if (kstrtobool(buf, &invert)) { |
| 619 | card->ipato.invert6 = 1; | ||
| 620 | else if (sysfs_streq(buf, "0")) | ||
| 621 | card->ipato.invert6 = 0; | ||
| 622 | else | ||
| 623 | rc = -EINVAL; | 620 | rc = -EINVAL; |
| 621 | goto out; | ||
| 622 | } | ||
| 623 | |||
| 624 | if (card->ipato.invert6 != invert) { | ||
| 625 | card->ipato.invert6 = invert; | ||
| 626 | spin_lock_bh(&card->ip_lock); | ||
| 627 | qeth_l3_update_ipato(card); | ||
| 628 | spin_unlock_bh(&card->ip_lock); | ||
| 629 | } | ||
| 630 | out: | ||
| 624 | mutex_unlock(&card->conf_mutex); | 631 | mutex_unlock(&card->conf_mutex); |
| 625 | return rc ? rc : count; | 632 | return rc ? rc : count; |
| 626 | } | 633 | } |
diff --git a/drivers/s390/net/smsgiucv.c b/drivers/s390/net/smsgiucv.c index a851d34c642b..3b0c8b8a7634 100644 --- a/drivers/s390/net/smsgiucv.c +++ b/drivers/s390/net/smsgiucv.c | |||
| @@ -1,23 +1,10 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0+ | ||
| 1 | /* | 2 | /* |
| 2 | * IUCV special message driver | 3 | * IUCV special message driver |
| 3 | * | 4 | * |
| 4 | * Copyright IBM Corp. 2003, 2009 | 5 | * Copyright IBM Corp. 2003, 2009 |
| 5 | * | 6 | * |
| 6 | * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com) | 7 | * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com) |
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify | ||
| 9 | * it under the terms of the GNU General Public License as published by | ||
| 10 | * the Free Software Foundation; either version 2, or (at your option) | ||
| 11 | * any later version. | ||
| 12 | * | ||
| 13 | * This program is distributed in the hope that it will be useful, | ||
| 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 16 | * GNU General Public License for more details. | ||
| 17 | * | ||
| 18 | * You should have received a copy of the GNU General Public License | ||
| 19 | * along with this program; if not, write to the Free Software | ||
| 20 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 21 | */ | 8 | */ |
| 22 | 9 | ||
| 23 | #include <linux/module.h> | 10 | #include <linux/module.h> |
diff --git a/drivers/s390/net/smsgiucv_app.c b/drivers/s390/net/smsgiucv_app.c index 32515a201bbc..0a263999f7ae 100644 --- a/drivers/s390/net/smsgiucv_app.c +++ b/drivers/s390/net/smsgiucv_app.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * Deliver z/VM CP special messages (SMSG) as uevents. | 3 | * Deliver z/VM CP special messages (SMSG) as uevents. |
| 3 | * | 4 | * |
diff --git a/drivers/s390/scsi/Makefile b/drivers/s390/scsi/Makefile index 9259039e886d..9dda431ec8f3 100644 --- a/drivers/s390/scsi/Makefile +++ b/drivers/s390/scsi/Makefile | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | # SPDX-License-Identifier: GPL-2.0 | ||
| 1 | # | 2 | # |
| 2 | # Makefile for the S/390 specific device drivers | 3 | # Makefile for the S/390 specific device drivers |
| 3 | # | 4 | # |
diff --git a/drivers/s390/scsi/zfcp_aux.c b/drivers/s390/scsi/zfcp_aux.c index 84752152d41f..a3a8c8d9d717 100644 --- a/drivers/s390/scsi/zfcp_aux.c +++ b/drivers/s390/scsi/zfcp_aux.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * zfcp device driver | 3 | * zfcp device driver |
| 3 | * | 4 | * |
diff --git a/drivers/s390/virtio/Makefile b/drivers/s390/virtio/Makefile index f68af1f317f1..2dc4d9aab634 100644 --- a/drivers/s390/virtio/Makefile +++ b/drivers/s390/virtio/Makefile | |||
| @@ -1,9 +1,6 @@ | |||
| 1 | # SPDX-License-Identifier: GPL-2.0 | ||
| 1 | # Makefile for kvm guest drivers on s390 | 2 | # Makefile for kvm guest drivers on s390 |
| 2 | # | 3 | # |
| 3 | # Copyright IBM Corp. 2008 | 4 | # Copyright IBM Corp. 2008 |
| 4 | # | ||
| 5 | # This program is free software; you can redistribute it and/or modify | ||
| 6 | # it under the terms of the GNU General Public License (version 2 only) | ||
| 7 | # as published by the Free Software Foundation. | ||
| 8 | 5 | ||
| 9 | obj-$(CONFIG_S390_GUEST) += virtio_ccw.o | 6 | obj-$(CONFIG_S390_GUEST) += virtio_ccw.o |
diff --git a/drivers/s390/virtio/virtio_ccw.c b/drivers/s390/virtio/virtio_ccw.c index b18fe2014cf2..ba2e0856d22c 100644 --- a/drivers/s390/virtio/virtio_ccw.c +++ b/drivers/s390/virtio/virtio_ccw.c | |||
| @@ -1,12 +1,9 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * ccw based virtio transport | 3 | * ccw based virtio transport |
| 3 | * | 4 | * |
| 4 | * Copyright IBM Corp. 2012, 2014 | 5 | * Copyright IBM Corp. 2012, 2014 |
| 5 | * | 6 | * |
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License (version 2 only) | ||
| 8 | * as published by the Free Software Foundation. | ||
| 9 | * | ||
| 10 | * Author(s): Cornelia Huck <cornelia.huck@de.ibm.com> | 7 | * Author(s): Cornelia Huck <cornelia.huck@de.ibm.com> |
| 11 | */ | 8 | */ |
| 12 | 9 | ||
diff --git a/drivers/scsi/aacraid/aacraid.h b/drivers/scsi/aacraid/aacraid.h index 403a639574e5..6e3d81969a77 100644 --- a/drivers/scsi/aacraid/aacraid.h +++ b/drivers/scsi/aacraid/aacraid.h | |||
| @@ -1673,6 +1673,7 @@ struct aac_dev | |||
| 1673 | struct aac_hba_map_info hba_map[AAC_MAX_BUSES][AAC_MAX_TARGETS]; | 1673 | struct aac_hba_map_info hba_map[AAC_MAX_BUSES][AAC_MAX_TARGETS]; |
| 1674 | u8 adapter_shutdown; | 1674 | u8 adapter_shutdown; |
| 1675 | u32 handle_pci_error; | 1675 | u32 handle_pci_error; |
| 1676 | bool init_reset; | ||
| 1676 | }; | 1677 | }; |
| 1677 | 1678 | ||
| 1678 | #define aac_adapter_interrupt(dev) \ | 1679 | #define aac_adapter_interrupt(dev) \ |
diff --git a/drivers/scsi/aacraid/commsup.c b/drivers/scsi/aacraid/commsup.c index 525a652dab48..80a8cb26cdea 100644 --- a/drivers/scsi/aacraid/commsup.c +++ b/drivers/scsi/aacraid/commsup.c | |||
| @@ -467,35 +467,6 @@ int aac_queue_get(struct aac_dev * dev, u32 * index, u32 qid, struct hw_fib * hw | |||
| 467 | return 0; | 467 | return 0; |
| 468 | } | 468 | } |
| 469 | 469 | ||
| 470 | #ifdef CONFIG_EEH | ||
| 471 | static inline int aac_check_eeh_failure(struct aac_dev *dev) | ||
| 472 | { | ||
| 473 | /* Check for an EEH failure for the given | ||
| 474 | * device node. Function eeh_dev_check_failure() | ||
| 475 | * returns 0 if there has not been an EEH error | ||
| 476 | * otherwise returns a non-zero value. | ||
| 477 | * | ||
| 478 | * Need to be called before any PCI operation, | ||
| 479 | * i.e.,before aac_adapter_check_health() | ||
| 480 | */ | ||
| 481 | struct eeh_dev *edev = pci_dev_to_eeh_dev(dev->pdev); | ||
| 482 | |||
| 483 | if (eeh_dev_check_failure(edev)) { | ||
| 484 | /* The EEH mechanisms will handle this | ||
| 485 | * error and reset the device if | ||
| 486 | * necessary. | ||
| 487 | */ | ||
| 488 | return 1; | ||
| 489 | } | ||
| 490 | return 0; | ||
| 491 | } | ||
| 492 | #else | ||
| 493 | static inline int aac_check_eeh_failure(struct aac_dev *dev) | ||
| 494 | { | ||
| 495 | return 0; | ||
| 496 | } | ||
| 497 | #endif | ||
| 498 | |||
| 499 | /* | 470 | /* |
| 500 | * Define the highest level of host to adapter communication routines. | 471 | * Define the highest level of host to adapter communication routines. |
| 501 | * These routines will support host to adapter FS commuication. These | 472 | * These routines will support host to adapter FS commuication. These |
| @@ -701,7 +672,7 @@ int aac_fib_send(u16 command, struct fib *fibptr, unsigned long size, | |||
| 701 | return -ETIMEDOUT; | 672 | return -ETIMEDOUT; |
| 702 | } | 673 | } |
| 703 | 674 | ||
| 704 | if (aac_check_eeh_failure(dev)) | 675 | if (unlikely(pci_channel_offline(dev->pdev))) |
| 705 | return -EFAULT; | 676 | return -EFAULT; |
| 706 | 677 | ||
| 707 | if ((blink = aac_adapter_check_health(dev)) > 0) { | 678 | if ((blink = aac_adapter_check_health(dev)) > 0) { |
| @@ -801,7 +772,7 @@ int aac_hba_send(u8 command, struct fib *fibptr, fib_callback callback, | |||
| 801 | 772 | ||
| 802 | spin_unlock_irqrestore(&fibptr->event_lock, flags); | 773 | spin_unlock_irqrestore(&fibptr->event_lock, flags); |
| 803 | 774 | ||
| 804 | if (aac_check_eeh_failure(dev)) | 775 | if (unlikely(pci_channel_offline(dev->pdev))) |
| 805 | return -EFAULT; | 776 | return -EFAULT; |
| 806 | 777 | ||
| 807 | fibptr->flags |= FIB_CONTEXT_FLAG_WAIT; | 778 | fibptr->flags |= FIB_CONTEXT_FLAG_WAIT; |
| @@ -1583,6 +1554,7 @@ static int _aac_reset_adapter(struct aac_dev *aac, int forced, u8 reset_type) | |||
| 1583 | * will ensure that i/o is queisced and the card is flushed in that | 1554 | * will ensure that i/o is queisced and the card is flushed in that |
| 1584 | * case. | 1555 | * case. |
| 1585 | */ | 1556 | */ |
| 1557 | aac_free_irq(aac); | ||
| 1586 | aac_fib_map_free(aac); | 1558 | aac_fib_map_free(aac); |
| 1587 | dma_free_coherent(&aac->pdev->dev, aac->comm_size, aac->comm_addr, | 1559 | dma_free_coherent(&aac->pdev->dev, aac->comm_size, aac->comm_addr, |
| 1588 | aac->comm_phys); | 1560 | aac->comm_phys); |
| @@ -1590,7 +1562,6 @@ static int _aac_reset_adapter(struct aac_dev *aac, int forced, u8 reset_type) | |||
| 1590 | aac->comm_phys = 0; | 1562 | aac->comm_phys = 0; |
| 1591 | kfree(aac->queues); | 1563 | kfree(aac->queues); |
| 1592 | aac->queues = NULL; | 1564 | aac->queues = NULL; |
| 1593 | aac_free_irq(aac); | ||
| 1594 | kfree(aac->fsa_dev); | 1565 | kfree(aac->fsa_dev); |
| 1595 | aac->fsa_dev = NULL; | 1566 | aac->fsa_dev = NULL; |
| 1596 | 1567 | ||
| @@ -2511,8 +2482,8 @@ int aac_command_thread(void *data) | |||
| 2511 | /* Synchronize our watches */ | 2482 | /* Synchronize our watches */ |
| 2512 | if (((NSEC_PER_SEC - (NSEC_PER_SEC / HZ)) > now.tv_nsec) | 2483 | if (((NSEC_PER_SEC - (NSEC_PER_SEC / HZ)) > now.tv_nsec) |
| 2513 | && (now.tv_nsec > (NSEC_PER_SEC / HZ))) | 2484 | && (now.tv_nsec > (NSEC_PER_SEC / HZ))) |
| 2514 | difference = (((NSEC_PER_SEC - now.tv_nsec) * HZ) | 2485 | difference = HZ + HZ / 2 - |
| 2515 | + NSEC_PER_SEC / 2) / NSEC_PER_SEC; | 2486 | now.tv_nsec / (NSEC_PER_SEC / HZ); |
| 2516 | else { | 2487 | else { |
| 2517 | if (now.tv_nsec > NSEC_PER_SEC / 2) | 2488 | if (now.tv_nsec > NSEC_PER_SEC / 2) |
| 2518 | ++now.tv_sec; | 2489 | ++now.tv_sec; |
| @@ -2536,6 +2507,10 @@ int aac_command_thread(void *data) | |||
| 2536 | if (kthread_should_stop()) | 2507 | if (kthread_should_stop()) |
| 2537 | break; | 2508 | break; |
| 2538 | 2509 | ||
| 2510 | /* | ||
| 2511 | * we probably want usleep_range() here instead of the | ||
| 2512 | * jiffies computation | ||
| 2513 | */ | ||
| 2539 | schedule_timeout(difference); | 2514 | schedule_timeout(difference); |
| 2540 | 2515 | ||
| 2541 | if (kthread_should_stop()) | 2516 | if (kthread_should_stop()) |
diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c index c9252b138c1f..bdf127aaab41 100644 --- a/drivers/scsi/aacraid/linit.c +++ b/drivers/scsi/aacraid/linit.c | |||
| @@ -1680,6 +1680,9 @@ static int aac_probe_one(struct pci_dev *pdev, const struct pci_device_id *id) | |||
| 1680 | aac->cardtype = index; | 1680 | aac->cardtype = index; |
| 1681 | INIT_LIST_HEAD(&aac->entry); | 1681 | INIT_LIST_HEAD(&aac->entry); |
| 1682 | 1682 | ||
| 1683 | if (aac_reset_devices || reset_devices) | ||
| 1684 | aac->init_reset = true; | ||
| 1685 | |||
| 1683 | aac->fibs = kzalloc(sizeof(struct fib) * (shost->can_queue + AAC_NUM_MGT_FIB), GFP_KERNEL); | 1686 | aac->fibs = kzalloc(sizeof(struct fib) * (shost->can_queue + AAC_NUM_MGT_FIB), GFP_KERNEL); |
| 1684 | if (!aac->fibs) | 1687 | if (!aac->fibs) |
| 1685 | goto out_free_host; | 1688 | goto out_free_host; |
diff --git a/drivers/scsi/aacraid/rx.c b/drivers/scsi/aacraid/rx.c index 93ef7c37e568..620166694171 100644 --- a/drivers/scsi/aacraid/rx.c +++ b/drivers/scsi/aacraid/rx.c | |||
| @@ -561,11 +561,16 @@ int _aac_rx_init(struct aac_dev *dev) | |||
| 561 | dev->a_ops.adapter_sync_cmd = rx_sync_cmd; | 561 | dev->a_ops.adapter_sync_cmd = rx_sync_cmd; |
| 562 | dev->a_ops.adapter_enable_int = aac_rx_disable_interrupt; | 562 | dev->a_ops.adapter_enable_int = aac_rx_disable_interrupt; |
| 563 | dev->OIMR = status = rx_readb (dev, MUnit.OIMR); | 563 | dev->OIMR = status = rx_readb (dev, MUnit.OIMR); |
| 564 | if ((((status & 0x0c) != 0x0c) || aac_reset_devices || reset_devices) && | 564 | |
| 565 | !aac_rx_restart_adapter(dev, 0, IOP_HWSOFT_RESET)) | 565 | if (((status & 0x0c) != 0x0c) || dev->init_reset) { |
| 566 | /* Make sure the Hardware FIFO is empty */ | 566 | dev->init_reset = false; |
| 567 | while ((++restart < 512) && | 567 | if (!aac_rx_restart_adapter(dev, 0, IOP_HWSOFT_RESET)) { |
| 568 | (rx_readl(dev, MUnit.OutboundQueue) != 0xFFFFFFFFL)); | 568 | /* Make sure the Hardware FIFO is empty */ |
| 569 | while ((++restart < 512) && | ||
| 570 | (rx_readl(dev, MUnit.OutboundQueue) != 0xFFFFFFFFL)); | ||
| 571 | } | ||
| 572 | } | ||
| 573 | |||
| 569 | /* | 574 | /* |
| 570 | * Check to see if the board panic'd while booting. | 575 | * Check to see if the board panic'd while booting. |
| 571 | */ | 576 | */ |
diff --git a/drivers/scsi/aacraid/src.c b/drivers/scsi/aacraid/src.c index 0c9361c87ec8..fde6b6aa86e3 100644 --- a/drivers/scsi/aacraid/src.c +++ b/drivers/scsi/aacraid/src.c | |||
| @@ -868,9 +868,13 @@ int aac_src_init(struct aac_dev *dev) | |||
| 868 | /* Failure to reset here is an option ... */ | 868 | /* Failure to reset here is an option ... */ |
| 869 | dev->a_ops.adapter_sync_cmd = src_sync_cmd; | 869 | dev->a_ops.adapter_sync_cmd = src_sync_cmd; |
| 870 | dev->a_ops.adapter_enable_int = aac_src_disable_interrupt; | 870 | dev->a_ops.adapter_enable_int = aac_src_disable_interrupt; |
| 871 | if ((aac_reset_devices || reset_devices) && | 871 | |
| 872 | !aac_src_restart_adapter(dev, 0, IOP_HWSOFT_RESET)) | 872 | if (dev->init_reset) { |
| 873 | ++restart; | 873 | dev->init_reset = false; |
| 874 | if (!aac_src_restart_adapter(dev, 0, IOP_HWSOFT_RESET)) | ||
| 875 | ++restart; | ||
| 876 | } | ||
| 877 | |||
| 874 | /* | 878 | /* |
| 875 | * Check to see if the board panic'd while booting. | 879 | * Check to see if the board panic'd while booting. |
| 876 | */ | 880 | */ |
| @@ -1014,9 +1018,13 @@ int aac_srcv_init(struct aac_dev *dev) | |||
| 1014 | /* Failure to reset here is an option ... */ | 1018 | /* Failure to reset here is an option ... */ |
| 1015 | dev->a_ops.adapter_sync_cmd = src_sync_cmd; | 1019 | dev->a_ops.adapter_sync_cmd = src_sync_cmd; |
| 1016 | dev->a_ops.adapter_enable_int = aac_src_disable_interrupt; | 1020 | dev->a_ops.adapter_enable_int = aac_src_disable_interrupt; |
| 1017 | if ((aac_reset_devices || reset_devices) && | 1021 | |
| 1018 | !aac_src_restart_adapter(dev, 0, IOP_HWSOFT_RESET)) | 1022 | if (dev->init_reset) { |
| 1019 | ++restart; | 1023 | dev->init_reset = false; |
| 1024 | if (!aac_src_restart_adapter(dev, 0, IOP_HWSOFT_RESET)) | ||
| 1025 | ++restart; | ||
| 1026 | } | ||
| 1027 | |||
| 1020 | /* | 1028 | /* |
| 1021 | * Check to see if flash update is running. | 1029 | * Check to see if flash update is running. |
| 1022 | * Wait for the adapter to be up and running. Wait up to 5 minutes | 1030 | * Wait for the adapter to be up and running. Wait up to 5 minutes |
diff --git a/drivers/scsi/bfa/bfad_bsg.c b/drivers/scsi/bfa/bfad_bsg.c index 72ca2a2e08e2..b2fa195adc7a 100644 --- a/drivers/scsi/bfa/bfad_bsg.c +++ b/drivers/scsi/bfa/bfad_bsg.c | |||
| @@ -3135,7 +3135,8 @@ bfad_im_bsg_vendor_request(struct bsg_job *job) | |||
| 3135 | struct fc_bsg_request *bsg_request = job->request; | 3135 | struct fc_bsg_request *bsg_request = job->request; |
| 3136 | struct fc_bsg_reply *bsg_reply = job->reply; | 3136 | struct fc_bsg_reply *bsg_reply = job->reply; |
| 3137 | uint32_t vendor_cmd = bsg_request->rqst_data.h_vendor.vendor_cmd[0]; | 3137 | uint32_t vendor_cmd = bsg_request->rqst_data.h_vendor.vendor_cmd[0]; |
| 3138 | struct bfad_im_port_s *im_port = shost_priv(fc_bsg_to_shost(job)); | 3138 | struct Scsi_Host *shost = fc_bsg_to_shost(job); |
| 3139 | struct bfad_im_port_s *im_port = bfad_get_im_port(shost); | ||
| 3139 | struct bfad_s *bfad = im_port->bfad; | 3140 | struct bfad_s *bfad = im_port->bfad; |
| 3140 | void *payload_kbuf; | 3141 | void *payload_kbuf; |
| 3141 | int rc = -EINVAL; | 3142 | int rc = -EINVAL; |
| @@ -3350,7 +3351,8 @@ int | |||
| 3350 | bfad_im_bsg_els_ct_request(struct bsg_job *job) | 3351 | bfad_im_bsg_els_ct_request(struct bsg_job *job) |
| 3351 | { | 3352 | { |
| 3352 | struct bfa_bsg_data *bsg_data; | 3353 | struct bfa_bsg_data *bsg_data; |
| 3353 | struct bfad_im_port_s *im_port = shost_priv(fc_bsg_to_shost(job)); | 3354 | struct Scsi_Host *shost = fc_bsg_to_shost(job); |
| 3355 | struct bfad_im_port_s *im_port = bfad_get_im_port(shost); | ||
| 3354 | struct bfad_s *bfad = im_port->bfad; | 3356 | struct bfad_s *bfad = im_port->bfad; |
| 3355 | bfa_bsg_fcpt_t *bsg_fcpt; | 3357 | bfa_bsg_fcpt_t *bsg_fcpt; |
| 3356 | struct bfad_fcxp *drv_fcxp; | 3358 | struct bfad_fcxp *drv_fcxp; |
diff --git a/drivers/scsi/bfa/bfad_im.c b/drivers/scsi/bfa/bfad_im.c index 24e657a4ec80..c05d6e91e4bd 100644 --- a/drivers/scsi/bfa/bfad_im.c +++ b/drivers/scsi/bfa/bfad_im.c | |||
| @@ -546,6 +546,7 @@ int | |||
| 546 | bfad_im_scsi_host_alloc(struct bfad_s *bfad, struct bfad_im_port_s *im_port, | 546 | bfad_im_scsi_host_alloc(struct bfad_s *bfad, struct bfad_im_port_s *im_port, |
| 547 | struct device *dev) | 547 | struct device *dev) |
| 548 | { | 548 | { |
| 549 | struct bfad_im_port_pointer *im_portp; | ||
| 549 | int error = 1; | 550 | int error = 1; |
| 550 | 551 | ||
| 551 | mutex_lock(&bfad_mutex); | 552 | mutex_lock(&bfad_mutex); |
| @@ -564,7 +565,8 @@ bfad_im_scsi_host_alloc(struct bfad_s *bfad, struct bfad_im_port_s *im_port, | |||
| 564 | goto out_free_idr; | 565 | goto out_free_idr; |
| 565 | } | 566 | } |
| 566 | 567 | ||
| 567 | im_port->shost->hostdata[0] = (unsigned long)im_port; | 568 | im_portp = shost_priv(im_port->shost); |
| 569 | im_portp->p = im_port; | ||
| 568 | im_port->shost->unique_id = im_port->idr_id; | 570 | im_port->shost->unique_id = im_port->idr_id; |
| 569 | im_port->shost->this_id = -1; | 571 | im_port->shost->this_id = -1; |
| 570 | im_port->shost->max_id = MAX_FCP_TARGET; | 572 | im_port->shost->max_id = MAX_FCP_TARGET; |
| @@ -748,7 +750,7 @@ bfad_scsi_host_alloc(struct bfad_im_port_s *im_port, struct bfad_s *bfad) | |||
| 748 | 750 | ||
| 749 | sht->sg_tablesize = bfad->cfg_data.io_max_sge; | 751 | sht->sg_tablesize = bfad->cfg_data.io_max_sge; |
| 750 | 752 | ||
| 751 | return scsi_host_alloc(sht, sizeof(unsigned long)); | 753 | return scsi_host_alloc(sht, sizeof(struct bfad_im_port_pointer)); |
| 752 | } | 754 | } |
| 753 | 755 | ||
| 754 | void | 756 | void |
diff --git a/drivers/scsi/bfa/bfad_im.h b/drivers/scsi/bfa/bfad_im.h index c81ec2a77ef5..06ce4ba2b7bc 100644 --- a/drivers/scsi/bfa/bfad_im.h +++ b/drivers/scsi/bfa/bfad_im.h | |||
| @@ -69,6 +69,16 @@ struct bfad_im_port_s { | |||
| 69 | struct fc_vport *fc_vport; | 69 | struct fc_vport *fc_vport; |
| 70 | }; | 70 | }; |
| 71 | 71 | ||
| 72 | struct bfad_im_port_pointer { | ||
| 73 | struct bfad_im_port_s *p; | ||
| 74 | }; | ||
| 75 | |||
| 76 | static inline struct bfad_im_port_s *bfad_get_im_port(struct Scsi_Host *host) | ||
| 77 | { | ||
| 78 | struct bfad_im_port_pointer *im_portp = shost_priv(host); | ||
| 79 | return im_portp->p; | ||
| 80 | } | ||
| 81 | |||
| 72 | enum bfad_itnim_state { | 82 | enum bfad_itnim_state { |
| 73 | ITNIM_STATE_NONE, | 83 | ITNIM_STATE_NONE, |
| 74 | ITNIM_STATE_ONLINE, | 84 | ITNIM_STATE_ONLINE, |
diff --git a/drivers/scsi/libfc/fc_lport.c b/drivers/scsi/libfc/fc_lport.c index 5da46052e179..21be672679fb 100644 --- a/drivers/scsi/libfc/fc_lport.c +++ b/drivers/scsi/libfc/fc_lport.c | |||
| @@ -904,10 +904,14 @@ static void fc_lport_recv_els_req(struct fc_lport *lport, | |||
| 904 | case ELS_FLOGI: | 904 | case ELS_FLOGI: |
| 905 | if (!lport->point_to_multipoint) | 905 | if (!lport->point_to_multipoint) |
| 906 | fc_lport_recv_flogi_req(lport, fp); | 906 | fc_lport_recv_flogi_req(lport, fp); |
| 907 | else | ||
| 908 | fc_rport_recv_req(lport, fp); | ||
| 907 | break; | 909 | break; |
| 908 | case ELS_LOGO: | 910 | case ELS_LOGO: |
| 909 | if (fc_frame_sid(fp) == FC_FID_FLOGI) | 911 | if (fc_frame_sid(fp) == FC_FID_FLOGI) |
| 910 | fc_lport_recv_logo_req(lport, fp); | 912 | fc_lport_recv_logo_req(lport, fp); |
| 913 | else | ||
| 914 | fc_rport_recv_req(lport, fp); | ||
| 911 | break; | 915 | break; |
| 912 | case ELS_RSCN: | 916 | case ELS_RSCN: |
| 913 | lport->tt.disc_recv_req(lport, fp); | 917 | lport->tt.disc_recv_req(lport, fp); |
diff --git a/drivers/scsi/libsas/sas_expander.c b/drivers/scsi/libsas/sas_expander.c index ca1566237ae7..3183d63de4da 100644 --- a/drivers/scsi/libsas/sas_expander.c +++ b/drivers/scsi/libsas/sas_expander.c | |||
| @@ -2145,7 +2145,7 @@ void sas_smp_handler(struct bsg_job *job, struct Scsi_Host *shost, | |||
| 2145 | struct sas_rphy *rphy) | 2145 | struct sas_rphy *rphy) |
| 2146 | { | 2146 | { |
| 2147 | struct domain_device *dev; | 2147 | struct domain_device *dev; |
| 2148 | unsigned int reslen = 0; | 2148 | unsigned int rcvlen = 0; |
| 2149 | int ret = -EINVAL; | 2149 | int ret = -EINVAL; |
| 2150 | 2150 | ||
| 2151 | /* no rphy means no smp target support (ie aic94xx host) */ | 2151 | /* no rphy means no smp target support (ie aic94xx host) */ |
| @@ -2179,12 +2179,12 @@ void sas_smp_handler(struct bsg_job *job, struct Scsi_Host *shost, | |||
| 2179 | 2179 | ||
| 2180 | ret = smp_execute_task_sg(dev, job->request_payload.sg_list, | 2180 | ret = smp_execute_task_sg(dev, job->request_payload.sg_list, |
| 2181 | job->reply_payload.sg_list); | 2181 | job->reply_payload.sg_list); |
| 2182 | if (ret > 0) { | 2182 | if (ret >= 0) { |
| 2183 | /* positive number is the untransferred residual */ | 2183 | /* bsg_job_done() requires the length received */ |
| 2184 | reslen = ret; | 2184 | rcvlen = job->reply_payload.payload_len - ret; |
| 2185 | ret = 0; | 2185 | ret = 0; |
| 2186 | } | 2186 | } |
| 2187 | 2187 | ||
| 2188 | out: | 2188 | out: |
| 2189 | bsg_job_done(job, ret, reslen); | 2189 | bsg_job_done(job, ret, rcvlen); |
| 2190 | } | 2190 | } |
diff --git a/drivers/scsi/lpfc/lpfc_mem.c b/drivers/scsi/lpfc/lpfc_mem.c index 56faeb049b4a..87c08ff37ddd 100644 --- a/drivers/scsi/lpfc/lpfc_mem.c +++ b/drivers/scsi/lpfc/lpfc_mem.c | |||
| @@ -753,12 +753,12 @@ lpfc_rq_buf_free(struct lpfc_hba *phba, struct lpfc_dmabuf *mp) | |||
| 753 | drqe.address_hi = putPaddrHigh(rqb_entry->dbuf.phys); | 753 | drqe.address_hi = putPaddrHigh(rqb_entry->dbuf.phys); |
| 754 | rc = lpfc_sli4_rq_put(rqb_entry->hrq, rqb_entry->drq, &hrqe, &drqe); | 754 | rc = lpfc_sli4_rq_put(rqb_entry->hrq, rqb_entry->drq, &hrqe, &drqe); |
| 755 | if (rc < 0) { | 755 | if (rc < 0) { |
| 756 | (rqbp->rqb_free_buffer)(phba, rqb_entry); | ||
| 757 | lpfc_printf_log(phba, KERN_ERR, LOG_INIT, | 756 | lpfc_printf_log(phba, KERN_ERR, LOG_INIT, |
| 758 | "6409 Cannot post to RQ %d: %x %x\n", | 757 | "6409 Cannot post to RQ %d: %x %x\n", |
| 759 | rqb_entry->hrq->queue_id, | 758 | rqb_entry->hrq->queue_id, |
| 760 | rqb_entry->hrq->host_index, | 759 | rqb_entry->hrq->host_index, |
| 761 | rqb_entry->hrq->hba_index); | 760 | rqb_entry->hrq->hba_index); |
| 761 | (rqbp->rqb_free_buffer)(phba, rqb_entry); | ||
| 762 | } else { | 762 | } else { |
| 763 | list_add_tail(&rqb_entry->hbuf.list, &rqbp->rqb_buffer_list); | 763 | list_add_tail(&rqb_entry->hbuf.list, &rqbp->rqb_buffer_list); |
| 764 | rqbp->buffer_count++; | 764 | rqbp->buffer_count++; |
diff --git a/drivers/scsi/scsi_debugfs.c b/drivers/scsi/scsi_debugfs.c index 01f08c03f2c1..c3765d29fd3f 100644 --- a/drivers/scsi/scsi_debugfs.c +++ b/drivers/scsi/scsi_debugfs.c | |||
| @@ -8,9 +8,11 @@ void scsi_show_rq(struct seq_file *m, struct request *rq) | |||
| 8 | { | 8 | { |
| 9 | struct scsi_cmnd *cmd = container_of(scsi_req(rq), typeof(*cmd), req); | 9 | struct scsi_cmnd *cmd = container_of(scsi_req(rq), typeof(*cmd), req); |
| 10 | int msecs = jiffies_to_msecs(jiffies - cmd->jiffies_at_alloc); | 10 | int msecs = jiffies_to_msecs(jiffies - cmd->jiffies_at_alloc); |
| 11 | char buf[80]; | 11 | const u8 *const cdb = READ_ONCE(cmd->cmnd); |
| 12 | char buf[80] = "(?)"; | ||
| 12 | 13 | ||
| 13 | __scsi_format_command(buf, sizeof(buf), cmd->cmnd, cmd->cmd_len); | 14 | if (cdb) |
| 15 | __scsi_format_command(buf, sizeof(buf), cdb, cmd->cmd_len); | ||
| 14 | seq_printf(m, ", .cmd=%s, .retries=%d, allocated %d.%03d s ago", buf, | 16 | seq_printf(m, ", .cmd=%s, .retries=%d, allocated %d.%03d s ago", buf, |
| 15 | cmd->retries, msecs / 1000, msecs % 1000); | 17 | cmd->retries, msecs / 1000, msecs % 1000); |
| 16 | } | 18 | } |
diff --git a/drivers/scsi/scsi_devinfo.c b/drivers/scsi/scsi_devinfo.c index 78d4aa8df675..449ef5adbb2b 100644 --- a/drivers/scsi/scsi_devinfo.c +++ b/drivers/scsi/scsi_devinfo.c | |||
| @@ -34,7 +34,6 @@ struct scsi_dev_info_list_table { | |||
| 34 | }; | 34 | }; |
| 35 | 35 | ||
| 36 | 36 | ||
| 37 | static const char spaces[] = " "; /* 16 of them */ | ||
| 38 | static blist_flags_t scsi_default_dev_flags; | 37 | static blist_flags_t scsi_default_dev_flags; |
| 39 | static LIST_HEAD(scsi_dev_info_list); | 38 | static LIST_HEAD(scsi_dev_info_list); |
| 40 | static char scsi_dev_flags[256]; | 39 | static char scsi_dev_flags[256]; |
| @@ -298,20 +297,13 @@ static void scsi_strcpy_devinfo(char *name, char *to, size_t to_length, | |||
| 298 | size_t from_length; | 297 | size_t from_length; |
| 299 | 298 | ||
| 300 | from_length = strlen(from); | 299 | from_length = strlen(from); |
| 301 | strncpy(to, from, min(to_length, from_length)); | 300 | /* This zero-pads the destination */ |
| 302 | if (from_length < to_length) { | 301 | strncpy(to, from, to_length); |
| 303 | if (compatible) { | 302 | if (from_length < to_length && !compatible) { |
| 304 | /* | 303 | /* |
| 305 | * NUL terminate the string if it is short. | 304 | * space pad the string if it is short. |
| 306 | */ | 305 | */ |
| 307 | to[from_length] = '\0'; | 306 | memset(&to[from_length], ' ', to_length - from_length); |
| 308 | } else { | ||
| 309 | /* | ||
| 310 | * space pad the string if it is short. | ||
| 311 | */ | ||
| 312 | strncpy(&to[from_length], spaces, | ||
| 313 | to_length - from_length); | ||
| 314 | } | ||
| 315 | } | 307 | } |
| 316 | if (from_length > to_length) | 308 | if (from_length > to_length) |
| 317 | printk(KERN_WARNING "%s: %s string '%s' is too long\n", | 309 | printk(KERN_WARNING "%s: %s string '%s' is too long\n", |
| @@ -458,7 +450,8 @@ static struct scsi_dev_info_list *scsi_dev_info_list_find(const char *vendor, | |||
| 458 | /* | 450 | /* |
| 459 | * vendor strings must be an exact match | 451 | * vendor strings must be an exact match |
| 460 | */ | 452 | */ |
| 461 | if (vmax != strlen(devinfo->vendor) || | 453 | if (vmax != strnlen(devinfo->vendor, |
| 454 | sizeof(devinfo->vendor)) || | ||
| 462 | memcmp(devinfo->vendor, vskip, vmax)) | 455 | memcmp(devinfo->vendor, vskip, vmax)) |
| 463 | continue; | 456 | continue; |
| 464 | 457 | ||
| @@ -466,7 +459,7 @@ static struct scsi_dev_info_list *scsi_dev_info_list_find(const char *vendor, | |||
| 466 | * @model specifies the full string, and | 459 | * @model specifies the full string, and |
| 467 | * must be larger or equal to devinfo->model | 460 | * must be larger or equal to devinfo->model |
| 468 | */ | 461 | */ |
| 469 | mlen = strlen(devinfo->model); | 462 | mlen = strnlen(devinfo->model, sizeof(devinfo->model)); |
| 470 | if (mmax < mlen || memcmp(devinfo->model, mskip, mlen)) | 463 | if (mmax < mlen || memcmp(devinfo->model, mskip, mlen)) |
| 471 | continue; | 464 | continue; |
| 472 | return devinfo; | 465 | return devinfo; |
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index 1cbc497e00bd..d9ca1dfab154 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c | |||
| @@ -1967,6 +1967,8 @@ static bool scsi_mq_get_budget(struct blk_mq_hw_ctx *hctx) | |||
| 1967 | out_put_device: | 1967 | out_put_device: |
| 1968 | put_device(&sdev->sdev_gendev); | 1968 | put_device(&sdev->sdev_gendev); |
| 1969 | out: | 1969 | out: |
| 1970 | if (atomic_read(&sdev->device_busy) == 0 && !scsi_device_blocked(sdev)) | ||
| 1971 | blk_mq_delay_run_hw_queue(hctx, SCSI_QUEUE_DELAY); | ||
| 1970 | return false; | 1972 | return false; |
| 1971 | } | 1973 | } |
| 1972 | 1974 | ||
| @@ -2148,11 +2150,13 @@ void __scsi_init_queue(struct Scsi_Host *shost, struct request_queue *q) | |||
| 2148 | q->limits.cluster = 0; | 2150 | q->limits.cluster = 0; |
| 2149 | 2151 | ||
| 2150 | /* | 2152 | /* |
| 2151 | * set a reasonable default alignment on word boundaries: the | 2153 | * Set a reasonable default alignment: The larger of 32-byte (dword), |
| 2152 | * host and device may alter it using | 2154 | * which is a common minimum for HBAs, and the minimum DMA alignment, |
| 2153 | * blk_queue_update_dma_alignment() later. | 2155 | * which is set by the platform. |
| 2156 | * | ||
| 2157 | * Devices that require a bigger alignment can increase it later. | ||
| 2154 | */ | 2158 | */ |
| 2155 | blk_queue_dma_alignment(q, 0x03); | 2159 | blk_queue_dma_alignment(q, max(4, dma_get_cache_alignment()) - 1); |
| 2156 | } | 2160 | } |
| 2157 | EXPORT_SYMBOL_GPL(__scsi_init_queue); | 2161 | EXPORT_SYMBOL_GPL(__scsi_init_queue); |
| 2158 | 2162 | ||
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index 24fe68522716..a028ab3322a9 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c | |||
| @@ -1312,6 +1312,7 @@ static int sd_init_command(struct scsi_cmnd *cmd) | |||
| 1312 | static void sd_uninit_command(struct scsi_cmnd *SCpnt) | 1312 | static void sd_uninit_command(struct scsi_cmnd *SCpnt) |
| 1313 | { | 1313 | { |
| 1314 | struct request *rq = SCpnt->request; | 1314 | struct request *rq = SCpnt->request; |
| 1315 | u8 *cmnd; | ||
| 1315 | 1316 | ||
| 1316 | if (SCpnt->flags & SCMD_ZONE_WRITE_LOCK) | 1317 | if (SCpnt->flags & SCMD_ZONE_WRITE_LOCK) |
| 1317 | sd_zbc_write_unlock_zone(SCpnt); | 1318 | sd_zbc_write_unlock_zone(SCpnt); |
| @@ -1320,9 +1321,10 @@ static void sd_uninit_command(struct scsi_cmnd *SCpnt) | |||
| 1320 | __free_page(rq->special_vec.bv_page); | 1321 | __free_page(rq->special_vec.bv_page); |
| 1321 | 1322 | ||
| 1322 | if (SCpnt->cmnd != scsi_req(rq)->cmd) { | 1323 | if (SCpnt->cmnd != scsi_req(rq)->cmd) { |
| 1323 | mempool_free(SCpnt->cmnd, sd_cdb_pool); | 1324 | cmnd = SCpnt->cmnd; |
| 1324 | SCpnt->cmnd = NULL; | 1325 | SCpnt->cmnd = NULL; |
| 1325 | SCpnt->cmd_len = 0; | 1326 | SCpnt->cmd_len = 0; |
| 1327 | mempool_free(cmnd, sd_cdb_pool); | ||
| 1326 | } | 1328 | } |
| 1327 | } | 1329 | } |
| 1328 | 1330 | ||
diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 011c3369082c..a355d989b414 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c | |||
| @@ -6559,12 +6559,15 @@ static int ufshcd_config_vreg(struct device *dev, | |||
| 6559 | struct ufs_vreg *vreg, bool on) | 6559 | struct ufs_vreg *vreg, bool on) |
| 6560 | { | 6560 | { |
| 6561 | int ret = 0; | 6561 | int ret = 0; |
| 6562 | struct regulator *reg = vreg->reg; | 6562 | struct regulator *reg; |
| 6563 | const char *name = vreg->name; | 6563 | const char *name; |
| 6564 | int min_uV, uA_load; | 6564 | int min_uV, uA_load; |
| 6565 | 6565 | ||
| 6566 | BUG_ON(!vreg); | 6566 | BUG_ON(!vreg); |
| 6567 | 6567 | ||
| 6568 | reg = vreg->reg; | ||
| 6569 | name = vreg->name; | ||
| 6570 | |||
| 6568 | if (regulator_count_voltages(reg) > 0) { | 6571 | if (regulator_count_voltages(reg) > 0) { |
| 6569 | min_uV = on ? vreg->min_uV : 0; | 6572 | min_uV = on ? vreg->min_uV : 0; |
| 6570 | ret = regulator_set_voltage(reg, min_uV, vreg->max_uV); | 6573 | ret = regulator_set_voltage(reg, min_uV, vreg->max_uV); |
diff --git a/drivers/soc/amlogic/meson-gx-socinfo.c b/drivers/soc/amlogic/meson-gx-socinfo.c index 89f4cf507be6..f2d8c3c53ea4 100644 --- a/drivers/soc/amlogic/meson-gx-socinfo.c +++ b/drivers/soc/amlogic/meson-gx-socinfo.c | |||
| @@ -20,8 +20,8 @@ | |||
| 20 | #define AO_SEC_SOCINFO_OFFSET AO_SEC_SD_CFG8 | 20 | #define AO_SEC_SOCINFO_OFFSET AO_SEC_SD_CFG8 |
| 21 | 21 | ||
| 22 | #define SOCINFO_MAJOR GENMASK(31, 24) | 22 | #define SOCINFO_MAJOR GENMASK(31, 24) |
| 23 | #define SOCINFO_MINOR GENMASK(23, 16) | 23 | #define SOCINFO_PACK GENMASK(23, 16) |
| 24 | #define SOCINFO_PACK GENMASK(15, 8) | 24 | #define SOCINFO_MINOR GENMASK(15, 8) |
| 25 | #define SOCINFO_MISC GENMASK(7, 0) | 25 | #define SOCINFO_MISC GENMASK(7, 0) |
| 26 | 26 | ||
| 27 | static const struct meson_gx_soc_id { | 27 | static const struct meson_gx_soc_id { |
diff --git a/drivers/staging/ccree/ssi_hash.c b/drivers/staging/ccree/ssi_hash.c index d79090ed7f9c..2035835b62dc 100644 --- a/drivers/staging/ccree/ssi_hash.c +++ b/drivers/staging/ccree/ssi_hash.c | |||
| @@ -1769,7 +1769,7 @@ static int ssi_ahash_import(struct ahash_request *req, const void *in) | |||
| 1769 | struct device *dev = drvdata_to_dev(ctx->drvdata); | 1769 | struct device *dev = drvdata_to_dev(ctx->drvdata); |
| 1770 | struct ahash_req_ctx *state = ahash_request_ctx(req); | 1770 | struct ahash_req_ctx *state = ahash_request_ctx(req); |
| 1771 | u32 tmp; | 1771 | u32 tmp; |
| 1772 | int rc; | 1772 | int rc = 0; |
| 1773 | 1773 | ||
| 1774 | memcpy(&tmp, in, sizeof(u32)); | 1774 | memcpy(&tmp, in, sizeof(u32)); |
| 1775 | if (tmp != CC_EXPORT_MAGIC) { | 1775 | if (tmp != CC_EXPORT_MAGIC) { |
| @@ -1778,9 +1778,12 @@ static int ssi_ahash_import(struct ahash_request *req, const void *in) | |||
| 1778 | } | 1778 | } |
| 1779 | in += sizeof(u32); | 1779 | in += sizeof(u32); |
| 1780 | 1780 | ||
| 1781 | rc = ssi_hash_init(state, ctx); | 1781 | /* call init() to allocate bufs if the user hasn't */ |
| 1782 | if (rc) | 1782 | if (!state->digest_buff) { |
| 1783 | goto out; | 1783 | rc = ssi_hash_init(state, ctx); |
| 1784 | if (rc) | ||
| 1785 | goto out; | ||
| 1786 | } | ||
| 1784 | 1787 | ||
| 1785 | dma_sync_single_for_cpu(dev, state->digest_buff_dma_addr, | 1788 | dma_sync_single_for_cpu(dev, state->digest_buff_dma_addr, |
| 1786 | ctx->inter_digestsize, DMA_BIDIRECTIONAL); | 1789 | ctx->inter_digestsize, DMA_BIDIRECTIONAL); |
diff --git a/drivers/staging/comedi/drivers/ni_atmio.c b/drivers/staging/comedi/drivers/ni_atmio.c index 2d62a8c57332..ae6ed96d7874 100644 --- a/drivers/staging/comedi/drivers/ni_atmio.c +++ b/drivers/staging/comedi/drivers/ni_atmio.c | |||
| @@ -361,3 +361,8 @@ static struct comedi_driver ni_atmio_driver = { | |||
| 361 | .detach = ni_atmio_detach, | 361 | .detach = ni_atmio_detach, |
| 362 | }; | 362 | }; |
| 363 | module_comedi_driver(ni_atmio_driver); | 363 | module_comedi_driver(ni_atmio_driver); |
| 364 | |||
| 365 | MODULE_AUTHOR("Comedi http://www.comedi.org"); | ||
| 366 | MODULE_DESCRIPTION("Comedi low-level driver"); | ||
| 367 | MODULE_LICENSE("GPL"); | ||
| 368 | |||
diff --git a/drivers/staging/lustre/lnet/lnet/lib-socket.c b/drivers/staging/lustre/lnet/lnet/lib-socket.c index 539a26444f31..7d49d4865298 100644 --- a/drivers/staging/lustre/lnet/lnet/lib-socket.c +++ b/drivers/staging/lustre/lnet/lnet/lib-socket.c | |||
| @@ -71,16 +71,12 @@ lnet_sock_ioctl(int cmd, unsigned long arg) | |||
| 71 | } | 71 | } |
| 72 | 72 | ||
| 73 | sock_filp = sock_alloc_file(sock, 0, NULL); | 73 | sock_filp = sock_alloc_file(sock, 0, NULL); |
| 74 | if (IS_ERR(sock_filp)) { | 74 | if (IS_ERR(sock_filp)) |
| 75 | sock_release(sock); | 75 | return PTR_ERR(sock_filp); |
| 76 | rc = PTR_ERR(sock_filp); | ||
| 77 | goto out; | ||
| 78 | } | ||
| 79 | 76 | ||
| 80 | rc = kernel_sock_unlocked_ioctl(sock_filp, cmd, arg); | 77 | rc = kernel_sock_unlocked_ioctl(sock_filp, cmd, arg); |
| 81 | 78 | ||
| 82 | fput(sock_filp); | 79 | fput(sock_filp); |
| 83 | out: | ||
| 84 | return rc; | 80 | return rc; |
| 85 | } | 81 | } |
| 86 | 82 | ||
diff --git a/drivers/staging/lustre/lustre/llite/file.c b/drivers/staging/lustre/lustre/llite/file.c index 2d6e64dea266..938b859b6650 100644 --- a/drivers/staging/lustre/lustre/llite/file.c +++ b/drivers/staging/lustre/lustre/llite/file.c | |||
| @@ -1016,7 +1016,7 @@ static bool file_is_noatime(const struct file *file) | |||
| 1016 | if ((mnt->mnt_flags & MNT_NODIRATIME) && S_ISDIR(inode->i_mode)) | 1016 | if ((mnt->mnt_flags & MNT_NODIRATIME) && S_ISDIR(inode->i_mode)) |
| 1017 | return true; | 1017 | return true; |
| 1018 | 1018 | ||
| 1019 | if ((inode->i_sb->s_flags & MS_NODIRATIME) && S_ISDIR(inode->i_mode)) | 1019 | if ((inode->i_sb->s_flags & SB_NODIRATIME) && S_ISDIR(inode->i_mode)) |
| 1020 | return true; | 1020 | return true; |
| 1021 | 1021 | ||
| 1022 | return false; | 1022 | return false; |
diff --git a/drivers/staging/lustre/lustre/llite/llite_lib.c b/drivers/staging/lustre/lustre/llite/llite_lib.c index 65ac5128f005..8666f1e81ade 100644 --- a/drivers/staging/lustre/lustre/llite/llite_lib.c +++ b/drivers/staging/lustre/lustre/llite/llite_lib.c | |||
| @@ -313,11 +313,11 @@ static int client_common_fill_super(struct super_block *sb, char *md, char *dt, | |||
| 313 | } | 313 | } |
| 314 | 314 | ||
| 315 | if (data->ocd_connect_flags & OBD_CONNECT_ACL) { | 315 | if (data->ocd_connect_flags & OBD_CONNECT_ACL) { |
| 316 | sb->s_flags |= MS_POSIXACL; | 316 | sb->s_flags |= SB_POSIXACL; |
| 317 | sbi->ll_flags |= LL_SBI_ACL; | 317 | sbi->ll_flags |= LL_SBI_ACL; |
| 318 | } else { | 318 | } else { |
| 319 | LCONSOLE_INFO("client wants to enable acl, but mdt not!\n"); | 319 | LCONSOLE_INFO("client wants to enable acl, but mdt not!\n"); |
| 320 | sb->s_flags &= ~MS_POSIXACL; | 320 | sb->s_flags &= ~SB_POSIXACL; |
| 321 | sbi->ll_flags &= ~LL_SBI_ACL; | 321 | sbi->ll_flags &= ~LL_SBI_ACL; |
| 322 | } | 322 | } |
| 323 | 323 | ||
| @@ -660,7 +660,7 @@ void ll_kill_super(struct super_block *sb) | |||
| 660 | struct ll_sb_info *sbi; | 660 | struct ll_sb_info *sbi; |
| 661 | 661 | ||
| 662 | /* not init sb ?*/ | 662 | /* not init sb ?*/ |
| 663 | if (!(sb->s_flags & MS_ACTIVE)) | 663 | if (!(sb->s_flags & SB_ACTIVE)) |
| 664 | return; | 664 | return; |
| 665 | 665 | ||
| 666 | sbi = ll_s2sbi(sb); | 666 | sbi = ll_s2sbi(sb); |
| @@ -2039,8 +2039,8 @@ int ll_remount_fs(struct super_block *sb, int *flags, char *data) | |||
| 2039 | int err; | 2039 | int err; |
| 2040 | __u32 read_only; | 2040 | __u32 read_only; |
| 2041 | 2041 | ||
| 2042 | if ((bool)(*flags & MS_RDONLY) != sb_rdonly(sb)) { | 2042 | if ((bool)(*flags & SB_RDONLY) != sb_rdonly(sb)) { |
| 2043 | read_only = *flags & MS_RDONLY; | 2043 | read_only = *flags & SB_RDONLY; |
| 2044 | err = obd_set_info_async(NULL, sbi->ll_md_exp, | 2044 | err = obd_set_info_async(NULL, sbi->ll_md_exp, |
| 2045 | sizeof(KEY_READ_ONLY), | 2045 | sizeof(KEY_READ_ONLY), |
| 2046 | KEY_READ_ONLY, sizeof(read_only), | 2046 | KEY_READ_ONLY, sizeof(read_only), |
| @@ -2053,9 +2053,9 @@ int ll_remount_fs(struct super_block *sb, int *flags, char *data) | |||
| 2053 | } | 2053 | } |
| 2054 | 2054 | ||
| 2055 | if (read_only) | 2055 | if (read_only) |
| 2056 | sb->s_flags |= MS_RDONLY; | 2056 | sb->s_flags |= SB_RDONLY; |
| 2057 | else | 2057 | else |
| 2058 | sb->s_flags &= ~MS_RDONLY; | 2058 | sb->s_flags &= ~SB_RDONLY; |
| 2059 | 2059 | ||
| 2060 | if (sbi->ll_flags & LL_SBI_VERBOSE) | 2060 | if (sbi->ll_flags & LL_SBI_VERBOSE) |
| 2061 | LCONSOLE_WARN("Remounted %s %s\n", profilenm, | 2061 | LCONSOLE_WARN("Remounted %s %s\n", profilenm, |
diff --git a/drivers/staging/media/atomisp/include/linux/atomisp.h b/drivers/staging/media/atomisp/include/linux/atomisp.h index b5533197226d..15fa5679bae7 100644 --- a/drivers/staging/media/atomisp/include/linux/atomisp.h +++ b/drivers/staging/media/atomisp/include/linux/atomisp.h | |||
| @@ -208,14 +208,14 @@ struct atomisp_dis_vector { | |||
| 208 | }; | 208 | }; |
| 209 | 209 | ||
| 210 | 210 | ||
| 211 | /** DVS 2.0 Coefficient types. This structure contains 4 pointers to | 211 | /* DVS 2.0 Coefficient types. This structure contains 4 pointers to |
| 212 | * arrays that contain the coeffients for each type. | 212 | * arrays that contain the coeffients for each type. |
| 213 | */ | 213 | */ |
| 214 | struct atomisp_dvs2_coef_types { | 214 | struct atomisp_dvs2_coef_types { |
| 215 | short __user *odd_real; /**< real part of the odd coefficients*/ | 215 | short __user *odd_real; /** real part of the odd coefficients*/ |
| 216 | short __user *odd_imag; /**< imaginary part of the odd coefficients*/ | 216 | short __user *odd_imag; /** imaginary part of the odd coefficients*/ |
| 217 | short __user *even_real;/**< real part of the even coefficients*/ | 217 | short __user *even_real;/** real part of the even coefficients*/ |
| 218 | short __user *even_imag;/**< imaginary part of the even coefficients*/ | 218 | short __user *even_imag;/** imaginary part of the even coefficients*/ |
| 219 | }; | 219 | }; |
| 220 | 220 | ||
| 221 | /* | 221 | /* |
| @@ -223,10 +223,10 @@ struct atomisp_dvs2_coef_types { | |||
| 223 | * arrays that contain the statistics for each type. | 223 | * arrays that contain the statistics for each type. |
| 224 | */ | 224 | */ |
| 225 | struct atomisp_dvs2_stat_types { | 225 | struct atomisp_dvs2_stat_types { |
| 226 | int __user *odd_real; /**< real part of the odd statistics*/ | 226 | int __user *odd_real; /** real part of the odd statistics*/ |
| 227 | int __user *odd_imag; /**< imaginary part of the odd statistics*/ | 227 | int __user *odd_imag; /** imaginary part of the odd statistics*/ |
| 228 | int __user *even_real;/**< real part of the even statistics*/ | 228 | int __user *even_real;/** real part of the even statistics*/ |
| 229 | int __user *even_imag;/**< imaginary part of the even statistics*/ | 229 | int __user *even_imag;/** imaginary part of the even statistics*/ |
| 230 | }; | 230 | }; |
| 231 | 231 | ||
| 232 | struct atomisp_dis_coefficients { | 232 | struct atomisp_dis_coefficients { |
| @@ -390,16 +390,16 @@ struct atomisp_metadata_config { | |||
| 390 | * Generic resolution structure. | 390 | * Generic resolution structure. |
| 391 | */ | 391 | */ |
| 392 | struct atomisp_resolution { | 392 | struct atomisp_resolution { |
| 393 | uint32_t width; /**< Width */ | 393 | uint32_t width; /** Width */ |
| 394 | uint32_t height; /**< Height */ | 394 | uint32_t height; /** Height */ |
| 395 | }; | 395 | }; |
| 396 | 396 | ||
| 397 | /* | 397 | /* |
| 398 | * This specifies the coordinates (x,y) | 398 | * This specifies the coordinates (x,y) |
| 399 | */ | 399 | */ |
| 400 | struct atomisp_zoom_point { | 400 | struct atomisp_zoom_point { |
| 401 | int32_t x; /**< x coordinate */ | 401 | int32_t x; /** x coordinate */ |
| 402 | int32_t y; /**< y coordinate */ | 402 | int32_t y; /** y coordinate */ |
| 403 | }; | 403 | }; |
| 404 | 404 | ||
| 405 | /* | 405 | /* |
| @@ -411,9 +411,9 @@ struct atomisp_zoom_region { | |||
| 411 | }; | 411 | }; |
| 412 | 412 | ||
| 413 | struct atomisp_dz_config { | 413 | struct atomisp_dz_config { |
| 414 | uint32_t dx; /**< Horizontal zoom factor */ | 414 | uint32_t dx; /** Horizontal zoom factor */ |
| 415 | uint32_t dy; /**< Vertical zoom factor */ | 415 | uint32_t dy; /** Vertical zoom factor */ |
| 416 | struct atomisp_zoom_region zoom_region; /**< region for zoom */ | 416 | struct atomisp_zoom_region zoom_region; /** region for zoom */ |
| 417 | }; | 417 | }; |
| 418 | 418 | ||
| 419 | struct atomisp_parm { | 419 | struct atomisp_parm { |
| @@ -758,7 +758,7 @@ enum atomisp_acc_arg_type { | |||
| 758 | ATOMISP_ACC_ARG_FRAME /* Frame argument */ | 758 | ATOMISP_ACC_ARG_FRAME /* Frame argument */ |
| 759 | }; | 759 | }; |
| 760 | 760 | ||
| 761 | /** ISP memories, isp2400 */ | 761 | /* ISP memories, isp2400 */ |
| 762 | enum atomisp_acc_memory { | 762 | enum atomisp_acc_memory { |
| 763 | ATOMISP_ACC_MEMORY_PMEM0 = 0, | 763 | ATOMISP_ACC_MEMORY_PMEM0 = 0, |
| 764 | ATOMISP_ACC_MEMORY_DMEM0, | 764 | ATOMISP_ACC_MEMORY_DMEM0, |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/atomisp_cmd.c b/drivers/staging/media/atomisp/pci/atomisp2/atomisp_cmd.c index 8a18c528cad4..debf0e3853ff 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/atomisp_cmd.c +++ b/drivers/staging/media/atomisp/pci/atomisp2/atomisp_cmd.c | |||
| @@ -5187,7 +5187,7 @@ int get_frame_info_nop(struct atomisp_sub_device *asd, | |||
| 5187 | return 0; | 5187 | return 0; |
| 5188 | } | 5188 | } |
| 5189 | 5189 | ||
| 5190 | /** | 5190 | /* |
| 5191 | * Resets CSS parameters that depend on input resolution. | 5191 | * Resets CSS parameters that depend on input resolution. |
| 5192 | * | 5192 | * |
| 5193 | * Update params like CSS RAW binning, 2ppc mode and pp_input | 5193 | * Update params like CSS RAW binning, 2ppc mode and pp_input |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/atomisp_compat_css20.c b/drivers/staging/media/atomisp/pci/atomisp2/atomisp_compat_css20.c index 6e87aa5aab4c..b7f9da014641 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/atomisp_compat_css20.c +++ b/drivers/staging/media/atomisp/pci/atomisp2/atomisp_compat_css20.c | |||
| @@ -4051,7 +4051,7 @@ int atomisp_css_get_formats_config(struct atomisp_sub_device *asd, | |||
| 4051 | int atomisp_css_get_zoom_factor(struct atomisp_sub_device *asd, | 4051 | int atomisp_css_get_zoom_factor(struct atomisp_sub_device *asd, |
| 4052 | unsigned int *zoom) | 4052 | unsigned int *zoom) |
| 4053 | { | 4053 | { |
| 4054 | struct ia_css_dz_config dz_config; /**< Digital Zoom */ | 4054 | struct ia_css_dz_config dz_config; /** Digital Zoom */ |
| 4055 | struct ia_css_isp_config isp_config; | 4055 | struct ia_css_isp_config isp_config; |
| 4056 | struct atomisp_device *isp = asd->isp; | 4056 | struct atomisp_device *isp = asd->isp; |
| 4057 | 4057 | ||
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/atomisp_compat_ioctl32.h b/drivers/staging/media/atomisp/pci/atomisp2/atomisp_compat_ioctl32.h index 685da0f48bab..95669eedaad1 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/atomisp_compat_ioctl32.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/atomisp_compat_ioctl32.h | |||
| @@ -28,17 +28,17 @@ struct atomisp_histogram32 { | |||
| 28 | }; | 28 | }; |
| 29 | 29 | ||
| 30 | struct atomisp_dvs2_stat_types32 { | 30 | struct atomisp_dvs2_stat_types32 { |
| 31 | compat_uptr_t odd_real; /**< real part of the odd statistics*/ | 31 | compat_uptr_t odd_real; /** real part of the odd statistics*/ |
| 32 | compat_uptr_t odd_imag; /**< imaginary part of the odd statistics*/ | 32 | compat_uptr_t odd_imag; /** imaginary part of the odd statistics*/ |
| 33 | compat_uptr_t even_real;/**< real part of the even statistics*/ | 33 | compat_uptr_t even_real;/** real part of the even statistics*/ |
| 34 | compat_uptr_t even_imag;/**< imaginary part of the even statistics*/ | 34 | compat_uptr_t even_imag;/** imaginary part of the even statistics*/ |
| 35 | }; | 35 | }; |
| 36 | 36 | ||
| 37 | struct atomisp_dvs2_coef_types32 { | 37 | struct atomisp_dvs2_coef_types32 { |
| 38 | compat_uptr_t odd_real; /**< real part of the odd coefficients*/ | 38 | compat_uptr_t odd_real; /** real part of the odd coefficients*/ |
| 39 | compat_uptr_t odd_imag; /**< imaginary part of the odd coefficients*/ | 39 | compat_uptr_t odd_imag; /** imaginary part of the odd coefficients*/ |
| 40 | compat_uptr_t even_real;/**< real part of the even coefficients*/ | 40 | compat_uptr_t even_real;/** real part of the even coefficients*/ |
| 41 | compat_uptr_t even_imag;/**< imaginary part of the even coefficients*/ | 41 | compat_uptr_t even_imag;/** imaginary part of the even coefficients*/ |
| 42 | }; | 42 | }; |
| 43 | 43 | ||
| 44 | struct atomisp_dvs2_statistics32 { | 44 | struct atomisp_dvs2_statistics32 { |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/atomisp_subdev.h b/drivers/staging/media/atomisp/pci/atomisp2/atomisp_subdev.h index f3d61827ae8c..c3eba675da06 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/atomisp_subdev.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/atomisp_subdev.h | |||
| @@ -223,7 +223,7 @@ struct atomisp_subdev_params { | |||
| 223 | 223 | ||
| 224 | bool dis_proj_data_valid; | 224 | bool dis_proj_data_valid; |
| 225 | 225 | ||
| 226 | struct ia_css_dz_config dz_config; /**< Digital Zoom */ | 226 | struct ia_css_dz_config dz_config; /** Digital Zoom */ |
| 227 | struct ia_css_capture_config capture_config; | 227 | struct ia_css_capture_config capture_config; |
| 228 | 228 | ||
| 229 | struct atomisp_css_isp_config config; | 229 | struct atomisp_css_isp_config config; |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/base/circbuf/src/circbuf.c b/drivers/staging/media/atomisp/pci/atomisp2/css2400/base/circbuf/src/circbuf.c index 19bae1610fb6..050d60f0894f 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/base/circbuf/src/circbuf.c +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/base/circbuf/src/circbuf.c | |||
| @@ -21,7 +21,7 @@ | |||
| 21 | * Forward declarations. | 21 | * Forward declarations. |
| 22 | * | 22 | * |
| 23 | **********************************************************************/ | 23 | **********************************************************************/ |
| 24 | /** | 24 | /* |
| 25 | * @brief Read the oldest element from the circular buffer. | 25 | * @brief Read the oldest element from the circular buffer. |
| 26 | * Read the oldest element WITHOUT checking whehter the | 26 | * Read the oldest element WITHOUT checking whehter the |
| 27 | * circular buffer is empty or not. The oldest element is | 27 | * circular buffer is empty or not. The oldest element is |
| @@ -34,7 +34,7 @@ | |||
| 34 | static inline ia_css_circbuf_elem_t | 34 | static inline ia_css_circbuf_elem_t |
| 35 | ia_css_circbuf_read(ia_css_circbuf_t *cb); | 35 | ia_css_circbuf_read(ia_css_circbuf_t *cb); |
| 36 | 36 | ||
| 37 | /** | 37 | /* |
| 38 | * @brief Shift a chunk of elements in the circular buffer. | 38 | * @brief Shift a chunk of elements in the circular buffer. |
| 39 | * A chunk of elements (i.e. the ones from the "start" position | 39 | * A chunk of elements (i.e. the ones from the "start" position |
| 40 | * to the "chunk_src" position) are shifted in the circular buffer, | 40 | * to the "chunk_src" position) are shifted in the circular buffer, |
| @@ -48,7 +48,7 @@ static inline void ia_css_circbuf_shift_chunk(ia_css_circbuf_t *cb, | |||
| 48 | uint32_t chunk_src, | 48 | uint32_t chunk_src, |
| 49 | uint32_t chunk_dest); | 49 | uint32_t chunk_dest); |
| 50 | 50 | ||
| 51 | /** | 51 | /* |
| 52 | * @brief Get the "val" field in the element. | 52 | * @brief Get the "val" field in the element. |
| 53 | * | 53 | * |
| 54 | * @param elem The pointer to the element. | 54 | * @param elem The pointer to the element. |
| @@ -63,7 +63,7 @@ ia_css_circbuf_elem_get_val(ia_css_circbuf_elem_t *elem); | |||
| 63 | * Non-inline functions. | 63 | * Non-inline functions. |
| 64 | * | 64 | * |
| 65 | **********************************************************************/ | 65 | **********************************************************************/ |
| 66 | /** | 66 | /* |
| 67 | * @brief Create the circular buffer. | 67 | * @brief Create the circular buffer. |
| 68 | * Refer to "ia_css_circbuf.h" for details. | 68 | * Refer to "ia_css_circbuf.h" for details. |
| 69 | */ | 69 | */ |
| @@ -88,7 +88,7 @@ ia_css_circbuf_create(ia_css_circbuf_t *cb, | |||
| 88 | cb->elems = elems; | 88 | cb->elems = elems; |
| 89 | } | 89 | } |
| 90 | 90 | ||
| 91 | /** | 91 | /* |
| 92 | * @brief Destroy the circular buffer. | 92 | * @brief Destroy the circular buffer. |
| 93 | * Refer to "ia_css_circbuf.h" for details. | 93 | * Refer to "ia_css_circbuf.h" for details. |
| 94 | */ | 94 | */ |
| @@ -99,7 +99,7 @@ void ia_css_circbuf_destroy(ia_css_circbuf_t *cb) | |||
| 99 | cb->elems = NULL; | 99 | cb->elems = NULL; |
| 100 | } | 100 | } |
| 101 | 101 | ||
| 102 | /** | 102 | /* |
| 103 | * @brief Pop a value out of the circular buffer. | 103 | * @brief Pop a value out of the circular buffer. |
| 104 | * Refer to "ia_css_circbuf.h" for details. | 104 | * Refer to "ia_css_circbuf.h" for details. |
| 105 | */ | 105 | */ |
| @@ -116,7 +116,7 @@ uint32_t ia_css_circbuf_pop(ia_css_circbuf_t *cb) | |||
| 116 | return ret; | 116 | return ret; |
| 117 | } | 117 | } |
| 118 | 118 | ||
| 119 | /** | 119 | /* |
| 120 | * @brief Extract a value out of the circular buffer. | 120 | * @brief Extract a value out of the circular buffer. |
| 121 | * Refer to "ia_css_circbuf.h" for details. | 121 | * Refer to "ia_css_circbuf.h" for details. |
| 122 | */ | 122 | */ |
| @@ -166,7 +166,7 @@ uint32_t ia_css_circbuf_extract(ia_css_circbuf_t *cb, int offset) | |||
| 166 | return val; | 166 | return val; |
| 167 | } | 167 | } |
| 168 | 168 | ||
| 169 | /** | 169 | /* |
| 170 | * @brief Peek an element from the circular buffer. | 170 | * @brief Peek an element from the circular buffer. |
| 171 | * Refer to "ia_css_circbuf.h" for details. | 171 | * Refer to "ia_css_circbuf.h" for details. |
| 172 | */ | 172 | */ |
| @@ -180,7 +180,7 @@ uint32_t ia_css_circbuf_peek(ia_css_circbuf_t *cb, int offset) | |||
| 180 | return cb->elems[pos].val; | 180 | return cb->elems[pos].val; |
| 181 | } | 181 | } |
| 182 | 182 | ||
| 183 | /** | 183 | /* |
| 184 | * @brief Get the value of an element from the circular buffer. | 184 | * @brief Get the value of an element from the circular buffer. |
| 185 | * Refer to "ia_css_circbuf.h" for details. | 185 | * Refer to "ia_css_circbuf.h" for details. |
| 186 | */ | 186 | */ |
| @@ -194,7 +194,7 @@ uint32_t ia_css_circbuf_peek_from_start(ia_css_circbuf_t *cb, int offset) | |||
| 194 | return cb->elems[pos].val; | 194 | return cb->elems[pos].val; |
| 195 | } | 195 | } |
| 196 | 196 | ||
| 197 | /** @brief increase size of a circular buffer. | 197 | /* @brief increase size of a circular buffer. |
| 198 | * Use 'CAUTION' before using this function. This was added to | 198 | * Use 'CAUTION' before using this function. This was added to |
| 199 | * support / fix issue with increasing size for tagger only | 199 | * support / fix issue with increasing size for tagger only |
| 200 | * Please refer to "ia_css_circbuf.h" for details. | 200 | * Please refer to "ia_css_circbuf.h" for details. |
| @@ -252,7 +252,7 @@ bool ia_css_circbuf_increase_size( | |||
| 252 | * Inline functions. | 252 | * Inline functions. |
| 253 | * | 253 | * |
| 254 | ****************************************************************/ | 254 | ****************************************************************/ |
| 255 | /** | 255 | /* |
| 256 | * @brief Get the "val" field in the element. | 256 | * @brief Get the "val" field in the element. |
| 257 | * Refer to "Forward declarations" for details. | 257 | * Refer to "Forward declarations" for details. |
| 258 | */ | 258 | */ |
| @@ -262,7 +262,7 @@ ia_css_circbuf_elem_get_val(ia_css_circbuf_elem_t *elem) | |||
| 262 | return elem->val; | 262 | return elem->val; |
| 263 | } | 263 | } |
| 264 | 264 | ||
| 265 | /** | 265 | /* |
| 266 | * @brief Read the oldest element from the circular buffer. | 266 | * @brief Read the oldest element from the circular buffer. |
| 267 | * Refer to "Forward declarations" for details. | 267 | * Refer to "Forward declarations" for details. |
| 268 | */ | 268 | */ |
| @@ -282,7 +282,7 @@ ia_css_circbuf_read(ia_css_circbuf_t *cb) | |||
| 282 | return elem; | 282 | return elem; |
| 283 | } | 283 | } |
| 284 | 284 | ||
| 285 | /** | 285 | /* |
| 286 | * @brief Shift a chunk of elements in the circular buffer. | 286 | * @brief Shift a chunk of elements in the circular buffer. |
| 287 | * Refer to "Forward declarations" for details. | 287 | * Refer to "Forward declarations" for details. |
| 288 | */ | 288 | */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/camera/pipe/interface/ia_css_pipe_binarydesc.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/camera/pipe/interface/ia_css_pipe_binarydesc.h index 616789d9b3f6..a6d650a9a1f4 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/camera/pipe/interface/ia_css_pipe_binarydesc.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/camera/pipe/interface/ia_css_pipe_binarydesc.h | |||
| @@ -19,7 +19,7 @@ | |||
| 19 | #include <ia_css_frame_public.h> /* ia_css_frame_info */ | 19 | #include <ia_css_frame_public.h> /* ia_css_frame_info */ |
| 20 | #include <ia_css_binary.h> /* ia_css_binary_descr */ | 20 | #include <ia_css_binary.h> /* ia_css_binary_descr */ |
| 21 | 21 | ||
| 22 | /** @brief Get a binary descriptor for copy. | 22 | /* @brief Get a binary descriptor for copy. |
| 23 | * | 23 | * |
| 24 | * @param[in] pipe | 24 | * @param[in] pipe |
| 25 | * @param[out] copy_desc | 25 | * @param[out] copy_desc |
| @@ -36,7 +36,7 @@ extern void ia_css_pipe_get_copy_binarydesc( | |||
| 36 | struct ia_css_frame_info *out_info, | 36 | struct ia_css_frame_info *out_info, |
| 37 | struct ia_css_frame_info *vf_info); | 37 | struct ia_css_frame_info *vf_info); |
| 38 | 38 | ||
| 39 | /** @brief Get a binary descriptor for vfpp. | 39 | /* @brief Get a binary descriptor for vfpp. |
| 40 | * | 40 | * |
| 41 | * @param[in] pipe | 41 | * @param[in] pipe |
| 42 | * @param[out] vfpp_descr | 42 | * @param[out] vfpp_descr |
| @@ -51,7 +51,7 @@ extern void ia_css_pipe_get_vfpp_binarydesc( | |||
| 51 | struct ia_css_frame_info *in_info, | 51 | struct ia_css_frame_info *in_info, |
| 52 | struct ia_css_frame_info *out_info); | 52 | struct ia_css_frame_info *out_info); |
| 53 | 53 | ||
| 54 | /** @brief Get numerator and denominator of bayer downscaling factor. | 54 | /* @brief Get numerator and denominator of bayer downscaling factor. |
| 55 | * | 55 | * |
| 56 | * @param[in] bds_factor: The bayer downscaling factor. | 56 | * @param[in] bds_factor: The bayer downscaling factor. |
| 57 | * (= The bds_factor member in the sh_css_bds_factor structure.) | 57 | * (= The bds_factor member in the sh_css_bds_factor structure.) |
| @@ -67,7 +67,7 @@ extern enum ia_css_err sh_css_bds_factor_get_numerator_denominator( | |||
| 67 | unsigned int *bds_factor_numerator, | 67 | unsigned int *bds_factor_numerator, |
| 68 | unsigned int *bds_factor_denominator); | 68 | unsigned int *bds_factor_denominator); |
| 69 | 69 | ||
| 70 | /** @brief Get a binary descriptor for preview stage. | 70 | /* @brief Get a binary descriptor for preview stage. |
| 71 | * | 71 | * |
| 72 | * @param[in] pipe | 72 | * @param[in] pipe |
| 73 | * @param[out] preview_descr | 73 | * @param[out] preview_descr |
| @@ -86,7 +86,7 @@ extern enum ia_css_err ia_css_pipe_get_preview_binarydesc( | |||
| 86 | struct ia_css_frame_info *out_info, | 86 | struct ia_css_frame_info *out_info, |
| 87 | struct ia_css_frame_info *vf_info); | 87 | struct ia_css_frame_info *vf_info); |
| 88 | 88 | ||
| 89 | /** @brief Get a binary descriptor for video stage. | 89 | /* @brief Get a binary descriptor for video stage. |
| 90 | * | 90 | * |
| 91 | * @param[in/out] pipe | 91 | * @param[in/out] pipe |
| 92 | * @param[out] video_descr | 92 | * @param[out] video_descr |
| @@ -105,7 +105,7 @@ extern enum ia_css_err ia_css_pipe_get_video_binarydesc( | |||
| 105 | struct ia_css_frame_info *vf_info, | 105 | struct ia_css_frame_info *vf_info, |
| 106 | int stream_config_left_padding); | 106 | int stream_config_left_padding); |
| 107 | 107 | ||
| 108 | /** @brief Get a binary descriptor for yuv scaler stage. | 108 | /* @brief Get a binary descriptor for yuv scaler stage. |
| 109 | * | 109 | * |
| 110 | * @param[in/out] pipe | 110 | * @param[in/out] pipe |
| 111 | * @param[out] yuv_scaler_descr | 111 | * @param[out] yuv_scaler_descr |
| @@ -124,7 +124,7 @@ void ia_css_pipe_get_yuvscaler_binarydesc( | |||
| 124 | struct ia_css_frame_info *internal_out_info, | 124 | struct ia_css_frame_info *internal_out_info, |
| 125 | struct ia_css_frame_info *vf_info); | 125 | struct ia_css_frame_info *vf_info); |
| 126 | 126 | ||
| 127 | /** @brief Get a binary descriptor for capture pp stage. | 127 | /* @brief Get a binary descriptor for capture pp stage. |
| 128 | * | 128 | * |
| 129 | * @param[in/out] pipe | 129 | * @param[in/out] pipe |
| 130 | * @param[out] capture_pp_descr | 130 | * @param[out] capture_pp_descr |
| @@ -140,7 +140,7 @@ extern void ia_css_pipe_get_capturepp_binarydesc( | |||
| 140 | struct ia_css_frame_info *out_info, | 140 | struct ia_css_frame_info *out_info, |
| 141 | struct ia_css_frame_info *vf_info); | 141 | struct ia_css_frame_info *vf_info); |
| 142 | 142 | ||
| 143 | /** @brief Get a binary descriptor for primary capture. | 143 | /* @brief Get a binary descriptor for primary capture. |
| 144 | * | 144 | * |
| 145 | * @param[in] pipe | 145 | * @param[in] pipe |
| 146 | * @param[out] prim_descr | 146 | * @param[out] prim_descr |
| @@ -158,7 +158,7 @@ extern void ia_css_pipe_get_primary_binarydesc( | |||
| 158 | struct ia_css_frame_info *vf_info, | 158 | struct ia_css_frame_info *vf_info, |
| 159 | unsigned int stage_idx); | 159 | unsigned int stage_idx); |
| 160 | 160 | ||
| 161 | /** @brief Get a binary descriptor for pre gdc stage. | 161 | /* @brief Get a binary descriptor for pre gdc stage. |
| 162 | * | 162 | * |
| 163 | * @param[in] pipe | 163 | * @param[in] pipe |
| 164 | * @param[out] pre_gdc_descr | 164 | * @param[out] pre_gdc_descr |
| @@ -173,7 +173,7 @@ extern void ia_css_pipe_get_pre_gdc_binarydesc( | |||
| 173 | struct ia_css_frame_info *in_info, | 173 | struct ia_css_frame_info *in_info, |
| 174 | struct ia_css_frame_info *out_info); | 174 | struct ia_css_frame_info *out_info); |
| 175 | 175 | ||
| 176 | /** @brief Get a binary descriptor for gdc stage. | 176 | /* @brief Get a binary descriptor for gdc stage. |
| 177 | * | 177 | * |
| 178 | * @param[in] pipe | 178 | * @param[in] pipe |
| 179 | * @param[out] gdc_descr | 179 | * @param[out] gdc_descr |
| @@ -188,7 +188,7 @@ extern void ia_css_pipe_get_gdc_binarydesc( | |||
| 188 | struct ia_css_frame_info *in_info, | 188 | struct ia_css_frame_info *in_info, |
| 189 | struct ia_css_frame_info *out_info); | 189 | struct ia_css_frame_info *out_info); |
| 190 | 190 | ||
| 191 | /** @brief Get a binary descriptor for post gdc. | 191 | /* @brief Get a binary descriptor for post gdc. |
| 192 | * | 192 | * |
| 193 | * @param[in] pipe | 193 | * @param[in] pipe |
| 194 | * @param[out] post_gdc_descr | 194 | * @param[out] post_gdc_descr |
| @@ -205,7 +205,7 @@ extern void ia_css_pipe_get_post_gdc_binarydesc( | |||
| 205 | struct ia_css_frame_info *out_info, | 205 | struct ia_css_frame_info *out_info, |
| 206 | struct ia_css_frame_info *vf_info); | 206 | struct ia_css_frame_info *vf_info); |
| 207 | 207 | ||
| 208 | /** @brief Get a binary descriptor for de. | 208 | /* @brief Get a binary descriptor for de. |
| 209 | * | 209 | * |
| 210 | * @param[in] pipe | 210 | * @param[in] pipe |
| 211 | * @param[out] pre_de_descr | 211 | * @param[out] pre_de_descr |
| @@ -220,7 +220,7 @@ extern void ia_css_pipe_get_pre_de_binarydesc( | |||
| 220 | struct ia_css_frame_info *in_info, | 220 | struct ia_css_frame_info *in_info, |
| 221 | struct ia_css_frame_info *out_info); | 221 | struct ia_css_frame_info *out_info); |
| 222 | 222 | ||
| 223 | /** @brief Get a binary descriptor for pre anr stage. | 223 | /* @brief Get a binary descriptor for pre anr stage. |
| 224 | * | 224 | * |
| 225 | * @param[in] pipe | 225 | * @param[in] pipe |
| 226 | * @param[out] pre_anr_descr | 226 | * @param[out] pre_anr_descr |
| @@ -235,7 +235,7 @@ extern void ia_css_pipe_get_pre_anr_binarydesc( | |||
| 235 | struct ia_css_frame_info *in_info, | 235 | struct ia_css_frame_info *in_info, |
| 236 | struct ia_css_frame_info *out_info); | 236 | struct ia_css_frame_info *out_info); |
| 237 | 237 | ||
| 238 | /** @brief Get a binary descriptor for ANR stage. | 238 | /* @brief Get a binary descriptor for ANR stage. |
| 239 | * | 239 | * |
| 240 | * @param[in] pipe | 240 | * @param[in] pipe |
| 241 | * @param[out] anr_descr | 241 | * @param[out] anr_descr |
| @@ -250,7 +250,7 @@ extern void ia_css_pipe_get_anr_binarydesc( | |||
| 250 | struct ia_css_frame_info *in_info, | 250 | struct ia_css_frame_info *in_info, |
| 251 | struct ia_css_frame_info *out_info); | 251 | struct ia_css_frame_info *out_info); |
| 252 | 252 | ||
| 253 | /** @brief Get a binary descriptor for post anr stage. | 253 | /* @brief Get a binary descriptor for post anr stage. |
| 254 | * | 254 | * |
| 255 | * @param[in] pipe | 255 | * @param[in] pipe |
| 256 | * @param[out] post_anr_descr | 256 | * @param[out] post_anr_descr |
| @@ -267,7 +267,7 @@ extern void ia_css_pipe_get_post_anr_binarydesc( | |||
| 267 | struct ia_css_frame_info *out_info, | 267 | struct ia_css_frame_info *out_info, |
| 268 | struct ia_css_frame_info *vf_info); | 268 | struct ia_css_frame_info *vf_info); |
| 269 | 269 | ||
| 270 | /** @brief Get a binary descriptor for ldc stage. | 270 | /* @brief Get a binary descriptor for ldc stage. |
| 271 | * | 271 | * |
| 272 | * @param[in/out] pipe | 272 | * @param[in/out] pipe |
| 273 | * @param[out] capture_pp_descr | 273 | * @param[out] capture_pp_descr |
| @@ -282,7 +282,7 @@ extern void ia_css_pipe_get_ldc_binarydesc( | |||
| 282 | struct ia_css_frame_info *in_info, | 282 | struct ia_css_frame_info *in_info, |
| 283 | struct ia_css_frame_info *out_info); | 283 | struct ia_css_frame_info *out_info); |
| 284 | 284 | ||
| 285 | /** @brief Calculates the required BDS factor | 285 | /* @brief Calculates the required BDS factor |
| 286 | * | 286 | * |
| 287 | * @param[in] input_res | 287 | * @param[in] input_res |
| 288 | * @param[in] output_res | 288 | * @param[in] output_res |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/camera/pipe/interface/ia_css_pipe_util.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/camera/pipe/interface/ia_css_pipe_util.h index ba8858759b30..155b6fb4722b 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/camera/pipe/interface/ia_css_pipe_util.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/camera/pipe/interface/ia_css_pipe_util.h | |||
| @@ -18,7 +18,7 @@ | |||
| 18 | #include <ia_css_types.h> | 18 | #include <ia_css_types.h> |
| 19 | #include <ia_css_frame_public.h> | 19 | #include <ia_css_frame_public.h> |
| 20 | 20 | ||
| 21 | /** @brief Get Input format bits per pixel based on stream configuration of this | 21 | /* @brief Get Input format bits per pixel based on stream configuration of this |
| 22 | * pipe. | 22 | * pipe. |
| 23 | * | 23 | * |
| 24 | * @param[in] pipe | 24 | * @param[in] pipe |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/camera/util/interface/ia_css_util.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/camera/util/interface/ia_css_util.h index f8b2e458f876..a8c27676a38b 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/camera/util/interface/ia_css_util.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/camera/util/interface/ia_css_util.h | |||
| @@ -22,7 +22,7 @@ | |||
| 22 | #include <ia_css_stream_public.h> | 22 | #include <ia_css_stream_public.h> |
| 23 | #include <ia_css_stream_format.h> | 23 | #include <ia_css_stream_format.h> |
| 24 | 24 | ||
| 25 | /** @brief convert "errno" error code to "ia_css_err" error code | 25 | /* @brief convert "errno" error code to "ia_css_err" error code |
| 26 | * | 26 | * |
| 27 | * @param[in] "errno" error code | 27 | * @param[in] "errno" error code |
| 28 | * @return "ia_css_err" error code | 28 | * @return "ia_css_err" error code |
| @@ -31,7 +31,7 @@ | |||
| 31 | enum ia_css_err ia_css_convert_errno( | 31 | enum ia_css_err ia_css_convert_errno( |
| 32 | int in_err); | 32 | int in_err); |
| 33 | 33 | ||
| 34 | /** @brief check vf frame info. | 34 | /* @brief check vf frame info. |
| 35 | * | 35 | * |
| 36 | * @param[in] info | 36 | * @param[in] info |
| 37 | * @return IA_CSS_SUCCESS or error code upon error. | 37 | * @return IA_CSS_SUCCESS or error code upon error. |
| @@ -40,7 +40,7 @@ enum ia_css_err ia_css_convert_errno( | |||
| 40 | extern enum ia_css_err ia_css_util_check_vf_info( | 40 | extern enum ia_css_err ia_css_util_check_vf_info( |
| 41 | const struct ia_css_frame_info * const info); | 41 | const struct ia_css_frame_info * const info); |
| 42 | 42 | ||
| 43 | /** @brief check input configuration. | 43 | /* @brief check input configuration. |
| 44 | * | 44 | * |
| 45 | * @param[in] stream_config | 45 | * @param[in] stream_config |
| 46 | * @param[in] must_be_raw | 46 | * @param[in] must_be_raw |
| @@ -52,7 +52,7 @@ extern enum ia_css_err ia_css_util_check_input( | |||
| 52 | bool must_be_raw, | 52 | bool must_be_raw, |
| 53 | bool must_be_yuv); | 53 | bool must_be_yuv); |
| 54 | 54 | ||
| 55 | /** @brief check vf and out frame info. | 55 | /* @brief check vf and out frame info. |
| 56 | * | 56 | * |
| 57 | * @param[in] out_info | 57 | * @param[in] out_info |
| 58 | * @param[in] vf_info | 58 | * @param[in] vf_info |
| @@ -63,7 +63,7 @@ extern enum ia_css_err ia_css_util_check_vf_out_info( | |||
| 63 | const struct ia_css_frame_info * const out_info, | 63 | const struct ia_css_frame_info * const out_info, |
| 64 | const struct ia_css_frame_info * const vf_info); | 64 | const struct ia_css_frame_info * const vf_info); |
| 65 | 65 | ||
| 66 | /** @brief check width and height | 66 | /* @brief check width and height |
| 67 | * | 67 | * |
| 68 | * @param[in] width | 68 | * @param[in] width |
| 69 | * @param[in] height | 69 | * @param[in] height |
| @@ -75,7 +75,7 @@ extern enum ia_css_err ia_css_util_check_res( | |||
| 75 | unsigned int height); | 75 | unsigned int height); |
| 76 | 76 | ||
| 77 | #ifdef ISP2401 | 77 | #ifdef ISP2401 |
| 78 | /** @brief compare resolutions (less or equal) | 78 | /* @brief compare resolutions (less or equal) |
| 79 | * | 79 | * |
| 80 | * @param[in] a resolution | 80 | * @param[in] a resolution |
| 81 | * @param[in] b resolution | 81 | * @param[in] b resolution |
| @@ -108,7 +108,7 @@ extern bool ia_css_util_resolution_is_even( | |||
| 108 | const struct ia_css_resolution resolution); | 108 | const struct ia_css_resolution resolution); |
| 109 | 109 | ||
| 110 | #endif | 110 | #endif |
| 111 | /** @brief check width and height | 111 | /* @brief check width and height |
| 112 | * | 112 | * |
| 113 | * @param[in] stream_format | 113 | * @param[in] stream_format |
| 114 | * @param[in] two_ppc | 114 | * @param[in] two_ppc |
| @@ -119,7 +119,7 @@ extern unsigned int ia_css_util_input_format_bpp( | |||
| 119 | enum ia_css_stream_format stream_format, | 119 | enum ia_css_stream_format stream_format, |
| 120 | bool two_ppc); | 120 | bool two_ppc); |
| 121 | 121 | ||
| 122 | /** @brief check if input format it raw | 122 | /* @brief check if input format it raw |
| 123 | * | 123 | * |
| 124 | * @param[in] stream_format | 124 | * @param[in] stream_format |
| 125 | * @return true if the input format is raw or false otherwise | 125 | * @return true if the input format is raw or false otherwise |
| @@ -128,7 +128,7 @@ extern unsigned int ia_css_util_input_format_bpp( | |||
| 128 | extern bool ia_css_util_is_input_format_raw( | 128 | extern bool ia_css_util_is_input_format_raw( |
| 129 | enum ia_css_stream_format stream_format); | 129 | enum ia_css_stream_format stream_format); |
| 130 | 130 | ||
| 131 | /** @brief check if input format it yuv | 131 | /* @brief check if input format it yuv |
| 132 | * | 132 | * |
| 133 | * @param[in] stream_format | 133 | * @param[in] stream_format |
| 134 | * @return true if the input format is yuv or false otherwise | 134 | * @return true if the input format is yuv or false otherwise |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_2401_csi2p_system/host/csi_rx_private.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_2401_csi2p_system/host/csi_rx_private.h index 6720ab55d6f5..9c0cb4a63862 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_2401_csi2p_system/host/csi_rx_private.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_2401_csi2p_system/host/csi_rx_private.h | |||
| @@ -277,6 +277,6 @@ static inline void csi_rx_be_ctrl_reg_store( | |||
| 277 | 277 | ||
| 278 | ia_css_device_store_uint32(CSI_RX_BE_CTRL_BASE[ID] + reg*sizeof(hrt_data), value); | 278 | ia_css_device_store_uint32(CSI_RX_BE_CTRL_BASE[ID] + reg*sizeof(hrt_data), value); |
| 279 | } | 279 | } |
| 280 | /** end of DLI */ | 280 | /* end of DLI */ |
| 281 | 281 | ||
| 282 | #endif /* __CSI_RX_PRIVATE_H_INCLUDED__ */ | 282 | #endif /* __CSI_RX_PRIVATE_H_INCLUDED__ */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_2401_csi2p_system/host/ibuf_ctrl_private.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_2401_csi2p_system/host/ibuf_ctrl_private.h index 470c92d287fe..4d07c2fe1469 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_2401_csi2p_system/host/ibuf_ctrl_private.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_2401_csi2p_system/host/ibuf_ctrl_private.h | |||
| @@ -192,7 +192,7 @@ STORAGE_CLASS_IBUF_CTRL_C void ibuf_ctrl_dump_state( | |||
| 192 | ia_css_print("IBUF controller ID %d Process ID %d isp_sync_state 0x%x\n", ID, i, state->proc_state[i].isp_sync_state); | 192 | ia_css_print("IBUF controller ID %d Process ID %d isp_sync_state 0x%x\n", ID, i, state->proc_state[i].isp_sync_state); |
| 193 | } | 193 | } |
| 194 | } | 194 | } |
| 195 | /** end of NCI */ | 195 | /* end of NCI */ |
| 196 | 196 | ||
| 197 | /***************************************************** | 197 | /***************************************************** |
| 198 | * | 198 | * |
| @@ -227,7 +227,7 @@ STORAGE_CLASS_IBUF_CTRL_C void ibuf_ctrl_reg_store( | |||
| 227 | 227 | ||
| 228 | ia_css_device_store_uint32(IBUF_CTRL_BASE[ID] + reg*sizeof(hrt_data), value); | 228 | ia_css_device_store_uint32(IBUF_CTRL_BASE[ID] + reg*sizeof(hrt_data), value); |
| 229 | } | 229 | } |
| 230 | /** end of DLI */ | 230 | /* end of DLI */ |
| 231 | 231 | ||
| 232 | 232 | ||
| 233 | #endif /* __IBUF_CTRL_PRIVATE_H_INCLUDED__ */ | 233 | #endif /* __IBUF_CTRL_PRIVATE_H_INCLUDED__ */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_2401_csi2p_system/host/isys_irq.c b/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_2401_csi2p_system/host/isys_irq.c index 14d1d3b627a9..842ae340ae13 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_2401_csi2p_system/host/isys_irq.c +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_2401_csi2p_system/host/isys_irq.c | |||
| @@ -26,7 +26,7 @@ | |||
| 26 | #include "isys_irq_private.h" | 26 | #include "isys_irq_private.h" |
| 27 | #endif | 27 | #endif |
| 28 | 28 | ||
| 29 | /** Public interface */ | 29 | /* Public interface */ |
| 30 | STORAGE_CLASS_ISYS2401_IRQ_C void isys_irqc_status_enable( | 30 | STORAGE_CLASS_ISYS2401_IRQ_C void isys_irqc_status_enable( |
| 31 | const isys_irq_ID_t isys_irqc_id) | 31 | const isys_irq_ID_t isys_irqc_id) |
| 32 | { | 32 | { |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_2401_csi2p_system/host/isys_irq_private.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_2401_csi2p_system/host/isys_irq_private.h index c17ce131c9e1..e69f39893bd2 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_2401_csi2p_system/host/isys_irq_private.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_2401_csi2p_system/host/isys_irq_private.h | |||
| @@ -59,7 +59,7 @@ STORAGE_CLASS_ISYS2401_IRQ_C void isys_irqc_state_dump( | |||
| 59 | state->status, state->edge, state->mask, state->enable, state->level_no); | 59 | state->status, state->edge, state->mask, state->enable, state->level_no); |
| 60 | } | 60 | } |
| 61 | 61 | ||
| 62 | /** end of NCI */ | 62 | /* end of NCI */ |
| 63 | 63 | ||
| 64 | /* -------------------------------------------------------+ | 64 | /* -------------------------------------------------------+ |
| 65 | | Device level interface (DLI) | | 65 | | Device level interface (DLI) | |
| @@ -101,7 +101,7 @@ STORAGE_CLASS_ISYS2401_IRQ_C hrt_data isys_irqc_reg_load( | |||
| 101 | return value; | 101 | return value; |
| 102 | } | 102 | } |
| 103 | 103 | ||
| 104 | /** end of DLI */ | 104 | /* end of DLI */ |
| 105 | 105 | ||
| 106 | #endif /* defined(USE_INPUT_SYSTEM_VERSION_2401) */ | 106 | #endif /* defined(USE_INPUT_SYSTEM_VERSION_2401) */ |
| 107 | 107 | ||
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_2401_csi2p_system/host/isys_stream2mmio_private.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_2401_csi2p_system/host/isys_stream2mmio_private.h index 1603a09b621a..f946105ddf43 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_2401_csi2p_system/host/isys_stream2mmio_private.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_2401_csi2p_system/host/isys_stream2mmio_private.h | |||
| @@ -122,7 +122,7 @@ STORAGE_CLASS_STREAM2MMIO_C void stream2mmio_dump_state( | |||
| 122 | stream2mmio_print_sid_state(&(state->sid_state[i])); | 122 | stream2mmio_print_sid_state(&(state->sid_state[i])); |
| 123 | } | 123 | } |
| 124 | } | 124 | } |
| 125 | /** end of NCI */ | 125 | /* end of NCI */ |
| 126 | 126 | ||
| 127 | /***************************************************** | 127 | /***************************************************** |
| 128 | * | 128 | * |
| @@ -163,6 +163,6 @@ STORAGE_CLASS_STREAM2MMIO_C void stream2mmio_reg_store( | |||
| 163 | ia_css_device_store_uint32(STREAM2MMIO_CTRL_BASE[ID] + | 163 | ia_css_device_store_uint32(STREAM2MMIO_CTRL_BASE[ID] + |
| 164 | reg * sizeof(hrt_data), value); | 164 | reg * sizeof(hrt_data), value); |
| 165 | } | 165 | } |
| 166 | /** end of DLI */ | 166 | /* end of DLI */ |
| 167 | 167 | ||
| 168 | #endif /* __ISYS_STREAM2MMIO_PRIVATE_H_INCLUDED__ */ | 168 | #endif /* __ISYS_STREAM2MMIO_PRIVATE_H_INCLUDED__ */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_2401_csi2p_system/host/pixelgen_private.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_2401_csi2p_system/host/pixelgen_private.h index 3f34b508f0bf..c5bf540eadf1 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_2401_csi2p_system/host/pixelgen_private.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_2401_csi2p_system/host/pixelgen_private.h | |||
| @@ -160,5 +160,5 @@ STORAGE_CLASS_PIXELGEN_C void pixelgen_ctrl_reg_store( | |||
| 160 | 160 | ||
| 161 | ia_css_device_store_uint32(PIXELGEN_CTRL_BASE[ID] + reg*sizeof(hrt_data), value); | 161 | ia_css_device_store_uint32(PIXELGEN_CTRL_BASE[ID] + reg*sizeof(hrt_data), value); |
| 162 | } | 162 | } |
| 163 | /** end of DLI */ | 163 | /* end of DLI */ |
| 164 | #endif /* __PIXELGEN_PRIVATE_H_INCLUDED__ */ | 164 | #endif /* __PIXELGEN_PRIVATE_H_INCLUDED__ */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_2401_csi2p_system/isys_dma_global.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_2401_csi2p_system/isys_dma_global.h index e7a734a9fc43..1be5c6956d65 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_2401_csi2p_system/isys_dma_global.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_2401_csi2p_system/isys_dma_global.h | |||
| @@ -46,7 +46,7 @@ struct isys2401_dma_port_cfg_s { | |||
| 46 | uint32_t cropping; | 46 | uint32_t cropping; |
| 47 | uint32_t width; | 47 | uint32_t width; |
| 48 | }; | 48 | }; |
| 49 | /** end of DMA Port */ | 49 | /* end of DMA Port */ |
| 50 | 50 | ||
| 51 | /************************************************ | 51 | /************************************************ |
| 52 | * | 52 | * |
| @@ -79,7 +79,7 @@ struct isys2401_dma_cfg_s { | |||
| 79 | isys2401_dma_extension extension; | 79 | isys2401_dma_extension extension; |
| 80 | uint32_t height; | 80 | uint32_t height; |
| 81 | }; | 81 | }; |
| 82 | /** end of DMA Device */ | 82 | /* end of DMA Device */ |
| 83 | 83 | ||
| 84 | /* isys2401_dma_channel limits per DMA ID */ | 84 | /* isys2401_dma_channel limits per DMA ID */ |
| 85 | extern const isys2401_dma_channel N_ISYS2401_DMA_CHANNEL_PROCS[N_ISYS2401_DMA_ID]; | 85 | extern const isys2401_dma_channel N_ISYS2401_DMA_CHANNEL_PROCS[N_ISYS2401_DMA_ID]; |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_2401_csi2p_system/pixelgen_global.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_2401_csi2p_system/pixelgen_global.h index 216813e42a0a..0bf2feb8bbfb 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_2401_csi2p_system/pixelgen_global.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_2401_csi2p_system/pixelgen_global.h | |||
| @@ -86,6 +86,6 @@ struct pixelgen_prbs_cfg_s { | |||
| 86 | sync_generator_cfg_t sync_gen_cfg; | 86 | sync_generator_cfg_t sync_gen_cfg; |
| 87 | }; | 87 | }; |
| 88 | 88 | ||
| 89 | /** end of Pixel-generator: TPG. ("pixelgen_global.h") */ | 89 | /* end of Pixel-generator: TPG. ("pixelgen_global.h") */ |
| 90 | #endif /* __PIXELGEN_GLOBAL_H_INCLUDED__ */ | 90 | #endif /* __PIXELGEN_GLOBAL_H_INCLUDED__ */ |
| 91 | 91 | ||
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_2401_csi2p_system/system_global.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_2401_csi2p_system/system_global.h index 9f7ecac46273..d2e3a2deea2e 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_2401_csi2p_system/system_global.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_2401_csi2p_system/system_global.h | |||
| @@ -331,7 +331,7 @@ typedef enum { | |||
| 331 | IBUF_CTRL2_ID, /* map ISYS2401_IBUF_CNTRL_C */ | 331 | IBUF_CTRL2_ID, /* map ISYS2401_IBUF_CNTRL_C */ |
| 332 | N_IBUF_CTRL_ID | 332 | N_IBUF_CTRL_ID |
| 333 | } ibuf_ctrl_ID_t; | 333 | } ibuf_ctrl_ID_t; |
| 334 | /** end of Input-buffer Controller */ | 334 | /* end of Input-buffer Controller */ |
| 335 | 335 | ||
| 336 | /* | 336 | /* |
| 337 | * Stream2MMIO. | 337 | * Stream2MMIO. |
| @@ -364,7 +364,7 @@ typedef enum { | |||
| 364 | STREAM2MMIO_SID7_ID, | 364 | STREAM2MMIO_SID7_ID, |
| 365 | N_STREAM2MMIO_SID_ID | 365 | N_STREAM2MMIO_SID_ID |
| 366 | } stream2mmio_sid_ID_t; | 366 | } stream2mmio_sid_ID_t; |
| 367 | /** end of Stream2MMIO */ | 367 | /* end of Stream2MMIO */ |
| 368 | 368 | ||
| 369 | /** | 369 | /** |
| 370 | * Input System 2401: CSI-MIPI recevier. | 370 | * Input System 2401: CSI-MIPI recevier. |
| @@ -390,7 +390,7 @@ typedef enum { | |||
| 390 | CSI_RX_DLANE3_ID, /* map to DLANE3 in CSI RX */ | 390 | CSI_RX_DLANE3_ID, /* map to DLANE3 in CSI RX */ |
| 391 | N_CSI_RX_DLANE_ID | 391 | N_CSI_RX_DLANE_ID |
| 392 | } csi_rx_fe_dlane_ID_t; | 392 | } csi_rx_fe_dlane_ID_t; |
| 393 | /** end of CSI-MIPI receiver */ | 393 | /* end of CSI-MIPI receiver */ |
| 394 | 394 | ||
| 395 | typedef enum { | 395 | typedef enum { |
| 396 | ISYS2401_DMA0_ID = 0, | 396 | ISYS2401_DMA0_ID = 0, |
| @@ -406,7 +406,7 @@ typedef enum { | |||
| 406 | PIXELGEN2_ID, | 406 | PIXELGEN2_ID, |
| 407 | N_PIXELGEN_ID | 407 | N_PIXELGEN_ID |
| 408 | } pixelgen_ID_t; | 408 | } pixelgen_ID_t; |
| 409 | /** end of pixel-generator. ("system_global.h") */ | 409 | /* end of pixel-generator. ("system_global.h") */ |
| 410 | 410 | ||
| 411 | typedef enum { | 411 | typedef enum { |
| 412 | INPUT_SYSTEM_CSI_PORT0_ID = 0, | 412 | INPUT_SYSTEM_CSI_PORT0_ID = 0, |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_api_version.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_api_version.h index 1f6a55ff5db8..efcd6e1679e8 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_api_version.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/css_api_version.h | |||
| @@ -31,7 +31,7 @@ more details. | |||
| 31 | #ifndef __CSS_API_VERSION_H | 31 | #ifndef __CSS_API_VERSION_H |
| 32 | #define __CSS_API_VERSION_H | 32 | #define __CSS_API_VERSION_H |
| 33 | 33 | ||
| 34 | /** @file | 34 | /* @file |
| 35 | * CSS API version file. This file contains the version number of the CSS-API. | 35 | * CSS API version file. This file contains the version number of the CSS-API. |
| 36 | * | 36 | * |
| 37 | * This file is generated from a set of input files describing the CSS-API | 37 | * This file is generated from a set of input files describing the CSS-API |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_common/host/gp_timer.c b/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_common/host/gp_timer.c index 5a4eabf79ee2..bcfd443f5202 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_common/host/gp_timer.c +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_common/host/gp_timer.c | |||
| @@ -21,7 +21,7 @@ | |||
| 21 | #endif /* __INLINE_GP_TIMER__ */ | 21 | #endif /* __INLINE_GP_TIMER__ */ |
| 22 | #include "system_local.h" | 22 | #include "system_local.h" |
| 23 | 23 | ||
| 24 | /** FIXME: not sure if reg_load(), reg_store() should be API. | 24 | /* FIXME: not sure if reg_load(), reg_store() should be API. |
| 25 | */ | 25 | */ |
| 26 | static uint32_t | 26 | static uint32_t |
| 27 | gp_timer_reg_load(uint32_t reg); | 27 | gp_timer_reg_load(uint32_t reg); |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_include/host/csi_rx_public.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_include/host/csi_rx_public.h index 3b5df85fc510..426d022d3a26 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_include/host/csi_rx_public.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_include/host/csi_rx_public.h | |||
| @@ -73,7 +73,7 @@ extern void csi_rx_be_ctrl_get_state( | |||
| 73 | extern void csi_rx_be_ctrl_dump_state( | 73 | extern void csi_rx_be_ctrl_dump_state( |
| 74 | const csi_rx_backend_ID_t ID, | 74 | const csi_rx_backend_ID_t ID, |
| 75 | csi_rx_be_ctrl_state_t *state); | 75 | csi_rx_be_ctrl_state_t *state); |
| 76 | /** end of NCI */ | 76 | /* end of NCI */ |
| 77 | 77 | ||
| 78 | /***************************************************** | 78 | /***************************************************** |
| 79 | * | 79 | * |
| @@ -130,6 +130,6 @@ extern void csi_rx_be_ctrl_reg_store( | |||
| 130 | const csi_rx_backend_ID_t ID, | 130 | const csi_rx_backend_ID_t ID, |
| 131 | const hrt_address reg, | 131 | const hrt_address reg, |
| 132 | const hrt_data value); | 132 | const hrt_data value); |
| 133 | /** end of DLI */ | 133 | /* end of DLI */ |
| 134 | #endif /* USE_INPUT_SYSTEM_VERSION_2401 */ | 134 | #endif /* USE_INPUT_SYSTEM_VERSION_2401 */ |
| 135 | #endif /* __CSI_RX_PUBLIC_H_INCLUDED__ */ | 135 | #endif /* __CSI_RX_PUBLIC_H_INCLUDED__ */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_include/host/ibuf_ctrl_public.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_include/host/ibuf_ctrl_public.h index 1ac0e64e539c..98ee9947fb8e 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_include/host/ibuf_ctrl_public.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_include/host/ibuf_ctrl_public.h | |||
| @@ -54,7 +54,7 @@ STORAGE_CLASS_IBUF_CTRL_H void ibuf_ctrl_get_proc_state( | |||
| 54 | STORAGE_CLASS_IBUF_CTRL_H void ibuf_ctrl_dump_state( | 54 | STORAGE_CLASS_IBUF_CTRL_H void ibuf_ctrl_dump_state( |
| 55 | const ibuf_ctrl_ID_t ID, | 55 | const ibuf_ctrl_ID_t ID, |
| 56 | ibuf_ctrl_state_t *state); | 56 | ibuf_ctrl_state_t *state); |
| 57 | /** end of NCI */ | 57 | /* end of NCI */ |
| 58 | 58 | ||
| 59 | /***************************************************** | 59 | /***************************************************** |
| 60 | * | 60 | * |
| @@ -87,7 +87,7 @@ STORAGE_CLASS_IBUF_CTRL_H void ibuf_ctrl_reg_store( | |||
| 87 | const ibuf_ctrl_ID_t ID, | 87 | const ibuf_ctrl_ID_t ID, |
| 88 | const hrt_address reg, | 88 | const hrt_address reg, |
| 89 | const hrt_data value); | 89 | const hrt_data value); |
| 90 | /** end of DLI */ | 90 | /* end of DLI */ |
| 91 | 91 | ||
| 92 | #endif /* USE_INPUT_SYSTEM_VERSION_2401 */ | 92 | #endif /* USE_INPUT_SYSTEM_VERSION_2401 */ |
| 93 | #endif /* __IBUF_CTRL_PUBLIC_H_INCLUDED__ */ | 93 | #endif /* __IBUF_CTRL_PUBLIC_H_INCLUDED__ */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_include/host/isp_op1w.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_include/host/isp_op1w.h index a025ad562bd2..0d978e5911c0 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_include/host/isp_op1w.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_include/host/isp_op1w.h | |||
| @@ -49,7 +49,7 @@ | |||
| 49 | 49 | ||
| 50 | /* Arithmetic */ | 50 | /* Arithmetic */ |
| 51 | 51 | ||
| 52 | /** @brief bitwise AND | 52 | /* @brief bitwise AND |
| 53 | * | 53 | * |
| 54 | * @param[in] _a first argument | 54 | * @param[in] _a first argument |
| 55 | * @param[in] _b second argument | 55 | * @param[in] _b second argument |
| @@ -63,7 +63,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_1w_and( | |||
| 63 | const tvector1w _a, | 63 | const tvector1w _a, |
| 64 | const tvector1w _b); | 64 | const tvector1w _b); |
| 65 | 65 | ||
| 66 | /** @brief bitwise OR | 66 | /* @brief bitwise OR |
| 67 | * | 67 | * |
| 68 | * @param[in] _a first argument | 68 | * @param[in] _a first argument |
| 69 | * @param[in] _b second argument | 69 | * @param[in] _b second argument |
| @@ -77,7 +77,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_1w_or( | |||
| 77 | const tvector1w _a, | 77 | const tvector1w _a, |
| 78 | const tvector1w _b); | 78 | const tvector1w _b); |
| 79 | 79 | ||
| 80 | /** @brief bitwise XOR | 80 | /* @brief bitwise XOR |
| 81 | * | 81 | * |
| 82 | * @param[in] _a first argument | 82 | * @param[in] _a first argument |
| 83 | * @param[in] _b second argument | 83 | * @param[in] _b second argument |
| @@ -91,7 +91,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_1w_xor( | |||
| 91 | const tvector1w _a, | 91 | const tvector1w _a, |
| 92 | const tvector1w _b); | 92 | const tvector1w _b); |
| 93 | 93 | ||
| 94 | /** @brief bitwise inverse | 94 | /* @brief bitwise inverse |
| 95 | * | 95 | * |
| 96 | * @param[in] _a first argument | 96 | * @param[in] _a first argument |
| 97 | * | 97 | * |
| @@ -105,7 +105,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_1w_inv( | |||
| 105 | 105 | ||
| 106 | /* Additive */ | 106 | /* Additive */ |
| 107 | 107 | ||
| 108 | /** @brief addition | 108 | /* @brief addition |
| 109 | * | 109 | * |
| 110 | * @param[in] _a first argument | 110 | * @param[in] _a first argument |
| 111 | * @param[in] _b second argument | 111 | * @param[in] _b second argument |
| @@ -120,7 +120,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_1w_add( | |||
| 120 | const tvector1w _a, | 120 | const tvector1w _a, |
| 121 | const tvector1w _b); | 121 | const tvector1w _b); |
| 122 | 122 | ||
| 123 | /** @brief subtraction | 123 | /* @brief subtraction |
| 124 | * | 124 | * |
| 125 | * @param[in] _a first argument | 125 | * @param[in] _a first argument |
| 126 | * @param[in] _b second argument | 126 | * @param[in] _b second argument |
| @@ -135,7 +135,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_1w_sub( | |||
| 135 | const tvector1w _a, | 135 | const tvector1w _a, |
| 136 | const tvector1w _b); | 136 | const tvector1w _b); |
| 137 | 137 | ||
| 138 | /** @brief saturated addition | 138 | /* @brief saturated addition |
| 139 | * | 139 | * |
| 140 | * @param[in] _a first argument | 140 | * @param[in] _a first argument |
| 141 | * @param[in] _b second argument | 141 | * @param[in] _b second argument |
| @@ -150,7 +150,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_1w_addsat( | |||
| 150 | const tvector1w _a, | 150 | const tvector1w _a, |
| 151 | const tvector1w _b); | 151 | const tvector1w _b); |
| 152 | 152 | ||
| 153 | /** @brief saturated subtraction | 153 | /* @brief saturated subtraction |
| 154 | * | 154 | * |
| 155 | * @param[in] _a first argument | 155 | * @param[in] _a first argument |
| 156 | * @param[in] _b second argument | 156 | * @param[in] _b second argument |
| @@ -166,7 +166,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_1w_subsat( | |||
| 166 | const tvector1w _b); | 166 | const tvector1w _b); |
| 167 | 167 | ||
| 168 | #ifdef ISP2401 | 168 | #ifdef ISP2401 |
| 169 | /** @brief Unsigned saturated subtraction | 169 | /* @brief Unsigned saturated subtraction |
| 170 | * | 170 | * |
| 171 | * @param[in] _a first argument | 171 | * @param[in] _a first argument |
| 172 | * @param[in] _b second argument | 172 | * @param[in] _b second argument |
| @@ -182,7 +182,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w_unsigned OP_1w_subsat_u( | |||
| 182 | const tvector1w_unsigned _b); | 182 | const tvector1w_unsigned _b); |
| 183 | 183 | ||
| 184 | #endif | 184 | #endif |
| 185 | /** @brief subtraction with shift right and rounding | 185 | /* @brief subtraction with shift right and rounding |
| 186 | * | 186 | * |
| 187 | * @param[in] _a first argument | 187 | * @param[in] _a first argument |
| 188 | * @param[in] _b second argument | 188 | * @param[in] _b second argument |
| @@ -202,7 +202,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_1w_subasr1( | |||
| 202 | const tvector1w _a, | 202 | const tvector1w _a, |
| 203 | const tvector1w _b); | 203 | const tvector1w _b); |
| 204 | 204 | ||
| 205 | /** @brief Subtraction with shift right and rounding | 205 | /* @brief Subtraction with shift right and rounding |
| 206 | * | 206 | * |
| 207 | * @param[in] _a first operand | 207 | * @param[in] _a first operand |
| 208 | * @param[in] _b second operand | 208 | * @param[in] _b second operand |
| @@ -217,7 +217,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_1w_subhalfrnd( | |||
| 217 | const tvector1w _a, | 217 | const tvector1w _a, |
| 218 | const tvector1w _b); | 218 | const tvector1w _b); |
| 219 | 219 | ||
| 220 | /** @brief Subtraction with shift right and no rounding | 220 | /* @brief Subtraction with shift right and no rounding |
| 221 | * | 221 | * |
| 222 | * @param[in] _a first operand | 222 | * @param[in] _a first operand |
| 223 | * @param[in] _b second operand | 223 | * @param[in] _b second operand |
| @@ -233,7 +233,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_1w_subhalf( | |||
| 233 | const tvector1w _b); | 233 | const tvector1w _b); |
| 234 | 234 | ||
| 235 | 235 | ||
| 236 | /** @brief saturated absolute value | 236 | /* @brief saturated absolute value |
| 237 | * | 237 | * |
| 238 | * @param[in] _a input | 238 | * @param[in] _a input |
| 239 | * | 239 | * |
| @@ -247,7 +247,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_1w_subhalf( | |||
| 247 | STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_1w_abs( | 247 | STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_1w_abs( |
| 248 | const tvector1w _a); | 248 | const tvector1w _a); |
| 249 | 249 | ||
| 250 | /** @brief saturated absolute difference | 250 | /* @brief saturated absolute difference |
| 251 | * | 251 | * |
| 252 | * @param[in] _a first argument | 252 | * @param[in] _a first argument |
| 253 | * @param[in] _b second argument | 253 | * @param[in] _b second argument |
| @@ -264,7 +264,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_1w_subabssat( | |||
| 264 | 264 | ||
| 265 | /* Multiplicative */ | 265 | /* Multiplicative */ |
| 266 | 266 | ||
| 267 | /** @brief doubling multiply | 267 | /* @brief doubling multiply |
| 268 | * | 268 | * |
| 269 | * @param[in] _a first argument | 269 | * @param[in] _a first argument |
| 270 | * @param[in] _b second argument | 270 | * @param[in] _b second argument |
| @@ -281,7 +281,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector2w OP_1w_muld( | |||
| 281 | const tvector1w _a, | 281 | const tvector1w _a, |
| 282 | const tvector1w _b); | 282 | const tvector1w _b); |
| 283 | 283 | ||
| 284 | /** @brief integer multiply | 284 | /* @brief integer multiply |
| 285 | * | 285 | * |
| 286 | * @param[in] _a first argument | 286 | * @param[in] _a first argument |
| 287 | * @param[in] _b second argument | 287 | * @param[in] _b second argument |
| @@ -298,7 +298,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_1w_mul( | |||
| 298 | const tvector1w _a, | 298 | const tvector1w _a, |
| 299 | const tvector1w _b); | 299 | const tvector1w _b); |
| 300 | 300 | ||
| 301 | /** @brief fractional saturating multiply | 301 | /* @brief fractional saturating multiply |
| 302 | * | 302 | * |
| 303 | * @param[in] _a first argument | 303 | * @param[in] _a first argument |
| 304 | * @param[in] _b second argument | 304 | * @param[in] _b second argument |
| @@ -316,7 +316,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_1w_qmul( | |||
| 316 | const tvector1w _a, | 316 | const tvector1w _a, |
| 317 | const tvector1w _b); | 317 | const tvector1w _b); |
| 318 | 318 | ||
| 319 | /** @brief fractional saturating multiply with rounding | 319 | /* @brief fractional saturating multiply with rounding |
| 320 | * | 320 | * |
| 321 | * @param[in] _a first argument | 321 | * @param[in] _a first argument |
| 322 | * @param[in] _b second argument | 322 | * @param[in] _b second argument |
| @@ -337,7 +337,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_1w_qrmul( | |||
| 337 | 337 | ||
| 338 | /* Comparative */ | 338 | /* Comparative */ |
| 339 | 339 | ||
| 340 | /** @brief equal | 340 | /* @brief equal |
| 341 | * | 341 | * |
| 342 | * @param[in] _a first argument | 342 | * @param[in] _a first argument |
| 343 | * @param[in] _b second argument | 343 | * @param[in] _b second argument |
| @@ -351,7 +351,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tflags OP_1w_eq( | |||
| 351 | const tvector1w _a, | 351 | const tvector1w _a, |
| 352 | const tvector1w _b); | 352 | const tvector1w _b); |
| 353 | 353 | ||
| 354 | /** @brief not equal | 354 | /* @brief not equal |
| 355 | * | 355 | * |
| 356 | * @param[in] _a first argument | 356 | * @param[in] _a first argument |
| 357 | * @param[in] _b second argument | 357 | * @param[in] _b second argument |
| @@ -365,7 +365,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tflags OP_1w_ne( | |||
| 365 | const tvector1w _a, | 365 | const tvector1w _a, |
| 366 | const tvector1w _b); | 366 | const tvector1w _b); |
| 367 | 367 | ||
| 368 | /** @brief less or equal | 368 | /* @brief less or equal |
| 369 | * | 369 | * |
| 370 | * @param[in] _a first argument | 370 | * @param[in] _a first argument |
| 371 | * @param[in] _b second argument | 371 | * @param[in] _b second argument |
| @@ -379,7 +379,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tflags OP_1w_le( | |||
| 379 | const tvector1w _a, | 379 | const tvector1w _a, |
| 380 | const tvector1w _b); | 380 | const tvector1w _b); |
| 381 | 381 | ||
| 382 | /** @brief less then | 382 | /* @brief less then |
| 383 | * | 383 | * |
| 384 | * @param[in] _a first argument | 384 | * @param[in] _a first argument |
| 385 | * @param[in] _b second argument | 385 | * @param[in] _b second argument |
| @@ -393,7 +393,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tflags OP_1w_lt( | |||
| 393 | const tvector1w _a, | 393 | const tvector1w _a, |
| 394 | const tvector1w _b); | 394 | const tvector1w _b); |
| 395 | 395 | ||
| 396 | /** @brief greater or equal | 396 | /* @brief greater or equal |
| 397 | * | 397 | * |
| 398 | * @param[in] _a first argument | 398 | * @param[in] _a first argument |
| 399 | * @param[in] _b second argument | 399 | * @param[in] _b second argument |
| @@ -407,7 +407,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tflags OP_1w_ge( | |||
| 407 | const tvector1w _a, | 407 | const tvector1w _a, |
| 408 | const tvector1w _b); | 408 | const tvector1w _b); |
| 409 | 409 | ||
| 410 | /** @brief greater than | 410 | /* @brief greater than |
| 411 | * | 411 | * |
| 412 | * @param[in] _a first argument | 412 | * @param[in] _a first argument |
| 413 | * @param[in] _b second argument | 413 | * @param[in] _b second argument |
| @@ -423,7 +423,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tflags OP_1w_gt( | |||
| 423 | 423 | ||
| 424 | /* Shift */ | 424 | /* Shift */ |
| 425 | 425 | ||
| 426 | /** @brief aritmetic shift right | 426 | /* @brief aritmetic shift right |
| 427 | * | 427 | * |
| 428 | * @param[in] _a input | 428 | * @param[in] _a input |
| 429 | * @param[in] _b shift amount | 429 | * @param[in] _b shift amount |
| @@ -441,7 +441,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_1w_asr( | |||
| 441 | const tvector1w _a, | 441 | const tvector1w _a, |
| 442 | const tvector1w _b); | 442 | const tvector1w _b); |
| 443 | 443 | ||
| 444 | /** @brief aritmetic shift right with rounding | 444 | /* @brief aritmetic shift right with rounding |
| 445 | * | 445 | * |
| 446 | * @param[in] _a input | 446 | * @param[in] _a input |
| 447 | * @param[in] _b shift amount | 447 | * @param[in] _b shift amount |
| @@ -460,7 +460,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_1w_asrrnd( | |||
| 460 | const tvector1w _a, | 460 | const tvector1w _a, |
| 461 | const tvector1w _b); | 461 | const tvector1w _b); |
| 462 | 462 | ||
| 463 | /** @brief saturating arithmetic shift left | 463 | /* @brief saturating arithmetic shift left |
| 464 | * | 464 | * |
| 465 | * @param[in] _a input | 465 | * @param[in] _a input |
| 466 | * @param[in] _b shift amount | 466 | * @param[in] _b shift amount |
| @@ -480,7 +480,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_1w_asl( | |||
| 480 | const tvector1w _a, | 480 | const tvector1w _a, |
| 481 | const tvector1w _b); | 481 | const tvector1w _b); |
| 482 | 482 | ||
| 483 | /** @brief saturating aritmetic shift left | 483 | /* @brief saturating aritmetic shift left |
| 484 | * | 484 | * |
| 485 | * @param[in] _a input | 485 | * @param[in] _a input |
| 486 | * @param[in] _b shift amount | 486 | * @param[in] _b shift amount |
| @@ -493,7 +493,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_1w_aslsat( | |||
| 493 | const tvector1w _a, | 493 | const tvector1w _a, |
| 494 | const tvector1w _b); | 494 | const tvector1w _b); |
| 495 | 495 | ||
| 496 | /** @brief logical shift left | 496 | /* @brief logical shift left |
| 497 | * | 497 | * |
| 498 | * @param[in] _a input | 498 | * @param[in] _a input |
| 499 | * @param[in] _b shift amount | 499 | * @param[in] _b shift amount |
| @@ -510,7 +510,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_1w_lsl( | |||
| 510 | const tvector1w _a, | 510 | const tvector1w _a, |
| 511 | const tvector1w _b); | 511 | const tvector1w _b); |
| 512 | 512 | ||
| 513 | /** @brief logical shift right | 513 | /* @brief logical shift right |
| 514 | * | 514 | * |
| 515 | * @param[in] _a input | 515 | * @param[in] _a input |
| 516 | * @param[in] _b shift amount | 516 | * @param[in] _b shift amount |
| @@ -528,7 +528,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_1w_lsr( | |||
| 528 | const tvector1w _b); | 528 | const tvector1w _b); |
| 529 | 529 | ||
| 530 | #ifdef ISP2401 | 530 | #ifdef ISP2401 |
| 531 | /** @brief bidirectional saturating arithmetic shift | 531 | /* @brief bidirectional saturating arithmetic shift |
| 532 | * | 532 | * |
| 533 | * @param[in] _a input | 533 | * @param[in] _a input |
| 534 | * @param[in] _b shift amount | 534 | * @param[in] _b shift amount |
| @@ -546,7 +546,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_1w_ashift_sat( | |||
| 546 | const tvector1w _a, | 546 | const tvector1w _a, |
| 547 | const tvector1w _b); | 547 | const tvector1w _b); |
| 548 | 548 | ||
| 549 | /** @brief bidirectional non-saturating arithmetic shift | 549 | /* @brief bidirectional non-saturating arithmetic shift |
| 550 | * | 550 | * |
| 551 | * @param[in] _a input | 551 | * @param[in] _a input |
| 552 | * @param[in] _b shift amount | 552 | * @param[in] _b shift amount |
| @@ -565,7 +565,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_1w_ashift( | |||
| 565 | const tvector1w _b); | 565 | const tvector1w _b); |
| 566 | 566 | ||
| 567 | 567 | ||
| 568 | /** @brief bidirectional logical shift | 568 | /* @brief bidirectional logical shift |
| 569 | * | 569 | * |
| 570 | * @param[in] _a input | 570 | * @param[in] _a input |
| 571 | * @param[in] _b shift amount | 571 | * @param[in] _b shift amount |
| @@ -588,7 +588,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_1w_lshift( | |||
| 588 | #endif | 588 | #endif |
| 589 | /* Cast */ | 589 | /* Cast */ |
| 590 | 590 | ||
| 591 | /** @brief Cast from int to 1w | 591 | /* @brief Cast from int to 1w |
| 592 | * | 592 | * |
| 593 | * @param[in] _a input | 593 | * @param[in] _a input |
| 594 | * | 594 | * |
| @@ -601,7 +601,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_1w_lshift( | |||
| 601 | STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_int_cast_to_1w( | 601 | STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_int_cast_to_1w( |
| 602 | const int _a); | 602 | const int _a); |
| 603 | 603 | ||
| 604 | /** @brief Cast from 1w to int | 604 | /* @brief Cast from 1w to int |
| 605 | * | 605 | * |
| 606 | * @param[in] _a input | 606 | * @param[in] _a input |
| 607 | * | 607 | * |
| @@ -614,7 +614,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_int_cast_to_1w( | |||
| 614 | STORAGE_CLASS_ISP_OP1W_FUNC_H int OP_1w_cast_to_int( | 614 | STORAGE_CLASS_ISP_OP1W_FUNC_H int OP_1w_cast_to_int( |
| 615 | const tvector1w _a); | 615 | const tvector1w _a); |
| 616 | 616 | ||
| 617 | /** @brief Cast from 1w to 2w | 617 | /* @brief Cast from 1w to 2w |
| 618 | * | 618 | * |
| 619 | * @param[in] _a input | 619 | * @param[in] _a input |
| 620 | * | 620 | * |
| @@ -627,7 +627,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H int OP_1w_cast_to_int( | |||
| 627 | STORAGE_CLASS_ISP_OP1W_FUNC_H tvector2w OP_1w_cast_to_2w( | 627 | STORAGE_CLASS_ISP_OP1W_FUNC_H tvector2w OP_1w_cast_to_2w( |
| 628 | const tvector1w _a); | 628 | const tvector1w _a); |
| 629 | 629 | ||
| 630 | /** @brief Cast from 2w to 1w | 630 | /* @brief Cast from 2w to 1w |
| 631 | * | 631 | * |
| 632 | * @param[in] _a input | 632 | * @param[in] _a input |
| 633 | * | 633 | * |
| @@ -641,7 +641,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_2w_cast_to_1w( | |||
| 641 | const tvector2w _a); | 641 | const tvector2w _a); |
| 642 | 642 | ||
| 643 | 643 | ||
| 644 | /** @brief Cast from 2w to 1w with saturation | 644 | /* @brief Cast from 2w to 1w with saturation |
| 645 | * | 645 | * |
| 646 | * @param[in] _a input | 646 | * @param[in] _a input |
| 647 | * | 647 | * |
| @@ -657,7 +657,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_2w_sat_cast_to_1w( | |||
| 657 | 657 | ||
| 658 | /* clipping */ | 658 | /* clipping */ |
| 659 | 659 | ||
| 660 | /** @brief Clip asymmetrical | 660 | /* @brief Clip asymmetrical |
| 661 | * | 661 | * |
| 662 | * @param[in] _a first argument | 662 | * @param[in] _a first argument |
| 663 | * @param[in] _b second argument | 663 | * @param[in] _b second argument |
| @@ -673,7 +673,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_1w_clip_asym( | |||
| 673 | const tvector1w _a, | 673 | const tvector1w _a, |
| 674 | const tvector1w _b); | 674 | const tvector1w _b); |
| 675 | 675 | ||
| 676 | /** @brief Clip zero | 676 | /* @brief Clip zero |
| 677 | * | 677 | * |
| 678 | * @param[in] _a first argument | 678 | * @param[in] _a first argument |
| 679 | * @param[in] _b second argument | 679 | * @param[in] _b second argument |
| @@ -691,7 +691,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_1w_clipz( | |||
| 691 | 691 | ||
| 692 | /* division */ | 692 | /* division */ |
| 693 | 693 | ||
| 694 | /** @brief Truncated division | 694 | /* @brief Truncated division |
| 695 | * | 695 | * |
| 696 | * @param[in] _a first argument | 696 | * @param[in] _a first argument |
| 697 | * @param[in] _b second argument | 697 | * @param[in] _b second argument |
| @@ -708,7 +708,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_1w_div( | |||
| 708 | const tvector1w _a, | 708 | const tvector1w _a, |
| 709 | const tvector1w _b); | 709 | const tvector1w _b); |
| 710 | 710 | ||
| 711 | /** @brief Fractional saturating divide | 711 | /* @brief Fractional saturating divide |
| 712 | * | 712 | * |
| 713 | * @param[in] _a first argument | 713 | * @param[in] _a first argument |
| 714 | * @param[in] _b second argument | 714 | * @param[in] _b second argument |
| @@ -726,7 +726,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_1w_qdiv( | |||
| 726 | const tvector1w _a, | 726 | const tvector1w _a, |
| 727 | const tvector1w _b); | 727 | const tvector1w _b); |
| 728 | 728 | ||
| 729 | /** @brief Modulo | 729 | /* @brief Modulo |
| 730 | * | 730 | * |
| 731 | * @param[in] _a first argument | 731 | * @param[in] _a first argument |
| 732 | * @param[in] _b second argument | 732 | * @param[in] _b second argument |
| @@ -741,7 +741,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_1w_mod( | |||
| 741 | const tvector1w _a, | 741 | const tvector1w _a, |
| 742 | const tvector1w _b); | 742 | const tvector1w _b); |
| 743 | 743 | ||
| 744 | /** @brief Unsigned integer Square root | 744 | /* @brief Unsigned integer Square root |
| 745 | * | 745 | * |
| 746 | * @param[in] _a input | 746 | * @param[in] _a input |
| 747 | * | 747 | * |
| @@ -754,7 +754,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w_unsigned OP_1w_sqrt_u( | |||
| 754 | 754 | ||
| 755 | /* Miscellaneous */ | 755 | /* Miscellaneous */ |
| 756 | 756 | ||
| 757 | /** @brief Multiplexer | 757 | /* @brief Multiplexer |
| 758 | * | 758 | * |
| 759 | * @param[in] _a first argument | 759 | * @param[in] _a first argument |
| 760 | * @param[in] _b second argument | 760 | * @param[in] _b second argument |
| @@ -770,7 +770,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_1w_mux( | |||
| 770 | const tvector1w _b, | 770 | const tvector1w _b, |
| 771 | const tflags _c); | 771 | const tflags _c); |
| 772 | 772 | ||
| 773 | /** @brief Average without rounding | 773 | /* @brief Average without rounding |
| 774 | * | 774 | * |
| 775 | * @param[in] _a first operand | 775 | * @param[in] _a first operand |
| 776 | * @param[in] _b second operand | 776 | * @param[in] _b second operand |
| @@ -786,7 +786,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_1w_avg( | |||
| 786 | const tvector1w _a, | 786 | const tvector1w _a, |
| 787 | const tvector1w _b); | 787 | const tvector1w _b); |
| 788 | 788 | ||
| 789 | /** @brief Average with rounding | 789 | /* @brief Average with rounding |
| 790 | * | 790 | * |
| 791 | * @param[in] _a first argument | 791 | * @param[in] _a first argument |
| 792 | * @param[in] _b second argument | 792 | * @param[in] _b second argument |
| @@ -802,7 +802,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_1w_avgrnd( | |||
| 802 | const tvector1w _a, | 802 | const tvector1w _a, |
| 803 | const tvector1w _b); | 803 | const tvector1w _b); |
| 804 | 804 | ||
| 805 | /** @brief Minimum | 805 | /* @brief Minimum |
| 806 | * | 806 | * |
| 807 | * @param[in] _a first argument | 807 | * @param[in] _a first argument |
| 808 | * @param[in] _b second argument | 808 | * @param[in] _b second argument |
| @@ -816,7 +816,7 @@ STORAGE_CLASS_ISP_OP1W_FUNC_H tvector1w OP_1w_min( | |||
| 816 | const tvector1w _a, | 816 | const tvector1w _a, |
| 817 | const tvector1w _b); | 817 | const tvector1w _b); |
| 818 | 818 | ||
| 819 | /** @brief Maximum | 819 | /* @brief Maximum |
| 820 | * | 820 | * |
| 821 | * @param[in] _a first argument | 821 | * @param[in] _a first argument |
| 822 | * @param[in] _b second argument | 822 | * @param[in] _b second argument |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_include/host/isp_op2w.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_include/host/isp_op2w.h index cf7e7314842d..7575d260b837 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_include/host/isp_op2w.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_include/host/isp_op2w.h | |||
| @@ -48,7 +48,7 @@ | |||
| 48 | 48 | ||
| 49 | /* Arithmetic */ | 49 | /* Arithmetic */ |
| 50 | 50 | ||
| 51 | /** @brief bitwise AND | 51 | /* @brief bitwise AND |
| 52 | * | 52 | * |
| 53 | * @param[in] _a first argument | 53 | * @param[in] _a first argument |
| 54 | * @param[in] _b second argument | 54 | * @param[in] _b second argument |
| @@ -62,7 +62,7 @@ STORAGE_CLASS_ISP_OP2W_FUNC_H tvector2w OP_2w_and( | |||
| 62 | const tvector2w _a, | 62 | const tvector2w _a, |
| 63 | const tvector2w _b); | 63 | const tvector2w _b); |
| 64 | 64 | ||
| 65 | /** @brief bitwise OR | 65 | /* @brief bitwise OR |
| 66 | * | 66 | * |
| 67 | * @param[in] _a first argument | 67 | * @param[in] _a first argument |
| 68 | * @param[in] _b second argument | 68 | * @param[in] _b second argument |
| @@ -76,7 +76,7 @@ STORAGE_CLASS_ISP_OP2W_FUNC_H tvector2w OP_2w_or( | |||
| 76 | const tvector2w _a, | 76 | const tvector2w _a, |
| 77 | const tvector2w _b); | 77 | const tvector2w _b); |
| 78 | 78 | ||
| 79 | /** @brief bitwise XOR | 79 | /* @brief bitwise XOR |
| 80 | * | 80 | * |
| 81 | * @param[in] _a first argument | 81 | * @param[in] _a first argument |
| 82 | * @param[in] _b second argument | 82 | * @param[in] _b second argument |
| @@ -90,7 +90,7 @@ STORAGE_CLASS_ISP_OP2W_FUNC_H tvector2w OP_2w_xor( | |||
| 90 | const tvector2w _a, | 90 | const tvector2w _a, |
| 91 | const tvector2w _b); | 91 | const tvector2w _b); |
| 92 | 92 | ||
| 93 | /** @brief bitwise inverse | 93 | /* @brief bitwise inverse |
| 94 | * | 94 | * |
| 95 | * @param[in] _a first argument | 95 | * @param[in] _a first argument |
| 96 | * | 96 | * |
| @@ -104,7 +104,7 @@ STORAGE_CLASS_ISP_OP2W_FUNC_H tvector2w OP_2w_inv( | |||
| 104 | 104 | ||
| 105 | /* Additive */ | 105 | /* Additive */ |
| 106 | 106 | ||
| 107 | /** @brief addition | 107 | /* @brief addition |
| 108 | * | 108 | * |
| 109 | * @param[in] _a first argument | 109 | * @param[in] _a first argument |
| 110 | * @param[in] _b second argument | 110 | * @param[in] _b second argument |
| @@ -119,7 +119,7 @@ STORAGE_CLASS_ISP_OP2W_FUNC_H tvector2w OP_2w_add( | |||
| 119 | const tvector2w _a, | 119 | const tvector2w _a, |
| 120 | const tvector2w _b); | 120 | const tvector2w _b); |
| 121 | 121 | ||
| 122 | /** @brief subtraction | 122 | /* @brief subtraction |
| 123 | * | 123 | * |
| 124 | * @param[in] _a first argument | 124 | * @param[in] _a first argument |
| 125 | * @param[in] _b second argument | 125 | * @param[in] _b second argument |
| @@ -134,7 +134,7 @@ STORAGE_CLASS_ISP_OP2W_FUNC_H tvector2w OP_2w_sub( | |||
| 134 | const tvector2w _a, | 134 | const tvector2w _a, |
| 135 | const tvector2w _b); | 135 | const tvector2w _b); |
| 136 | 136 | ||
| 137 | /** @brief saturated addition | 137 | /* @brief saturated addition |
| 138 | * | 138 | * |
| 139 | * @param[in] _a first argument | 139 | * @param[in] _a first argument |
| 140 | * @param[in] _b second argument | 140 | * @param[in] _b second argument |
| @@ -149,7 +149,7 @@ STORAGE_CLASS_ISP_OP2W_FUNC_H tvector2w OP_2w_addsat( | |||
| 149 | const tvector2w _a, | 149 | const tvector2w _a, |
| 150 | const tvector2w _b); | 150 | const tvector2w _b); |
| 151 | 151 | ||
| 152 | /** @brief saturated subtraction | 152 | /* @brief saturated subtraction |
| 153 | * | 153 | * |
| 154 | * @param[in] _a first argument | 154 | * @param[in] _a first argument |
| 155 | * @param[in] _b second argument | 155 | * @param[in] _b second argument |
| @@ -164,7 +164,7 @@ STORAGE_CLASS_ISP_OP2W_FUNC_H tvector2w OP_2w_subsat( | |||
| 164 | const tvector2w _a, | 164 | const tvector2w _a, |
| 165 | const tvector2w _b); | 165 | const tvector2w _b); |
| 166 | 166 | ||
| 167 | /** @brief subtraction with shift right and rounding | 167 | /* @brief subtraction with shift right and rounding |
| 168 | * | 168 | * |
| 169 | * @param[in] _a first argument | 169 | * @param[in] _a first argument |
| 170 | * @param[in] _b second argument | 170 | * @param[in] _b second argument |
| @@ -184,7 +184,7 @@ STORAGE_CLASS_ISP_OP2W_FUNC_H tvector2w OP_2w_subasr1( | |||
| 184 | const tvector2w _a, | 184 | const tvector2w _a, |
| 185 | const tvector2w _b); | 185 | const tvector2w _b); |
| 186 | 186 | ||
| 187 | /** @brief Subtraction with shift right and rounding | 187 | /* @brief Subtraction with shift right and rounding |
| 188 | * | 188 | * |
| 189 | * @param[in] _a first operand | 189 | * @param[in] _a first operand |
| 190 | * @param[in] _b second operand | 190 | * @param[in] _b second operand |
| @@ -199,7 +199,7 @@ STORAGE_CLASS_ISP_OP2W_FUNC_H tvector2w OP_2w_subhalfrnd( | |||
| 199 | const tvector2w _a, | 199 | const tvector2w _a, |
| 200 | const tvector2w _b); | 200 | const tvector2w _b); |
| 201 | 201 | ||
| 202 | /** @brief Subtraction with shift right and no rounding | 202 | /* @brief Subtraction with shift right and no rounding |
| 203 | * | 203 | * |
| 204 | * @param[in] _a first operand | 204 | * @param[in] _a first operand |
| 205 | * @param[in] _b second operand | 205 | * @param[in] _b second operand |
| @@ -214,7 +214,7 @@ STORAGE_CLASS_ISP_OP2W_FUNC_H tvector2w OP_2w_subhalf( | |||
| 214 | const tvector2w _a, | 214 | const tvector2w _a, |
| 215 | const tvector2w _b); | 215 | const tvector2w _b); |
| 216 | 216 | ||
| 217 | /** @brief saturated absolute value | 217 | /* @brief saturated absolute value |
| 218 | * | 218 | * |
| 219 | * @param[in] _a input | 219 | * @param[in] _a input |
| 220 | * | 220 | * |
| @@ -228,7 +228,7 @@ STORAGE_CLASS_ISP_OP2W_FUNC_H tvector2w OP_2w_subhalf( | |||
| 228 | STORAGE_CLASS_ISP_OP2W_FUNC_H tvector2w OP_2w_abs( | 228 | STORAGE_CLASS_ISP_OP2W_FUNC_H tvector2w OP_2w_abs( |
| 229 | const tvector2w _a); | 229 | const tvector2w _a); |
| 230 | 230 | ||
| 231 | /** @brief saturated absolute difference | 231 | /* @brief saturated absolute difference |
| 232 | * | 232 | * |
| 233 | * @param[in] _a first argument | 233 | * @param[in] _a first argument |
| 234 | * @param[in] _b second argument | 234 | * @param[in] _b second argument |
| @@ -245,7 +245,7 @@ STORAGE_CLASS_ISP_OP2W_FUNC_H tvector2w OP_2w_subabssat( | |||
| 245 | 245 | ||
| 246 | /* Multiplicative */ | 246 | /* Multiplicative */ |
| 247 | 247 | ||
| 248 | /** @brief integer multiply | 248 | /* @brief integer multiply |
| 249 | * | 249 | * |
| 250 | * @param[in] _a first argument | 250 | * @param[in] _a first argument |
| 251 | * @param[in] _b second argument | 251 | * @param[in] _b second argument |
| @@ -262,7 +262,7 @@ STORAGE_CLASS_ISP_OP2W_FUNC_H tvector2w OP_2w_mul( | |||
| 262 | const tvector2w _a, | 262 | const tvector2w _a, |
| 263 | const tvector2w _b); | 263 | const tvector2w _b); |
| 264 | 264 | ||
| 265 | /** @brief fractional saturating multiply | 265 | /* @brief fractional saturating multiply |
| 266 | * | 266 | * |
| 267 | * @param[in] _a first argument | 267 | * @param[in] _a first argument |
| 268 | * @param[in] _b second argument | 268 | * @param[in] _b second argument |
| @@ -279,7 +279,7 @@ STORAGE_CLASS_ISP_OP2W_FUNC_H tvector2w OP_2w_qmul( | |||
| 279 | const tvector2w _a, | 279 | const tvector2w _a, |
| 280 | const tvector2w _b); | 280 | const tvector2w _b); |
| 281 | 281 | ||
| 282 | /** @brief fractional saturating multiply with rounding | 282 | /* @brief fractional saturating multiply with rounding |
| 283 | * | 283 | * |
| 284 | * @param[in] _a first argument | 284 | * @param[in] _a first argument |
| 285 | * @param[in] _b second argument | 285 | * @param[in] _b second argument |
| @@ -301,7 +301,7 @@ STORAGE_CLASS_ISP_OP2W_FUNC_H tvector2w OP_2w_qrmul( | |||
| 301 | 301 | ||
| 302 | /* Comparative */ | 302 | /* Comparative */ |
| 303 | 303 | ||
| 304 | /** @brief equal | 304 | /* @brief equal |
| 305 | * | 305 | * |
| 306 | * @param[in] _a first argument | 306 | * @param[in] _a first argument |
| 307 | * @param[in] _b second argument | 307 | * @param[in] _b second argument |
| @@ -315,7 +315,7 @@ STORAGE_CLASS_ISP_OP2W_FUNC_H tflags OP_2w_eq( | |||
| 315 | const tvector2w _a, | 315 | const tvector2w _a, |
| 316 | const tvector2w _b); | 316 | const tvector2w _b); |
| 317 | 317 | ||
| 318 | /** @brief not equal | 318 | /* @brief not equal |
| 319 | * | 319 | * |
| 320 | * @param[in] _a first argument | 320 | * @param[in] _a first argument |
| 321 | * @param[in] _b second argument | 321 | * @param[in] _b second argument |
| @@ -329,7 +329,7 @@ STORAGE_CLASS_ISP_OP2W_FUNC_H tflags OP_2w_ne( | |||
| 329 | const tvector2w _a, | 329 | const tvector2w _a, |
| 330 | const tvector2w _b); | 330 | const tvector2w _b); |
| 331 | 331 | ||
| 332 | /** @brief less or equal | 332 | /* @brief less or equal |
| 333 | * | 333 | * |
| 334 | * @param[in] _a first argument | 334 | * @param[in] _a first argument |
| 335 | * @param[in] _b second argument | 335 | * @param[in] _b second argument |
| @@ -343,7 +343,7 @@ STORAGE_CLASS_ISP_OP2W_FUNC_H tflags OP_2w_le( | |||
| 343 | const tvector2w _a, | 343 | const tvector2w _a, |
| 344 | const tvector2w _b); | 344 | const tvector2w _b); |
| 345 | 345 | ||
| 346 | /** @brief less then | 346 | /* @brief less then |
| 347 | * | 347 | * |
| 348 | * @param[in] _a first argument | 348 | * @param[in] _a first argument |
| 349 | * @param[in] _b second argument | 349 | * @param[in] _b second argument |
| @@ -357,7 +357,7 @@ STORAGE_CLASS_ISP_OP2W_FUNC_H tflags OP_2w_lt( | |||
| 357 | const tvector2w _a, | 357 | const tvector2w _a, |
| 358 | const tvector2w _b); | 358 | const tvector2w _b); |
| 359 | 359 | ||
| 360 | /** @brief greater or equal | 360 | /* @brief greater or equal |
| 361 | * | 361 | * |
| 362 | * @param[in] _a first argument | 362 | * @param[in] _a first argument |
| 363 | * @param[in] _b second argument | 363 | * @param[in] _b second argument |
| @@ -371,7 +371,7 @@ STORAGE_CLASS_ISP_OP2W_FUNC_H tflags OP_2w_ge( | |||
| 371 | const tvector2w _a, | 371 | const tvector2w _a, |
| 372 | const tvector2w _b); | 372 | const tvector2w _b); |
| 373 | 373 | ||
| 374 | /** @brief greater than | 374 | /* @brief greater than |
| 375 | * | 375 | * |
| 376 | * @param[in] _a first argument | 376 | * @param[in] _a first argument |
| 377 | * @param[in] _b second argument | 377 | * @param[in] _b second argument |
| @@ -387,7 +387,7 @@ STORAGE_CLASS_ISP_OP2W_FUNC_H tflags OP_2w_gt( | |||
| 387 | 387 | ||
| 388 | /* Shift */ | 388 | /* Shift */ |
| 389 | 389 | ||
| 390 | /** @brief aritmetic shift right | 390 | /* @brief aritmetic shift right |
| 391 | * | 391 | * |
| 392 | * @param[in] _a input | 392 | * @param[in] _a input |
| 393 | * @param[in] _b shift amount | 393 | * @param[in] _b shift amount |
| @@ -404,7 +404,7 @@ STORAGE_CLASS_ISP_OP2W_FUNC_H tvector2w OP_2w_asr( | |||
| 404 | const tvector2w _a, | 404 | const tvector2w _a, |
| 405 | const tvector2w _b); | 405 | const tvector2w _b); |
| 406 | 406 | ||
| 407 | /** @brief aritmetic shift right with rounding | 407 | /* @brief aritmetic shift right with rounding |
| 408 | * | 408 | * |
| 409 | * @param[in] _a input | 409 | * @param[in] _a input |
| 410 | * @param[in] _b shift amount | 410 | * @param[in] _b shift amount |
| @@ -423,7 +423,7 @@ STORAGE_CLASS_ISP_OP2W_FUNC_H tvector2w OP_2w_asrrnd( | |||
| 423 | const tvector2w _a, | 423 | const tvector2w _a, |
| 424 | const tvector2w _b); | 424 | const tvector2w _b); |
| 425 | 425 | ||
| 426 | /** @brief saturating aritmetic shift left | 426 | /* @brief saturating aritmetic shift left |
| 427 | * | 427 | * |
| 428 | * @param[in] _a input | 428 | * @param[in] _a input |
| 429 | * @param[in] _b shift amount | 429 | * @param[in] _b shift amount |
| @@ -443,7 +443,7 @@ STORAGE_CLASS_ISP_OP2W_FUNC_H tvector2w OP_2w_asl( | |||
| 443 | const tvector2w _a, | 443 | const tvector2w _a, |
| 444 | const tvector2w _b); | 444 | const tvector2w _b); |
| 445 | 445 | ||
| 446 | /** @brief saturating aritmetic shift left | 446 | /* @brief saturating aritmetic shift left |
| 447 | * | 447 | * |
| 448 | * @param[in] _a input | 448 | * @param[in] _a input |
| 449 | * @param[in] _b shift amount | 449 | * @param[in] _b shift amount |
| @@ -456,7 +456,7 @@ STORAGE_CLASS_ISP_OP2W_FUNC_H tvector2w OP_2w_aslsat( | |||
| 456 | const tvector2w _a, | 456 | const tvector2w _a, |
| 457 | const tvector2w _b); | 457 | const tvector2w _b); |
| 458 | 458 | ||
| 459 | /** @brief logical shift left | 459 | /* @brief logical shift left |
| 460 | * | 460 | * |
| 461 | * @param[in] _a input | 461 | * @param[in] _a input |
| 462 | * @param[in] _b shift amount | 462 | * @param[in] _b shift amount |
| @@ -473,7 +473,7 @@ STORAGE_CLASS_ISP_OP2W_FUNC_H tvector2w OP_2w_lsl( | |||
| 473 | const tvector2w _a, | 473 | const tvector2w _a, |
| 474 | const tvector2w _b); | 474 | const tvector2w _b); |
| 475 | 475 | ||
| 476 | /** @brief logical shift right | 476 | /* @brief logical shift right |
| 477 | * | 477 | * |
| 478 | * @param[in] _a input | 478 | * @param[in] _a input |
| 479 | * @param[in] _b shift amount | 479 | * @param[in] _b shift amount |
| @@ -492,7 +492,7 @@ STORAGE_CLASS_ISP_OP2W_FUNC_H tvector2w OP_2w_lsr( | |||
| 492 | 492 | ||
| 493 | /* clipping */ | 493 | /* clipping */ |
| 494 | 494 | ||
| 495 | /** @brief Clip asymmetrical | 495 | /* @brief Clip asymmetrical |
| 496 | * | 496 | * |
| 497 | * @param[in] _a first argument | 497 | * @param[in] _a first argument |
| 498 | * @param[in] _b second argument | 498 | * @param[in] _b second argument |
| @@ -507,7 +507,7 @@ STORAGE_CLASS_ISP_OP2W_FUNC_H tvector2w OP_2w_clip_asym( | |||
| 507 | const tvector2w _a, | 507 | const tvector2w _a, |
| 508 | const tvector2w _b); | 508 | const tvector2w _b); |
| 509 | 509 | ||
| 510 | /** @brief Clip zero | 510 | /* @brief Clip zero |
| 511 | * | 511 | * |
| 512 | * @param[in] _a first argument | 512 | * @param[in] _a first argument |
| 513 | * @param[in] _b second argument | 513 | * @param[in] _b second argument |
| @@ -524,7 +524,7 @@ STORAGE_CLASS_ISP_OP2W_FUNC_H tvector2w OP_2w_clipz( | |||
| 524 | 524 | ||
| 525 | /* division */ | 525 | /* division */ |
| 526 | 526 | ||
| 527 | /** @brief Truncated division | 527 | /* @brief Truncated division |
| 528 | * | 528 | * |
| 529 | * @param[in] _a first argument | 529 | * @param[in] _a first argument |
| 530 | * @param[in] _b second argument | 530 | * @param[in] _b second argument |
| @@ -541,7 +541,7 @@ STORAGE_CLASS_ISP_OP2W_FUNC_H tvector2w OP_2w_div( | |||
| 541 | const tvector2w _a, | 541 | const tvector2w _a, |
| 542 | const tvector2w _b); | 542 | const tvector2w _b); |
| 543 | 543 | ||
| 544 | /** @brief Saturating truncated division | 544 | /* @brief Saturating truncated division |
| 545 | * | 545 | * |
| 546 | * @param[in] _a first argument | 546 | * @param[in] _a first argument |
| 547 | * @param[in] _b second argument | 547 | * @param[in] _b second argument |
| @@ -559,7 +559,7 @@ STORAGE_CLASS_ISP_OP2W_FUNC_H tvector1w OP_2w_divh( | |||
| 559 | const tvector2w _a, | 559 | const tvector2w _a, |
| 560 | const tvector1w _b); | 560 | const tvector1w _b); |
| 561 | 561 | ||
| 562 | /** @brief Modulo | 562 | /* @brief Modulo |
| 563 | * | 563 | * |
| 564 | * @param[in] _a first argument | 564 | * @param[in] _a first argument |
| 565 | * @param[in] _b second argument | 565 | * @param[in] _b second argument |
| @@ -572,7 +572,7 @@ STORAGE_CLASS_ISP_OP2W_FUNC_H tvector2w OP_2w_mod( | |||
| 572 | const tvector2w _a, | 572 | const tvector2w _a, |
| 573 | const tvector2w _b); | 573 | const tvector2w _b); |
| 574 | 574 | ||
| 575 | /** @brief Unsigned Integer Square root | 575 | /* @brief Unsigned Integer Square root |
| 576 | * | 576 | * |
| 577 | * @param[in] _a input | 577 | * @param[in] _a input |
| 578 | * | 578 | * |
| @@ -585,7 +585,7 @@ STORAGE_CLASS_ISP_OP2W_FUNC_H tvector1w_unsigned OP_2w_sqrt_u( | |||
| 585 | 585 | ||
| 586 | /* Miscellaneous */ | 586 | /* Miscellaneous */ |
| 587 | 587 | ||
| 588 | /** @brief Multiplexer | 588 | /* @brief Multiplexer |
| 589 | * | 589 | * |
| 590 | * @param[in] _a first argument | 590 | * @param[in] _a first argument |
| 591 | * @param[in] _b second argument | 591 | * @param[in] _b second argument |
| @@ -601,7 +601,7 @@ STORAGE_CLASS_ISP_OP2W_FUNC_H tvector2w OP_2w_mux( | |||
| 601 | const tvector2w _b, | 601 | const tvector2w _b, |
| 602 | const tflags _c); | 602 | const tflags _c); |
| 603 | 603 | ||
| 604 | /** @brief Average without rounding | 604 | /* @brief Average without rounding |
| 605 | * | 605 | * |
| 606 | * @param[in] _a first operand | 606 | * @param[in] _a first operand |
| 607 | * @param[in] _b second operand | 607 | * @param[in] _b second operand |
| @@ -617,7 +617,7 @@ STORAGE_CLASS_ISP_OP2W_FUNC_H tvector2w OP_2w_avg( | |||
| 617 | const tvector2w _a, | 617 | const tvector2w _a, |
| 618 | const tvector2w _b); | 618 | const tvector2w _b); |
| 619 | 619 | ||
| 620 | /** @brief Average with rounding | 620 | /* @brief Average with rounding |
| 621 | * | 621 | * |
| 622 | * @param[in] _a first argument | 622 | * @param[in] _a first argument |
| 623 | * @param[in] _b second argument | 623 | * @param[in] _b second argument |
| @@ -633,7 +633,7 @@ STORAGE_CLASS_ISP_OP2W_FUNC_H tvector2w OP_2w_avgrnd( | |||
| 633 | const tvector2w _a, | 633 | const tvector2w _a, |
| 634 | const tvector2w _b); | 634 | const tvector2w _b); |
| 635 | 635 | ||
| 636 | /** @brief Minimum | 636 | /* @brief Minimum |
| 637 | * | 637 | * |
| 638 | * @param[in] _a first argument | 638 | * @param[in] _a first argument |
| 639 | * @param[in] _b second argument | 639 | * @param[in] _b second argument |
| @@ -647,7 +647,7 @@ STORAGE_CLASS_ISP_OP2W_FUNC_H tvector2w OP_2w_min( | |||
| 647 | const tvector2w _a, | 647 | const tvector2w _a, |
| 648 | const tvector2w _b); | 648 | const tvector2w _b); |
| 649 | 649 | ||
| 650 | /** @brief Maximum | 650 | /* @brief Maximum |
| 651 | * | 651 | * |
| 652 | * @param[in] _a first argument | 652 | * @param[in] _a first argument |
| 653 | * @param[in] _b second argument | 653 | * @param[in] _b second argument |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_include/host/isys_stream2mmio_public.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_include/host/isys_stream2mmio_public.h index 5624cfcfa015..6c53ca9df96c 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_include/host/isys_stream2mmio_public.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_include/host/isys_stream2mmio_public.h | |||
| @@ -43,7 +43,7 @@ STORAGE_CLASS_STREAM2MMIO_H void stream2mmio_get_sid_state( | |||
| 43 | const stream2mmio_ID_t ID, | 43 | const stream2mmio_ID_t ID, |
| 44 | const stream2mmio_sid_ID_t sid_id, | 44 | const stream2mmio_sid_ID_t sid_id, |
| 45 | stream2mmio_sid_state_t *state); | 45 | stream2mmio_sid_state_t *state); |
| 46 | /** end of NCI */ | 46 | /* end of NCI */ |
| 47 | 47 | ||
| 48 | /***************************************************** | 48 | /***************************************************** |
| 49 | * | 49 | * |
| @@ -96,6 +96,6 @@ STORAGE_CLASS_STREAM2MMIO_H void stream2mmio_reg_store( | |||
| 96 | const stream2mmio_ID_t ID, | 96 | const stream2mmio_ID_t ID, |
| 97 | const hrt_address reg, | 97 | const hrt_address reg, |
| 98 | const hrt_data value); | 98 | const hrt_data value); |
| 99 | /** end of DLI */ | 99 | /* end of DLI */ |
| 100 | 100 | ||
| 101 | #endif /* __ISYS_STREAM2MMIO_PUBLIC_H_INCLUDED__ */ | 101 | #endif /* __ISYS_STREAM2MMIO_PUBLIC_H_INCLUDED__ */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_include/host/pixelgen_public.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_include/host/pixelgen_public.h index c0f3f3ea32d7..f597e07d7c4f 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_include/host/pixelgen_public.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_include/host/pixelgen_public.h | |||
| @@ -41,7 +41,7 @@ STORAGE_CLASS_PIXELGEN_H void pixelgen_ctrl_get_state( | |||
| 41 | STORAGE_CLASS_PIXELGEN_H void pixelgen_ctrl_dump_state( | 41 | STORAGE_CLASS_PIXELGEN_H void pixelgen_ctrl_dump_state( |
| 42 | const pixelgen_ID_t ID, | 42 | const pixelgen_ID_t ID, |
| 43 | pixelgen_ctrl_state_t *state); | 43 | pixelgen_ctrl_state_t *state); |
| 44 | /** end of NCI */ | 44 | /* end of NCI */ |
| 45 | 45 | ||
| 46 | /***************************************************** | 46 | /***************************************************** |
| 47 | * | 47 | * |
| @@ -73,7 +73,7 @@ STORAGE_CLASS_PIXELGEN_H void pixelgen_ctrl_reg_store( | |||
| 73 | const pixelgen_ID_t ID, | 73 | const pixelgen_ID_t ID, |
| 74 | const hrt_address reg, | 74 | const hrt_address reg, |
| 75 | const hrt_data value); | 75 | const hrt_data value); |
| 76 | /** end of DLI */ | 76 | /* end of DLI */ |
| 77 | 77 | ||
| 78 | #endif /* USE_INPUT_SYSTEM_VERSION_2401 */ | 78 | #endif /* USE_INPUT_SYSTEM_VERSION_2401 */ |
| 79 | #endif /* __PIXELGEN_PUBLIC_H_INCLUDED__ */ | 79 | #endif /* __PIXELGEN_PUBLIC_H_INCLUDED__ */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_include/host/ref_vector_func.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_include/host/ref_vector_func.h index a202d6dce106..c1638c06407d 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_include/host/ref_vector_func.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_include/host/ref_vector_func.h | |||
| @@ -27,7 +27,7 @@ | |||
| 27 | 27 | ||
| 28 | #include "ref_vector_func_types.h" | 28 | #include "ref_vector_func_types.h" |
| 29 | 29 | ||
| 30 | /** @brief Doubling multiply accumulate with saturation | 30 | /* @brief Doubling multiply accumulate with saturation |
| 31 | * | 31 | * |
| 32 | * @param[in] acc accumulator | 32 | * @param[in] acc accumulator |
| 33 | * @param[in] a multiply input | 33 | * @param[in] a multiply input |
| @@ -44,7 +44,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector2w OP_1w_maccd_sat( | |||
| 44 | tvector1w a, | 44 | tvector1w a, |
| 45 | tvector1w b ); | 45 | tvector1w b ); |
| 46 | 46 | ||
| 47 | /** @brief Doubling multiply accumulate | 47 | /* @brief Doubling multiply accumulate |
| 48 | * | 48 | * |
| 49 | * @param[in] acc accumulator | 49 | * @param[in] acc accumulator |
| 50 | * @param[in] a multiply input | 50 | * @param[in] a multiply input |
| @@ -61,7 +61,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector2w OP_1w_maccd( | |||
| 61 | tvector1w a, | 61 | tvector1w a, |
| 62 | tvector1w b ); | 62 | tvector1w b ); |
| 63 | 63 | ||
| 64 | /** @brief Re-aligning multiply | 64 | /* @brief Re-aligning multiply |
| 65 | * | 65 | * |
| 66 | * @param[in] a multiply input | 66 | * @param[in] a multiply input |
| 67 | * @param[in] b multiply input | 67 | * @param[in] b multiply input |
| @@ -78,7 +78,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w OP_1w_mul_realigning( | |||
| 78 | tvector1w b, | 78 | tvector1w b, |
| 79 | tscalar1w shift ); | 79 | tscalar1w shift ); |
| 80 | 80 | ||
| 81 | /** @brief Leading bit index | 81 | /* @brief Leading bit index |
| 82 | * | 82 | * |
| 83 | * @param[in] a input | 83 | * @param[in] a input |
| 84 | * | 84 | * |
| @@ -92,7 +92,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w OP_1w_mul_realigning( | |||
| 92 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w OP_1w_lod( | 92 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w OP_1w_lod( |
| 93 | tvector1w a); | 93 | tvector1w a); |
| 94 | 94 | ||
| 95 | /** @brief Config Unit Input Processing | 95 | /* @brief Config Unit Input Processing |
| 96 | * | 96 | * |
| 97 | * @param[in] a input | 97 | * @param[in] a input |
| 98 | * @param[in] input_scale input scaling factor | 98 | * @param[in] input_scale input scaling factor |
| @@ -111,7 +111,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w OP_1w_input_scaling_offset_clamping( | |||
| 111 | tscalar1w_5bit_signed input_scale, | 111 | tscalar1w_5bit_signed input_scale, |
| 112 | tscalar1w_5bit_signed input_offset); | 112 | tscalar1w_5bit_signed input_offset); |
| 113 | 113 | ||
| 114 | /** @brief Config Unit Output Processing | 114 | /* @brief Config Unit Output Processing |
| 115 | * | 115 | * |
| 116 | * @param[in] a output | 116 | * @param[in] a output |
| 117 | * @param[in] output_scale output scaling factor | 117 | * @param[in] output_scale output scaling factor |
| @@ -127,7 +127,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w OP_1w_output_scaling_clamping( | |||
| 127 | tvector1w a, | 127 | tvector1w a, |
| 128 | tscalar1w_5bit_signed output_scale); | 128 | tscalar1w_5bit_signed output_scale); |
| 129 | 129 | ||
| 130 | /** @brief Config Unit Piecewiselinear estimation | 130 | /* @brief Config Unit Piecewiselinear estimation |
| 131 | * | 131 | * |
| 132 | * @param[in] a input | 132 | * @param[in] a input |
| 133 | * @param[in] config_points config parameter structure | 133 | * @param[in] config_points config parameter structure |
| @@ -143,7 +143,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w OP_1w_piecewise_estimation( | |||
| 143 | tvector1w a, | 143 | tvector1w a, |
| 144 | ref_config_points config_points); | 144 | ref_config_points config_points); |
| 145 | 145 | ||
| 146 | /** @brief Fast Config Unit | 146 | /* @brief Fast Config Unit |
| 147 | * | 147 | * |
| 148 | * @param[in] x input | 148 | * @param[in] x input |
| 149 | * @param[in] init_vectors LUT data structure | 149 | * @param[in] init_vectors LUT data structure |
| @@ -161,7 +161,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w OP_1w_XCU( | |||
| 161 | xcu_ref_init_vectors init_vectors); | 161 | xcu_ref_init_vectors init_vectors); |
| 162 | 162 | ||
| 163 | 163 | ||
| 164 | /** @brief LXCU | 164 | /* @brief LXCU |
| 165 | * | 165 | * |
| 166 | * @param[in] x input | 166 | * @param[in] x input |
| 167 | * @param[in] init_vectors LUT data structure | 167 | * @param[in] init_vectors LUT data structure |
| @@ -180,7 +180,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w OP_1w_LXCU( | |||
| 180 | tvector1w x, | 180 | tvector1w x, |
| 181 | xcu_ref_init_vectors init_vectors); | 181 | xcu_ref_init_vectors init_vectors); |
| 182 | 182 | ||
| 183 | /** @brief Coring | 183 | /* @brief Coring |
| 184 | * | 184 | * |
| 185 | * @param[in] coring_vec Amount of coring based on brightness level | 185 | * @param[in] coring_vec Amount of coring based on brightness level |
| 186 | * @param[in] filt_input Vector of input pixels on which Coring is applied | 186 | * @param[in] filt_input Vector of input pixels on which Coring is applied |
| @@ -196,7 +196,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w coring( | |||
| 196 | tvector1w filt_input, | 196 | tvector1w filt_input, |
| 197 | tscalar1w m_CnrCoring0 ); | 197 | tscalar1w m_CnrCoring0 ); |
| 198 | 198 | ||
| 199 | /** @brief Normalised FIR with coefficients [3,4,1] | 199 | /* @brief Normalised FIR with coefficients [3,4,1] |
| 200 | * | 200 | * |
| 201 | * @param[in] m 1x3 matrix with pixels | 201 | * @param[in] m 1x3 matrix with pixels |
| 202 | * | 202 | * |
| @@ -209,7 +209,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w coring( | |||
| 209 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir1x3m_5dB_m90_nrm ( | 209 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir1x3m_5dB_m90_nrm ( |
| 210 | const s_1w_1x3_matrix m); | 210 | const s_1w_1x3_matrix m); |
| 211 | 211 | ||
| 212 | /** @brief Normalised FIR with coefficients [1,4,3] | 212 | /* @brief Normalised FIR with coefficients [1,4,3] |
| 213 | * | 213 | * |
| 214 | * @param[in] m 1x3 matrix with pixels | 214 | * @param[in] m 1x3 matrix with pixels |
| 215 | * | 215 | * |
| @@ -222,7 +222,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir1x3m_5dB_m90_nrm ( | |||
| 222 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir1x3m_5dB_p90_nrm ( | 222 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir1x3m_5dB_p90_nrm ( |
| 223 | const s_1w_1x3_matrix m); | 223 | const s_1w_1x3_matrix m); |
| 224 | 224 | ||
| 225 | /** @brief Normalised FIR with coefficients [1,2,1] | 225 | /* @brief Normalised FIR with coefficients [1,2,1] |
| 226 | * | 226 | * |
| 227 | * @param[in] m 1x3 matrix with pixels | 227 | * @param[in] m 1x3 matrix with pixels |
| 228 | * | 228 | * |
| @@ -234,7 +234,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir1x3m_5dB_p90_nrm ( | |||
| 234 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir1x3m_6dB_nrm ( | 234 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir1x3m_6dB_nrm ( |
| 235 | const s_1w_1x3_matrix m); | 235 | const s_1w_1x3_matrix m); |
| 236 | 236 | ||
| 237 | /** @brief Normalised FIR with coefficients [13,16,3] | 237 | /* @brief Normalised FIR with coefficients [13,16,3] |
| 238 | * | 238 | * |
| 239 | * @param[in] m 1x3 matrix with pixels | 239 | * @param[in] m 1x3 matrix with pixels |
| 240 | * | 240 | * |
| @@ -246,7 +246,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir1x3m_6dB_nrm ( | |||
| 246 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir1x3m_6dB_nrm_ph0 ( | 246 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir1x3m_6dB_nrm_ph0 ( |
| 247 | const s_1w_1x3_matrix m); | 247 | const s_1w_1x3_matrix m); |
| 248 | 248 | ||
| 249 | /** @brief Normalised FIR with coefficients [9,16,7] | 249 | /* @brief Normalised FIR with coefficients [9,16,7] |
| 250 | * | 250 | * |
| 251 | * @param[in] m 1x3 matrix with pixels | 251 | * @param[in] m 1x3 matrix with pixels |
| 252 | * | 252 | * |
| @@ -258,7 +258,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir1x3m_6dB_nrm_ph0 ( | |||
| 258 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir1x3m_6dB_nrm_ph1 ( | 258 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir1x3m_6dB_nrm_ph1 ( |
| 259 | const s_1w_1x3_matrix m); | 259 | const s_1w_1x3_matrix m); |
| 260 | 260 | ||
| 261 | /** @brief Normalised FIR with coefficients [5,16,11] | 261 | /* @brief Normalised FIR with coefficients [5,16,11] |
| 262 | * | 262 | * |
| 263 | * @param[in] m 1x3 matrix with pixels | 263 | * @param[in] m 1x3 matrix with pixels |
| 264 | * | 264 | * |
| @@ -270,7 +270,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir1x3m_6dB_nrm_ph1 ( | |||
| 270 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir1x3m_6dB_nrm_ph2 ( | 270 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir1x3m_6dB_nrm_ph2 ( |
| 271 | const s_1w_1x3_matrix m); | 271 | const s_1w_1x3_matrix m); |
| 272 | 272 | ||
| 273 | /** @brief Normalised FIR with coefficients [1,16,15] | 273 | /* @brief Normalised FIR with coefficients [1,16,15] |
| 274 | * | 274 | * |
| 275 | * @param[in] m 1x3 matrix with pixels | 275 | * @param[in] m 1x3 matrix with pixels |
| 276 | * | 276 | * |
| @@ -282,7 +282,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir1x3m_6dB_nrm_ph2 ( | |||
| 282 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir1x3m_6dB_nrm_ph3 ( | 282 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir1x3m_6dB_nrm_ph3 ( |
| 283 | const s_1w_1x3_matrix m); | 283 | const s_1w_1x3_matrix m); |
| 284 | 284 | ||
| 285 | /** @brief Normalised FIR with programable phase shift | 285 | /* @brief Normalised FIR with programable phase shift |
| 286 | * | 286 | * |
| 287 | * @param[in] m 1x3 matrix with pixels | 287 | * @param[in] m 1x3 matrix with pixels |
| 288 | * @param[in] coeff phase shift | 288 | * @param[in] coeff phase shift |
| @@ -295,7 +295,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir1x3m_6dB_nrm_ph3 ( | |||
| 295 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir1x3m_6dB_nrm_calc_coeff ( | 295 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir1x3m_6dB_nrm_calc_coeff ( |
| 296 | const s_1w_1x3_matrix m, tscalar1w_3bit coeff); | 296 | const s_1w_1x3_matrix m, tscalar1w_3bit coeff); |
| 297 | 297 | ||
| 298 | /** @brief 3 tap FIR with coefficients [1,1,1] | 298 | /* @brief 3 tap FIR with coefficients [1,1,1] |
| 299 | * | 299 | * |
| 300 | * @param[in] m 1x3 matrix with pixels | 300 | * @param[in] m 1x3 matrix with pixels |
| 301 | * | 301 | * |
| @@ -308,7 +308,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir1x3m_9dB_nrm ( | |||
| 308 | const s_1w_1x3_matrix m); | 308 | const s_1w_1x3_matrix m); |
| 309 | 309 | ||
| 310 | #ifdef ISP2401 | 310 | #ifdef ISP2401 |
| 311 | /** @brief symmetric 3 tap FIR acts as LPF or BSF | 311 | /* @brief symmetric 3 tap FIR acts as LPF or BSF |
| 312 | * | 312 | * |
| 313 | * @param[in] m 1x3 matrix with pixels | 313 | * @param[in] m 1x3 matrix with pixels |
| 314 | * @param[in] k filter coefficient shift | 314 | * @param[in] k filter coefficient shift |
| @@ -336,7 +336,7 @@ sym_fir1x3m_lpf_bsf(s_1w_1x3_matrix m, | |||
| 336 | tscalar_bool bsf_flag); | 336 | tscalar_bool bsf_flag); |
| 337 | #endif | 337 | #endif |
| 338 | 338 | ||
| 339 | /** @brief Normalised 2D FIR with coefficients [1;2;1] * [1,2,1] | 339 | /* @brief Normalised 2D FIR with coefficients [1;2;1] * [1,2,1] |
| 340 | * | 340 | * |
| 341 | * @param[in] m 3x3 matrix with pixels | 341 | * @param[in] m 3x3 matrix with pixels |
| 342 | * | 342 | * |
| @@ -353,7 +353,7 @@ sym_fir1x3m_lpf_bsf(s_1w_1x3_matrix m, | |||
| 353 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir3x3m_6dB_nrm ( | 353 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir3x3m_6dB_nrm ( |
| 354 | const s_1w_3x3_matrix m); | 354 | const s_1w_3x3_matrix m); |
| 355 | 355 | ||
| 356 | /** @brief Normalised 2D FIR with coefficients [1;1;1] * [1,1,1] | 356 | /* @brief Normalised 2D FIR with coefficients [1;1;1] * [1,1,1] |
| 357 | * | 357 | * |
| 358 | * @param[in] m 3x3 matrix with pixels | 358 | * @param[in] m 3x3 matrix with pixels |
| 359 | * | 359 | * |
| @@ -371,7 +371,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir3x3m_6dB_nrm ( | |||
| 371 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir3x3m_9dB_nrm ( | 371 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir3x3m_9dB_nrm ( |
| 372 | const s_1w_3x3_matrix m); | 372 | const s_1w_3x3_matrix m); |
| 373 | 373 | ||
| 374 | /** @brief Normalised dual output 2D FIR with coefficients [1;2;1] * [1,2,1] | 374 | /* @brief Normalised dual output 2D FIR with coefficients [1;2;1] * [1,2,1] |
| 375 | * | 375 | * |
| 376 | * @param[in] m 4x3 matrix with pixels | 376 | * @param[in] m 4x3 matrix with pixels |
| 377 | * | 377 | * |
| @@ -391,7 +391,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir3x3m_9dB_nrm ( | |||
| 391 | STORAGE_CLASS_REF_VECTOR_FUNC_H s_1w_2x1_matrix fir3x3m_6dB_out2x1_nrm ( | 391 | STORAGE_CLASS_REF_VECTOR_FUNC_H s_1w_2x1_matrix fir3x3m_6dB_out2x1_nrm ( |
| 392 | const s_1w_4x3_matrix m); | 392 | const s_1w_4x3_matrix m); |
| 393 | 393 | ||
| 394 | /** @brief Normalised dual output 2D FIR with coefficients [1;1;1] * [1,1,1] | 394 | /* @brief Normalised dual output 2D FIR with coefficients [1;1;1] * [1,1,1] |
| 395 | * | 395 | * |
| 396 | * @param[in] m 4x3 matrix with pixels | 396 | * @param[in] m 4x3 matrix with pixels |
| 397 | * | 397 | * |
| @@ -411,7 +411,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir3x3m_9dB_nrm ( | |||
| 411 | STORAGE_CLASS_REF_VECTOR_FUNC_H s_1w_2x1_matrix fir3x3m_9dB_out2x1_nrm ( | 411 | STORAGE_CLASS_REF_VECTOR_FUNC_H s_1w_2x1_matrix fir3x3m_9dB_out2x1_nrm ( |
| 412 | const s_1w_4x3_matrix m); | 412 | const s_1w_4x3_matrix m); |
| 413 | 413 | ||
| 414 | /** @brief Normalised 2D FIR 5x5 | 414 | /* @brief Normalised 2D FIR 5x5 |
| 415 | * | 415 | * |
| 416 | * @param[in] m 5x5 matrix with pixels | 416 | * @param[in] m 5x5 matrix with pixels |
| 417 | * | 417 | * |
| @@ -429,7 +429,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H s_1w_2x1_matrix fir3x3m_9dB_out2x1_nrm ( | |||
| 429 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir5x5m_15dB_nrm ( | 429 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir5x5m_15dB_nrm ( |
| 430 | const s_1w_5x5_matrix m); | 430 | const s_1w_5x5_matrix m); |
| 431 | 431 | ||
| 432 | /** @brief Normalised FIR 1x5 | 432 | /* @brief Normalised FIR 1x5 |
| 433 | * | 433 | * |
| 434 | * @param[in] m 1x5 matrix with pixels | 434 | * @param[in] m 1x5 matrix with pixels |
| 435 | * | 435 | * |
| @@ -447,7 +447,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir5x5m_15dB_nrm ( | |||
| 447 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir1x5m_12dB_nrm ( | 447 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir1x5m_12dB_nrm ( |
| 448 | const s_1w_1x5_matrix m); | 448 | const s_1w_1x5_matrix m); |
| 449 | 449 | ||
| 450 | /** @brief Normalised 2D FIR 5x5 | 450 | /* @brief Normalised 2D FIR 5x5 |
| 451 | * | 451 | * |
| 452 | * @param[in] m 5x5 matrix with pixels | 452 | * @param[in] m 5x5 matrix with pixels |
| 453 | * | 453 | * |
| @@ -465,7 +465,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir1x5m_12dB_nrm ( | |||
| 465 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir5x5m_12dB_nrm ( | 465 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir5x5m_12dB_nrm ( |
| 466 | const s_1w_5x5_matrix m); | 466 | const s_1w_5x5_matrix m); |
| 467 | 467 | ||
| 468 | /** @brief Approximate averaging FIR 1x5 | 468 | /* @brief Approximate averaging FIR 1x5 |
| 469 | * | 469 | * |
| 470 | * @param[in] m 1x5 matrix with pixels | 470 | * @param[in] m 1x5 matrix with pixels |
| 471 | * | 471 | * |
| @@ -479,7 +479,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir5x5m_12dB_nrm ( | |||
| 479 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir1x5m_box ( | 479 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir1x5m_box ( |
| 480 | s_1w_1x5_matrix m); | 480 | s_1w_1x5_matrix m); |
| 481 | 481 | ||
| 482 | /** @brief Approximate averaging FIR 1x9 | 482 | /* @brief Approximate averaging FIR 1x9 |
| 483 | * | 483 | * |
| 484 | * @param[in] m 1x9 matrix with pixels | 484 | * @param[in] m 1x9 matrix with pixels |
| 485 | * | 485 | * |
| @@ -493,7 +493,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir1x5m_box ( | |||
| 493 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir1x9m_box ( | 493 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir1x9m_box ( |
| 494 | s_1w_1x9_matrix m); | 494 | s_1w_1x9_matrix m); |
| 495 | 495 | ||
| 496 | /** @brief Approximate averaging FIR 1x11 | 496 | /* @brief Approximate averaging FIR 1x11 |
| 497 | * | 497 | * |
| 498 | * @param[in] m 1x11 matrix with pixels | 498 | * @param[in] m 1x11 matrix with pixels |
| 499 | * | 499 | * |
| @@ -507,7 +507,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir1x9m_box ( | |||
| 507 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir1x11m_box ( | 507 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w fir1x11m_box ( |
| 508 | s_1w_1x11_matrix m); | 508 | s_1w_1x11_matrix m); |
| 509 | 509 | ||
| 510 | /** @brief Symmetric 7 tap filter with normalization | 510 | /* @brief Symmetric 7 tap filter with normalization |
| 511 | * | 511 | * |
| 512 | * @param[in] in 1x7 matrix with pixels | 512 | * @param[in] in 1x7 matrix with pixels |
| 513 | * @param[in] coeff 1x4 matrix with coefficients | 513 | * @param[in] coeff 1x4 matrix with coefficients |
| @@ -528,7 +528,7 @@ fir1x7m_sym_nrm(s_1w_1x7_matrix in, | |||
| 528 | s_1w_1x4_matrix coeff, | 528 | s_1w_1x4_matrix coeff, |
| 529 | tvector1w out_shift); | 529 | tvector1w out_shift); |
| 530 | 530 | ||
| 531 | /** @brief Symmetric 7 tap filter with normalization at input side | 531 | /* @brief Symmetric 7 tap filter with normalization at input side |
| 532 | * | 532 | * |
| 533 | * @param[in] in 1x7 matrix with pixels | 533 | * @param[in] in 1x7 matrix with pixels |
| 534 | * @param[in] coeff 1x4 matrix with coefficients | 534 | * @param[in] coeff 1x4 matrix with coefficients |
| @@ -549,7 +549,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w | |||
| 549 | fir1x7m_sym_innrm_approx(s_1w_1x7_matrix in, | 549 | fir1x7m_sym_innrm_approx(s_1w_1x7_matrix in, |
| 550 | s_1w_1x4_matrix coeff); | 550 | s_1w_1x4_matrix coeff); |
| 551 | 551 | ||
| 552 | /** @brief Symmetric 7 tap filter with normalization at output side | 552 | /* @brief Symmetric 7 tap filter with normalization at output side |
| 553 | * | 553 | * |
| 554 | * @param[in] in 1x7 matrix with pixels | 554 | * @param[in] in 1x7 matrix with pixels |
| 555 | * @param[in] coeff 1x4 matrix with coefficients | 555 | * @param[in] coeff 1x4 matrix with coefficients |
| @@ -571,7 +571,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w | |||
| 571 | fir1x7m_sym_outnrm_approx(s_1w_1x7_matrix in, | 571 | fir1x7m_sym_outnrm_approx(s_1w_1x7_matrix in, |
| 572 | s_1w_1x4_matrix coeff); | 572 | s_1w_1x4_matrix coeff); |
| 573 | 573 | ||
| 574 | /** @brief 4 tap filter with normalization | 574 | /* @brief 4 tap filter with normalization |
| 575 | * | 575 | * |
| 576 | * @param[in] in 1x4 matrix with pixels | 576 | * @param[in] in 1x4 matrix with pixels |
| 577 | * @param[in] coeff 1x4 matrix with coefficients | 577 | * @param[in] coeff 1x4 matrix with coefficients |
| @@ -588,7 +588,7 @@ fir1x4m_nrm(s_1w_1x4_matrix in, | |||
| 588 | s_1w_1x4_matrix coeff, | 588 | s_1w_1x4_matrix coeff, |
| 589 | tvector1w out_shift); | 589 | tvector1w out_shift); |
| 590 | 590 | ||
| 591 | /** @brief 4 tap filter with normalization for half pixel interpolation | 591 | /* @brief 4 tap filter with normalization for half pixel interpolation |
| 592 | * | 592 | * |
| 593 | * @param[in] in 1x4 matrix with pixels | 593 | * @param[in] in 1x4 matrix with pixels |
| 594 | * | 594 | * |
| @@ -604,7 +604,7 @@ fir1x4m_nrm(s_1w_1x4_matrix in, | |||
| 604 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w | 604 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w |
| 605 | fir1x4m_bicubic_bezier_half(s_1w_1x4_matrix in); | 605 | fir1x4m_bicubic_bezier_half(s_1w_1x4_matrix in); |
| 606 | 606 | ||
| 607 | /** @brief 4 tap filter with normalization for quarter pixel interpolation | 607 | /* @brief 4 tap filter with normalization for quarter pixel interpolation |
| 608 | * | 608 | * |
| 609 | * @param[in] in 1x4 matrix with pixels | 609 | * @param[in] in 1x4 matrix with pixels |
| 610 | * @param[in] coeff 1x4 matrix with coefficients | 610 | * @param[in] coeff 1x4 matrix with coefficients |
| @@ -626,7 +626,7 @@ fir1x4m_bicubic_bezier_quarter(s_1w_1x4_matrix in, | |||
| 626 | s_1w_1x4_matrix coeff); | 626 | s_1w_1x4_matrix coeff); |
| 627 | 627 | ||
| 628 | 628 | ||
| 629 | /** @brief Symmetric 3 tap filter with normalization | 629 | /* @brief Symmetric 3 tap filter with normalization |
| 630 | * | 630 | * |
| 631 | * @param[in] in 1x3 matrix with pixels | 631 | * @param[in] in 1x3 matrix with pixels |
| 632 | * @param[in] coeff 1x2 matrix with coefficients | 632 | * @param[in] coeff 1x2 matrix with coefficients |
| @@ -646,7 +646,7 @@ fir1x3m_sym_nrm(s_1w_1x3_matrix in, | |||
| 646 | s_1w_1x2_matrix coeff, | 646 | s_1w_1x2_matrix coeff, |
| 647 | tvector1w out_shift); | 647 | tvector1w out_shift); |
| 648 | 648 | ||
| 649 | /** @brief Symmetric 3 tap filter with normalization | 649 | /* @brief Symmetric 3 tap filter with normalization |
| 650 | * | 650 | * |
| 651 | * @param[in] in 1x3 matrix with pixels | 651 | * @param[in] in 1x3 matrix with pixels |
| 652 | * @param[in] coeff 1x2 matrix with coefficients | 652 | * @param[in] coeff 1x2 matrix with coefficients |
| @@ -666,7 +666,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w | |||
| 666 | fir1x3m_sym_nrm_approx(s_1w_1x3_matrix in, | 666 | fir1x3m_sym_nrm_approx(s_1w_1x3_matrix in, |
| 667 | s_1w_1x2_matrix coeff); | 667 | s_1w_1x2_matrix coeff); |
| 668 | 668 | ||
| 669 | /** @brief Mean of 1x3 matrix | 669 | /* @brief Mean of 1x3 matrix |
| 670 | * | 670 | * |
| 671 | * @param[in] m 1x3 matrix with pixels | 671 | * @param[in] m 1x3 matrix with pixels |
| 672 | * | 672 | * |
| @@ -678,7 +678,7 @@ fir1x3m_sym_nrm_approx(s_1w_1x3_matrix in, | |||
| 678 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w mean1x3m( | 678 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w mean1x3m( |
| 679 | s_1w_1x3_matrix m); | 679 | s_1w_1x3_matrix m); |
| 680 | 680 | ||
| 681 | /** @brief Mean of 3x3 matrix | 681 | /* @brief Mean of 3x3 matrix |
| 682 | * | 682 | * |
| 683 | * @param[in] m 3x3 matrix with pixels | 683 | * @param[in] m 3x3 matrix with pixels |
| 684 | * | 684 | * |
| @@ -690,7 +690,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w mean1x3m( | |||
| 690 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w mean3x3m( | 690 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w mean3x3m( |
| 691 | s_1w_3x3_matrix m); | 691 | s_1w_3x3_matrix m); |
| 692 | 692 | ||
| 693 | /** @brief Mean of 1x4 matrix | 693 | /* @brief Mean of 1x4 matrix |
| 694 | * | 694 | * |
| 695 | * @param[in] m 1x4 matrix with pixels | 695 | * @param[in] m 1x4 matrix with pixels |
| 696 | * | 696 | * |
| @@ -701,7 +701,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w mean3x3m( | |||
| 701 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w mean1x4m( | 701 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w mean1x4m( |
| 702 | s_1w_1x4_matrix m); | 702 | s_1w_1x4_matrix m); |
| 703 | 703 | ||
| 704 | /** @brief Mean of 4x4 matrix | 704 | /* @brief Mean of 4x4 matrix |
| 705 | * | 705 | * |
| 706 | * @param[in] m 4x4 matrix with pixels | 706 | * @param[in] m 4x4 matrix with pixels |
| 707 | * | 707 | * |
| @@ -712,7 +712,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w mean1x4m( | |||
| 712 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w mean4x4m( | 712 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w mean4x4m( |
| 713 | s_1w_4x4_matrix m); | 713 | s_1w_4x4_matrix m); |
| 714 | 714 | ||
| 715 | /** @brief Mean of 2x3 matrix | 715 | /* @brief Mean of 2x3 matrix |
| 716 | * | 716 | * |
| 717 | * @param[in] m 2x3 matrix with pixels | 717 | * @param[in] m 2x3 matrix with pixels |
| 718 | * | 718 | * |
| @@ -724,7 +724,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w mean4x4m( | |||
| 724 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w mean2x3m( | 724 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w mean2x3m( |
| 725 | s_1w_2x3_matrix m); | 725 | s_1w_2x3_matrix m); |
| 726 | 726 | ||
| 727 | /** @brief Mean of 1x5 matrix | 727 | /* @brief Mean of 1x5 matrix |
| 728 | * | 728 | * |
| 729 | * @param[in] m 1x5 matrix with pixels | 729 | * @param[in] m 1x5 matrix with pixels |
| 730 | * | 730 | * |
| @@ -735,7 +735,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w mean2x3m( | |||
| 735 | */ | 735 | */ |
| 736 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w mean1x5m(s_1w_1x5_matrix m); | 736 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w mean1x5m(s_1w_1x5_matrix m); |
| 737 | 737 | ||
| 738 | /** @brief Mean of 1x6 matrix | 738 | /* @brief Mean of 1x6 matrix |
| 739 | * | 739 | * |
| 740 | * @param[in] m 1x6 matrix with pixels | 740 | * @param[in] m 1x6 matrix with pixels |
| 741 | * | 741 | * |
| @@ -747,7 +747,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w mean1x5m(s_1w_1x5_matrix m); | |||
| 747 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w mean1x6m( | 747 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w mean1x6m( |
| 748 | s_1w_1x6_matrix m); | 748 | s_1w_1x6_matrix m); |
| 749 | 749 | ||
| 750 | /** @brief Mean of 5x5 matrix | 750 | /* @brief Mean of 5x5 matrix |
| 751 | * | 751 | * |
| 752 | * @param[in] m 5x5 matrix with pixels | 752 | * @param[in] m 5x5 matrix with pixels |
| 753 | * | 753 | * |
| @@ -759,7 +759,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w mean1x6m( | |||
| 759 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w mean5x5m( | 759 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w mean5x5m( |
| 760 | s_1w_5x5_matrix m); | 760 | s_1w_5x5_matrix m); |
| 761 | 761 | ||
| 762 | /** @brief Mean of 6x6 matrix | 762 | /* @brief Mean of 6x6 matrix |
| 763 | * | 763 | * |
| 764 | * @param[in] m 6x6 matrix with pixels | 764 | * @param[in] m 6x6 matrix with pixels |
| 765 | * | 765 | * |
| @@ -771,7 +771,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w mean5x5m( | |||
| 771 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w mean6x6m( | 771 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w mean6x6m( |
| 772 | s_1w_6x6_matrix m); | 772 | s_1w_6x6_matrix m); |
| 773 | 773 | ||
| 774 | /** @brief Minimum of 4x4 matrix | 774 | /* @brief Minimum of 4x4 matrix |
| 775 | * | 775 | * |
| 776 | * @param[in] m 4x4 matrix with pixels | 776 | * @param[in] m 4x4 matrix with pixels |
| 777 | * | 777 | * |
| @@ -783,7 +783,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w mean6x6m( | |||
| 783 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w min4x4m( | 783 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w min4x4m( |
| 784 | s_1w_4x4_matrix m); | 784 | s_1w_4x4_matrix m); |
| 785 | 785 | ||
| 786 | /** @brief Maximum of 4x4 matrix | 786 | /* @brief Maximum of 4x4 matrix |
| 787 | * | 787 | * |
| 788 | * @param[in] m 4x4 matrix with pixels | 788 | * @param[in] m 4x4 matrix with pixels |
| 789 | * | 789 | * |
| @@ -795,7 +795,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w min4x4m( | |||
| 795 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w max4x4m( | 795 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w max4x4m( |
| 796 | s_1w_4x4_matrix m); | 796 | s_1w_4x4_matrix m); |
| 797 | 797 | ||
| 798 | /** @brief SAD between two 3x3 matrices | 798 | /* @brief SAD between two 3x3 matrices |
| 799 | * | 799 | * |
| 800 | * @param[in] a 3x3 matrix with pixels | 800 | * @param[in] a 3x3 matrix with pixels |
| 801 | * | 801 | * |
| @@ -813,7 +813,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w sad3x3m_precise( | |||
| 813 | s_1w_3x3_matrix a, | 813 | s_1w_3x3_matrix a, |
| 814 | s_1w_3x3_matrix b); | 814 | s_1w_3x3_matrix b); |
| 815 | 815 | ||
| 816 | /** @brief SAD between two 3x3 matrices | 816 | /* @brief SAD between two 3x3 matrices |
| 817 | * | 817 | * |
| 818 | * @param[in] a 3x3 matrix with pixels | 818 | * @param[in] a 3x3 matrix with pixels |
| 819 | * | 819 | * |
| @@ -833,7 +833,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w sad3x3m( | |||
| 833 | s_1w_3x3_matrix a, | 833 | s_1w_3x3_matrix a, |
| 834 | s_1w_3x3_matrix b); | 834 | s_1w_3x3_matrix b); |
| 835 | 835 | ||
| 836 | /** @brief SAD between two 5x5 matrices | 836 | /* @brief SAD between two 5x5 matrices |
| 837 | * | 837 | * |
| 838 | * @param[in] a 5x5 matrix with pixels | 838 | * @param[in] a 5x5 matrix with pixels |
| 839 | * | 839 | * |
| @@ -847,7 +847,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w sad5x5m( | |||
| 847 | s_1w_5x5_matrix a, | 847 | s_1w_5x5_matrix a, |
| 848 | s_1w_5x5_matrix b); | 848 | s_1w_5x5_matrix b); |
| 849 | 849 | ||
| 850 | /** @brief Absolute gradient between two sets of 1x5 matrices | 850 | /* @brief Absolute gradient between two sets of 1x5 matrices |
| 851 | * | 851 | * |
| 852 | * @param[in] m0 first set of 1x5 matrix with pixels | 852 | * @param[in] m0 first set of 1x5 matrix with pixels |
| 853 | * @param[in] m1 second set of 1x5 matrix with pixels | 853 | * @param[in] m1 second set of 1x5 matrix with pixels |
| @@ -860,7 +860,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w sad5x5m( | |||
| 860 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w | 860 | STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w |
| 861 | absgrad1x5m(s_1w_1x5_matrix m0, s_1w_1x5_matrix m1); | 861 | absgrad1x5m(s_1w_1x5_matrix m0, s_1w_1x5_matrix m1); |
| 862 | 862 | ||
| 863 | /** @brief Bi-linear Interpolation optimized(approximate) | 863 | /* @brief Bi-linear Interpolation optimized(approximate) |
| 864 | * | 864 | * |
| 865 | * @param[in] a input0 | 865 | * @param[in] a input0 |
| 866 | * @param[in] b input1 | 866 | * @param[in] b input1 |
| @@ -882,7 +882,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w OP_1w_bilinear_interpol_approx_c( | |||
| 882 | tvector1w b, | 882 | tvector1w b, |
| 883 | tscalar1w_weight c); | 883 | tscalar1w_weight c); |
| 884 | 884 | ||
| 885 | /** @brief Bi-linear Interpolation optimized(approximate) | 885 | /* @brief Bi-linear Interpolation optimized(approximate) |
| 886 | * | 886 | * |
| 887 | * @param[in] a input0 | 887 | * @param[in] a input0 |
| 888 | * @param[in] b input1 | 888 | * @param[in] b input1 |
| @@ -904,7 +904,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w OP_1w_bilinear_interpol_approx( | |||
| 904 | tvector1w b, | 904 | tvector1w b, |
| 905 | tvector1w_weight c); | 905 | tvector1w_weight c); |
| 906 | 906 | ||
| 907 | /** @brief Bi-linear Interpolation | 907 | /* @brief Bi-linear Interpolation |
| 908 | * | 908 | * |
| 909 | * @param[in] a input0 | 909 | * @param[in] a input0 |
| 910 | * @param[in] b input1 | 910 | * @param[in] b input1 |
| @@ -925,7 +925,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w OP_1w_bilinear_interpol( | |||
| 925 | tvector1w b, | 925 | tvector1w b, |
| 926 | tscalar1w_weight c); | 926 | tscalar1w_weight c); |
| 927 | 927 | ||
| 928 | /** @brief Generic Block Matching Algorithm | 928 | /* @brief Generic Block Matching Algorithm |
| 929 | * @param[in] search_window pointer to input search window of 16x16 pixels | 929 | * @param[in] search_window pointer to input search window of 16x16 pixels |
| 930 | * @param[in] ref_block pointer to input reference block of 8x8 pixels, where N<=M | 930 | * @param[in] ref_block pointer to input reference block of 8x8 pixels, where N<=M |
| 931 | * @param[in] output pointer to output sads | 931 | * @param[in] output pointer to output sads |
| @@ -954,9 +954,9 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H int generic_block_matching_algorithm( | |||
| 954 | tscalar1w_4bit_bma_shift shift); | 954 | tscalar1w_4bit_bma_shift shift); |
| 955 | 955 | ||
| 956 | #ifndef ISP2401 | 956 | #ifndef ISP2401 |
| 957 | /** @brief OP_1w_asp_bma_16_1_32way | 957 | /* @brief OP_1w_asp_bma_16_1_32way |
| 958 | #else | 958 | #else |
| 959 | /** @brief OP_1w_asp_bma_16_1_32way_nomask | 959 | /* @brief OP_1w_asp_bma_16_1_32way_nomask |
| 960 | #endif | 960 | #endif |
| 961 | * | 961 | * |
| 962 | * @param[in] search_area input search window of 16x16 pixels | 962 | * @param[in] search_area input search window of 16x16 pixels |
| @@ -984,9 +984,9 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H bma_output_16_1 OP_1w_asp_bma_16_1_32way_nomask( | |||
| 984 | tscalar1w_4bit_bma_shift shift); | 984 | tscalar1w_4bit_bma_shift shift); |
| 985 | 985 | ||
| 986 | #ifndef ISP2401 | 986 | #ifndef ISP2401 |
| 987 | /** @brief OP_1w_asp_bma_16_2_32way | 987 | /* @brief OP_1w_asp_bma_16_2_32way |
| 988 | #else | 988 | #else |
| 989 | /** @brief OP_1w_asp_bma_16_2_32way_nomask | 989 | /* @brief OP_1w_asp_bma_16_2_32way_nomask |
| 990 | #endif | 990 | #endif |
| 991 | * | 991 | * |
| 992 | * @param[in] search_area input search window of 16x16 pixels | 992 | * @param[in] search_area input search window of 16x16 pixels |
| @@ -1011,9 +1011,9 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H bma_output_16_2 OP_1w_asp_bma_16_2_32way_nomask( | |||
| 1011 | ref_block_8x8 input_block, | 1011 | ref_block_8x8 input_block, |
| 1012 | tscalar1w_4bit_bma_shift shift); | 1012 | tscalar1w_4bit_bma_shift shift); |
| 1013 | #ifndef ISP2401 | 1013 | #ifndef ISP2401 |
| 1014 | /** @brief OP_1w_asp_bma_14_1_32way | 1014 | /* @brief OP_1w_asp_bma_14_1_32way |
| 1015 | #else | 1015 | #else |
| 1016 | /** @brief OP_1w_asp_bma_14_1_32way_nomask | 1016 | /* @brief OP_1w_asp_bma_14_1_32way_nomask |
| 1017 | #endif | 1017 | #endif |
| 1018 | * | 1018 | * |
| 1019 | * @param[in] search_area input search block of 16x16 pixels with search window of 14x14 pixels | 1019 | * @param[in] search_area input search block of 16x16 pixels with search window of 14x14 pixels |
| @@ -1041,9 +1041,9 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H bma_output_14_1 OP_1w_asp_bma_14_1_32way_nomask( | |||
| 1041 | tscalar1w_4bit_bma_shift shift); | 1041 | tscalar1w_4bit_bma_shift shift); |
| 1042 | 1042 | ||
| 1043 | #ifndef ISP2401 | 1043 | #ifndef ISP2401 |
| 1044 | /** @brief OP_1w_asp_bma_14_2_32way | 1044 | /* @brief OP_1w_asp_bma_14_2_32way |
| 1045 | #else | 1045 | #else |
| 1046 | /** @brief OP_1w_asp_bma_14_2_32way_nomask | 1046 | /* @brief OP_1w_asp_bma_14_2_32way_nomask |
| 1047 | #endif | 1047 | #endif |
| 1048 | * | 1048 | * |
| 1049 | * @param[in] search_area input search block of 16x16 pixels with search window of 14x14 pixels | 1049 | * @param[in] search_area input search block of 16x16 pixels with search window of 14x14 pixels |
| @@ -1069,7 +1069,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H bma_output_14_2 OP_1w_asp_bma_14_2_32way_nomask( | |||
| 1069 | tscalar1w_4bit_bma_shift shift); | 1069 | tscalar1w_4bit_bma_shift shift); |
| 1070 | 1070 | ||
| 1071 | #ifdef ISP2401 | 1071 | #ifdef ISP2401 |
| 1072 | /** @brief multiplex addition and passing | 1072 | /* @brief multiplex addition and passing |
| 1073 | * | 1073 | * |
| 1074 | * @param[in] _a first pixel | 1074 | * @param[in] _a first pixel |
| 1075 | * @param[in] _b second pixel | 1075 | * @param[in] _b second pixel |
| @@ -1087,7 +1087,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H tvector1w OP_1w_cond_add( | |||
| 1087 | 1087 | ||
| 1088 | #endif | 1088 | #endif |
| 1089 | #ifdef HAS_bfa_unit | 1089 | #ifdef HAS_bfa_unit |
| 1090 | /** @brief OP_1w_single_bfa_7x7 | 1090 | /* @brief OP_1w_single_bfa_7x7 |
| 1091 | * | 1091 | * |
| 1092 | * @param[in] weights - spatial and range weight lut | 1092 | * @param[in] weights - spatial and range weight lut |
| 1093 | * @param[in] threshold - threshold plane, for range weight scaling | 1093 | * @param[in] threshold - threshold plane, for range weight scaling |
| @@ -1115,7 +1115,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H bfa_7x7_output OP_1w_single_bfa_7x7( | |||
| 1115 | tvector1w central_pix, | 1115 | tvector1w central_pix, |
| 1116 | s_1w_7x7_matrix src_plane); | 1116 | s_1w_7x7_matrix src_plane); |
| 1117 | 1117 | ||
| 1118 | /** @brief OP_1w_joint_bfa_7x7 | 1118 | /* @brief OP_1w_joint_bfa_7x7 |
| 1119 | * | 1119 | * |
| 1120 | * @param[in] weights - spatial and range weight lut | 1120 | * @param[in] weights - spatial and range weight lut |
| 1121 | * @param[in] threshold0 - 1st threshold plane, for range weight scaling | 1121 | * @param[in] threshold0 - 1st threshold plane, for range weight scaling |
| @@ -1149,7 +1149,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H bfa_7x7_output OP_1w_joint_bfa_7x7( | |||
| 1149 | tvector1w central_pix1, | 1149 | tvector1w central_pix1, |
| 1150 | s_1w_7x7_matrix src1_plane); | 1150 | s_1w_7x7_matrix src1_plane); |
| 1151 | 1151 | ||
| 1152 | /** @brief bbb_bfa_gen_spatial_weight_lut | 1152 | /* @brief bbb_bfa_gen_spatial_weight_lut |
| 1153 | * | 1153 | * |
| 1154 | * @param[in] in - 7x7 matrix of spatial weights | 1154 | * @param[in] in - 7x7 matrix of spatial weights |
| 1155 | * @param[in] out - generated LUT | 1155 | * @param[in] out - generated LUT |
| @@ -1163,7 +1163,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H void bbb_bfa_gen_spatial_weight_lut( | |||
| 1163 | s_1w_7x7_matrix in, | 1163 | s_1w_7x7_matrix in, |
| 1164 | tvector1w out[BFA_MAX_KWAY]); | 1164 | tvector1w out[BFA_MAX_KWAY]); |
| 1165 | 1165 | ||
| 1166 | /** @brief bbb_bfa_gen_range_weight_lut | 1166 | /* @brief bbb_bfa_gen_range_weight_lut |
| 1167 | * | 1167 | * |
| 1168 | * @param[in] in - input range weight, | 1168 | * @param[in] in - input range weight, |
| 1169 | * @param[in] out - generated LUT | 1169 | * @param[in] out - generated LUT |
| @@ -1184,7 +1184,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H void bbb_bfa_gen_range_weight_lut( | |||
| 1184 | #endif | 1184 | #endif |
| 1185 | 1185 | ||
| 1186 | #ifdef ISP2401 | 1186 | #ifdef ISP2401 |
| 1187 | /** @brief OP_1w_imax32 | 1187 | /* @brief OP_1w_imax32 |
| 1188 | * | 1188 | * |
| 1189 | * @param[in] src - structure that holds an array of 32 elements. | 1189 | * @param[in] src - structure that holds an array of 32 elements. |
| 1190 | * | 1190 | * |
| @@ -1195,7 +1195,7 @@ STORAGE_CLASS_REF_VECTOR_FUNC_H void bbb_bfa_gen_range_weight_lut( | |||
| 1195 | STORAGE_CLASS_REF_VECTOR_FUNC_H int OP_1w_imax32( | 1195 | STORAGE_CLASS_REF_VECTOR_FUNC_H int OP_1w_imax32( |
| 1196 | imax32_ref_in_vector src); | 1196 | imax32_ref_in_vector src); |
| 1197 | 1197 | ||
| 1198 | /** @brief OP_1w_imaxidx32 | 1198 | /* @brief OP_1w_imaxidx32 |
| 1199 | * | 1199 | * |
| 1200 | * @param[in] src - structure that holds a vector of elements. | 1200 | * @param[in] src - structure that holds a vector of elements. |
| 1201 | * | 1201 | * |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_include/math_support.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_include/math_support.h index e85e5c889c15..6436dae0007e 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_include/math_support.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_include/math_support.h | |||
| @@ -168,7 +168,7 @@ static inline unsigned int round_half_down_mul(unsigned int a, unsigned int b) | |||
| 168 | } | 168 | } |
| 169 | #endif | 169 | #endif |
| 170 | 170 | ||
| 171 | /** @brief Next Power of Two | 171 | /* @brief Next Power of Two |
| 172 | * | 172 | * |
| 173 | * @param[in] unsigned number | 173 | * @param[in] unsigned number |
| 174 | * | 174 | * |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_include/string_support.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_include/string_support.h index d80437c58bde..f4d9674cdab6 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_include/string_support.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_include/string_support.h | |||
| @@ -23,7 +23,7 @@ | |||
| 23 | */ | 23 | */ |
| 24 | 24 | ||
| 25 | 25 | ||
| 26 | /** @brief Copy from src_buf to dest_buf. | 26 | /* @brief Copy from src_buf to dest_buf. |
| 27 | * | 27 | * |
| 28 | * @param[out] dest_buf. Destination buffer to copy to | 28 | * @param[out] dest_buf. Destination buffer to copy to |
| 29 | * @param[in] dest_size. The size of the destination buffer in bytes | 29 | * @param[in] dest_size. The size of the destination buffer in bytes |
| @@ -53,7 +53,7 @@ static inline int memcpy_s( | |||
| 53 | return 0; | 53 | return 0; |
| 54 | } | 54 | } |
| 55 | 55 | ||
| 56 | /** @brief Get the length of the string, excluding the null terminator | 56 | /* @brief Get the length of the string, excluding the null terminator |
| 57 | * | 57 | * |
| 58 | * @param[in] src_str. The source string | 58 | * @param[in] src_str. The source string |
| 59 | * @param[in] max_len. Look only for max_len bytes in the string | 59 | * @param[in] max_len. Look only for max_len bytes in the string |
| @@ -78,7 +78,7 @@ static size_t strnlen_s( | |||
| 78 | return ix; | 78 | return ix; |
| 79 | } | 79 | } |
| 80 | 80 | ||
| 81 | /** @brief Copy string from src_str to dest_str | 81 | /* @brief Copy string from src_str to dest_str |
| 82 | * | 82 | * |
| 83 | * @param[out] dest_str. Destination buffer to copy to | 83 | * @param[out] dest_str. Destination buffer to copy to |
| 84 | * @param[in] dest_size. The size of the destination buffer in bytes | 84 | * @param[in] dest_size. The size of the destination buffer in bytes |
| @@ -120,7 +120,7 @@ static inline int strncpy_s( | |||
| 120 | return 0; | 120 | return 0; |
| 121 | } | 121 | } |
| 122 | 122 | ||
| 123 | /** @brief Copy string from src_str to dest_str | 123 | /* @brief Copy string from src_str to dest_str |
| 124 | * | 124 | * |
| 125 | * @param[out] dest_str. Destination buffer to copy to | 125 | * @param[out] dest_str. Destination buffer to copy to |
| 126 | * @param[in] dest_size. The size of the destination buffer in bytes | 126 | * @param[in] dest_size. The size of the destination buffer in bytes |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_shared/host/tag.c b/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_shared/host/tag.c index 9aa8c168a803..2cf1d58941bf 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_shared/host/tag.c +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/hive_isp_css_shared/host/tag.c | |||
| @@ -17,7 +17,7 @@ | |||
| 17 | #include <assert_support.h> | 17 | #include <assert_support.h> |
| 18 | #include "tag_local.h" | 18 | #include "tag_local.h" |
| 19 | 19 | ||
| 20 | /** | 20 | /* |
| 21 | * @brief Creates the tag description from the given parameters. | 21 | * @brief Creates the tag description from the given parameters. |
| 22 | * @param[in] num_captures | 22 | * @param[in] num_captures |
| 23 | * @param[in] skip | 23 | * @param[in] skip |
| @@ -39,7 +39,7 @@ sh_css_create_tag_descr(int num_captures, | |||
| 39 | tag_descr->exp_id = exp_id; | 39 | tag_descr->exp_id = exp_id; |
| 40 | } | 40 | } |
| 41 | 41 | ||
| 42 | /** | 42 | /* |
| 43 | * @brief Encodes the members of tag description into a 32-bit value. | 43 | * @brief Encodes the members of tag description into a 32-bit value. |
| 44 | * @param[in] tag Pointer to the tag description | 44 | * @param[in] tag Pointer to the tag description |
| 45 | * @return (unsigned int) Encoded 32-bit tag-info | 45 | * @return (unsigned int) Encoded 32-bit tag-info |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css.h index 2458b3767c90..e44df6916d90 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css.h | |||
| @@ -16,7 +16,7 @@ | |||
| 16 | #ifndef _IA_CSS_H_ | 16 | #ifndef _IA_CSS_H_ |
| 17 | #define _IA_CSS_H_ | 17 | #define _IA_CSS_H_ |
| 18 | 18 | ||
| 19 | /** @file | 19 | /* @file |
| 20 | * This file is the starting point of the CSS-API. It includes all CSS-API | 20 | * This file is the starting point of the CSS-API. It includes all CSS-API |
| 21 | * header files. | 21 | * header files. |
| 22 | */ | 22 | */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_3a.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_3a.h index a80a7dbaf712..080198796ad0 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_3a.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_3a.h | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | #ifndef __IA_CSS_3A_H | 15 | #ifndef __IA_CSS_3A_H |
| 16 | #define __IA_CSS_3A_H | 16 | #define __IA_CSS_3A_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * This file contains types used for 3A statistics | 19 | * This file contains types used for 3A statistics |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| @@ -31,7 +31,7 @@ enum ia_css_3a_tables { | |||
| 31 | IA_CSS_NUM_3A_TABLES | 31 | IA_CSS_NUM_3A_TABLES |
| 32 | }; | 32 | }; |
| 33 | 33 | ||
| 34 | /** Structure that holds 3A statistics in the ISP internal | 34 | /* Structure that holds 3A statistics in the ISP internal |
| 35 | * format. Use ia_css_get_3a_statistics() to translate | 35 | * format. Use ia_css_get_3a_statistics() to translate |
| 36 | * this to the format used on the host (3A library). | 36 | * this to the format used on the host (3A library). |
| 37 | * */ | 37 | * */ |
| @@ -48,13 +48,13 @@ struct ia_css_isp_3a_statistics { | |||
| 48 | struct { | 48 | struct { |
| 49 | ia_css_ptr rgby_tbl; | 49 | ia_css_ptr rgby_tbl; |
| 50 | } data_hmem; | 50 | } data_hmem; |
| 51 | uint32_t exp_id; /**< exposure id, to match statistics to a frame, | 51 | uint32_t exp_id; /** exposure id, to match statistics to a frame, |
| 52 | see ia_css_event_public.h for more detail. */ | 52 | see ia_css_event_public.h for more detail. */ |
| 53 | uint32_t isp_config_id;/**< Unique ID to track which config was actually applied to a particular frame */ | 53 | uint32_t isp_config_id;/** Unique ID to track which config was actually applied to a particular frame */ |
| 54 | ia_css_ptr data_ptr; /**< pointer to base of all data */ | 54 | ia_css_ptr data_ptr; /** pointer to base of all data */ |
| 55 | uint32_t size; /**< total size of all data */ | 55 | uint32_t size; /** total size of all data */ |
| 56 | uint32_t dmem_size; | 56 | uint32_t dmem_size; |
| 57 | uint32_t vmem_size; /**< both lo and hi have this size */ | 57 | uint32_t vmem_size; /** both lo and hi have this size */ |
| 58 | uint32_t hmem_size; | 58 | uint32_t hmem_size; |
| 59 | }; | 59 | }; |
| 60 | #define SIZE_OF_DMEM_STRUCT \ | 60 | #define SIZE_OF_DMEM_STRUCT \ |
| @@ -77,7 +77,7 @@ struct ia_css_isp_3a_statistics { | |||
| 77 | SIZE_OF_IA_CSS_PTR + \ | 77 | SIZE_OF_IA_CSS_PTR + \ |
| 78 | 4 * sizeof(uint32_t)) | 78 | 4 * sizeof(uint32_t)) |
| 79 | 79 | ||
| 80 | /** Map with host-side pointers to ISP-format statistics. | 80 | /* Map with host-side pointers to ISP-format statistics. |
| 81 | * These pointers can either be copies of ISP data or memory mapped | 81 | * These pointers can either be copies of ISP data or memory mapped |
| 82 | * ISP pointers. | 82 | * ISP pointers. |
| 83 | * All of the data behind these pointers is allocated contiguously, the | 83 | * All of the data behind these pointers is allocated contiguously, the |
| @@ -85,17 +85,17 @@ struct ia_css_isp_3a_statistics { | |||
| 85 | * point into this one block of data. | 85 | * point into this one block of data. |
| 86 | */ | 86 | */ |
| 87 | struct ia_css_isp_3a_statistics_map { | 87 | struct ia_css_isp_3a_statistics_map { |
| 88 | void *data_ptr; /**< Pointer to start of memory */ | 88 | void *data_ptr; /** Pointer to start of memory */ |
| 89 | struct ia_css_3a_output *dmem_stats; | 89 | struct ia_css_3a_output *dmem_stats; |
| 90 | uint16_t *vmem_stats_hi; | 90 | uint16_t *vmem_stats_hi; |
| 91 | uint16_t *vmem_stats_lo; | 91 | uint16_t *vmem_stats_lo; |
| 92 | struct ia_css_bh_table *hmem_stats; | 92 | struct ia_css_bh_table *hmem_stats; |
| 93 | uint32_t size; /**< total size in bytes of data_ptr */ | 93 | uint32_t size; /** total size in bytes of data_ptr */ |
| 94 | uint32_t data_allocated; /**< indicate whether data_ptr | 94 | uint32_t data_allocated; /** indicate whether data_ptr |
| 95 | was allocated or not. */ | 95 | was allocated or not. */ |
| 96 | }; | 96 | }; |
| 97 | 97 | ||
| 98 | /** @brief Copy and translate 3A statistics from an ISP buffer to a host buffer | 98 | /* @brief Copy and translate 3A statistics from an ISP buffer to a host buffer |
| 99 | * @param[out] host_stats Host buffer. | 99 | * @param[out] host_stats Host buffer. |
| 100 | * @param[in] isp_stats ISP buffer. | 100 | * @param[in] isp_stats ISP buffer. |
| 101 | * @return error value if temporary memory cannot be allocated | 101 | * @return error value if temporary memory cannot be allocated |
| @@ -109,7 +109,7 @@ enum ia_css_err | |||
| 109 | ia_css_get_3a_statistics(struct ia_css_3a_statistics *host_stats, | 109 | ia_css_get_3a_statistics(struct ia_css_3a_statistics *host_stats, |
| 110 | const struct ia_css_isp_3a_statistics *isp_stats); | 110 | const struct ia_css_isp_3a_statistics *isp_stats); |
| 111 | 111 | ||
| 112 | /** @brief Translate 3A statistics from ISP format to host format. | 112 | /* @brief Translate 3A statistics from ISP format to host format. |
| 113 | * @param[out] host_stats host-format statistics | 113 | * @param[out] host_stats host-format statistics |
| 114 | * @param[in] isp_stats ISP-format statistics | 114 | * @param[in] isp_stats ISP-format statistics |
| 115 | * @return None | 115 | * @return None |
| @@ -125,35 +125,35 @@ ia_css_translate_3a_statistics( | |||
| 125 | 125 | ||
| 126 | /* Convenience functions for alloc/free of certain datatypes */ | 126 | /* Convenience functions for alloc/free of certain datatypes */ |
| 127 | 127 | ||
| 128 | /** @brief Allocate memory for the 3a statistics on the ISP | 128 | /* @brief Allocate memory for the 3a statistics on the ISP |
| 129 | * @param[in] grid The grid. | 129 | * @param[in] grid The grid. |
| 130 | * @return Pointer to the allocated 3a statistics buffer on the ISP | 130 | * @return Pointer to the allocated 3a statistics buffer on the ISP |
| 131 | */ | 131 | */ |
| 132 | struct ia_css_isp_3a_statistics * | 132 | struct ia_css_isp_3a_statistics * |
| 133 | ia_css_isp_3a_statistics_allocate(const struct ia_css_3a_grid_info *grid); | 133 | ia_css_isp_3a_statistics_allocate(const struct ia_css_3a_grid_info *grid); |
| 134 | 134 | ||
| 135 | /** @brief Free the 3a statistics memory on the isp | 135 | /* @brief Free the 3a statistics memory on the isp |
| 136 | * @param[in] me Pointer to the 3a statistics buffer on the ISP. | 136 | * @param[in] me Pointer to the 3a statistics buffer on the ISP. |
| 137 | * @return None | 137 | * @return None |
| 138 | */ | 138 | */ |
| 139 | void | 139 | void |
| 140 | ia_css_isp_3a_statistics_free(struct ia_css_isp_3a_statistics *me); | 140 | ia_css_isp_3a_statistics_free(struct ia_css_isp_3a_statistics *me); |
| 141 | 141 | ||
| 142 | /** @brief Allocate memory for the 3a statistics on the host | 142 | /* @brief Allocate memory for the 3a statistics on the host |
| 143 | * @param[in] grid The grid. | 143 | * @param[in] grid The grid. |
| 144 | * @return Pointer to the allocated 3a statistics buffer on the host | 144 | * @return Pointer to the allocated 3a statistics buffer on the host |
| 145 | */ | 145 | */ |
| 146 | struct ia_css_3a_statistics * | 146 | struct ia_css_3a_statistics * |
| 147 | ia_css_3a_statistics_allocate(const struct ia_css_3a_grid_info *grid); | 147 | ia_css_3a_statistics_allocate(const struct ia_css_3a_grid_info *grid); |
| 148 | 148 | ||
| 149 | /** @brief Free the 3a statistics memory on the host | 149 | /* @brief Free the 3a statistics memory on the host |
| 150 | * @param[in] me Pointer to the 3a statistics buffer on the host. | 150 | * @param[in] me Pointer to the 3a statistics buffer on the host. |
| 151 | * @return None | 151 | * @return None |
| 152 | */ | 152 | */ |
| 153 | void | 153 | void |
| 154 | ia_css_3a_statistics_free(struct ia_css_3a_statistics *me); | 154 | ia_css_3a_statistics_free(struct ia_css_3a_statistics *me); |
| 155 | 155 | ||
| 156 | /** @brief Allocate a 3a statistics map structure | 156 | /* @brief Allocate a 3a statistics map structure |
| 157 | * @param[in] isp_stats pointer to ISP 3a statistis struct | 157 | * @param[in] isp_stats pointer to ISP 3a statistis struct |
| 158 | * @param[in] data_ptr host-side pointer to ISP 3a statistics. | 158 | * @param[in] data_ptr host-side pointer to ISP 3a statistics. |
| 159 | * @return Pointer to the allocated 3a statistics map | 159 | * @return Pointer to the allocated 3a statistics map |
| @@ -174,7 +174,7 @@ ia_css_isp_3a_statistics_map_allocate( | |||
| 174 | const struct ia_css_isp_3a_statistics *isp_stats, | 174 | const struct ia_css_isp_3a_statistics *isp_stats, |
| 175 | void *data_ptr); | 175 | void *data_ptr); |
| 176 | 176 | ||
| 177 | /** @brief Free the 3a statistics map | 177 | /* @brief Free the 3a statistics map |
| 178 | * @param[in] me Pointer to the 3a statistics map | 178 | * @param[in] me Pointer to the 3a statistics map |
| 179 | * @return None | 179 | * @return None |
| 180 | * | 180 | * |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_acc_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_acc_types.h index a2a1873aca83..138bc3bb4627 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_acc_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_acc_types.h | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | #ifndef _IA_CSS_ACC_TYPES_H | 15 | #ifndef _IA_CSS_ACC_TYPES_H |
| 16 | #define _IA_CSS_ACC_TYPES_H | 16 | #define _IA_CSS_ACC_TYPES_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * This file contains types used for acceleration | 19 | * This file contains types used for acceleration |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| @@ -40,16 +40,16 @@ | |||
| 40 | * in the kernel and HAL. | 40 | * in the kernel and HAL. |
| 41 | */ | 41 | */ |
| 42 | 42 | ||
| 43 | /** Type of acceleration. | 43 | /* Type of acceleration. |
| 44 | */ | 44 | */ |
| 45 | enum ia_css_acc_type { | 45 | enum ia_css_acc_type { |
| 46 | IA_CSS_ACC_NONE, /**< Normal binary */ | 46 | IA_CSS_ACC_NONE, /** Normal binary */ |
| 47 | IA_CSS_ACC_OUTPUT, /**< Accelerator stage on output frame */ | 47 | IA_CSS_ACC_OUTPUT, /** Accelerator stage on output frame */ |
| 48 | IA_CSS_ACC_VIEWFINDER, /**< Accelerator stage on viewfinder frame */ | 48 | IA_CSS_ACC_VIEWFINDER, /** Accelerator stage on viewfinder frame */ |
| 49 | IA_CSS_ACC_STANDALONE, /**< Stand-alone acceleration */ | 49 | IA_CSS_ACC_STANDALONE, /** Stand-alone acceleration */ |
| 50 | }; | 50 | }; |
| 51 | 51 | ||
| 52 | /** Cells types | 52 | /* Cells types |
| 53 | */ | 53 | */ |
| 54 | enum ia_css_cell_type { | 54 | enum ia_css_cell_type { |
| 55 | IA_CSS_SP0 = 0, | 55 | IA_CSS_SP0 = 0, |
| @@ -58,45 +58,45 @@ enum ia_css_cell_type { | |||
| 58 | MAX_NUM_OF_CELLS | 58 | MAX_NUM_OF_CELLS |
| 59 | }; | 59 | }; |
| 60 | 60 | ||
| 61 | /** Firmware types. | 61 | /* Firmware types. |
| 62 | */ | 62 | */ |
| 63 | enum ia_css_fw_type { | 63 | enum ia_css_fw_type { |
| 64 | ia_css_sp_firmware, /**< Firmware for the SP */ | 64 | ia_css_sp_firmware, /** Firmware for the SP */ |
| 65 | ia_css_isp_firmware, /**< Firmware for the ISP */ | 65 | ia_css_isp_firmware, /** Firmware for the ISP */ |
| 66 | ia_css_bootloader_firmware, /**< Firmware for the BootLoader */ | 66 | ia_css_bootloader_firmware, /** Firmware for the BootLoader */ |
| 67 | ia_css_acc_firmware /**< Firmware for accelrations */ | 67 | ia_css_acc_firmware /** Firmware for accelrations */ |
| 68 | }; | 68 | }; |
| 69 | 69 | ||
| 70 | struct ia_css_blob_descr; | 70 | struct ia_css_blob_descr; |
| 71 | 71 | ||
| 72 | /** Blob descriptor. | 72 | /* Blob descriptor. |
| 73 | * This structure describes an SP or ISP blob. | 73 | * This structure describes an SP or ISP blob. |
| 74 | * It describes the test, data and bss sections as well as position in a | 74 | * It describes the test, data and bss sections as well as position in a |
| 75 | * firmware file. | 75 | * firmware file. |
| 76 | * For convenience, it contains dynamic data after loading. | 76 | * For convenience, it contains dynamic data after loading. |
| 77 | */ | 77 | */ |
| 78 | struct ia_css_blob_info { | 78 | struct ia_css_blob_info { |
| 79 | /**< Static blob data */ | 79 | /** Static blob data */ |
| 80 | uint32_t offset; /**< Blob offset in fw file */ | 80 | uint32_t offset; /** Blob offset in fw file */ |
| 81 | struct ia_css_isp_param_memory_offsets memory_offsets; /**< offset wrt hdr in bytes */ | 81 | struct ia_css_isp_param_memory_offsets memory_offsets; /** offset wrt hdr in bytes */ |
| 82 | uint32_t prog_name_offset; /**< offset wrt hdr in bytes */ | 82 | uint32_t prog_name_offset; /** offset wrt hdr in bytes */ |
| 83 | uint32_t size; /**< Size of blob */ | 83 | uint32_t size; /** Size of blob */ |
| 84 | uint32_t padding_size; /**< total cummulative of bytes added due to section alignment */ | 84 | uint32_t padding_size; /** total cummulative of bytes added due to section alignment */ |
| 85 | uint32_t icache_source; /**< Position of icache in blob */ | 85 | uint32_t icache_source; /** Position of icache in blob */ |
| 86 | uint32_t icache_size; /**< Size of icache section */ | 86 | uint32_t icache_size; /** Size of icache section */ |
| 87 | uint32_t icache_padding;/**< bytes added due to icache section alignment */ | 87 | uint32_t icache_padding;/** bytes added due to icache section alignment */ |
| 88 | uint32_t text_source; /**< Position of text in blob */ | 88 | uint32_t text_source; /** Position of text in blob */ |
| 89 | uint32_t text_size; /**< Size of text section */ | 89 | uint32_t text_size; /** Size of text section */ |
| 90 | uint32_t text_padding; /**< bytes added due to text section alignment */ | 90 | uint32_t text_padding; /** bytes added due to text section alignment */ |
| 91 | uint32_t data_source; /**< Position of data in blob */ | 91 | uint32_t data_source; /** Position of data in blob */ |
| 92 | uint32_t data_target; /**< Start of data in SP dmem */ | 92 | uint32_t data_target; /** Start of data in SP dmem */ |
| 93 | uint32_t data_size; /**< Size of text section */ | 93 | uint32_t data_size; /** Size of text section */ |
| 94 | uint32_t data_padding; /**< bytes added due to data section alignment */ | 94 | uint32_t data_padding; /** bytes added due to data section alignment */ |
| 95 | uint32_t bss_target; /**< Start position of bss in SP dmem */ | 95 | uint32_t bss_target; /** Start position of bss in SP dmem */ |
| 96 | uint32_t bss_size; /**< Size of bss section */ | 96 | uint32_t bss_size; /** Size of bss section */ |
| 97 | /**< Dynamic data filled by loader */ | 97 | /** Dynamic data filled by loader */ |
| 98 | CSS_ALIGN(const void *code, 8); /**< Code section absolute pointer within fw, code = icache + text */ | 98 | CSS_ALIGN(const void *code, 8); /** Code section absolute pointer within fw, code = icache + text */ |
| 99 | CSS_ALIGN(const void *data, 8); /**< Data section absolute pointer within fw, data = data + bss */ | 99 | CSS_ALIGN(const void *data, 8); /** Data section absolute pointer within fw, data = data + bss */ |
| 100 | }; | 100 | }; |
| 101 | 101 | ||
| 102 | struct ia_css_binary_input_info { | 102 | struct ia_css_binary_input_info { |
| @@ -140,9 +140,9 @@ struct ia_css_binary_s3a_info { | |||
| 140 | uint32_t fixed_s3a_deci_log; | 140 | uint32_t fixed_s3a_deci_log; |
| 141 | }; | 141 | }; |
| 142 | 142 | ||
| 143 | /** DPC related binary info */ | 143 | /* DPC related binary info */ |
| 144 | struct ia_css_binary_dpc_info { | 144 | struct ia_css_binary_dpc_info { |
| 145 | uint32_t bnr_lite; /**< bnr lite enable flag */ | 145 | uint32_t bnr_lite; /** bnr lite enable flag */ |
| 146 | }; | 146 | }; |
| 147 | 147 | ||
| 148 | struct ia_css_binary_iterator_info { | 148 | struct ia_css_binary_iterator_info { |
| @@ -193,7 +193,7 @@ struct ia_css_binary_block_info { | |||
| 193 | uint32_t output_block_height; | 193 | uint32_t output_block_height; |
| 194 | }; | 194 | }; |
| 195 | 195 | ||
| 196 | /** Structure describing an ISP binary. | 196 | /* Structure describing an ISP binary. |
| 197 | * It describes the capabilities of a binary, like the maximum resolution, | 197 | * It describes the capabilities of a binary, like the maximum resolution, |
| 198 | * support features, dma channels, uds features, etc. | 198 | * support features, dma channels, uds features, etc. |
| 199 | * This part is to be used by the SP. | 199 | * This part is to be used by the SP. |
| @@ -210,7 +210,7 @@ struct ia_css_binary_info { | |||
| 210 | struct ia_css_binary_dvs_info dvs; | 210 | struct ia_css_binary_dvs_info dvs; |
| 211 | struct ia_css_binary_vf_dec_info vf_dec; | 211 | struct ia_css_binary_vf_dec_info vf_dec; |
| 212 | struct ia_css_binary_s3a_info s3a; | 212 | struct ia_css_binary_s3a_info s3a; |
| 213 | struct ia_css_binary_dpc_info dpc_bnr; /**< DPC related binary info */ | 213 | struct ia_css_binary_dpc_info dpc_bnr; /** DPC related binary info */ |
| 214 | struct ia_css_binary_iterator_info iterator; | 214 | struct ia_css_binary_iterator_info iterator; |
| 215 | struct ia_css_binary_address_info addresses; | 215 | struct ia_css_binary_address_info addresses; |
| 216 | struct ia_css_binary_uds_info uds; | 216 | struct ia_css_binary_uds_info uds; |
| @@ -269,7 +269,7 @@ struct ia_css_binary_info { | |||
| 269 | } dma; | 269 | } dma; |
| 270 | }; | 270 | }; |
| 271 | 271 | ||
| 272 | /** Structure describing an ISP binary. | 272 | /* Structure describing an ISP binary. |
| 273 | * It describes the capabilities of a binary, like the maximum resolution, | 273 | * It describes the capabilities of a binary, like the maximum resolution, |
| 274 | * support features, dma channels, uds features, etc. | 274 | * support features, dma channels, uds features, etc. |
| 275 | */ | 275 | */ |
| @@ -281,8 +281,8 @@ struct ia_css_binary_xinfo { | |||
| 281 | enum ia_css_acc_type type; | 281 | enum ia_css_acc_type type; |
| 282 | CSS_ALIGN(int32_t num_output_formats, 8); | 282 | CSS_ALIGN(int32_t num_output_formats, 8); |
| 283 | enum ia_css_frame_format output_formats[IA_CSS_FRAME_FORMAT_NUM]; | 283 | enum ia_css_frame_format output_formats[IA_CSS_FRAME_FORMAT_NUM]; |
| 284 | CSS_ALIGN(int32_t num_vf_formats, 8); /**< number of supported vf formats */ | 284 | CSS_ALIGN(int32_t num_vf_formats, 8); /** number of supported vf formats */ |
| 285 | enum ia_css_frame_format vf_formats[IA_CSS_FRAME_FORMAT_NUM]; /**< types of supported vf formats */ | 285 | enum ia_css_frame_format vf_formats[IA_CSS_FRAME_FORMAT_NUM]; /** types of supported vf formats */ |
| 286 | uint8_t num_output_pins; | 286 | uint8_t num_output_pins; |
| 287 | ia_css_ptr xmem_addr; | 287 | ia_css_ptr xmem_addr; |
| 288 | CSS_ALIGN(const struct ia_css_blob_descr *blob, 8); | 288 | CSS_ALIGN(const struct ia_css_blob_descr *blob, 8); |
| @@ -291,55 +291,55 @@ struct ia_css_binary_xinfo { | |||
| 291 | CSS_ALIGN(struct ia_css_binary_xinfo *next, 8); | 291 | CSS_ALIGN(struct ia_css_binary_xinfo *next, 8); |
| 292 | }; | 292 | }; |
| 293 | 293 | ||
| 294 | /** Structure describing the Bootloader (an ISP binary). | 294 | /* Structure describing the Bootloader (an ISP binary). |
| 295 | * It contains several address, either in ddr, isp_dmem or | 295 | * It contains several address, either in ddr, isp_dmem or |
| 296 | * the entry function in icache. | 296 | * the entry function in icache. |
| 297 | */ | 297 | */ |
| 298 | struct ia_css_bl_info { | 298 | struct ia_css_bl_info { |
| 299 | uint32_t num_dma_cmds; /**< Number of cmds sent by CSS */ | 299 | uint32_t num_dma_cmds; /** Number of cmds sent by CSS */ |
| 300 | uint32_t dma_cmd_list; /**< Dma command list sent by CSS */ | 300 | uint32_t dma_cmd_list; /** Dma command list sent by CSS */ |
| 301 | uint32_t sw_state; /**< Polled from css */ | 301 | uint32_t sw_state; /** Polled from css */ |
| 302 | /* Entry functions */ | 302 | /* Entry functions */ |
| 303 | uint32_t bl_entry; /**< The SP entry function */ | 303 | uint32_t bl_entry; /** The SP entry function */ |
| 304 | }; | 304 | }; |
| 305 | 305 | ||
| 306 | /** Structure describing the SP binary. | 306 | /* Structure describing the SP binary. |
| 307 | * It contains several address, either in ddr, sp_dmem or | 307 | * It contains several address, either in ddr, sp_dmem or |
| 308 | * the entry function in pmem. | 308 | * the entry function in pmem. |
| 309 | */ | 309 | */ |
| 310 | struct ia_css_sp_info { | 310 | struct ia_css_sp_info { |
| 311 | uint32_t init_dmem_data; /**< data sect config, stored to dmem */ | 311 | uint32_t init_dmem_data; /** data sect config, stored to dmem */ |
| 312 | uint32_t per_frame_data; /**< Per frame data, stored to dmem */ | 312 | uint32_t per_frame_data; /** Per frame data, stored to dmem */ |
| 313 | uint32_t group; /**< Per pipeline data, loaded by dma */ | 313 | uint32_t group; /** Per pipeline data, loaded by dma */ |
| 314 | uint32_t output; /**< SP output data, loaded by dmem */ | 314 | uint32_t output; /** SP output data, loaded by dmem */ |
| 315 | uint32_t host_sp_queue; /**< Host <-> SP queues */ | 315 | uint32_t host_sp_queue; /** Host <-> SP queues */ |
| 316 | uint32_t host_sp_com;/**< Host <-> SP commands */ | 316 | uint32_t host_sp_com;/** Host <-> SP commands */ |
| 317 | uint32_t isp_started; /**< Polled from sensor thread, csim only */ | 317 | uint32_t isp_started; /** Polled from sensor thread, csim only */ |
| 318 | uint32_t sw_state; /**< Polled from css */ | 318 | uint32_t sw_state; /** Polled from css */ |
| 319 | uint32_t host_sp_queues_initialized; /**< Polled from the SP */ | 319 | uint32_t host_sp_queues_initialized; /** Polled from the SP */ |
| 320 | uint32_t sleep_mode; /**< different mode to halt SP */ | 320 | uint32_t sleep_mode; /** different mode to halt SP */ |
| 321 | uint32_t invalidate_tlb; /**< inform SP to invalidate mmu TLB */ | 321 | uint32_t invalidate_tlb; /** inform SP to invalidate mmu TLB */ |
| 322 | #ifndef ISP2401 | 322 | #ifndef ISP2401 |
| 323 | uint32_t stop_copy_preview; /**< suspend copy and preview pipe when capture */ | 323 | uint32_t stop_copy_preview; /** suspend copy and preview pipe when capture */ |
| 324 | #endif | 324 | #endif |
| 325 | uint32_t debug_buffer_ddr_address; /**< inform SP the address | 325 | uint32_t debug_buffer_ddr_address; /** inform SP the address |
| 326 | of DDR debug queue */ | 326 | of DDR debug queue */ |
| 327 | uint32_t perf_counter_input_system_error; /**< input system perf | 327 | uint32_t perf_counter_input_system_error; /** input system perf |
| 328 | counter array */ | 328 | counter array */ |
| 329 | #ifdef HAS_WATCHDOG_SP_THREAD_DEBUG | 329 | #ifdef HAS_WATCHDOG_SP_THREAD_DEBUG |
| 330 | uint32_t debug_wait; /**< thread/pipe post mortem debug */ | 330 | uint32_t debug_wait; /** thread/pipe post mortem debug */ |
| 331 | uint32_t debug_stage; /**< thread/pipe post mortem debug */ | 331 | uint32_t debug_stage; /** thread/pipe post mortem debug */ |
| 332 | uint32_t debug_stripe; /**< thread/pipe post mortem debug */ | 332 | uint32_t debug_stripe; /** thread/pipe post mortem debug */ |
| 333 | #endif | 333 | #endif |
| 334 | uint32_t threads_stack; /**< sp thread's stack pointers */ | 334 | uint32_t threads_stack; /** sp thread's stack pointers */ |
| 335 | uint32_t threads_stack_size; /**< sp thread's stack sizes */ | 335 | uint32_t threads_stack_size; /** sp thread's stack sizes */ |
| 336 | uint32_t curr_binary_id; /**< current binary id */ | 336 | uint32_t curr_binary_id; /** current binary id */ |
| 337 | uint32_t raw_copy_line_count; /**< raw copy line counter */ | 337 | uint32_t raw_copy_line_count; /** raw copy line counter */ |
| 338 | uint32_t ddr_parameter_address; /**< acc param ddrptr, sp dmem */ | 338 | uint32_t ddr_parameter_address; /** acc param ddrptr, sp dmem */ |
| 339 | uint32_t ddr_parameter_size; /**< acc param size, sp dmem */ | 339 | uint32_t ddr_parameter_size; /** acc param size, sp dmem */ |
| 340 | /* Entry functions */ | 340 | /* Entry functions */ |
| 341 | uint32_t sp_entry; /**< The SP entry function */ | 341 | uint32_t sp_entry; /** The SP entry function */ |
| 342 | uint32_t tagger_frames_addr; /**< Base address of tagger state */ | 342 | uint32_t tagger_frames_addr; /** Base address of tagger state */ |
| 343 | }; | 343 | }; |
| 344 | 344 | ||
| 345 | /* The following #if is there because this header file is also included | 345 | /* The following #if is there because this header file is also included |
| @@ -348,37 +348,37 @@ struct ia_css_sp_info { | |||
| 348 | More permanent solution will be to refactor this include. | 348 | More permanent solution will be to refactor this include. |
| 349 | */ | 349 | */ |
| 350 | #if !defined(__ISP) | 350 | #if !defined(__ISP) |
| 351 | /** Accelerator firmware information. | 351 | /* Accelerator firmware information. |
| 352 | */ | 352 | */ |
| 353 | struct ia_css_acc_info { | 353 | struct ia_css_acc_info { |
| 354 | uint32_t per_frame_data; /**< Dummy for now */ | 354 | uint32_t per_frame_data; /** Dummy for now */ |
| 355 | }; | 355 | }; |
| 356 | 356 | ||
| 357 | /** Firmware information. | 357 | /* Firmware information. |
| 358 | */ | 358 | */ |
| 359 | union ia_css_fw_union { | 359 | union ia_css_fw_union { |
| 360 | struct ia_css_binary_xinfo isp; /**< ISP info */ | 360 | struct ia_css_binary_xinfo isp; /** ISP info */ |
| 361 | struct ia_css_sp_info sp; /**< SP info */ | 361 | struct ia_css_sp_info sp; /** SP info */ |
| 362 | struct ia_css_bl_info bl; /**< Bootloader info */ | 362 | struct ia_css_bl_info bl; /** Bootloader info */ |
| 363 | struct ia_css_acc_info acc; /**< Accelerator info */ | 363 | struct ia_css_acc_info acc; /** Accelerator info */ |
| 364 | }; | 364 | }; |
| 365 | 365 | ||
| 366 | /** Firmware information. | 366 | /* Firmware information. |
| 367 | */ | 367 | */ |
| 368 | struct ia_css_fw_info { | 368 | struct ia_css_fw_info { |
| 369 | size_t header_size; /**< size of fw header */ | 369 | size_t header_size; /** size of fw header */ |
| 370 | CSS_ALIGN(uint32_t type, 8); | 370 | CSS_ALIGN(uint32_t type, 8); |
| 371 | union ia_css_fw_union info; /**< Binary info */ | 371 | union ia_css_fw_union info; /** Binary info */ |
| 372 | struct ia_css_blob_info blob; /**< Blob info */ | 372 | struct ia_css_blob_info blob; /** Blob info */ |
| 373 | /* Dynamic part */ | 373 | /* Dynamic part */ |
| 374 | struct ia_css_fw_info *next; | 374 | struct ia_css_fw_info *next; |
| 375 | CSS_ALIGN(uint32_t loaded, 8); /**< Firmware has been loaded */ | 375 | CSS_ALIGN(uint32_t loaded, 8); /** Firmware has been loaded */ |
| 376 | CSS_ALIGN(const uint8_t *isp_code, 8); /**< ISP pointer to code */ | 376 | CSS_ALIGN(const uint8_t *isp_code, 8); /** ISP pointer to code */ |
| 377 | /**< Firmware handle between user space and kernel */ | 377 | /** Firmware handle between user space and kernel */ |
| 378 | CSS_ALIGN(uint32_t handle, 8); | 378 | CSS_ALIGN(uint32_t handle, 8); |
| 379 | /**< Sections to copy from/to ISP */ | 379 | /** Sections to copy from/to ISP */ |
| 380 | struct ia_css_isp_param_css_segments mem_initializers; | 380 | struct ia_css_isp_param_css_segments mem_initializers; |
| 381 | /**< Initializer for local ISP memories */ | 381 | /** Initializer for local ISP memories */ |
| 382 | }; | 382 | }; |
| 383 | 383 | ||
| 384 | struct ia_css_blob_descr { | 384 | struct ia_css_blob_descr { |
| @@ -390,39 +390,39 @@ struct ia_css_blob_descr { | |||
| 390 | 390 | ||
| 391 | struct ia_css_acc_fw; | 391 | struct ia_css_acc_fw; |
| 392 | 392 | ||
| 393 | /** Structure describing the SP binary of a stand-alone accelerator. | 393 | /* Structure describing the SP binary of a stand-alone accelerator. |
| 394 | */ | 394 | */ |
| 395 | struct ia_css_acc_sp { | 395 | struct ia_css_acc_sp { |
| 396 | void (*init)(struct ia_css_acc_fw *); /**< init for crun */ | 396 | void (*init)(struct ia_css_acc_fw *); /** init for crun */ |
| 397 | uint32_t sp_prog_name_offset; /**< program name offset wrt hdr in bytes */ | 397 | uint32_t sp_prog_name_offset; /** program name offset wrt hdr in bytes */ |
| 398 | uint32_t sp_blob_offset; /**< blob offset wrt hdr in bytes */ | 398 | uint32_t sp_blob_offset; /** blob offset wrt hdr in bytes */ |
| 399 | void *entry; /**< Address of sp entry point */ | 399 | void *entry; /** Address of sp entry point */ |
| 400 | uint32_t *css_abort; /**< SP dmem abort flag */ | 400 | uint32_t *css_abort; /** SP dmem abort flag */ |
| 401 | void *isp_code; /**< SP dmem address holding xmem | 401 | void *isp_code; /** SP dmem address holding xmem |
| 402 | address of isp code */ | 402 | address of isp code */ |
| 403 | struct ia_css_fw_info fw; /**< SP fw descriptor */ | 403 | struct ia_css_fw_info fw; /** SP fw descriptor */ |
| 404 | const uint8_t *code; /**< ISP pointer of allocated SP code */ | 404 | const uint8_t *code; /** ISP pointer of allocated SP code */ |
| 405 | }; | 405 | }; |
| 406 | 406 | ||
| 407 | /** Acceleration firmware descriptor. | 407 | /* Acceleration firmware descriptor. |
| 408 | * This descriptor descibes either SP code (stand-alone), or | 408 | * This descriptor descibes either SP code (stand-alone), or |
| 409 | * ISP code (a separate pipeline stage). | 409 | * ISP code (a separate pipeline stage). |
| 410 | */ | 410 | */ |
| 411 | struct ia_css_acc_fw_hdr { | 411 | struct ia_css_acc_fw_hdr { |
| 412 | enum ia_css_acc_type type; /**< Type of accelerator */ | 412 | enum ia_css_acc_type type; /** Type of accelerator */ |
| 413 | uint32_t isp_prog_name_offset; /**< program name offset wrt | 413 | uint32_t isp_prog_name_offset; /** program name offset wrt |
| 414 | header in bytes */ | 414 | header in bytes */ |
| 415 | uint32_t isp_blob_offset; /**< blob offset wrt header | 415 | uint32_t isp_blob_offset; /** blob offset wrt header |
| 416 | in bytes */ | 416 | in bytes */ |
| 417 | uint32_t isp_size; /**< Size of isp blob */ | 417 | uint32_t isp_size; /** Size of isp blob */ |
| 418 | const uint8_t *isp_code; /**< ISP pointer to code */ | 418 | const uint8_t *isp_code; /** ISP pointer to code */ |
| 419 | struct ia_css_acc_sp sp; /**< Standalone sp code */ | 419 | struct ia_css_acc_sp sp; /** Standalone sp code */ |
| 420 | /**< Firmware handle between user space and kernel */ | 420 | /** Firmware handle between user space and kernel */ |
| 421 | uint32_t handle; | 421 | uint32_t handle; |
| 422 | struct ia_css_data parameters; /**< Current SP parameters */ | 422 | struct ia_css_data parameters; /** Current SP parameters */ |
| 423 | }; | 423 | }; |
| 424 | 424 | ||
| 425 | /** Firmware structure. | 425 | /* Firmware structure. |
| 426 | * This contains the header and actual blobs. | 426 | * This contains the header and actual blobs. |
| 427 | * For standalone, it contains SP and ISP blob. | 427 | * For standalone, it contains SP and ISP blob. |
| 428 | * For a pipeline stage accelerator, it contains ISP code only. | 428 | * For a pipeline stage accelerator, it contains ISP code only. |
| @@ -430,7 +430,7 @@ struct ia_css_acc_fw_hdr { | |||
| 430 | * header and computed using the access macros below. | 430 | * header and computed using the access macros below. |
| 431 | */ | 431 | */ |
| 432 | struct ia_css_acc_fw { | 432 | struct ia_css_acc_fw { |
| 433 | struct ia_css_acc_fw_hdr header; /**< firmware header */ | 433 | struct ia_css_acc_fw_hdr header; /** firmware header */ |
| 434 | /* | 434 | /* |
| 435 | int8_t isp_progname[]; **< ISP program name | 435 | int8_t isp_progname[]; **< ISP program name |
| 436 | int8_t sp_progname[]; **< SP program name, stand-alone only | 436 | int8_t sp_progname[]; **< SP program name, stand-alone only |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_buffer.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_buffer.h index b2ecf3618c15..a0058eac7d5a 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_buffer.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_buffer.h | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | #ifndef __IA_CSS_BUFFER_H | 15 | #ifndef __IA_CSS_BUFFER_H |
| 16 | #define __IA_CSS_BUFFER_H | 16 | #define __IA_CSS_BUFFER_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * This file contains datastructures and types for buffers used in CSS | 19 | * This file contains datastructures and types for buffers used in CSS |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| @@ -23,7 +23,7 @@ | |||
| 23 | #include "ia_css_types.h" | 23 | #include "ia_css_types.h" |
| 24 | #include "ia_css_timer.h" | 24 | #include "ia_css_timer.h" |
| 25 | 25 | ||
| 26 | /** Enumeration of buffer types. Buffers can be queued and de-queued | 26 | /* Enumeration of buffer types. Buffers can be queued and de-queued |
| 27 | * to hand them over between IA and ISP. | 27 | * to hand them over between IA and ISP. |
| 28 | */ | 28 | */ |
| 29 | enum ia_css_buffer_type { | 29 | enum ia_css_buffer_type { |
| @@ -48,28 +48,28 @@ enum ia_css_buffer_type { | |||
| 48 | 48 | ||
| 49 | /* Driver API is not SP/ISP visible, 64 bit types not supported on hivecc */ | 49 | /* Driver API is not SP/ISP visible, 64 bit types not supported on hivecc */ |
| 50 | #if !defined(__ISP) | 50 | #if !defined(__ISP) |
| 51 | /** Buffer structure. This is a container structure that enables content | 51 | /* Buffer structure. This is a container structure that enables content |
| 52 | * independent buffer queues and access functions. | 52 | * independent buffer queues and access functions. |
| 53 | */ | 53 | */ |
| 54 | struct ia_css_buffer { | 54 | struct ia_css_buffer { |
| 55 | enum ia_css_buffer_type type; /**< Buffer type. */ | 55 | enum ia_css_buffer_type type; /** Buffer type. */ |
| 56 | unsigned int exp_id; | 56 | unsigned int exp_id; |
| 57 | /**< exposure id for this buffer; 0 = not available | 57 | /** exposure id for this buffer; 0 = not available |
| 58 | see ia_css_event_public.h for more detail. */ | 58 | see ia_css_event_public.h for more detail. */ |
| 59 | union { | 59 | union { |
| 60 | struct ia_css_isp_3a_statistics *stats_3a; /**< 3A statistics & optionally RGBY statistics. */ | 60 | struct ia_css_isp_3a_statistics *stats_3a; /** 3A statistics & optionally RGBY statistics. */ |
| 61 | struct ia_css_isp_dvs_statistics *stats_dvs; /**< DVS statistics. */ | 61 | struct ia_css_isp_dvs_statistics *stats_dvs; /** DVS statistics. */ |
| 62 | struct ia_css_isp_skc_dvs_statistics *stats_skc_dvs; /**< SKC DVS statistics. */ | 62 | struct ia_css_isp_skc_dvs_statistics *stats_skc_dvs; /** SKC DVS statistics. */ |
| 63 | struct ia_css_frame *frame; /**< Frame buffer. */ | 63 | struct ia_css_frame *frame; /** Frame buffer. */ |
| 64 | struct ia_css_acc_param *custom_data; /**< Custom buffer. */ | 64 | struct ia_css_acc_param *custom_data; /** Custom buffer. */ |
| 65 | struct ia_css_metadata *metadata; /**< Sensor metadata. */ | 65 | struct ia_css_metadata *metadata; /** Sensor metadata. */ |
| 66 | } data; /**< Buffer data pointer. */ | 66 | } data; /** Buffer data pointer. */ |
| 67 | uint64_t driver_cookie; /**< cookie for the driver */ | 67 | uint64_t driver_cookie; /** cookie for the driver */ |
| 68 | struct ia_css_time_meas timing_data; /**< timing data (readings from the timer) */ | 68 | struct ia_css_time_meas timing_data; /** timing data (readings from the timer) */ |
| 69 | struct ia_css_clock_tick isys_eof_clock_tick; /**< ISYS's end of frame timer tick*/ | 69 | struct ia_css_clock_tick isys_eof_clock_tick; /** ISYS's end of frame timer tick*/ |
| 70 | }; | 70 | }; |
| 71 | 71 | ||
| 72 | /** @brief Dequeue param buffers from sp2host_queue | 72 | /* @brief Dequeue param buffers from sp2host_queue |
| 73 | * | 73 | * |
| 74 | * @return None | 74 | * @return None |
| 75 | * | 75 | * |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_control.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_control.h index a15d3e368341..021a313fab85 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_control.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_control.h | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | #ifndef __IA_CSS_CONTROL_H | 15 | #ifndef __IA_CSS_CONTROL_H |
| 16 | #define __IA_CSS_CONTROL_H | 16 | #define __IA_CSS_CONTROL_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * This file contains functionality for starting and controlling CSS | 19 | * This file contains functionality for starting and controlling CSS |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| @@ -24,7 +24,7 @@ | |||
| 24 | #include <ia_css_firmware.h> | 24 | #include <ia_css_firmware.h> |
| 25 | #include <ia_css_irq.h> | 25 | #include <ia_css_irq.h> |
| 26 | 26 | ||
| 27 | /** @brief Initialize the CSS API. | 27 | /* @brief Initialize the CSS API. |
| 28 | * @param[in] env Environment, provides functions to access the | 28 | * @param[in] env Environment, provides functions to access the |
| 29 | * environment in which the CSS code runs. This is | 29 | * environment in which the CSS code runs. This is |
| 30 | * used for host side memory access and message | 30 | * used for host side memory access and message |
| @@ -51,7 +51,7 @@ enum ia_css_err ia_css_init( | |||
| 51 | uint32_t l1_base, | 51 | uint32_t l1_base, |
| 52 | enum ia_css_irq_type irq_type); | 52 | enum ia_css_irq_type irq_type); |
| 53 | 53 | ||
| 54 | /** @brief Un-initialize the CSS API. | 54 | /* @brief Un-initialize the CSS API. |
| 55 | * @return None | 55 | * @return None |
| 56 | * | 56 | * |
| 57 | * This function deallocates all memory that has been allocated by the CSS API | 57 | * This function deallocates all memory that has been allocated by the CSS API |
| @@ -66,7 +66,7 @@ enum ia_css_err ia_css_init( | |||
| 66 | void | 66 | void |
| 67 | ia_css_uninit(void); | 67 | ia_css_uninit(void); |
| 68 | 68 | ||
| 69 | /** @brief Suspend CSS API for power down | 69 | /* @brief Suspend CSS API for power down |
| 70 | * @return success or faulure code | 70 | * @return success or faulure code |
| 71 | * | 71 | * |
| 72 | * suspend shuts down the system by: | 72 | * suspend shuts down the system by: |
| @@ -80,7 +80,7 @@ ia_css_uninit(void); | |||
| 80 | enum ia_css_err | 80 | enum ia_css_err |
| 81 | ia_css_suspend(void); | 81 | ia_css_suspend(void); |
| 82 | 82 | ||
| 83 | /** @brief Resume CSS API from power down | 83 | /* @brief Resume CSS API from power down |
| 84 | * @return success or failure code | 84 | * @return success or failure code |
| 85 | * | 85 | * |
| 86 | * After a power cycle, this function will bring the CSS API back into | 86 | * After a power cycle, this function will bring the CSS API back into |
| @@ -91,7 +91,7 @@ ia_css_suspend(void); | |||
| 91 | enum ia_css_err | 91 | enum ia_css_err |
| 92 | ia_css_resume(void); | 92 | ia_css_resume(void); |
| 93 | 93 | ||
| 94 | /** @brief Enable use of a separate queue for ISYS events. | 94 | /* @brief Enable use of a separate queue for ISYS events. |
| 95 | * | 95 | * |
| 96 | * @param[in] enable: enable or disable use of separate ISYS event queues. | 96 | * @param[in] enable: enable or disable use of separate ISYS event queues. |
| 97 | * @return error if called when SP is running. | 97 | * @return error if called when SP is running. |
| @@ -105,7 +105,7 @@ ia_css_resume(void); | |||
| 105 | enum ia_css_err | 105 | enum ia_css_err |
| 106 | ia_css_enable_isys_event_queue(bool enable); | 106 | ia_css_enable_isys_event_queue(bool enable); |
| 107 | 107 | ||
| 108 | /** @brief Test whether the ISP has started. | 108 | /* @brief Test whether the ISP has started. |
| 109 | * | 109 | * |
| 110 | * @return Boolean flag true if the ISP has started or false otherwise. | 110 | * @return Boolean flag true if the ISP has started or false otherwise. |
| 111 | * | 111 | * |
| @@ -114,7 +114,7 @@ ia_css_enable_isys_event_queue(bool enable); | |||
| 114 | bool | 114 | bool |
| 115 | ia_css_isp_has_started(void); | 115 | ia_css_isp_has_started(void); |
| 116 | 116 | ||
| 117 | /** @brief Test whether the SP has initialized. | 117 | /* @brief Test whether the SP has initialized. |
| 118 | * | 118 | * |
| 119 | * @return Boolean flag true if the SP has initialized or false otherwise. | 119 | * @return Boolean flag true if the SP has initialized or false otherwise. |
| 120 | * | 120 | * |
| @@ -123,7 +123,7 @@ ia_css_isp_has_started(void); | |||
| 123 | bool | 123 | bool |
| 124 | ia_css_sp_has_initialized(void); | 124 | ia_css_sp_has_initialized(void); |
| 125 | 125 | ||
| 126 | /** @brief Test whether the SP has terminated. | 126 | /* @brief Test whether the SP has terminated. |
| 127 | * | 127 | * |
| 128 | * @return Boolean flag true if the SP has terminated or false otherwise. | 128 | * @return Boolean flag true if the SP has terminated or false otherwise. |
| 129 | * | 129 | * |
| @@ -132,7 +132,7 @@ ia_css_sp_has_initialized(void); | |||
| 132 | bool | 132 | bool |
| 133 | ia_css_sp_has_terminated(void); | 133 | ia_css_sp_has_terminated(void); |
| 134 | 134 | ||
| 135 | /** @brief start SP hardware | 135 | /* @brief start SP hardware |
| 136 | * | 136 | * |
| 137 | * @return IA_CSS_SUCCESS or error code upon error. | 137 | * @return IA_CSS_SUCCESS or error code upon error. |
| 138 | * | 138 | * |
| @@ -144,7 +144,7 @@ enum ia_css_err | |||
| 144 | ia_css_start_sp(void); | 144 | ia_css_start_sp(void); |
| 145 | 145 | ||
| 146 | 146 | ||
| 147 | /** @brief stop SP hardware | 147 | /* @brief stop SP hardware |
| 148 | * | 148 | * |
| 149 | * @return IA_CSS_SUCCESS or error code upon error. | 149 | * @return IA_CSS_SUCCESS or error code upon error. |
| 150 | * | 150 | * |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_device_access.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_device_access.h index 59459f7a9876..84a960b7abbc 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_device_access.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_device_access.h | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | #ifndef _IA_CSS_DEVICE_ACCESS_H | 15 | #ifndef _IA_CSS_DEVICE_ACCESS_H |
| 16 | #define _IA_CSS_DEVICE_ACCESS_H | 16 | #define _IA_CSS_DEVICE_ACCESS_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * File containing internal functions for the CSS-API to access the CSS device. | 19 | * File containing internal functions for the CSS-API to access the CSS device. |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_dvs.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_dvs.h index 147bf81959d3..1f01534964e3 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_dvs.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_dvs.h | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | #ifndef __IA_CSS_DVS_H | 15 | #ifndef __IA_CSS_DVS_H |
| 16 | #define __IA_CSS_DVS_H | 16 | #define __IA_CSS_DVS_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * This file contains types for DVS statistics | 19 | * This file contains types for DVS statistics |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| @@ -31,7 +31,7 @@ enum dvs_statistics_type { | |||
| 31 | }; | 31 | }; |
| 32 | 32 | ||
| 33 | 33 | ||
| 34 | /** Structure that holds DVS statistics in the ISP internal | 34 | /* Structure that holds DVS statistics in the ISP internal |
| 35 | * format. Use ia_css_get_dvs_statistics() to translate | 35 | * format. Use ia_css_get_dvs_statistics() to translate |
| 36 | * this to the format used on the host (DVS engine). | 36 | * this to the format used on the host (DVS engine). |
| 37 | * */ | 37 | * */ |
| @@ -40,12 +40,12 @@ struct ia_css_isp_dvs_statistics { | |||
| 40 | ia_css_ptr ver_proj; | 40 | ia_css_ptr ver_proj; |
| 41 | uint32_t hor_size; | 41 | uint32_t hor_size; |
| 42 | uint32_t ver_size; | 42 | uint32_t ver_size; |
| 43 | uint32_t exp_id; /**< see ia_css_event_public.h for more detail */ | 43 | uint32_t exp_id; /** see ia_css_event_public.h for more detail */ |
| 44 | ia_css_ptr data_ptr; /* base pointer containing all memory */ | 44 | ia_css_ptr data_ptr; /* base pointer containing all memory */ |
| 45 | uint32_t size; /* size of allocated memory in data_ptr */ | 45 | uint32_t size; /* size of allocated memory in data_ptr */ |
| 46 | }; | 46 | }; |
| 47 | 47 | ||
| 48 | /** Structure that holds SKC DVS statistics in the ISP internal | 48 | /* Structure that holds SKC DVS statistics in the ISP internal |
| 49 | * format. Use ia_css_dvs_statistics_get() to translate this to | 49 | * format. Use ia_css_dvs_statistics_get() to translate this to |
| 50 | * the format used on the host. | 50 | * the format used on the host. |
| 51 | * */ | 51 | * */ |
| @@ -82,7 +82,7 @@ union ia_css_dvs_statistics_host { | |||
| 82 | struct ia_css_skc_dvs_statistics *p_skc_dvs_statistics_host; | 82 | struct ia_css_skc_dvs_statistics *p_skc_dvs_statistics_host; |
| 83 | }; | 83 | }; |
| 84 | 84 | ||
| 85 | /** @brief Copy DVS statistics from an ISP buffer to a host buffer. | 85 | /* @brief Copy DVS statistics from an ISP buffer to a host buffer. |
| 86 | * @param[in] host_stats Host buffer | 86 | * @param[in] host_stats Host buffer |
| 87 | * @param[in] isp_stats ISP buffer | 87 | * @param[in] isp_stats ISP buffer |
| 88 | * @return error value if temporary memory cannot be allocated | 88 | * @return error value if temporary memory cannot be allocated |
| @@ -100,7 +100,7 @@ enum ia_css_err | |||
| 100 | ia_css_get_dvs_statistics(struct ia_css_dvs_statistics *host_stats, | 100 | ia_css_get_dvs_statistics(struct ia_css_dvs_statistics *host_stats, |
| 101 | const struct ia_css_isp_dvs_statistics *isp_stats); | 101 | const struct ia_css_isp_dvs_statistics *isp_stats); |
| 102 | 102 | ||
| 103 | /** @brief Translate DVS statistics from ISP format to host format | 103 | /* @brief Translate DVS statistics from ISP format to host format |
| 104 | * @param[in] host_stats Host buffer | 104 | * @param[in] host_stats Host buffer |
| 105 | * @param[in] isp_stats ISP buffer | 105 | * @param[in] isp_stats ISP buffer |
| 106 | * @return None | 106 | * @return None |
| @@ -116,7 +116,7 @@ ia_css_translate_dvs_statistics( | |||
| 116 | struct ia_css_dvs_statistics *host_stats, | 116 | struct ia_css_dvs_statistics *host_stats, |
| 117 | const struct ia_css_isp_dvs_statistics_map *isp_stats); | 117 | const struct ia_css_isp_dvs_statistics_map *isp_stats); |
| 118 | 118 | ||
| 119 | /** @brief Copy DVS 2.0 statistics from an ISP buffer to a host buffer. | 119 | /* @brief Copy DVS 2.0 statistics from an ISP buffer to a host buffer. |
| 120 | * @param[in] host_stats Host buffer | 120 | * @param[in] host_stats Host buffer |
| 121 | * @param[in] isp_stats ISP buffer | 121 | * @param[in] isp_stats ISP buffer |
| 122 | * @return error value if temporary memory cannot be allocated | 122 | * @return error value if temporary memory cannot be allocated |
| @@ -134,7 +134,7 @@ enum ia_css_err | |||
| 134 | ia_css_get_dvs2_statistics(struct ia_css_dvs2_statistics *host_stats, | 134 | ia_css_get_dvs2_statistics(struct ia_css_dvs2_statistics *host_stats, |
| 135 | const struct ia_css_isp_dvs_statistics *isp_stats); | 135 | const struct ia_css_isp_dvs_statistics *isp_stats); |
| 136 | 136 | ||
| 137 | /** @brief Translate DVS2 statistics from ISP format to host format | 137 | /* @brief Translate DVS2 statistics from ISP format to host format |
| 138 | * @param[in] host_stats Host buffer | 138 | * @param[in] host_stats Host buffer |
| 139 | * @param[in] isp_stats ISP buffer | 139 | * @param[in] isp_stats ISP buffer |
| 140 | * @return None | 140 | * @return None |
| @@ -150,7 +150,7 @@ ia_css_translate_dvs2_statistics( | |||
| 150 | struct ia_css_dvs2_statistics *host_stats, | 150 | struct ia_css_dvs2_statistics *host_stats, |
| 151 | const struct ia_css_isp_dvs_statistics_map *isp_stats); | 151 | const struct ia_css_isp_dvs_statistics_map *isp_stats); |
| 152 | 152 | ||
| 153 | /** @brief Copy DVS statistics from an ISP buffer to a host buffer. | 153 | /* @brief Copy DVS statistics from an ISP buffer to a host buffer. |
| 154 | * @param[in] type - DVS statistics type | 154 | * @param[in] type - DVS statistics type |
| 155 | * @param[in] host_stats Host buffer | 155 | * @param[in] host_stats Host buffer |
| 156 | * @param[in] isp_stats ISP buffer | 156 | * @param[in] isp_stats ISP buffer |
| @@ -161,105 +161,105 @@ ia_css_dvs_statistics_get(enum dvs_statistics_type type, | |||
| 161 | union ia_css_dvs_statistics_host *host_stats, | 161 | union ia_css_dvs_statistics_host *host_stats, |
| 162 | const union ia_css_dvs_statistics_isp *isp_stats); | 162 | const union ia_css_dvs_statistics_isp *isp_stats); |
| 163 | 163 | ||
| 164 | /** @brief Allocate the DVS statistics memory on the ISP | 164 | /* @brief Allocate the DVS statistics memory on the ISP |
| 165 | * @param[in] grid The grid. | 165 | * @param[in] grid The grid. |
| 166 | * @return Pointer to the allocated DVS statistics buffer on the ISP | 166 | * @return Pointer to the allocated DVS statistics buffer on the ISP |
| 167 | */ | 167 | */ |
| 168 | struct ia_css_isp_dvs_statistics * | 168 | struct ia_css_isp_dvs_statistics * |
| 169 | ia_css_isp_dvs_statistics_allocate(const struct ia_css_dvs_grid_info *grid); | 169 | ia_css_isp_dvs_statistics_allocate(const struct ia_css_dvs_grid_info *grid); |
| 170 | 170 | ||
| 171 | /** @brief Free the DVS statistics memory on the ISP | 171 | /* @brief Free the DVS statistics memory on the ISP |
| 172 | * @param[in] me Pointer to the DVS statistics buffer on the ISP. | 172 | * @param[in] me Pointer to the DVS statistics buffer on the ISP. |
| 173 | * @return None | 173 | * @return None |
| 174 | */ | 174 | */ |
| 175 | void | 175 | void |
| 176 | ia_css_isp_dvs_statistics_free(struct ia_css_isp_dvs_statistics *me); | 176 | ia_css_isp_dvs_statistics_free(struct ia_css_isp_dvs_statistics *me); |
| 177 | 177 | ||
| 178 | /** @brief Allocate the DVS 2.0 statistics memory | 178 | /* @brief Allocate the DVS 2.0 statistics memory |
| 179 | * @param[in] grid The grid. | 179 | * @param[in] grid The grid. |
| 180 | * @return Pointer to the allocated DVS statistics buffer on the ISP | 180 | * @return Pointer to the allocated DVS statistics buffer on the ISP |
| 181 | */ | 181 | */ |
| 182 | struct ia_css_isp_dvs_statistics * | 182 | struct ia_css_isp_dvs_statistics * |
| 183 | ia_css_isp_dvs2_statistics_allocate(const struct ia_css_dvs_grid_info *grid); | 183 | ia_css_isp_dvs2_statistics_allocate(const struct ia_css_dvs_grid_info *grid); |
| 184 | 184 | ||
| 185 | /** @brief Free the DVS 2.0 statistics memory | 185 | /* @brief Free the DVS 2.0 statistics memory |
| 186 | * @param[in] me Pointer to the DVS statistics buffer on the ISP. | 186 | * @param[in] me Pointer to the DVS statistics buffer on the ISP. |
| 187 | * @return None | 187 | * @return None |
| 188 | */ | 188 | */ |
| 189 | void | 189 | void |
| 190 | ia_css_isp_dvs2_statistics_free(struct ia_css_isp_dvs_statistics *me); | 190 | ia_css_isp_dvs2_statistics_free(struct ia_css_isp_dvs_statistics *me); |
| 191 | 191 | ||
| 192 | /** @brief Allocate the DVS statistics memory on the host | 192 | /* @brief Allocate the DVS statistics memory on the host |
| 193 | * @param[in] grid The grid. | 193 | * @param[in] grid The grid. |
| 194 | * @return Pointer to the allocated DVS statistics buffer on the host | 194 | * @return Pointer to the allocated DVS statistics buffer on the host |
| 195 | */ | 195 | */ |
| 196 | struct ia_css_dvs_statistics * | 196 | struct ia_css_dvs_statistics * |
| 197 | ia_css_dvs_statistics_allocate(const struct ia_css_dvs_grid_info *grid); | 197 | ia_css_dvs_statistics_allocate(const struct ia_css_dvs_grid_info *grid); |
| 198 | 198 | ||
| 199 | /** @brief Free the DVS statistics memory on the host | 199 | /* @brief Free the DVS statistics memory on the host |
| 200 | * @param[in] me Pointer to the DVS statistics buffer on the host. | 200 | * @param[in] me Pointer to the DVS statistics buffer on the host. |
| 201 | * @return None | 201 | * @return None |
| 202 | */ | 202 | */ |
| 203 | void | 203 | void |
| 204 | ia_css_dvs_statistics_free(struct ia_css_dvs_statistics *me); | 204 | ia_css_dvs_statistics_free(struct ia_css_dvs_statistics *me); |
| 205 | 205 | ||
| 206 | /** @brief Allocate the DVS coefficients memory | 206 | /* @brief Allocate the DVS coefficients memory |
| 207 | * @param[in] grid The grid. | 207 | * @param[in] grid The grid. |
| 208 | * @return Pointer to the allocated DVS coefficients buffer | 208 | * @return Pointer to the allocated DVS coefficients buffer |
| 209 | */ | 209 | */ |
| 210 | struct ia_css_dvs_coefficients * | 210 | struct ia_css_dvs_coefficients * |
| 211 | ia_css_dvs_coefficients_allocate(const struct ia_css_dvs_grid_info *grid); | 211 | ia_css_dvs_coefficients_allocate(const struct ia_css_dvs_grid_info *grid); |
| 212 | 212 | ||
| 213 | /** @brief Free the DVS coefficients memory | 213 | /* @brief Free the DVS coefficients memory |
| 214 | * @param[in] me Pointer to the DVS coefficients buffer. | 214 | * @param[in] me Pointer to the DVS coefficients buffer. |
| 215 | * @return None | 215 | * @return None |
| 216 | */ | 216 | */ |
| 217 | void | 217 | void |
| 218 | ia_css_dvs_coefficients_free(struct ia_css_dvs_coefficients *me); | 218 | ia_css_dvs_coefficients_free(struct ia_css_dvs_coefficients *me); |
| 219 | 219 | ||
| 220 | /** @brief Allocate the DVS 2.0 statistics memory on the host | 220 | /* @brief Allocate the DVS 2.0 statistics memory on the host |
| 221 | * @param[in] grid The grid. | 221 | * @param[in] grid The grid. |
| 222 | * @return Pointer to the allocated DVS 2.0 statistics buffer on the host | 222 | * @return Pointer to the allocated DVS 2.0 statistics buffer on the host |
| 223 | */ | 223 | */ |
| 224 | struct ia_css_dvs2_statistics * | 224 | struct ia_css_dvs2_statistics * |
| 225 | ia_css_dvs2_statistics_allocate(const struct ia_css_dvs_grid_info *grid); | 225 | ia_css_dvs2_statistics_allocate(const struct ia_css_dvs_grid_info *grid); |
| 226 | 226 | ||
| 227 | /** @brief Free the DVS 2.0 statistics memory | 227 | /* @brief Free the DVS 2.0 statistics memory |
| 228 | * @param[in] me Pointer to the DVS 2.0 statistics buffer on the host. | 228 | * @param[in] me Pointer to the DVS 2.0 statistics buffer on the host. |
| 229 | * @return None | 229 | * @return None |
| 230 | */ | 230 | */ |
| 231 | void | 231 | void |
| 232 | ia_css_dvs2_statistics_free(struct ia_css_dvs2_statistics *me); | 232 | ia_css_dvs2_statistics_free(struct ia_css_dvs2_statistics *me); |
| 233 | 233 | ||
| 234 | /** @brief Allocate the DVS 2.0 coefficients memory | 234 | /* @brief Allocate the DVS 2.0 coefficients memory |
| 235 | * @param[in] grid The grid. | 235 | * @param[in] grid The grid. |
| 236 | * @return Pointer to the allocated DVS 2.0 coefficients buffer | 236 | * @return Pointer to the allocated DVS 2.0 coefficients buffer |
| 237 | */ | 237 | */ |
| 238 | struct ia_css_dvs2_coefficients * | 238 | struct ia_css_dvs2_coefficients * |
| 239 | ia_css_dvs2_coefficients_allocate(const struct ia_css_dvs_grid_info *grid); | 239 | ia_css_dvs2_coefficients_allocate(const struct ia_css_dvs_grid_info *grid); |
| 240 | 240 | ||
| 241 | /** @brief Free the DVS 2.0 coefficients memory | 241 | /* @brief Free the DVS 2.0 coefficients memory |
| 242 | * @param[in] me Pointer to the DVS 2.0 coefficients buffer. | 242 | * @param[in] me Pointer to the DVS 2.0 coefficients buffer. |
| 243 | * @return None | 243 | * @return None |
| 244 | */ | 244 | */ |
| 245 | void | 245 | void |
| 246 | ia_css_dvs2_coefficients_free(struct ia_css_dvs2_coefficients *me); | 246 | ia_css_dvs2_coefficients_free(struct ia_css_dvs2_coefficients *me); |
| 247 | 247 | ||
| 248 | /** @brief Allocate the DVS 2.0 6-axis config memory | 248 | /* @brief Allocate the DVS 2.0 6-axis config memory |
| 249 | * @param[in] stream The stream. | 249 | * @param[in] stream The stream. |
| 250 | * @return Pointer to the allocated DVS 6axis configuration buffer | 250 | * @return Pointer to the allocated DVS 6axis configuration buffer |
| 251 | */ | 251 | */ |
| 252 | struct ia_css_dvs_6axis_config * | 252 | struct ia_css_dvs_6axis_config * |
| 253 | ia_css_dvs2_6axis_config_allocate(const struct ia_css_stream *stream); | 253 | ia_css_dvs2_6axis_config_allocate(const struct ia_css_stream *stream); |
| 254 | 254 | ||
| 255 | /** @brief Free the DVS 2.0 6-axis config memory | 255 | /* @brief Free the DVS 2.0 6-axis config memory |
| 256 | * @param[in] dvs_6axis_config Pointer to the DVS 6axis configuration buffer | 256 | * @param[in] dvs_6axis_config Pointer to the DVS 6axis configuration buffer |
| 257 | * @return None | 257 | * @return None |
| 258 | */ | 258 | */ |
| 259 | void | 259 | void |
| 260 | ia_css_dvs2_6axis_config_free(struct ia_css_dvs_6axis_config *dvs_6axis_config); | 260 | ia_css_dvs2_6axis_config_free(struct ia_css_dvs_6axis_config *dvs_6axis_config); |
| 261 | 261 | ||
| 262 | /** @brief Allocate a dvs statistics map structure | 262 | /* @brief Allocate a dvs statistics map structure |
| 263 | * @param[in] isp_stats pointer to ISP dvs statistis struct | 263 | * @param[in] isp_stats pointer to ISP dvs statistis struct |
| 264 | * @param[in] data_ptr host-side pointer to ISP dvs statistics. | 264 | * @param[in] data_ptr host-side pointer to ISP dvs statistics. |
| 265 | * @return Pointer to the allocated dvs statistics map | 265 | * @return Pointer to the allocated dvs statistics map |
| @@ -280,7 +280,7 @@ ia_css_isp_dvs_statistics_map_allocate( | |||
| 280 | const struct ia_css_isp_dvs_statistics *isp_stats, | 280 | const struct ia_css_isp_dvs_statistics *isp_stats, |
| 281 | void *data_ptr); | 281 | void *data_ptr); |
| 282 | 282 | ||
| 283 | /** @brief Free the dvs statistics map | 283 | /* @brief Free the dvs statistics map |
| 284 | * @param[in] me Pointer to the dvs statistics map | 284 | * @param[in] me Pointer to the dvs statistics map |
| 285 | * @return None | 285 | * @return None |
| 286 | * | 286 | * |
| @@ -291,7 +291,7 @@ ia_css_isp_dvs_statistics_map_allocate( | |||
| 291 | void | 291 | void |
| 292 | ia_css_isp_dvs_statistics_map_free(struct ia_css_isp_dvs_statistics_map *me); | 292 | ia_css_isp_dvs_statistics_map_free(struct ia_css_isp_dvs_statistics_map *me); |
| 293 | 293 | ||
| 294 | /** @brief Allocate memory for the SKC DVS statistics on the ISP | 294 | /* @brief Allocate memory for the SKC DVS statistics on the ISP |
| 295 | * @return Pointer to the allocated ACC DVS statistics buffer on the ISP | 295 | * @return Pointer to the allocated ACC DVS statistics buffer on the ISP |
| 296 | */ | 296 | */ |
| 297 | struct ia_css_isp_skc_dvs_statistics *ia_css_skc_dvs_statistics_allocate(void); | 297 | struct ia_css_isp_skc_dvs_statistics *ia_css_skc_dvs_statistics_allocate(void); |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_env.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_env.h index 1ae9daf0be76..8b0218ee658d 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_env.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_env.h | |||
| @@ -20,12 +20,12 @@ | |||
| 20 | #include "ia_css_types.h" | 20 | #include "ia_css_types.h" |
| 21 | #include "ia_css_acc_types.h" | 21 | #include "ia_css_acc_types.h" |
| 22 | 22 | ||
| 23 | /** @file | 23 | /* @file |
| 24 | * This file contains prototypes for functions that need to be provided to the | 24 | * This file contains prototypes for functions that need to be provided to the |
| 25 | * CSS-API host-code by the environment in which the CSS-API code runs. | 25 | * CSS-API host-code by the environment in which the CSS-API code runs. |
| 26 | */ | 26 | */ |
| 27 | 27 | ||
| 28 | /** Memory allocation attributes, for use in ia_css_css_mem_env. */ | 28 | /* Memory allocation attributes, for use in ia_css_css_mem_env. */ |
| 29 | enum ia_css_mem_attr { | 29 | enum ia_css_mem_attr { |
| 30 | IA_CSS_MEM_ATTR_CACHED = 1 << 0, | 30 | IA_CSS_MEM_ATTR_CACHED = 1 << 0, |
| 31 | IA_CSS_MEM_ATTR_ZEROED = 1 << 1, | 31 | IA_CSS_MEM_ATTR_ZEROED = 1 << 1, |
| @@ -33,62 +33,62 @@ enum ia_css_mem_attr { | |||
| 33 | IA_CSS_MEM_ATTR_CONTIGUOUS = 1 << 3, | 33 | IA_CSS_MEM_ATTR_CONTIGUOUS = 1 << 3, |
| 34 | }; | 34 | }; |
| 35 | 35 | ||
| 36 | /** Environment with function pointers for local IA memory allocation. | 36 | /* Environment with function pointers for local IA memory allocation. |
| 37 | * This provides the CSS code with environment specific functionality | 37 | * This provides the CSS code with environment specific functionality |
| 38 | * for memory allocation of small local buffers such as local data structures. | 38 | * for memory allocation of small local buffers such as local data structures. |
| 39 | * This is never expected to allocate more than one page of memory (4K bytes). | 39 | * This is never expected to allocate more than one page of memory (4K bytes). |
| 40 | */ | 40 | */ |
| 41 | struct ia_css_cpu_mem_env { | 41 | struct ia_css_cpu_mem_env { |
| 42 | void (*flush)(struct ia_css_acc_fw *fw); | 42 | void (*flush)(struct ia_css_acc_fw *fw); |
| 43 | /**< Flush function to flush the cache for given accelerator. */ | 43 | /** Flush function to flush the cache for given accelerator. */ |
| 44 | }; | 44 | }; |
| 45 | 45 | ||
| 46 | /** Environment with function pointers to access the CSS hardware. This includes | 46 | /* Environment with function pointers to access the CSS hardware. This includes |
| 47 | * registers and local memories. | 47 | * registers and local memories. |
| 48 | */ | 48 | */ |
| 49 | struct ia_css_hw_access_env { | 49 | struct ia_css_hw_access_env { |
| 50 | void (*store_8)(hrt_address addr, uint8_t data); | 50 | void (*store_8)(hrt_address addr, uint8_t data); |
| 51 | /**< Store an 8 bit value into an address in the CSS HW address space. | 51 | /** Store an 8 bit value into an address in the CSS HW address space. |
| 52 | The address must be an 8 bit aligned address. */ | 52 | The address must be an 8 bit aligned address. */ |
| 53 | void (*store_16)(hrt_address addr, uint16_t data); | 53 | void (*store_16)(hrt_address addr, uint16_t data); |
| 54 | /**< Store a 16 bit value into an address in the CSS HW address space. | 54 | /** Store a 16 bit value into an address in the CSS HW address space. |
| 55 | The address must be a 16 bit aligned address. */ | 55 | The address must be a 16 bit aligned address. */ |
| 56 | void (*store_32)(hrt_address addr, uint32_t data); | 56 | void (*store_32)(hrt_address addr, uint32_t data); |
| 57 | /**< Store a 32 bit value into an address in the CSS HW address space. | 57 | /** Store a 32 bit value into an address in the CSS HW address space. |
| 58 | The address must be a 32 bit aligned address. */ | 58 | The address must be a 32 bit aligned address. */ |
| 59 | uint8_t (*load_8)(hrt_address addr); | 59 | uint8_t (*load_8)(hrt_address addr); |
| 60 | /**< Load an 8 bit value from an address in the CSS HW address | 60 | /** Load an 8 bit value from an address in the CSS HW address |
| 61 | space. The address must be an 8 bit aligned address. */ | 61 | space. The address must be an 8 bit aligned address. */ |
| 62 | uint16_t (*load_16)(hrt_address addr); | 62 | uint16_t (*load_16)(hrt_address addr); |
| 63 | /**< Load a 16 bit value from an address in the CSS HW address | 63 | /** Load a 16 bit value from an address in the CSS HW address |
| 64 | space. The address must be a 16 bit aligned address. */ | 64 | space. The address must be a 16 bit aligned address. */ |
| 65 | uint32_t (*load_32)(hrt_address addr); | 65 | uint32_t (*load_32)(hrt_address addr); |
| 66 | /**< Load a 32 bit value from an address in the CSS HW address | 66 | /** Load a 32 bit value from an address in the CSS HW address |
| 67 | space. The address must be a 32 bit aligned address. */ | 67 | space. The address must be a 32 bit aligned address. */ |
| 68 | void (*store)(hrt_address addr, const void *data, uint32_t bytes); | 68 | void (*store)(hrt_address addr, const void *data, uint32_t bytes); |
| 69 | /**< Store a number of bytes into a byte-aligned address in the CSS HW address space. */ | 69 | /** Store a number of bytes into a byte-aligned address in the CSS HW address space. */ |
| 70 | void (*load)(hrt_address addr, void *data, uint32_t bytes); | 70 | void (*load)(hrt_address addr, void *data, uint32_t bytes); |
| 71 | /**< Load a number of bytes from a byte-aligned address in the CSS HW address space. */ | 71 | /** Load a number of bytes from a byte-aligned address in the CSS HW address space. */ |
| 72 | }; | 72 | }; |
| 73 | 73 | ||
| 74 | /** Environment with function pointers to print error and debug messages. | 74 | /* Environment with function pointers to print error and debug messages. |
| 75 | */ | 75 | */ |
| 76 | struct ia_css_print_env { | 76 | struct ia_css_print_env { |
| 77 | int (*debug_print)(const char *fmt, va_list args); | 77 | int (*debug_print)(const char *fmt, va_list args); |
| 78 | /**< Print a debug message. */ | 78 | /** Print a debug message. */ |
| 79 | int (*error_print)(const char *fmt, va_list args); | 79 | int (*error_print)(const char *fmt, va_list args); |
| 80 | /**< Print an error message.*/ | 80 | /** Print an error message.*/ |
| 81 | }; | 81 | }; |
| 82 | 82 | ||
| 83 | /** Environment structure. This includes function pointers to access several | 83 | /* Environment structure. This includes function pointers to access several |
| 84 | * features provided by the environment in which the CSS API is used. | 84 | * features provided by the environment in which the CSS API is used. |
| 85 | * This is used to run the camera IP in multiple platforms such as Linux, | 85 | * This is used to run the camera IP in multiple platforms such as Linux, |
| 86 | * Windows and several simulation environments. | 86 | * Windows and several simulation environments. |
| 87 | */ | 87 | */ |
| 88 | struct ia_css_env { | 88 | struct ia_css_env { |
| 89 | struct ia_css_cpu_mem_env cpu_mem_env; /**< local flush. */ | 89 | struct ia_css_cpu_mem_env cpu_mem_env; /** local flush. */ |
| 90 | struct ia_css_hw_access_env hw_access_env; /**< CSS HW access functions */ | 90 | struct ia_css_hw_access_env hw_access_env; /** CSS HW access functions */ |
| 91 | struct ia_css_print_env print_env; /**< Message printing env. */ | 91 | struct ia_css_print_env print_env; /** Message printing env. */ |
| 92 | }; | 92 | }; |
| 93 | 93 | ||
| 94 | #endif /* __IA_CSS_ENV_H */ | 94 | #endif /* __IA_CSS_ENV_H */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_err.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_err.h index 572e4e55c69e..cf895815ea31 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_err.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_err.h | |||
| @@ -15,12 +15,12 @@ | |||
| 15 | #ifndef __IA_CSS_ERR_H | 15 | #ifndef __IA_CSS_ERR_H |
| 16 | #define __IA_CSS_ERR_H | 16 | #define __IA_CSS_ERR_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * This file contains possible return values for most | 19 | * This file contains possible return values for most |
| 20 | * functions in the CSS-API. | 20 | * functions in the CSS-API. |
| 21 | */ | 21 | */ |
| 22 | 22 | ||
| 23 | /** Errors, these values are used as the return value for most | 23 | /* Errors, these values are used as the return value for most |
| 24 | * functions in this API. | 24 | * functions in this API. |
| 25 | */ | 25 | */ |
| 26 | enum ia_css_err { | 26 | enum ia_css_err { |
| @@ -41,22 +41,22 @@ enum ia_css_err { | |||
| 41 | IA_CSS_ERR_NOT_SUPPORTED | 41 | IA_CSS_ERR_NOT_SUPPORTED |
| 42 | }; | 42 | }; |
| 43 | 43 | ||
| 44 | /** FW warnings. This enum contains a value for each warning that | 44 | /* FW warnings. This enum contains a value for each warning that |
| 45 | * the SP FW could indicate potential performance issue | 45 | * the SP FW could indicate potential performance issue |
| 46 | */ | 46 | */ |
| 47 | enum ia_css_fw_warning { | 47 | enum ia_css_fw_warning { |
| 48 | IA_CSS_FW_WARNING_NONE, | 48 | IA_CSS_FW_WARNING_NONE, |
| 49 | IA_CSS_FW_WARNING_ISYS_QUEUE_FULL, /** < CSS system delayed because of insufficient space in the ISys queue. | 49 | IA_CSS_FW_WARNING_ISYS_QUEUE_FULL, /* < CSS system delayed because of insufficient space in the ISys queue. |
| 50 | This warning can be avoided by de-queing ISYS buffers more timely. */ | 50 | This warning can be avoided by de-queing ISYS buffers more timely. */ |
| 51 | IA_CSS_FW_WARNING_PSYS_QUEUE_FULL, /** < CSS system delayed because of insufficient space in the PSys queue. | 51 | IA_CSS_FW_WARNING_PSYS_QUEUE_FULL, /* < CSS system delayed because of insufficient space in the PSys queue. |
| 52 | This warning can be avoided by de-queing PSYS buffers more timely. */ | 52 | This warning can be avoided by de-queing PSYS buffers more timely. */ |
| 53 | IA_CSS_FW_WARNING_CIRCBUF_ALL_LOCKED, /** < CSS system delayed because of insufficient available buffers. | 53 | IA_CSS_FW_WARNING_CIRCBUF_ALL_LOCKED, /* < CSS system delayed because of insufficient available buffers. |
| 54 | This warning can be avoided by unlocking locked frame-buffers more timely. */ | 54 | This warning can be avoided by unlocking locked frame-buffers more timely. */ |
| 55 | IA_CSS_FW_WARNING_EXP_ID_LOCKED, /** < Exposure ID skipped because the frame associated to it was still locked. | 55 | IA_CSS_FW_WARNING_EXP_ID_LOCKED, /* < Exposure ID skipped because the frame associated to it was still locked. |
| 56 | This warning can be avoided by unlocking locked frame-buffers more timely. */ | 56 | This warning can be avoided by unlocking locked frame-buffers more timely. */ |
| 57 | IA_CSS_FW_WARNING_TAG_EXP_ID_FAILED, /** < Exposure ID cannot be found on the circular buffer. | 57 | IA_CSS_FW_WARNING_TAG_EXP_ID_FAILED, /* < Exposure ID cannot be found on the circular buffer. |
| 58 | This warning can be avoided by unlocking locked frame-buffers more timely. */ | 58 | This warning can be avoided by unlocking locked frame-buffers more timely. */ |
| 59 | IA_CSS_FW_WARNING_FRAME_PARAM_MISMATCH, /** < Frame and param pair mismatched in tagger. | 59 | IA_CSS_FW_WARNING_FRAME_PARAM_MISMATCH, /* < Frame and param pair mismatched in tagger. |
| 60 | This warning can be avoided by providing a param set for each frame. */ | 60 | This warning can be avoided by providing a param set for each frame. */ |
| 61 | }; | 61 | }; |
| 62 | 62 | ||
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_event_public.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_event_public.h index aaf349772abe..036a2f03d3bd 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_event_public.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_event_public.h | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | #ifndef __IA_CSS_EVENT_PUBLIC_H | 15 | #ifndef __IA_CSS_EVENT_PUBLIC_H |
| 16 | #define __IA_CSS_EVENT_PUBLIC_H | 16 | #define __IA_CSS_EVENT_PUBLIC_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * This file contains CSS-API events functionality | 19 | * This file contains CSS-API events functionality |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| @@ -24,7 +24,7 @@ | |||
| 24 | #include <ia_css_types.h> /* ia_css_pipe */ | 24 | #include <ia_css_types.h> /* ia_css_pipe */ |
| 25 | #include <ia_css_timer.h> /* ia_css_timer */ | 25 | #include <ia_css_timer.h> /* ia_css_timer */ |
| 26 | 26 | ||
| 27 | /** The event type, distinguishes the kind of events that | 27 | /* The event type, distinguishes the kind of events that |
| 28 | * can are generated by the CSS system. | 28 | * can are generated by the CSS system. |
| 29 | * | 29 | * |
| 30 | * !!!IMPORTANT!!! KEEP THE FOLLOWING IN SYNC: | 30 | * !!!IMPORTANT!!! KEEP THE FOLLOWING IN SYNC: |
| @@ -35,43 +35,43 @@ | |||
| 35 | */ | 35 | */ |
| 36 | enum ia_css_event_type { | 36 | enum ia_css_event_type { |
| 37 | IA_CSS_EVENT_TYPE_OUTPUT_FRAME_DONE = 1 << 0, | 37 | IA_CSS_EVENT_TYPE_OUTPUT_FRAME_DONE = 1 << 0, |
| 38 | /**< Output frame ready. */ | 38 | /** Output frame ready. */ |
| 39 | IA_CSS_EVENT_TYPE_SECOND_OUTPUT_FRAME_DONE = 1 << 1, | 39 | IA_CSS_EVENT_TYPE_SECOND_OUTPUT_FRAME_DONE = 1 << 1, |
| 40 | /**< Second output frame ready. */ | 40 | /** Second output frame ready. */ |
| 41 | IA_CSS_EVENT_TYPE_VF_OUTPUT_FRAME_DONE = 1 << 2, | 41 | IA_CSS_EVENT_TYPE_VF_OUTPUT_FRAME_DONE = 1 << 2, |
| 42 | /**< Viewfinder Output frame ready. */ | 42 | /** Viewfinder Output frame ready. */ |
| 43 | IA_CSS_EVENT_TYPE_SECOND_VF_OUTPUT_FRAME_DONE = 1 << 3, | 43 | IA_CSS_EVENT_TYPE_SECOND_VF_OUTPUT_FRAME_DONE = 1 << 3, |
| 44 | /**< Second viewfinder Output frame ready. */ | 44 | /** Second viewfinder Output frame ready. */ |
| 45 | IA_CSS_EVENT_TYPE_3A_STATISTICS_DONE = 1 << 4, | 45 | IA_CSS_EVENT_TYPE_3A_STATISTICS_DONE = 1 << 4, |
| 46 | /**< Indication that 3A statistics are available. */ | 46 | /** Indication that 3A statistics are available. */ |
| 47 | IA_CSS_EVENT_TYPE_DIS_STATISTICS_DONE = 1 << 5, | 47 | IA_CSS_EVENT_TYPE_DIS_STATISTICS_DONE = 1 << 5, |
| 48 | /**< Indication that DIS statistics are available. */ | 48 | /** Indication that DIS statistics are available. */ |
| 49 | IA_CSS_EVENT_TYPE_PIPELINE_DONE = 1 << 6, | 49 | IA_CSS_EVENT_TYPE_PIPELINE_DONE = 1 << 6, |
| 50 | /**< Pipeline Done event, sent after last pipeline stage. */ | 50 | /** Pipeline Done event, sent after last pipeline stage. */ |
| 51 | IA_CSS_EVENT_TYPE_FRAME_TAGGED = 1 << 7, | 51 | IA_CSS_EVENT_TYPE_FRAME_TAGGED = 1 << 7, |
| 52 | /**< Frame tagged. */ | 52 | /** Frame tagged. */ |
| 53 | IA_CSS_EVENT_TYPE_INPUT_FRAME_DONE = 1 << 8, | 53 | IA_CSS_EVENT_TYPE_INPUT_FRAME_DONE = 1 << 8, |
| 54 | /**< Input frame ready. */ | 54 | /** Input frame ready. */ |
| 55 | IA_CSS_EVENT_TYPE_METADATA_DONE = 1 << 9, | 55 | IA_CSS_EVENT_TYPE_METADATA_DONE = 1 << 9, |
| 56 | /**< Metadata ready. */ | 56 | /** Metadata ready. */ |
| 57 | IA_CSS_EVENT_TYPE_LACE_STATISTICS_DONE = 1 << 10, | 57 | IA_CSS_EVENT_TYPE_LACE_STATISTICS_DONE = 1 << 10, |
| 58 | /**< Indication that LACE statistics are available. */ | 58 | /** Indication that LACE statistics are available. */ |
| 59 | IA_CSS_EVENT_TYPE_ACC_STAGE_COMPLETE = 1 << 11, | 59 | IA_CSS_EVENT_TYPE_ACC_STAGE_COMPLETE = 1 << 11, |
| 60 | /**< Extension stage complete. */ | 60 | /** Extension stage complete. */ |
| 61 | IA_CSS_EVENT_TYPE_TIMER = 1 << 12, | 61 | IA_CSS_EVENT_TYPE_TIMER = 1 << 12, |
| 62 | /**< Timer event for measuring the SP side latencies. It contains the | 62 | /** Timer event for measuring the SP side latencies. It contains the |
| 63 | 32-bit timer value from the SP */ | 63 | 32-bit timer value from the SP */ |
| 64 | IA_CSS_EVENT_TYPE_PORT_EOF = 1 << 13, | 64 | IA_CSS_EVENT_TYPE_PORT_EOF = 1 << 13, |
| 65 | /**< End Of Frame event, sent when in buffered sensor mode. */ | 65 | /** End Of Frame event, sent when in buffered sensor mode. */ |
| 66 | IA_CSS_EVENT_TYPE_FW_WARNING = 1 << 14, | 66 | IA_CSS_EVENT_TYPE_FW_WARNING = 1 << 14, |
| 67 | /**< Performance warning encounter by FW */ | 67 | /** Performance warning encounter by FW */ |
| 68 | IA_CSS_EVENT_TYPE_FW_ASSERT = 1 << 15, | 68 | IA_CSS_EVENT_TYPE_FW_ASSERT = 1 << 15, |
| 69 | /**< Assertion hit by FW */ | 69 | /** Assertion hit by FW */ |
| 70 | }; | 70 | }; |
| 71 | 71 | ||
| 72 | #define IA_CSS_EVENT_TYPE_NONE 0 | 72 | #define IA_CSS_EVENT_TYPE_NONE 0 |
| 73 | 73 | ||
| 74 | /** IA_CSS_EVENT_TYPE_ALL is a mask for all pipe related events. | 74 | /* IA_CSS_EVENT_TYPE_ALL is a mask for all pipe related events. |
| 75 | * The other events (such as PORT_EOF) cannot be enabled/disabled | 75 | * The other events (such as PORT_EOF) cannot be enabled/disabled |
| 76 | * and are hence excluded from this macro. | 76 | * and are hence excluded from this macro. |
| 77 | */ | 77 | */ |
| @@ -89,7 +89,7 @@ enum ia_css_event_type { | |||
| 89 | IA_CSS_EVENT_TYPE_LACE_STATISTICS_DONE | \ | 89 | IA_CSS_EVENT_TYPE_LACE_STATISTICS_DONE | \ |
| 90 | IA_CSS_EVENT_TYPE_ACC_STAGE_COMPLETE) | 90 | IA_CSS_EVENT_TYPE_ACC_STAGE_COMPLETE) |
| 91 | 91 | ||
| 92 | /** The event struct, container for the event type and its related values. | 92 | /* The event struct, container for the event type and its related values. |
| 93 | * Depending on the event type, either pipe or port will be filled. | 93 | * Depending on the event type, either pipe or port will be filled. |
| 94 | * Pipeline related events (like buffer/frame events) will return a valid and filled pipe handle. | 94 | * Pipeline related events (like buffer/frame events) will return a valid and filled pipe handle. |
| 95 | * For non pipeline related events (but i.e. stream specific, like EOF event), the port will be | 95 | * For non pipeline related events (but i.e. stream specific, like EOF event), the port will be |
| @@ -97,14 +97,14 @@ enum ia_css_event_type { | |||
| 97 | */ | 97 | */ |
| 98 | struct ia_css_event { | 98 | struct ia_css_event { |
| 99 | struct ia_css_pipe *pipe; | 99 | struct ia_css_pipe *pipe; |
| 100 | /**< Pipe handle on which event happened, NULL for non pipe related | 100 | /** Pipe handle on which event happened, NULL for non pipe related |
| 101 | events. */ | 101 | events. */ |
| 102 | enum ia_css_event_type type; | 102 | enum ia_css_event_type type; |
| 103 | /**< Type of Event, always valid/filled. */ | 103 | /** Type of Event, always valid/filled. */ |
| 104 | uint8_t port; | 104 | uint8_t port; |
| 105 | /**< Port number for EOF event (not valid for other events). */ | 105 | /** Port number for EOF event (not valid for other events). */ |
| 106 | uint8_t exp_id; | 106 | uint8_t exp_id; |
| 107 | /**< Exposure id for EOF/FRAME_TAGGED/FW_WARNING event (not valid for other events) | 107 | /** Exposure id for EOF/FRAME_TAGGED/FW_WARNING event (not valid for other events) |
| 108 | The exposure ID is unique only within a logical stream and it is | 108 | The exposure ID is unique only within a logical stream and it is |
| 109 | only generated on systems that have an input system (such as 2400 | 109 | only generated on systems that have an input system (such as 2400 |
| 110 | and 2401). | 110 | and 2401). |
| @@ -120,26 +120,26 @@ struct ia_css_event { | |||
| 120 | in the exposure IDs. Therefor applications should not use this | 120 | in the exposure IDs. Therefor applications should not use this |
| 121 | to detect frame drops. */ | 121 | to detect frame drops. */ |
| 122 | uint32_t fw_handle; | 122 | uint32_t fw_handle; |
| 123 | /**< Firmware Handle for ACC_STAGE_COMPLETE event (not valid for other | 123 | /** Firmware Handle for ACC_STAGE_COMPLETE event (not valid for other |
| 124 | events). */ | 124 | events). */ |
| 125 | enum ia_css_fw_warning fw_warning; | 125 | enum ia_css_fw_warning fw_warning; |
| 126 | /**< Firmware warning code, only for WARNING events. */ | 126 | /** Firmware warning code, only for WARNING events. */ |
| 127 | uint8_t fw_assert_module_id; | 127 | uint8_t fw_assert_module_id; |
| 128 | /**< Firmware module id, only for ASSERT events, should be logged by driver. */ | 128 | /** Firmware module id, only for ASSERT events, should be logged by driver. */ |
| 129 | uint16_t fw_assert_line_no; | 129 | uint16_t fw_assert_line_no; |
| 130 | /**< Firmware line number, only for ASSERT events, should be logged by driver. */ | 130 | /** Firmware line number, only for ASSERT events, should be logged by driver. */ |
| 131 | clock_value_t timer_data; | 131 | clock_value_t timer_data; |
| 132 | /**< For storing the full 32-bit of the timer value. Valid only for TIMER | 132 | /** For storing the full 32-bit of the timer value. Valid only for TIMER |
| 133 | event */ | 133 | event */ |
| 134 | uint8_t timer_code; | 134 | uint8_t timer_code; |
| 135 | /**< For storing the code of the TIMER event. Valid only for | 135 | /** For storing the code of the TIMER event. Valid only for |
| 136 | TIMER event */ | 136 | TIMER event */ |
| 137 | uint8_t timer_subcode; | 137 | uint8_t timer_subcode; |
| 138 | /**< For storing the subcode of the TIMER event. Valid only | 138 | /** For storing the subcode of the TIMER event. Valid only |
| 139 | for TIMER event */ | 139 | for TIMER event */ |
| 140 | }; | 140 | }; |
| 141 | 141 | ||
| 142 | /** @brief Dequeue a PSYS event from the CSS system. | 142 | /* @brief Dequeue a PSYS event from the CSS system. |
| 143 | * | 143 | * |
| 144 | * @param[out] event Pointer to the event struct which will be filled by | 144 | * @param[out] event Pointer to the event struct which will be filled by |
| 145 | * this function if an event is available. | 145 | * this function if an event is available. |
| @@ -156,7 +156,7 @@ struct ia_css_event { | |||
| 156 | enum ia_css_err | 156 | enum ia_css_err |
| 157 | ia_css_dequeue_psys_event(struct ia_css_event *event); | 157 | ia_css_dequeue_psys_event(struct ia_css_event *event); |
| 158 | 158 | ||
| 159 | /** @brief Dequeue an event from the CSS system. | 159 | /* @brief Dequeue an event from the CSS system. |
| 160 | * | 160 | * |
| 161 | * @param[out] event Pointer to the event struct which will be filled by | 161 | * @param[out] event Pointer to the event struct which will be filled by |
| 162 | * this function if an event is available. | 162 | * this function if an event is available. |
| @@ -171,7 +171,7 @@ ia_css_dequeue_psys_event(struct ia_css_event *event); | |||
| 171 | enum ia_css_err | 171 | enum ia_css_err |
| 172 | ia_css_dequeue_event(struct ia_css_event *event); | 172 | ia_css_dequeue_event(struct ia_css_event *event); |
| 173 | 173 | ||
| 174 | /** @brief Dequeue an ISYS event from the CSS system. | 174 | /* @brief Dequeue an ISYS event from the CSS system. |
| 175 | * | 175 | * |
| 176 | * @param[out] event Pointer to the event struct which will be filled by | 176 | * @param[out] event Pointer to the event struct which will be filled by |
| 177 | * this function if an event is available. | 177 | * this function if an event is available. |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_firmware.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_firmware.h index 06d375a09be2..d7d7f0a995e5 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_firmware.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_firmware.h | |||
| @@ -15,21 +15,21 @@ | |||
| 15 | #ifndef __IA_CSS_FIRMWARE_H | 15 | #ifndef __IA_CSS_FIRMWARE_H |
| 16 | #define __IA_CSS_FIRMWARE_H | 16 | #define __IA_CSS_FIRMWARE_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * This file contains firmware loading/unloading support functionality | 19 | * This file contains firmware loading/unloading support functionality |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | #include "ia_css_err.h" | 22 | #include "ia_css_err.h" |
| 23 | #include "ia_css_env.h" | 23 | #include "ia_css_env.h" |
| 24 | 24 | ||
| 25 | /** CSS firmware package structure. | 25 | /* CSS firmware package structure. |
| 26 | */ | 26 | */ |
| 27 | struct ia_css_fw { | 27 | struct ia_css_fw { |
| 28 | void *data; /**< pointer to the firmware data */ | 28 | void *data; /** pointer to the firmware data */ |
| 29 | unsigned int bytes; /**< length in bytes of firmware data */ | 29 | unsigned int bytes; /** length in bytes of firmware data */ |
| 30 | }; | 30 | }; |
| 31 | 31 | ||
| 32 | /** @brief Loads the firmware | 32 | /* @brief Loads the firmware |
| 33 | * @param[in] env Environment, provides functions to access the | 33 | * @param[in] env Environment, provides functions to access the |
| 34 | * environment in which the CSS code runs. This is | 34 | * environment in which the CSS code runs. This is |
| 35 | * used for host side memory access and message | 35 | * used for host side memory access and message |
| @@ -51,7 +51,7 @@ enum ia_css_err | |||
| 51 | ia_css_load_firmware(const struct ia_css_env *env, | 51 | ia_css_load_firmware(const struct ia_css_env *env, |
| 52 | const struct ia_css_fw *fw); | 52 | const struct ia_css_fw *fw); |
| 53 | 53 | ||
| 54 | /** @brief Unloads the firmware | 54 | /* @brief Unloads the firmware |
| 55 | * @return None | 55 | * @return None |
| 56 | * | 56 | * |
| 57 | * This function unloads the firmware loaded by ia_css_load_firmware. | 57 | * This function unloads the firmware loaded by ia_css_load_firmware. |
| @@ -61,7 +61,7 @@ ia_css_load_firmware(const struct ia_css_env *env, | |||
| 61 | void | 61 | void |
| 62 | ia_css_unload_firmware(void); | 62 | ia_css_unload_firmware(void); |
| 63 | 63 | ||
| 64 | /** @brief Checks firmware version | 64 | /* @brief Checks firmware version |
| 65 | * @param[in] fw Firmware package containing the firmware for all | 65 | * @param[in] fw Firmware package containing the firmware for all |
| 66 | * predefined ISP binaries. | 66 | * predefined ISP binaries. |
| 67 | * @return Returns true when the firmware version matches with the CSS | 67 | * @return Returns true when the firmware version matches with the CSS |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_frac.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_frac.h index da9c60144c6d..e5ffc579aef1 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_frac.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_frac.h | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | #ifndef _IA_CSS_FRAC_H | 15 | #ifndef _IA_CSS_FRAC_H |
| 16 | #define _IA_CSS_FRAC_H | 16 | #define _IA_CSS_FRAC_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * This file contains typedefs used for fractional numbers | 19 | * This file contains typedefs used for fractional numbers |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| @@ -25,13 +25,13 @@ | |||
| 25 | * NOTE: the 16 bit fixed point types actually occupy 32 bits | 25 | * NOTE: the 16 bit fixed point types actually occupy 32 bits |
| 26 | * to save on extension operations in the ISP code. | 26 | * to save on extension operations in the ISP code. |
| 27 | */ | 27 | */ |
| 28 | /** Unsigned fixed point value, 0 integer bits, 16 fractional bits */ | 28 | /* Unsigned fixed point value, 0 integer bits, 16 fractional bits */ |
| 29 | typedef uint32_t ia_css_u0_16; | 29 | typedef uint32_t ia_css_u0_16; |
| 30 | /** Unsigned fixed point value, 5 integer bits, 11 fractional bits */ | 30 | /* Unsigned fixed point value, 5 integer bits, 11 fractional bits */ |
| 31 | typedef uint32_t ia_css_u5_11; | 31 | typedef uint32_t ia_css_u5_11; |
| 32 | /** Unsigned fixed point value, 8 integer bits, 8 fractional bits */ | 32 | /* Unsigned fixed point value, 8 integer bits, 8 fractional bits */ |
| 33 | typedef uint32_t ia_css_u8_8; | 33 | typedef uint32_t ia_css_u8_8; |
| 34 | /** Signed fixed point value, 0 integer bits, 15 fractional bits */ | 34 | /* Signed fixed point value, 0 integer bits, 15 fractional bits */ |
| 35 | typedef int32_t ia_css_s0_15; | 35 | typedef int32_t ia_css_s0_15; |
| 36 | 36 | ||
| 37 | #endif /* _IA_CSS_FRAC_H */ | 37 | #endif /* _IA_CSS_FRAC_H */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_frame_format.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_frame_format.h index d534fbd91380..2f177edc36ac 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_frame_format.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_frame_format.h | |||
| @@ -15,11 +15,11 @@ | |||
| 15 | #ifndef __IA_CSS_FRAME_FORMAT_H | 15 | #ifndef __IA_CSS_FRAME_FORMAT_H |
| 16 | #define __IA_CSS_FRAME_FORMAT_H | 16 | #define __IA_CSS_FRAME_FORMAT_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * This file contains information about formats supported in the ISP | 19 | * This file contains information about formats supported in the ISP |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | /** Frame formats, some of these come from fourcc.org, others are | 22 | /* Frame formats, some of these come from fourcc.org, others are |
| 23 | better explained by video4linux2. The NV11 seems to be described only | 23 | better explained by video4linux2. The NV11 seems to be described only |
| 24 | on MSDN pages, but even those seem to be gone now. | 24 | on MSDN pages, but even those seem to be gone now. |
| 25 | Frames can come in many forms, the main categories are RAW, RGB and YUV | 25 | Frames can come in many forms, the main categories are RAW, RGB and YUV |
| @@ -48,45 +48,45 @@ | |||
| 48 | - css/bxt_sandbox/isysapi/interface/ia_css_isysapi_fw_types.h | 48 | - css/bxt_sandbox/isysapi/interface/ia_css_isysapi_fw_types.h |
| 49 | */ | 49 | */ |
| 50 | enum ia_css_frame_format { | 50 | enum ia_css_frame_format { |
| 51 | IA_CSS_FRAME_FORMAT_NV11 = 0, /**< 12 bit YUV 411, Y, UV plane */ | 51 | IA_CSS_FRAME_FORMAT_NV11 = 0, /** 12 bit YUV 411, Y, UV plane */ |
| 52 | IA_CSS_FRAME_FORMAT_NV12, /**< 12 bit YUV 420, Y, UV plane */ | 52 | IA_CSS_FRAME_FORMAT_NV12, /** 12 bit YUV 420, Y, UV plane */ |
| 53 | IA_CSS_FRAME_FORMAT_NV12_16, /**< 16 bit YUV 420, Y, UV plane */ | 53 | IA_CSS_FRAME_FORMAT_NV12_16, /** 16 bit YUV 420, Y, UV plane */ |
| 54 | IA_CSS_FRAME_FORMAT_NV12_TILEY, /**< 12 bit YUV 420, Intel proprietary tiled format, TileY */ | 54 | IA_CSS_FRAME_FORMAT_NV12_TILEY, /** 12 bit YUV 420, Intel proprietary tiled format, TileY */ |
| 55 | IA_CSS_FRAME_FORMAT_NV16, /**< 16 bit YUV 422, Y, UV plane */ | 55 | IA_CSS_FRAME_FORMAT_NV16, /** 16 bit YUV 422, Y, UV plane */ |
| 56 | IA_CSS_FRAME_FORMAT_NV21, /**< 12 bit YUV 420, Y, VU plane */ | 56 | IA_CSS_FRAME_FORMAT_NV21, /** 12 bit YUV 420, Y, VU plane */ |
| 57 | IA_CSS_FRAME_FORMAT_NV61, /**< 16 bit YUV 422, Y, VU plane */ | 57 | IA_CSS_FRAME_FORMAT_NV61, /** 16 bit YUV 422, Y, VU plane */ |
| 58 | IA_CSS_FRAME_FORMAT_YV12, /**< 12 bit YUV 420, Y, V, U plane */ | 58 | IA_CSS_FRAME_FORMAT_YV12, /** 12 bit YUV 420, Y, V, U plane */ |
| 59 | IA_CSS_FRAME_FORMAT_YV16, /**< 16 bit YUV 422, Y, V, U plane */ | 59 | IA_CSS_FRAME_FORMAT_YV16, /** 16 bit YUV 422, Y, V, U plane */ |
| 60 | IA_CSS_FRAME_FORMAT_YUV420, /**< 12 bit YUV 420, Y, U, V plane */ | 60 | IA_CSS_FRAME_FORMAT_YUV420, /** 12 bit YUV 420, Y, U, V plane */ |
| 61 | IA_CSS_FRAME_FORMAT_YUV420_16, /**< yuv420, 16 bits per subpixel */ | 61 | IA_CSS_FRAME_FORMAT_YUV420_16, /** yuv420, 16 bits per subpixel */ |
| 62 | IA_CSS_FRAME_FORMAT_YUV422, /**< 16 bit YUV 422, Y, U, V plane */ | 62 | IA_CSS_FRAME_FORMAT_YUV422, /** 16 bit YUV 422, Y, U, V plane */ |
| 63 | IA_CSS_FRAME_FORMAT_YUV422_16, /**< yuv422, 16 bits per subpixel */ | 63 | IA_CSS_FRAME_FORMAT_YUV422_16, /** yuv422, 16 bits per subpixel */ |
| 64 | IA_CSS_FRAME_FORMAT_UYVY, /**< 16 bit YUV 422, UYVY interleaved */ | 64 | IA_CSS_FRAME_FORMAT_UYVY, /** 16 bit YUV 422, UYVY interleaved */ |
| 65 | IA_CSS_FRAME_FORMAT_YUYV, /**< 16 bit YUV 422, YUYV interleaved */ | 65 | IA_CSS_FRAME_FORMAT_YUYV, /** 16 bit YUV 422, YUYV interleaved */ |
| 66 | IA_CSS_FRAME_FORMAT_YUV444, /**< 24 bit YUV 444, Y, U, V plane */ | 66 | IA_CSS_FRAME_FORMAT_YUV444, /** 24 bit YUV 444, Y, U, V plane */ |
| 67 | IA_CSS_FRAME_FORMAT_YUV_LINE, /**< Internal format, 2 y lines followed | 67 | IA_CSS_FRAME_FORMAT_YUV_LINE, /** Internal format, 2 y lines followed |
| 68 | by a uvinterleaved line */ | 68 | by a uvinterleaved line */ |
| 69 | IA_CSS_FRAME_FORMAT_RAW, /**< RAW, 1 plane */ | 69 | IA_CSS_FRAME_FORMAT_RAW, /** RAW, 1 plane */ |
| 70 | IA_CSS_FRAME_FORMAT_RGB565, /**< 16 bit RGB, 1 plane. Each 3 sub | 70 | IA_CSS_FRAME_FORMAT_RGB565, /** 16 bit RGB, 1 plane. Each 3 sub |
| 71 | pixels are packed into one 16 bit | 71 | pixels are packed into one 16 bit |
| 72 | value, 5 bits for R, 6 bits for G | 72 | value, 5 bits for R, 6 bits for G |
| 73 | and 5 bits for B. */ | 73 | and 5 bits for B. */ |
| 74 | IA_CSS_FRAME_FORMAT_PLANAR_RGB888, /**< 24 bit RGB, 3 planes */ | 74 | IA_CSS_FRAME_FORMAT_PLANAR_RGB888, /** 24 bit RGB, 3 planes */ |
| 75 | IA_CSS_FRAME_FORMAT_RGBA888, /**< 32 bit RGBA, 1 plane, A=Alpha | 75 | IA_CSS_FRAME_FORMAT_RGBA888, /** 32 bit RGBA, 1 plane, A=Alpha |
| 76 | (alpha is unused) */ | 76 | (alpha is unused) */ |
| 77 | IA_CSS_FRAME_FORMAT_QPLANE6, /**< Internal, for advanced ISP */ | 77 | IA_CSS_FRAME_FORMAT_QPLANE6, /** Internal, for advanced ISP */ |
| 78 | IA_CSS_FRAME_FORMAT_BINARY_8, /**< byte stream, used for jpeg. For | 78 | IA_CSS_FRAME_FORMAT_BINARY_8, /** byte stream, used for jpeg. For |
| 79 | frames of this type, we set the | 79 | frames of this type, we set the |
| 80 | height to 1 and the width to the | 80 | height to 1 and the width to the |
| 81 | number of allocated bytes. */ | 81 | number of allocated bytes. */ |
| 82 | IA_CSS_FRAME_FORMAT_MIPI, /**< MIPI frame, 1 plane */ | 82 | IA_CSS_FRAME_FORMAT_MIPI, /** MIPI frame, 1 plane */ |
| 83 | IA_CSS_FRAME_FORMAT_RAW_PACKED, /**< RAW, 1 plane, packed */ | 83 | IA_CSS_FRAME_FORMAT_RAW_PACKED, /** RAW, 1 plane, packed */ |
| 84 | IA_CSS_FRAME_FORMAT_CSI_MIPI_YUV420_8, /**< 8 bit per Y/U/V. | 84 | IA_CSS_FRAME_FORMAT_CSI_MIPI_YUV420_8, /** 8 bit per Y/U/V. |
| 85 | Y odd line; UYVY | 85 | Y odd line; UYVY |
| 86 | interleaved even line */ | 86 | interleaved even line */ |
| 87 | IA_CSS_FRAME_FORMAT_CSI_MIPI_LEGACY_YUV420_8, /**< Legacy YUV420. UY odd | 87 | IA_CSS_FRAME_FORMAT_CSI_MIPI_LEGACY_YUV420_8, /** Legacy YUV420. UY odd |
| 88 | line; VY even line */ | 88 | line; VY even line */ |
| 89 | IA_CSS_FRAME_FORMAT_CSI_MIPI_YUV420_10 /**< 10 bit per Y/U/V. Y odd | 89 | IA_CSS_FRAME_FORMAT_CSI_MIPI_YUV420_10 /** 10 bit per Y/U/V. Y odd |
| 90 | line; UYVY interleaved | 90 | line; UYVY interleaved |
| 91 | even line */ | 91 | even line */ |
| 92 | }; | 92 | }; |
| @@ -95,7 +95,7 @@ enum ia_css_frame_format { | |||
| 95 | /* because of issues this would cause with the Clockwork code checking tool. */ | 95 | /* because of issues this would cause with the Clockwork code checking tool. */ |
| 96 | #define IA_CSS_FRAME_FORMAT_NUM (IA_CSS_FRAME_FORMAT_CSI_MIPI_YUV420_10 + 1) | 96 | #define IA_CSS_FRAME_FORMAT_NUM (IA_CSS_FRAME_FORMAT_CSI_MIPI_YUV420_10 + 1) |
| 97 | 97 | ||
| 98 | /** Number of valid output frame formats for ISP **/ | 98 | /* Number of valid output frame formats for ISP **/ |
| 99 | #define IA_CSS_FRAME_OUT_FORMAT_NUM (IA_CSS_FRAME_FORMAT_RGBA888 + 1) | 99 | #define IA_CSS_FRAME_OUT_FORMAT_NUM (IA_CSS_FRAME_FORMAT_RGBA888 + 1) |
| 100 | 100 | ||
| 101 | #endif /* __IA_CSS_FRAME_FORMAT_H */ | 101 | #endif /* __IA_CSS_FRAME_FORMAT_H */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_frame_public.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_frame_public.h index 92f2389176b2..ba7a076c3afa 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_frame_public.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_frame_public.h | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | #ifndef __IA_CSS_FRAME_PUBLIC_H | 15 | #ifndef __IA_CSS_FRAME_PUBLIC_H |
| 16 | #define __IA_CSS_FRAME_PUBLIC_H | 16 | #define __IA_CSS_FRAME_PUBLIC_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * This file contains structs to describe various frame-formats supported by the ISP. | 19 | * This file contains structs to describe various frame-formats supported by the ISP. |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| @@ -25,73 +25,73 @@ | |||
| 25 | #include "ia_css_frame_format.h" | 25 | #include "ia_css_frame_format.h" |
| 26 | #include "ia_css_buffer.h" | 26 | #include "ia_css_buffer.h" |
| 27 | 27 | ||
| 28 | /** For RAW input, the bayer order needs to be specified separately. There | 28 | /* For RAW input, the bayer order needs to be specified separately. There |
| 29 | * are 4 possible orders. The name is constructed by taking the first two | 29 | * are 4 possible orders. The name is constructed by taking the first two |
| 30 | * colors on the first line and the first two colors from the second line. | 30 | * colors on the first line and the first two colors from the second line. |
| 31 | */ | 31 | */ |
| 32 | enum ia_css_bayer_order { | 32 | enum ia_css_bayer_order { |
| 33 | IA_CSS_BAYER_ORDER_GRBG, /**< GRGRGRGRGR .. BGBGBGBGBG */ | 33 | IA_CSS_BAYER_ORDER_GRBG, /** GRGRGRGRGR .. BGBGBGBGBG */ |
| 34 | IA_CSS_BAYER_ORDER_RGGB, /**< RGRGRGRGRG .. GBGBGBGBGB */ | 34 | IA_CSS_BAYER_ORDER_RGGB, /** RGRGRGRGRG .. GBGBGBGBGB */ |
| 35 | IA_CSS_BAYER_ORDER_BGGR, /**< BGBGBGBGBG .. GRGRGRGRGR */ | 35 | IA_CSS_BAYER_ORDER_BGGR, /** BGBGBGBGBG .. GRGRGRGRGR */ |
| 36 | IA_CSS_BAYER_ORDER_GBRG, /**< GBGBGBGBGB .. RGRGRGRGRG */ | 36 | IA_CSS_BAYER_ORDER_GBRG, /** GBGBGBGBGB .. RGRGRGRGRG */ |
| 37 | }; | 37 | }; |
| 38 | #define IA_CSS_BAYER_ORDER_NUM (IA_CSS_BAYER_ORDER_GBRG + 1) | 38 | #define IA_CSS_BAYER_ORDER_NUM (IA_CSS_BAYER_ORDER_GBRG + 1) |
| 39 | 39 | ||
| 40 | /** Frame plane structure. This describes one plane in an image | 40 | /* Frame plane structure. This describes one plane in an image |
| 41 | * frame buffer. | 41 | * frame buffer. |
| 42 | */ | 42 | */ |
| 43 | struct ia_css_frame_plane { | 43 | struct ia_css_frame_plane { |
| 44 | unsigned int height; /**< height of a plane in lines */ | 44 | unsigned int height; /** height of a plane in lines */ |
| 45 | unsigned int width; /**< width of a line, in DMA elements, note that | 45 | unsigned int width; /** width of a line, in DMA elements, note that |
| 46 | for RGB565 the three subpixels are stored in | 46 | for RGB565 the three subpixels are stored in |
| 47 | one element. For all other formats this is | 47 | one element. For all other formats this is |
| 48 | the number of subpixels per line. */ | 48 | the number of subpixels per line. */ |
| 49 | unsigned int stride; /**< stride of a line in bytes */ | 49 | unsigned int stride; /** stride of a line in bytes */ |
| 50 | unsigned int offset; /**< offset in bytes to start of frame data. | 50 | unsigned int offset; /** offset in bytes to start of frame data. |
| 51 | offset is wrt data field in ia_css_frame */ | 51 | offset is wrt data field in ia_css_frame */ |
| 52 | }; | 52 | }; |
| 53 | 53 | ||
| 54 | /** Binary "plane". This is used to story binary streams such as jpeg | 54 | /* Binary "plane". This is used to story binary streams such as jpeg |
| 55 | * images. This is not actually a real plane. | 55 | * images. This is not actually a real plane. |
| 56 | */ | 56 | */ |
| 57 | struct ia_css_frame_binary_plane { | 57 | struct ia_css_frame_binary_plane { |
| 58 | unsigned int size; /**< number of bytes in the stream */ | 58 | unsigned int size; /** number of bytes in the stream */ |
| 59 | struct ia_css_frame_plane data; /**< plane */ | 59 | struct ia_css_frame_plane data; /** plane */ |
| 60 | }; | 60 | }; |
| 61 | 61 | ||
| 62 | /** Container for planar YUV frames. This contains 3 planes. | 62 | /* Container for planar YUV frames. This contains 3 planes. |
| 63 | */ | 63 | */ |
| 64 | struct ia_css_frame_yuv_planes { | 64 | struct ia_css_frame_yuv_planes { |
| 65 | struct ia_css_frame_plane y; /**< Y plane */ | 65 | struct ia_css_frame_plane y; /** Y plane */ |
| 66 | struct ia_css_frame_plane u; /**< U plane */ | 66 | struct ia_css_frame_plane u; /** U plane */ |
| 67 | struct ia_css_frame_plane v; /**< V plane */ | 67 | struct ia_css_frame_plane v; /** V plane */ |
| 68 | }; | 68 | }; |
| 69 | 69 | ||
| 70 | /** Container for semi-planar YUV frames. | 70 | /* Container for semi-planar YUV frames. |
| 71 | */ | 71 | */ |
| 72 | struct ia_css_frame_nv_planes { | 72 | struct ia_css_frame_nv_planes { |
| 73 | struct ia_css_frame_plane y; /**< Y plane */ | 73 | struct ia_css_frame_plane y; /** Y plane */ |
| 74 | struct ia_css_frame_plane uv; /**< UV plane */ | 74 | struct ia_css_frame_plane uv; /** UV plane */ |
| 75 | }; | 75 | }; |
| 76 | 76 | ||
| 77 | /** Container for planar RGB frames. Each color has its own plane. | 77 | /* Container for planar RGB frames. Each color has its own plane. |
| 78 | */ | 78 | */ |
| 79 | struct ia_css_frame_rgb_planes { | 79 | struct ia_css_frame_rgb_planes { |
| 80 | struct ia_css_frame_plane r; /**< Red plane */ | 80 | struct ia_css_frame_plane r; /** Red plane */ |
| 81 | struct ia_css_frame_plane g; /**< Green plane */ | 81 | struct ia_css_frame_plane g; /** Green plane */ |
| 82 | struct ia_css_frame_plane b; /**< Blue plane */ | 82 | struct ia_css_frame_plane b; /** Blue plane */ |
| 83 | }; | 83 | }; |
| 84 | 84 | ||
| 85 | /** Container for 6-plane frames. These frames are used internally | 85 | /* Container for 6-plane frames. These frames are used internally |
| 86 | * in the advanced ISP only. | 86 | * in the advanced ISP only. |
| 87 | */ | 87 | */ |
| 88 | struct ia_css_frame_plane6_planes { | 88 | struct ia_css_frame_plane6_planes { |
| 89 | struct ia_css_frame_plane r; /**< Red plane */ | 89 | struct ia_css_frame_plane r; /** Red plane */ |
| 90 | struct ia_css_frame_plane r_at_b; /**< Red at blue plane */ | 90 | struct ia_css_frame_plane r_at_b; /** Red at blue plane */ |
| 91 | struct ia_css_frame_plane gr; /**< Red-green plane */ | 91 | struct ia_css_frame_plane gr; /** Red-green plane */ |
| 92 | struct ia_css_frame_plane gb; /**< Blue-green plane */ | 92 | struct ia_css_frame_plane gb; /** Blue-green plane */ |
| 93 | struct ia_css_frame_plane b; /**< Blue plane */ | 93 | struct ia_css_frame_plane b; /** Blue plane */ |
| 94 | struct ia_css_frame_plane b_at_r; /**< Blue at red plane */ | 94 | struct ia_css_frame_plane b_at_r; /** Blue at red plane */ |
| 95 | }; | 95 | }; |
| 96 | 96 | ||
| 97 | /* Crop info struct - stores the lines to be cropped in isp */ | 97 | /* Crop info struct - stores the lines to be cropped in isp */ |
| @@ -103,15 +103,15 @@ struct ia_css_crop_info { | |||
| 103 | unsigned int start_line; | 103 | unsigned int start_line; |
| 104 | }; | 104 | }; |
| 105 | 105 | ||
| 106 | /** Frame info struct. This describes the contents of an image frame buffer. | 106 | /* Frame info struct. This describes the contents of an image frame buffer. |
| 107 | */ | 107 | */ |
| 108 | struct ia_css_frame_info { | 108 | struct ia_css_frame_info { |
| 109 | struct ia_css_resolution res; /**< Frame resolution (valid data) */ | 109 | struct ia_css_resolution res; /** Frame resolution (valid data) */ |
| 110 | unsigned int padded_width; /**< stride of line in memory (in pixels) */ | 110 | unsigned int padded_width; /** stride of line in memory (in pixels) */ |
| 111 | enum ia_css_frame_format format; /**< format of the frame data */ | 111 | enum ia_css_frame_format format; /** format of the frame data */ |
| 112 | unsigned int raw_bit_depth; /**< number of valid bits per pixel, | 112 | unsigned int raw_bit_depth; /** number of valid bits per pixel, |
| 113 | only valid for RAW bayer frames */ | 113 | only valid for RAW bayer frames */ |
| 114 | enum ia_css_bayer_order raw_bayer_order; /**< bayer order, only valid | 114 | enum ia_css_bayer_order raw_bayer_order; /** bayer order, only valid |
| 115 | for RAW bayer frames */ | 115 | for RAW bayer frames */ |
| 116 | /* the params below are computed based on bayer_order | 116 | /* the params below are computed based on bayer_order |
| 117 | * we can remove the raw_bayer_order if it is redundant | 117 | * we can remove the raw_bayer_order if it is redundant |
| @@ -136,9 +136,9 @@ struct ia_css_frame_info { | |||
| 136 | * Specifies the DVS loop delay in "frame periods" | 136 | * Specifies the DVS loop delay in "frame periods" |
| 137 | */ | 137 | */ |
| 138 | enum ia_css_frame_delay { | 138 | enum ia_css_frame_delay { |
| 139 | IA_CSS_FRAME_DELAY_0, /**< Frame delay = 0 */ | 139 | IA_CSS_FRAME_DELAY_0, /** Frame delay = 0 */ |
| 140 | IA_CSS_FRAME_DELAY_1, /**< Frame delay = 1 */ | 140 | IA_CSS_FRAME_DELAY_1, /** Frame delay = 1 */ |
| 141 | IA_CSS_FRAME_DELAY_2 /**< Frame delay = 2 */ | 141 | IA_CSS_FRAME_DELAY_2 /** Frame delay = 2 */ |
| 142 | }; | 142 | }; |
| 143 | 143 | ||
| 144 | enum ia_css_frame_flash_state { | 144 | enum ia_css_frame_flash_state { |
| @@ -147,13 +147,13 @@ enum ia_css_frame_flash_state { | |||
| 147 | IA_CSS_FRAME_FLASH_STATE_FULL | 147 | IA_CSS_FRAME_FLASH_STATE_FULL |
| 148 | }; | 148 | }; |
| 149 | 149 | ||
| 150 | /** Frame structure. This structure describes an image buffer or frame. | 150 | /* Frame structure. This structure describes an image buffer or frame. |
| 151 | * This is the main structure used for all input and output images. | 151 | * This is the main structure used for all input and output images. |
| 152 | */ | 152 | */ |
| 153 | struct ia_css_frame { | 153 | struct ia_css_frame { |
| 154 | struct ia_css_frame_info info; /**< info struct describing the frame */ | 154 | struct ia_css_frame_info info; /** info struct describing the frame */ |
| 155 | ia_css_ptr data; /**< pointer to start of image data */ | 155 | ia_css_ptr data; /** pointer to start of image data */ |
| 156 | unsigned int data_bytes; /**< size of image data in bytes */ | 156 | unsigned int data_bytes; /** size of image data in bytes */ |
| 157 | /* LA: move this to ia_css_buffer */ | 157 | /* LA: move this to ia_css_buffer */ |
| 158 | /* | 158 | /* |
| 159 | * -1 if data address is static during life time of pipeline | 159 | * -1 if data address is static during life time of pipeline |
| @@ -171,10 +171,10 @@ struct ia_css_frame { | |||
| 171 | enum ia_css_buffer_type buf_type; | 171 | enum ia_css_buffer_type buf_type; |
| 172 | enum ia_css_frame_flash_state flash_state; | 172 | enum ia_css_frame_flash_state flash_state; |
| 173 | unsigned int exp_id; | 173 | unsigned int exp_id; |
| 174 | /**< exposure id, see ia_css_event_public.h for more detail */ | 174 | /** exposure id, see ia_css_event_public.h for more detail */ |
| 175 | uint32_t isp_config_id; /**< Unique ID to track which config was actually applied to a particular frame */ | 175 | uint32_t isp_config_id; /** Unique ID to track which config was actually applied to a particular frame */ |
| 176 | bool valid; /**< First video output frame is not valid */ | 176 | bool valid; /** First video output frame is not valid */ |
| 177 | bool contiguous; /**< memory is allocated physically contiguously */ | 177 | bool contiguous; /** memory is allocated physically contiguously */ |
| 178 | union { | 178 | union { |
| 179 | unsigned int _initialisation_dummy; | 179 | unsigned int _initialisation_dummy; |
| 180 | struct ia_css_frame_plane raw; | 180 | struct ia_css_frame_plane raw; |
| @@ -185,7 +185,7 @@ struct ia_css_frame { | |||
| 185 | struct ia_css_frame_nv_planes nv; | 185 | struct ia_css_frame_nv_planes nv; |
| 186 | struct ia_css_frame_plane6_planes plane6; | 186 | struct ia_css_frame_plane6_planes plane6; |
| 187 | struct ia_css_frame_binary_plane binary; | 187 | struct ia_css_frame_binary_plane binary; |
| 188 | } planes; /**< frame planes, select the right one based on | 188 | } planes; /** frame planes, select the right one based on |
| 189 | info.format */ | 189 | info.format */ |
| 190 | }; | 190 | }; |
| 191 | 191 | ||
| @@ -204,7 +204,7 @@ struct ia_css_frame { | |||
| 204 | { 0 } /* planes */ \ | 204 | { 0 } /* planes */ \ |
| 205 | } | 205 | } |
| 206 | 206 | ||
| 207 | /** @brief Fill a frame with zeros | 207 | /* @brief Fill a frame with zeros |
| 208 | * | 208 | * |
| 209 | * @param frame The frame. | 209 | * @param frame The frame. |
| 210 | * @return None | 210 | * @return None |
| @@ -213,7 +213,7 @@ struct ia_css_frame { | |||
| 213 | */ | 213 | */ |
| 214 | void ia_css_frame_zero(struct ia_css_frame *frame); | 214 | void ia_css_frame_zero(struct ia_css_frame *frame); |
| 215 | 215 | ||
| 216 | /** @brief Allocate a CSS frame structure | 216 | /* @brief Allocate a CSS frame structure |
| 217 | * | 217 | * |
| 218 | * @param frame The allocated frame. | 218 | * @param frame The allocated frame. |
| 219 | * @param width The width (in pixels) of the frame. | 219 | * @param width The width (in pixels) of the frame. |
| @@ -234,7 +234,7 @@ ia_css_frame_allocate(struct ia_css_frame **frame, | |||
| 234 | unsigned int stride, | 234 | unsigned int stride, |
| 235 | unsigned int raw_bit_depth); | 235 | unsigned int raw_bit_depth); |
| 236 | 236 | ||
| 237 | /** @brief Allocate a CSS frame structure using a frame info structure. | 237 | /* @brief Allocate a CSS frame structure using a frame info structure. |
| 238 | * | 238 | * |
| 239 | * @param frame The allocated frame. | 239 | * @param frame The allocated frame. |
| 240 | * @param[in] info The frame info structure. | 240 | * @param[in] info The frame info structure. |
| @@ -247,7 +247,7 @@ ia_css_frame_allocate(struct ia_css_frame **frame, | |||
| 247 | enum ia_css_err | 247 | enum ia_css_err |
| 248 | ia_css_frame_allocate_from_info(struct ia_css_frame **frame, | 248 | ia_css_frame_allocate_from_info(struct ia_css_frame **frame, |
| 249 | const struct ia_css_frame_info *info); | 249 | const struct ia_css_frame_info *info); |
| 250 | /** @brief Free a CSS frame structure. | 250 | /* @brief Free a CSS frame structure. |
| 251 | * | 251 | * |
| 252 | * @param[in] frame Pointer to the frame. | 252 | * @param[in] frame Pointer to the frame. |
| 253 | * @return None | 253 | * @return None |
| @@ -258,7 +258,7 @@ ia_css_frame_allocate_from_info(struct ia_css_frame **frame, | |||
| 258 | void | 258 | void |
| 259 | ia_css_frame_free(struct ia_css_frame *frame); | 259 | ia_css_frame_free(struct ia_css_frame *frame); |
| 260 | 260 | ||
| 261 | /** @brief Allocate a contiguous CSS frame structure | 261 | /* @brief Allocate a contiguous CSS frame structure |
| 262 | * | 262 | * |
| 263 | * @param frame The allocated frame. | 263 | * @param frame The allocated frame. |
| 264 | * @param width The width (in pixels) of the frame. | 264 | * @param width The width (in pixels) of the frame. |
| @@ -280,7 +280,7 @@ ia_css_frame_allocate_contiguous(struct ia_css_frame **frame, | |||
| 280 | unsigned int stride, | 280 | unsigned int stride, |
| 281 | unsigned int raw_bit_depth); | 281 | unsigned int raw_bit_depth); |
| 282 | 282 | ||
| 283 | /** @brief Allocate a contiguous CSS frame from a frame info structure. | 283 | /* @brief Allocate a contiguous CSS frame from a frame info structure. |
| 284 | * | 284 | * |
| 285 | * @param frame The allocated frame. | 285 | * @param frame The allocated frame. |
| 286 | * @param[in] info The frame info structure. | 286 | * @param[in] info The frame info structure. |
| @@ -296,7 +296,7 @@ enum ia_css_err | |||
| 296 | ia_css_frame_allocate_contiguous_from_info(struct ia_css_frame **frame, | 296 | ia_css_frame_allocate_contiguous_from_info(struct ia_css_frame **frame, |
| 297 | const struct ia_css_frame_info *info); | 297 | const struct ia_css_frame_info *info); |
| 298 | 298 | ||
| 299 | /** @brief Allocate a CSS frame structure using a frame info structure. | 299 | /* @brief Allocate a CSS frame structure using a frame info structure. |
| 300 | * | 300 | * |
| 301 | * @param frame The allocated frame. | 301 | * @param frame The allocated frame. |
| 302 | * @param[in] info The frame info structure. | 302 | * @param[in] info The frame info structure. |
| @@ -309,7 +309,7 @@ enum ia_css_err | |||
| 309 | ia_css_frame_create_from_info(struct ia_css_frame **frame, | 309 | ia_css_frame_create_from_info(struct ia_css_frame **frame, |
| 310 | const struct ia_css_frame_info *info); | 310 | const struct ia_css_frame_info *info); |
| 311 | 311 | ||
| 312 | /** @brief Set a mapped data buffer to a CSS frame | 312 | /* @brief Set a mapped data buffer to a CSS frame |
| 313 | * | 313 | * |
| 314 | * @param[in] frame Valid CSS frame pointer | 314 | * @param[in] frame Valid CSS frame pointer |
| 315 | * @param[in] mapped_data Mapped data buffer to be assigned to the CSS frame | 315 | * @param[in] mapped_data Mapped data buffer to be assigned to the CSS frame |
| @@ -327,7 +327,7 @@ ia_css_frame_set_data(struct ia_css_frame *frame, | |||
| 327 | const ia_css_ptr mapped_data, | 327 | const ia_css_ptr mapped_data, |
| 328 | size_t data_size_bytes); | 328 | size_t data_size_bytes); |
| 329 | 329 | ||
| 330 | /** @brief Map an existing frame data pointer to a CSS frame. | 330 | /* @brief Map an existing frame data pointer to a CSS frame. |
| 331 | * | 331 | * |
| 332 | * @param frame Pointer to the frame to be initialized | 332 | * @param frame Pointer to the frame to be initialized |
| 333 | * @param[in] info The frame info. | 333 | * @param[in] info The frame info. |
| @@ -350,7 +350,7 @@ ia_css_frame_map(struct ia_css_frame **frame, | |||
| 350 | uint16_t attribute, | 350 | uint16_t attribute, |
| 351 | void *context); | 351 | void *context); |
| 352 | 352 | ||
| 353 | /** @brief Unmap a CSS frame structure. | 353 | /* @brief Unmap a CSS frame structure. |
| 354 | * | 354 | * |
| 355 | * @param[in] frame Pointer to the CSS frame. | 355 | * @param[in] frame Pointer to the CSS frame. |
| 356 | * @return None | 356 | * @return None |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_input_port.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_input_port.h index 8a17c3346caa..f415570a3da9 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_input_port.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_input_port.h | |||
| @@ -15,11 +15,11 @@ | |||
| 15 | #ifndef __IA_CSS_INPUT_PORT_H | 15 | #ifndef __IA_CSS_INPUT_PORT_H |
| 16 | #define __IA_CSS_INPUT_PORT_H | 16 | #define __IA_CSS_INPUT_PORT_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * This file contains information about the possible input ports for CSS | 19 | * This file contains information about the possible input ports for CSS |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | /** Enumeration of the physical input ports on the CSS hardware. | 22 | /* Enumeration of the physical input ports on the CSS hardware. |
| 23 | * There are 3 MIPI CSI-2 ports. | 23 | * There are 3 MIPI CSI-2 ports. |
| 24 | */ | 24 | */ |
| 25 | enum ia_css_csi2_port { | 25 | enum ia_css_csi2_port { |
| @@ -28,39 +28,39 @@ enum ia_css_csi2_port { | |||
| 28 | IA_CSS_CSI2_PORT2 /* Implicitly map to MIPI_PORT2_ID */ | 28 | IA_CSS_CSI2_PORT2 /* Implicitly map to MIPI_PORT2_ID */ |
| 29 | }; | 29 | }; |
| 30 | 30 | ||
| 31 | /** Backward compatible for CSS API 2.0 only | 31 | /* Backward compatible for CSS API 2.0 only |
| 32 | * TO BE REMOVED when all drivers move to CSS API 2.1 | 32 | * TO BE REMOVED when all drivers move to CSS API 2.1 |
| 33 | */ | 33 | */ |
| 34 | #define IA_CSS_CSI2_PORT_4LANE IA_CSS_CSI2_PORT0 | 34 | #define IA_CSS_CSI2_PORT_4LANE IA_CSS_CSI2_PORT0 |
| 35 | #define IA_CSS_CSI2_PORT_1LANE IA_CSS_CSI2_PORT1 | 35 | #define IA_CSS_CSI2_PORT_1LANE IA_CSS_CSI2_PORT1 |
| 36 | #define IA_CSS_CSI2_PORT_2LANE IA_CSS_CSI2_PORT2 | 36 | #define IA_CSS_CSI2_PORT_2LANE IA_CSS_CSI2_PORT2 |
| 37 | 37 | ||
| 38 | /** The CSI2 interface supports 2 types of compression or can | 38 | /* The CSI2 interface supports 2 types of compression or can |
| 39 | * be run without compression. | 39 | * be run without compression. |
| 40 | */ | 40 | */ |
| 41 | enum ia_css_csi2_compression_type { | 41 | enum ia_css_csi2_compression_type { |
| 42 | IA_CSS_CSI2_COMPRESSION_TYPE_NONE, /**< No compression */ | 42 | IA_CSS_CSI2_COMPRESSION_TYPE_NONE, /** No compression */ |
| 43 | IA_CSS_CSI2_COMPRESSION_TYPE_1, /**< Compression scheme 1 */ | 43 | IA_CSS_CSI2_COMPRESSION_TYPE_1, /** Compression scheme 1 */ |
| 44 | IA_CSS_CSI2_COMPRESSION_TYPE_2 /**< Compression scheme 2 */ | 44 | IA_CSS_CSI2_COMPRESSION_TYPE_2 /** Compression scheme 2 */ |
| 45 | }; | 45 | }; |
| 46 | 46 | ||
| 47 | struct ia_css_csi2_compression { | 47 | struct ia_css_csi2_compression { |
| 48 | enum ia_css_csi2_compression_type type; | 48 | enum ia_css_csi2_compression_type type; |
| 49 | /**< Compression used */ | 49 | /** Compression used */ |
| 50 | unsigned int compressed_bits_per_pixel; | 50 | unsigned int compressed_bits_per_pixel; |
| 51 | /**< Compressed bits per pixel (only when compression is enabled) */ | 51 | /** Compressed bits per pixel (only when compression is enabled) */ |
| 52 | unsigned int uncompressed_bits_per_pixel; | 52 | unsigned int uncompressed_bits_per_pixel; |
| 53 | /**< Uncompressed bits per pixel (only when compression is enabled) */ | 53 | /** Uncompressed bits per pixel (only when compression is enabled) */ |
| 54 | }; | 54 | }; |
| 55 | 55 | ||
| 56 | /** Input port structure. | 56 | /* Input port structure. |
| 57 | */ | 57 | */ |
| 58 | struct ia_css_input_port { | 58 | struct ia_css_input_port { |
| 59 | enum ia_css_csi2_port port; /**< Physical CSI-2 port */ | 59 | enum ia_css_csi2_port port; /** Physical CSI-2 port */ |
| 60 | unsigned int num_lanes; /**< Number of lanes used (4-lane port only) */ | 60 | unsigned int num_lanes; /** Number of lanes used (4-lane port only) */ |
| 61 | unsigned int timeout; /**< Timeout value */ | 61 | unsigned int timeout; /** Timeout value */ |
| 62 | unsigned int rxcount; /**< Register value, should include all lanes */ | 62 | unsigned int rxcount; /** Register value, should include all lanes */ |
| 63 | struct ia_css_csi2_compression compression; /**< Compression used */ | 63 | struct ia_css_csi2_compression compression; /** Compression used */ |
| 64 | }; | 64 | }; |
| 65 | 65 | ||
| 66 | #endif /* __IA_CSS_INPUT_PORT_H */ | 66 | #endif /* __IA_CSS_INPUT_PORT_H */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_irq.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_irq.h index 416ca4d28732..10ef61178bb2 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_irq.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_irq.h | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | #ifndef __IA_CSS_IRQ_H | 15 | #ifndef __IA_CSS_IRQ_H |
| 16 | #define __IA_CSS_IRQ_H | 16 | #define __IA_CSS_IRQ_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * This file contains information for Interrupts/IRQs from CSS | 19 | * This file contains information for Interrupts/IRQs from CSS |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| @@ -23,14 +23,14 @@ | |||
| 23 | #include "ia_css_pipe_public.h" | 23 | #include "ia_css_pipe_public.h" |
| 24 | #include "ia_css_input_port.h" | 24 | #include "ia_css_input_port.h" |
| 25 | 25 | ||
| 26 | /** Interrupt types, these enumerate all supported interrupt types. | 26 | /* Interrupt types, these enumerate all supported interrupt types. |
| 27 | */ | 27 | */ |
| 28 | enum ia_css_irq_type { | 28 | enum ia_css_irq_type { |
| 29 | IA_CSS_IRQ_TYPE_EDGE, /**< Edge (level) sensitive interrupt */ | 29 | IA_CSS_IRQ_TYPE_EDGE, /** Edge (level) sensitive interrupt */ |
| 30 | IA_CSS_IRQ_TYPE_PULSE /**< Pulse-shaped interrupt */ | 30 | IA_CSS_IRQ_TYPE_PULSE /** Pulse-shaped interrupt */ |
| 31 | }; | 31 | }; |
| 32 | 32 | ||
| 33 | /** Interrupt request type. | 33 | /* Interrupt request type. |
| 34 | * When the CSS hardware generates an interrupt, a function in this API | 34 | * When the CSS hardware generates an interrupt, a function in this API |
| 35 | * needs to be called to retrieve information about the interrupt. | 35 | * needs to be called to retrieve information about the interrupt. |
| 36 | * This interrupt type is part of this information and indicates what | 36 | * This interrupt type is part of this information and indicates what |
| @@ -46,55 +46,55 @@ enum ia_css_irq_type { | |||
| 46 | */ | 46 | */ |
| 47 | enum ia_css_irq_info { | 47 | enum ia_css_irq_info { |
| 48 | IA_CSS_IRQ_INFO_CSS_RECEIVER_ERROR = 1 << 0, | 48 | IA_CSS_IRQ_INFO_CSS_RECEIVER_ERROR = 1 << 0, |
| 49 | /**< the css receiver has encountered an error */ | 49 | /** the css receiver has encountered an error */ |
| 50 | IA_CSS_IRQ_INFO_CSS_RECEIVER_FIFO_OVERFLOW = 1 << 1, | 50 | IA_CSS_IRQ_INFO_CSS_RECEIVER_FIFO_OVERFLOW = 1 << 1, |
| 51 | /**< the FIFO in the csi receiver has overflown */ | 51 | /** the FIFO in the csi receiver has overflown */ |
| 52 | IA_CSS_IRQ_INFO_CSS_RECEIVER_SOF = 1 << 2, | 52 | IA_CSS_IRQ_INFO_CSS_RECEIVER_SOF = 1 << 2, |
| 53 | /**< the css receiver received the start of frame */ | 53 | /** the css receiver received the start of frame */ |
| 54 | IA_CSS_IRQ_INFO_CSS_RECEIVER_EOF = 1 << 3, | 54 | IA_CSS_IRQ_INFO_CSS_RECEIVER_EOF = 1 << 3, |
| 55 | /**< the css receiver received the end of frame */ | 55 | /** the css receiver received the end of frame */ |
| 56 | IA_CSS_IRQ_INFO_CSS_RECEIVER_SOL = 1 << 4, | 56 | IA_CSS_IRQ_INFO_CSS_RECEIVER_SOL = 1 << 4, |
| 57 | /**< the css receiver received the start of line */ | 57 | /** the css receiver received the start of line */ |
| 58 | IA_CSS_IRQ_INFO_PSYS_EVENTS_READY = 1 << 5, | 58 | IA_CSS_IRQ_INFO_PSYS_EVENTS_READY = 1 << 5, |
| 59 | /**< One or more events are available in the PSYS event queue */ | 59 | /** One or more events are available in the PSYS event queue */ |
| 60 | IA_CSS_IRQ_INFO_EVENTS_READY = IA_CSS_IRQ_INFO_PSYS_EVENTS_READY, | 60 | IA_CSS_IRQ_INFO_EVENTS_READY = IA_CSS_IRQ_INFO_PSYS_EVENTS_READY, |
| 61 | /**< deprecated{obsolete version of IA_CSS_IRQ_INFO_PSYS_EVENTS_READY, | 61 | /** deprecated{obsolete version of IA_CSS_IRQ_INFO_PSYS_EVENTS_READY, |
| 62 | * same functionality.} */ | 62 | * same functionality.} */ |
| 63 | IA_CSS_IRQ_INFO_CSS_RECEIVER_EOL = 1 << 6, | 63 | IA_CSS_IRQ_INFO_CSS_RECEIVER_EOL = 1 << 6, |
| 64 | /**< the css receiver received the end of line */ | 64 | /** the css receiver received the end of line */ |
| 65 | IA_CSS_IRQ_INFO_CSS_RECEIVER_SIDEBAND_CHANGED = 1 << 7, | 65 | IA_CSS_IRQ_INFO_CSS_RECEIVER_SIDEBAND_CHANGED = 1 << 7, |
| 66 | /**< the css receiver received a change in side band signals */ | 66 | /** the css receiver received a change in side band signals */ |
| 67 | IA_CSS_IRQ_INFO_CSS_RECEIVER_GEN_SHORT_0 = 1 << 8, | 67 | IA_CSS_IRQ_INFO_CSS_RECEIVER_GEN_SHORT_0 = 1 << 8, |
| 68 | /**< generic short packets (0) */ | 68 | /** generic short packets (0) */ |
| 69 | IA_CSS_IRQ_INFO_CSS_RECEIVER_GEN_SHORT_1 = 1 << 9, | 69 | IA_CSS_IRQ_INFO_CSS_RECEIVER_GEN_SHORT_1 = 1 << 9, |
| 70 | /**< generic short packets (1) */ | 70 | /** generic short packets (1) */ |
| 71 | IA_CSS_IRQ_INFO_IF_PRIM_ERROR = 1 << 10, | 71 | IA_CSS_IRQ_INFO_IF_PRIM_ERROR = 1 << 10, |
| 72 | /**< the primary input formatter (A) has encountered an error */ | 72 | /** the primary input formatter (A) has encountered an error */ |
| 73 | IA_CSS_IRQ_INFO_IF_PRIM_B_ERROR = 1 << 11, | 73 | IA_CSS_IRQ_INFO_IF_PRIM_B_ERROR = 1 << 11, |
| 74 | /**< the primary input formatter (B) has encountered an error */ | 74 | /** the primary input formatter (B) has encountered an error */ |
| 75 | IA_CSS_IRQ_INFO_IF_SEC_ERROR = 1 << 12, | 75 | IA_CSS_IRQ_INFO_IF_SEC_ERROR = 1 << 12, |
| 76 | /**< the secondary input formatter has encountered an error */ | 76 | /** the secondary input formatter has encountered an error */ |
| 77 | IA_CSS_IRQ_INFO_STREAM_TO_MEM_ERROR = 1 << 13, | 77 | IA_CSS_IRQ_INFO_STREAM_TO_MEM_ERROR = 1 << 13, |
| 78 | /**< the stream-to-memory device has encountered an error */ | 78 | /** the stream-to-memory device has encountered an error */ |
| 79 | IA_CSS_IRQ_INFO_SW_0 = 1 << 14, | 79 | IA_CSS_IRQ_INFO_SW_0 = 1 << 14, |
| 80 | /**< software interrupt 0 */ | 80 | /** software interrupt 0 */ |
| 81 | IA_CSS_IRQ_INFO_SW_1 = 1 << 15, | 81 | IA_CSS_IRQ_INFO_SW_1 = 1 << 15, |
| 82 | /**< software interrupt 1 */ | 82 | /** software interrupt 1 */ |
| 83 | IA_CSS_IRQ_INFO_SW_2 = 1 << 16, | 83 | IA_CSS_IRQ_INFO_SW_2 = 1 << 16, |
| 84 | /**< software interrupt 2 */ | 84 | /** software interrupt 2 */ |
| 85 | IA_CSS_IRQ_INFO_ISP_BINARY_STATISTICS_READY = 1 << 17, | 85 | IA_CSS_IRQ_INFO_ISP_BINARY_STATISTICS_READY = 1 << 17, |
| 86 | /**< ISP binary statistics are ready */ | 86 | /** ISP binary statistics are ready */ |
| 87 | IA_CSS_IRQ_INFO_INPUT_SYSTEM_ERROR = 1 << 18, | 87 | IA_CSS_IRQ_INFO_INPUT_SYSTEM_ERROR = 1 << 18, |
| 88 | /**< the input system in in error */ | 88 | /** the input system in in error */ |
| 89 | IA_CSS_IRQ_INFO_IF_ERROR = 1 << 19, | 89 | IA_CSS_IRQ_INFO_IF_ERROR = 1 << 19, |
| 90 | /**< the input formatter in in error */ | 90 | /** the input formatter in in error */ |
| 91 | IA_CSS_IRQ_INFO_DMA_ERROR = 1 << 20, | 91 | IA_CSS_IRQ_INFO_DMA_ERROR = 1 << 20, |
| 92 | /**< the dma in in error */ | 92 | /** the dma in in error */ |
| 93 | IA_CSS_IRQ_INFO_ISYS_EVENTS_READY = 1 << 21, | 93 | IA_CSS_IRQ_INFO_ISYS_EVENTS_READY = 1 << 21, |
| 94 | /**< end-of-frame events are ready in the isys_event queue */ | 94 | /** end-of-frame events are ready in the isys_event queue */ |
| 95 | }; | 95 | }; |
| 96 | 96 | ||
| 97 | /** CSS receiver error types. Whenever the CSS receiver has encountered | 97 | /* CSS receiver error types. Whenever the CSS receiver has encountered |
| 98 | * an error, this enumeration is used to indicate which errors have occurred. | 98 | * an error, this enumeration is used to indicate which errors have occurred. |
| 99 | * | 99 | * |
| 100 | * Note that multiple error flags can be enabled at once and that this is in | 100 | * Note that multiple error flags can be enabled at once and that this is in |
| @@ -105,39 +105,39 @@ enum ia_css_irq_info { | |||
| 105 | * different receiver types, or possibly none in case of tests systems. | 105 | * different receiver types, or possibly none in case of tests systems. |
| 106 | */ | 106 | */ |
| 107 | enum ia_css_rx_irq_info { | 107 | enum ia_css_rx_irq_info { |
| 108 | IA_CSS_RX_IRQ_INFO_BUFFER_OVERRUN = 1U << 0, /**< buffer overrun */ | 108 | IA_CSS_RX_IRQ_INFO_BUFFER_OVERRUN = 1U << 0, /** buffer overrun */ |
| 109 | IA_CSS_RX_IRQ_INFO_ENTER_SLEEP_MODE = 1U << 1, /**< entering sleep mode */ | 109 | IA_CSS_RX_IRQ_INFO_ENTER_SLEEP_MODE = 1U << 1, /** entering sleep mode */ |
| 110 | IA_CSS_RX_IRQ_INFO_EXIT_SLEEP_MODE = 1U << 2, /**< exited sleep mode */ | 110 | IA_CSS_RX_IRQ_INFO_EXIT_SLEEP_MODE = 1U << 2, /** exited sleep mode */ |
| 111 | IA_CSS_RX_IRQ_INFO_ECC_CORRECTED = 1U << 3, /**< ECC corrected */ | 111 | IA_CSS_RX_IRQ_INFO_ECC_CORRECTED = 1U << 3, /** ECC corrected */ |
| 112 | IA_CSS_RX_IRQ_INFO_ERR_SOT = 1U << 4, | 112 | IA_CSS_RX_IRQ_INFO_ERR_SOT = 1U << 4, |
| 113 | /**< Start of transmission */ | 113 | /** Start of transmission */ |
| 114 | IA_CSS_RX_IRQ_INFO_ERR_SOT_SYNC = 1U << 5, /**< SOT sync (??) */ | 114 | IA_CSS_RX_IRQ_INFO_ERR_SOT_SYNC = 1U << 5, /** SOT sync (??) */ |
| 115 | IA_CSS_RX_IRQ_INFO_ERR_CONTROL = 1U << 6, /**< Control (??) */ | 115 | IA_CSS_RX_IRQ_INFO_ERR_CONTROL = 1U << 6, /** Control (??) */ |
| 116 | IA_CSS_RX_IRQ_INFO_ERR_ECC_DOUBLE = 1U << 7, /**< Double ECC */ | 116 | IA_CSS_RX_IRQ_INFO_ERR_ECC_DOUBLE = 1U << 7, /** Double ECC */ |
| 117 | IA_CSS_RX_IRQ_INFO_ERR_CRC = 1U << 8, /**< CRC error */ | 117 | IA_CSS_RX_IRQ_INFO_ERR_CRC = 1U << 8, /** CRC error */ |
| 118 | IA_CSS_RX_IRQ_INFO_ERR_UNKNOWN_ID = 1U << 9, /**< Unknown ID */ | 118 | IA_CSS_RX_IRQ_INFO_ERR_UNKNOWN_ID = 1U << 9, /** Unknown ID */ |
| 119 | IA_CSS_RX_IRQ_INFO_ERR_FRAME_SYNC = 1U << 10,/**< Frame sync error */ | 119 | IA_CSS_RX_IRQ_INFO_ERR_FRAME_SYNC = 1U << 10,/** Frame sync error */ |
| 120 | IA_CSS_RX_IRQ_INFO_ERR_FRAME_DATA = 1U << 11,/**< Frame data error */ | 120 | IA_CSS_RX_IRQ_INFO_ERR_FRAME_DATA = 1U << 11,/** Frame data error */ |
| 121 | IA_CSS_RX_IRQ_INFO_ERR_DATA_TIMEOUT = 1U << 12,/**< Timeout occurred */ | 121 | IA_CSS_RX_IRQ_INFO_ERR_DATA_TIMEOUT = 1U << 12,/** Timeout occurred */ |
| 122 | IA_CSS_RX_IRQ_INFO_ERR_UNKNOWN_ESC = 1U << 13,/**< Unknown escape seq. */ | 122 | IA_CSS_RX_IRQ_INFO_ERR_UNKNOWN_ESC = 1U << 13,/** Unknown escape seq. */ |
| 123 | IA_CSS_RX_IRQ_INFO_ERR_LINE_SYNC = 1U << 14,/**< Line Sync error */ | 123 | IA_CSS_RX_IRQ_INFO_ERR_LINE_SYNC = 1U << 14,/** Line Sync error */ |
| 124 | IA_CSS_RX_IRQ_INFO_INIT_TIMEOUT = 1U << 15, | 124 | IA_CSS_RX_IRQ_INFO_INIT_TIMEOUT = 1U << 15, |
| 125 | }; | 125 | }; |
| 126 | 126 | ||
| 127 | /** Interrupt info structure. This structure contains information about an | 127 | /* Interrupt info structure. This structure contains information about an |
| 128 | * interrupt. This needs to be used after an interrupt is received on the IA | 128 | * interrupt. This needs to be used after an interrupt is received on the IA |
| 129 | * to perform the correct action. | 129 | * to perform the correct action. |
| 130 | */ | 130 | */ |
| 131 | struct ia_css_irq { | 131 | struct ia_css_irq { |
| 132 | enum ia_css_irq_info type; /**< Interrupt type. */ | 132 | enum ia_css_irq_info type; /** Interrupt type. */ |
| 133 | unsigned int sw_irq_0_val; /**< In case of SW interrupt 0, value. */ | 133 | unsigned int sw_irq_0_val; /** In case of SW interrupt 0, value. */ |
| 134 | unsigned int sw_irq_1_val; /**< In case of SW interrupt 1, value. */ | 134 | unsigned int sw_irq_1_val; /** In case of SW interrupt 1, value. */ |
| 135 | unsigned int sw_irq_2_val; /**< In case of SW interrupt 2, value. */ | 135 | unsigned int sw_irq_2_val; /** In case of SW interrupt 2, value. */ |
| 136 | struct ia_css_pipe *pipe; | 136 | struct ia_css_pipe *pipe; |
| 137 | /**< The image pipe that generated the interrupt. */ | 137 | /** The image pipe that generated the interrupt. */ |
| 138 | }; | 138 | }; |
| 139 | 139 | ||
| 140 | /** @brief Obtain interrupt information. | 140 | /* @brief Obtain interrupt information. |
| 141 | * | 141 | * |
| 142 | * @param[out] info Pointer to the interrupt info. The interrupt | 142 | * @param[out] info Pointer to the interrupt info. The interrupt |
| 143 | * information wil be written to this info. | 143 | * information wil be written to this info. |
| @@ -154,7 +154,7 @@ struct ia_css_irq { | |||
| 154 | enum ia_css_err | 154 | enum ia_css_err |
| 155 | ia_css_irq_translate(unsigned int *info); | 155 | ia_css_irq_translate(unsigned int *info); |
| 156 | 156 | ||
| 157 | /** @brief Get CSI receiver error info. | 157 | /* @brief Get CSI receiver error info. |
| 158 | * | 158 | * |
| 159 | * @param[out] irq_bits Pointer to the interrupt bits. The interrupt | 159 | * @param[out] irq_bits Pointer to the interrupt bits. The interrupt |
| 160 | * bits will be written this info. | 160 | * bits will be written this info. |
| @@ -172,7 +172,7 @@ ia_css_irq_translate(unsigned int *info); | |||
| 172 | void | 172 | void |
| 173 | ia_css_rx_get_irq_info(unsigned int *irq_bits); | 173 | ia_css_rx_get_irq_info(unsigned int *irq_bits); |
| 174 | 174 | ||
| 175 | /** @brief Get CSI receiver error info. | 175 | /* @brief Get CSI receiver error info. |
| 176 | * | 176 | * |
| 177 | * @param[in] port Input port identifier. | 177 | * @param[in] port Input port identifier. |
| 178 | * @param[out] irq_bits Pointer to the interrupt bits. The interrupt | 178 | * @param[out] irq_bits Pointer to the interrupt bits. The interrupt |
| @@ -188,7 +188,7 @@ ia_css_rx_get_irq_info(unsigned int *irq_bits); | |||
| 188 | void | 188 | void |
| 189 | ia_css_rx_port_get_irq_info(enum ia_css_csi2_port port, unsigned int *irq_bits); | 189 | ia_css_rx_port_get_irq_info(enum ia_css_csi2_port port, unsigned int *irq_bits); |
| 190 | 190 | ||
| 191 | /** @brief Clear CSI receiver error info. | 191 | /* @brief Clear CSI receiver error info. |
| 192 | * | 192 | * |
| 193 | * @param[in] irq_bits The bits that should be cleared from the CSI receiver | 193 | * @param[in] irq_bits The bits that should be cleared from the CSI receiver |
| 194 | * interrupt bits register. | 194 | * interrupt bits register. |
| @@ -205,7 +205,7 @@ ia_css_rx_port_get_irq_info(enum ia_css_csi2_port port, unsigned int *irq_bits); | |||
| 205 | void | 205 | void |
| 206 | ia_css_rx_clear_irq_info(unsigned int irq_bits); | 206 | ia_css_rx_clear_irq_info(unsigned int irq_bits); |
| 207 | 207 | ||
| 208 | /** @brief Clear CSI receiver error info. | 208 | /* @brief Clear CSI receiver error info. |
| 209 | * | 209 | * |
| 210 | * @param[in] port Input port identifier. | 210 | * @param[in] port Input port identifier. |
| 211 | * @param[in] irq_bits The bits that should be cleared from the CSI receiver | 211 | * @param[in] irq_bits The bits that should be cleared from the CSI receiver |
| @@ -220,7 +220,7 @@ ia_css_rx_clear_irq_info(unsigned int irq_bits); | |||
| 220 | void | 220 | void |
| 221 | ia_css_rx_port_clear_irq_info(enum ia_css_csi2_port port, unsigned int irq_bits); | 221 | ia_css_rx_port_clear_irq_info(enum ia_css_csi2_port port, unsigned int irq_bits); |
| 222 | 222 | ||
| 223 | /** @brief Enable or disable specific interrupts. | 223 | /* @brief Enable or disable specific interrupts. |
| 224 | * | 224 | * |
| 225 | * @param[in] type The interrupt type that will be enabled/disabled. | 225 | * @param[in] type The interrupt type that will be enabled/disabled. |
| 226 | * @param[in] enable enable or disable. | 226 | * @param[in] enable enable or disable. |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_metadata.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_metadata.h index c40c5a19bfe1..8b674c98224c 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_metadata.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_metadata.h | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | #ifndef __IA_CSS_METADATA_H | 15 | #ifndef __IA_CSS_METADATA_H |
| 16 | #define __IA_CSS_METADATA_H | 16 | #define __IA_CSS_METADATA_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * This file contains structure for processing sensor metadata. | 19 | * This file contains structure for processing sensor metadata. |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| @@ -23,32 +23,32 @@ | |||
| 23 | #include "ia_css_types.h" | 23 | #include "ia_css_types.h" |
| 24 | #include "ia_css_stream_format.h" | 24 | #include "ia_css_stream_format.h" |
| 25 | 25 | ||
| 26 | /** Metadata configuration. This data structure contains necessary info | 26 | /* Metadata configuration. This data structure contains necessary info |
| 27 | * to process sensor metadata. | 27 | * to process sensor metadata. |
| 28 | */ | 28 | */ |
| 29 | struct ia_css_metadata_config { | 29 | struct ia_css_metadata_config { |
| 30 | enum ia_css_stream_format data_type; /**< Data type of CSI-2 embedded | 30 | enum ia_css_stream_format data_type; /** Data type of CSI-2 embedded |
| 31 | data. The default value is IA_CSS_STREAM_FORMAT_EMBEDDED. For | 31 | data. The default value is IA_CSS_STREAM_FORMAT_EMBEDDED. For |
| 32 | certain sensors, user can choose non-default data type for embedded | 32 | certain sensors, user can choose non-default data type for embedded |
| 33 | data. */ | 33 | data. */ |
| 34 | struct ia_css_resolution resolution; /**< Resolution */ | 34 | struct ia_css_resolution resolution; /** Resolution */ |
| 35 | }; | 35 | }; |
| 36 | 36 | ||
| 37 | struct ia_css_metadata_info { | 37 | struct ia_css_metadata_info { |
| 38 | struct ia_css_resolution resolution; /**< Resolution */ | 38 | struct ia_css_resolution resolution; /** Resolution */ |
| 39 | uint32_t stride; /**< Stride in bytes */ | 39 | uint32_t stride; /** Stride in bytes */ |
| 40 | uint32_t size; /**< Total size in bytes */ | 40 | uint32_t size; /** Total size in bytes */ |
| 41 | }; | 41 | }; |
| 42 | 42 | ||
| 43 | struct ia_css_metadata { | 43 | struct ia_css_metadata { |
| 44 | struct ia_css_metadata_info info; /**< Layout info */ | 44 | struct ia_css_metadata_info info; /** Layout info */ |
| 45 | ia_css_ptr address; /**< CSS virtual address */ | 45 | ia_css_ptr address; /** CSS virtual address */ |
| 46 | uint32_t exp_id; | 46 | uint32_t exp_id; |
| 47 | /**< Exposure ID, see ia_css_event_public.h for more detail */ | 47 | /** Exposure ID, see ia_css_event_public.h for more detail */ |
| 48 | }; | 48 | }; |
| 49 | #define SIZE_OF_IA_CSS_METADATA_STRUCT sizeof(struct ia_css_metadata) | 49 | #define SIZE_OF_IA_CSS_METADATA_STRUCT sizeof(struct ia_css_metadata) |
| 50 | 50 | ||
| 51 | /** @brief Allocate a metadata buffer. | 51 | /* @brief Allocate a metadata buffer. |
| 52 | * @param[in] metadata_info Metadata info struct, contains details on metadata buffers. | 52 | * @param[in] metadata_info Metadata info struct, contains details on metadata buffers. |
| 53 | * @return Pointer of metadata buffer or NULL (if error) | 53 | * @return Pointer of metadata buffer or NULL (if error) |
| 54 | * | 54 | * |
| @@ -58,7 +58,7 @@ struct ia_css_metadata { | |||
| 58 | struct ia_css_metadata * | 58 | struct ia_css_metadata * |
| 59 | ia_css_metadata_allocate(const struct ia_css_metadata_info *metadata_info); | 59 | ia_css_metadata_allocate(const struct ia_css_metadata_info *metadata_info); |
| 60 | 60 | ||
| 61 | /** @brief Free a metadata buffer. | 61 | /* @brief Free a metadata buffer. |
| 62 | * | 62 | * |
| 63 | * @param[in] metadata Pointer of metadata buffer. | 63 | * @param[in] metadata Pointer of metadata buffer. |
| 64 | * @return None | 64 | * @return None |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_mipi.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_mipi.h index fd2c01b60b28..f9c9cd76be97 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_mipi.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_mipi.h | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | #ifndef __IA_CSS_MIPI_H | 15 | #ifndef __IA_CSS_MIPI_H |
| 16 | #define __IA_CSS_MIPI_H | 16 | #define __IA_CSS_MIPI_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * This file contains MIPI support functionality | 19 | * This file contains MIPI support functionality |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| @@ -24,10 +24,10 @@ | |||
| 24 | #include "ia_css_stream_format.h" | 24 | #include "ia_css_stream_format.h" |
| 25 | #include "ia_css_input_port.h" | 25 | #include "ia_css_input_port.h" |
| 26 | 26 | ||
| 27 | /** Backward compatible for CSS API 2.0 only | 27 | /* Backward compatible for CSS API 2.0 only |
| 28 | * TO BE REMOVED when all drivers move to CSS API 2.1. | 28 | * TO BE REMOVED when all drivers move to CSS API 2.1. |
| 29 | */ | 29 | */ |
| 30 | /** @brief Specify a CSS MIPI frame buffer. | 30 | /* @brief Specify a CSS MIPI frame buffer. |
| 31 | * | 31 | * |
| 32 | * @param[in] size_mem_words The frame size in memory words (32B). | 32 | * @param[in] size_mem_words The frame size in memory words (32B). |
| 33 | * @param[in] contiguous Allocate memory physically contiguously or not. | 33 | * @param[in] contiguous Allocate memory physically contiguously or not. |
| @@ -42,7 +42,7 @@ ia_css_mipi_frame_specify(const unsigned int size_mem_words, | |||
| 42 | const bool contiguous); | 42 | const bool contiguous); |
| 43 | 43 | ||
| 44 | #if !defined(HAS_NO_INPUT_SYSTEM) | 44 | #if !defined(HAS_NO_INPUT_SYSTEM) |
| 45 | /** @brief Register size of a CSS MIPI frame for check during capturing. | 45 | /* @brief Register size of a CSS MIPI frame for check during capturing. |
| 46 | * | 46 | * |
| 47 | * @param[in] port CSI-2 port this check is registered. | 47 | * @param[in] port CSI-2 port this check is registered. |
| 48 | * @param[in] size_mem_words The frame size in memory words (32B). | 48 | * @param[in] size_mem_words The frame size in memory words (32B). |
| @@ -59,7 +59,7 @@ ia_css_mipi_frame_enable_check_on_size(const enum ia_css_csi2_port port, | |||
| 59 | const unsigned int size_mem_words); | 59 | const unsigned int size_mem_words); |
| 60 | #endif | 60 | #endif |
| 61 | 61 | ||
| 62 | /** @brief Calculate the size of a mipi frame. | 62 | /* @brief Calculate the size of a mipi frame. |
| 63 | * | 63 | * |
| 64 | * @param[in] width The width (in pixels) of the frame. | 64 | * @param[in] width The width (in pixels) of the frame. |
| 65 | * @param[in] height The height (in lines) of the frame. | 65 | * @param[in] height The height (in lines) of the frame. |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_mmu.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_mmu.h index 48f8855d61f6..13c21056bfbf 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_mmu.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_mmu.h | |||
| @@ -15,11 +15,11 @@ | |||
| 15 | #ifndef __IA_CSS_MMU_H | 15 | #ifndef __IA_CSS_MMU_H |
| 16 | #define __IA_CSS_MMU_H | 16 | #define __IA_CSS_MMU_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * This file contains one support function for invalidating the CSS MMU cache | 19 | * This file contains one support function for invalidating the CSS MMU cache |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | /** @brief Invalidate the MMU internal cache. | 22 | /* @brief Invalidate the MMU internal cache. |
| 23 | * @return None | 23 | * @return None |
| 24 | * | 24 | * |
| 25 | * This function triggers an invalidation of the translate-look-aside | 25 | * This function triggers an invalidation of the translate-look-aside |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_morph.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_morph.h index 969840da52b2..de409638d009 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_morph.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_morph.h | |||
| @@ -15,13 +15,13 @@ | |||
| 15 | #ifndef __IA_CSS_MORPH_H | 15 | #ifndef __IA_CSS_MORPH_H |
| 16 | #define __IA_CSS_MORPH_H | 16 | #define __IA_CSS_MORPH_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * This file contains supporting for morphing table | 19 | * This file contains supporting for morphing table |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | #include <ia_css_types.h> | 22 | #include <ia_css_types.h> |
| 23 | 23 | ||
| 24 | /** @brief Morphing table | 24 | /* @brief Morphing table |
| 25 | * @param[in] width Width of the morphing table. | 25 | * @param[in] width Width of the morphing table. |
| 26 | * @param[in] height Height of the morphing table. | 26 | * @param[in] height Height of the morphing table. |
| 27 | * @return Pointer to the morphing table | 27 | * @return Pointer to the morphing table |
| @@ -29,7 +29,7 @@ | |||
| 29 | struct ia_css_morph_table * | 29 | struct ia_css_morph_table * |
| 30 | ia_css_morph_table_allocate(unsigned int width, unsigned int height); | 30 | ia_css_morph_table_allocate(unsigned int width, unsigned int height); |
| 31 | 31 | ||
| 32 | /** @brief Free the morph table | 32 | /* @brief Free the morph table |
| 33 | * @param[in] me Pointer to the morph table. | 33 | * @param[in] me Pointer to the morph table. |
| 34 | * @return None | 34 | * @return None |
| 35 | */ | 35 | */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_pipe_public.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_pipe_public.h index 733e0ef3afe8..df0aad9a6ab9 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_pipe_public.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_pipe_public.h | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | #ifndef __IA_CSS_PIPE_PUBLIC_H | 15 | #ifndef __IA_CSS_PIPE_PUBLIC_H |
| 16 | #define __IA_CSS_PIPE_PUBLIC_H | 16 | #define __IA_CSS_PIPE_PUBLIC_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * This file contains the public interface for CSS pipes. | 19 | * This file contains the public interface for CSS pipes. |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| @@ -34,7 +34,7 @@ enum { | |||
| 34 | IA_CSS_PIPE_MAX_OUTPUT_STAGE, | 34 | IA_CSS_PIPE_MAX_OUTPUT_STAGE, |
| 35 | }; | 35 | }; |
| 36 | 36 | ||
| 37 | /** Enumeration of pipe modes. This mode can be used to create | 37 | /* Enumeration of pipe modes. This mode can be used to create |
| 38 | * an image pipe for this mode. These pipes can be combined | 38 | * an image pipe for this mode. These pipes can be combined |
| 39 | * to configure and run streams on the ISP. | 39 | * to configure and run streams on the ISP. |
| 40 | * | 40 | * |
| @@ -42,12 +42,12 @@ enum { | |||
| 42 | * create a continuous capture stream. | 42 | * create a continuous capture stream. |
| 43 | */ | 43 | */ |
| 44 | enum ia_css_pipe_mode { | 44 | enum ia_css_pipe_mode { |
| 45 | IA_CSS_PIPE_MODE_PREVIEW, /**< Preview pipe */ | 45 | IA_CSS_PIPE_MODE_PREVIEW, /** Preview pipe */ |
| 46 | IA_CSS_PIPE_MODE_VIDEO, /**< Video pipe */ | 46 | IA_CSS_PIPE_MODE_VIDEO, /** Video pipe */ |
| 47 | IA_CSS_PIPE_MODE_CAPTURE, /**< Still capture pipe */ | 47 | IA_CSS_PIPE_MODE_CAPTURE, /** Still capture pipe */ |
| 48 | IA_CSS_PIPE_MODE_ACC, /**< Accelerated pipe */ | 48 | IA_CSS_PIPE_MODE_ACC, /** Accelerated pipe */ |
| 49 | IA_CSS_PIPE_MODE_COPY, /**< Copy pipe, only used for embedded/image data copying */ | 49 | IA_CSS_PIPE_MODE_COPY, /** Copy pipe, only used for embedded/image data copying */ |
| 50 | IA_CSS_PIPE_MODE_YUVPP, /**< YUV post processing pipe, used for all use cases with YUV input, | 50 | IA_CSS_PIPE_MODE_YUVPP, /** YUV post processing pipe, used for all use cases with YUV input, |
| 51 | for SoC sensor and external ISP */ | 51 | for SoC sensor and external ISP */ |
| 52 | }; | 52 | }; |
| 53 | /* Temporary define */ | 53 | /* Temporary define */ |
| @@ -58,10 +58,10 @@ enum ia_css_pipe_mode { | |||
| 58 | * the order should match with definition in sh_css_defs.h | 58 | * the order should match with definition in sh_css_defs.h |
| 59 | */ | 59 | */ |
| 60 | enum ia_css_pipe_version { | 60 | enum ia_css_pipe_version { |
| 61 | IA_CSS_PIPE_VERSION_1 = 1, /**< ISP1.0 pipe */ | 61 | IA_CSS_PIPE_VERSION_1 = 1, /** ISP1.0 pipe */ |
| 62 | IA_CSS_PIPE_VERSION_2_2 = 2, /**< ISP2.2 pipe */ | 62 | IA_CSS_PIPE_VERSION_2_2 = 2, /** ISP2.2 pipe */ |
| 63 | IA_CSS_PIPE_VERSION_2_6_1 = 3, /**< ISP2.6.1 pipe */ | 63 | IA_CSS_PIPE_VERSION_2_6_1 = 3, /** ISP2.6.1 pipe */ |
| 64 | IA_CSS_PIPE_VERSION_2_7 = 4 /**< ISP2.7 pipe */ | 64 | IA_CSS_PIPE_VERSION_2_7 = 4 /** ISP2.7 pipe */ |
| 65 | }; | 65 | }; |
| 66 | 66 | ||
| 67 | /** | 67 | /** |
| @@ -71,79 +71,79 @@ enum ia_css_pipe_version { | |||
| 71 | */ | 71 | */ |
| 72 | struct ia_css_pipe_config { | 72 | struct ia_css_pipe_config { |
| 73 | enum ia_css_pipe_mode mode; | 73 | enum ia_css_pipe_mode mode; |
| 74 | /**< mode, indicates which mode the pipe should use. */ | 74 | /** mode, indicates which mode the pipe should use. */ |
| 75 | enum ia_css_pipe_version isp_pipe_version; | 75 | enum ia_css_pipe_version isp_pipe_version; |
| 76 | /**< pipe version, indicates which imaging pipeline the pipe should use. */ | 76 | /** pipe version, indicates which imaging pipeline the pipe should use. */ |
| 77 | struct ia_css_resolution input_effective_res; | 77 | struct ia_css_resolution input_effective_res; |
| 78 | /**< input effective resolution */ | 78 | /** input effective resolution */ |
| 79 | struct ia_css_resolution bayer_ds_out_res; | 79 | struct ia_css_resolution bayer_ds_out_res; |
| 80 | /**< bayer down scaling */ | 80 | /** bayer down scaling */ |
| 81 | struct ia_css_resolution capt_pp_in_res; | 81 | struct ia_css_resolution capt_pp_in_res; |
| 82 | #ifndef ISP2401 | 82 | #ifndef ISP2401 |
| 83 | /**< bayer down scaling */ | 83 | /** bayer down scaling */ |
| 84 | #else | 84 | #else |
| 85 | /**< capture post processing input resolution */ | 85 | /** capture post processing input resolution */ |
| 86 | #endif | 86 | #endif |
| 87 | struct ia_css_resolution vf_pp_in_res; | 87 | struct ia_css_resolution vf_pp_in_res; |
| 88 | #ifndef ISP2401 | 88 | #ifndef ISP2401 |
| 89 | /**< bayer down scaling */ | 89 | /** bayer down scaling */ |
| 90 | #else | 90 | #else |
| 91 | /**< view finder post processing input resolution */ | 91 | /** view finder post processing input resolution */ |
| 92 | struct ia_css_resolution output_system_in_res; | 92 | struct ia_css_resolution output_system_in_res; |
| 93 | /**< For IPU3 only: use output_system_in_res to specify what input resolution | 93 | /** For IPU3 only: use output_system_in_res to specify what input resolution |
| 94 | will OSYS receive, this resolution is equal to the output resolution of GDC | 94 | will OSYS receive, this resolution is equal to the output resolution of GDC |
| 95 | if not determined CSS will set output_system_in_res with main osys output pin resolution | 95 | if not determined CSS will set output_system_in_res with main osys output pin resolution |
| 96 | All other IPUs may ignore this property */ | 96 | All other IPUs may ignore this property */ |
| 97 | #endif | 97 | #endif |
| 98 | struct ia_css_resolution dvs_crop_out_res; | 98 | struct ia_css_resolution dvs_crop_out_res; |
| 99 | /**< dvs crop, video only, not in use yet. Use dvs_envelope below. */ | 99 | /** dvs crop, video only, not in use yet. Use dvs_envelope below. */ |
| 100 | struct ia_css_frame_info output_info[IA_CSS_PIPE_MAX_OUTPUT_STAGE]; | 100 | struct ia_css_frame_info output_info[IA_CSS_PIPE_MAX_OUTPUT_STAGE]; |
| 101 | /**< output of YUV scaling */ | 101 | /** output of YUV scaling */ |
| 102 | struct ia_css_frame_info vf_output_info[IA_CSS_PIPE_MAX_OUTPUT_STAGE]; | 102 | struct ia_css_frame_info vf_output_info[IA_CSS_PIPE_MAX_OUTPUT_STAGE]; |
| 103 | /**< output of VF YUV scaling */ | 103 | /** output of VF YUV scaling */ |
| 104 | struct ia_css_fw_info *acc_extension; | 104 | struct ia_css_fw_info *acc_extension; |
| 105 | /**< Pipeline extension accelerator */ | 105 | /** Pipeline extension accelerator */ |
| 106 | struct ia_css_fw_info **acc_stages; | 106 | struct ia_css_fw_info **acc_stages; |
| 107 | /**< Standalone accelerator stages */ | 107 | /** Standalone accelerator stages */ |
| 108 | uint32_t num_acc_stages; | 108 | uint32_t num_acc_stages; |
| 109 | /**< Number of standalone accelerator stages */ | 109 | /** Number of standalone accelerator stages */ |
| 110 | struct ia_css_capture_config default_capture_config; | 110 | struct ia_css_capture_config default_capture_config; |
| 111 | /**< Default capture config for initial capture pipe configuration. */ | 111 | /** Default capture config for initial capture pipe configuration. */ |
| 112 | struct ia_css_resolution dvs_envelope; /**< temporary */ | 112 | struct ia_css_resolution dvs_envelope; /** temporary */ |
| 113 | enum ia_css_frame_delay dvs_frame_delay; | 113 | enum ia_css_frame_delay dvs_frame_delay; |
| 114 | /**< indicates the DVS loop delay in frame periods */ | 114 | /** indicates the DVS loop delay in frame periods */ |
| 115 | int acc_num_execs; | 115 | int acc_num_execs; |
| 116 | /**< For acceleration pipes only: determine how many times the pipe | 116 | /** For acceleration pipes only: determine how many times the pipe |
| 117 | should be run. Setting this to -1 means it will run until | 117 | should be run. Setting this to -1 means it will run until |
| 118 | stopped. */ | 118 | stopped. */ |
| 119 | bool enable_dz; | 119 | bool enable_dz; |
| 120 | /**< Disabling digital zoom for a pipeline, if this is set to false, | 120 | /** Disabling digital zoom for a pipeline, if this is set to false, |
| 121 | then setting a zoom factor will have no effect. | 121 | then setting a zoom factor will have no effect. |
| 122 | In some use cases this provides better performance. */ | 122 | In some use cases this provides better performance. */ |
| 123 | bool enable_dpc; | 123 | bool enable_dpc; |
| 124 | /**< Disabling "Defect Pixel Correction" for a pipeline, if this is set | 124 | /** Disabling "Defect Pixel Correction" for a pipeline, if this is set |
| 125 | to false. In some use cases this provides better performance. */ | 125 | to false. In some use cases this provides better performance. */ |
| 126 | bool enable_vfpp_bci; | 126 | bool enable_vfpp_bci; |
| 127 | /**< Enabling BCI mode will cause yuv_scale binary to be picked up | 127 | /** Enabling BCI mode will cause yuv_scale binary to be picked up |
| 128 | instead of vf_pp. This only applies to viewfinder post | 128 | instead of vf_pp. This only applies to viewfinder post |
| 129 | processing stages. */ | 129 | processing stages. */ |
| 130 | #ifdef ISP2401 | 130 | #ifdef ISP2401 |
| 131 | bool enable_luma_only; | 131 | bool enable_luma_only; |
| 132 | /**< Enabling of monochrome mode for a pipeline. If enabled only luma processing | 132 | /** Enabling of monochrome mode for a pipeline. If enabled only luma processing |
| 133 | will be done. */ | 133 | will be done. */ |
| 134 | bool enable_tnr; | 134 | bool enable_tnr; |
| 135 | /**< Enabling of TNR (temporal noise reduction). This is only applicable to video | 135 | /** Enabling of TNR (temporal noise reduction). This is only applicable to video |
| 136 | pipes. Non video-pipes should always set this parameter to false. */ | 136 | pipes. Non video-pipes should always set this parameter to false. */ |
| 137 | #endif | 137 | #endif |
| 138 | struct ia_css_isp_config *p_isp_config; | 138 | struct ia_css_isp_config *p_isp_config; |
| 139 | /**< Pointer to ISP configuration */ | 139 | /** Pointer to ISP configuration */ |
| 140 | struct ia_css_resolution gdc_in_buffer_res; | 140 | struct ia_css_resolution gdc_in_buffer_res; |
| 141 | /**< GDC in buffer resolution. */ | 141 | /** GDC in buffer resolution. */ |
| 142 | struct ia_css_point gdc_in_buffer_offset; | 142 | struct ia_css_point gdc_in_buffer_offset; |
| 143 | /**< GDC in buffer offset - indicates the pixel coordinates of the first valid pixel inside the buffer */ | 143 | /** GDC in buffer offset - indicates the pixel coordinates of the first valid pixel inside the buffer */ |
| 144 | #ifdef ISP2401 | 144 | #ifdef ISP2401 |
| 145 | struct ia_css_coordinate internal_frame_origin_bqs_on_sctbl; | 145 | struct ia_css_coordinate internal_frame_origin_bqs_on_sctbl; |
| 146 | /**< Origin of internal frame positioned on shading table at shading correction in ISP. | 146 | /** Origin of internal frame positioned on shading table at shading correction in ISP. |
| 147 | NOTE: Shading table is larger than or equal to internal frame. | 147 | NOTE: Shading table is larger than or equal to internal frame. |
| 148 | Shading table has shading gains and internal frame has bayer data. | 148 | Shading table has shading gains and internal frame has bayer data. |
| 149 | The origin of internal frame is used in shading correction in ISP | 149 | The origin of internal frame is used in shading correction in ISP |
| @@ -228,20 +228,20 @@ struct ia_css_pipe_config { | |||
| 228 | 228 | ||
| 229 | #endif | 229 | #endif |
| 230 | 230 | ||
| 231 | /** Pipe info, this struct describes properties of a pipe after it's stream has | 231 | /* Pipe info, this struct describes properties of a pipe after it's stream has |
| 232 | * been created. | 232 | * been created. |
| 233 | * ~~~** DO NOT ADD NEW FIELD **~~~ This structure will be deprecated. | 233 | * ~~~** DO NOT ADD NEW FIELD **~~~ This structure will be deprecated. |
| 234 | * - On the Behalf of CSS-API Committee. | 234 | * - On the Behalf of CSS-API Committee. |
| 235 | */ | 235 | */ |
| 236 | struct ia_css_pipe_info { | 236 | struct ia_css_pipe_info { |
| 237 | struct ia_css_frame_info output_info[IA_CSS_PIPE_MAX_OUTPUT_STAGE]; | 237 | struct ia_css_frame_info output_info[IA_CSS_PIPE_MAX_OUTPUT_STAGE]; |
| 238 | /**< Info about output resolution. This contains the stride which | 238 | /** Info about output resolution. This contains the stride which |
| 239 | should be used for memory allocation. */ | 239 | should be used for memory allocation. */ |
| 240 | struct ia_css_frame_info vf_output_info[IA_CSS_PIPE_MAX_OUTPUT_STAGE]; | 240 | struct ia_css_frame_info vf_output_info[IA_CSS_PIPE_MAX_OUTPUT_STAGE]; |
| 241 | /**< Info about viewfinder output resolution (optional). This contains | 241 | /** Info about viewfinder output resolution (optional). This contains |
| 242 | the stride that should be used for memory allocation. */ | 242 | the stride that should be used for memory allocation. */ |
| 243 | struct ia_css_frame_info raw_output_info; | 243 | struct ia_css_frame_info raw_output_info; |
| 244 | /**< Raw output resolution. This indicates the resolution of the | 244 | /** Raw output resolution. This indicates the resolution of the |
| 245 | RAW bayer output for pipes that support this. Currently, only the | 245 | RAW bayer output for pipes that support this. Currently, only the |
| 246 | still capture pipes support this feature. When this resolution is | 246 | still capture pipes support this feature. When this resolution is |
| 247 | smaller than the input resolution, cropping will be performed by | 247 | smaller than the input resolution, cropping will be performed by |
| @@ -252,17 +252,17 @@ struct ia_css_pipe_info { | |||
| 252 | the input resolution - 8x8. */ | 252 | the input resolution - 8x8. */ |
| 253 | #ifdef ISP2401 | 253 | #ifdef ISP2401 |
| 254 | struct ia_css_resolution output_system_in_res_info; | 254 | struct ia_css_resolution output_system_in_res_info; |
| 255 | /**< For IPU3 only. Info about output system in resolution which is considered | 255 | /** For IPU3 only. Info about output system in resolution which is considered |
| 256 | as gdc out resolution. */ | 256 | as gdc out resolution. */ |
| 257 | #endif | 257 | #endif |
| 258 | struct ia_css_shading_info shading_info; | 258 | struct ia_css_shading_info shading_info; |
| 259 | /**< After an image pipe is created, this field will contain the info | 259 | /** After an image pipe is created, this field will contain the info |
| 260 | for the shading correction. */ | 260 | for the shading correction. */ |
| 261 | struct ia_css_grid_info grid_info; | 261 | struct ia_css_grid_info grid_info; |
| 262 | /**< After an image pipe is created, this field will contain the grid | 262 | /** After an image pipe is created, this field will contain the grid |
| 263 | info for 3A and DVS. */ | 263 | info for 3A and DVS. */ |
| 264 | int num_invalid_frames; | 264 | int num_invalid_frames; |
| 265 | /**< The very first frames in a started stream do not contain valid data. | 265 | /** The very first frames in a started stream do not contain valid data. |
| 266 | In this field, the CSS-firmware communicates to the host-driver how | 266 | In this field, the CSS-firmware communicates to the host-driver how |
| 267 | many initial frames will contain invalid data; this allows the | 267 | many initial frames will contain invalid data; this allows the |
| 268 | host-driver to discard those initial invalid frames and start it's | 268 | host-driver to discard those initial invalid frames and start it's |
| @@ -299,7 +299,7 @@ struct ia_css_pipe_info { | |||
| 299 | 299 | ||
| 300 | #endif | 300 | #endif |
| 301 | 301 | ||
| 302 | /** @brief Load default pipe configuration | 302 | /* @brief Load default pipe configuration |
| 303 | * @param[out] pipe_config The pipe configuration. | 303 | * @param[out] pipe_config The pipe configuration. |
| 304 | * @return None | 304 | * @return None |
| 305 | * | 305 | * |
| @@ -334,7 +334,7 @@ struct ia_css_pipe_info { | |||
| 334 | */ | 334 | */ |
| 335 | void ia_css_pipe_config_defaults(struct ia_css_pipe_config *pipe_config); | 335 | void ia_css_pipe_config_defaults(struct ia_css_pipe_config *pipe_config); |
| 336 | 336 | ||
| 337 | /** @brief Create a pipe | 337 | /* @brief Create a pipe |
| 338 | * @param[in] config The pipe configuration. | 338 | * @param[in] config The pipe configuration. |
| 339 | * @param[out] pipe The pipe. | 339 | * @param[out] pipe The pipe. |
| 340 | * @return IA_CSS_SUCCESS or the error code. | 340 | * @return IA_CSS_SUCCESS or the error code. |
| @@ -346,7 +346,7 @@ enum ia_css_err | |||
| 346 | ia_css_pipe_create(const struct ia_css_pipe_config *config, | 346 | ia_css_pipe_create(const struct ia_css_pipe_config *config, |
| 347 | struct ia_css_pipe **pipe); | 347 | struct ia_css_pipe **pipe); |
| 348 | 348 | ||
| 349 | /** @brief Destroy a pipe | 349 | /* @brief Destroy a pipe |
| 350 | * @param[in] pipe The pipe. | 350 | * @param[in] pipe The pipe. |
| 351 | * @return IA_CSS_SUCCESS or the error code. | 351 | * @return IA_CSS_SUCCESS or the error code. |
| 352 | * | 352 | * |
| @@ -355,7 +355,7 @@ ia_css_pipe_create(const struct ia_css_pipe_config *config, | |||
| 355 | enum ia_css_err | 355 | enum ia_css_err |
| 356 | ia_css_pipe_destroy(struct ia_css_pipe *pipe); | 356 | ia_css_pipe_destroy(struct ia_css_pipe *pipe); |
| 357 | 357 | ||
| 358 | /** @brief Provides information about a pipe | 358 | /* @brief Provides information about a pipe |
| 359 | * @param[in] pipe The pipe. | 359 | * @param[in] pipe The pipe. |
| 360 | * @param[out] pipe_info The pipe information. | 360 | * @param[out] pipe_info The pipe information. |
| 361 | * @return IA_CSS_SUCCESS or IA_CSS_ERR_INVALID_ARGUMENTS. | 361 | * @return IA_CSS_SUCCESS or IA_CSS_ERR_INVALID_ARGUMENTS. |
| @@ -366,7 +366,7 @@ enum ia_css_err | |||
| 366 | ia_css_pipe_get_info(const struct ia_css_pipe *pipe, | 366 | ia_css_pipe_get_info(const struct ia_css_pipe *pipe, |
| 367 | struct ia_css_pipe_info *pipe_info); | 367 | struct ia_css_pipe_info *pipe_info); |
| 368 | 368 | ||
| 369 | /** @brief Configure a pipe with filter coefficients. | 369 | /* @brief Configure a pipe with filter coefficients. |
| 370 | * @param[in] pipe The pipe. | 370 | * @param[in] pipe The pipe. |
| 371 | * @param[in] config The pointer to ISP configuration. | 371 | * @param[in] config The pointer to ISP configuration. |
| 372 | * @return IA_CSS_SUCCESS or error code upon error. | 372 | * @return IA_CSS_SUCCESS or error code upon error. |
| @@ -378,7 +378,7 @@ enum ia_css_err | |||
| 378 | ia_css_pipe_set_isp_config(struct ia_css_pipe *pipe, | 378 | ia_css_pipe_set_isp_config(struct ia_css_pipe *pipe, |
| 379 | struct ia_css_isp_config *config); | 379 | struct ia_css_isp_config *config); |
| 380 | 380 | ||
| 381 | /** @brief Controls when the Event generator raises an IRQ to the Host. | 381 | /* @brief Controls when the Event generator raises an IRQ to the Host. |
| 382 | * | 382 | * |
| 383 | * @param[in] pipe The pipe. | 383 | * @param[in] pipe The pipe. |
| 384 | * @param[in] or_mask Binary or of enum ia_css_event_irq_mask_type. Each pipe | 384 | * @param[in] or_mask Binary or of enum ia_css_event_irq_mask_type. Each pipe |
| @@ -455,7 +455,7 @@ ia_css_pipe_set_irq_mask(struct ia_css_pipe *pipe, | |||
| 455 | unsigned int or_mask, | 455 | unsigned int or_mask, |
| 456 | unsigned int and_mask); | 456 | unsigned int and_mask); |
| 457 | 457 | ||
| 458 | /** @brief Reads the current event IRQ mask from the CSS. | 458 | /* @brief Reads the current event IRQ mask from the CSS. |
| 459 | * | 459 | * |
| 460 | * @param[in] pipe The pipe. | 460 | * @param[in] pipe The pipe. |
| 461 | * @param[out] or_mask Current or_mask. The bits in this mask are a binary or | 461 | * @param[out] or_mask Current or_mask. The bits in this mask are a binary or |
| @@ -476,7 +476,7 @@ ia_css_event_get_irq_mask(const struct ia_css_pipe *pipe, | |||
| 476 | unsigned int *or_mask, | 476 | unsigned int *or_mask, |
| 477 | unsigned int *and_mask); | 477 | unsigned int *and_mask); |
| 478 | 478 | ||
| 479 | /** @brief Queue a buffer for an image pipe. | 479 | /* @brief Queue a buffer for an image pipe. |
| 480 | * | 480 | * |
| 481 | * @param[in] pipe The pipe that will own the buffer. | 481 | * @param[in] pipe The pipe that will own the buffer. |
| 482 | * @param[in] buffer Pointer to the buffer. | 482 | * @param[in] buffer Pointer to the buffer. |
| @@ -498,7 +498,7 @@ enum ia_css_err | |||
| 498 | ia_css_pipe_enqueue_buffer(struct ia_css_pipe *pipe, | 498 | ia_css_pipe_enqueue_buffer(struct ia_css_pipe *pipe, |
| 499 | const struct ia_css_buffer *buffer); | 499 | const struct ia_css_buffer *buffer); |
| 500 | 500 | ||
| 501 | /** @brief Dequeue a buffer from an image pipe. | 501 | /* @brief Dequeue a buffer from an image pipe. |
| 502 | * | 502 | * |
| 503 | * @param[in] pipe The pipeline that the buffer queue belongs to. | 503 | * @param[in] pipe The pipeline that the buffer queue belongs to. |
| 504 | * @param[in,out] buffer The buffer is used to lookup the type which determines | 504 | * @param[in,out] buffer The buffer is used to lookup the type which determines |
| @@ -519,7 +519,7 @@ ia_css_pipe_dequeue_buffer(struct ia_css_pipe *pipe, | |||
| 519 | struct ia_css_buffer *buffer); | 519 | struct ia_css_buffer *buffer); |
| 520 | 520 | ||
| 521 | 521 | ||
| 522 | /** @brief Set the state (Enable or Disable) of the Extension stage in the | 522 | /* @brief Set the state (Enable or Disable) of the Extension stage in the |
| 523 | * given pipe. | 523 | * given pipe. |
| 524 | * @param[in] pipe Pipe handle. | 524 | * @param[in] pipe Pipe handle. |
| 525 | * @param[in] fw_handle Extension firmware Handle (ia_css_fw_info.handle) | 525 | * @param[in] fw_handle Extension firmware Handle (ia_css_fw_info.handle) |
| @@ -546,7 +546,7 @@ ia_css_pipe_set_qos_ext_state (struct ia_css_pipe *pipe, | |||
| 546 | uint32_t fw_handle, | 546 | uint32_t fw_handle, |
| 547 | bool enable); | 547 | bool enable); |
| 548 | 548 | ||
| 549 | /** @brief Get the state (Enable or Disable) of the Extension stage in the | 549 | /* @brief Get the state (Enable or Disable) of the Extension stage in the |
| 550 | * given pipe. | 550 | * given pipe. |
| 551 | * @param[in] pipe Pipe handle. | 551 | * @param[in] pipe Pipe handle. |
| 552 | * @param[in] fw_handle Extension firmware Handle (ia_css_fw_info.handle) | 552 | * @param[in] fw_handle Extension firmware Handle (ia_css_fw_info.handle) |
| @@ -573,7 +573,7 @@ ia_css_pipe_get_qos_ext_state (struct ia_css_pipe *pipe, | |||
| 573 | bool * enable); | 573 | bool * enable); |
| 574 | 574 | ||
| 575 | #ifdef ISP2401 | 575 | #ifdef ISP2401 |
| 576 | /** @brief Update mapped CSS and ISP arguments for QoS pipe during SP runtime. | 576 | /* @brief Update mapped CSS and ISP arguments for QoS pipe during SP runtime. |
| 577 | * @param[in] pipe Pipe handle. | 577 | * @param[in] pipe Pipe handle. |
| 578 | * @param[in] fw_handle Extension firmware Handle (ia_css_fw_info.handle). | 578 | * @param[in] fw_handle Extension firmware Handle (ia_css_fw_info.handle). |
| 579 | * @param[in] css_seg Parameter memory descriptors for CSS segments. | 579 | * @param[in] css_seg Parameter memory descriptors for CSS segments. |
| @@ -595,7 +595,7 @@ ia_css_pipe_update_qos_ext_mapped_arg(struct ia_css_pipe *pipe, uint32_t fw_hand | |||
| 595 | struct ia_css_isp_param_isp_segments *isp_seg); | 595 | struct ia_css_isp_param_isp_segments *isp_seg); |
| 596 | 596 | ||
| 597 | #endif | 597 | #endif |
| 598 | /** @brief Get selected configuration settings | 598 | /* @brief Get selected configuration settings |
| 599 | * @param[in] pipe The pipe. | 599 | * @param[in] pipe The pipe. |
| 600 | * @param[out] config Configuration settings. | 600 | * @param[out] config Configuration settings. |
| 601 | * @return None | 601 | * @return None |
| @@ -604,7 +604,7 @@ void | |||
| 604 | ia_css_pipe_get_isp_config(struct ia_css_pipe *pipe, | 604 | ia_css_pipe_get_isp_config(struct ia_css_pipe *pipe, |
| 605 | struct ia_css_isp_config *config); | 605 | struct ia_css_isp_config *config); |
| 606 | 606 | ||
| 607 | /** @brief Set the scaler lut on this pipe. A copy of lut is made in the inuit | 607 | /* @brief Set the scaler lut on this pipe. A copy of lut is made in the inuit |
| 608 | * address space. So the LUT can be freed by caller. | 608 | * address space. So the LUT can be freed by caller. |
| 609 | * @param[in] pipe Pipe handle. | 609 | * @param[in] pipe Pipe handle. |
| 610 | * @param[in] lut Look up tabel | 610 | * @param[in] lut Look up tabel |
| @@ -623,7 +623,7 @@ ia_css_pipe_get_isp_config(struct ia_css_pipe *pipe, | |||
| 623 | enum ia_css_err | 623 | enum ia_css_err |
| 624 | ia_css_pipe_set_bci_scaler_lut( struct ia_css_pipe *pipe, | 624 | ia_css_pipe_set_bci_scaler_lut( struct ia_css_pipe *pipe, |
| 625 | const void *lut); | 625 | const void *lut); |
| 626 | /** @brief Checking of DVS statistics ability | 626 | /* @brief Checking of DVS statistics ability |
| 627 | * @param[in] pipe_info The pipe info. | 627 | * @param[in] pipe_info The pipe info. |
| 628 | * @return true - has DVS statistics ability | 628 | * @return true - has DVS statistics ability |
| 629 | * false - otherwise | 629 | * false - otherwise |
| @@ -631,7 +631,7 @@ ia_css_pipe_set_bci_scaler_lut( struct ia_css_pipe *pipe, | |||
| 631 | bool ia_css_pipe_has_dvs_stats(struct ia_css_pipe_info *pipe_info); | 631 | bool ia_css_pipe_has_dvs_stats(struct ia_css_pipe_info *pipe_info); |
| 632 | 632 | ||
| 633 | #ifdef ISP2401 | 633 | #ifdef ISP2401 |
| 634 | /** @brief Override the frameformat set on the output pins. | 634 | /* @brief Override the frameformat set on the output pins. |
| 635 | * @param[in] pipe Pipe handle. | 635 | * @param[in] pipe Pipe handle. |
| 636 | * @param[in] output_pin Pin index to set the format on | 636 | * @param[in] output_pin Pin index to set the format on |
| 637 | * 0 - main output pin | 637 | * 0 - main output pin |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_prbs.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_prbs.h index 9b0eeb08ca04..6f24656b6cb4 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_prbs.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_prbs.h | |||
| @@ -15,11 +15,11 @@ | |||
| 15 | #ifndef __IA_CSS_PRBS_H | 15 | #ifndef __IA_CSS_PRBS_H |
| 16 | #define __IA_CSS_PRBS_H | 16 | #define __IA_CSS_PRBS_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * This file contains support for Pseudo Random Bit Sequence (PRBS) inputs | 19 | * This file contains support for Pseudo Random Bit Sequence (PRBS) inputs |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | /** Enumerate the PRBS IDs. | 22 | /* Enumerate the PRBS IDs. |
| 23 | */ | 23 | */ |
| 24 | enum ia_css_prbs_id { | 24 | enum ia_css_prbs_id { |
| 25 | IA_CSS_PRBS_ID0, | 25 | IA_CSS_PRBS_ID0, |
| @@ -44,10 +44,10 @@ enum ia_css_prbs_id { | |||
| 44 | */ | 44 | */ |
| 45 | struct ia_css_prbs_config { | 45 | struct ia_css_prbs_config { |
| 46 | enum ia_css_prbs_id id; | 46 | enum ia_css_prbs_id id; |
| 47 | unsigned int h_blank; /**< horizontal blank */ | 47 | unsigned int h_blank; /** horizontal blank */ |
| 48 | unsigned int v_blank; /**< vertical blank */ | 48 | unsigned int v_blank; /** vertical blank */ |
| 49 | int seed; /**< random seed for the 1st 2-pixel-components/clock */ | 49 | int seed; /** random seed for the 1st 2-pixel-components/clock */ |
| 50 | int seed1; /**< random seed for the 2nd 2-pixel-components/clock */ | 50 | int seed1; /** random seed for the 2nd 2-pixel-components/clock */ |
| 51 | }; | 51 | }; |
| 52 | 52 | ||
| 53 | #endif /* __IA_CSS_PRBS_H */ | 53 | #endif /* __IA_CSS_PRBS_H */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_properties.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_properties.h index 19af4021b24c..9a167306611c 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_properties.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_properties.h | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | #ifndef __IA_CSS_PROPERTIES_H | 15 | #ifndef __IA_CSS_PROPERTIES_H |
| 16 | #define __IA_CSS_PROPERTIES_H | 16 | #define __IA_CSS_PROPERTIES_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * This file contains support for retrieving properties of some hardware the CSS system | 19 | * This file contains support for retrieving properties of some hardware the CSS system |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| @@ -24,12 +24,12 @@ | |||
| 24 | 24 | ||
| 25 | struct ia_css_properties { | 25 | struct ia_css_properties { |
| 26 | int gdc_coord_one; | 26 | int gdc_coord_one; |
| 27 | bool l1_base_is_index; /**< Indicate whether the L1 page base | 27 | bool l1_base_is_index; /** Indicate whether the L1 page base |
| 28 | is a page index or a byte address. */ | 28 | is a page index or a byte address. */ |
| 29 | enum ia_css_vamem_type vamem_type; | 29 | enum ia_css_vamem_type vamem_type; |
| 30 | }; | 30 | }; |
| 31 | 31 | ||
| 32 | /** @brief Get hardware properties | 32 | /* @brief Get hardware properties |
| 33 | * @param[in,out] properties The hardware properties | 33 | * @param[in,out] properties The hardware properties |
| 34 | * @return None | 34 | * @return None |
| 35 | * | 35 | * |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_shading.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_shading.h index cb0f249e98c8..588f53d32b72 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_shading.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_shading.h | |||
| @@ -15,13 +15,13 @@ | |||
| 15 | #ifndef __IA_CSS_SHADING_H | 15 | #ifndef __IA_CSS_SHADING_H |
| 16 | #define __IA_CSS_SHADING_H | 16 | #define __IA_CSS_SHADING_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * This file contains support for setting the shading table for CSS | 19 | * This file contains support for setting the shading table for CSS |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | #include <ia_css_types.h> | 22 | #include <ia_css_types.h> |
| 23 | 23 | ||
| 24 | /** @brief Shading table | 24 | /* @brief Shading table |
| 25 | * @param[in] width Width of the shading table. | 25 | * @param[in] width Width of the shading table. |
| 26 | * @param[in] height Height of the shading table. | 26 | * @param[in] height Height of the shading table. |
| 27 | * @return Pointer to the shading table | 27 | * @return Pointer to the shading table |
| @@ -30,7 +30,7 @@ struct ia_css_shading_table * | |||
| 30 | ia_css_shading_table_alloc(unsigned int width, | 30 | ia_css_shading_table_alloc(unsigned int width, |
| 31 | unsigned int height); | 31 | unsigned int height); |
| 32 | 32 | ||
| 33 | /** @brief Free shading table | 33 | /* @brief Free shading table |
| 34 | * @param[in] table Pointer to the shading table. | 34 | * @param[in] table Pointer to the shading table. |
| 35 | * @return None | 35 | * @return None |
| 36 | */ | 36 | */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_stream.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_stream.h index 453fe4db0133..fb6e8c2ca8bf 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_stream.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_stream.h | |||
| @@ -48,7 +48,7 @@ struct ia_css_stream { | |||
| 48 | bool started; | 48 | bool started; |
| 49 | }; | 49 | }; |
| 50 | 50 | ||
| 51 | /** @brief Get a binary in the stream, which binary has the shading correction. | 51 | /* @brief Get a binary in the stream, which binary has the shading correction. |
| 52 | * | 52 | * |
| 53 | * @param[in] stream: The stream. | 53 | * @param[in] stream: The stream. |
| 54 | * @return The binary which has the shading correction. | 54 | * @return The binary which has the shading correction. |
| @@ -76,7 +76,7 @@ sh_css_invalidate_params(struct ia_css_stream *stream); | |||
| 76 | const struct ia_css_fpn_table * | 76 | const struct ia_css_fpn_table * |
| 77 | ia_css_get_fpn_table(struct ia_css_stream *stream); | 77 | ia_css_get_fpn_table(struct ia_css_stream *stream); |
| 78 | 78 | ||
| 79 | /** @brief Get a pointer to the shading table. | 79 | /* @brief Get a pointer to the shading table. |
| 80 | * | 80 | * |
| 81 | * @param[in] stream: The stream. | 81 | * @param[in] stream: The stream. |
| 82 | * @return The pointer to the shading table. | 82 | * @return The pointer to the shading table. |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_stream_format.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_stream_format.h index ae608a9c9051..f7e9020a86e1 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_stream_format.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_stream_format.h | |||
| @@ -15,74 +15,74 @@ | |||
| 15 | #ifndef __IA_CSS_STREAM_FORMAT_H | 15 | #ifndef __IA_CSS_STREAM_FORMAT_H |
| 16 | #define __IA_CSS_STREAM_FORMAT_H | 16 | #define __IA_CSS_STREAM_FORMAT_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * This file contains formats usable for ISP streaming input | 19 | * This file contains formats usable for ISP streaming input |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | #include <type_support.h> /* bool */ | 22 | #include <type_support.h> /* bool */ |
| 23 | 23 | ||
| 24 | /** The ISP streaming input interface supports the following formats. | 24 | /* The ISP streaming input interface supports the following formats. |
| 25 | * These match the corresponding MIPI formats. | 25 | * These match the corresponding MIPI formats. |
| 26 | */ | 26 | */ |
| 27 | enum ia_css_stream_format { | 27 | enum ia_css_stream_format { |
| 28 | IA_CSS_STREAM_FORMAT_YUV420_8_LEGACY, /**< 8 bits per subpixel */ | 28 | IA_CSS_STREAM_FORMAT_YUV420_8_LEGACY, /** 8 bits per subpixel */ |
| 29 | IA_CSS_STREAM_FORMAT_YUV420_8, /**< 8 bits per subpixel */ | 29 | IA_CSS_STREAM_FORMAT_YUV420_8, /** 8 bits per subpixel */ |
| 30 | IA_CSS_STREAM_FORMAT_YUV420_10, /**< 10 bits per subpixel */ | 30 | IA_CSS_STREAM_FORMAT_YUV420_10, /** 10 bits per subpixel */ |
| 31 | IA_CSS_STREAM_FORMAT_YUV420_16, /**< 16 bits per subpixel */ | 31 | IA_CSS_STREAM_FORMAT_YUV420_16, /** 16 bits per subpixel */ |
| 32 | IA_CSS_STREAM_FORMAT_YUV422_8, /**< UYVY..UYVY, 8 bits per subpixel */ | 32 | IA_CSS_STREAM_FORMAT_YUV422_8, /** UYVY..UYVY, 8 bits per subpixel */ |
| 33 | IA_CSS_STREAM_FORMAT_YUV422_10, /**< UYVY..UYVY, 10 bits per subpixel */ | 33 | IA_CSS_STREAM_FORMAT_YUV422_10, /** UYVY..UYVY, 10 bits per subpixel */ |
| 34 | IA_CSS_STREAM_FORMAT_YUV422_16, /**< UYVY..UYVY, 16 bits per subpixel */ | 34 | IA_CSS_STREAM_FORMAT_YUV422_16, /** UYVY..UYVY, 16 bits per subpixel */ |
| 35 | IA_CSS_STREAM_FORMAT_RGB_444, /**< BGR..BGR, 4 bits per subpixel */ | 35 | IA_CSS_STREAM_FORMAT_RGB_444, /** BGR..BGR, 4 bits per subpixel */ |
| 36 | IA_CSS_STREAM_FORMAT_RGB_555, /**< BGR..BGR, 5 bits per subpixel */ | 36 | IA_CSS_STREAM_FORMAT_RGB_555, /** BGR..BGR, 5 bits per subpixel */ |
| 37 | IA_CSS_STREAM_FORMAT_RGB_565, /**< BGR..BGR, 5 bits B and R, 6 bits G */ | 37 | IA_CSS_STREAM_FORMAT_RGB_565, /** BGR..BGR, 5 bits B and R, 6 bits G */ |
| 38 | IA_CSS_STREAM_FORMAT_RGB_666, /**< BGR..BGR, 6 bits per subpixel */ | 38 | IA_CSS_STREAM_FORMAT_RGB_666, /** BGR..BGR, 6 bits per subpixel */ |
| 39 | IA_CSS_STREAM_FORMAT_RGB_888, /**< BGR..BGR, 8 bits per subpixel */ | 39 | IA_CSS_STREAM_FORMAT_RGB_888, /** BGR..BGR, 8 bits per subpixel */ |
| 40 | IA_CSS_STREAM_FORMAT_RAW_6, /**< RAW data, 6 bits per pixel */ | 40 | IA_CSS_STREAM_FORMAT_RAW_6, /** RAW data, 6 bits per pixel */ |
| 41 | IA_CSS_STREAM_FORMAT_RAW_7, /**< RAW data, 7 bits per pixel */ | 41 | IA_CSS_STREAM_FORMAT_RAW_7, /** RAW data, 7 bits per pixel */ |
| 42 | IA_CSS_STREAM_FORMAT_RAW_8, /**< RAW data, 8 bits per pixel */ | 42 | IA_CSS_STREAM_FORMAT_RAW_8, /** RAW data, 8 bits per pixel */ |
| 43 | IA_CSS_STREAM_FORMAT_RAW_10, /**< RAW data, 10 bits per pixel */ | 43 | IA_CSS_STREAM_FORMAT_RAW_10, /** RAW data, 10 bits per pixel */ |
| 44 | IA_CSS_STREAM_FORMAT_RAW_12, /**< RAW data, 12 bits per pixel */ | 44 | IA_CSS_STREAM_FORMAT_RAW_12, /** RAW data, 12 bits per pixel */ |
| 45 | IA_CSS_STREAM_FORMAT_RAW_14, /**< RAW data, 14 bits per pixel */ | 45 | IA_CSS_STREAM_FORMAT_RAW_14, /** RAW data, 14 bits per pixel */ |
| 46 | IA_CSS_STREAM_FORMAT_RAW_16, /**< RAW data, 16 bits per pixel, which is | 46 | IA_CSS_STREAM_FORMAT_RAW_16, /** RAW data, 16 bits per pixel, which is |
| 47 | not specified in CSI-MIPI standard*/ | 47 | not specified in CSI-MIPI standard*/ |
| 48 | IA_CSS_STREAM_FORMAT_BINARY_8, /**< Binary byte stream, which is target at | 48 | IA_CSS_STREAM_FORMAT_BINARY_8, /** Binary byte stream, which is target at |
| 49 | JPEG. */ | 49 | JPEG. */ |
| 50 | 50 | ||
| 51 | /** CSI2-MIPI specific format: Generic short packet data. It is used to | 51 | /* CSI2-MIPI specific format: Generic short packet data. It is used to |
| 52 | * keep the timing information for the opening/closing of shutters, | 52 | * keep the timing information for the opening/closing of shutters, |
| 53 | * triggering of flashes and etc. | 53 | * triggering of flashes and etc. |
| 54 | */ | 54 | */ |
| 55 | IA_CSS_STREAM_FORMAT_GENERIC_SHORT1, /**< Generic Short Packet Code 1 */ | 55 | IA_CSS_STREAM_FORMAT_GENERIC_SHORT1, /** Generic Short Packet Code 1 */ |
| 56 | IA_CSS_STREAM_FORMAT_GENERIC_SHORT2, /**< Generic Short Packet Code 2 */ | 56 | IA_CSS_STREAM_FORMAT_GENERIC_SHORT2, /** Generic Short Packet Code 2 */ |
| 57 | IA_CSS_STREAM_FORMAT_GENERIC_SHORT3, /**< Generic Short Packet Code 3 */ | 57 | IA_CSS_STREAM_FORMAT_GENERIC_SHORT3, /** Generic Short Packet Code 3 */ |
| 58 | IA_CSS_STREAM_FORMAT_GENERIC_SHORT4, /**< Generic Short Packet Code 4 */ | 58 | IA_CSS_STREAM_FORMAT_GENERIC_SHORT4, /** Generic Short Packet Code 4 */ |
| 59 | IA_CSS_STREAM_FORMAT_GENERIC_SHORT5, /**< Generic Short Packet Code 5 */ | 59 | IA_CSS_STREAM_FORMAT_GENERIC_SHORT5, /** Generic Short Packet Code 5 */ |
| 60 | IA_CSS_STREAM_FORMAT_GENERIC_SHORT6, /**< Generic Short Packet Code 6 */ | 60 | IA_CSS_STREAM_FORMAT_GENERIC_SHORT6, /** Generic Short Packet Code 6 */ |
| 61 | IA_CSS_STREAM_FORMAT_GENERIC_SHORT7, /**< Generic Short Packet Code 7 */ | 61 | IA_CSS_STREAM_FORMAT_GENERIC_SHORT7, /** Generic Short Packet Code 7 */ |
| 62 | IA_CSS_STREAM_FORMAT_GENERIC_SHORT8, /**< Generic Short Packet Code 8 */ | 62 | IA_CSS_STREAM_FORMAT_GENERIC_SHORT8, /** Generic Short Packet Code 8 */ |
| 63 | 63 | ||
| 64 | /** CSI2-MIPI specific format: YUV data. | 64 | /* CSI2-MIPI specific format: YUV data. |
| 65 | */ | 65 | */ |
| 66 | IA_CSS_STREAM_FORMAT_YUV420_8_SHIFT, /**< YUV420 8-bit (Chroma Shifted Pixel Sampling) */ | 66 | IA_CSS_STREAM_FORMAT_YUV420_8_SHIFT, /** YUV420 8-bit (Chroma Shifted Pixel Sampling) */ |
| 67 | IA_CSS_STREAM_FORMAT_YUV420_10_SHIFT, /**< YUV420 8-bit (Chroma Shifted Pixel Sampling) */ | 67 | IA_CSS_STREAM_FORMAT_YUV420_10_SHIFT, /** YUV420 8-bit (Chroma Shifted Pixel Sampling) */ |
| 68 | 68 | ||
| 69 | /** CSI2-MIPI specific format: Generic long packet data | 69 | /* CSI2-MIPI specific format: Generic long packet data |
| 70 | */ | 70 | */ |
| 71 | IA_CSS_STREAM_FORMAT_EMBEDDED, /**< Embedded 8-bit non Image Data */ | 71 | IA_CSS_STREAM_FORMAT_EMBEDDED, /** Embedded 8-bit non Image Data */ |
| 72 | 72 | ||
| 73 | /** CSI2-MIPI specific format: User defined byte-based data. For example, | 73 | /* CSI2-MIPI specific format: User defined byte-based data. For example, |
| 74 | * the data transmitter (e.g. the SoC sensor) can keep the JPEG data as | 74 | * the data transmitter (e.g. the SoC sensor) can keep the JPEG data as |
| 75 | * the User Defined Data Type 4 and the MPEG data as the | 75 | * the User Defined Data Type 4 and the MPEG data as the |
| 76 | * User Defined Data Type 7. | 76 | * User Defined Data Type 7. |
| 77 | */ | 77 | */ |
| 78 | IA_CSS_STREAM_FORMAT_USER_DEF1, /**< User defined 8-bit data type 1 */ | 78 | IA_CSS_STREAM_FORMAT_USER_DEF1, /** User defined 8-bit data type 1 */ |
| 79 | IA_CSS_STREAM_FORMAT_USER_DEF2, /**< User defined 8-bit data type 2 */ | 79 | IA_CSS_STREAM_FORMAT_USER_DEF2, /** User defined 8-bit data type 2 */ |
| 80 | IA_CSS_STREAM_FORMAT_USER_DEF3, /**< User defined 8-bit data type 3 */ | 80 | IA_CSS_STREAM_FORMAT_USER_DEF3, /** User defined 8-bit data type 3 */ |
| 81 | IA_CSS_STREAM_FORMAT_USER_DEF4, /**< User defined 8-bit data type 4 */ | 81 | IA_CSS_STREAM_FORMAT_USER_DEF4, /** User defined 8-bit data type 4 */ |
| 82 | IA_CSS_STREAM_FORMAT_USER_DEF5, /**< User defined 8-bit data type 5 */ | 82 | IA_CSS_STREAM_FORMAT_USER_DEF5, /** User defined 8-bit data type 5 */ |
| 83 | IA_CSS_STREAM_FORMAT_USER_DEF6, /**< User defined 8-bit data type 6 */ | 83 | IA_CSS_STREAM_FORMAT_USER_DEF6, /** User defined 8-bit data type 6 */ |
| 84 | IA_CSS_STREAM_FORMAT_USER_DEF7, /**< User defined 8-bit data type 7 */ | 84 | IA_CSS_STREAM_FORMAT_USER_DEF7, /** User defined 8-bit data type 7 */ |
| 85 | IA_CSS_STREAM_FORMAT_USER_DEF8, /**< User defined 8-bit data type 8 */ | 85 | IA_CSS_STREAM_FORMAT_USER_DEF8, /** User defined 8-bit data type 8 */ |
| 86 | }; | 86 | }; |
| 87 | 87 | ||
| 88 | #define IA_CSS_STREAM_FORMAT_NUM IA_CSS_STREAM_FORMAT_USER_DEF8 | 88 | #define IA_CSS_STREAM_FORMAT_NUM IA_CSS_STREAM_FORMAT_USER_DEF8 |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_stream_public.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_stream_public.h index 2c8d9de10a59..ca3203357ff5 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_stream_public.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_stream_public.h | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | #ifndef __IA_CSS_STREAM_PUBLIC_H | 15 | #ifndef __IA_CSS_STREAM_PUBLIC_H |
| 16 | #define __IA_CSS_STREAM_PUBLIC_H | 16 | #define __IA_CSS_STREAM_PUBLIC_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * This file contains support for configuring and controlling streams | 19 | * This file contains support for configuring and controlling streams |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| @@ -27,26 +27,26 @@ | |||
| 27 | #include "ia_css_prbs.h" | 27 | #include "ia_css_prbs.h" |
| 28 | #include "ia_css_input_port.h" | 28 | #include "ia_css_input_port.h" |
| 29 | 29 | ||
| 30 | /** Input modes, these enumerate all supported input modes. | 30 | /* Input modes, these enumerate all supported input modes. |
| 31 | * Note that not all ISP modes support all input modes. | 31 | * Note that not all ISP modes support all input modes. |
| 32 | */ | 32 | */ |
| 33 | enum ia_css_input_mode { | 33 | enum ia_css_input_mode { |
| 34 | IA_CSS_INPUT_MODE_SENSOR, /**< data from sensor */ | 34 | IA_CSS_INPUT_MODE_SENSOR, /** data from sensor */ |
| 35 | IA_CSS_INPUT_MODE_FIFO, /**< data from input-fifo */ | 35 | IA_CSS_INPUT_MODE_FIFO, /** data from input-fifo */ |
| 36 | IA_CSS_INPUT_MODE_TPG, /**< data from test-pattern generator */ | 36 | IA_CSS_INPUT_MODE_TPG, /** data from test-pattern generator */ |
| 37 | IA_CSS_INPUT_MODE_PRBS, /**< data from pseudo-random bit stream */ | 37 | IA_CSS_INPUT_MODE_PRBS, /** data from pseudo-random bit stream */ |
| 38 | IA_CSS_INPUT_MODE_MEMORY, /**< data from a frame in memory */ | 38 | IA_CSS_INPUT_MODE_MEMORY, /** data from a frame in memory */ |
| 39 | IA_CSS_INPUT_MODE_BUFFERED_SENSOR /**< data is sent through mipi buffer */ | 39 | IA_CSS_INPUT_MODE_BUFFERED_SENSOR /** data is sent through mipi buffer */ |
| 40 | }; | 40 | }; |
| 41 | 41 | ||
| 42 | /** Structure of the MIPI buffer configuration | 42 | /* Structure of the MIPI buffer configuration |
| 43 | */ | 43 | */ |
| 44 | struct ia_css_mipi_buffer_config { | 44 | struct ia_css_mipi_buffer_config { |
| 45 | unsigned int size_mem_words; /**< The frame size in the system memory | 45 | unsigned int size_mem_words; /** The frame size in the system memory |
| 46 | words (32B) */ | 46 | words (32B) */ |
| 47 | bool contiguous; /**< Allocated memory physically | 47 | bool contiguous; /** Allocated memory physically |
| 48 | contiguously or not. \deprecated{Will be false always.}*/ | 48 | contiguously or not. \deprecated{Will be false always.}*/ |
| 49 | unsigned int nof_mipi_buffers; /**< The number of MIPI buffers required for this | 49 | unsigned int nof_mipi_buffers; /** The number of MIPI buffers required for this |
| 50 | stream */ | 50 | stream */ |
| 51 | }; | 51 | }; |
| 52 | 52 | ||
| @@ -57,44 +57,44 @@ enum { | |||
| 57 | IA_CSS_STREAM_MAX_ISYS_STREAM_PER_CH | 57 | IA_CSS_STREAM_MAX_ISYS_STREAM_PER_CH |
| 58 | }; | 58 | }; |
| 59 | 59 | ||
| 60 | /** This is input data configuration for one MIPI data type. We can have | 60 | /* This is input data configuration for one MIPI data type. We can have |
| 61 | * multiple of this in one virtual channel. | 61 | * multiple of this in one virtual channel. |
| 62 | */ | 62 | */ |
| 63 | struct ia_css_stream_isys_stream_config { | 63 | struct ia_css_stream_isys_stream_config { |
| 64 | struct ia_css_resolution input_res; /**< Resolution of input data */ | 64 | struct ia_css_resolution input_res; /** Resolution of input data */ |
| 65 | enum ia_css_stream_format format; /**< Format of input stream. This data | 65 | enum ia_css_stream_format format; /** Format of input stream. This data |
| 66 | format will be mapped to MIPI data | 66 | format will be mapped to MIPI data |
| 67 | type internally. */ | 67 | type internally. */ |
| 68 | int linked_isys_stream_id; /**< default value is -1, other value means | 68 | int linked_isys_stream_id; /** default value is -1, other value means |
| 69 | current isys_stream shares the same buffer with | 69 | current isys_stream shares the same buffer with |
| 70 | indicated isys_stream*/ | 70 | indicated isys_stream*/ |
| 71 | bool valid; /**< indicate whether other fields have valid value */ | 71 | bool valid; /** indicate whether other fields have valid value */ |
| 72 | }; | 72 | }; |
| 73 | 73 | ||
| 74 | struct ia_css_stream_input_config { | 74 | struct ia_css_stream_input_config { |
| 75 | struct ia_css_resolution input_res; /**< Resolution of input data */ | 75 | struct ia_css_resolution input_res; /** Resolution of input data */ |
| 76 | struct ia_css_resolution effective_res; /**< Resolution of input data. | 76 | struct ia_css_resolution effective_res; /** Resolution of input data. |
| 77 | Used for CSS 2400/1 System and deprecated for other | 77 | Used for CSS 2400/1 System and deprecated for other |
| 78 | systems (replaced by input_effective_res in | 78 | systems (replaced by input_effective_res in |
| 79 | ia_css_pipe_config) */ | 79 | ia_css_pipe_config) */ |
| 80 | enum ia_css_stream_format format; /**< Format of input stream. This data | 80 | enum ia_css_stream_format format; /** Format of input stream. This data |
| 81 | format will be mapped to MIPI data | 81 | format will be mapped to MIPI data |
| 82 | type internally. */ | 82 | type internally. */ |
| 83 | enum ia_css_bayer_order bayer_order; /**< Bayer order for RAW streams */ | 83 | enum ia_css_bayer_order bayer_order; /** Bayer order for RAW streams */ |
| 84 | }; | 84 | }; |
| 85 | 85 | ||
| 86 | 86 | ||
| 87 | /** Input stream description. This describes how input will flow into the | 87 | /* Input stream description. This describes how input will flow into the |
| 88 | * CSS. This is used to program the CSS hardware. | 88 | * CSS. This is used to program the CSS hardware. |
| 89 | */ | 89 | */ |
| 90 | struct ia_css_stream_config { | 90 | struct ia_css_stream_config { |
| 91 | enum ia_css_input_mode mode; /**< Input mode */ | 91 | enum ia_css_input_mode mode; /** Input mode */ |
| 92 | union { | 92 | union { |
| 93 | struct ia_css_input_port port; /**< Port, for sensor only. */ | 93 | struct ia_css_input_port port; /** Port, for sensor only. */ |
| 94 | struct ia_css_tpg_config tpg; /**< TPG configuration */ | 94 | struct ia_css_tpg_config tpg; /** TPG configuration */ |
| 95 | struct ia_css_prbs_config prbs; /**< PRBS configuration */ | 95 | struct ia_css_prbs_config prbs; /** PRBS configuration */ |
| 96 | } source; /**< Source of input data */ | 96 | } source; /** Source of input data */ |
| 97 | unsigned int channel_id; /**< Channel on which input data | 97 | unsigned int channel_id; /** Channel on which input data |
| 98 | will arrive. Use this field | 98 | will arrive. Use this field |
| 99 | to specify virtual channel id. | 99 | to specify virtual channel id. |
| 100 | Valid values are: 0, 1, 2, 3 */ | 100 | Valid values are: 0, 1, 2, 3 */ |
| @@ -110,29 +110,29 @@ struct ia_css_stream_config { | |||
| 110 | * and will be deprecated. In the future,all platforms will use the N*N method | 110 | * and will be deprecated. In the future,all platforms will use the N*N method |
| 111 | */ | 111 | */ |
| 112 | #endif | 112 | #endif |
| 113 | unsigned int sensor_binning_factor; /**< Binning factor used by sensor | 113 | unsigned int sensor_binning_factor; /** Binning factor used by sensor |
| 114 | to produce image data. This is | 114 | to produce image data. This is |
| 115 | used for shading correction. */ | 115 | used for shading correction. */ |
| 116 | unsigned int pixels_per_clock; /**< Number of pixels per clock, which can be | 116 | unsigned int pixels_per_clock; /** Number of pixels per clock, which can be |
| 117 | 1, 2 or 4. */ | 117 | 1, 2 or 4. */ |
| 118 | bool online; /**< offline will activate RAW copy on SP, use this for | 118 | bool online; /** offline will activate RAW copy on SP, use this for |
| 119 | continuous capture. */ | 119 | continuous capture. */ |
| 120 | /* ISYS2401 usage: ISP receives data directly from sensor, no copy. */ | 120 | /* ISYS2401 usage: ISP receives data directly from sensor, no copy. */ |
| 121 | unsigned init_num_cont_raw_buf; /**< initial number of raw buffers to | 121 | unsigned init_num_cont_raw_buf; /** initial number of raw buffers to |
| 122 | allocate */ | 122 | allocate */ |
| 123 | unsigned target_num_cont_raw_buf; /**< total number of raw buffers to | 123 | unsigned target_num_cont_raw_buf; /** total number of raw buffers to |
| 124 | allocate */ | 124 | allocate */ |
| 125 | bool pack_raw_pixels; /**< Pack pixels in the raw buffers */ | 125 | bool pack_raw_pixels; /** Pack pixels in the raw buffers */ |
| 126 | bool continuous; /**< Use SP copy feature to continuously capture frames | 126 | bool continuous; /** Use SP copy feature to continuously capture frames |
| 127 | to system memory and run pipes in offline mode */ | 127 | to system memory and run pipes in offline mode */ |
| 128 | bool disable_cont_viewfinder; /**< disable continous viewfinder for ZSL use case */ | 128 | bool disable_cont_viewfinder; /** disable continous viewfinder for ZSL use case */ |
| 129 | int32_t flash_gpio_pin; /**< pin on which the flash is connected, -1 for no flash */ | 129 | int32_t flash_gpio_pin; /** pin on which the flash is connected, -1 for no flash */ |
| 130 | int left_padding; /**< The number of input-formatter left-paddings, -1 for default from binary.*/ | 130 | int left_padding; /** The number of input-formatter left-paddings, -1 for default from binary.*/ |
| 131 | struct ia_css_mipi_buffer_config mipi_buffer_config; /**< mipi buffer configuration */ | 131 | struct ia_css_mipi_buffer_config mipi_buffer_config; /** mipi buffer configuration */ |
| 132 | struct ia_css_metadata_config metadata_config; /**< Metadata configuration. */ | 132 | struct ia_css_metadata_config metadata_config; /** Metadata configuration. */ |
| 133 | bool ia_css_enable_raw_buffer_locking; /**< Enable Raw Buffer Locking for HALv3 Support */ | 133 | bool ia_css_enable_raw_buffer_locking; /** Enable Raw Buffer Locking for HALv3 Support */ |
| 134 | bool lock_all; | 134 | bool lock_all; |
| 135 | /**< Lock all RAW buffers (true) or lock only buffers processed by | 135 | /** Lock all RAW buffers (true) or lock only buffers processed by |
| 136 | video or preview pipe (false). | 136 | video or preview pipe (false). |
| 137 | This setting needs to be enabled to allow raw buffer locking | 137 | This setting needs to be enabled to allow raw buffer locking |
| 138 | without continuous viewfinder. */ | 138 | without continuous viewfinder. */ |
| @@ -140,15 +140,15 @@ struct ia_css_stream_config { | |||
| 140 | 140 | ||
| 141 | struct ia_css_stream; | 141 | struct ia_css_stream; |
| 142 | 142 | ||
| 143 | /** Stream info, this struct describes properties of a stream after it has been | 143 | /* Stream info, this struct describes properties of a stream after it has been |
| 144 | * created. | 144 | * created. |
| 145 | */ | 145 | */ |
| 146 | struct ia_css_stream_info { | 146 | struct ia_css_stream_info { |
| 147 | struct ia_css_metadata_info metadata_info; | 147 | struct ia_css_metadata_info metadata_info; |
| 148 | /**< Info about the metadata layout, this contains the stride. */ | 148 | /** Info about the metadata layout, this contains the stride. */ |
| 149 | }; | 149 | }; |
| 150 | 150 | ||
| 151 | /** @brief Load default stream configuration | 151 | /* @brief Load default stream configuration |
| 152 | * @param[in,out] stream_config The stream configuration. | 152 | * @param[in,out] stream_config The stream configuration. |
| 153 | * @return None | 153 | * @return None |
| 154 | * | 154 | * |
| @@ -165,7 +165,7 @@ void ia_css_stream_config_defaults(struct ia_css_stream_config *stream_config); | |||
| 165 | * create the internal structures and fill in the configuration data and pipes | 165 | * create the internal structures and fill in the configuration data and pipes |
| 166 | */ | 166 | */ |
| 167 | 167 | ||
| 168 | /** @brief Creates a stream | 168 | /* @brief Creates a stream |
| 169 | * @param[in] stream_config The stream configuration. | 169 | * @param[in] stream_config The stream configuration. |
| 170 | * @param[in] num_pipes The number of pipes to incorporate in the stream. | 170 | * @param[in] num_pipes The number of pipes to incorporate in the stream. |
| 171 | * @param[in] pipes The pipes. | 171 | * @param[in] pipes The pipes. |
| @@ -180,7 +180,7 @@ ia_css_stream_create(const struct ia_css_stream_config *stream_config, | |||
| 180 | struct ia_css_pipe *pipes[], | 180 | struct ia_css_pipe *pipes[], |
| 181 | struct ia_css_stream **stream); | 181 | struct ia_css_stream **stream); |
| 182 | 182 | ||
| 183 | /** @brief Destroys a stream | 183 | /* @brief Destroys a stream |
| 184 | * @param[in] stream The stream. | 184 | * @param[in] stream The stream. |
| 185 | * @return IA_CSS_SUCCESS or the error code. | 185 | * @return IA_CSS_SUCCESS or the error code. |
| 186 | * | 186 | * |
| @@ -189,7 +189,7 @@ ia_css_stream_create(const struct ia_css_stream_config *stream_config, | |||
| 189 | enum ia_css_err | 189 | enum ia_css_err |
| 190 | ia_css_stream_destroy(struct ia_css_stream *stream); | 190 | ia_css_stream_destroy(struct ia_css_stream *stream); |
| 191 | 191 | ||
| 192 | /** @brief Provides information about a stream | 192 | /* @brief Provides information about a stream |
| 193 | * @param[in] stream The stream. | 193 | * @param[in] stream The stream. |
| 194 | * @param[out] stream_info The information about the stream. | 194 | * @param[out] stream_info The information about the stream. |
| 195 | * @return IA_CSS_SUCCESS or the error code. | 195 | * @return IA_CSS_SUCCESS or the error code. |
| @@ -200,7 +200,7 @@ enum ia_css_err | |||
| 200 | ia_css_stream_get_info(const struct ia_css_stream *stream, | 200 | ia_css_stream_get_info(const struct ia_css_stream *stream, |
| 201 | struct ia_css_stream_info *stream_info); | 201 | struct ia_css_stream_info *stream_info); |
| 202 | 202 | ||
| 203 | /** @brief load (rebuild) a stream that was unloaded. | 203 | /* @brief load (rebuild) a stream that was unloaded. |
| 204 | * @param[in] stream The stream | 204 | * @param[in] stream The stream |
| 205 | * @return IA_CSS_SUCCESS or the error code | 205 | * @return IA_CSS_SUCCESS or the error code |
| 206 | * | 206 | * |
| @@ -210,7 +210,7 @@ ia_css_stream_get_info(const struct ia_css_stream *stream, | |||
| 210 | enum ia_css_err | 210 | enum ia_css_err |
| 211 | ia_css_stream_load(struct ia_css_stream *stream); | 211 | ia_css_stream_load(struct ia_css_stream *stream); |
| 212 | 212 | ||
| 213 | /** @brief Starts the stream. | 213 | /* @brief Starts the stream. |
| 214 | * @param[in] stream The stream. | 214 | * @param[in] stream The stream. |
| 215 | * @return IA_CSS_SUCCESS or the error code. | 215 | * @return IA_CSS_SUCCESS or the error code. |
| 216 | * | 216 | * |
| @@ -223,7 +223,7 @@ ia_css_stream_load(struct ia_css_stream *stream); | |||
| 223 | enum ia_css_err | 223 | enum ia_css_err |
| 224 | ia_css_stream_start(struct ia_css_stream *stream); | 224 | ia_css_stream_start(struct ia_css_stream *stream); |
| 225 | 225 | ||
| 226 | /** @brief Stop the stream. | 226 | /* @brief Stop the stream. |
| 227 | * @param[in] stream The stream. | 227 | * @param[in] stream The stream. |
| 228 | * @return IA_CSS_SUCCESS or the error code. | 228 | * @return IA_CSS_SUCCESS or the error code. |
| 229 | * | 229 | * |
| @@ -233,7 +233,7 @@ ia_css_stream_start(struct ia_css_stream *stream); | |||
| 233 | enum ia_css_err | 233 | enum ia_css_err |
| 234 | ia_css_stream_stop(struct ia_css_stream *stream); | 234 | ia_css_stream_stop(struct ia_css_stream *stream); |
| 235 | 235 | ||
| 236 | /** @brief Check if a stream has stopped | 236 | /* @brief Check if a stream has stopped |
| 237 | * @param[in] stream The stream. | 237 | * @param[in] stream The stream. |
| 238 | * @return boolean flag | 238 | * @return boolean flag |
| 239 | * | 239 | * |
| @@ -242,7 +242,7 @@ ia_css_stream_stop(struct ia_css_stream *stream); | |||
| 242 | bool | 242 | bool |
| 243 | ia_css_stream_has_stopped(struct ia_css_stream *stream); | 243 | ia_css_stream_has_stopped(struct ia_css_stream *stream); |
| 244 | 244 | ||
| 245 | /** @brief destroy a stream according to the stream seed previosly saved in the seed array. | 245 | /* @brief destroy a stream according to the stream seed previosly saved in the seed array. |
| 246 | * @param[in] stream The stream. | 246 | * @param[in] stream The stream. |
| 247 | * @return IA_CSS_SUCCESS (no other errors are generated now) | 247 | * @return IA_CSS_SUCCESS (no other errors are generated now) |
| 248 | * | 248 | * |
| @@ -251,7 +251,7 @@ ia_css_stream_has_stopped(struct ia_css_stream *stream); | |||
| 251 | enum ia_css_err | 251 | enum ia_css_err |
| 252 | ia_css_stream_unload(struct ia_css_stream *stream); | 252 | ia_css_stream_unload(struct ia_css_stream *stream); |
| 253 | 253 | ||
| 254 | /** @brief Returns stream format | 254 | /* @brief Returns stream format |
| 255 | * @param[in] stream The stream. | 255 | * @param[in] stream The stream. |
| 256 | * @return format of the string | 256 | * @return format of the string |
| 257 | * | 257 | * |
| @@ -260,7 +260,7 @@ ia_css_stream_unload(struct ia_css_stream *stream); | |||
| 260 | enum ia_css_stream_format | 260 | enum ia_css_stream_format |
| 261 | ia_css_stream_get_format(const struct ia_css_stream *stream); | 261 | ia_css_stream_get_format(const struct ia_css_stream *stream); |
| 262 | 262 | ||
| 263 | /** @brief Check if the stream is configured for 2 pixels per clock | 263 | /* @brief Check if the stream is configured for 2 pixels per clock |
| 264 | * @param[in] stream The stream. | 264 | * @param[in] stream The stream. |
| 265 | * @return boolean flag | 265 | * @return boolean flag |
| 266 | * | 266 | * |
| @@ -270,7 +270,7 @@ ia_css_stream_get_format(const struct ia_css_stream *stream); | |||
| 270 | bool | 270 | bool |
| 271 | ia_css_stream_get_two_pixels_per_clock(const struct ia_css_stream *stream); | 271 | ia_css_stream_get_two_pixels_per_clock(const struct ia_css_stream *stream); |
| 272 | 272 | ||
| 273 | /** @brief Sets the output frame stride (at the last pipe) | 273 | /* @brief Sets the output frame stride (at the last pipe) |
| 274 | * @param[in] stream The stream | 274 | * @param[in] stream The stream |
| 275 | * @param[in] output_padded_width - the output buffer stride. | 275 | * @param[in] output_padded_width - the output buffer stride. |
| 276 | * @return ia_css_err | 276 | * @return ia_css_err |
| @@ -280,7 +280,7 @@ ia_css_stream_get_two_pixels_per_clock(const struct ia_css_stream *stream); | |||
| 280 | enum ia_css_err | 280 | enum ia_css_err |
| 281 | ia_css_stream_set_output_padded_width(struct ia_css_stream *stream, unsigned int output_padded_width); | 281 | ia_css_stream_set_output_padded_width(struct ia_css_stream *stream, unsigned int output_padded_width); |
| 282 | 282 | ||
| 283 | /** @brief Return max number of continuous RAW frames. | 283 | /* @brief Return max number of continuous RAW frames. |
| 284 | * @param[in] stream The stream. | 284 | * @param[in] stream The stream. |
| 285 | * @param[out] buffer_depth The maximum number of continuous RAW frames. | 285 | * @param[out] buffer_depth The maximum number of continuous RAW frames. |
| 286 | * @return IA_CSS_SUCCESS or IA_CSS_ERR_INVALID_ARGUMENTS | 286 | * @return IA_CSS_SUCCESS or IA_CSS_ERR_INVALID_ARGUMENTS |
| @@ -291,7 +291,7 @@ ia_css_stream_set_output_padded_width(struct ia_css_stream *stream, unsigned int | |||
| 291 | enum ia_css_err | 291 | enum ia_css_err |
| 292 | ia_css_stream_get_max_buffer_depth(struct ia_css_stream *stream, int *buffer_depth); | 292 | ia_css_stream_get_max_buffer_depth(struct ia_css_stream *stream, int *buffer_depth); |
| 293 | 293 | ||
| 294 | /** @brief Set nr of continuous RAW frames to use. | 294 | /* @brief Set nr of continuous RAW frames to use. |
| 295 | * | 295 | * |
| 296 | * @param[in] stream The stream. | 296 | * @param[in] stream The stream. |
| 297 | * @param[in] buffer_depth Number of frames to set. | 297 | * @param[in] buffer_depth Number of frames to set. |
| @@ -302,7 +302,7 @@ ia_css_stream_get_max_buffer_depth(struct ia_css_stream *stream, int *buffer_dep | |||
| 302 | enum ia_css_err | 302 | enum ia_css_err |
| 303 | ia_css_stream_set_buffer_depth(struct ia_css_stream *stream, int buffer_depth); | 303 | ia_css_stream_set_buffer_depth(struct ia_css_stream *stream, int buffer_depth); |
| 304 | 304 | ||
| 305 | /** @brief Get number of continuous RAW frames to use. | 305 | /* @brief Get number of continuous RAW frames to use. |
| 306 | * @param[in] stream The stream. | 306 | * @param[in] stream The stream. |
| 307 | * @param[out] buffer_depth The number of frames to use | 307 | * @param[out] buffer_depth The number of frames to use |
| 308 | * @return IA_CSS_SUCCESS or IA_CSS_ERR_INVALID_ARGUMENTS | 308 | * @return IA_CSS_SUCCESS or IA_CSS_ERR_INVALID_ARGUMENTS |
| @@ -315,7 +315,7 @@ ia_css_stream_get_buffer_depth(struct ia_css_stream *stream, int *buffer_depth); | |||
| 315 | 315 | ||
| 316 | /* ===== CAPTURE ===== */ | 316 | /* ===== CAPTURE ===== */ |
| 317 | 317 | ||
| 318 | /** @brief Configure the continuous capture | 318 | /* @brief Configure the continuous capture |
| 319 | * | 319 | * |
| 320 | * @param[in] stream The stream. | 320 | * @param[in] stream The stream. |
| 321 | * @param[in] num_captures The number of RAW frames to be processed to | 321 | * @param[in] num_captures The number of RAW frames to be processed to |
| @@ -347,7 +347,7 @@ ia_css_stream_capture(struct ia_css_stream *stream, | |||
| 347 | unsigned int skip, | 347 | unsigned int skip, |
| 348 | int offset); | 348 | int offset); |
| 349 | 349 | ||
| 350 | /** @brief Specify which raw frame to tag based on exp_id found in frame info | 350 | /* @brief Specify which raw frame to tag based on exp_id found in frame info |
| 351 | * | 351 | * |
| 352 | * @param[in] stream The stream. | 352 | * @param[in] stream The stream. |
| 353 | * @param[in] exp_id The exposure id of the raw frame to tag. | 353 | * @param[in] exp_id The exposure id of the raw frame to tag. |
| @@ -363,7 +363,7 @@ ia_css_stream_capture_frame(struct ia_css_stream *stream, | |||
| 363 | 363 | ||
| 364 | /* ===== VIDEO ===== */ | 364 | /* ===== VIDEO ===== */ |
| 365 | 365 | ||
| 366 | /** @brief Send streaming data into the css input FIFO | 366 | /* @brief Send streaming data into the css input FIFO |
| 367 | * | 367 | * |
| 368 | * @param[in] stream The stream. | 368 | * @param[in] stream The stream. |
| 369 | * @param[in] data Pointer to the pixels to be send. | 369 | * @param[in] data Pointer to the pixels to be send. |
| @@ -395,7 +395,7 @@ ia_css_stream_send_input_frame(const struct ia_css_stream *stream, | |||
| 395 | unsigned int width, | 395 | unsigned int width, |
| 396 | unsigned int height); | 396 | unsigned int height); |
| 397 | 397 | ||
| 398 | /** @brief Start an input frame on the CSS input FIFO. | 398 | /* @brief Start an input frame on the CSS input FIFO. |
| 399 | * | 399 | * |
| 400 | * @param[in] stream The stream. | 400 | * @param[in] stream The stream. |
| 401 | * @return None | 401 | * @return None |
| @@ -411,7 +411,7 @@ ia_css_stream_send_input_frame(const struct ia_css_stream *stream, | |||
| 411 | void | 411 | void |
| 412 | ia_css_stream_start_input_frame(const struct ia_css_stream *stream); | 412 | ia_css_stream_start_input_frame(const struct ia_css_stream *stream); |
| 413 | 413 | ||
| 414 | /** @brief Send a line of input data into the CSS input FIFO. | 414 | /* @brief Send a line of input data into the CSS input FIFO. |
| 415 | * | 415 | * |
| 416 | * @param[in] stream The stream. | 416 | * @param[in] stream The stream. |
| 417 | * @param[in] data Array of the first line of image data. | 417 | * @param[in] data Array of the first line of image data. |
| @@ -435,7 +435,7 @@ ia_css_stream_send_input_line(const struct ia_css_stream *stream, | |||
| 435 | const unsigned short *data2, | 435 | const unsigned short *data2, |
| 436 | unsigned int width2); | 436 | unsigned int width2); |
| 437 | 437 | ||
| 438 | /** @brief Send a line of input embedded data into the CSS input FIFO. | 438 | /* @brief Send a line of input embedded data into the CSS input FIFO. |
| 439 | * | 439 | * |
| 440 | * @param[in] stream Pointer of the stream. | 440 | * @param[in] stream Pointer of the stream. |
| 441 | * @param[in] format Format of the embedded data. | 441 | * @param[in] format Format of the embedded data. |
| @@ -457,7 +457,7 @@ ia_css_stream_send_input_embedded_line(const struct ia_css_stream *stream, | |||
| 457 | const unsigned short *data, | 457 | const unsigned short *data, |
| 458 | unsigned int width); | 458 | unsigned int width); |
| 459 | 459 | ||
| 460 | /** @brief End an input frame on the CSS input FIFO. | 460 | /* @brief End an input frame on the CSS input FIFO. |
| 461 | * | 461 | * |
| 462 | * @param[in] stream The stream. | 462 | * @param[in] stream The stream. |
| 463 | * @return None | 463 | * @return None |
| @@ -467,7 +467,7 @@ ia_css_stream_send_input_embedded_line(const struct ia_css_stream *stream, | |||
| 467 | void | 467 | void |
| 468 | ia_css_stream_end_input_frame(const struct ia_css_stream *stream); | 468 | ia_css_stream_end_input_frame(const struct ia_css_stream *stream); |
| 469 | 469 | ||
| 470 | /** @brief send a request flash command to SP | 470 | /* @brief send a request flash command to SP |
| 471 | * | 471 | * |
| 472 | * @param[in] stream The stream. | 472 | * @param[in] stream The stream. |
| 473 | * @return None | 473 | * @return None |
| @@ -481,7 +481,7 @@ ia_css_stream_end_input_frame(const struct ia_css_stream *stream); | |||
| 481 | void | 481 | void |
| 482 | ia_css_stream_request_flash(struct ia_css_stream *stream); | 482 | ia_css_stream_request_flash(struct ia_css_stream *stream); |
| 483 | 483 | ||
| 484 | /** @brief Configure a stream with filter coefficients. | 484 | /* @brief Configure a stream with filter coefficients. |
| 485 | * @deprecated {Replaced by | 485 | * @deprecated {Replaced by |
| 486 | * ia_css_pipe_set_isp_config_on_pipe()} | 486 | * ia_css_pipe_set_isp_config_on_pipe()} |
| 487 | * | 487 | * |
| @@ -503,7 +503,7 @@ ia_css_stream_set_isp_config_on_pipe(struct ia_css_stream *stream, | |||
| 503 | const struct ia_css_isp_config *config, | 503 | const struct ia_css_isp_config *config, |
| 504 | struct ia_css_pipe *pipe); | 504 | struct ia_css_pipe *pipe); |
| 505 | 505 | ||
| 506 | /** @brief Configure a stream with filter coefficients. | 506 | /* @brief Configure a stream with filter coefficients. |
| 507 | * @deprecated {Replaced by | 507 | * @deprecated {Replaced by |
| 508 | * ia_css_pipe_set_isp_config()} | 508 | * ia_css_pipe_set_isp_config()} |
| 509 | * @param[in] stream The stream. | 509 | * @param[in] stream The stream. |
| @@ -523,7 +523,7 @@ ia_css_stream_set_isp_config( | |||
| 523 | struct ia_css_stream *stream, | 523 | struct ia_css_stream *stream, |
| 524 | const struct ia_css_isp_config *config); | 524 | const struct ia_css_isp_config *config); |
| 525 | 525 | ||
| 526 | /** @brief Get selected configuration settings | 526 | /* @brief Get selected configuration settings |
| 527 | * @param[in] stream The stream. | 527 | * @param[in] stream The stream. |
| 528 | * @param[out] config Configuration settings. | 528 | * @param[out] config Configuration settings. |
| 529 | * @return None | 529 | * @return None |
| @@ -532,7 +532,7 @@ void | |||
| 532 | ia_css_stream_get_isp_config(const struct ia_css_stream *stream, | 532 | ia_css_stream_get_isp_config(const struct ia_css_stream *stream, |
| 533 | struct ia_css_isp_config *config); | 533 | struct ia_css_isp_config *config); |
| 534 | 534 | ||
| 535 | /** @brief allocate continuous raw frames for continuous capture | 535 | /* @brief allocate continuous raw frames for continuous capture |
| 536 | * @param[in] stream The stream. | 536 | * @param[in] stream The stream. |
| 537 | * @return IA_CSS_SUCCESS or error code. | 537 | * @return IA_CSS_SUCCESS or error code. |
| 538 | * | 538 | * |
| @@ -544,7 +544,7 @@ ia_css_stream_get_isp_config(const struct ia_css_stream *stream, | |||
| 544 | enum ia_css_err | 544 | enum ia_css_err |
| 545 | ia_css_alloc_continuous_frame_remain(struct ia_css_stream *stream); | 545 | ia_css_alloc_continuous_frame_remain(struct ia_css_stream *stream); |
| 546 | 546 | ||
| 547 | /** @brief allocate continuous raw frames for continuous capture | 547 | /* @brief allocate continuous raw frames for continuous capture |
| 548 | * @param[in] stream The stream. | 548 | * @param[in] stream The stream. |
| 549 | * @return IA_CSS_SUCCESS or error code. | 549 | * @return IA_CSS_SUCCESS or error code. |
| 550 | * | 550 | * |
| @@ -555,7 +555,7 @@ ia_css_alloc_continuous_frame_remain(struct ia_css_stream *stream); | |||
| 555 | enum ia_css_err | 555 | enum ia_css_err |
| 556 | ia_css_update_continuous_frames(struct ia_css_stream *stream); | 556 | ia_css_update_continuous_frames(struct ia_css_stream *stream); |
| 557 | 557 | ||
| 558 | /** @brief ia_css_unlock_raw_frame . unlock a raw frame (HALv3 Support) | 558 | /* @brief ia_css_unlock_raw_frame . unlock a raw frame (HALv3 Support) |
| 559 | * @param[in] stream The stream. | 559 | * @param[in] stream The stream. |
| 560 | * @param[in] exp_id exposure id that uniquely identifies the locked Raw Frame Buffer | 560 | * @param[in] exp_id exposure id that uniquely identifies the locked Raw Frame Buffer |
| 561 | * @return ia_css_err IA_CSS_SUCCESS or error code | 561 | * @return ia_css_err IA_CSS_SUCCESS or error code |
| @@ -567,7 +567,7 @@ ia_css_update_continuous_frames(struct ia_css_stream *stream); | |||
| 567 | enum ia_css_err | 567 | enum ia_css_err |
| 568 | ia_css_unlock_raw_frame(struct ia_css_stream *stream, uint32_t exp_id); | 568 | ia_css_unlock_raw_frame(struct ia_css_stream *stream, uint32_t exp_id); |
| 569 | 569 | ||
| 570 | /** @brief ia_css_en_dz_capt_pipe . Enable/Disable digital zoom for capture pipe | 570 | /* @brief ia_css_en_dz_capt_pipe . Enable/Disable digital zoom for capture pipe |
| 571 | * @param[in] stream The stream. | 571 | * @param[in] stream The stream. |
| 572 | * @param[in] enable - true, disable - false | 572 | * @param[in] enable - true, disable - false |
| 573 | * @return None | 573 | * @return None |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_timer.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_timer.h index 575bb28b4bec..b256d7c88716 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_timer.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_timer.h | |||
| @@ -31,47 +31,47 @@ more details. | |||
| 31 | #ifndef __IA_CSS_TIMER_H | 31 | #ifndef __IA_CSS_TIMER_H |
| 32 | #define __IA_CSS_TIMER_H | 32 | #define __IA_CSS_TIMER_H |
| 33 | 33 | ||
| 34 | /** @file | 34 | /* @file |
| 35 | * Timer interface definitions | 35 | * Timer interface definitions |
| 36 | */ | 36 | */ |
| 37 | #include <type_support.h> /* for uint32_t */ | 37 | #include <type_support.h> /* for uint32_t */ |
| 38 | #include "ia_css_err.h" | 38 | #include "ia_css_err.h" |
| 39 | 39 | ||
| 40 | /** @brief timer reading definition */ | 40 | /* @brief timer reading definition */ |
| 41 | typedef uint32_t clock_value_t; | 41 | typedef uint32_t clock_value_t; |
| 42 | 42 | ||
| 43 | /** @brief 32 bit clock tick,(timestamp based on timer-value of CSS-internal timer)*/ | 43 | /* @brief 32 bit clock tick,(timestamp based on timer-value of CSS-internal timer)*/ |
| 44 | struct ia_css_clock_tick { | 44 | struct ia_css_clock_tick { |
| 45 | clock_value_t ticks; /**< measured time in ticks.*/ | 45 | clock_value_t ticks; /** measured time in ticks.*/ |
| 46 | }; | 46 | }; |
| 47 | 47 | ||
| 48 | /** @brief TIMER event codes */ | 48 | /* @brief TIMER event codes */ |
| 49 | enum ia_css_tm_event { | 49 | enum ia_css_tm_event { |
| 50 | IA_CSS_TM_EVENT_AFTER_INIT, | 50 | IA_CSS_TM_EVENT_AFTER_INIT, |
| 51 | /**< Timer Event after Initialization */ | 51 | /** Timer Event after Initialization */ |
| 52 | IA_CSS_TM_EVENT_MAIN_END, | 52 | IA_CSS_TM_EVENT_MAIN_END, |
| 53 | /**< Timer Event after end of Main */ | 53 | /** Timer Event after end of Main */ |
| 54 | IA_CSS_TM_EVENT_THREAD_START, | 54 | IA_CSS_TM_EVENT_THREAD_START, |
| 55 | /**< Timer Event after thread start */ | 55 | /** Timer Event after thread start */ |
| 56 | IA_CSS_TM_EVENT_FRAME_PROC_START, | 56 | IA_CSS_TM_EVENT_FRAME_PROC_START, |
| 57 | /**< Timer Event after Frame Process Start */ | 57 | /** Timer Event after Frame Process Start */ |
| 58 | IA_CSS_TM_EVENT_FRAME_PROC_END | 58 | IA_CSS_TM_EVENT_FRAME_PROC_END |
| 59 | /**< Timer Event after Frame Process End */ | 59 | /** Timer Event after Frame Process End */ |
| 60 | }; | 60 | }; |
| 61 | 61 | ||
| 62 | /** @brief code measurement common struct */ | 62 | /* @brief code measurement common struct */ |
| 63 | struct ia_css_time_meas { | 63 | struct ia_css_time_meas { |
| 64 | clock_value_t start_timer_value; /**< measured time in ticks */ | 64 | clock_value_t start_timer_value; /** measured time in ticks */ |
| 65 | clock_value_t end_timer_value; /**< measured time in ticks */ | 65 | clock_value_t end_timer_value; /** measured time in ticks */ |
| 66 | }; | 66 | }; |
| 67 | 67 | ||
| 68 | /**@brief SIZE_OF_IA_CSS_CLOCK_TICK_STRUCT checks to ensure correct alignment for struct ia_css_clock_tick. */ | 68 | /**@brief SIZE_OF_IA_CSS_CLOCK_TICK_STRUCT checks to ensure correct alignment for struct ia_css_clock_tick. */ |
| 69 | #define SIZE_OF_IA_CSS_CLOCK_TICK_STRUCT sizeof(clock_value_t) | 69 | #define SIZE_OF_IA_CSS_CLOCK_TICK_STRUCT sizeof(clock_value_t) |
| 70 | /** @brief checks to ensure correct alignment for ia_css_time_meas. */ | 70 | /* @brief checks to ensure correct alignment for ia_css_time_meas. */ |
| 71 | #define SIZE_OF_IA_CSS_TIME_MEAS_STRUCT (sizeof(clock_value_t) \ | 71 | #define SIZE_OF_IA_CSS_TIME_MEAS_STRUCT (sizeof(clock_value_t) \ |
| 72 | + sizeof(clock_value_t)) | 72 | + sizeof(clock_value_t)) |
| 73 | 73 | ||
| 74 | /** @brief API to fetch timer count directly | 74 | /* @brief API to fetch timer count directly |
| 75 | * | 75 | * |
| 76 | * @param curr_ts [out] measured count value | 76 | * @param curr_ts [out] measured count value |
| 77 | * @return IA_CSS_SUCCESS if success | 77 | * @return IA_CSS_SUCCESS if success |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_tpg.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_tpg.h index 9238a3317a46..81498bd7485b 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_tpg.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_tpg.h | |||
| @@ -15,11 +15,11 @@ | |||
| 15 | #ifndef __IA_CSS_TPG_H | 15 | #ifndef __IA_CSS_TPG_H |
| 16 | #define __IA_CSS_TPG_H | 16 | #define __IA_CSS_TPG_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * This file contains support for the test pattern generator (TPG) | 19 | * This file contains support for the test pattern generator (TPG) |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | /** Enumerate the TPG IDs. | 22 | /* Enumerate the TPG IDs. |
| 23 | */ | 23 | */ |
| 24 | enum ia_css_tpg_id { | 24 | enum ia_css_tpg_id { |
| 25 | IA_CSS_TPG_ID0, | 25 | IA_CSS_TPG_ID0, |
| @@ -35,7 +35,7 @@ enum ia_css_tpg_id { | |||
| 35 | */ | 35 | */ |
| 36 | #define N_CSS_TPG_IDS (IA_CSS_TPG_ID2+1) | 36 | #define N_CSS_TPG_IDS (IA_CSS_TPG_ID2+1) |
| 37 | 37 | ||
| 38 | /** Enumerate the TPG modes. | 38 | /* Enumerate the TPG modes. |
| 39 | */ | 39 | */ |
| 40 | enum ia_css_tpg_mode { | 40 | enum ia_css_tpg_mode { |
| 41 | IA_CSS_TPG_MODE_RAMP, | 41 | IA_CSS_TPG_MODE_RAMP, |
| @@ -44,7 +44,7 @@ enum ia_css_tpg_mode { | |||
| 44 | IA_CSS_TPG_MODE_MONO | 44 | IA_CSS_TPG_MODE_MONO |
| 45 | }; | 45 | }; |
| 46 | 46 | ||
| 47 | /** @brief Configure the test pattern generator. | 47 | /* @brief Configure the test pattern generator. |
| 48 | * | 48 | * |
| 49 | * Configure the Test Pattern Generator, the way these values are used to | 49 | * Configure the Test Pattern Generator, the way these values are used to |
| 50 | * generate the pattern can be seen in the HRT extension for the test pattern | 50 | * generate the pattern can be seen in the HRT extension for the test pattern |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_types.h index 5fec3d5c89d8..725b90072cfe 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_types.h | |||
| @@ -16,7 +16,7 @@ | |||
| 16 | #ifndef _IA_CSS_TYPES_H | 16 | #ifndef _IA_CSS_TYPES_H |
| 17 | #define _IA_CSS_TYPES_H | 17 | #define _IA_CSS_TYPES_H |
| 18 | 18 | ||
| 19 | /** @file | 19 | /* @file |
| 20 | * This file contains types used for the ia_css parameters. | 20 | * This file contains types used for the ia_css parameters. |
| 21 | * These types are in a separate file because they are expected | 21 | * These types are in a separate file because they are expected |
| 22 | * to be used in software layers that do not access the CSS API | 22 | * to be used in software layers that do not access the CSS API |
| @@ -58,7 +58,7 @@ | |||
| 58 | #include "isp/kernels/output/output_1.0/ia_css_output_types.h" | 58 | #include "isp/kernels/output/output_1.0/ia_css_output_types.h" |
| 59 | 59 | ||
| 60 | #define IA_CSS_DVS_STAT_GRID_INFO_SUPPORTED | 60 | #define IA_CSS_DVS_STAT_GRID_INFO_SUPPORTED |
| 61 | /**< Should be removed after Driver adaptation will be done */ | 61 | /** Should be removed after Driver adaptation will be done */ |
| 62 | 62 | ||
| 63 | #define IA_CSS_VERSION_MAJOR 2 | 63 | #define IA_CSS_VERSION_MAJOR 2 |
| 64 | #define IA_CSS_VERSION_MINOR 0 | 64 | #define IA_CSS_VERSION_MINOR 0 |
| @@ -69,8 +69,8 @@ | |||
| 69 | /* Min and max exposure IDs. These macros are here to allow | 69 | /* Min and max exposure IDs. These macros are here to allow |
| 70 | * the drivers to get this information. Changing these macros | 70 | * the drivers to get this information. Changing these macros |
| 71 | * constitutes a CSS API change. */ | 71 | * constitutes a CSS API change. */ |
| 72 | #define IA_CSS_ISYS_MIN_EXPOSURE_ID 1 /**< Minimum exposure ID */ | 72 | #define IA_CSS_ISYS_MIN_EXPOSURE_ID 1 /** Minimum exposure ID */ |
| 73 | #define IA_CSS_ISYS_MAX_EXPOSURE_ID 250 /**< Maximum exposure ID */ | 73 | #define IA_CSS_ISYS_MAX_EXPOSURE_ID 250 /** Maximum exposure ID */ |
| 74 | 74 | ||
| 75 | /* opaque types */ | 75 | /* opaque types */ |
| 76 | struct ia_css_isp_parameters; | 76 | struct ia_css_isp_parameters; |
| @@ -79,72 +79,72 @@ struct ia_css_memory_offsets; | |||
| 79 | struct ia_css_config_memory_offsets; | 79 | struct ia_css_config_memory_offsets; |
| 80 | struct ia_css_state_memory_offsets; | 80 | struct ia_css_state_memory_offsets; |
| 81 | 81 | ||
| 82 | /** Virtual address within the CSS address space. */ | 82 | /* Virtual address within the CSS address space. */ |
| 83 | typedef uint32_t ia_css_ptr; | 83 | typedef uint32_t ia_css_ptr; |
| 84 | 84 | ||
| 85 | /** Generic resolution structure. | 85 | /* Generic resolution structure. |
| 86 | */ | 86 | */ |
| 87 | struct ia_css_resolution { | 87 | struct ia_css_resolution { |
| 88 | uint32_t width; /**< Width */ | 88 | uint32_t width; /** Width */ |
| 89 | uint32_t height; /**< Height */ | 89 | uint32_t height; /** Height */ |
| 90 | }; | 90 | }; |
| 91 | 91 | ||
| 92 | /** Generic coordinate structure. | 92 | /* Generic coordinate structure. |
| 93 | */ | 93 | */ |
| 94 | struct ia_css_coordinate { | 94 | struct ia_css_coordinate { |
| 95 | int32_t x; /**< Value of a coordinate on the horizontal axis */ | 95 | int32_t x; /** Value of a coordinate on the horizontal axis */ |
| 96 | int32_t y; /**< Value of a coordinate on the vertical axis */ | 96 | int32_t y; /** Value of a coordinate on the vertical axis */ |
| 97 | }; | 97 | }; |
| 98 | 98 | ||
| 99 | /** Vector with signed values. This is used to indicate motion for | 99 | /* Vector with signed values. This is used to indicate motion for |
| 100 | * Digital Image Stabilization. | 100 | * Digital Image Stabilization. |
| 101 | */ | 101 | */ |
| 102 | struct ia_css_vector { | 102 | struct ia_css_vector { |
| 103 | int32_t x; /**< horizontal motion (in pixels) */ | 103 | int32_t x; /** horizontal motion (in pixels) */ |
| 104 | int32_t y; /**< vertical motion (in pixels) */ | 104 | int32_t y; /** vertical motion (in pixels) */ |
| 105 | }; | 105 | }; |
| 106 | 106 | ||
| 107 | /* Short hands */ | 107 | /* Short hands */ |
| 108 | #define IA_CSS_ISP_DMEM IA_CSS_ISP_DMEM0 | 108 | #define IA_CSS_ISP_DMEM IA_CSS_ISP_DMEM0 |
| 109 | #define IA_CSS_ISP_VMEM IA_CSS_ISP_VMEM0 | 109 | #define IA_CSS_ISP_VMEM IA_CSS_ISP_VMEM0 |
| 110 | 110 | ||
| 111 | /** CSS data descriptor */ | 111 | /* CSS data descriptor */ |
| 112 | struct ia_css_data { | 112 | struct ia_css_data { |
| 113 | ia_css_ptr address; /**< CSS virtual address */ | 113 | ia_css_ptr address; /** CSS virtual address */ |
| 114 | uint32_t size; /**< Disabled if 0 */ | 114 | uint32_t size; /** Disabled if 0 */ |
| 115 | }; | 115 | }; |
| 116 | 116 | ||
| 117 | /** Host data descriptor */ | 117 | /* Host data descriptor */ |
| 118 | struct ia_css_host_data { | 118 | struct ia_css_host_data { |
| 119 | char *address; /**< Host address */ | 119 | char *address; /** Host address */ |
| 120 | uint32_t size; /**< Disabled if 0 */ | 120 | uint32_t size; /** Disabled if 0 */ |
| 121 | }; | 121 | }; |
| 122 | 122 | ||
| 123 | /** ISP data descriptor */ | 123 | /* ISP data descriptor */ |
| 124 | struct ia_css_isp_data { | 124 | struct ia_css_isp_data { |
| 125 | uint32_t address; /**< ISP address */ | 125 | uint32_t address; /** ISP address */ |
| 126 | uint32_t size; /**< Disabled if 0 */ | 126 | uint32_t size; /** Disabled if 0 */ |
| 127 | }; | 127 | }; |
| 128 | 128 | ||
| 129 | /** Shading Correction types. */ | 129 | /* Shading Correction types. */ |
| 130 | enum ia_css_shading_correction_type { | 130 | enum ia_css_shading_correction_type { |
| 131 | #ifndef ISP2401 | 131 | #ifndef ISP2401 |
| 132 | IA_CSS_SHADING_CORRECTION_TYPE_1 /**< Shading Correction 1.0 (pipe 1.0 on ISP2300, pipe 2.2 on ISP2400) */ | 132 | IA_CSS_SHADING_CORRECTION_TYPE_1 /** Shading Correction 1.0 (pipe 1.0 on ISP2300, pipe 2.2 on ISP2400) */ |
| 133 | #else | 133 | #else |
| 134 | IA_CSS_SHADING_CORRECTION_NONE, /**< Shading Correction is not processed in the pipe. */ | 134 | IA_CSS_SHADING_CORRECTION_NONE, /** Shading Correction is not processed in the pipe. */ |
| 135 | IA_CSS_SHADING_CORRECTION_TYPE_1 /**< Shading Correction 1.0 (pipe 1.0 on ISP2300, pipe 2.2 on ISP2400/2401) */ | 135 | IA_CSS_SHADING_CORRECTION_TYPE_1 /** Shading Correction 1.0 (pipe 1.0 on ISP2300, pipe 2.2 on ISP2400/2401) */ |
| 136 | #endif | 136 | #endif |
| 137 | 137 | ||
| 138 | /**< More shading correction types can be added in the future. */ | 138 | /** More shading correction types can be added in the future. */ |
| 139 | }; | 139 | }; |
| 140 | 140 | ||
| 141 | /** Shading Correction information. */ | 141 | /* Shading Correction information. */ |
| 142 | struct ia_css_shading_info { | 142 | struct ia_css_shading_info { |
| 143 | enum ia_css_shading_correction_type type; /**< Shading Correction type. */ | 143 | enum ia_css_shading_correction_type type; /** Shading Correction type. */ |
| 144 | 144 | ||
| 145 | union { /** Shading Correction information of each Shading Correction types. */ | 145 | union { /* Shading Correction information of each Shading Correction types. */ |
| 146 | 146 | ||
| 147 | /** Shading Correction information of IA_CSS_SHADING_CORRECTION_TYPE_1. | 147 | /* Shading Correction information of IA_CSS_SHADING_CORRECTION_TYPE_1. |
| 148 | * | 148 | * |
| 149 | * This structure contains the information necessary to generate | 149 | * This structure contains the information necessary to generate |
| 150 | * the shading table required in the isp. | 150 | * the shading table required in the isp. |
| @@ -288,20 +288,20 @@ struct ia_css_shading_info { | |||
| 288 | */ | 288 | */ |
| 289 | struct { | 289 | struct { |
| 290 | #ifndef ISP2401 | 290 | #ifndef ISP2401 |
| 291 | uint32_t enable; /**< Shading correction enabled. | 291 | uint32_t enable; /** Shading correction enabled. |
| 292 | 0:disabled, 1:enabled */ | 292 | 0:disabled, 1:enabled */ |
| 293 | uint32_t num_hor_grids; /**< Number of data points per line | 293 | uint32_t num_hor_grids; /** Number of data points per line |
| 294 | per color on shading table. */ | 294 | per color on shading table. */ |
| 295 | uint32_t num_ver_grids; /**< Number of lines of data points | 295 | uint32_t num_ver_grids; /** Number of lines of data points |
| 296 | per color on shading table. */ | 296 | per color on shading table. */ |
| 297 | uint32_t bqs_per_grid_cell; /**< Grid cell size | 297 | uint32_t bqs_per_grid_cell; /** Grid cell size |
| 298 | in BQ(Bayer Quad) unit. | 298 | in BQ(Bayer Quad) unit. |
| 299 | (1BQ means {Gr,R,B,Gb}(2x2 pixels).) | 299 | (1BQ means {Gr,R,B,Gb}(2x2 pixels).) |
| 300 | Valid values are 8,16,32,64. */ | 300 | Valid values are 8,16,32,64. */ |
| 301 | #else | 301 | #else |
| 302 | uint32_t num_hor_grids; /**< Number of data points per line per color on shading table. */ | 302 | uint32_t num_hor_grids; /** Number of data points per line per color on shading table. */ |
| 303 | uint32_t num_ver_grids; /**< Number of lines of data points per color on shading table. */ | 303 | uint32_t num_ver_grids; /** Number of lines of data points per color on shading table. */ |
| 304 | uint32_t bqs_per_grid_cell; /**< Grid cell size in BQ unit. | 304 | uint32_t bqs_per_grid_cell; /** Grid cell size in BQ unit. |
| 305 | NOTE: bqs = size in BQ(Bayer Quad) unit. | 305 | NOTE: bqs = size in BQ(Bayer Quad) unit. |
| 306 | 1BQ means {Gr,R,B,Gb} (2x2 pixels). | 306 | 1BQ means {Gr,R,B,Gb} (2x2 pixels). |
| 307 | Horizontal 1 bqs corresponds to horizontal 2 pixels. | 307 | Horizontal 1 bqs corresponds to horizontal 2 pixels. |
| @@ -310,13 +310,13 @@ struct ia_css_shading_info { | |||
| 310 | uint32_t bayer_scale_hor_ratio_in; | 310 | uint32_t bayer_scale_hor_ratio_in; |
| 311 | uint32_t bayer_scale_hor_ratio_out; | 311 | uint32_t bayer_scale_hor_ratio_out; |
| 312 | #ifndef ISP2401 | 312 | #ifndef ISP2401 |
| 313 | /**< Horizontal ratio of bayer scaling | 313 | /** Horizontal ratio of bayer scaling |
| 314 | between input width and output width, for the scaling | 314 | between input width and output width, for the scaling |
| 315 | which should be done before shading correction. | 315 | which should be done before shading correction. |
| 316 | output_width = input_width * bayer_scale_hor_ratio_out | 316 | output_width = input_width * bayer_scale_hor_ratio_out |
| 317 | / bayer_scale_hor_ratio_in */ | 317 | / bayer_scale_hor_ratio_in */ |
| 318 | #else | 318 | #else |
| 319 | /**< Horizontal ratio of bayer scaling between input width and output width, | 319 | /** Horizontal ratio of bayer scaling between input width and output width, |
| 320 | for the scaling which should be done before shading correction. | 320 | for the scaling which should be done before shading correction. |
| 321 | output_width = input_width * bayer_scale_hor_ratio_out | 321 | output_width = input_width * bayer_scale_hor_ratio_out |
| 322 | / bayer_scale_hor_ratio_in + 0.5 */ | 322 | / bayer_scale_hor_ratio_in + 0.5 */ |
| @@ -324,30 +324,30 @@ struct ia_css_shading_info { | |||
| 324 | uint32_t bayer_scale_ver_ratio_in; | 324 | uint32_t bayer_scale_ver_ratio_in; |
| 325 | uint32_t bayer_scale_ver_ratio_out; | 325 | uint32_t bayer_scale_ver_ratio_out; |
| 326 | #ifndef ISP2401 | 326 | #ifndef ISP2401 |
| 327 | /**< Vertical ratio of bayer scaling | 327 | /** Vertical ratio of bayer scaling |
| 328 | between input height and output height, for the scaling | 328 | between input height and output height, for the scaling |
| 329 | which should be done before shading correction. | 329 | which should be done before shading correction. |
| 330 | output_height = input_height * bayer_scale_ver_ratio_out | 330 | output_height = input_height * bayer_scale_ver_ratio_out |
| 331 | / bayer_scale_ver_ratio_in */ | 331 | / bayer_scale_ver_ratio_in */ |
| 332 | uint32_t sc_bayer_origin_x_bqs_on_shading_table; | 332 | uint32_t sc_bayer_origin_x_bqs_on_shading_table; |
| 333 | /**< X coordinate (in bqs) of bayer origin on shading table. | 333 | /** X coordinate (in bqs) of bayer origin on shading table. |
| 334 | This indicates the left-most pixel of bayer | 334 | This indicates the left-most pixel of bayer |
| 335 | (not include margin) inputted to the shading correction. | 335 | (not include margin) inputted to the shading correction. |
| 336 | This corresponds to the left-most pixel of bayer | 336 | This corresponds to the left-most pixel of bayer |
| 337 | inputted to isp from sensor. */ | 337 | inputted to isp from sensor. */ |
| 338 | uint32_t sc_bayer_origin_y_bqs_on_shading_table; | 338 | uint32_t sc_bayer_origin_y_bqs_on_shading_table; |
| 339 | /**< Y coordinate (in bqs) of bayer origin on shading table. | 339 | /** Y coordinate (in bqs) of bayer origin on shading table. |
| 340 | This indicates the top pixel of bayer | 340 | This indicates the top pixel of bayer |
| 341 | (not include margin) inputted to the shading correction. | 341 | (not include margin) inputted to the shading correction. |
| 342 | This corresponds to the top pixel of bayer | 342 | This corresponds to the top pixel of bayer |
| 343 | inputted to isp from sensor. */ | 343 | inputted to isp from sensor. */ |
| 344 | #else | 344 | #else |
| 345 | /**< Vertical ratio of bayer scaling between input height and output height, | 345 | /** Vertical ratio of bayer scaling between input height and output height, |
| 346 | for the scaling which should be done before shading correction. | 346 | for the scaling which should be done before shading correction. |
| 347 | output_height = input_height * bayer_scale_ver_ratio_out | 347 | output_height = input_height * bayer_scale_ver_ratio_out |
| 348 | / bayer_scale_ver_ratio_in + 0.5 */ | 348 | / bayer_scale_ver_ratio_in + 0.5 */ |
| 349 | struct ia_css_resolution isp_input_sensor_data_res_bqs; | 349 | struct ia_css_resolution isp_input_sensor_data_res_bqs; |
| 350 | /**< Sensor data size (in bqs) inputted to ISP. This is the size BEFORE bayer scaling. | 350 | /** Sensor data size (in bqs) inputted to ISP. This is the size BEFORE bayer scaling. |
| 351 | NOTE: This is NOT the size of the physical sensor size. | 351 | NOTE: This is NOT the size of the physical sensor size. |
| 352 | CSS requests the driver that ISP inputs sensor data | 352 | CSS requests the driver that ISP inputs sensor data |
| 353 | by the size of isp_input_sensor_data_res_bqs. | 353 | by the size of isp_input_sensor_data_res_bqs. |
| @@ -357,22 +357,22 @@ struct ia_css_shading_info { | |||
| 357 | ISP assumes the area of isp_input_sensor_data_res_bqs | 357 | ISP assumes the area of isp_input_sensor_data_res_bqs |
| 358 | is centered on the physical sensor. */ | 358 | is centered on the physical sensor. */ |
| 359 | struct ia_css_resolution sensor_data_res_bqs; | 359 | struct ia_css_resolution sensor_data_res_bqs; |
| 360 | /**< Sensor data size (in bqs) at shading correction. | 360 | /** Sensor data size (in bqs) at shading correction. |
| 361 | This is the size AFTER bayer scaling. */ | 361 | This is the size AFTER bayer scaling. */ |
| 362 | struct ia_css_coordinate sensor_data_origin_bqs_on_sctbl; | 362 | struct ia_css_coordinate sensor_data_origin_bqs_on_sctbl; |
| 363 | /**< Origin of sensor data area positioned on shading table at shading correction. | 363 | /** Origin of sensor data area positioned on shading table at shading correction. |
| 364 | The coordinate x,y should be positive values. */ | 364 | The coordinate x,y should be positive values. */ |
| 365 | #endif | 365 | #endif |
| 366 | } type_1; | 366 | } type_1; |
| 367 | 367 | ||
| 368 | /**< More structures can be added here when more shading correction types will be added | 368 | /** More structures can be added here when more shading correction types will be added |
| 369 | in the future. */ | 369 | in the future. */ |
| 370 | } info; | 370 | } info; |
| 371 | }; | 371 | }; |
| 372 | 372 | ||
| 373 | #ifndef ISP2401 | 373 | #ifndef ISP2401 |
| 374 | 374 | ||
| 375 | /** Default Shading Correction information of Shading Correction Type 1. */ | 375 | /* Default Shading Correction information of Shading Correction Type 1. */ |
| 376 | #define DEFAULT_SHADING_INFO_TYPE_1 \ | 376 | #define DEFAULT_SHADING_INFO_TYPE_1 \ |
| 377 | { \ | 377 | { \ |
| 378 | IA_CSS_SHADING_CORRECTION_TYPE_1, /* type */ \ | 378 | IA_CSS_SHADING_CORRECTION_TYPE_1, /* type */ \ |
| @@ -394,7 +394,7 @@ struct ia_css_shading_info { | |||
| 394 | 394 | ||
| 395 | #else | 395 | #else |
| 396 | 396 | ||
| 397 | /** Default Shading Correction information of Shading Correction Type 1. */ | 397 | /* Default Shading Correction information of Shading Correction Type 1. */ |
| 398 | #define DEFAULT_SHADING_INFO_TYPE_1 \ | 398 | #define DEFAULT_SHADING_INFO_TYPE_1 \ |
| 399 | { \ | 399 | { \ |
| 400 | IA_CSS_SHADING_CORRECTION_TYPE_1, /* type */ \ | 400 | IA_CSS_SHADING_CORRECTION_TYPE_1, /* type */ \ |
| @@ -416,27 +416,27 @@ struct ia_css_shading_info { | |||
| 416 | 416 | ||
| 417 | #endif | 417 | #endif |
| 418 | 418 | ||
| 419 | /** Default Shading Correction information. */ | 419 | /* Default Shading Correction information. */ |
| 420 | #define DEFAULT_SHADING_INFO DEFAULT_SHADING_INFO_TYPE_1 | 420 | #define DEFAULT_SHADING_INFO DEFAULT_SHADING_INFO_TYPE_1 |
| 421 | 421 | ||
| 422 | /** structure that describes the 3A and DIS grids */ | 422 | /* structure that describes the 3A and DIS grids */ |
| 423 | struct ia_css_grid_info { | 423 | struct ia_css_grid_info { |
| 424 | /** \name ISP input size | 424 | /* \name ISP input size |
| 425 | * that is visible for user | 425 | * that is visible for user |
| 426 | * @{ | 426 | * @{ |
| 427 | */ | 427 | */ |
| 428 | uint32_t isp_in_width; | 428 | uint32_t isp_in_width; |
| 429 | uint32_t isp_in_height; | 429 | uint32_t isp_in_height; |
| 430 | /** @}*/ | 430 | /* @}*/ |
| 431 | 431 | ||
| 432 | struct ia_css_3a_grid_info s3a_grid; /**< 3A grid info */ | 432 | struct ia_css_3a_grid_info s3a_grid; /** 3A grid info */ |
| 433 | union ia_css_dvs_grid_u dvs_grid; | 433 | union ia_css_dvs_grid_u dvs_grid; |
| 434 | /**< All types of DVS statistics grid info union */ | 434 | /** All types of DVS statistics grid info union */ |
| 435 | 435 | ||
| 436 | enum ia_css_vamem_type vamem_type; | 436 | enum ia_css_vamem_type vamem_type; |
| 437 | }; | 437 | }; |
| 438 | 438 | ||
| 439 | /** defaults for ia_css_grid_info structs */ | 439 | /* defaults for ia_css_grid_info structs */ |
| 440 | #define DEFAULT_GRID_INFO \ | 440 | #define DEFAULT_GRID_INFO \ |
| 441 | { \ | 441 | { \ |
| 442 | 0, /* isp_in_width */ \ | 442 | 0, /* isp_in_width */ \ |
| @@ -446,25 +446,25 @@ struct ia_css_grid_info { | |||
| 446 | IA_CSS_VAMEM_TYPE_1 /* vamem_type */ \ | 446 | IA_CSS_VAMEM_TYPE_1 /* vamem_type */ \ |
| 447 | } | 447 | } |
| 448 | 448 | ||
| 449 | /** Morphing table, used for geometric distortion and chromatic abberration | 449 | /* Morphing table, used for geometric distortion and chromatic abberration |
| 450 | * correction (GDCAC, also called GDC). | 450 | * correction (GDCAC, also called GDC). |
| 451 | * This table describes the imperfections introduced by the lens, the | 451 | * This table describes the imperfections introduced by the lens, the |
| 452 | * advanced ISP can correct for these imperfections using this table. | 452 | * advanced ISP can correct for these imperfections using this table. |
| 453 | */ | 453 | */ |
| 454 | struct ia_css_morph_table { | 454 | struct ia_css_morph_table { |
| 455 | uint32_t enable; /**< To disable GDC, set this field to false. The | 455 | uint32_t enable; /** To disable GDC, set this field to false. The |
| 456 | coordinates fields can be set to NULL in this case. */ | 456 | coordinates fields can be set to NULL in this case. */ |
| 457 | uint32_t height; /**< Table height */ | 457 | uint32_t height; /** Table height */ |
| 458 | uint32_t width; /**< Table width */ | 458 | uint32_t width; /** Table width */ |
| 459 | uint16_t *coordinates_x[IA_CSS_MORPH_TABLE_NUM_PLANES]; | 459 | uint16_t *coordinates_x[IA_CSS_MORPH_TABLE_NUM_PLANES]; |
| 460 | /**< X coordinates that describe the sensor imperfection */ | 460 | /** X coordinates that describe the sensor imperfection */ |
| 461 | uint16_t *coordinates_y[IA_CSS_MORPH_TABLE_NUM_PLANES]; | 461 | uint16_t *coordinates_y[IA_CSS_MORPH_TABLE_NUM_PLANES]; |
| 462 | /**< Y coordinates that describe the sensor imperfection */ | 462 | /** Y coordinates that describe the sensor imperfection */ |
| 463 | }; | 463 | }; |
| 464 | 464 | ||
| 465 | struct ia_css_dvs_6axis_config { | 465 | struct ia_css_dvs_6axis_config { |
| 466 | unsigned int exp_id; | 466 | unsigned int exp_id; |
| 467 | /**< Exposure ID, see ia_css_event_public.h for more detail */ | 467 | /** Exposure ID, see ia_css_event_public.h for more detail */ |
| 468 | uint32_t width_y; | 468 | uint32_t width_y; |
| 469 | uint32_t height_y; | 469 | uint32_t height_y; |
| 470 | uint32_t width_uv; | 470 | uint32_t width_uv; |
| @@ -479,16 +479,16 @@ struct ia_css_dvs_6axis_config { | |||
| 479 | * This specifies the coordinates (x,y) | 479 | * This specifies the coordinates (x,y) |
| 480 | */ | 480 | */ |
| 481 | struct ia_css_point { | 481 | struct ia_css_point { |
| 482 | int32_t x; /**< x coordinate */ | 482 | int32_t x; /** x coordinate */ |
| 483 | int32_t y; /**< y coordinate */ | 483 | int32_t y; /** y coordinate */ |
| 484 | }; | 484 | }; |
| 485 | 485 | ||
| 486 | /** | 486 | /** |
| 487 | * This specifies the region | 487 | * This specifies the region |
| 488 | */ | 488 | */ |
| 489 | struct ia_css_region { | 489 | struct ia_css_region { |
| 490 | struct ia_css_point origin; /**< Starting point coordinates for the region */ | 490 | struct ia_css_point origin; /** Starting point coordinates for the region */ |
| 491 | struct ia_css_resolution resolution; /**< Region resolution */ | 491 | struct ia_css_resolution resolution; /** Region resolution */ |
| 492 | }; | 492 | }; |
| 493 | 493 | ||
| 494 | /** | 494 | /** |
| @@ -509,30 +509,30 @@ struct ia_css_region { | |||
| 509 | * y + height <= effective input height | 509 | * y + height <= effective input height |
| 510 | */ | 510 | */ |
| 511 | struct ia_css_dz_config { | 511 | struct ia_css_dz_config { |
| 512 | uint32_t dx; /**< Horizontal zoom factor */ | 512 | uint32_t dx; /** Horizontal zoom factor */ |
| 513 | uint32_t dy; /**< Vertical zoom factor */ | 513 | uint32_t dy; /** Vertical zoom factor */ |
| 514 | struct ia_css_region zoom_region; /**< region for zoom */ | 514 | struct ia_css_region zoom_region; /** region for zoom */ |
| 515 | }; | 515 | }; |
| 516 | 516 | ||
| 517 | /** The still capture mode, this can be RAW (simply copy sensor input to DDR), | 517 | /* The still capture mode, this can be RAW (simply copy sensor input to DDR), |
| 518 | * Primary ISP, the Advanced ISP (GDC) or the low-light ISP (ANR). | 518 | * Primary ISP, the Advanced ISP (GDC) or the low-light ISP (ANR). |
| 519 | */ | 519 | */ |
| 520 | enum ia_css_capture_mode { | 520 | enum ia_css_capture_mode { |
| 521 | IA_CSS_CAPTURE_MODE_RAW, /**< no processing, copy data only */ | 521 | IA_CSS_CAPTURE_MODE_RAW, /** no processing, copy data only */ |
| 522 | IA_CSS_CAPTURE_MODE_BAYER, /**< bayer processing, up to demosaic */ | 522 | IA_CSS_CAPTURE_MODE_BAYER, /** bayer processing, up to demosaic */ |
| 523 | IA_CSS_CAPTURE_MODE_PRIMARY, /**< primary ISP */ | 523 | IA_CSS_CAPTURE_MODE_PRIMARY, /** primary ISP */ |
| 524 | IA_CSS_CAPTURE_MODE_ADVANCED, /**< advanced ISP (GDC) */ | 524 | IA_CSS_CAPTURE_MODE_ADVANCED, /** advanced ISP (GDC) */ |
| 525 | IA_CSS_CAPTURE_MODE_LOW_LIGHT /**< low light ISP (ANR) */ | 525 | IA_CSS_CAPTURE_MODE_LOW_LIGHT /** low light ISP (ANR) */ |
| 526 | }; | 526 | }; |
| 527 | 527 | ||
| 528 | struct ia_css_capture_config { | 528 | struct ia_css_capture_config { |
| 529 | enum ia_css_capture_mode mode; /**< Still capture mode */ | 529 | enum ia_css_capture_mode mode; /** Still capture mode */ |
| 530 | uint32_t enable_xnr; /**< Enable/disable XNR */ | 530 | uint32_t enable_xnr; /** Enable/disable XNR */ |
| 531 | uint32_t enable_raw_output; | 531 | uint32_t enable_raw_output; |
| 532 | bool enable_capture_pp_bli; /**< Enable capture_pp_bli mode */ | 532 | bool enable_capture_pp_bli; /** Enable capture_pp_bli mode */ |
| 533 | }; | 533 | }; |
| 534 | 534 | ||
| 535 | /** default settings for ia_css_capture_config structs */ | 535 | /* default settings for ia_css_capture_config structs */ |
| 536 | #define DEFAULT_CAPTURE_CONFIG \ | 536 | #define DEFAULT_CAPTURE_CONFIG \ |
| 537 | { \ | 537 | { \ |
| 538 | IA_CSS_CAPTURE_MODE_PRIMARY, /* mode (capture) */ \ | 538 | IA_CSS_CAPTURE_MODE_PRIMARY, /* mode (capture) */ \ |
| @@ -542,7 +542,7 @@ struct ia_css_capture_config { | |||
| 542 | } | 542 | } |
| 543 | 543 | ||
| 544 | 544 | ||
| 545 | /** ISP filter configuration. This is a collection of configurations | 545 | /* ISP filter configuration. This is a collection of configurations |
| 546 | * for each of the ISP filters (modules). | 546 | * for each of the ISP filters (modules). |
| 547 | * | 547 | * |
| 548 | * NOTE! The contents of all pointers is copied when get or set with the | 548 | * NOTE! The contents of all pointers is copied when get or set with the |
| @@ -557,98 +557,98 @@ struct ia_css_capture_config { | |||
| 557 | * ["ISP block", 2only] : ISP block is used only for ISP2. | 557 | * ["ISP block", 2only] : ISP block is used only for ISP2. |
| 558 | */ | 558 | */ |
| 559 | struct ia_css_isp_config { | 559 | struct ia_css_isp_config { |
| 560 | struct ia_css_wb_config *wb_config; /**< White Balance | 560 | struct ia_css_wb_config *wb_config; /** White Balance |
| 561 | [WB1, 1&2] */ | 561 | [WB1, 1&2] */ |
| 562 | struct ia_css_cc_config *cc_config; /**< Color Correction | 562 | struct ia_css_cc_config *cc_config; /** Color Correction |
| 563 | [CSC1, 1only] */ | 563 | [CSC1, 1only] */ |
| 564 | struct ia_css_tnr_config *tnr_config; /**< Temporal Noise Reduction | 564 | struct ia_css_tnr_config *tnr_config; /** Temporal Noise Reduction |
| 565 | [TNR1, 1&2] */ | 565 | [TNR1, 1&2] */ |
| 566 | struct ia_css_ecd_config *ecd_config; /**< Eigen Color Demosaicing | 566 | struct ia_css_ecd_config *ecd_config; /** Eigen Color Demosaicing |
| 567 | [DE2, 2only] */ | 567 | [DE2, 2only] */ |
| 568 | struct ia_css_ynr_config *ynr_config; /**< Y(Luma) Noise Reduction | 568 | struct ia_css_ynr_config *ynr_config; /** Y(Luma) Noise Reduction |
| 569 | [YNR2&YEE2, 2only] */ | 569 | [YNR2&YEE2, 2only] */ |
| 570 | struct ia_css_fc_config *fc_config; /**< Fringe Control | 570 | struct ia_css_fc_config *fc_config; /** Fringe Control |
| 571 | [FC2, 2only] */ | 571 | [FC2, 2only] */ |
| 572 | struct ia_css_formats_config *formats_config; /**< Formats Control for main output | 572 | struct ia_css_formats_config *formats_config; /** Formats Control for main output |
| 573 | [FORMATS, 1&2] */ | 573 | [FORMATS, 1&2] */ |
| 574 | struct ia_css_cnr_config *cnr_config; /**< Chroma Noise Reduction | 574 | struct ia_css_cnr_config *cnr_config; /** Chroma Noise Reduction |
| 575 | [CNR2, 2only] */ | 575 | [CNR2, 2only] */ |
| 576 | struct ia_css_macc_config *macc_config; /**< MACC | 576 | struct ia_css_macc_config *macc_config; /** MACC |
| 577 | [MACC2, 2only] */ | 577 | [MACC2, 2only] */ |
| 578 | struct ia_css_ctc_config *ctc_config; /**< Chroma Tone Control | 578 | struct ia_css_ctc_config *ctc_config; /** Chroma Tone Control |
| 579 | [CTC2, 2only] */ | 579 | [CTC2, 2only] */ |
| 580 | struct ia_css_aa_config *aa_config; /**< YUV Anti-Aliasing | 580 | struct ia_css_aa_config *aa_config; /** YUV Anti-Aliasing |
| 581 | [AA2, 2only] | 581 | [AA2, 2only] |
| 582 | (not used currently) */ | 582 | (not used currently) */ |
| 583 | struct ia_css_aa_config *baa_config; /**< Bayer Anti-Aliasing | 583 | struct ia_css_aa_config *baa_config; /** Bayer Anti-Aliasing |
| 584 | [BAA2, 1&2] */ | 584 | [BAA2, 1&2] */ |
| 585 | struct ia_css_ce_config *ce_config; /**< Chroma Enhancement | 585 | struct ia_css_ce_config *ce_config; /** Chroma Enhancement |
| 586 | [CE1, 1only] */ | 586 | [CE1, 1only] */ |
| 587 | struct ia_css_dvs_6axis_config *dvs_6axis_config; | 587 | struct ia_css_dvs_6axis_config *dvs_6axis_config; |
| 588 | struct ia_css_ob_config *ob_config; /**< Objective Black | 588 | struct ia_css_ob_config *ob_config; /** Objective Black |
| 589 | [OB1, 1&2] */ | 589 | [OB1, 1&2] */ |
| 590 | struct ia_css_dp_config *dp_config; /**< Defect Pixel Correction | 590 | struct ia_css_dp_config *dp_config; /** Defect Pixel Correction |
| 591 | [DPC1/DPC2, 1&2] */ | 591 | [DPC1/DPC2, 1&2] */ |
| 592 | struct ia_css_nr_config *nr_config; /**< Noise Reduction | 592 | struct ia_css_nr_config *nr_config; /** Noise Reduction |
| 593 | [BNR1&YNR1&CNR1, 1&2]*/ | 593 | [BNR1&YNR1&CNR1, 1&2]*/ |
| 594 | struct ia_css_ee_config *ee_config; /**< Edge Enhancement | 594 | struct ia_css_ee_config *ee_config; /** Edge Enhancement |
| 595 | [YEE1, 1&2] */ | 595 | [YEE1, 1&2] */ |
| 596 | struct ia_css_de_config *de_config; /**< Demosaic | 596 | struct ia_css_de_config *de_config; /** Demosaic |
| 597 | [DE1, 1only] */ | 597 | [DE1, 1only] */ |
| 598 | struct ia_css_gc_config *gc_config; /**< Gamma Correction (for YUV) | 598 | struct ia_css_gc_config *gc_config; /** Gamma Correction (for YUV) |
| 599 | [GC1, 1only] */ | 599 | [GC1, 1only] */ |
| 600 | struct ia_css_anr_config *anr_config; /**< Advanced Noise Reduction */ | 600 | struct ia_css_anr_config *anr_config; /** Advanced Noise Reduction */ |
| 601 | struct ia_css_3a_config *s3a_config; /**< 3A Statistics config */ | 601 | struct ia_css_3a_config *s3a_config; /** 3A Statistics config */ |
| 602 | struct ia_css_xnr_config *xnr_config; /**< eXtra Noise Reduction */ | 602 | struct ia_css_xnr_config *xnr_config; /** eXtra Noise Reduction */ |
| 603 | struct ia_css_dz_config *dz_config; /**< Digital Zoom */ | 603 | struct ia_css_dz_config *dz_config; /** Digital Zoom */ |
| 604 | struct ia_css_cc_config *yuv2rgb_cc_config; /**< Color Correction | 604 | struct ia_css_cc_config *yuv2rgb_cc_config; /** Color Correction |
| 605 | [CCM2, 2only] */ | 605 | [CCM2, 2only] */ |
| 606 | struct ia_css_cc_config *rgb2yuv_cc_config; /**< Color Correction | 606 | struct ia_css_cc_config *rgb2yuv_cc_config; /** Color Correction |
| 607 | [CSC2, 2only] */ | 607 | [CSC2, 2only] */ |
| 608 | struct ia_css_macc_table *macc_table; /**< MACC | 608 | struct ia_css_macc_table *macc_table; /** MACC |
| 609 | [MACC1/MACC2, 1&2]*/ | 609 | [MACC1/MACC2, 1&2]*/ |
| 610 | struct ia_css_gamma_table *gamma_table; /**< Gamma Correction (for YUV) | 610 | struct ia_css_gamma_table *gamma_table; /** Gamma Correction (for YUV) |
| 611 | [GC1, 1only] */ | 611 | [GC1, 1only] */ |
| 612 | struct ia_css_ctc_table *ctc_table; /**< Chroma Tone Control | 612 | struct ia_css_ctc_table *ctc_table; /** Chroma Tone Control |
| 613 | [CTC1, 1only] */ | 613 | [CTC1, 1only] */ |
| 614 | 614 | ||
| 615 | /** \deprecated */ | 615 | /* \deprecated */ |
| 616 | struct ia_css_xnr_table *xnr_table; /**< eXtra Noise Reduction | 616 | struct ia_css_xnr_table *xnr_table; /** eXtra Noise Reduction |
| 617 | [XNR1, 1&2] */ | 617 | [XNR1, 1&2] */ |
| 618 | struct ia_css_rgb_gamma_table *r_gamma_table;/**< sRGB Gamma Correction | 618 | struct ia_css_rgb_gamma_table *r_gamma_table;/** sRGB Gamma Correction |
| 619 | [GC2, 2only] */ | 619 | [GC2, 2only] */ |
| 620 | struct ia_css_rgb_gamma_table *g_gamma_table;/**< sRGB Gamma Correction | 620 | struct ia_css_rgb_gamma_table *g_gamma_table;/** sRGB Gamma Correction |
| 621 | [GC2, 2only] */ | 621 | [GC2, 2only] */ |
| 622 | struct ia_css_rgb_gamma_table *b_gamma_table;/**< sRGB Gamma Correction | 622 | struct ia_css_rgb_gamma_table *b_gamma_table;/** sRGB Gamma Correction |
| 623 | [GC2, 2only] */ | 623 | [GC2, 2only] */ |
| 624 | struct ia_css_vector *motion_vector; /**< For 2-axis DVS */ | 624 | struct ia_css_vector *motion_vector; /** For 2-axis DVS */ |
| 625 | struct ia_css_shading_table *shading_table; | 625 | struct ia_css_shading_table *shading_table; |
| 626 | struct ia_css_morph_table *morph_table; | 626 | struct ia_css_morph_table *morph_table; |
| 627 | struct ia_css_dvs_coefficients *dvs_coefs; /**< DVS 1.0 coefficients */ | 627 | struct ia_css_dvs_coefficients *dvs_coefs; /** DVS 1.0 coefficients */ |
| 628 | struct ia_css_dvs2_coefficients *dvs2_coefs; /**< DVS 2.0 coefficients */ | 628 | struct ia_css_dvs2_coefficients *dvs2_coefs; /** DVS 2.0 coefficients */ |
| 629 | struct ia_css_capture_config *capture_config; | 629 | struct ia_css_capture_config *capture_config; |
| 630 | struct ia_css_anr_thres *anr_thres; | 630 | struct ia_css_anr_thres *anr_thres; |
| 631 | /** @deprecated{Old shading settings, see bugzilla bz675 for details} */ | 631 | /* @deprecated{Old shading settings, see bugzilla bz675 for details} */ |
| 632 | struct ia_css_shading_settings *shading_settings; | 632 | struct ia_css_shading_settings *shading_settings; |
| 633 | struct ia_css_xnr3_config *xnr3_config; /**< eXtreme Noise Reduction v3 */ | 633 | struct ia_css_xnr3_config *xnr3_config; /** eXtreme Noise Reduction v3 */ |
| 634 | /** comment from Lasse: Be aware how this feature will affect coordinate | 634 | /* comment from Lasse: Be aware how this feature will affect coordinate |
| 635 | * normalization in different parts of the system. (e.g. face detection, | 635 | * normalization in different parts of the system. (e.g. face detection, |
| 636 | * touch focus, 3A statistics and windows of interest, shading correction, | 636 | * touch focus, 3A statistics and windows of interest, shading correction, |
| 637 | * DVS, GDC) from IQ tool level and application level down-to ISP FW level. | 637 | * DVS, GDC) from IQ tool level and application level down-to ISP FW level. |
| 638 | * the risk for regression is not in the individual blocks, but how they | 638 | * the risk for regression is not in the individual blocks, but how they |
| 639 | * integrate together. */ | 639 | * integrate together. */ |
| 640 | struct ia_css_output_config *output_config; /**< Main Output Mirroring, flipping */ | 640 | struct ia_css_output_config *output_config; /** Main Output Mirroring, flipping */ |
| 641 | 641 | ||
| 642 | #ifdef ISP2401 | 642 | #ifdef ISP2401 |
| 643 | struct ia_css_tnr3_kernel_config *tnr3_config; /**< TNR3 config */ | 643 | struct ia_css_tnr3_kernel_config *tnr3_config; /** TNR3 config */ |
| 644 | #endif | 644 | #endif |
| 645 | struct ia_css_scaler_config *scaler_config; /**< Skylake: scaler config (optional) */ | 645 | struct ia_css_scaler_config *scaler_config; /** Skylake: scaler config (optional) */ |
| 646 | struct ia_css_formats_config *formats_config_display;/**< Formats control for viewfinder/display output (optional) | 646 | struct ia_css_formats_config *formats_config_display;/** Formats control for viewfinder/display output (optional) |
| 647 | [OSYS, n/a] */ | 647 | [OSYS, n/a] */ |
| 648 | struct ia_css_output_config *output_config_display; /**< Viewfinder/display output mirroring, flipping (optional) */ | 648 | struct ia_css_output_config *output_config_display; /** Viewfinder/display output mirroring, flipping (optional) */ |
| 649 | 649 | ||
| 650 | struct ia_css_frame *output_frame; /**< Output frame the config is to be applied to (optional) */ | 650 | struct ia_css_frame *output_frame; /** Output frame the config is to be applied to (optional) */ |
| 651 | uint32_t isp_config_id; /**< Unique ID to track which config was actually applied to a particular frame */ | 651 | uint32_t isp_config_id; /** Unique ID to track which config was actually applied to a particular frame */ |
| 652 | }; | 652 | }; |
| 653 | 653 | ||
| 654 | #endif /* _IA_CSS_TYPES_H */ | 654 | #endif /* _IA_CSS_TYPES_H */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_version.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_version.h index 48c59896e847..1e88901e0b82 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_version.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_version.h | |||
| @@ -15,16 +15,16 @@ | |||
| 15 | #ifndef __IA_CSS_VERSION_H | 15 | #ifndef __IA_CSS_VERSION_H |
| 16 | #define __IA_CSS_VERSION_H | 16 | #define __IA_CSS_VERSION_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * This file contains functions to retrieve CSS-API version information | 19 | * This file contains functions to retrieve CSS-API version information |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | #include <ia_css_err.h> | 22 | #include <ia_css_err.h> |
| 23 | 23 | ||
| 24 | /** a common size for the version arrays */ | 24 | /* a common size for the version arrays */ |
| 25 | #define MAX_VERSION_SIZE 500 | 25 | #define MAX_VERSION_SIZE 500 |
| 26 | 26 | ||
| 27 | /** @brief Retrieves the current CSS version | 27 | /* @brief Retrieves the current CSS version |
| 28 | * @param[out] version A pointer to a buffer where to put the generated | 28 | * @param[out] version A pointer to a buffer where to put the generated |
| 29 | * version string. NULL is ignored. | 29 | * version string. NULL is ignored. |
| 30 | * @param[in] max_size Size of the version buffer. If version string | 30 | * @param[in] max_size Size of the version buffer. If version string |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/aa/aa_2/ia_css_aa2_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/aa/aa_2/ia_css_aa2_types.h index 834eedbbeeff..0b95bf9b9aaf 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/aa/aa_2/ia_css_aa2_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/aa/aa_2/ia_css_aa2_types.h | |||
| @@ -15,12 +15,12 @@ | |||
| 15 | #ifndef __IA_CSS_AA2_TYPES_H | 15 | #ifndef __IA_CSS_AA2_TYPES_H |
| 16 | #define __IA_CSS_AA2_TYPES_H | 16 | #define __IA_CSS_AA2_TYPES_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * CSS-API header file for Anti-Aliasing parameters. | 19 | * CSS-API header file for Anti-Aliasing parameters. |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | 22 | ||
| 23 | /** Anti-Aliasing configuration. | 23 | /* Anti-Aliasing configuration. |
| 24 | * | 24 | * |
| 25 | * This structure is used both for YUV AA and Bayer AA. | 25 | * This structure is used both for YUV AA and Bayer AA. |
| 26 | * | 26 | * |
| @@ -39,7 +39,7 @@ | |||
| 39 | * ISP2: BAA2 is used. | 39 | * ISP2: BAA2 is used. |
| 40 | */ | 40 | */ |
| 41 | struct ia_css_aa_config { | 41 | struct ia_css_aa_config { |
| 42 | uint16_t strength; /**< Strength of the filter. | 42 | uint16_t strength; /** Strength of the filter. |
| 43 | u0.13, [0,8191], | 43 | u0.13, [0,8191], |
| 44 | default/ineffective 0 */ | 44 | default/ineffective 0 */ |
| 45 | }; | 45 | }; |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/anr/anr_1.0/ia_css_anr_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/anr/anr_1.0/ia_css_anr_types.h index e205574098f2..dc317a857369 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/anr/anr_1.0/ia_css_anr_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/anr/anr_1.0/ia_css_anr_types.h | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | #ifndef __IA_CSS_ANR_TYPES_H | 15 | #ifndef __IA_CSS_ANR_TYPES_H |
| 16 | #define __IA_CSS_ANR_TYPES_H | 16 | #define __IA_CSS_ANR_TYPES_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * CSS-API header file for Advanced Noise Reduction kernel v1 | 19 | * CSS-API header file for Advanced Noise Reduction kernel v1 |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| @@ -23,11 +23,11 @@ | |||
| 23 | #define ANR_BPP 10 | 23 | #define ANR_BPP 10 |
| 24 | #define ANR_ELEMENT_BITS ((CEIL_DIV(ANR_BPP, 8))*8) | 24 | #define ANR_ELEMENT_BITS ((CEIL_DIV(ANR_BPP, 8))*8) |
| 25 | 25 | ||
| 26 | /** Advanced Noise Reduction configuration. | 26 | /* Advanced Noise Reduction configuration. |
| 27 | * This is also known as Low-Light. | 27 | * This is also known as Low-Light. |
| 28 | */ | 28 | */ |
| 29 | struct ia_css_anr_config { | 29 | struct ia_css_anr_config { |
| 30 | int32_t threshold; /**< Threshold */ | 30 | int32_t threshold; /** Threshold */ |
| 31 | int32_t thresholds[4*4*4]; | 31 | int32_t thresholds[4*4*4]; |
| 32 | int32_t factors[3]; | 32 | int32_t factors[3]; |
| 33 | }; | 33 | }; |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/anr/anr_2/ia_css_anr2_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/anr/anr_2/ia_css_anr2_types.h index 3832ada433ec..9b611315392c 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/anr/anr_2/ia_css_anr2_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/anr/anr_2/ia_css_anr2_types.h | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | #ifndef __IA_CSS_ANR2_TYPES_H | 15 | #ifndef __IA_CSS_ANR2_TYPES_H |
| 16 | #define __IA_CSS_ANR2_TYPES_H | 16 | #define __IA_CSS_ANR2_TYPES_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * CSS-API header file for Advanced Noise Reduction kernel v2 | 19 | * CSS-API header file for Advanced Noise Reduction kernel v2 |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| @@ -23,7 +23,7 @@ | |||
| 23 | 23 | ||
| 24 | #define ANR_PARAM_SIZE 13 | 24 | #define ANR_PARAM_SIZE 13 |
| 25 | 25 | ||
| 26 | /** Advanced Noise Reduction (ANR) thresholds */ | 26 | /* Advanced Noise Reduction (ANR) thresholds */ |
| 27 | struct ia_css_anr_thres { | 27 | struct ia_css_anr_thres { |
| 28 | int16_t data[13*64]; | 28 | int16_t data[13*64]; |
| 29 | }; | 29 | }; |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/anr/anr_2/ia_css_anr_param.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/anr/anr_2/ia_css_anr_param.h index 4a289853367a..312141793fd2 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/anr/anr_2/ia_css_anr_param.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/anr/anr_2/ia_css_anr_param.h | |||
| @@ -18,7 +18,7 @@ | |||
| 18 | #include "vmem.h" | 18 | #include "vmem.h" |
| 19 | #include "ia_css_anr2_types.h" | 19 | #include "ia_css_anr2_types.h" |
| 20 | 20 | ||
| 21 | /** Advanced Noise Reduction (ANR) thresholds */ | 21 | /* Advanced Noise Reduction (ANR) thresholds */ |
| 22 | 22 | ||
| 23 | struct ia_css_isp_anr2_params { | 23 | struct ia_css_isp_anr2_params { |
| 24 | VMEM_ARRAY(data, ANR_PARAM_SIZE*ISP_VEC_NELEMS); | 24 | VMEM_ARRAY(data, ANR_PARAM_SIZE*ISP_VEC_NELEMS); |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/bayer_ls/bayer_ls_1.0/ia_css_bayer_ls_param.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/bayer_ls/bayer_ls_1.0/ia_css_bayer_ls_param.h index 75ca7606b95c..a0d355454aa3 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/bayer_ls/bayer_ls_1.0/ia_css_bayer_ls_param.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/bayer_ls/bayer_ls_1.0/ia_css_bayer_ls_param.h | |||
| @@ -27,7 +27,7 @@ | |||
| 27 | #define BAYER_QUAD_HEIGHT 2 | 27 | #define BAYER_QUAD_HEIGHT 2 |
| 28 | #define NOF_BAYER_VECTORS 4 | 28 | #define NOF_BAYER_VECTORS 4 |
| 29 | 29 | ||
| 30 | /** bayer load/store */ | 30 | /* bayer load/store */ |
| 31 | struct sh_css_isp_bayer_ls_isp_config { | 31 | struct sh_css_isp_bayer_ls_isp_config { |
| 32 | uint32_t base_address[NUM_BAYER_LS]; | 32 | uint32_t base_address[NUM_BAYER_LS]; |
| 33 | uint32_t width[NUM_BAYER_LS]; | 33 | uint32_t width[NUM_BAYER_LS]; |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/bh/bh_2/ia_css_bh_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/bh/bh_2/ia_css_bh_types.h index 9ae27a9e0baa..ec1688e7352d 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/bh/bh_2/ia_css_bh_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/bh/bh_2/ia_css_bh_types.h | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | #ifndef __IA_CSS_BH_TYPES_H | 15 | #ifndef __IA_CSS_BH_TYPES_H |
| 16 | #define __IA_CSS_BH_TYPES_H | 16 | #define __IA_CSS_BH_TYPES_H |
| 17 | 17 | ||
| 18 | /** Number of elements in the BH table. | 18 | /* Number of elements in the BH table. |
| 19 | * Should be consistent with hmem.h | 19 | * Should be consistent with hmem.h |
| 20 | */ | 20 | */ |
| 21 | #define IA_CSS_HMEM_BH_TABLE_SIZE ISP_HIST_DEPTH | 21 | #define IA_CSS_HMEM_BH_TABLE_SIZE ISP_HIST_DEPTH |
| @@ -27,7 +27,7 @@ | |||
| 27 | #define BH_COLOR_Y (3) | 27 | #define BH_COLOR_Y (3) |
| 28 | #define BH_COLOR_NUM (4) | 28 | #define BH_COLOR_NUM (4) |
| 29 | 29 | ||
| 30 | /** BH table */ | 30 | /* BH table */ |
| 31 | struct ia_css_bh_table { | 31 | struct ia_css_bh_table { |
| 32 | uint32_t hmem[ISP_HIST_COMPONENTS][IA_CSS_HMEM_BH_UNIT_SIZE]; | 32 | uint32_t hmem[ISP_HIST_COMPONENTS][IA_CSS_HMEM_BH_UNIT_SIZE]; |
| 33 | }; | 33 | }; |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/bnlm/ia_css_bnlm_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/bnlm/ia_css_bnlm_types.h index 219fb835cb26..87e0f19c856b 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/bnlm/ia_css_bnlm_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/bnlm/ia_css_bnlm_types.h | |||
| @@ -15,13 +15,13 @@ | |||
| 15 | #ifndef __IA_CSS_BNLM_TYPES_H | 15 | #ifndef __IA_CSS_BNLM_TYPES_H |
| 16 | #define __IA_CSS_BNLM_TYPES_H | 16 | #define __IA_CSS_BNLM_TYPES_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * CSS-API header file for Bayer Non-Linear Mean parameters. | 19 | * CSS-API header file for Bayer Non-Linear Mean parameters. |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | #include "type_support.h" /* int32_t */ | 22 | #include "type_support.h" /* int32_t */ |
| 23 | 23 | ||
| 24 | /** Bayer Non-Linear Mean configuration | 24 | /* Bayer Non-Linear Mean configuration |
| 25 | * | 25 | * |
| 26 | * \brief BNLM public parameters. | 26 | * \brief BNLM public parameters. |
| 27 | * \details Struct with all parameters for the BNLM kernel that can be set | 27 | * \details Struct with all parameters for the BNLM kernel that can be set |
| @@ -30,16 +30,16 @@ | |||
| 30 | * ISP2.6.1: BNLM is used. | 30 | * ISP2.6.1: BNLM is used. |
| 31 | */ | 31 | */ |
| 32 | struct ia_css_bnlm_config { | 32 | struct ia_css_bnlm_config { |
| 33 | bool rad_enable; /**< Enable a radial dependency in a weight calculation */ | 33 | bool rad_enable; /** Enable a radial dependency in a weight calculation */ |
| 34 | int32_t rad_x_origin; /**< Initial x coordinate for a radius calculation */ | 34 | int32_t rad_x_origin; /** Initial x coordinate for a radius calculation */ |
| 35 | int32_t rad_y_origin; /**< Initial x coordinate for a radius calculation */ | 35 | int32_t rad_y_origin; /** Initial x coordinate for a radius calculation */ |
| 36 | /* a threshold for average of weights if this < Th, do not denoise pixel */ | 36 | /* a threshold for average of weights if this < Th, do not denoise pixel */ |
| 37 | int32_t avg_min_th; | 37 | int32_t avg_min_th; |
| 38 | /* minimum weight for denoising if max < th, do not denoise pixel */ | 38 | /* minimum weight for denoising if max < th, do not denoise pixel */ |
| 39 | int32_t max_min_th; | 39 | int32_t max_min_th; |
| 40 | 40 | ||
| 41 | /**@{*/ | 41 | /**@{*/ |
| 42 | /** Coefficient for approximation, in the form of (1 + x / N)^N, | 42 | /* Coefficient for approximation, in the form of (1 + x / N)^N, |
| 43 | * that fits the first-order exp() to default exp_lut in BNLM sheet | 43 | * that fits the first-order exp() to default exp_lut in BNLM sheet |
| 44 | * */ | 44 | * */ |
| 45 | int32_t exp_coeff_a; | 45 | int32_t exp_coeff_a; |
| @@ -48,55 +48,55 @@ struct ia_css_bnlm_config { | |||
| 48 | uint32_t exp_exponent; | 48 | uint32_t exp_exponent; |
| 49 | /**@}*/ | 49 | /**@}*/ |
| 50 | 50 | ||
| 51 | int32_t nl_th[3]; /**< Detail thresholds */ | 51 | int32_t nl_th[3]; /** Detail thresholds */ |
| 52 | 52 | ||
| 53 | /** Index for n-th maximum candidate weight for each detail group */ | 53 | /* Index for n-th maximum candidate weight for each detail group */ |
| 54 | int32_t match_quality_max_idx[4]; | 54 | int32_t match_quality_max_idx[4]; |
| 55 | 55 | ||
| 56 | /**@{*/ | 56 | /**@{*/ |
| 57 | /** A lookup table for 1/sqrt(1+mu) approximation */ | 57 | /* A lookup table for 1/sqrt(1+mu) approximation */ |
| 58 | int32_t mu_root_lut_thr[15]; | 58 | int32_t mu_root_lut_thr[15]; |
| 59 | int32_t mu_root_lut_val[16]; | 59 | int32_t mu_root_lut_val[16]; |
| 60 | /**@}*/ | 60 | /**@}*/ |
| 61 | /**@{*/ | 61 | /**@{*/ |
| 62 | /** A lookup table for SAD normalization */ | 62 | /* A lookup table for SAD normalization */ |
| 63 | int32_t sad_norm_lut_thr[15]; | 63 | int32_t sad_norm_lut_thr[15]; |
| 64 | int32_t sad_norm_lut_val[16]; | 64 | int32_t sad_norm_lut_val[16]; |
| 65 | /**@}*/ | 65 | /**@}*/ |
| 66 | /**@{*/ | 66 | /**@{*/ |
| 67 | /** A lookup table that models a weight's dependency on textures */ | 67 | /* A lookup table that models a weight's dependency on textures */ |
| 68 | int32_t sig_detail_lut_thr[15]; | 68 | int32_t sig_detail_lut_thr[15]; |
| 69 | int32_t sig_detail_lut_val[16]; | 69 | int32_t sig_detail_lut_val[16]; |
| 70 | /**@}*/ | 70 | /**@}*/ |
| 71 | /**@{*/ | 71 | /**@{*/ |
| 72 | /** A lookup table that models a weight's dependency on a pixel's radial distance */ | 72 | /* A lookup table that models a weight's dependency on a pixel's radial distance */ |
| 73 | int32_t sig_rad_lut_thr[15]; | 73 | int32_t sig_rad_lut_thr[15]; |
| 74 | int32_t sig_rad_lut_val[16]; | 74 | int32_t sig_rad_lut_val[16]; |
| 75 | /**@}*/ | 75 | /**@}*/ |
| 76 | /**@{*/ | 76 | /**@{*/ |
| 77 | /** A lookup table to control denoise power depending on a pixel's radial distance */ | 77 | /* A lookup table to control denoise power depending on a pixel's radial distance */ |
| 78 | int32_t rad_pow_lut_thr[15]; | 78 | int32_t rad_pow_lut_thr[15]; |
| 79 | int32_t rad_pow_lut_val[16]; | 79 | int32_t rad_pow_lut_val[16]; |
| 80 | /**@}*/ | 80 | /**@}*/ |
| 81 | /**@{*/ | 81 | /**@{*/ |
| 82 | /** Non linear transfer functions to calculate the blending coefficient depending on detail group */ | 82 | /* Non linear transfer functions to calculate the blending coefficient depending on detail group */ |
| 83 | /** detail group 0 */ | 83 | /* detail group 0 */ |
| 84 | /**@{*/ | 84 | /**@{*/ |
| 85 | int32_t nl_0_lut_thr[15]; | 85 | int32_t nl_0_lut_thr[15]; |
| 86 | int32_t nl_0_lut_val[16]; | 86 | int32_t nl_0_lut_val[16]; |
| 87 | /**@}*/ | 87 | /**@}*/ |
| 88 | /**@{*/ | 88 | /**@{*/ |
| 89 | /** detail group 1 */ | 89 | /* detail group 1 */ |
| 90 | int32_t nl_1_lut_thr[15]; | 90 | int32_t nl_1_lut_thr[15]; |
| 91 | int32_t nl_1_lut_val[16]; | 91 | int32_t nl_1_lut_val[16]; |
| 92 | /**@}*/ | 92 | /**@}*/ |
| 93 | /**@{*/ | 93 | /**@{*/ |
| 94 | /** detail group 2 */ | 94 | /* detail group 2 */ |
| 95 | int32_t nl_2_lut_thr[15]; | 95 | int32_t nl_2_lut_thr[15]; |
| 96 | int32_t nl_2_lut_val[16]; | 96 | int32_t nl_2_lut_val[16]; |
| 97 | /**@}*/ | 97 | /**@}*/ |
| 98 | /**@{*/ | 98 | /**@{*/ |
| 99 | /** detail group 3 */ | 99 | /* detail group 3 */ |
| 100 | int32_t nl_3_lut_thr[15]; | 100 | int32_t nl_3_lut_thr[15]; |
| 101 | int32_t nl_3_lut_val[16]; | 101 | int32_t nl_3_lut_val[16]; |
| 102 | /**@}*/ | 102 | /**@}*/ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/bnr/bnr2_2/ia_css_bnr2_2_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/bnr/bnr2_2/ia_css_bnr2_2_types.h index be80f705d8a1..551bd0ed3bac 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/bnr/bnr2_2/ia_css_bnr2_2_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/bnr/bnr2_2/ia_css_bnr2_2_types.h | |||
| @@ -15,13 +15,13 @@ | |||
| 15 | #ifndef __IA_CSS_BNR2_2_TYPES_H | 15 | #ifndef __IA_CSS_BNR2_2_TYPES_H |
| 16 | #define __IA_CSS_BNR2_2_TYPES_H | 16 | #define __IA_CSS_BNR2_2_TYPES_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * CSS-API header file for Bayer Noise Reduction parameters. | 19 | * CSS-API header file for Bayer Noise Reduction parameters. |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | #include "type_support.h" /* int32_t */ | 22 | #include "type_support.h" /* int32_t */ |
| 23 | 23 | ||
| 24 | /** Bayer Noise Reduction 2.2 configuration | 24 | /* Bayer Noise Reduction 2.2 configuration |
| 25 | * | 25 | * |
| 26 | * \brief BNR2_2 public parameters. | 26 | * \brief BNR2_2 public parameters. |
| 27 | * \details Struct with all parameters for the BNR2.2 kernel that can be set | 27 | * \details Struct with all parameters for the BNR2.2 kernel that can be set |
| @@ -31,41 +31,41 @@ | |||
| 31 | */ | 31 | */ |
| 32 | struct ia_css_bnr2_2_config { | 32 | struct ia_css_bnr2_2_config { |
| 33 | /**@{*/ | 33 | /**@{*/ |
| 34 | /** Directional variance gain for R/G/B components in dark region */ | 34 | /* Directional variance gain for R/G/B components in dark region */ |
| 35 | int32_t d_var_gain_r; | 35 | int32_t d_var_gain_r; |
| 36 | int32_t d_var_gain_g; | 36 | int32_t d_var_gain_g; |
| 37 | int32_t d_var_gain_b; | 37 | int32_t d_var_gain_b; |
| 38 | /**@}*/ | 38 | /**@}*/ |
| 39 | /**@{*/ | 39 | /**@{*/ |
| 40 | /** Slope of Directional variance gain between dark and bright region */ | 40 | /* Slope of Directional variance gain between dark and bright region */ |
| 41 | int32_t d_var_gain_slope_r; | 41 | int32_t d_var_gain_slope_r; |
| 42 | int32_t d_var_gain_slope_g; | 42 | int32_t d_var_gain_slope_g; |
| 43 | int32_t d_var_gain_slope_b; | 43 | int32_t d_var_gain_slope_b; |
| 44 | /**@}*/ | 44 | /**@}*/ |
| 45 | /**@{*/ | 45 | /**@{*/ |
| 46 | /** Non-Directional variance gain for R/G/B components in dark region */ | 46 | /* Non-Directional variance gain for R/G/B components in dark region */ |
| 47 | int32_t n_var_gain_r; | 47 | int32_t n_var_gain_r; |
| 48 | int32_t n_var_gain_g; | 48 | int32_t n_var_gain_g; |
| 49 | int32_t n_var_gain_b; | 49 | int32_t n_var_gain_b; |
| 50 | /**@}*/ | 50 | /**@}*/ |
| 51 | /**@{*/ | 51 | /**@{*/ |
| 52 | /** Slope of Non-Directional variance gain between dark and bright region */ | 52 | /* Slope of Non-Directional variance gain between dark and bright region */ |
| 53 | int32_t n_var_gain_slope_r; | 53 | int32_t n_var_gain_slope_r; |
| 54 | int32_t n_var_gain_slope_g; | 54 | int32_t n_var_gain_slope_g; |
| 55 | int32_t n_var_gain_slope_b; | 55 | int32_t n_var_gain_slope_b; |
| 56 | /**@}*/ | 56 | /**@}*/ |
| 57 | 57 | ||
| 58 | int32_t dir_thres; /**< Threshold for directional filtering */ | 58 | int32_t dir_thres; /** Threshold for directional filtering */ |
| 59 | int32_t dir_thres_w; /**< Threshold width for directional filtering */ | 59 | int32_t dir_thres_w; /** Threshold width for directional filtering */ |
| 60 | int32_t var_offset_coef; /**< Variance offset coefficient */ | 60 | int32_t var_offset_coef; /** Variance offset coefficient */ |
| 61 | int32_t dir_gain; /**< Gain for directional coefficient */ | 61 | int32_t dir_gain; /** Gain for directional coefficient */ |
| 62 | int32_t detail_gain; /**< Gain for low contrast texture control */ | 62 | int32_t detail_gain; /** Gain for low contrast texture control */ |
| 63 | int32_t detail_gain_divisor; /**< Gain divisor for low contrast texture control */ | 63 | int32_t detail_gain_divisor; /** Gain divisor for low contrast texture control */ |
| 64 | int32_t detail_level_offset; /**< Bias value for low contrast texture control */ | 64 | int32_t detail_level_offset; /** Bias value for low contrast texture control */ |
| 65 | int32_t d_var_th_min; /**< Minimum clipping value for directional variance*/ | 65 | int32_t d_var_th_min; /** Minimum clipping value for directional variance*/ |
| 66 | int32_t d_var_th_max; /**< Maximum clipping value for diretional variance*/ | 66 | int32_t d_var_th_max; /** Maximum clipping value for diretional variance*/ |
| 67 | int32_t n_var_th_min; /**< Minimum clipping value for non-directional variance*/ | 67 | int32_t n_var_th_min; /** Minimum clipping value for non-directional variance*/ |
| 68 | int32_t n_var_th_max; /**< Maximum clipping value for non-directional variance*/ | 68 | int32_t n_var_th_max; /** Maximum clipping value for non-directional variance*/ |
| 69 | }; | 69 | }; |
| 70 | 70 | ||
| 71 | #endif /* __IA_CSS_BNR2_2_TYPES_H */ | 71 | #endif /* __IA_CSS_BNR2_2_TYPES_H */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/cnr/cnr_2/ia_css_cnr2_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/cnr/cnr_2/ia_css_cnr2_types.h index 6df6c2be9a70..3ebc069d8ada 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/cnr/cnr_2/ia_css_cnr2_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/cnr/cnr_2/ia_css_cnr2_types.h | |||
| @@ -15,11 +15,11 @@ | |||
| 15 | #ifndef __IA_CSS_CNR2_TYPES_H | 15 | #ifndef __IA_CSS_CNR2_TYPES_H |
| 16 | #define __IA_CSS_CNR2_TYPES_H | 16 | #define __IA_CSS_CNR2_TYPES_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * CSS-API header file for Chroma Noise Reduction (CNR) parameters | 19 | * CSS-API header file for Chroma Noise Reduction (CNR) parameters |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | /** Chroma Noise Reduction configuration. | 22 | /* Chroma Noise Reduction configuration. |
| 23 | * | 23 | * |
| 24 | * Small sensitivity of edge means strong smoothness and NR performance. | 24 | * Small sensitivity of edge means strong smoothness and NR performance. |
| 25 | * If you see blurred color on vertical edges, | 25 | * If you see blurred color on vertical edges, |
| @@ -33,21 +33,21 @@ | |||
| 33 | * ISP2: CNR2 is used for Still. | 33 | * ISP2: CNR2 is used for Still. |
| 34 | */ | 34 | */ |
| 35 | struct ia_css_cnr_config { | 35 | struct ia_css_cnr_config { |
| 36 | uint16_t coring_u; /**< Coring level of U. | 36 | uint16_t coring_u; /** Coring level of U. |
| 37 | u0.13, [0,8191], default/ineffective 0 */ | 37 | u0.13, [0,8191], default/ineffective 0 */ |
| 38 | uint16_t coring_v; /**< Coring level of V. | 38 | uint16_t coring_v; /** Coring level of V. |
| 39 | u0.13, [0,8191], default/ineffective 0 */ | 39 | u0.13, [0,8191], default/ineffective 0 */ |
| 40 | uint16_t sense_gain_vy; /**< Sensitivity of horizontal edge of Y. | 40 | uint16_t sense_gain_vy; /** Sensitivity of horizontal edge of Y. |
| 41 | u13.0, [0,8191], default 100, ineffective 8191 */ | 41 | u13.0, [0,8191], default 100, ineffective 8191 */ |
| 42 | uint16_t sense_gain_vu; /**< Sensitivity of horizontal edge of U. | 42 | uint16_t sense_gain_vu; /** Sensitivity of horizontal edge of U. |
| 43 | u13.0, [0,8191], default 100, ineffective 8191 */ | 43 | u13.0, [0,8191], default 100, ineffective 8191 */ |
| 44 | uint16_t sense_gain_vv; /**< Sensitivity of horizontal edge of V. | 44 | uint16_t sense_gain_vv; /** Sensitivity of horizontal edge of V. |
| 45 | u13.0, [0,8191], default 100, ineffective 8191 */ | 45 | u13.0, [0,8191], default 100, ineffective 8191 */ |
| 46 | uint16_t sense_gain_hy; /**< Sensitivity of vertical edge of Y. | 46 | uint16_t sense_gain_hy; /** Sensitivity of vertical edge of Y. |
| 47 | u13.0, [0,8191], default 50, ineffective 8191 */ | 47 | u13.0, [0,8191], default 50, ineffective 8191 */ |
| 48 | uint16_t sense_gain_hu; /**< Sensitivity of vertical edge of U. | 48 | uint16_t sense_gain_hu; /** Sensitivity of vertical edge of U. |
| 49 | u13.0, [0,8191], default 50, ineffective 8191 */ | 49 | u13.0, [0,8191], default 50, ineffective 8191 */ |
| 50 | uint16_t sense_gain_hv; /**< Sensitivity of vertical edge of V. | 50 | uint16_t sense_gain_hv; /** Sensitivity of vertical edge of V. |
| 51 | u13.0, [0,8191], default 50, ineffective 8191 */ | 51 | u13.0, [0,8191], default 50, ineffective 8191 */ |
| 52 | }; | 52 | }; |
| 53 | 53 | ||
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/conversion/conversion_1.0/ia_css_conversion_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/conversion/conversion_1.0/ia_css_conversion_types.h index 3f11442500f0..47a38fd65950 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/conversion/conversion_1.0/ia_css_conversion_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/conversion/conversion_1.0/ia_css_conversion_types.h | |||
| @@ -23,10 +23,10 @@ | |||
| 23 | * | 23 | * |
| 24 | */ | 24 | */ |
| 25 | struct ia_css_conversion_config { | 25 | struct ia_css_conversion_config { |
| 26 | uint32_t en; /**< en parameter */ | 26 | uint32_t en; /** en parameter */ |
| 27 | uint32_t dummy0; /**< dummy0 dummy parameter 0 */ | 27 | uint32_t dummy0; /** dummy0 dummy parameter 0 */ |
| 28 | uint32_t dummy1; /**< dummy1 dummy parameter 1 */ | 28 | uint32_t dummy1; /** dummy1 dummy parameter 1 */ |
| 29 | uint32_t dummy2; /**< dummy2 dummy parameter 2 */ | 29 | uint32_t dummy2; /** dummy2 dummy parameter 2 */ |
| 30 | }; | 30 | }; |
| 31 | 31 | ||
| 32 | #endif /* __IA_CSS_CONVERSION_TYPES_H */ | 32 | #endif /* __IA_CSS_CONVERSION_TYPES_H */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/crop/crop_1.0/ia_css_crop_param.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/crop/crop_1.0/ia_css_crop_param.h index 8bfc8dad37a8..0f1812cdd92a 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/crop/crop_1.0/ia_css_crop_param.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/crop/crop_1.0/ia_css_crop_param.h | |||
| @@ -19,7 +19,7 @@ | |||
| 19 | #include "dma.h" | 19 | #include "dma.h" |
| 20 | #include "sh_css_internal.h" /* sh_css_crop_pos */ | 20 | #include "sh_css_internal.h" /* sh_css_crop_pos */ |
| 21 | 21 | ||
| 22 | /** Crop frame */ | 22 | /* Crop frame */ |
| 23 | struct sh_css_isp_crop_isp_config { | 23 | struct sh_css_isp_crop_isp_config { |
| 24 | uint32_t width_a_over_b; | 24 | uint32_t width_a_over_b; |
| 25 | struct dma_port_config port_b; | 25 | struct dma_port_config port_b; |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/crop/crop_1.0/ia_css_crop_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/crop/crop_1.0/ia_css_crop_types.h index 8091ad4d4602..b5d454225f89 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/crop/crop_1.0/ia_css_crop_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/crop/crop_1.0/ia_css_crop_types.h | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | #ifndef __IA_CSS_CROP_TYPES_H | 15 | #ifndef __IA_CSS_CROP_TYPES_H |
| 16 | #define __IA_CSS_CROP_TYPES_H | 16 | #define __IA_CSS_CROP_TYPES_H |
| 17 | 17 | ||
| 18 | /** Crop frame | 18 | /* Crop frame |
| 19 | * | 19 | * |
| 20 | * ISP block: crop frame | 20 | * ISP block: crop frame |
| 21 | */ | 21 | */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/csc/csc_1.0/ia_css_csc_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/csc/csc_1.0/ia_css_csc_types.h index 54ced072467f..10404380c637 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/csc/csc_1.0/ia_css_csc_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/csc/csc_1.0/ia_css_csc_types.h | |||
| @@ -15,11 +15,11 @@ | |||
| 15 | #ifndef __IA_CSS_CSC_TYPES_H | 15 | #ifndef __IA_CSS_CSC_TYPES_H |
| 16 | #define __IA_CSS_CSC_TYPES_H | 16 | #define __IA_CSS_CSC_TYPES_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * CSS-API header file for Color Space Conversion parameters. | 19 | * CSS-API header file for Color Space Conversion parameters. |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | /** Color Correction configuration. | 22 | /* Color Correction configuration. |
| 23 | * | 23 | * |
| 24 | * This structure is used for 3 cases. | 24 | * This structure is used for 3 cases. |
| 25 | * ("YCgCo" is the output format of Demosaic.) | 25 | * ("YCgCo" is the output format of Demosaic.) |
| @@ -68,9 +68,9 @@ | |||
| 68 | * 4096 -3430 -666 | 68 | * 4096 -3430 -666 |
| 69 | */ | 69 | */ |
| 70 | struct ia_css_cc_config { | 70 | struct ia_css_cc_config { |
| 71 | uint32_t fraction_bits;/**< Fractional bits of matrix. | 71 | uint32_t fraction_bits;/** Fractional bits of matrix. |
| 72 | u8.0, [0,13] */ | 72 | u8.0, [0,13] */ |
| 73 | int32_t matrix[3 * 3]; /**< Conversion matrix. | 73 | int32_t matrix[3 * 3]; /** Conversion matrix. |
| 74 | s[13-fraction_bits].[fraction_bits], | 74 | s[13-fraction_bits].[fraction_bits], |
| 75 | [-8192,8191] */ | 75 | [-8192,8191] */ |
| 76 | }; | 76 | }; |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ctc/ctc2/ia_css_ctc2_param.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ctc/ctc2/ia_css_ctc2_param.h index c66e823618f6..ad7040c9d7cb 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ctc/ctc2/ia_css_ctc2_param.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ctc/ctc2/ia_css_ctc2_param.h | |||
| @@ -22,11 +22,11 @@ | |||
| 22 | 22 | ||
| 23 | /*VMEM Luma params*/ | 23 | /*VMEM Luma params*/ |
| 24 | struct ia_css_isp_ctc2_vmem_params { | 24 | struct ia_css_isp_ctc2_vmem_params { |
| 25 | /**< Gains by Y(Luma) at Y = 0.0,Y_X1, Y_X2, Y_X3, Y_X4*/ | 25 | /** Gains by Y(Luma) at Y = 0.0,Y_X1, Y_X2, Y_X3, Y_X4*/ |
| 26 | VMEM_ARRAY(y_x, ISP_VEC_NELEMS); | 26 | VMEM_ARRAY(y_x, ISP_VEC_NELEMS); |
| 27 | /** kneepoints by Y(Luma) 0.0, y_x1, y_x2, y _x3, y_x4*/ | 27 | /* kneepoints by Y(Luma) 0.0, y_x1, y_x2, y _x3, y_x4*/ |
| 28 | VMEM_ARRAY(y_y, ISP_VEC_NELEMS); | 28 | VMEM_ARRAY(y_y, ISP_VEC_NELEMS); |
| 29 | /** Slopes of lines interconnecting | 29 | /* Slopes of lines interconnecting |
| 30 | * 0.0 -> y_x1 -> y_x2 -> y _x3 -> y_x4 -> 1.0*/ | 30 | * 0.0 -> y_x1 -> y_x2 -> y _x3 -> y_x4 -> 1.0*/ |
| 31 | VMEM_ARRAY(e_y_slope, ISP_VEC_NELEMS); | 31 | VMEM_ARRAY(e_y_slope, ISP_VEC_NELEMS); |
| 32 | }; | 32 | }; |
| @@ -34,15 +34,15 @@ struct ia_css_isp_ctc2_vmem_params { | |||
| 34 | /*DMEM Chroma params*/ | 34 | /*DMEM Chroma params*/ |
| 35 | struct ia_css_isp_ctc2_dmem_params { | 35 | struct ia_css_isp_ctc2_dmem_params { |
| 36 | 36 | ||
| 37 | /** Gains by UV(Chroma) under kneepoints uv_x0 and uv_x1*/ | 37 | /* Gains by UV(Chroma) under kneepoints uv_x0 and uv_x1*/ |
| 38 | int32_t uv_y0; | 38 | int32_t uv_y0; |
| 39 | int32_t uv_y1; | 39 | int32_t uv_y1; |
| 40 | 40 | ||
| 41 | /** Kneepoints by UV(Chroma)- uv_x0 and uv_x1*/ | 41 | /* Kneepoints by UV(Chroma)- uv_x0 and uv_x1*/ |
| 42 | int32_t uv_x0; | 42 | int32_t uv_x0; |
| 43 | int32_t uv_x1; | 43 | int32_t uv_x1; |
| 44 | 44 | ||
| 45 | /** Slope of line interconnecting uv_x0 -> uv_x1*/ | 45 | /* Slope of line interconnecting uv_x0 -> uv_x1*/ |
| 46 | int32_t uv_dydx; | 46 | int32_t uv_dydx; |
| 47 | 47 | ||
| 48 | }; | 48 | }; |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ctc/ctc2/ia_css_ctc2_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ctc/ctc2/ia_css_ctc2_types.h index 7b75f01e2ad2..1222cf33e851 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ctc/ctc2/ia_css_ctc2_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ctc/ctc2/ia_css_ctc2_types.h | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | #ifndef __IA_CSS_CTC2_TYPES_H | 15 | #ifndef __IA_CSS_CTC2_TYPES_H |
| 16 | #define __IA_CSS_CTC2_TYPES_H | 16 | #define __IA_CSS_CTC2_TYPES_H |
| 17 | 17 | ||
| 18 | /** Chroma Tone Control configuration. | 18 | /* Chroma Tone Control configuration. |
| 19 | * | 19 | * |
| 20 | * ISP block: CTC2 (CTC by polygonal approximation) | 20 | * ISP block: CTC2 (CTC by polygonal approximation) |
| 21 | * (ISP1: CTC1 (CTC by look-up table) is used.) | 21 | * (ISP1: CTC1 (CTC by look-up table) is used.) |
| @@ -24,7 +24,7 @@ | |||
| 24 | */ | 24 | */ |
| 25 | struct ia_css_ctc2_config { | 25 | struct ia_css_ctc2_config { |
| 26 | 26 | ||
| 27 | /**< Gains by Y(Luma) at Y =0.0,Y_X1, Y_X2, Y_X3, Y_X4 and Y_X5 | 27 | /** Gains by Y(Luma) at Y =0.0,Y_X1, Y_X2, Y_X3, Y_X4 and Y_X5 |
| 28 | * --default/ineffective value: 4096(0.5f) | 28 | * --default/ineffective value: 4096(0.5f) |
| 29 | */ | 29 | */ |
| 30 | int32_t y_y0; | 30 | int32_t y_y0; |
| @@ -33,19 +33,19 @@ struct ia_css_ctc2_config { | |||
| 33 | int32_t y_y3; | 33 | int32_t y_y3; |
| 34 | int32_t y_y4; | 34 | int32_t y_y4; |
| 35 | int32_t y_y5; | 35 | int32_t y_y5; |
| 36 | /** 1st-4th kneepoints by Y(Luma) --default/ineffective value:n/a | 36 | /* 1st-4th kneepoints by Y(Luma) --default/ineffective value:n/a |
| 37 | * requirement: 0.0 < y_x1 < y_x2 <y _x3 < y_x4 < 1.0 | 37 | * requirement: 0.0 < y_x1 < y_x2 <y _x3 < y_x4 < 1.0 |
| 38 | */ | 38 | */ |
| 39 | int32_t y_x1; | 39 | int32_t y_x1; |
| 40 | int32_t y_x2; | 40 | int32_t y_x2; |
| 41 | int32_t y_x3; | 41 | int32_t y_x3; |
| 42 | int32_t y_x4; | 42 | int32_t y_x4; |
| 43 | /** Gains by UV(Chroma) under threholds uv_x0 and uv_x1 | 43 | /* Gains by UV(Chroma) under threholds uv_x0 and uv_x1 |
| 44 | * --default/ineffective value: 4096(0.5f) | 44 | * --default/ineffective value: 4096(0.5f) |
| 45 | */ | 45 | */ |
| 46 | int32_t uv_y0; | 46 | int32_t uv_y0; |
| 47 | int32_t uv_y1; | 47 | int32_t uv_y1; |
| 48 | /** Minimum and Maximum Thresholds by UV(Chroma)- uv_x0 and uv_x1 | 48 | /* Minimum and Maximum Thresholds by UV(Chroma)- uv_x0 and uv_x1 |
| 49 | * --default/ineffective value: n/a | 49 | * --default/ineffective value: n/a |
| 50 | */ | 50 | */ |
| 51 | int32_t uv_x0; | 51 | int32_t uv_x0; |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ctc/ctc_1.0/ia_css_ctc_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ctc/ctc_1.0/ia_css_ctc_types.h index 1da215bb966d..4ac47ce10566 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ctc/ctc_1.0/ia_css_ctc_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ctc/ctc_1.0/ia_css_ctc_types.h | |||
| @@ -15,11 +15,11 @@ | |||
| 15 | #ifndef __IA_CSS_CTC_TYPES_H | 15 | #ifndef __IA_CSS_CTC_TYPES_H |
| 16 | #define __IA_CSS_CTC_TYPES_H | 16 | #define __IA_CSS_CTC_TYPES_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * CSS-API header file for Chroma Tone Control parameters. | 19 | * CSS-API header file for Chroma Tone Control parameters. |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | /** Fractional bits for CTC gain (used only for ISP1). | 22 | /* Fractional bits for CTC gain (used only for ISP1). |
| 23 | * | 23 | * |
| 24 | * IA_CSS_CTC_COEF_SHIFT(=13) includes not only the fractional bits | 24 | * IA_CSS_CTC_COEF_SHIFT(=13) includes not only the fractional bits |
| 25 | * of gain(=8), but also the bits(=5) to convert chroma | 25 | * of gain(=8), but also the bits(=5) to convert chroma |
| @@ -32,14 +32,14 @@ | |||
| 32 | */ | 32 | */ |
| 33 | #define IA_CSS_CTC_COEF_SHIFT 13 | 33 | #define IA_CSS_CTC_COEF_SHIFT 13 |
| 34 | 34 | ||
| 35 | /** Number of elements in the CTC table. */ | 35 | /* Number of elements in the CTC table. */ |
| 36 | #define IA_CSS_VAMEM_1_CTC_TABLE_SIZE_LOG2 10 | 36 | #define IA_CSS_VAMEM_1_CTC_TABLE_SIZE_LOG2 10 |
| 37 | /** Number of elements in the CTC table. */ | 37 | /* Number of elements in the CTC table. */ |
| 38 | #define IA_CSS_VAMEM_1_CTC_TABLE_SIZE (1U<<IA_CSS_VAMEM_1_CTC_TABLE_SIZE_LOG2) | 38 | #define IA_CSS_VAMEM_1_CTC_TABLE_SIZE (1U<<IA_CSS_VAMEM_1_CTC_TABLE_SIZE_LOG2) |
| 39 | 39 | ||
| 40 | /** Number of elements in the CTC table. */ | 40 | /* Number of elements in the CTC table. */ |
| 41 | #define IA_CSS_VAMEM_2_CTC_TABLE_SIZE_LOG2 8 | 41 | #define IA_CSS_VAMEM_2_CTC_TABLE_SIZE_LOG2 8 |
| 42 | /** Number of elements in the CTC table. */ | 42 | /* Number of elements in the CTC table. */ |
| 43 | #define IA_CSS_VAMEM_2_CTC_TABLE_SIZE ((1U<<IA_CSS_VAMEM_2_CTC_TABLE_SIZE_LOG2) + 1) | 43 | #define IA_CSS_VAMEM_2_CTC_TABLE_SIZE ((1U<<IA_CSS_VAMEM_2_CTC_TABLE_SIZE_LOG2) + 1) |
| 44 | 44 | ||
| 45 | enum ia_css_vamem_type { | 45 | enum ia_css_vamem_type { |
| @@ -47,44 +47,44 @@ enum ia_css_vamem_type { | |||
| 47 | IA_CSS_VAMEM_TYPE_2 | 47 | IA_CSS_VAMEM_TYPE_2 |
| 48 | }; | 48 | }; |
| 49 | 49 | ||
| 50 | /** Chroma Tone Control configuration. | 50 | /* Chroma Tone Control configuration. |
| 51 | * | 51 | * |
| 52 | * ISP block: CTC2 (CTC by polygonal line approximation) | 52 | * ISP block: CTC2 (CTC by polygonal line approximation) |
| 53 | * (ISP1: CTC1 (CTC by look-up table) is used.) | 53 | * (ISP1: CTC1 (CTC by look-up table) is used.) |
| 54 | * ISP2: CTC2 is used. | 54 | * ISP2: CTC2 is used. |
| 55 | */ | 55 | */ |
| 56 | struct ia_css_ctc_config { | 56 | struct ia_css_ctc_config { |
| 57 | uint16_t y0; /**< 1st kneepoint gain. | 57 | uint16_t y0; /** 1st kneepoint gain. |
| 58 | u[ce_gain_exp].[13-ce_gain_exp], [0,8191], | 58 | u[ce_gain_exp].[13-ce_gain_exp], [0,8191], |
| 59 | default/ineffective 4096(0.5) */ | 59 | default/ineffective 4096(0.5) */ |
| 60 | uint16_t y1; /**< 2nd kneepoint gain. | 60 | uint16_t y1; /** 2nd kneepoint gain. |
| 61 | u[ce_gain_exp].[13-ce_gain_exp], [0,8191], | 61 | u[ce_gain_exp].[13-ce_gain_exp], [0,8191], |
| 62 | default/ineffective 4096(0.5) */ | 62 | default/ineffective 4096(0.5) */ |
| 63 | uint16_t y2; /**< 3rd kneepoint gain. | 63 | uint16_t y2; /** 3rd kneepoint gain. |
| 64 | u[ce_gain_exp].[13-ce_gain_exp], [0,8191], | 64 | u[ce_gain_exp].[13-ce_gain_exp], [0,8191], |
| 65 | default/ineffective 4096(0.5) */ | 65 | default/ineffective 4096(0.5) */ |
| 66 | uint16_t y3; /**< 4th kneepoint gain. | 66 | uint16_t y3; /** 4th kneepoint gain. |
| 67 | u[ce_gain_exp].[13-ce_gain_exp], [0,8191], | 67 | u[ce_gain_exp].[13-ce_gain_exp], [0,8191], |
| 68 | default/ineffective 4096(0.5) */ | 68 | default/ineffective 4096(0.5) */ |
| 69 | uint16_t y4; /**< 5th kneepoint gain. | 69 | uint16_t y4; /** 5th kneepoint gain. |
| 70 | u[ce_gain_exp].[13-ce_gain_exp], [0,8191], | 70 | u[ce_gain_exp].[13-ce_gain_exp], [0,8191], |
| 71 | default/ineffective 4096(0.5) */ | 71 | default/ineffective 4096(0.5) */ |
| 72 | uint16_t y5; /**< 6th kneepoint gain. | 72 | uint16_t y5; /** 6th kneepoint gain. |
| 73 | u[ce_gain_exp].[13-ce_gain_exp], [0,8191], | 73 | u[ce_gain_exp].[13-ce_gain_exp], [0,8191], |
| 74 | default/ineffective 4096(0.5) */ | 74 | default/ineffective 4096(0.5) */ |
| 75 | uint16_t ce_gain_exp; /**< Common exponent of y-axis gain. | 75 | uint16_t ce_gain_exp; /** Common exponent of y-axis gain. |
| 76 | u8.0, [0,13], | 76 | u8.0, [0,13], |
| 77 | default/ineffective 1 */ | 77 | default/ineffective 1 */ |
| 78 | uint16_t x1; /**< 2nd kneepoint luma. | 78 | uint16_t x1; /** 2nd kneepoint luma. |
| 79 | u0.13, [0,8191], constraints: 0<x1<x2, | 79 | u0.13, [0,8191], constraints: 0<x1<x2, |
| 80 | default/ineffective 1024 */ | 80 | default/ineffective 1024 */ |
| 81 | uint16_t x2; /**< 3rd kneepoint luma. | 81 | uint16_t x2; /** 3rd kneepoint luma. |
| 82 | u0.13, [0,8191], constraints: x1<x2<x3, | 82 | u0.13, [0,8191], constraints: x1<x2<x3, |
| 83 | default/ineffective 2048 */ | 83 | default/ineffective 2048 */ |
| 84 | uint16_t x3; /**< 4th kneepoint luma. | 84 | uint16_t x3; /** 4th kneepoint luma. |
| 85 | u0.13, [0,8191], constraints: x2<x3<x4, | 85 | u0.13, [0,8191], constraints: x2<x3<x4, |
| 86 | default/ineffective 6144 */ | 86 | default/ineffective 6144 */ |
| 87 | uint16_t x4; /**< 5tn kneepoint luma. | 87 | uint16_t x4; /** 5tn kneepoint luma. |
| 88 | u0.13, [0,8191], constraints: x3<x4<8191, | 88 | u0.13, [0,8191], constraints: x3<x4<8191, |
| 89 | default/ineffective 7168 */ | 89 | default/ineffective 7168 */ |
| 90 | }; | 90 | }; |
| @@ -94,7 +94,7 @@ union ia_css_ctc_data { | |||
| 94 | uint16_t vamem_2[IA_CSS_VAMEM_2_CTC_TABLE_SIZE]; | 94 | uint16_t vamem_2[IA_CSS_VAMEM_2_CTC_TABLE_SIZE]; |
| 95 | }; | 95 | }; |
| 96 | 96 | ||
| 97 | /** CTC table, used for Chroma Tone Control. | 97 | /* CTC table, used for Chroma Tone Control. |
| 98 | * | 98 | * |
| 99 | * ISP block: CTC1 (CTC by look-up table) | 99 | * ISP block: CTC1 (CTC by look-up table) |
| 100 | * ISP1: CTC1 is used. | 100 | * ISP1: CTC1 is used. |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/de/de_1.0/ia_css_de_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/de/de_1.0/ia_css_de_types.h index 525c838d5a99..803be68abc54 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/de/de_1.0/ia_css_de_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/de/de_1.0/ia_css_de_types.h | |||
| @@ -15,25 +15,25 @@ | |||
| 15 | #ifndef __IA_CSS_DE_TYPES_H | 15 | #ifndef __IA_CSS_DE_TYPES_H |
| 16 | #define __IA_CSS_DE_TYPES_H | 16 | #define __IA_CSS_DE_TYPES_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * CSS-API header file for Demosaic (bayer-to-YCgCo) parameters. | 19 | * CSS-API header file for Demosaic (bayer-to-YCgCo) parameters. |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | /** Demosaic (bayer-to-YCgCo) configuration. | 22 | /* Demosaic (bayer-to-YCgCo) configuration. |
| 23 | * | 23 | * |
| 24 | * ISP block: DE1 | 24 | * ISP block: DE1 |
| 25 | * ISP1: DE1 is used. | 25 | * ISP1: DE1 is used. |
| 26 | * (ISP2: DE2 is used.) | 26 | * (ISP2: DE2 is used.) |
| 27 | */ | 27 | */ |
| 28 | struct ia_css_de_config { | 28 | struct ia_css_de_config { |
| 29 | ia_css_u0_16 pixelnoise; /**< Pixel noise used in moire elimination. | 29 | ia_css_u0_16 pixelnoise; /** Pixel noise used in moire elimination. |
| 30 | u0.16, [0,65535], | 30 | u0.16, [0,65535], |
| 31 | default 0, ineffective 0 */ | 31 | default 0, ineffective 0 */ |
| 32 | ia_css_u0_16 c1_coring_threshold; /**< Coring threshold for C1. | 32 | ia_css_u0_16 c1_coring_threshold; /** Coring threshold for C1. |
| 33 | This is the same as nr_config.threshold_cb. | 33 | This is the same as nr_config.threshold_cb. |
| 34 | u0.16, [0,65535], | 34 | u0.16, [0,65535], |
| 35 | default 128(0.001953125), ineffective 0 */ | 35 | default 128(0.001953125), ineffective 0 */ |
| 36 | ia_css_u0_16 c2_coring_threshold; /**< Coring threshold for C2. | 36 | ia_css_u0_16 c2_coring_threshold; /** Coring threshold for C2. |
| 37 | This is the same as nr_config.threshold_cr. | 37 | This is the same as nr_config.threshold_cr. |
| 38 | u0.16, [0,65535], | 38 | u0.16, [0,65535], |
| 39 | default 128(0.001953125), ineffective 0 */ | 39 | default 128(0.001953125), ineffective 0 */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/de/de_2/ia_css_de2_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/de/de_2/ia_css_de2_types.h index eac1b2779857..50bdde419bb1 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/de/de_2/ia_css_de2_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/de/de_2/ia_css_de2_types.h | |||
| @@ -15,24 +15,24 @@ | |||
| 15 | #ifndef __IA_CSS_DE2_TYPES_H | 15 | #ifndef __IA_CSS_DE2_TYPES_H |
| 16 | #define __IA_CSS_DE2_TYPES_H | 16 | #define __IA_CSS_DE2_TYPES_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * CSS-API header file for Demosaicing parameters. | 19 | * CSS-API header file for Demosaicing parameters. |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | /** Eigen Color Demosaicing configuration. | 22 | /* Eigen Color Demosaicing configuration. |
| 23 | * | 23 | * |
| 24 | * ISP block: DE2 | 24 | * ISP block: DE2 |
| 25 | * (ISP1: DE1 is used.) | 25 | * (ISP1: DE1 is used.) |
| 26 | * ISP2: DE2 is used. | 26 | * ISP2: DE2 is used. |
| 27 | */ | 27 | */ |
| 28 | struct ia_css_ecd_config { | 28 | struct ia_css_ecd_config { |
| 29 | uint16_t zip_strength; /**< Strength of zipper reduction. | 29 | uint16_t zip_strength; /** Strength of zipper reduction. |
| 30 | u0.13, [0,8191], | 30 | u0.13, [0,8191], |
| 31 | default 5489(0.67), ineffective 0 */ | 31 | default 5489(0.67), ineffective 0 */ |
| 32 | uint16_t fc_strength; /**< Strength of false color reduction. | 32 | uint16_t fc_strength; /** Strength of false color reduction. |
| 33 | u0.13, [0,8191], | 33 | u0.13, [0,8191], |
| 34 | default 8191(almost 1.0), ineffective 0 */ | 34 | default 8191(almost 1.0), ineffective 0 */ |
| 35 | uint16_t fc_debias; /**< Prevent color change | 35 | uint16_t fc_debias; /** Prevent color change |
| 36 | on noise or Gr/Gb imbalance. | 36 | on noise or Gr/Gb imbalance. |
| 37 | u0.13, [0,8191], | 37 | u0.13, [0,8191], |
| 38 | default 0, ineffective 0 */ | 38 | default 0, ineffective 0 */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/dp/dp_1.0/ia_css_dp_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/dp/dp_1.0/ia_css_dp_types.h index b5d7b6b175b6..1bf6dcef7dc7 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/dp/dp_1.0/ia_css_dp_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/dp/dp_1.0/ia_css_dp_types.h | |||
| @@ -15,12 +15,12 @@ | |||
| 15 | #ifndef __IA_CSS_DP_TYPES_H | 15 | #ifndef __IA_CSS_DP_TYPES_H |
| 16 | #define __IA_CSS_DP_TYPES_H | 16 | #define __IA_CSS_DP_TYPES_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * CSS-API header file for Defect Pixel Correction (DPC) parameters. | 19 | * CSS-API header file for Defect Pixel Correction (DPC) parameters. |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | 22 | ||
| 23 | /** Defect Pixel Correction configuration. | 23 | /* Defect Pixel Correction configuration. |
| 24 | * | 24 | * |
| 25 | * ISP block: DPC1 (DPC after WB) | 25 | * ISP block: DPC1 (DPC after WB) |
| 26 | * DPC2 (DPC before WB) | 26 | * DPC2 (DPC before WB) |
| @@ -28,14 +28,14 @@ | |||
| 28 | * ISP2: DPC2 is used. | 28 | * ISP2: DPC2 is used. |
| 29 | */ | 29 | */ |
| 30 | struct ia_css_dp_config { | 30 | struct ia_css_dp_config { |
| 31 | ia_css_u0_16 threshold; /**< The threshold of defect pixel correction, | 31 | ia_css_u0_16 threshold; /** The threshold of defect pixel correction, |
| 32 | representing the permissible difference of | 32 | representing the permissible difference of |
| 33 | intensity between one pixel and its | 33 | intensity between one pixel and its |
| 34 | surrounding pixels. Smaller values result | 34 | surrounding pixels. Smaller values result |
| 35 | in more frequent pixel corrections. | 35 | in more frequent pixel corrections. |
| 36 | u0.16, [0,65535], | 36 | u0.16, [0,65535], |
| 37 | default 8192, ineffective 65535 */ | 37 | default 8192, ineffective 65535 */ |
| 38 | ia_css_u8_8 gain; /**< The sensitivity of mis-correction. ISP will | 38 | ia_css_u8_8 gain; /** The sensitivity of mis-correction. ISP will |
| 39 | miss a lot of defects if the value is set | 39 | miss a lot of defects if the value is set |
| 40 | too large. | 40 | too large. |
| 41 | u8.8, [0,65535], | 41 | u8.8, [0,65535], |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/dpc2/ia_css_dpc2_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/dpc2/ia_css_dpc2_types.h index b2c974196ce8..6727682d287f 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/dpc2/ia_css_dpc2_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/dpc2/ia_css_dpc2_types.h | |||
| @@ -15,14 +15,14 @@ | |||
| 15 | #ifndef __IA_CSS_DPC2_TYPES_H | 15 | #ifndef __IA_CSS_DPC2_TYPES_H |
| 16 | #define __IA_CSS_DPC2_TYPES_H | 16 | #define __IA_CSS_DPC2_TYPES_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * CSS-API header file for Defect Pixel Correction 2 (DPC2) parameters. | 19 | * CSS-API header file for Defect Pixel Correction 2 (DPC2) parameters. |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | #include "type_support.h" | 22 | #include "type_support.h" |
| 23 | 23 | ||
| 24 | /**@{*/ | 24 | /**@{*/ |
| 25 | /** Floating point constants for different metrics. */ | 25 | /* Floating point constants for different metrics. */ |
| 26 | #define METRIC1_ONE_FP (1<<12) | 26 | #define METRIC1_ONE_FP (1<<12) |
| 27 | #define METRIC2_ONE_FP (1<<5) | 27 | #define METRIC2_ONE_FP (1<<5) |
| 28 | #define METRIC3_ONE_FP (1<<12) | 28 | #define METRIC3_ONE_FP (1<<12) |
| @@ -30,7 +30,7 @@ | |||
| 30 | /**@}*/ | 30 | /**@}*/ |
| 31 | 31 | ||
| 32 | /**@{*/ | 32 | /**@{*/ |
| 33 | /** Defect Pixel Correction 2 configuration. | 33 | /* Defect Pixel Correction 2 configuration. |
| 34 | * | 34 | * |
| 35 | * \brief DPC2 public parameters. | 35 | * \brief DPC2 public parameters. |
| 36 | * \details Struct with all parameters for the Defect Pixel Correction 2 | 36 | * \details Struct with all parameters for the Defect Pixel Correction 2 |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/dvs/dvs_1.0/ia_css_dvs_param.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/dvs/dvs_1.0/ia_css_dvs_param.h index 4d0abfe4d0fd..66a7e58659c0 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/dvs/dvs_1.0/ia_css_dvs_param.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/dvs/dvs_1.0/ia_css_dvs_param.h | |||
| @@ -30,7 +30,7 @@ | |||
| 30 | #ifdef ISP2401 | 30 | #ifdef ISP2401 |
| 31 | 31 | ||
| 32 | #endif | 32 | #endif |
| 33 | /** dvserence frame */ | 33 | /* dvserence frame */ |
| 34 | struct sh_css_isp_dvs_isp_config { | 34 | struct sh_css_isp_dvs_isp_config { |
| 35 | uint32_t num_horizontal_blocks; | 35 | uint32_t num_horizontal_blocks; |
| 36 | uint32_t num_vertical_blocks; | 36 | uint32_t num_vertical_blocks; |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/dvs/dvs_1.0/ia_css_dvs_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/dvs/dvs_1.0/ia_css_dvs_types.h index 216c54a21ea5..30772d217fb2 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/dvs/dvs_1.0/ia_css_dvs_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/dvs/dvs_1.0/ia_css_dvs_types.h | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | #ifndef __IA_CSS_DVS_TYPES_H | 15 | #ifndef __IA_CSS_DVS_TYPES_H |
| 16 | #define __IA_CSS_DVS_TYPES_H | 16 | #define __IA_CSS_DVS_TYPES_H |
| 17 | 17 | ||
| 18 | /** DVS frame | 18 | /* DVS frame |
| 19 | * | 19 | * |
| 20 | * ISP block: dvs frame | 20 | * ISP block: dvs frame |
| 21 | */ | 21 | */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/eed1_8/ia_css_eed1_8_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/eed1_8/ia_css_eed1_8_types.h index 07651f0ac558..32e91824a5e5 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/eed1_8/ia_css_eed1_8_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/eed1_8/ia_css_eed1_8_types.h | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | #ifndef __IA_CSS_EED1_8_TYPES_H | 15 | #ifndef __IA_CSS_EED1_8_TYPES_H |
| 16 | #define __IA_CSS_EED1_8_TYPES_H | 16 | #define __IA_CSS_EED1_8_TYPES_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * CSS-API header file for Edge Enhanced Demosaic parameters. | 19 | * CSS-API header file for Edge Enhanced Demosaic parameters. |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| @@ -36,51 +36,51 @@ | |||
| 36 | */ | 36 | */ |
| 37 | #define IA_CSS_NUMBER_OF_DEW_ENHANCE_SEGMENTS 9 | 37 | #define IA_CSS_NUMBER_OF_DEW_ENHANCE_SEGMENTS 9 |
| 38 | 38 | ||
| 39 | /** Edge Enhanced Demosaic configuration | 39 | /* Edge Enhanced Demosaic configuration |
| 40 | * | 40 | * |
| 41 | * ISP2.6.1: EED1_8 is used. | 41 | * ISP2.6.1: EED1_8 is used. |
| 42 | */ | 42 | */ |
| 43 | 43 | ||
| 44 | struct ia_css_eed1_8_config { | 44 | struct ia_css_eed1_8_config { |
| 45 | int32_t rbzp_strength; /**< Strength of zipper reduction. */ | 45 | int32_t rbzp_strength; /** Strength of zipper reduction. */ |
| 46 | 46 | ||
| 47 | int32_t fcstrength; /**< Strength of false color reduction. */ | 47 | int32_t fcstrength; /** Strength of false color reduction. */ |
| 48 | int32_t fcthres_0; /**< Threshold to prevent chroma coring due to noise or green disparity in dark region. */ | 48 | int32_t fcthres_0; /** Threshold to prevent chroma coring due to noise or green disparity in dark region. */ |
| 49 | int32_t fcthres_1; /**< Threshold to prevent chroma coring due to noise or green disparity in bright region. */ | 49 | int32_t fcthres_1; /** Threshold to prevent chroma coring due to noise or green disparity in bright region. */ |
| 50 | int32_t fc_sat_coef; /**< How much color saturation to maintain in high color saturation region. */ | 50 | int32_t fc_sat_coef; /** How much color saturation to maintain in high color saturation region. */ |
| 51 | int32_t fc_coring_prm; /**< Chroma coring coefficient for tint color suppression. */ | 51 | int32_t fc_coring_prm; /** Chroma coring coefficient for tint color suppression. */ |
| 52 | 52 | ||
| 53 | int32_t aerel_thres0; /**< Threshold for Non-Directional Reliability at dark region. */ | 53 | int32_t aerel_thres0; /** Threshold for Non-Directional Reliability at dark region. */ |
| 54 | int32_t aerel_gain0; /**< Gain for Non-Directional Reliability at dark region. */ | 54 | int32_t aerel_gain0; /** Gain for Non-Directional Reliability at dark region. */ |
| 55 | int32_t aerel_thres1; /**< Threshold for Non-Directional Reliability at bright region. */ | 55 | int32_t aerel_thres1; /** Threshold for Non-Directional Reliability at bright region. */ |
| 56 | int32_t aerel_gain1; /**< Gain for Non-Directional Reliability at bright region. */ | 56 | int32_t aerel_gain1; /** Gain for Non-Directional Reliability at bright region. */ |
| 57 | 57 | ||
| 58 | int32_t derel_thres0; /**< Threshold for Directional Reliability at dark region. */ | 58 | int32_t derel_thres0; /** Threshold for Directional Reliability at dark region. */ |
| 59 | int32_t derel_gain0; /**< Gain for Directional Reliability at dark region. */ | 59 | int32_t derel_gain0; /** Gain for Directional Reliability at dark region. */ |
| 60 | int32_t derel_thres1; /**< Threshold for Directional Reliability at bright region. */ | 60 | int32_t derel_thres1; /** Threshold for Directional Reliability at bright region. */ |
| 61 | int32_t derel_gain1; /**< Gain for Directional Reliability at bright region. */ | 61 | int32_t derel_gain1; /** Gain for Directional Reliability at bright region. */ |
| 62 | 62 | ||
| 63 | int32_t coring_pos0; /**< Positive Edge Coring Threshold in dark region. */ | 63 | int32_t coring_pos0; /** Positive Edge Coring Threshold in dark region. */ |
| 64 | int32_t coring_pos1; /**< Positive Edge Coring Threshold in bright region. */ | 64 | int32_t coring_pos1; /** Positive Edge Coring Threshold in bright region. */ |
| 65 | int32_t coring_neg0; /**< Negative Edge Coring Threshold in dark region. */ | 65 | int32_t coring_neg0; /** Negative Edge Coring Threshold in dark region. */ |
| 66 | int32_t coring_neg1; /**< Negative Edge Coring Threshold in bright region. */ | 66 | int32_t coring_neg1; /** Negative Edge Coring Threshold in bright region. */ |
| 67 | 67 | ||
| 68 | int32_t gain_exp; /**< Common Exponent of Gain. */ | 68 | int32_t gain_exp; /** Common Exponent of Gain. */ |
| 69 | int32_t gain_pos0; /**< Gain for Positive Edge in dark region. */ | 69 | int32_t gain_pos0; /** Gain for Positive Edge in dark region. */ |
| 70 | int32_t gain_pos1; /**< Gain for Positive Edge in bright region. */ | 70 | int32_t gain_pos1; /** Gain for Positive Edge in bright region. */ |
| 71 | int32_t gain_neg0; /**< Gain for Negative Edge in dark region. */ | 71 | int32_t gain_neg0; /** Gain for Negative Edge in dark region. */ |
| 72 | int32_t gain_neg1; /**< Gain for Negative Edge in bright region. */ | 72 | int32_t gain_neg1; /** Gain for Negative Edge in bright region. */ |
| 73 | 73 | ||
| 74 | int32_t pos_margin0; /**< Margin for Positive Edge in dark region. */ | 74 | int32_t pos_margin0; /** Margin for Positive Edge in dark region. */ |
| 75 | int32_t pos_margin1; /**< Margin for Positive Edge in bright region. */ | 75 | int32_t pos_margin1; /** Margin for Positive Edge in bright region. */ |
| 76 | int32_t neg_margin0; /**< Margin for Negative Edge in dark region. */ | 76 | int32_t neg_margin0; /** Margin for Negative Edge in dark region. */ |
| 77 | int32_t neg_margin1; /**< Margin for Negative Edge in bright region. */ | 77 | int32_t neg_margin1; /** Margin for Negative Edge in bright region. */ |
| 78 | 78 | ||
| 79 | int32_t dew_enhance_seg_x[IA_CSS_NUMBER_OF_DEW_ENHANCE_SEGMENTS]; /**< Segment data for directional edge weight: X. */ | 79 | int32_t dew_enhance_seg_x[IA_CSS_NUMBER_OF_DEW_ENHANCE_SEGMENTS]; /** Segment data for directional edge weight: X. */ |
| 80 | int32_t dew_enhance_seg_y[IA_CSS_NUMBER_OF_DEW_ENHANCE_SEGMENTS]; /**< Segment data for directional edge weight: Y. */ | 80 | int32_t dew_enhance_seg_y[IA_CSS_NUMBER_OF_DEW_ENHANCE_SEGMENTS]; /** Segment data for directional edge weight: Y. */ |
| 81 | int32_t dew_enhance_seg_slope[(IA_CSS_NUMBER_OF_DEW_ENHANCE_SEGMENTS - 1)]; /**< Segment data for directional edge weight: Slope. */ | 81 | int32_t dew_enhance_seg_slope[(IA_CSS_NUMBER_OF_DEW_ENHANCE_SEGMENTS - 1)]; /** Segment data for directional edge weight: Slope. */ |
| 82 | int32_t dew_enhance_seg_exp[(IA_CSS_NUMBER_OF_DEW_ENHANCE_SEGMENTS - 1)]; /**< Segment data for directional edge weight: Exponent. */ | 82 | int32_t dew_enhance_seg_exp[(IA_CSS_NUMBER_OF_DEW_ENHANCE_SEGMENTS - 1)]; /** Segment data for directional edge weight: Exponent. */ |
| 83 | int32_t dedgew_max; /**< Max Weight for Directional Edge. */ | 83 | int32_t dedgew_max; /** Max Weight for Directional Edge. */ |
| 84 | }; | 84 | }; |
| 85 | 85 | ||
| 86 | #endif /* __IA_CSS_EED1_8_TYPES_H */ | 86 | #endif /* __IA_CSS_EED1_8_TYPES_H */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/fc/fc_1.0/ia_css_formats_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/fc/fc_1.0/ia_css_formats_types.h index df1565a5914c..49479572b40d 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/fc/fc_1.0/ia_css_formats_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/fc/fc_1.0/ia_css_formats_types.h | |||
| @@ -15,20 +15,20 @@ | |||
| 15 | #ifndef __IA_CSS_FORMATS_TYPES_H | 15 | #ifndef __IA_CSS_FORMATS_TYPES_H |
| 16 | #define __IA_CSS_FORMATS_TYPES_H | 16 | #define __IA_CSS_FORMATS_TYPES_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * CSS-API header file for output format parameters. | 19 | * CSS-API header file for output format parameters. |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | #include "type_support.h" | 22 | #include "type_support.h" |
| 23 | 23 | ||
| 24 | /** Formats configuration. | 24 | /* Formats configuration. |
| 25 | * | 25 | * |
| 26 | * ISP block: FORMATS | 26 | * ISP block: FORMATS |
| 27 | * ISP1: FORMATS is used. | 27 | * ISP1: FORMATS is used. |
| 28 | * ISP2: FORMATS is used. | 28 | * ISP2: FORMATS is used. |
| 29 | */ | 29 | */ |
| 30 | struct ia_css_formats_config { | 30 | struct ia_css_formats_config { |
| 31 | uint32_t video_full_range_flag; /**< selects the range of YUV output. | 31 | uint32_t video_full_range_flag; /** selects the range of YUV output. |
| 32 | u8.0, [0,1], | 32 | u8.0, [0,1], |
| 33 | default 1, ineffective n/a\n | 33 | default 1, ineffective n/a\n |
| 34 | 1 - full range, luma 0-255, chroma 0-255\n | 34 | 1 - full range, luma 0-255, chroma 0-255\n |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/fpn/fpn_1.0/ia_css_fpn_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/fpn/fpn_1.0/ia_css_fpn_types.h index 5a2f0c06a80d..ef287fa3c428 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/fpn/fpn_1.0/ia_css_fpn_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/fpn/fpn_1.0/ia_css_fpn_types.h | |||
| @@ -15,11 +15,11 @@ | |||
| 15 | #ifndef __IA_CSS_FPN_TYPES_H | 15 | #ifndef __IA_CSS_FPN_TYPES_H |
| 16 | #define __IA_CSS_FPN_TYPES_H | 16 | #define __IA_CSS_FPN_TYPES_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * CSS-API header file for Fixed Pattern Noise parameters. | 19 | * CSS-API header file for Fixed Pattern Noise parameters. |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | /** Fixed Pattern Noise table. | 22 | /* Fixed Pattern Noise table. |
| 23 | * | 23 | * |
| 24 | * This contains the fixed patterns noise values | 24 | * This contains the fixed patterns noise values |
| 25 | * obtained from a black frame capture. | 25 | * obtained from a black frame capture. |
| @@ -33,15 +33,15 @@ | |||
| 33 | */ | 33 | */ |
| 34 | 34 | ||
| 35 | struct ia_css_fpn_table { | 35 | struct ia_css_fpn_table { |
| 36 | int16_t *data; /**< Table content (fixed patterns noise). | 36 | int16_t *data; /** Table content (fixed patterns noise). |
| 37 | u0.[13-shift], [0,63] */ | 37 | u0.[13-shift], [0,63] */ |
| 38 | uint32_t width; /**< Table width (in pixels). | 38 | uint32_t width; /** Table width (in pixels). |
| 39 | This is the input frame width. */ | 39 | This is the input frame width. */ |
| 40 | uint32_t height; /**< Table height (in pixels). | 40 | uint32_t height; /** Table height (in pixels). |
| 41 | This is the input frame height. */ | 41 | This is the input frame height. */ |
| 42 | uint32_t shift; /**< Common exponent of table content. | 42 | uint32_t shift; /** Common exponent of table content. |
| 43 | u8.0, [0,13] */ | 43 | u8.0, [0,13] */ |
| 44 | uint32_t enabled; /**< Fpn is enabled. | 44 | uint32_t enabled; /** Fpn is enabled. |
| 45 | bool */ | 45 | bool */ |
| 46 | }; | 46 | }; |
| 47 | 47 | ||
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/gc/gc_1.0/ia_css_gc_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/gc/gc_1.0/ia_css_gc_types.h index dd9f0eda3353..594807fe2925 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/gc/gc_1.0/ia_css_gc_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/gc/gc_1.0/ia_css_gc_types.h | |||
| @@ -15,36 +15,36 @@ | |||
| 15 | #ifndef __IA_CSS_GC_TYPES_H | 15 | #ifndef __IA_CSS_GC_TYPES_H |
| 16 | #define __IA_CSS_GC_TYPES_H | 16 | #define __IA_CSS_GC_TYPES_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * CSS-API header file for Gamma Correction parameters. | 19 | * CSS-API header file for Gamma Correction parameters. |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | #include "isp/kernels/ctc/ctc_1.0/ia_css_ctc_types.h" /* FIXME: Needed for ia_css_vamem_type */ | 22 | #include "isp/kernels/ctc/ctc_1.0/ia_css_ctc_types.h" /* FIXME: Needed for ia_css_vamem_type */ |
| 23 | 23 | ||
| 24 | /** Fractional bits for GAMMA gain */ | 24 | /* Fractional bits for GAMMA gain */ |
| 25 | #define IA_CSS_GAMMA_GAIN_K_SHIFT 13 | 25 | #define IA_CSS_GAMMA_GAIN_K_SHIFT 13 |
| 26 | 26 | ||
| 27 | /** Number of elements in the gamma table. */ | 27 | /* Number of elements in the gamma table. */ |
| 28 | #define IA_CSS_VAMEM_1_GAMMA_TABLE_SIZE_LOG2 10 | 28 | #define IA_CSS_VAMEM_1_GAMMA_TABLE_SIZE_LOG2 10 |
| 29 | #define IA_CSS_VAMEM_1_GAMMA_TABLE_SIZE (1U<<IA_CSS_VAMEM_1_GAMMA_TABLE_SIZE_LOG2) | 29 | #define IA_CSS_VAMEM_1_GAMMA_TABLE_SIZE (1U<<IA_CSS_VAMEM_1_GAMMA_TABLE_SIZE_LOG2) |
| 30 | 30 | ||
| 31 | /** Number of elements in the gamma table. */ | 31 | /* Number of elements in the gamma table. */ |
| 32 | #define IA_CSS_VAMEM_2_GAMMA_TABLE_SIZE_LOG2 8 | 32 | #define IA_CSS_VAMEM_2_GAMMA_TABLE_SIZE_LOG2 8 |
| 33 | #define IA_CSS_VAMEM_2_GAMMA_TABLE_SIZE ((1U<<IA_CSS_VAMEM_2_GAMMA_TABLE_SIZE_LOG2) + 1) | 33 | #define IA_CSS_VAMEM_2_GAMMA_TABLE_SIZE ((1U<<IA_CSS_VAMEM_2_GAMMA_TABLE_SIZE_LOG2) + 1) |
| 34 | 34 | ||
| 35 | /** Gamma table, used for Y(Luma) Gamma Correction. | 35 | /* Gamma table, used for Y(Luma) Gamma Correction. |
| 36 | * | 36 | * |
| 37 | * ISP block: GC1 (YUV Gamma Correction) | 37 | * ISP block: GC1 (YUV Gamma Correction) |
| 38 | * ISP1: GC1 is used. | 38 | * ISP1: GC1 is used. |
| 39 | * (ISP2: GC2(sRGB Gamma Correction) is used.) | 39 | * (ISP2: GC2(sRGB Gamma Correction) is used.) |
| 40 | */ | 40 | */ |
| 41 | /**< IA_CSS_VAMEM_TYPE_1(ISP2300) or | 41 | /** IA_CSS_VAMEM_TYPE_1(ISP2300) or |
| 42 | IA_CSS_VAMEM_TYPE_2(ISP2400) */ | 42 | IA_CSS_VAMEM_TYPE_2(ISP2400) */ |
| 43 | union ia_css_gc_data { | 43 | union ia_css_gc_data { |
| 44 | uint16_t vamem_1[IA_CSS_VAMEM_1_GAMMA_TABLE_SIZE]; | 44 | uint16_t vamem_1[IA_CSS_VAMEM_1_GAMMA_TABLE_SIZE]; |
| 45 | /**< Y(Luma) Gamma table on vamem type 1. u0.8, [0,255] */ | 45 | /** Y(Luma) Gamma table on vamem type 1. u0.8, [0,255] */ |
| 46 | uint16_t vamem_2[IA_CSS_VAMEM_2_GAMMA_TABLE_SIZE]; | 46 | uint16_t vamem_2[IA_CSS_VAMEM_2_GAMMA_TABLE_SIZE]; |
| 47 | /**< Y(Luma) Gamma table on vamem type 2. u0.8, [0,255] */ | 47 | /** Y(Luma) Gamma table on vamem type 2. u0.8, [0,255] */ |
| 48 | }; | 48 | }; |
| 49 | 49 | ||
| 50 | struct ia_css_gamma_table { | 50 | struct ia_css_gamma_table { |
| @@ -52,22 +52,22 @@ struct ia_css_gamma_table { | |||
| 52 | union ia_css_gc_data data; | 52 | union ia_css_gc_data data; |
| 53 | }; | 53 | }; |
| 54 | 54 | ||
| 55 | /** Gamma Correction configuration (used only for YUV Gamma Correction). | 55 | /* Gamma Correction configuration (used only for YUV Gamma Correction). |
| 56 | * | 56 | * |
| 57 | * ISP block: GC1 (YUV Gamma Correction) | 57 | * ISP block: GC1 (YUV Gamma Correction) |
| 58 | * ISP1: GC1 is used. | 58 | * ISP1: GC1 is used. |
| 59 | * (ISP2: GC2 (sRGB Gamma Correction) is used.) | 59 | * (ISP2: GC2 (sRGB Gamma Correction) is used.) |
| 60 | */ | 60 | */ |
| 61 | struct ia_css_gc_config { | 61 | struct ia_css_gc_config { |
| 62 | uint16_t gain_k1; /**< Gain to adjust U after YUV Gamma Correction. | 62 | uint16_t gain_k1; /** Gain to adjust U after YUV Gamma Correction. |
| 63 | u0.16, [0,65535], | 63 | u0.16, [0,65535], |
| 64 | default/ineffective 19000(0.29) */ | 64 | default/ineffective 19000(0.29) */ |
| 65 | uint16_t gain_k2; /**< Gain to adjust V after YUV Gamma Correction. | 65 | uint16_t gain_k2; /** Gain to adjust V after YUV Gamma Correction. |
| 66 | u0.16, [0,65535], | 66 | u0.16, [0,65535], |
| 67 | default/ineffective 19000(0.29) */ | 67 | default/ineffective 19000(0.29) */ |
| 68 | }; | 68 | }; |
| 69 | 69 | ||
| 70 | /** Chroma Enhancement configuration. | 70 | /* Chroma Enhancement configuration. |
| 71 | * | 71 | * |
| 72 | * This parameter specifies range of chroma output level. | 72 | * This parameter specifies range of chroma output level. |
| 73 | * The standard range is [0,255] or [16,240]. | 73 | * The standard range is [0,255] or [16,240]. |
| @@ -77,20 +77,20 @@ struct ia_css_gc_config { | |||
| 77 | * (ISP2: CE1 is not used.) | 77 | * (ISP2: CE1 is not used.) |
| 78 | */ | 78 | */ |
| 79 | struct ia_css_ce_config { | 79 | struct ia_css_ce_config { |
| 80 | uint8_t uv_level_min; /**< Minimum of chroma output level. | 80 | uint8_t uv_level_min; /** Minimum of chroma output level. |
| 81 | u0.8, [0,255], default/ineffective 0 */ | 81 | u0.8, [0,255], default/ineffective 0 */ |
| 82 | uint8_t uv_level_max; /**< Maximum of chroma output level. | 82 | uint8_t uv_level_max; /** Maximum of chroma output level. |
| 83 | u0.8, [0,255], default/ineffective 255 */ | 83 | u0.8, [0,255], default/ineffective 255 */ |
| 84 | }; | 84 | }; |
| 85 | 85 | ||
| 86 | /** Multi-Axes Color Correction (MACC) configuration. | 86 | /* Multi-Axes Color Correction (MACC) configuration. |
| 87 | * | 87 | * |
| 88 | * ISP block: MACC2 (MACC by matrix and exponent(ia_css_macc_config)) | 88 | * ISP block: MACC2 (MACC by matrix and exponent(ia_css_macc_config)) |
| 89 | * (ISP1: MACC1 (MACC by only matrix) is used.) | 89 | * (ISP1: MACC1 (MACC by only matrix) is used.) |
| 90 | * ISP2: MACC2 is used. | 90 | * ISP2: MACC2 is used. |
| 91 | */ | 91 | */ |
| 92 | struct ia_css_macc_config { | 92 | struct ia_css_macc_config { |
| 93 | uint8_t exp; /**< Common exponent of ia_css_macc_table. | 93 | uint8_t exp; /** Common exponent of ia_css_macc_table. |
| 94 | u8.0, [0,13], default 1, ineffective 1 */ | 94 | u8.0, [0,13], default 1, ineffective 1 */ |
| 95 | }; | 95 | }; |
| 96 | 96 | ||
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/gc/gc_2/ia_css_gc2_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/gc/gc_2/ia_css_gc2_types.h index e439583bdfb6..fab7467d30a5 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/gc/gc_2/ia_css_gc2_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/gc/gc_2/ia_css_gc2_types.h | |||
| @@ -17,33 +17,33 @@ | |||
| 17 | 17 | ||
| 18 | #include "isp/kernels/ctc/ctc_1.0/ia_css_ctc_types.h" /* FIXME: needed for ia_css_vamem_type */ | 18 | #include "isp/kernels/ctc/ctc_1.0/ia_css_ctc_types.h" /* FIXME: needed for ia_css_vamem_type */ |
| 19 | 19 | ||
| 20 | /** @file | 20 | /* @file |
| 21 | * CSS-API header file for Gamma Correction parameters. | 21 | * CSS-API header file for Gamma Correction parameters. |
| 22 | */ | 22 | */ |
| 23 | 23 | ||
| 24 | /** sRGB Gamma table, used for sRGB Gamma Correction. | 24 | /* sRGB Gamma table, used for sRGB Gamma Correction. |
| 25 | * | 25 | * |
| 26 | * ISP block: GC2 (sRGB Gamma Correction) | 26 | * ISP block: GC2 (sRGB Gamma Correction) |
| 27 | * (ISP1: GC1(YUV Gamma Correction) is used.) | 27 | * (ISP1: GC1(YUV Gamma Correction) is used.) |
| 28 | * ISP2: GC2 is used. | 28 | * ISP2: GC2 is used. |
| 29 | */ | 29 | */ |
| 30 | 30 | ||
| 31 | /** Number of elements in the sRGB gamma table. */ | 31 | /* Number of elements in the sRGB gamma table. */ |
| 32 | #define IA_CSS_VAMEM_1_RGB_GAMMA_TABLE_SIZE_LOG2 8 | 32 | #define IA_CSS_VAMEM_1_RGB_GAMMA_TABLE_SIZE_LOG2 8 |
| 33 | #define IA_CSS_VAMEM_1_RGB_GAMMA_TABLE_SIZE (1U<<IA_CSS_VAMEM_1_RGB_GAMMA_TABLE_SIZE_LOG2) | 33 | #define IA_CSS_VAMEM_1_RGB_GAMMA_TABLE_SIZE (1U<<IA_CSS_VAMEM_1_RGB_GAMMA_TABLE_SIZE_LOG2) |
| 34 | 34 | ||
| 35 | /** Number of elements in the sRGB gamma table. */ | 35 | /* Number of elements in the sRGB gamma table. */ |
| 36 | #define IA_CSS_VAMEM_2_RGB_GAMMA_TABLE_SIZE_LOG2 8 | 36 | #define IA_CSS_VAMEM_2_RGB_GAMMA_TABLE_SIZE_LOG2 8 |
| 37 | #define IA_CSS_VAMEM_2_RGB_GAMMA_TABLE_SIZE ((1U<<IA_CSS_VAMEM_2_RGB_GAMMA_TABLE_SIZE_LOG2) + 1) | 37 | #define IA_CSS_VAMEM_2_RGB_GAMMA_TABLE_SIZE ((1U<<IA_CSS_VAMEM_2_RGB_GAMMA_TABLE_SIZE_LOG2) + 1) |
| 38 | 38 | ||
| 39 | /**< IA_CSS_VAMEM_TYPE_1(ISP2300) or | 39 | /** IA_CSS_VAMEM_TYPE_1(ISP2300) or |
| 40 | IA_CSS_VAMEM_TYPE_2(ISP2400) */ | 40 | IA_CSS_VAMEM_TYPE_2(ISP2400) */ |
| 41 | union ia_css_rgb_gamma_data { | 41 | union ia_css_rgb_gamma_data { |
| 42 | uint16_t vamem_1[IA_CSS_VAMEM_1_RGB_GAMMA_TABLE_SIZE]; | 42 | uint16_t vamem_1[IA_CSS_VAMEM_1_RGB_GAMMA_TABLE_SIZE]; |
| 43 | /**< RGB Gamma table on vamem type1. This table is not used, | 43 | /** RGB Gamma table on vamem type1. This table is not used, |
| 44 | because sRGB Gamma Correction is not implemented for ISP2300. */ | 44 | because sRGB Gamma Correction is not implemented for ISP2300. */ |
| 45 | uint16_t vamem_2[IA_CSS_VAMEM_2_RGB_GAMMA_TABLE_SIZE]; | 45 | uint16_t vamem_2[IA_CSS_VAMEM_2_RGB_GAMMA_TABLE_SIZE]; |
| 46 | /**< RGB Gamma table on vamem type2. u0.12, [0,4095] */ | 46 | /** RGB Gamma table on vamem type2. u0.12, [0,4095] */ |
| 47 | }; | 47 | }; |
| 48 | 48 | ||
| 49 | struct ia_css_rgb_gamma_table { | 49 | struct ia_css_rgb_gamma_table { |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/hdr/ia_css_hdr_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/hdr/ia_css_hdr_types.h index c3345b32e3e6..26464421b077 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/hdr/ia_css_hdr_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/hdr/ia_css_hdr_types.h | |||
| @@ -24,14 +24,14 @@ | |||
| 24 | * \detail Currently HDR paramters are used only for testing purposes | 24 | * \detail Currently HDR paramters are used only for testing purposes |
| 25 | */ | 25 | */ |
| 26 | struct ia_css_hdr_irradiance_params { | 26 | struct ia_css_hdr_irradiance_params { |
| 27 | int test_irr; /**< Test parameter */ | 27 | int test_irr; /** Test parameter */ |
| 28 | int match_shift[IA_CSS_HDR_MAX_NUM_INPUT_FRAMES - 1]; /**< Histogram matching shift parameter */ | 28 | int match_shift[IA_CSS_HDR_MAX_NUM_INPUT_FRAMES - 1]; /** Histogram matching shift parameter */ |
| 29 | int match_mul[IA_CSS_HDR_MAX_NUM_INPUT_FRAMES - 1]; /**< Histogram matching multiplication parameter */ | 29 | int match_mul[IA_CSS_HDR_MAX_NUM_INPUT_FRAMES - 1]; /** Histogram matching multiplication parameter */ |
| 30 | int thr_low[IA_CSS_HDR_MAX_NUM_INPUT_FRAMES - 1]; /**< Weight map soft threshold low bound parameter */ | 30 | int thr_low[IA_CSS_HDR_MAX_NUM_INPUT_FRAMES - 1]; /** Weight map soft threshold low bound parameter */ |
| 31 | int thr_high[IA_CSS_HDR_MAX_NUM_INPUT_FRAMES - 1]; /**< Weight map soft threshold high bound parameter */ | 31 | int thr_high[IA_CSS_HDR_MAX_NUM_INPUT_FRAMES - 1]; /** Weight map soft threshold high bound parameter */ |
| 32 | int thr_coeff[IA_CSS_HDR_MAX_NUM_INPUT_FRAMES - 1]; /**< Soft threshold linear function coefficien */ | 32 | int thr_coeff[IA_CSS_HDR_MAX_NUM_INPUT_FRAMES - 1]; /** Soft threshold linear function coefficien */ |
| 33 | int thr_shift[IA_CSS_HDR_MAX_NUM_INPUT_FRAMES - 1]; /**< Soft threshold precision shift parameter */ | 33 | int thr_shift[IA_CSS_HDR_MAX_NUM_INPUT_FRAMES - 1]; /** Soft threshold precision shift parameter */ |
| 34 | int weight_bpp; /**< Weight map bits per pixel */ | 34 | int weight_bpp; /** Weight map bits per pixel */ |
| 35 | }; | 35 | }; |
| 36 | 36 | ||
| 37 | /** | 37 | /** |
| @@ -39,7 +39,7 @@ struct ia_css_hdr_irradiance_params { | |||
| 39 | * \detail Currently HDR paramters are used only for testing purposes | 39 | * \detail Currently HDR paramters are used only for testing purposes |
| 40 | */ | 40 | */ |
| 41 | struct ia_css_hdr_deghost_params { | 41 | struct ia_css_hdr_deghost_params { |
| 42 | int test_deg; /**< Test parameter */ | 42 | int test_deg; /** Test parameter */ |
| 43 | }; | 43 | }; |
| 44 | 44 | ||
| 45 | /** | 45 | /** |
| @@ -47,7 +47,7 @@ struct ia_css_hdr_deghost_params { | |||
| 47 | * \detail Currently HDR paramters are used only for testing purposes | 47 | * \detail Currently HDR paramters are used only for testing purposes |
| 48 | */ | 48 | */ |
| 49 | struct ia_css_hdr_exclusion_params { | 49 | struct ia_css_hdr_exclusion_params { |
| 50 | int test_excl; /**< Test parameter */ | 50 | int test_excl; /** Test parameter */ |
| 51 | }; | 51 | }; |
| 52 | 52 | ||
| 53 | /** | 53 | /** |
| @@ -56,9 +56,9 @@ struct ia_css_hdr_exclusion_params { | |||
| 56 | * the CSS API. Currenly, only test paramters are defined. | 56 | * the CSS API. Currenly, only test paramters are defined. |
| 57 | */ | 57 | */ |
| 58 | struct ia_css_hdr_config { | 58 | struct ia_css_hdr_config { |
| 59 | struct ia_css_hdr_irradiance_params irradiance; /**< HDR irradiance paramaters */ | 59 | struct ia_css_hdr_irradiance_params irradiance; /** HDR irradiance paramaters */ |
| 60 | struct ia_css_hdr_deghost_params deghost; /**< HDR deghosting parameters */ | 60 | struct ia_css_hdr_deghost_params deghost; /** HDR deghosting parameters */ |
| 61 | struct ia_css_hdr_exclusion_params exclusion; /**< HDR exclusion parameters */ | 61 | struct ia_css_hdr_exclusion_params exclusion; /** HDR exclusion parameters */ |
| 62 | }; | 62 | }; |
| 63 | 63 | ||
| 64 | #endif /* __IA_CSS_HDR_TYPES_H */ | 64 | #endif /* __IA_CSS_HDR_TYPES_H */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ipu2_io_ls/bayer_io_ls/ia_css_bayer_io.host.c b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ipu2_io_ls/bayer_io_ls/ia_css_bayer_io.host.c index 78e159c04851..f80480cf9de2 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ipu2_io_ls/bayer_io_ls/ia_css_bayer_io.host.c +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ipu2_io_ls/bayer_io_ls/ia_css_bayer_io.host.c | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | #ifdef ISP2401 | 1 | #ifdef ISP2401 |
| 2 | /** | 2 | /* |
| 3 | Support for Intel Camera Imaging ISP subsystem. | 3 | Support for Intel Camera Imaging ISP subsystem. |
| 4 | Copyright (c) 2010 - 2015, Intel Corporation. | 4 | Copyright (c) 2010 - 2015, Intel Corporation. |
| 5 | 5 | ||
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ipu2_io_ls/yuv444_io_ls/ia_css_yuv444_io.host.c b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ipu2_io_ls/yuv444_io_ls/ia_css_yuv444_io.host.c index f7e1a632c47e..eb9e9439cc21 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ipu2_io_ls/yuv444_io_ls/ia_css_yuv444_io.host.c +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ipu2_io_ls/yuv444_io_ls/ia_css_yuv444_io.host.c | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | #ifdef ISP2401 | 1 | #ifdef ISP2401 |
| 2 | /** | 2 | /* |
| 3 | Support for Intel Camera Imaging ISP subsystem. | 3 | Support for Intel Camera Imaging ISP subsystem. |
| 4 | Copyright (c) 2010 - 2015, Intel Corporation. | 4 | Copyright (c) 2010 - 2015, Intel Corporation. |
| 5 | 5 | ||
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/macc/macc1_5/ia_css_macc1_5_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/macc/macc1_5/ia_css_macc1_5_types.h index 3d510bf5886a..9cd31c2c0253 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/macc/macc1_5/ia_css_macc1_5_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/macc/macc1_5/ia_css_macc1_5_types.h | |||
| @@ -15,22 +15,22 @@ | |||
| 15 | #ifndef __IA_CSS_MACC1_5_TYPES_H | 15 | #ifndef __IA_CSS_MACC1_5_TYPES_H |
| 16 | #define __IA_CSS_MACC1_5_TYPES_H | 16 | #define __IA_CSS_MACC1_5_TYPES_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * CSS-API header file for Multi-Axis Color Conversion algorithm parameters. | 19 | * CSS-API header file for Multi-Axis Color Conversion algorithm parameters. |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | /** Multi-Axis Color Conversion configuration | 22 | /* Multi-Axis Color Conversion configuration |
| 23 | * | 23 | * |
| 24 | * ISP2.6.1: MACC1_5 is used. | 24 | * ISP2.6.1: MACC1_5 is used. |
| 25 | */ | 25 | */ |
| 26 | 26 | ||
| 27 | 27 | ||
| 28 | /** Number of axes in the MACC table. */ | 28 | /* Number of axes in the MACC table. */ |
| 29 | #define IA_CSS_MACC_NUM_AXES 16 | 29 | #define IA_CSS_MACC_NUM_AXES 16 |
| 30 | /** Number of coefficients per MACC axes. */ | 30 | /* Number of coefficients per MACC axes. */ |
| 31 | #define IA_CSS_MACC_NUM_COEFS 4 | 31 | #define IA_CSS_MACC_NUM_COEFS 4 |
| 32 | 32 | ||
| 33 | /** Multi-Axes Color Correction (MACC) table. | 33 | /* Multi-Axes Color Correction (MACC) table. |
| 34 | * | 34 | * |
| 35 | * ISP block: MACC (MACC by only matrix) | 35 | * ISP block: MACC (MACC by only matrix) |
| 36 | * MACC1_5 (MACC by matrix and exponent(ia_css_macc_config)) | 36 | * MACC1_5 (MACC by matrix and exponent(ia_css_macc_config)) |
| @@ -55,19 +55,19 @@ | |||
| 55 | */ | 55 | */ |
| 56 | struct ia_css_macc1_5_table { | 56 | struct ia_css_macc1_5_table { |
| 57 | int16_t data[IA_CSS_MACC_NUM_COEFS * IA_CSS_MACC_NUM_AXES]; | 57 | int16_t data[IA_CSS_MACC_NUM_COEFS * IA_CSS_MACC_NUM_AXES]; |
| 58 | /**< 16 of 2x2 matix | 58 | /** 16 of 2x2 matix |
| 59 | MACC1_5: s[macc_config.exp].[13-macc_config.exp], [-8192,8191] | 59 | MACC1_5: s[macc_config.exp].[13-macc_config.exp], [-8192,8191] |
| 60 | default/ineffective: (s1.12) | 60 | default/ineffective: (s1.12) |
| 61 | 16 of "identity 2x2 matix" {4096,0,0,4096} */ | 61 | 16 of "identity 2x2 matix" {4096,0,0,4096} */ |
| 62 | }; | 62 | }; |
| 63 | 63 | ||
| 64 | /** Multi-Axes Color Correction (MACC) configuration. | 64 | /* Multi-Axes Color Correction (MACC) configuration. |
| 65 | * | 65 | * |
| 66 | * ISP block: MACC1_5 (MACC by matrix and exponent(ia_css_macc_config)) | 66 | * ISP block: MACC1_5 (MACC by matrix and exponent(ia_css_macc_config)) |
| 67 | * ISP2: MACC1_5 is used. | 67 | * ISP2: MACC1_5 is used. |
| 68 | */ | 68 | */ |
| 69 | struct ia_css_macc1_5_config { | 69 | struct ia_css_macc1_5_config { |
| 70 | uint8_t exp; /**< Common exponent of ia_css_macc_table. | 70 | uint8_t exp; /** Common exponent of ia_css_macc_table. |
| 71 | u8.0, [0,13], default 1, ineffective 1 */ | 71 | u8.0, [0,13], default 1, ineffective 1 */ |
| 72 | }; | 72 | }; |
| 73 | 73 | ||
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/macc/macc_1.0/ia_css_macc_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/macc/macc_1.0/ia_css_macc_types.h index a25581c6f3ac..2c9e5a8ceb98 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/macc/macc_1.0/ia_css_macc_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/macc/macc_1.0/ia_css_macc_types.h | |||
| @@ -15,17 +15,17 @@ | |||
| 15 | #ifndef __IA_CSS_MACC_TYPES_H | 15 | #ifndef __IA_CSS_MACC_TYPES_H |
| 16 | #define __IA_CSS_MACC_TYPES_H | 16 | #define __IA_CSS_MACC_TYPES_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * CSS-API header file for Multi-Axis Color Correction (MACC) parameters. | 19 | * CSS-API header file for Multi-Axis Color Correction (MACC) parameters. |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | /** Number of axes in the MACC table. */ | 22 | /* Number of axes in the MACC table. */ |
| 23 | #define IA_CSS_MACC_NUM_AXES 16 | 23 | #define IA_CSS_MACC_NUM_AXES 16 |
| 24 | /** Number of coefficients per MACC axes. */ | 24 | /* Number of coefficients per MACC axes. */ |
| 25 | #define IA_CSS_MACC_NUM_COEFS 4 | 25 | #define IA_CSS_MACC_NUM_COEFS 4 |
| 26 | /** The number of planes in the morphing table. */ | 26 | /* The number of planes in the morphing table. */ |
| 27 | 27 | ||
| 28 | /** Multi-Axis Color Correction (MACC) table. | 28 | /* Multi-Axis Color Correction (MACC) table. |
| 29 | * | 29 | * |
| 30 | * ISP block: MACC1 (MACC by only matrix) | 30 | * ISP block: MACC1 (MACC by only matrix) |
| 31 | * MACC2 (MACC by matrix and exponent(ia_css_macc_config)) | 31 | * MACC2 (MACC by matrix and exponent(ia_css_macc_config)) |
| @@ -51,7 +51,7 @@ | |||
| 51 | 51 | ||
| 52 | struct ia_css_macc_table { | 52 | struct ia_css_macc_table { |
| 53 | int16_t data[IA_CSS_MACC_NUM_COEFS * IA_CSS_MACC_NUM_AXES]; | 53 | int16_t data[IA_CSS_MACC_NUM_COEFS * IA_CSS_MACC_NUM_AXES]; |
| 54 | /**< 16 of 2x2 matix | 54 | /** 16 of 2x2 matix |
| 55 | MACC1: s2.13, [-65536,65535] | 55 | MACC1: s2.13, [-65536,65535] |
| 56 | default/ineffective: | 56 | default/ineffective: |
| 57 | 16 of "identity 2x2 matix" {8192,0,0,8192} | 57 | 16 of "identity 2x2 matix" {8192,0,0,8192} |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ob/ob2/ia_css_ob2_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ob/ob2/ia_css_ob2_types.h index eeaadfeb5a1e..d981394c1c11 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ob/ob2/ia_css_ob2_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ob/ob2/ia_css_ob2_types.h | |||
| @@ -15,11 +15,11 @@ | |||
| 15 | #ifndef __IA_CSS_OB2_TYPES_H | 15 | #ifndef __IA_CSS_OB2_TYPES_H |
| 16 | #define __IA_CSS_OB2_TYPES_H | 16 | #define __IA_CSS_OB2_TYPES_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * CSS-API header file for Optical Black algorithm parameters. | 19 | * CSS-API header file for Optical Black algorithm parameters. |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | /** Optical Black configuration | 22 | /* Optical Black configuration |
| 23 | * | 23 | * |
| 24 | * ISP2.6.1: OB2 is used. | 24 | * ISP2.6.1: OB2 is used. |
| 25 | */ | 25 | */ |
| @@ -27,16 +27,16 @@ | |||
| 27 | #include "ia_css_frac.h" | 27 | #include "ia_css_frac.h" |
| 28 | 28 | ||
| 29 | struct ia_css_ob2_config { | 29 | struct ia_css_ob2_config { |
| 30 | ia_css_u0_16 level_gr; /**< Black level for GR pixels. | 30 | ia_css_u0_16 level_gr; /** Black level for GR pixels. |
| 31 | u0.16, [0,65535], | 31 | u0.16, [0,65535], |
| 32 | default/ineffective 0 */ | 32 | default/ineffective 0 */ |
| 33 | ia_css_u0_16 level_r; /**< Black level for R pixels. | 33 | ia_css_u0_16 level_r; /** Black level for R pixels. |
| 34 | u0.16, [0,65535], | 34 | u0.16, [0,65535], |
| 35 | default/ineffective 0 */ | 35 | default/ineffective 0 */ |
| 36 | ia_css_u0_16 level_b; /**< Black level for B pixels. | 36 | ia_css_u0_16 level_b; /** Black level for B pixels. |
| 37 | u0.16, [0,65535], | 37 | u0.16, [0,65535], |
| 38 | default/ineffective 0 */ | 38 | default/ineffective 0 */ |
| 39 | ia_css_u0_16 level_gb; /**< Black level for GB pixels. | 39 | ia_css_u0_16 level_gb; /** Black level for GB pixels. |
| 40 | u0.16, [0,65535], | 40 | u0.16, [0,65535], |
| 41 | default/ineffective 0 */ | 41 | default/ineffective 0 */ |
| 42 | }; | 42 | }; |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ob/ob_1.0/ia_css_ob_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ob/ob_1.0/ia_css_ob_types.h index 88459b6c003d..a9717b8f44ac 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ob/ob_1.0/ia_css_ob_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ob/ob_1.0/ia_css_ob_types.h | |||
| @@ -15,51 +15,51 @@ | |||
| 15 | #ifndef __IA_CSS_OB_TYPES_H | 15 | #ifndef __IA_CSS_OB_TYPES_H |
| 16 | #define __IA_CSS_OB_TYPES_H | 16 | #define __IA_CSS_OB_TYPES_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * CSS-API header file for Optical Black level parameters. | 19 | * CSS-API header file for Optical Black level parameters. |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | #include "ia_css_frac.h" | 22 | #include "ia_css_frac.h" |
| 23 | 23 | ||
| 24 | /** Optical black mode. | 24 | /* Optical black mode. |
| 25 | */ | 25 | */ |
| 26 | enum ia_css_ob_mode { | 26 | enum ia_css_ob_mode { |
| 27 | IA_CSS_OB_MODE_NONE, /**< OB has no effect. */ | 27 | IA_CSS_OB_MODE_NONE, /** OB has no effect. */ |
| 28 | IA_CSS_OB_MODE_FIXED, /**< Fixed OB */ | 28 | IA_CSS_OB_MODE_FIXED, /** Fixed OB */ |
| 29 | IA_CSS_OB_MODE_RASTER /**< Raster OB */ | 29 | IA_CSS_OB_MODE_RASTER /** Raster OB */ |
| 30 | }; | 30 | }; |
| 31 | 31 | ||
| 32 | /** Optical Black level configuration. | 32 | /* Optical Black level configuration. |
| 33 | * | 33 | * |
| 34 | * ISP block: OB1 | 34 | * ISP block: OB1 |
| 35 | * ISP1: OB1 is used. | 35 | * ISP1: OB1 is used. |
| 36 | * ISP2: OB1 is used. | 36 | * ISP2: OB1 is used. |
| 37 | */ | 37 | */ |
| 38 | struct ia_css_ob_config { | 38 | struct ia_css_ob_config { |
| 39 | enum ia_css_ob_mode mode; /**< Mode (None / Fixed / Raster). | 39 | enum ia_css_ob_mode mode; /** Mode (None / Fixed / Raster). |
| 40 | enum, [0,2], | 40 | enum, [0,2], |
| 41 | default 1, ineffective 0 */ | 41 | default 1, ineffective 0 */ |
| 42 | ia_css_u0_16 level_gr; /**< Black level for GR pixels | 42 | ia_css_u0_16 level_gr; /** Black level for GR pixels |
| 43 | (used for Fixed Mode only). | 43 | (used for Fixed Mode only). |
| 44 | u0.16, [0,65535], | 44 | u0.16, [0,65535], |
| 45 | default/ineffective 0 */ | 45 | default/ineffective 0 */ |
| 46 | ia_css_u0_16 level_r; /**< Black level for R pixels | 46 | ia_css_u0_16 level_r; /** Black level for R pixels |
| 47 | (used for Fixed Mode only). | 47 | (used for Fixed Mode only). |
| 48 | u0.16, [0,65535], | 48 | u0.16, [0,65535], |
| 49 | default/ineffective 0 */ | 49 | default/ineffective 0 */ |
| 50 | ia_css_u0_16 level_b; /**< Black level for B pixels | 50 | ia_css_u0_16 level_b; /** Black level for B pixels |
| 51 | (used for Fixed Mode only). | 51 | (used for Fixed Mode only). |
| 52 | u0.16, [0,65535], | 52 | u0.16, [0,65535], |
| 53 | default/ineffective 0 */ | 53 | default/ineffective 0 */ |
| 54 | ia_css_u0_16 level_gb; /**< Black level for GB pixels | 54 | ia_css_u0_16 level_gb; /** Black level for GB pixels |
| 55 | (used for Fixed Mode only). | 55 | (used for Fixed Mode only). |
| 56 | u0.16, [0,65535], | 56 | u0.16, [0,65535], |
| 57 | default/ineffective 0 */ | 57 | default/ineffective 0 */ |
| 58 | uint16_t start_position; /**< Start position of OB area | 58 | uint16_t start_position; /** Start position of OB area |
| 59 | (used for Raster Mode only). | 59 | (used for Raster Mode only). |
| 60 | u16.0, [0,63], | 60 | u16.0, [0,63], |
| 61 | default/ineffective 0 */ | 61 | default/ineffective 0 */ |
| 62 | uint16_t end_position; /**< End position of OB area | 62 | uint16_t end_position; /** End position of OB area |
| 63 | (used for Raster Mode only). | 63 | (used for Raster Mode only). |
| 64 | u16.0, [0,63], | 64 | u16.0, [0,63], |
| 65 | default/ineffective 0 */ | 65 | default/ineffective 0 */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/output/output_1.0/ia_css_output_param.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/output/output_1.0/ia_css_output_param.h index 26ec27e085c1..eb7defa41145 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/output/output_1.0/ia_css_output_param.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/output/output_1.0/ia_css_output_param.h | |||
| @@ -19,7 +19,7 @@ | |||
| 19 | #include "dma.h" | 19 | #include "dma.h" |
| 20 | #include "ia_css_frame_comm.h" /* ia_css_frame_sp_info */ | 20 | #include "ia_css_frame_comm.h" /* ia_css_frame_sp_info */ |
| 21 | 21 | ||
| 22 | /** output frame */ | 22 | /* output frame */ |
| 23 | struct sh_css_isp_output_isp_config { | 23 | struct sh_css_isp_output_isp_config { |
| 24 | uint32_t width_a_over_b; | 24 | uint32_t width_a_over_b; |
| 25 | uint32_t height; | 25 | uint32_t height; |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/output/output_1.0/ia_css_output_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/output/output_1.0/ia_css_output_types.h index 4335ac28b31d..9c7342fb8145 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/output/output_1.0/ia_css_output_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/output/output_1.0/ia_css_output_types.h | |||
| @@ -15,11 +15,11 @@ | |||
| 15 | #ifndef __IA_CSS_OUTPUT_TYPES_H | 15 | #ifndef __IA_CSS_OUTPUT_TYPES_H |
| 16 | #define __IA_CSS_OUTPUT_TYPES_H | 16 | #define __IA_CSS_OUTPUT_TYPES_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * CSS-API header file for parameters of output frames. | 19 | * CSS-API header file for parameters of output frames. |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | /** Output frame | 22 | /* Output frame |
| 23 | * | 23 | * |
| 24 | * ISP block: output frame | 24 | * ISP block: output frame |
| 25 | */ | 25 | */ |
| @@ -40,8 +40,8 @@ struct ia_css_output1_configuration { | |||
| 40 | }; | 40 | }; |
| 41 | 41 | ||
| 42 | struct ia_css_output_config { | 42 | struct ia_css_output_config { |
| 43 | uint8_t enable_hflip; /**< enable horizontal output mirroring */ | 43 | uint8_t enable_hflip; /** enable horizontal output mirroring */ |
| 44 | uint8_t enable_vflip; /**< enable vertical output mirroring */ | 44 | uint8_t enable_vflip; /** enable vertical output mirroring */ |
| 45 | }; | 45 | }; |
| 46 | 46 | ||
| 47 | #endif /* __IA_CSS_OUTPUT_TYPES_H */ | 47 | #endif /* __IA_CSS_OUTPUT_TYPES_H */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/qplane/qplane_2/ia_css_qplane_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/qplane/qplane_2/ia_css_qplane_types.h index 955fd472a241..62d371841619 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/qplane/qplane_2/ia_css_qplane_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/qplane/qplane_2/ia_css_qplane_types.h | |||
| @@ -18,7 +18,7 @@ | |||
| 18 | #include <ia_css_frame_public.h> | 18 | #include <ia_css_frame_public.h> |
| 19 | #include "sh_css_internal.h" | 19 | #include "sh_css_internal.h" |
| 20 | 20 | ||
| 21 | /** qplane frame | 21 | /* qplane frame |
| 22 | * | 22 | * |
| 23 | * ISP block: qplane frame | 23 | * ISP block: qplane frame |
| 24 | */ | 24 | */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/raw/raw_1.0/ia_css_raw_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/raw/raw_1.0/ia_css_raw_types.h index 54f8c299d227..5c0b8febd79a 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/raw/raw_1.0/ia_css_raw_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/raw/raw_1.0/ia_css_raw_types.h | |||
| @@ -18,7 +18,7 @@ | |||
| 18 | #include <ia_css_frame_public.h> | 18 | #include <ia_css_frame_public.h> |
| 19 | #include "sh_css_internal.h" | 19 | #include "sh_css_internal.h" |
| 20 | 20 | ||
| 21 | /** Raw frame | 21 | /* Raw frame |
| 22 | * | 22 | * |
| 23 | * ISP block: Raw frame | 23 | * ISP block: Raw frame |
| 24 | */ | 24 | */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ref/ref_1.0/ia_css_ref_param.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ref/ref_1.0/ia_css_ref_param.h index 1f1b72a417d1..026443b999a6 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ref/ref_1.0/ia_css_ref_param.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ref/ref_1.0/ia_css_ref_param.h | |||
| @@ -19,7 +19,7 @@ | |||
| 19 | #include "sh_css_defs.h" | 19 | #include "sh_css_defs.h" |
| 20 | #include "dma.h" | 20 | #include "dma.h" |
| 21 | 21 | ||
| 22 | /** Reference frame */ | 22 | /* Reference frame */ |
| 23 | struct ia_css_ref_configuration { | 23 | struct ia_css_ref_configuration { |
| 24 | const struct ia_css_frame *ref_frames[MAX_NUM_VIDEO_DELAY_FRAMES]; | 24 | const struct ia_css_frame *ref_frames[MAX_NUM_VIDEO_DELAY_FRAMES]; |
| 25 | uint32_t dvs_frame_delay; | 25 | uint32_t dvs_frame_delay; |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ref/ref_1.0/ia_css_ref_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ref/ref_1.0/ia_css_ref_types.h index ce0eaeeee9c6..4750fba268b9 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ref/ref_1.0/ia_css_ref_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ref/ref_1.0/ia_css_ref_types.h | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | #ifndef __IA_CSS_REF_TYPES_H | 15 | #ifndef __IA_CSS_REF_TYPES_H |
| 16 | #define __IA_CSS_REF_TYPES_H | 16 | #define __IA_CSS_REF_TYPES_H |
| 17 | 17 | ||
| 18 | /** Reference frame | 18 | /* Reference frame |
| 19 | * | 19 | * |
| 20 | * ISP block: reference frame | 20 | * ISP block: reference frame |
| 21 | */ | 21 | */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/s3a/s3a_1.0/ia_css_s3a_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/s3a/s3a_1.0/ia_css_s3a_types.h index f57ed1ec5981..8d674d2c6427 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/s3a/s3a_1.0/ia_css_s3a_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/s3a/s3a_1.0/ia_css_s3a_types.h | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | #ifndef __IA_CSS_S3A_TYPES_H | 15 | #ifndef __IA_CSS_S3A_TYPES_H |
| 16 | #define __IA_CSS_S3A_TYPES_H | 16 | #define __IA_CSS_S3A_TYPES_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * CSS-API header file for 3A statistics parameters. | 19 | * CSS-API header file for 3A statistics parameters. |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| @@ -25,11 +25,11 @@ | |||
| 25 | #include "../../../../components/stats_3a/src/stats_3a_public.h" | 25 | #include "../../../../components/stats_3a/src/stats_3a_public.h" |
| 26 | #endif | 26 | #endif |
| 27 | 27 | ||
| 28 | /** 3A configuration. This configures the 3A statistics collection | 28 | /* 3A configuration. This configures the 3A statistics collection |
| 29 | * module. | 29 | * module. |
| 30 | */ | 30 | */ |
| 31 | 31 | ||
| 32 | /** 3A statistics grid | 32 | /* 3A statistics grid |
| 33 | * | 33 | * |
| 34 | * ISP block: S3A1 (3A Support for 3A ver.1 (Histogram is not used for AE)) | 34 | * ISP block: S3A1 (3A Support for 3A ver.1 (Histogram is not used for AE)) |
| 35 | * S3A2 (3A Support for 3A ver.2 (Histogram is used for AE)) | 35 | * S3A2 (3A Support for 3A ver.2 (Histogram is used for AE)) |
| @@ -39,23 +39,23 @@ | |||
| 39 | struct ia_css_3a_grid_info { | 39 | struct ia_css_3a_grid_info { |
| 40 | 40 | ||
| 41 | #if defined(SYSTEM_css_skycam_c0_system) | 41 | #if defined(SYSTEM_css_skycam_c0_system) |
| 42 | uint32_t ae_enable; /**< ae enabled in binary, | 42 | uint32_t ae_enable; /** ae enabled in binary, |
| 43 | 0:disabled, 1:enabled */ | 43 | 0:disabled, 1:enabled */ |
| 44 | struct ae_public_config_grid_config ae_grd_info; /**< see description in ae_public.h*/ | 44 | struct ae_public_config_grid_config ae_grd_info; /** see description in ae_public.h*/ |
| 45 | 45 | ||
| 46 | uint32_t awb_enable; /**< awb enabled in binary, | 46 | uint32_t awb_enable; /** awb enabled in binary, |
| 47 | 0:disabled, 1:enabled */ | 47 | 0:disabled, 1:enabled */ |
| 48 | struct awb_public_config_grid_config awb_grd_info; /**< see description in awb_public.h*/ | 48 | struct awb_public_config_grid_config awb_grd_info; /** see description in awb_public.h*/ |
| 49 | 49 | ||
| 50 | uint32_t af_enable; /**< af enabled in binary, | 50 | uint32_t af_enable; /** af enabled in binary, |
| 51 | 0:disabled, 1:enabled */ | 51 | 0:disabled, 1:enabled */ |
| 52 | struct af_public_grid_config af_grd_info; /**< see description in af_public.h*/ | 52 | struct af_public_grid_config af_grd_info; /** see description in af_public.h*/ |
| 53 | 53 | ||
| 54 | uint32_t awb_fr_enable; /**< awb_fr enabled in binary, | 54 | uint32_t awb_fr_enable; /** awb_fr enabled in binary, |
| 55 | 0:disabled, 1:enabled */ | 55 | 0:disabled, 1:enabled */ |
| 56 | struct awb_fr_public_grid_config awb_fr_grd_info;/**< see description in awb_fr_public.h*/ | 56 | struct awb_fr_public_grid_config awb_fr_grd_info;/** see description in awb_fr_public.h*/ |
| 57 | 57 | ||
| 58 | uint32_t elem_bit_depth; /**< TODO:Taken from BYT - need input from AIQ | 58 | uint32_t elem_bit_depth; /** TODO:Taken from BYT - need input from AIQ |
| 59 | if needed for SKC | 59 | if needed for SKC |
| 60 | Bit depth of element used | 60 | Bit depth of element used |
| 61 | to calculate 3A statistics. | 61 | to calculate 3A statistics. |
| @@ -63,34 +63,34 @@ struct ia_css_3a_grid_info { | |||
| 63 | bayer bit depth in DSP. */ | 63 | bayer bit depth in DSP. */ |
| 64 | 64 | ||
| 65 | #else | 65 | #else |
| 66 | uint32_t enable; /**< 3A statistics enabled. | 66 | uint32_t enable; /** 3A statistics enabled. |
| 67 | 0:disabled, 1:enabled */ | 67 | 0:disabled, 1:enabled */ |
| 68 | uint32_t use_dmem; /**< DMEM or VMEM determines layout. | 68 | uint32_t use_dmem; /** DMEM or VMEM determines layout. |
| 69 | 0:3A statistics are stored to VMEM, | 69 | 0:3A statistics are stored to VMEM, |
| 70 | 1:3A statistics are stored to DMEM */ | 70 | 1:3A statistics are stored to DMEM */ |
| 71 | uint32_t has_histogram; /**< Statistics include histogram. | 71 | uint32_t has_histogram; /** Statistics include histogram. |
| 72 | 0:no histogram, 1:has histogram */ | 72 | 0:no histogram, 1:has histogram */ |
| 73 | uint32_t width; /**< Width of 3A grid table. | 73 | uint32_t width; /** Width of 3A grid table. |
| 74 | (= Horizontal number of grid cells | 74 | (= Horizontal number of grid cells |
| 75 | in table, which cells have effective | 75 | in table, which cells have effective |
| 76 | statistics.) */ | 76 | statistics.) */ |
| 77 | uint32_t height; /**< Height of 3A grid table. | 77 | uint32_t height; /** Height of 3A grid table. |
| 78 | (= Vertical number of grid cells | 78 | (= Vertical number of grid cells |
| 79 | in table, which cells have effective | 79 | in table, which cells have effective |
| 80 | statistics.) */ | 80 | statistics.) */ |
| 81 | uint32_t aligned_width; /**< Horizontal stride (for alloc). | 81 | uint32_t aligned_width; /** Horizontal stride (for alloc). |
| 82 | (= Horizontal number of grid cells | 82 | (= Horizontal number of grid cells |
| 83 | in table, which means | 83 | in table, which means |
| 84 | the allocated width.) */ | 84 | the allocated width.) */ |
| 85 | uint32_t aligned_height; /**< Vertical stride (for alloc). | 85 | uint32_t aligned_height; /** Vertical stride (for alloc). |
| 86 | (= Vertical number of grid cells | 86 | (= Vertical number of grid cells |
| 87 | in table, which means | 87 | in table, which means |
| 88 | the allocated height.) */ | 88 | the allocated height.) */ |
| 89 | uint32_t bqs_per_grid_cell; /**< Grid cell size in BQ(Bayer Quad) unit. | 89 | uint32_t bqs_per_grid_cell; /** Grid cell size in BQ(Bayer Quad) unit. |
| 90 | (1BQ means {Gr,R,B,Gb}(2x2 pixels).) | 90 | (1BQ means {Gr,R,B,Gb}(2x2 pixels).) |
| 91 | Valid values are 8,16,32,64. */ | 91 | Valid values are 8,16,32,64. */ |
| 92 | uint32_t deci_factor_log2; /**< log2 of bqs_per_grid_cell. */ | 92 | uint32_t deci_factor_log2; /** log2 of bqs_per_grid_cell. */ |
| 93 | uint32_t elem_bit_depth; /**< Bit depth of element used | 93 | uint32_t elem_bit_depth; /** Bit depth of element used |
| 94 | to calculate 3A statistics. | 94 | to calculate 3A statistics. |
| 95 | This is 13, which is the normalized | 95 | This is 13, which is the normalized |
| 96 | bayer bit depth in DSP. */ | 96 | bayer bit depth in DSP. */ |
| @@ -148,7 +148,7 @@ struct ia_css_3a_grid_info { | |||
| 148 | * However, that will require driver/ 3A lib modifications. | 148 | * However, that will require driver/ 3A lib modifications. |
| 149 | */ | 149 | */ |
| 150 | 150 | ||
| 151 | /** 3A configuration. This configures the 3A statistics collection | 151 | /* 3A configuration. This configures the 3A statistics collection |
| 152 | * module. | 152 | * module. |
| 153 | * | 153 | * |
| 154 | * ae_y_*: Coefficients to calculate luminance from bayer. | 154 | * ae_y_*: Coefficients to calculate luminance from bayer. |
| @@ -167,38 +167,38 @@ struct ia_css_3a_grid_info { | |||
| 167 | * ISP2: S3A2 and SDVS2 are used. | 167 | * ISP2: S3A2 and SDVS2 are used. |
| 168 | */ | 168 | */ |
| 169 | struct ia_css_3a_config { | 169 | struct ia_css_3a_config { |
| 170 | ia_css_u0_16 ae_y_coef_r; /**< Weight of R for Y. | 170 | ia_css_u0_16 ae_y_coef_r; /** Weight of R for Y. |
| 171 | u0.16, [0,65535], | 171 | u0.16, [0,65535], |
| 172 | default/ineffective 25559 */ | 172 | default/ineffective 25559 */ |
| 173 | ia_css_u0_16 ae_y_coef_g; /**< Weight of G for Y. | 173 | ia_css_u0_16 ae_y_coef_g; /** Weight of G for Y. |
| 174 | u0.16, [0,65535], | 174 | u0.16, [0,65535], |
| 175 | default/ineffective 32768 */ | 175 | default/ineffective 32768 */ |
| 176 | ia_css_u0_16 ae_y_coef_b; /**< Weight of B for Y. | 176 | ia_css_u0_16 ae_y_coef_b; /** Weight of B for Y. |
| 177 | u0.16, [0,65535], | 177 | u0.16, [0,65535], |
| 178 | default/ineffective 7209 */ | 178 | default/ineffective 7209 */ |
| 179 | ia_css_u0_16 awb_lg_high_raw; /**< AWB level gate high for raw. | 179 | ia_css_u0_16 awb_lg_high_raw; /** AWB level gate high for raw. |
| 180 | u0.16, [0,65535], | 180 | u0.16, [0,65535], |
| 181 | default 65472(=1023*64), | 181 | default 65472(=1023*64), |
| 182 | ineffective 65535 */ | 182 | ineffective 65535 */ |
| 183 | ia_css_u0_16 awb_lg_low; /**< AWB level gate low. | 183 | ia_css_u0_16 awb_lg_low; /** AWB level gate low. |
| 184 | u0.16, [0,65535], | 184 | u0.16, [0,65535], |
| 185 | default 64(=1*64), | 185 | default 64(=1*64), |
| 186 | ineffective 0 */ | 186 | ineffective 0 */ |
| 187 | ia_css_u0_16 awb_lg_high; /**< AWB level gate high. | 187 | ia_css_u0_16 awb_lg_high; /** AWB level gate high. |
| 188 | u0.16, [0,65535], | 188 | u0.16, [0,65535], |
| 189 | default 65535, | 189 | default 65535, |
| 190 | ineffective 65535 */ | 190 | ineffective 65535 */ |
| 191 | ia_css_s0_15 af_fir1_coef[7]; /**< AF FIR coefficients of fir1. | 191 | ia_css_s0_15 af_fir1_coef[7]; /** AF FIR coefficients of fir1. |
| 192 | s0.15, [-32768,32767], | 192 | s0.15, [-32768,32767], |
| 193 | default/ineffective | 193 | default/ineffective |
| 194 | -6689,-12207,-32768,32767,12207,6689,0 */ | 194 | -6689,-12207,-32768,32767,12207,6689,0 */ |
| 195 | ia_css_s0_15 af_fir2_coef[7]; /**< AF FIR coefficients of fir2. | 195 | ia_css_s0_15 af_fir2_coef[7]; /** AF FIR coefficients of fir2. |
| 196 | s0.15, [-32768,32767], | 196 | s0.15, [-32768,32767], |
| 197 | default/ineffective | 197 | default/ineffective |
| 198 | 2053,0,-18437,32767,-18437,2053,0 */ | 198 | 2053,0,-18437,32767,-18437,2053,0 */ |
| 199 | }; | 199 | }; |
| 200 | 200 | ||
| 201 | /** 3A statistics. This structure describes the data stored | 201 | /* 3A statistics. This structure describes the data stored |
| 202 | * in each 3A grid point. | 202 | * in each 3A grid point. |
| 203 | * | 203 | * |
| 204 | * ISP block: S3A1 (3A Support for 3A ver.1) (Histogram is not used for AE) | 204 | * ISP block: S3A1 (3A Support for 3A ver.1) (Histogram is not used for AE) |
| @@ -209,43 +209,43 @@ struct ia_css_3a_config { | |||
| 209 | * ISP2: S3A2 is used. | 209 | * ISP2: S3A2 is used. |
| 210 | */ | 210 | */ |
| 211 | struct ia_css_3a_output { | 211 | struct ia_css_3a_output { |
| 212 | int32_t ae_y; /**< Sum of Y in a statistics window, for AE. | 212 | int32_t ae_y; /** Sum of Y in a statistics window, for AE. |
| 213 | (u19.13) */ | 213 | (u19.13) */ |
| 214 | int32_t awb_cnt; /**< Number of effective pixels | 214 | int32_t awb_cnt; /** Number of effective pixels |
| 215 | in a statistics window. | 215 | in a statistics window. |
| 216 | Pixels passed by the AWB level gate check are | 216 | Pixels passed by the AWB level gate check are |
| 217 | judged as "effective". (u32) */ | 217 | judged as "effective". (u32) */ |
| 218 | int32_t awb_gr; /**< Sum of Gr in a statistics window, for AWB. | 218 | int32_t awb_gr; /** Sum of Gr in a statistics window, for AWB. |
| 219 | All Gr pixels (not only for effective pixels) | 219 | All Gr pixels (not only for effective pixels) |
| 220 | are summed. (u19.13) */ | 220 | are summed. (u19.13) */ |
| 221 | int32_t awb_r; /**< Sum of R in a statistics window, for AWB. | 221 | int32_t awb_r; /** Sum of R in a statistics window, for AWB. |
| 222 | All R pixels (not only for effective pixels) | 222 | All R pixels (not only for effective pixels) |
| 223 | are summed. (u19.13) */ | 223 | are summed. (u19.13) */ |
| 224 | int32_t awb_b; /**< Sum of B in a statistics window, for AWB. | 224 | int32_t awb_b; /** Sum of B in a statistics window, for AWB. |
| 225 | All B pixels (not only for effective pixels) | 225 | All B pixels (not only for effective pixels) |
| 226 | are summed. (u19.13) */ | 226 | are summed. (u19.13) */ |
| 227 | int32_t awb_gb; /**< Sum of Gb in a statistics window, for AWB. | 227 | int32_t awb_gb; /** Sum of Gb in a statistics window, for AWB. |
| 228 | All Gb pixels (not only for effective pixels) | 228 | All Gb pixels (not only for effective pixels) |
| 229 | are summed. (u19.13) */ | 229 | are summed. (u19.13) */ |
| 230 | int32_t af_hpf1; /**< Sum of |Y| following high pass filter af_fir1 | 230 | int32_t af_hpf1; /** Sum of |Y| following high pass filter af_fir1 |
| 231 | within a statistics window, for AF. (u19.13) */ | 231 | within a statistics window, for AF. (u19.13) */ |
| 232 | int32_t af_hpf2; /**< Sum of |Y| following high pass filter af_fir2 | 232 | int32_t af_hpf2; /** Sum of |Y| following high pass filter af_fir2 |
| 233 | within a statistics window, for AF. (u19.13) */ | 233 | within a statistics window, for AF. (u19.13) */ |
| 234 | }; | 234 | }; |
| 235 | 235 | ||
| 236 | 236 | ||
| 237 | /** 3A Statistics. This structure describes the statistics that are generated | 237 | /* 3A Statistics. This structure describes the statistics that are generated |
| 238 | * using the provided configuration (ia_css_3a_config). | 238 | * using the provided configuration (ia_css_3a_config). |
| 239 | */ | 239 | */ |
| 240 | struct ia_css_3a_statistics { | 240 | struct ia_css_3a_statistics { |
| 241 | struct ia_css_3a_grid_info grid; /**< grid info contains the dimensions of the 3A grid */ | 241 | struct ia_css_3a_grid_info grid; /** grid info contains the dimensions of the 3A grid */ |
| 242 | struct ia_css_3a_output *data; /**< the pointer to 3a_output[grid.width * grid.height] | 242 | struct ia_css_3a_output *data; /** the pointer to 3a_output[grid.width * grid.height] |
| 243 | containing the 3A statistics */ | 243 | containing the 3A statistics */ |
| 244 | struct ia_css_3a_rgby_output *rgby_data;/**< the pointer to 3a_rgby_output[256] | 244 | struct ia_css_3a_rgby_output *rgby_data;/** the pointer to 3a_rgby_output[256] |
| 245 | containing the histogram */ | 245 | containing the histogram */ |
| 246 | }; | 246 | }; |
| 247 | 247 | ||
| 248 | /** Histogram (Statistics for AE). | 248 | /* Histogram (Statistics for AE). |
| 249 | * | 249 | * |
| 250 | * 4 histograms(r,g,b,y), | 250 | * 4 histograms(r,g,b,y), |
| 251 | * 256 bins for each histogram, unsigned 24bit value for each bin. | 251 | * 256 bins for each histogram, unsigned 24bit value for each bin. |
| @@ -256,10 +256,10 @@ struct ia_css_3a_statistics { | |||
| 256 | * ISP2: HIST2 is used. | 256 | * ISP2: HIST2 is used. |
| 257 | */ | 257 | */ |
| 258 | struct ia_css_3a_rgby_output { | 258 | struct ia_css_3a_rgby_output { |
| 259 | uint32_t r; /**< Number of R of one bin of the histogram R. (u24) */ | 259 | uint32_t r; /** Number of R of one bin of the histogram R. (u24) */ |
| 260 | uint32_t g; /**< Number of G of one bin of the histogram G. (u24) */ | 260 | uint32_t g; /** Number of G of one bin of the histogram G. (u24) */ |
| 261 | uint32_t b; /**< Number of B of one bin of the histogram B. (u24) */ | 261 | uint32_t b; /** Number of B of one bin of the histogram B. (u24) */ |
| 262 | uint32_t y; /**< Number of Y of one bin of the histogram Y. (u24) */ | 262 | uint32_t y; /** Number of Y of one bin of the histogram Y. (u24) */ |
| 263 | }; | 263 | }; |
| 264 | 264 | ||
| 265 | #endif /* __IA_CSS_S3A_TYPES_H */ | 265 | #endif /* __IA_CSS_S3A_TYPES_H */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/s3a_stat_ls/ia_css_s3a_stat_ls_param.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/s3a_stat_ls/ia_css_s3a_stat_ls_param.h index 8b2b56b0310b..9aa019539f47 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/s3a_stat_ls/ia_css_s3a_stat_ls_param.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/s3a_stat_ls/ia_css_s3a_stat_ls_param.h | |||
| @@ -22,7 +22,7 @@ | |||
| 22 | 22 | ||
| 23 | #define NUM_S3A_LS 1 | 23 | #define NUM_S3A_LS 1 |
| 24 | 24 | ||
| 25 | /** s3a statistics store */ | 25 | /* s3a statistics store */ |
| 26 | #ifdef ISP2401 | 26 | #ifdef ISP2401 |
| 27 | struct ia_css_s3a_stat_ls_configuration { | 27 | struct ia_css_s3a_stat_ls_configuration { |
| 28 | uint32_t s3a_grid_size_log2; | 28 | uint32_t s3a_grid_size_log2; |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/sc/sc_1.0/ia_css_sc.host.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/sc/sc_1.0/ia_css_sc.host.h index 44e3c43a5d4a..b35ac3e4009b 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/sc/sc_1.0/ia_css_sc.host.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/sc/sc_1.0/ia_css_sc.host.h | |||
| @@ -32,7 +32,7 @@ ia_css_sc_dump( | |||
| 32 | unsigned level); | 32 | unsigned level); |
| 33 | 33 | ||
| 34 | #ifdef ISP2401 | 34 | #ifdef ISP2401 |
| 35 | /** @brief Configure the shading correction. | 35 | /* @brief Configure the shading correction. |
| 36 | * @param[out] to Parameters used in the shading correction kernel in the isp. | 36 | * @param[out] to Parameters used in the shading correction kernel in the isp. |
| 37 | * @param[in] from Parameters passed from the host. | 37 | * @param[in] from Parameters passed from the host. |
| 38 | * @param[in] size Size of the sh_css_isp_sc_isp_config structure. | 38 | * @param[in] size Size of the sh_css_isp_sc_isp_config structure. |
| @@ -45,7 +45,7 @@ ia_css_sc_config( | |||
| 45 | const struct ia_css_sc_configuration *from, | 45 | const struct ia_css_sc_configuration *from, |
| 46 | unsigned size); | 46 | unsigned size); |
| 47 | 47 | ||
| 48 | /** @brief Configure the shading correction. | 48 | /* @brief Configure the shading correction. |
| 49 | * @param[in] binary The binary, which has the shading correction. | 49 | * @param[in] binary The binary, which has the shading correction. |
| 50 | * @param[in] internal_frame_origin_x_bqs_on_sctbl | 50 | * @param[in] internal_frame_origin_x_bqs_on_sctbl |
| 51 | * X coordinate (in bqs) of the origin of the internal frame on the shading table. | 51 | * X coordinate (in bqs) of the origin of the internal frame on the shading table. |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/sc/sc_1.0/ia_css_sc_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/sc/sc_1.0/ia_css_sc_types.h index 5a833bc48af1..30ce499ac8cf 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/sc/sc_1.0/ia_css_sc_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/sc/sc_1.0/ia_css_sc_types.h | |||
| @@ -15,25 +15,25 @@ | |||
| 15 | #ifndef __IA_CSS_SC_TYPES_H | 15 | #ifndef __IA_CSS_SC_TYPES_H |
| 16 | #define __IA_CSS_SC_TYPES_H | 16 | #define __IA_CSS_SC_TYPES_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * CSS-API header file for Lens Shading Correction (SC) parameters. | 19 | * CSS-API header file for Lens Shading Correction (SC) parameters. |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | 22 | ||
| 23 | /** Number of color planes in the shading table. */ | 23 | /* Number of color planes in the shading table. */ |
| 24 | #define IA_CSS_SC_NUM_COLORS 4 | 24 | #define IA_CSS_SC_NUM_COLORS 4 |
| 25 | 25 | ||
| 26 | /** The 4 colors that a shading table consists of. | 26 | /* The 4 colors that a shading table consists of. |
| 27 | * For each color we store a grid of values. | 27 | * For each color we store a grid of values. |
| 28 | */ | 28 | */ |
| 29 | enum ia_css_sc_color { | 29 | enum ia_css_sc_color { |
| 30 | IA_CSS_SC_COLOR_GR, /**< Green on a green-red line */ | 30 | IA_CSS_SC_COLOR_GR, /** Green on a green-red line */ |
| 31 | IA_CSS_SC_COLOR_R, /**< Red */ | 31 | IA_CSS_SC_COLOR_R, /** Red */ |
| 32 | IA_CSS_SC_COLOR_B, /**< Blue */ | 32 | IA_CSS_SC_COLOR_B, /** Blue */ |
| 33 | IA_CSS_SC_COLOR_GB /**< Green on a green-blue line */ | 33 | IA_CSS_SC_COLOR_GB /** Green on a green-blue line */ |
| 34 | }; | 34 | }; |
| 35 | 35 | ||
| 36 | /** Lens Shading Correction table. | 36 | /* Lens Shading Correction table. |
| 37 | * | 37 | * |
| 38 | * This describes the color shading artefacts | 38 | * This describes the color shading artefacts |
| 39 | * introduced by lens imperfections. To correct artefacts, | 39 | * introduced by lens imperfections. To correct artefacts, |
| @@ -64,39 +64,39 @@ enum ia_css_sc_color { | |||
| 64 | * ISP2: SC1 is used. | 64 | * ISP2: SC1 is used. |
| 65 | */ | 65 | */ |
| 66 | struct ia_css_shading_table { | 66 | struct ia_css_shading_table { |
| 67 | uint32_t enable; /**< Set to false for no shading correction. | 67 | uint32_t enable; /** Set to false for no shading correction. |
| 68 | The data field can be NULL when enable == true */ | 68 | The data field can be NULL when enable == true */ |
| 69 | /* ------ deprecated(bz675) : from ------ */ | 69 | /* ------ deprecated(bz675) : from ------ */ |
| 70 | uint32_t sensor_width; /**< Native sensor width in pixels. */ | 70 | uint32_t sensor_width; /** Native sensor width in pixels. */ |
| 71 | uint32_t sensor_height; /**< Native sensor height in lines. | 71 | uint32_t sensor_height; /** Native sensor height in lines. |
| 72 | When shading_settings.enable_shading_table_conversion is set | 72 | When shading_settings.enable_shading_table_conversion is set |
| 73 | as 0, sensor_width and sensor_height are NOT used. | 73 | as 0, sensor_width and sensor_height are NOT used. |
| 74 | These are used only in the legacy shading table conversion | 74 | These are used only in the legacy shading table conversion |
| 75 | in the css, when shading_settings. | 75 | in the css, when shading_settings. |
| 76 | enable_shading_table_conversion is set as 1. */ | 76 | enable_shading_table_conversion is set as 1. */ |
| 77 | /* ------ deprecated(bz675) : to ------ */ | 77 | /* ------ deprecated(bz675) : to ------ */ |
| 78 | uint32_t width; /**< Number of data points per line per color. | 78 | uint32_t width; /** Number of data points per line per color. |
| 79 | u8.0, [0,81] */ | 79 | u8.0, [0,81] */ |
| 80 | uint32_t height; /**< Number of lines of data points per color. | 80 | uint32_t height; /** Number of lines of data points per color. |
| 81 | u8.0, [0,61] */ | 81 | u8.0, [0,61] */ |
| 82 | uint32_t fraction_bits; /**< Bits of fractional part in the data | 82 | uint32_t fraction_bits; /** Bits of fractional part in the data |
| 83 | points. | 83 | points. |
| 84 | u8.0, [0,13] */ | 84 | u8.0, [0,13] */ |
| 85 | uint16_t *data[IA_CSS_SC_NUM_COLORS]; | 85 | uint16_t *data[IA_CSS_SC_NUM_COLORS]; |
| 86 | /**< Table data, one array for each color. | 86 | /** Table data, one array for each color. |
| 87 | Use ia_css_sc_color to index this array. | 87 | Use ia_css_sc_color to index this array. |
| 88 | u[13-fraction_bits].[fraction_bits], [0,8191] */ | 88 | u[13-fraction_bits].[fraction_bits], [0,8191] */ |
| 89 | }; | 89 | }; |
| 90 | 90 | ||
| 91 | /* ------ deprecated(bz675) : from ------ */ | 91 | /* ------ deprecated(bz675) : from ------ */ |
| 92 | /** Shading Correction settings. | 92 | /* Shading Correction settings. |
| 93 | * | 93 | * |
| 94 | * NOTE: | 94 | * NOTE: |
| 95 | * This structure should be removed when the shading table conversion is | 95 | * This structure should be removed when the shading table conversion is |
| 96 | * removed from the css. | 96 | * removed from the css. |
| 97 | */ | 97 | */ |
| 98 | struct ia_css_shading_settings { | 98 | struct ia_css_shading_settings { |
| 99 | uint32_t enable_shading_table_conversion; /**< Set to 0, | 99 | uint32_t enable_shading_table_conversion; /** Set to 0, |
| 100 | if the conversion of the shading table should be disabled | 100 | if the conversion of the shading table should be disabled |
| 101 | in the css. (default 1) | 101 | in the css. (default 1) |
| 102 | 0: The shading table is directly sent to the isp. | 102 | 0: The shading table is directly sent to the isp. |
| @@ -119,14 +119,14 @@ struct ia_css_shading_settings { | |||
| 119 | 119 | ||
| 120 | #ifdef ISP2401 | 120 | #ifdef ISP2401 |
| 121 | 121 | ||
| 122 | /** Shading Correction configuration. | 122 | /* Shading Correction configuration. |
| 123 | * | 123 | * |
| 124 | * NOTE: The shading table size is larger than or equal to the internal frame size. | 124 | * NOTE: The shading table size is larger than or equal to the internal frame size. |
| 125 | */ | 125 | */ |
| 126 | struct ia_css_sc_configuration { | 126 | struct ia_css_sc_configuration { |
| 127 | uint32_t internal_frame_origin_x_bqs_on_sctbl; /**< Origin X (in bqs) of internal frame on shading table. */ | 127 | uint32_t internal_frame_origin_x_bqs_on_sctbl; /** Origin X (in bqs) of internal frame on shading table. */ |
| 128 | uint32_t internal_frame_origin_y_bqs_on_sctbl; /**< Origin Y (in bqs) of internal frame on shading table. */ | 128 | uint32_t internal_frame_origin_y_bqs_on_sctbl; /** Origin Y (in bqs) of internal frame on shading table. */ |
| 129 | /**< NOTE: bqs = size in BQ(Bayer Quad) unit. | 129 | /** NOTE: bqs = size in BQ(Bayer Quad) unit. |
| 130 | 1BQ means {Gr,R,B,Gb}(2x2 pixels). | 130 | 1BQ means {Gr,R,B,Gb}(2x2 pixels). |
| 131 | Horizontal 1 bqs corresponds to horizontal 2 pixels. | 131 | Horizontal 1 bqs corresponds to horizontal 2 pixels. |
| 132 | Vertical 1 bqs corresponds to vertical 2 pixels. */ | 132 | Vertical 1 bqs corresponds to vertical 2 pixels. */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/sdis/common/ia_css_sdis_common_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/sdis/common/ia_css_sdis_common_types.h index 295dc60b778c..031983c357e4 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/sdis/common/ia_css_sdis_common_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/sdis/common/ia_css_sdis_common_types.h | |||
| @@ -15,21 +15,21 @@ | |||
| 15 | #ifndef __IA_CSS_SDIS_COMMON_TYPES_H | 15 | #ifndef __IA_CSS_SDIS_COMMON_TYPES_H |
| 16 | #define __IA_CSS_SDIS_COMMON_TYPES_H | 16 | #define __IA_CSS_SDIS_COMMON_TYPES_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * CSS-API header file for DVS statistics parameters. | 19 | * CSS-API header file for DVS statistics parameters. |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | #include <type_support.h> | 22 | #include <type_support.h> |
| 23 | 23 | ||
| 24 | /** DVS statistics grid dimensions in number of cells. | 24 | /* DVS statistics grid dimensions in number of cells. |
| 25 | */ | 25 | */ |
| 26 | 26 | ||
| 27 | struct ia_css_dvs_grid_dim { | 27 | struct ia_css_dvs_grid_dim { |
| 28 | uint32_t width; /**< Width of DVS grid table in cells */ | 28 | uint32_t width; /** Width of DVS grid table in cells */ |
| 29 | uint32_t height; /**< Height of DVS grid table in cells */ | 29 | uint32_t height; /** Height of DVS grid table in cells */ |
| 30 | }; | 30 | }; |
| 31 | 31 | ||
| 32 | /** DVS statistics dimensions in number of cells for | 32 | /* DVS statistics dimensions in number of cells for |
| 33 | * grid, coeffieicient and projection. | 33 | * grid, coeffieicient and projection. |
| 34 | */ | 34 | */ |
| 35 | 35 | ||
| @@ -55,7 +55,7 @@ struct ia_css_sdis_info { | |||
| 55 | 0, /* dis_deci_factor_log2 */ \ | 55 | 0, /* dis_deci_factor_log2 */ \ |
| 56 | } | 56 | } |
| 57 | 57 | ||
| 58 | /** DVS statistics grid | 58 | /* DVS statistics grid |
| 59 | * | 59 | * |
| 60 | * ISP block: SDVS1 (DIS/DVS Support for DIS/DVS ver.1 (2-axes)) | 60 | * ISP block: SDVS1 (DIS/DVS Support for DIS/DVS ver.1 (2-axes)) |
| 61 | * SDVS2 (DVS Support for DVS ver.2 (6-axes)) | 61 | * SDVS2 (DVS Support for DVS ver.2 (6-axes)) |
| @@ -63,23 +63,23 @@ struct ia_css_sdis_info { | |||
| 63 | * ISP2: SDVS2 is used. | 63 | * ISP2: SDVS2 is used. |
| 64 | */ | 64 | */ |
| 65 | struct ia_css_dvs_grid_res { | 65 | struct ia_css_dvs_grid_res { |
| 66 | uint32_t width; /**< Width of DVS grid table. | 66 | uint32_t width; /** Width of DVS grid table. |
| 67 | (= Horizontal number of grid cells | 67 | (= Horizontal number of grid cells |
| 68 | in table, which cells have effective | 68 | in table, which cells have effective |
| 69 | statistics.) | 69 | statistics.) |
| 70 | For DVS1, this is equal to | 70 | For DVS1, this is equal to |
| 71 | the number of vertical statistics. */ | 71 | the number of vertical statistics. */ |
| 72 | uint32_t aligned_width; /**< Stride of each grid line. | 72 | uint32_t aligned_width; /** Stride of each grid line. |
| 73 | (= Horizontal number of grid cells | 73 | (= Horizontal number of grid cells |
| 74 | in table, which means | 74 | in table, which means |
| 75 | the allocated width.) */ | 75 | the allocated width.) */ |
| 76 | uint32_t height; /**< Height of DVS grid table. | 76 | uint32_t height; /** Height of DVS grid table. |
| 77 | (= Vertical number of grid cells | 77 | (= Vertical number of grid cells |
| 78 | in table, which cells have effective | 78 | in table, which cells have effective |
| 79 | statistics.) | 79 | statistics.) |
| 80 | For DVS1, This is equal to | 80 | For DVS1, This is equal to |
| 81 | the number of horizontal statistics. */ | 81 | the number of horizontal statistics. */ |
| 82 | uint32_t aligned_height;/**< Stride of each grid column. | 82 | uint32_t aligned_height;/** Stride of each grid column. |
| 83 | (= Vertical number of grid cells | 83 | (= Vertical number of grid cells |
| 84 | in table, which means | 84 | in table, which means |
| 85 | the allocated height.) */ | 85 | the allocated height.) */ |
| @@ -89,125 +89,125 @@ struct ia_css_dvs_grid_res { | |||
| 89 | * However, that implies driver I/F changes | 89 | * However, that implies driver I/F changes |
| 90 | */ | 90 | */ |
| 91 | struct ia_css_dvs_grid_info { | 91 | struct ia_css_dvs_grid_info { |
| 92 | uint32_t enable; /**< DVS statistics enabled. | 92 | uint32_t enable; /** DVS statistics enabled. |
| 93 | 0:disabled, 1:enabled */ | 93 | 0:disabled, 1:enabled */ |
| 94 | uint32_t width; /**< Width of DVS grid table. | 94 | uint32_t width; /** Width of DVS grid table. |
| 95 | (= Horizontal number of grid cells | 95 | (= Horizontal number of grid cells |
| 96 | in table, which cells have effective | 96 | in table, which cells have effective |
| 97 | statistics.) | 97 | statistics.) |
| 98 | For DVS1, this is equal to | 98 | For DVS1, this is equal to |
| 99 | the number of vertical statistics. */ | 99 | the number of vertical statistics. */ |
| 100 | uint32_t aligned_width; /**< Stride of each grid line. | 100 | uint32_t aligned_width; /** Stride of each grid line. |
| 101 | (= Horizontal number of grid cells | 101 | (= Horizontal number of grid cells |
| 102 | in table, which means | 102 | in table, which means |
| 103 | the allocated width.) */ | 103 | the allocated width.) */ |
| 104 | uint32_t height; /**< Height of DVS grid table. | 104 | uint32_t height; /** Height of DVS grid table. |
| 105 | (= Vertical number of grid cells | 105 | (= Vertical number of grid cells |
| 106 | in table, which cells have effective | 106 | in table, which cells have effective |
| 107 | statistics.) | 107 | statistics.) |
| 108 | For DVS1, This is equal to | 108 | For DVS1, This is equal to |
| 109 | the number of horizontal statistics. */ | 109 | the number of horizontal statistics. */ |
| 110 | uint32_t aligned_height;/**< Stride of each grid column. | 110 | uint32_t aligned_height;/** Stride of each grid column. |
| 111 | (= Vertical number of grid cells | 111 | (= Vertical number of grid cells |
| 112 | in table, which means | 112 | in table, which means |
| 113 | the allocated height.) */ | 113 | the allocated height.) */ |
| 114 | uint32_t bqs_per_grid_cell; /**< Grid cell size in BQ(Bayer Quad) unit. | 114 | uint32_t bqs_per_grid_cell; /** Grid cell size in BQ(Bayer Quad) unit. |
| 115 | (1BQ means {Gr,R,B,Gb}(2x2 pixels).) | 115 | (1BQ means {Gr,R,B,Gb}(2x2 pixels).) |
| 116 | For DVS1, valid value is 64. | 116 | For DVS1, valid value is 64. |
| 117 | For DVS2, valid value is only 64, | 117 | For DVS2, valid value is only 64, |
| 118 | currently. */ | 118 | currently. */ |
| 119 | uint32_t num_hor_coefs; /**< Number of horizontal coefficients. */ | 119 | uint32_t num_hor_coefs; /** Number of horizontal coefficients. */ |
| 120 | uint32_t num_ver_coefs; /**< Number of vertical coefficients. */ | 120 | uint32_t num_ver_coefs; /** Number of vertical coefficients. */ |
| 121 | }; | 121 | }; |
| 122 | 122 | ||
| 123 | /** Number of DVS statistics levels | 123 | /* Number of DVS statistics levels |
| 124 | */ | 124 | */ |
| 125 | #define IA_CSS_DVS_STAT_NUM_OF_LEVELS 3 | 125 | #define IA_CSS_DVS_STAT_NUM_OF_LEVELS 3 |
| 126 | 126 | ||
| 127 | /** DVS statistics generated by accelerator global configuration | 127 | /* DVS statistics generated by accelerator global configuration |
| 128 | */ | 128 | */ |
| 129 | struct dvs_stat_public_dvs_global_cfg { | 129 | struct dvs_stat_public_dvs_global_cfg { |
| 130 | unsigned char kappa; | 130 | unsigned char kappa; |
| 131 | /**< DVS statistics global configuration - kappa */ | 131 | /** DVS statistics global configuration - kappa */ |
| 132 | unsigned char match_shift; | 132 | unsigned char match_shift; |
| 133 | /**< DVS statistics global configuration - match_shift */ | 133 | /** DVS statistics global configuration - match_shift */ |
| 134 | unsigned char ybin_mode; | 134 | unsigned char ybin_mode; |
| 135 | /**< DVS statistics global configuration - y binning mode */ | 135 | /** DVS statistics global configuration - y binning mode */ |
| 136 | }; | 136 | }; |
| 137 | 137 | ||
| 138 | /** DVS statistics generated by accelerator level grid | 138 | /* DVS statistics generated by accelerator level grid |
| 139 | * configuration | 139 | * configuration |
| 140 | */ | 140 | */ |
| 141 | struct dvs_stat_public_dvs_level_grid_cfg { | 141 | struct dvs_stat_public_dvs_level_grid_cfg { |
| 142 | unsigned char grid_width; | 142 | unsigned char grid_width; |
| 143 | /**< DVS statistics grid width */ | 143 | /** DVS statistics grid width */ |
| 144 | unsigned char grid_height; | 144 | unsigned char grid_height; |
| 145 | /**< DVS statistics grid height */ | 145 | /** DVS statistics grid height */ |
| 146 | unsigned char block_width; | 146 | unsigned char block_width; |
| 147 | /**< DVS statistics block width */ | 147 | /** DVS statistics block width */ |
| 148 | unsigned char block_height; | 148 | unsigned char block_height; |
| 149 | /**< DVS statistics block height */ | 149 | /** DVS statistics block height */ |
| 150 | }; | 150 | }; |
| 151 | 151 | ||
| 152 | /** DVS statistics generated by accelerator level grid start | 152 | /* DVS statistics generated by accelerator level grid start |
| 153 | * configuration | 153 | * configuration |
| 154 | */ | 154 | */ |
| 155 | struct dvs_stat_public_dvs_level_grid_start { | 155 | struct dvs_stat_public_dvs_level_grid_start { |
| 156 | unsigned short x_start; | 156 | unsigned short x_start; |
| 157 | /**< DVS statistics level x start */ | 157 | /** DVS statistics level x start */ |
| 158 | unsigned short y_start; | 158 | unsigned short y_start; |
| 159 | /**< DVS statistics level y start */ | 159 | /** DVS statistics level y start */ |
| 160 | unsigned char enable; | 160 | unsigned char enable; |
| 161 | /**< DVS statistics level enable */ | 161 | /** DVS statistics level enable */ |
| 162 | }; | 162 | }; |
| 163 | 163 | ||
| 164 | /** DVS statistics generated by accelerator level grid end | 164 | /* DVS statistics generated by accelerator level grid end |
| 165 | * configuration | 165 | * configuration |
| 166 | */ | 166 | */ |
| 167 | struct dvs_stat_public_dvs_level_grid_end { | 167 | struct dvs_stat_public_dvs_level_grid_end { |
| 168 | unsigned short x_end; | 168 | unsigned short x_end; |
| 169 | /**< DVS statistics level x end */ | 169 | /** DVS statistics level x end */ |
| 170 | unsigned short y_end; | 170 | unsigned short y_end; |
| 171 | /**< DVS statistics level y end */ | 171 | /** DVS statistics level y end */ |
| 172 | }; | 172 | }; |
| 173 | 173 | ||
| 174 | /** DVS statistics generated by accelerator Feature Extraction | 174 | /* DVS statistics generated by accelerator Feature Extraction |
| 175 | * Region Of Interest (FE-ROI) configuration | 175 | * Region Of Interest (FE-ROI) configuration |
| 176 | */ | 176 | */ |
| 177 | struct dvs_stat_public_dvs_level_fe_roi_cfg { | 177 | struct dvs_stat_public_dvs_level_fe_roi_cfg { |
| 178 | unsigned char x_start; | 178 | unsigned char x_start; |
| 179 | /**< DVS statistics fe-roi level x start */ | 179 | /** DVS statistics fe-roi level x start */ |
| 180 | unsigned char y_start; | 180 | unsigned char y_start; |
| 181 | /**< DVS statistics fe-roi level y start */ | 181 | /** DVS statistics fe-roi level y start */ |
| 182 | unsigned char x_end; | 182 | unsigned char x_end; |
| 183 | /**< DVS statistics fe-roi level x end */ | 183 | /** DVS statistics fe-roi level x end */ |
| 184 | unsigned char y_end; | 184 | unsigned char y_end; |
| 185 | /**< DVS statistics fe-roi level y end */ | 185 | /** DVS statistics fe-roi level y end */ |
| 186 | }; | 186 | }; |
| 187 | 187 | ||
| 188 | /** DVS statistics generated by accelerator public configuration | 188 | /* DVS statistics generated by accelerator public configuration |
| 189 | */ | 189 | */ |
| 190 | struct dvs_stat_public_dvs_grd_cfg { | 190 | struct dvs_stat_public_dvs_grd_cfg { |
| 191 | struct dvs_stat_public_dvs_level_grid_cfg grd_cfg; | 191 | struct dvs_stat_public_dvs_level_grid_cfg grd_cfg; |
| 192 | /**< DVS statistics level grid configuration */ | 192 | /** DVS statistics level grid configuration */ |
| 193 | struct dvs_stat_public_dvs_level_grid_start grd_start; | 193 | struct dvs_stat_public_dvs_level_grid_start grd_start; |
| 194 | /**< DVS statistics level grid start configuration */ | 194 | /** DVS statistics level grid start configuration */ |
| 195 | struct dvs_stat_public_dvs_level_grid_end grd_end; | 195 | struct dvs_stat_public_dvs_level_grid_end grd_end; |
| 196 | /**< DVS statistics level grid end configuration */ | 196 | /** DVS statistics level grid end configuration */ |
| 197 | }; | 197 | }; |
| 198 | 198 | ||
| 199 | /** DVS statistics grid generated by accelerator | 199 | /* DVS statistics grid generated by accelerator |
| 200 | */ | 200 | */ |
| 201 | struct ia_css_dvs_stat_grid_info { | 201 | struct ia_css_dvs_stat_grid_info { |
| 202 | struct dvs_stat_public_dvs_global_cfg dvs_gbl_cfg; | 202 | struct dvs_stat_public_dvs_global_cfg dvs_gbl_cfg; |
| 203 | /**< DVS statistics global configuration (kappa, match, binning) */ | 203 | /** DVS statistics global configuration (kappa, match, binning) */ |
| 204 | struct dvs_stat_public_dvs_grd_cfg grd_cfg[IA_CSS_DVS_STAT_NUM_OF_LEVELS]; | 204 | struct dvs_stat_public_dvs_grd_cfg grd_cfg[IA_CSS_DVS_STAT_NUM_OF_LEVELS]; |
| 205 | /**< DVS statistics grid configuration (blocks and grids) */ | 205 | /** DVS statistics grid configuration (blocks and grids) */ |
| 206 | struct dvs_stat_public_dvs_level_fe_roi_cfg fe_roi_cfg[IA_CSS_DVS_STAT_NUM_OF_LEVELS]; | 206 | struct dvs_stat_public_dvs_level_fe_roi_cfg fe_roi_cfg[IA_CSS_DVS_STAT_NUM_OF_LEVELS]; |
| 207 | /**< DVS statistics FE ROI (region of interest) configuration */ | 207 | /** DVS statistics FE ROI (region of interest) configuration */ |
| 208 | }; | 208 | }; |
| 209 | 209 | ||
| 210 | /** DVS statistics generated by accelerator default grid info | 210 | /* DVS statistics generated by accelerator default grid info |
| 211 | */ | 211 | */ |
| 212 | #define DEFAULT_DVS_GRID_INFO { \ | 212 | #define DEFAULT_DVS_GRID_INFO { \ |
| 213 | { \ | 213 | { \ |
| @@ -219,14 +219,14 @@ struct ia_css_dvs_stat_grid_info { | |||
| 219 | } | 219 | } |
| 220 | 220 | ||
| 221 | 221 | ||
| 222 | /** Union that holds all types of DVS statistics grid info in | 222 | /* Union that holds all types of DVS statistics grid info in |
| 223 | * CSS format | 223 | * CSS format |
| 224 | * */ | 224 | * */ |
| 225 | union ia_css_dvs_grid_u { | 225 | union ia_css_dvs_grid_u { |
| 226 | struct ia_css_dvs_stat_grid_info dvs_stat_grid_info; | 226 | struct ia_css_dvs_stat_grid_info dvs_stat_grid_info; |
| 227 | /**< DVS statistics produced by accelerator grid info */ | 227 | /** DVS statistics produced by accelerator grid info */ |
| 228 | struct ia_css_dvs_grid_info dvs_grid_info; | 228 | struct ia_css_dvs_grid_info dvs_grid_info; |
| 229 | /**< DVS (DVS1/DVS2) grid info */ | 229 | /** DVS (DVS1/DVS2) grid info */ |
| 230 | }; | 230 | }; |
| 231 | 231 | ||
| 232 | #endif /* __IA_CSS_SDIS_COMMON_TYPES_H */ | 232 | #endif /* __IA_CSS_SDIS_COMMON_TYPES_H */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/sdis/sdis_1.0/ia_css_sdis_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/sdis/sdis_1.0/ia_css_sdis_types.h index d408b58a027d..d2ee57008fb6 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/sdis/sdis_1.0/ia_css_sdis_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/sdis/sdis_1.0/ia_css_sdis_types.h | |||
| @@ -15,38 +15,38 @@ | |||
| 15 | #ifndef __IA_CSS_SDIS_TYPES_H | 15 | #ifndef __IA_CSS_SDIS_TYPES_H |
| 16 | #define __IA_CSS_SDIS_TYPES_H | 16 | #define __IA_CSS_SDIS_TYPES_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * CSS-API header file for DVS statistics parameters. | 19 | * CSS-API header file for DVS statistics parameters. |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | /** Number of DVS coefficient types */ | 22 | /* Number of DVS coefficient types */ |
| 23 | #define IA_CSS_DVS_NUM_COEF_TYPES 6 | 23 | #define IA_CSS_DVS_NUM_COEF_TYPES 6 |
| 24 | 24 | ||
| 25 | #ifndef PIPE_GENERATION | 25 | #ifndef PIPE_GENERATION |
| 26 | #include "isp/kernels/sdis/common/ia_css_sdis_common_types.h" | 26 | #include "isp/kernels/sdis/common/ia_css_sdis_common_types.h" |
| 27 | #endif | 27 | #endif |
| 28 | 28 | ||
| 29 | /** DVS 1.0 Coefficients. | 29 | /* DVS 1.0 Coefficients. |
| 30 | * This structure describes the coefficients that are needed for the dvs statistics. | 30 | * This structure describes the coefficients that are needed for the dvs statistics. |
| 31 | */ | 31 | */ |
| 32 | 32 | ||
| 33 | struct ia_css_dvs_coefficients { | 33 | struct ia_css_dvs_coefficients { |
| 34 | struct ia_css_dvs_grid_info grid;/**< grid info contains the dimensions of the dvs grid */ | 34 | struct ia_css_dvs_grid_info grid;/** grid info contains the dimensions of the dvs grid */ |
| 35 | int16_t *hor_coefs; /**< the pointer to int16_t[grid.num_hor_coefs * IA_CSS_DVS_NUM_COEF_TYPES] | 35 | int16_t *hor_coefs; /** the pointer to int16_t[grid.num_hor_coefs * IA_CSS_DVS_NUM_COEF_TYPES] |
| 36 | containing the horizontal coefficients */ | 36 | containing the horizontal coefficients */ |
| 37 | int16_t *ver_coefs; /**< the pointer to int16_t[grid.num_ver_coefs * IA_CSS_DVS_NUM_COEF_TYPES] | 37 | int16_t *ver_coefs; /** the pointer to int16_t[grid.num_ver_coefs * IA_CSS_DVS_NUM_COEF_TYPES] |
| 38 | containing the vertical coefficients */ | 38 | containing the vertical coefficients */ |
| 39 | }; | 39 | }; |
| 40 | 40 | ||
| 41 | /** DVS 1.0 Statistics. | 41 | /* DVS 1.0 Statistics. |
| 42 | * This structure describes the statistics that are generated using the provided coefficients. | 42 | * This structure describes the statistics that are generated using the provided coefficients. |
| 43 | */ | 43 | */ |
| 44 | 44 | ||
| 45 | struct ia_css_dvs_statistics { | 45 | struct ia_css_dvs_statistics { |
| 46 | struct ia_css_dvs_grid_info grid;/**< grid info contains the dimensions of the dvs grid */ | 46 | struct ia_css_dvs_grid_info grid;/** grid info contains the dimensions of the dvs grid */ |
| 47 | int32_t *hor_proj; /**< the pointer to int16_t[grid.height * IA_CSS_DVS_NUM_COEF_TYPES] | 47 | int32_t *hor_proj; /** the pointer to int16_t[grid.height * IA_CSS_DVS_NUM_COEF_TYPES] |
| 48 | containing the horizontal projections */ | 48 | containing the horizontal projections */ |
| 49 | int32_t *ver_proj; /**< the pointer to int16_t[grid.width * IA_CSS_DVS_NUM_COEF_TYPES] | 49 | int32_t *ver_proj; /** the pointer to int16_t[grid.width * IA_CSS_DVS_NUM_COEF_TYPES] |
| 50 | containing the vertical projections */ | 50 | containing the vertical projections */ |
| 51 | }; | 51 | }; |
| 52 | 52 | ||
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/sdis/sdis_2/ia_css_sdis2_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/sdis/sdis_2/ia_css_sdis2_types.h index 7db7dd10fe00..2a0bc4031746 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/sdis/sdis_2/ia_css_sdis2_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/sdis/sdis_2/ia_css_sdis2_types.h | |||
| @@ -15,55 +15,55 @@ | |||
| 15 | #ifndef __IA_CSS_SDIS2_TYPES_H | 15 | #ifndef __IA_CSS_SDIS2_TYPES_H |
| 16 | #define __IA_CSS_SDIS2_TYPES_H | 16 | #define __IA_CSS_SDIS2_TYPES_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * CSS-API header file for DVS statistics parameters. | 19 | * CSS-API header file for DVS statistics parameters. |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | /** Number of DVS coefficient types */ | 22 | /* Number of DVS coefficient types */ |
| 23 | #define IA_CSS_DVS2_NUM_COEF_TYPES 4 | 23 | #define IA_CSS_DVS2_NUM_COEF_TYPES 4 |
| 24 | 24 | ||
| 25 | #ifndef PIPE_GENERATION | 25 | #ifndef PIPE_GENERATION |
| 26 | #include "isp/kernels/sdis/common/ia_css_sdis_common_types.h" | 26 | #include "isp/kernels/sdis/common/ia_css_sdis_common_types.h" |
| 27 | #endif | 27 | #endif |
| 28 | 28 | ||
| 29 | /** DVS 2.0 Coefficient types. This structure contains 4 pointers to | 29 | /* DVS 2.0 Coefficient types. This structure contains 4 pointers to |
| 30 | * arrays that contain the coeffients for each type. | 30 | * arrays that contain the coeffients for each type. |
| 31 | */ | 31 | */ |
| 32 | struct ia_css_dvs2_coef_types { | 32 | struct ia_css_dvs2_coef_types { |
| 33 | int16_t *odd_real; /**< real part of the odd coefficients*/ | 33 | int16_t *odd_real; /** real part of the odd coefficients*/ |
| 34 | int16_t *odd_imag; /**< imaginary part of the odd coefficients*/ | 34 | int16_t *odd_imag; /** imaginary part of the odd coefficients*/ |
| 35 | int16_t *even_real;/**< real part of the even coefficients*/ | 35 | int16_t *even_real;/** real part of the even coefficients*/ |
| 36 | int16_t *even_imag;/**< imaginary part of the even coefficients*/ | 36 | int16_t *even_imag;/** imaginary part of the even coefficients*/ |
| 37 | }; | 37 | }; |
| 38 | 38 | ||
| 39 | /** DVS 2.0 Coefficients. This structure describes the coefficients that are needed for the dvs statistics. | 39 | /* DVS 2.0 Coefficients. This structure describes the coefficients that are needed for the dvs statistics. |
| 40 | * e.g. hor_coefs.odd_real is the pointer to int16_t[grid.num_hor_coefs] containing the horizontal odd real | 40 | * e.g. hor_coefs.odd_real is the pointer to int16_t[grid.num_hor_coefs] containing the horizontal odd real |
| 41 | * coefficients. | 41 | * coefficients. |
| 42 | */ | 42 | */ |
| 43 | struct ia_css_dvs2_coefficients { | 43 | struct ia_css_dvs2_coefficients { |
| 44 | struct ia_css_dvs_grid_info grid; /**< grid info contains the dimensions of the dvs grid */ | 44 | struct ia_css_dvs_grid_info grid; /** grid info contains the dimensions of the dvs grid */ |
| 45 | struct ia_css_dvs2_coef_types hor_coefs; /**< struct with pointers that contain the horizontal coefficients */ | 45 | struct ia_css_dvs2_coef_types hor_coefs; /** struct with pointers that contain the horizontal coefficients */ |
| 46 | struct ia_css_dvs2_coef_types ver_coefs; /**< struct with pointers that contain the vertical coefficients */ | 46 | struct ia_css_dvs2_coef_types ver_coefs; /** struct with pointers that contain the vertical coefficients */ |
| 47 | }; | 47 | }; |
| 48 | 48 | ||
| 49 | /** DVS 2.0 Statistic types. This structure contains 4 pointers to | 49 | /* DVS 2.0 Statistic types. This structure contains 4 pointers to |
| 50 | * arrays that contain the statistics for each type. | 50 | * arrays that contain the statistics for each type. |
| 51 | */ | 51 | */ |
| 52 | struct ia_css_dvs2_stat_types { | 52 | struct ia_css_dvs2_stat_types { |
| 53 | int32_t *odd_real; /**< real part of the odd statistics*/ | 53 | int32_t *odd_real; /** real part of the odd statistics*/ |
| 54 | int32_t *odd_imag; /**< imaginary part of the odd statistics*/ | 54 | int32_t *odd_imag; /** imaginary part of the odd statistics*/ |
| 55 | int32_t *even_real;/**< real part of the even statistics*/ | 55 | int32_t *even_real;/** real part of the even statistics*/ |
| 56 | int32_t *even_imag;/**< imaginary part of the even statistics*/ | 56 | int32_t *even_imag;/** imaginary part of the even statistics*/ |
| 57 | }; | 57 | }; |
| 58 | 58 | ||
| 59 | /** DVS 2.0 Statistics. This structure describes the statistics that are generated using the provided coefficients. | 59 | /* DVS 2.0 Statistics. This structure describes the statistics that are generated using the provided coefficients. |
| 60 | * e.g. hor_prod.odd_real is the pointer to int16_t[grid.aligned_height][grid.aligned_width] containing | 60 | * e.g. hor_prod.odd_real is the pointer to int16_t[grid.aligned_height][grid.aligned_width] containing |
| 61 | * the horizontal odd real statistics. Valid statistics data area is int16_t[0..grid.height-1][0..grid.width-1] | 61 | * the horizontal odd real statistics. Valid statistics data area is int16_t[0..grid.height-1][0..grid.width-1] |
| 62 | */ | 62 | */ |
| 63 | struct ia_css_dvs2_statistics { | 63 | struct ia_css_dvs2_statistics { |
| 64 | struct ia_css_dvs_grid_info grid; /**< grid info contains the dimensions of the dvs grid */ | 64 | struct ia_css_dvs_grid_info grid; /** grid info contains the dimensions of the dvs grid */ |
| 65 | struct ia_css_dvs2_stat_types hor_prod; /**< struct with pointers that contain the horizontal statistics */ | 65 | struct ia_css_dvs2_stat_types hor_prod; /** struct with pointers that contain the horizontal statistics */ |
| 66 | struct ia_css_dvs2_stat_types ver_prod; /**< struct with pointers that contain the vertical statistics */ | 66 | struct ia_css_dvs2_stat_types ver_prod; /** struct with pointers that contain the vertical statistics */ |
| 67 | }; | 67 | }; |
| 68 | 68 | ||
| 69 | #endif /* __IA_CSS_SDIS2_TYPES_H */ | 69 | #endif /* __IA_CSS_SDIS2_TYPES_H */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/tdf/tdf_1.0/ia_css_tdf_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/tdf/tdf_1.0/ia_css_tdf_types.h index cc47a50e5ad5..91ea8dd4651d 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/tdf/tdf_1.0/ia_css_tdf_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/tdf/tdf_1.0/ia_css_tdf_types.h | |||
| @@ -15,13 +15,13 @@ | |||
| 15 | #ifndef __IA_CSS_TDF_TYPES_H | 15 | #ifndef __IA_CSS_TDF_TYPES_H |
| 16 | #define __IA_CSS_TDF_TYPES_H | 16 | #define __IA_CSS_TDF_TYPES_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * CSS-API header file for Transform Domain Filter parameters. | 19 | * CSS-API header file for Transform Domain Filter parameters. |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | #include "type_support.h" | 22 | #include "type_support.h" |
| 23 | 23 | ||
| 24 | /** Transform Domain Filter configuration | 24 | /* Transform Domain Filter configuration |
| 25 | * | 25 | * |
| 26 | * \brief TDF public parameters. | 26 | * \brief TDF public parameters. |
| 27 | * \details Struct with all parameters for the TDF kernel that can be set | 27 | * \details Struct with all parameters for the TDF kernel that can be set |
| @@ -30,23 +30,23 @@ | |||
| 30 | * ISP2.6.1: TDF is used. | 30 | * ISP2.6.1: TDF is used. |
| 31 | */ | 31 | */ |
| 32 | struct ia_css_tdf_config { | 32 | struct ia_css_tdf_config { |
| 33 | int32_t thres_flat_table[64]; /**< Final optimized strength table of NR for flat region. */ | 33 | int32_t thres_flat_table[64]; /** Final optimized strength table of NR for flat region. */ |
| 34 | int32_t thres_detail_table[64]; /**< Final optimized strength table of NR for detail region. */ | 34 | int32_t thres_detail_table[64]; /** Final optimized strength table of NR for detail region. */ |
| 35 | int32_t epsilon_0; /**< Coefficient to control variance for dark area (for flat region). */ | 35 | int32_t epsilon_0; /** Coefficient to control variance for dark area (for flat region). */ |
| 36 | int32_t epsilon_1; /**< Coefficient to control variance for bright area (for flat region). */ | 36 | int32_t epsilon_1; /** Coefficient to control variance for bright area (for flat region). */ |
| 37 | int32_t eps_scale_text; /**< Epsilon scaling coefficient for texture region. */ | 37 | int32_t eps_scale_text; /** Epsilon scaling coefficient for texture region. */ |
| 38 | int32_t eps_scale_edge; /**< Epsilon scaling coefficient for edge region. */ | 38 | int32_t eps_scale_edge; /** Epsilon scaling coefficient for edge region. */ |
| 39 | int32_t sepa_flat; /**< Threshold to judge flat (edge < m_Flat_thre). */ | 39 | int32_t sepa_flat; /** Threshold to judge flat (edge < m_Flat_thre). */ |
| 40 | int32_t sepa_edge; /**< Threshold to judge edge (edge > m_Edge_thre). */ | 40 | int32_t sepa_edge; /** Threshold to judge edge (edge > m_Edge_thre). */ |
| 41 | int32_t blend_flat; /**< Blending ratio at flat region. */ | 41 | int32_t blend_flat; /** Blending ratio at flat region. */ |
| 42 | int32_t blend_text; /**< Blending ratio at texture region. */ | 42 | int32_t blend_text; /** Blending ratio at texture region. */ |
| 43 | int32_t blend_edge; /**< Blending ratio at edge region. */ | 43 | int32_t blend_edge; /** Blending ratio at edge region. */ |
| 44 | int32_t shading_gain; /**< Gain of Shading control. */ | 44 | int32_t shading_gain; /** Gain of Shading control. */ |
| 45 | int32_t shading_base_gain; /**< Base Gain of Shading control. */ | 45 | int32_t shading_base_gain; /** Base Gain of Shading control. */ |
| 46 | int32_t local_y_gain; /**< Gain of local luminance control. */ | 46 | int32_t local_y_gain; /** Gain of local luminance control. */ |
| 47 | int32_t local_y_base_gain; /**< Base gain of local luminance control. */ | 47 | int32_t local_y_base_gain; /** Base gain of local luminance control. */ |
| 48 | int32_t rad_x_origin; /**< Initial x coord. for radius computation. */ | 48 | int32_t rad_x_origin; /** Initial x coord. for radius computation. */ |
| 49 | int32_t rad_y_origin; /**< Initial y coord. for radius computation. */ | 49 | int32_t rad_y_origin; /** Initial y coord. for radius computation. */ |
| 50 | }; | 50 | }; |
| 51 | 51 | ||
| 52 | #endif /* __IA_CSS_TDF_TYPES_H */ | 52 | #endif /* __IA_CSS_TDF_TYPES_H */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/tnr/tnr3/ia_css_tnr3_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/tnr/tnr3/ia_css_tnr3_types.h index 135563f52174..223423f8c40b 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/tnr/tnr3/ia_css_tnr3_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/tnr/tnr3/ia_css_tnr3_types.h | |||
| @@ -16,7 +16,7 @@ more details. | |||
| 16 | #ifndef _IA_CSS_TNR3_TYPES_H | 16 | #ifndef _IA_CSS_TNR3_TYPES_H |
| 17 | #define _IA_CSS_TNR3_TYPES_H | 17 | #define _IA_CSS_TNR3_TYPES_H |
| 18 | 18 | ||
| 19 | /** @file | 19 | /* @file |
| 20 | * CSS-API header file for Temporal Noise Reduction v3 (TNR3) kernel | 20 | * CSS-API header file for Temporal Noise Reduction v3 (TNR3) kernel |
| 21 | */ | 21 | */ |
| 22 | 22 | ||
| @@ -27,7 +27,7 @@ more details. | |||
| 27 | */ | 27 | */ |
| 28 | #define TNR3_NUM_SEGMENTS 3 | 28 | #define TNR3_NUM_SEGMENTS 3 |
| 29 | 29 | ||
| 30 | /** Temporal Noise Reduction v3 (TNR3) configuration. | 30 | /* Temporal Noise Reduction v3 (TNR3) configuration. |
| 31 | * The parameter to this kernel is fourfold | 31 | * The parameter to this kernel is fourfold |
| 32 | * 1. Three piecewise linear graphs (one for each plane) with three segments | 32 | * 1. Three piecewise linear graphs (one for each plane) with three segments |
| 33 | * each. Each line graph has Luma values on the x axis and sigma values for | 33 | * each. Each line graph has Luma values on the x axis and sigma values for |
| @@ -44,17 +44,17 @@ more details. | |||
| 44 | * 4. Selection of the reference frame buffer to be used for noise reduction. | 44 | * 4. Selection of the reference frame buffer to be used for noise reduction. |
| 45 | */ | 45 | */ |
| 46 | struct ia_css_tnr3_kernel_config { | 46 | struct ia_css_tnr3_kernel_config { |
| 47 | unsigned int maxfb_y; /**< Maximum Feedback Gain for Y */ | 47 | unsigned int maxfb_y; /** Maximum Feedback Gain for Y */ |
| 48 | unsigned int maxfb_u; /**< Maximum Feedback Gain for U */ | 48 | unsigned int maxfb_u; /** Maximum Feedback Gain for U */ |
| 49 | unsigned int maxfb_v; /**< Maximum Feedback Gain for V */ | 49 | unsigned int maxfb_v; /** Maximum Feedback Gain for V */ |
| 50 | unsigned int round_adj_y; /**< Rounding Adjust for Y */ | 50 | unsigned int round_adj_y; /** Rounding Adjust for Y */ |
| 51 | unsigned int round_adj_u; /**< Rounding Adjust for U */ | 51 | unsigned int round_adj_u; /** Rounding Adjust for U */ |
| 52 | unsigned int round_adj_v; /**< Rounding Adjust for V */ | 52 | unsigned int round_adj_v; /** Rounding Adjust for V */ |
| 53 | unsigned int knee_y[TNR3_NUM_SEGMENTS - 1]; /**< Knee points */ | 53 | unsigned int knee_y[TNR3_NUM_SEGMENTS - 1]; /** Knee points */ |
| 54 | unsigned int sigma_y[TNR3_NUM_SEGMENTS + 1]; /**< Standard deviation for Y at points Y0, Y1, Y2, Y3 */ | 54 | unsigned int sigma_y[TNR3_NUM_SEGMENTS + 1]; /** Standard deviation for Y at points Y0, Y1, Y2, Y3 */ |
| 55 | unsigned int sigma_u[TNR3_NUM_SEGMENTS + 1]; /**< Standard deviation for U at points U0, U1, U2, U3 */ | 55 | unsigned int sigma_u[TNR3_NUM_SEGMENTS + 1]; /** Standard deviation for U at points U0, U1, U2, U3 */ |
| 56 | unsigned int sigma_v[TNR3_NUM_SEGMENTS + 1]; /**< Standard deviation for V at points V0, V1, V2, V3 */ | 56 | unsigned int sigma_v[TNR3_NUM_SEGMENTS + 1]; /** Standard deviation for V at points V0, V1, V2, V3 */ |
| 57 | unsigned int ref_buf_select; /**< Selection of the reference buffer */ | 57 | unsigned int ref_buf_select; /** Selection of the reference buffer */ |
| 58 | }; | 58 | }; |
| 59 | 59 | ||
| 60 | #endif | 60 | #endif |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/tnr/tnr_1.0/ia_css_tnr_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/tnr/tnr_1.0/ia_css_tnr_types.h index 4fd35e6ccd70..9bbc9ab2e6c0 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/tnr/tnr_1.0/ia_css_tnr_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/tnr/tnr_1.0/ia_css_tnr_types.h | |||
| @@ -15,11 +15,11 @@ | |||
| 15 | #ifndef __IA_CSS_TNR_TYPES_H | 15 | #ifndef __IA_CSS_TNR_TYPES_H |
| 16 | #define __IA_CSS_TNR_TYPES_H | 16 | #define __IA_CSS_TNR_TYPES_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * CSS-API header file for Temporal Noise Reduction (TNR) parameters. | 19 | * CSS-API header file for Temporal Noise Reduction (TNR) parameters. |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | /** Temporal Noise Reduction (TNR) configuration. | 22 | /* Temporal Noise Reduction (TNR) configuration. |
| 23 | * | 23 | * |
| 24 | * When difference between current frame and previous frame is less than or | 24 | * When difference between current frame and previous frame is less than or |
| 25 | * equal to threshold, TNR works and current frame is mixed | 25 | * equal to threshold, TNR works and current frame is mixed |
| @@ -36,18 +36,18 @@ | |||
| 36 | 36 | ||
| 37 | 37 | ||
| 38 | struct ia_css_tnr_config { | 38 | struct ia_css_tnr_config { |
| 39 | ia_css_u0_16 gain; /**< Interpolation ratio of current frame | 39 | ia_css_u0_16 gain; /** Interpolation ratio of current frame |
| 40 | and previous frame. | 40 | and previous frame. |
| 41 | gain=0.0 -> previous frame is outputted. | 41 | gain=0.0 -> previous frame is outputted. |
| 42 | gain=1.0 -> current frame is outputted. | 42 | gain=1.0 -> current frame is outputted. |
| 43 | u0.16, [0,65535], | 43 | u0.16, [0,65535], |
| 44 | default 32768(0.5), ineffective 65535(almost 1.0) */ | 44 | default 32768(0.5), ineffective 65535(almost 1.0) */ |
| 45 | ia_css_u0_16 threshold_y; /**< Threshold to enable interpolation of Y. | 45 | ia_css_u0_16 threshold_y; /** Threshold to enable interpolation of Y. |
| 46 | If difference between current frame and | 46 | If difference between current frame and |
| 47 | previous frame is greater than threshold_y, | 47 | previous frame is greater than threshold_y, |
| 48 | TNR for Y is disabled. | 48 | TNR for Y is disabled. |
| 49 | u0.16, [0,65535], default/ineffective 0 */ | 49 | u0.16, [0,65535], default/ineffective 0 */ |
| 50 | ia_css_u0_16 threshold_uv; /**< Threshold to enable interpolation of | 50 | ia_css_u0_16 threshold_uv; /** Threshold to enable interpolation of |
| 51 | U/V. | 51 | U/V. |
| 52 | If difference between current frame and | 52 | If difference between current frame and |
| 53 | previous frame is greater than threshold_uv, | 53 | previous frame is greater than threshold_uv, |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/vf/vf_1.0/ia_css_vf_param.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/vf/vf_1.0/ia_css_vf_param.h index df5d37c8c946..9df4e12f6c2c 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/vf/vf_1.0/ia_css_vf_param.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/vf/vf_1.0/ia_css_vf_param.h | |||
| @@ -23,9 +23,9 @@ | |||
| 23 | 23 | ||
| 24 | #define VFDEC_BITS_PER_PIXEL GAMMA_OUTPUT_BITS | 24 | #define VFDEC_BITS_PER_PIXEL GAMMA_OUTPUT_BITS |
| 25 | 25 | ||
| 26 | /** Viewfinder decimation */ | 26 | /* Viewfinder decimation */ |
| 27 | struct sh_css_isp_vf_isp_config { | 27 | struct sh_css_isp_vf_isp_config { |
| 28 | uint32_t vf_downscale_bits; /**< Log VF downscale value */ | 28 | uint32_t vf_downscale_bits; /** Log VF downscale value */ |
| 29 | uint32_t enable; | 29 | uint32_t enable; |
| 30 | struct ia_css_frame_sp_info info; | 30 | struct ia_css_frame_sp_info info; |
| 31 | struct { | 31 | struct { |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/vf/vf_1.0/ia_css_vf_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/vf/vf_1.0/ia_css_vf_types.h index d8cfdfbc8c0b..e3efafa279ff 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/vf/vf_1.0/ia_css_vf_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/vf/vf_1.0/ia_css_vf_types.h | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | #ifndef __IA_CSS_VF_TYPES_H | 15 | #ifndef __IA_CSS_VF_TYPES_H |
| 16 | #define __IA_CSS_VF_TYPES_H | 16 | #define __IA_CSS_VF_TYPES_H |
| 17 | 17 | ||
| 18 | /** Viewfinder decimation | 18 | /* Viewfinder decimation |
| 19 | * | 19 | * |
| 20 | * ISP block: vfeven_horizontal_downscale | 20 | * ISP block: vfeven_horizontal_downscale |
| 21 | */ | 21 | */ |
| @@ -24,7 +24,7 @@ | |||
| 24 | #include <type_support.h> | 24 | #include <type_support.h> |
| 25 | 25 | ||
| 26 | struct ia_css_vf_configuration { | 26 | struct ia_css_vf_configuration { |
| 27 | uint32_t vf_downscale_bits; /**< Log VF downscale value */ | 27 | uint32_t vf_downscale_bits; /** Log VF downscale value */ |
| 28 | const struct ia_css_frame_info *info; | 28 | const struct ia_css_frame_info *info; |
| 29 | }; | 29 | }; |
| 30 | 30 | ||
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/wb/wb_1.0/ia_css_wb_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/wb/wb_1.0/ia_css_wb_types.h index 6bcfa274be88..bf98734d057e 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/wb/wb_1.0/ia_css_wb_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/wb/wb_1.0/ia_css_wb_types.h | |||
| @@ -15,31 +15,31 @@ | |||
| 15 | #ifndef __IA_CSS_WB_TYPES_H | 15 | #ifndef __IA_CSS_WB_TYPES_H |
| 16 | #define __IA_CSS_WB_TYPES_H | 16 | #define __IA_CSS_WB_TYPES_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * CSS-API header file for White Balance parameters. | 19 | * CSS-API header file for White Balance parameters. |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | 22 | ||
| 23 | /** White Balance configuration (Gain Adjust). | 23 | /* White Balance configuration (Gain Adjust). |
| 24 | * | 24 | * |
| 25 | * ISP block: WB1 | 25 | * ISP block: WB1 |
| 26 | * ISP1: WB1 is used. | 26 | * ISP1: WB1 is used. |
| 27 | * ISP2: WB1 is used. | 27 | * ISP2: WB1 is used. |
| 28 | */ | 28 | */ |
| 29 | struct ia_css_wb_config { | 29 | struct ia_css_wb_config { |
| 30 | uint32_t integer_bits; /**< Common exponent of gains. | 30 | uint32_t integer_bits; /** Common exponent of gains. |
| 31 | u8.0, [0,3], | 31 | u8.0, [0,3], |
| 32 | default 1, ineffective 1 */ | 32 | default 1, ineffective 1 */ |
| 33 | uint32_t gr; /**< Significand of Gr gain. | 33 | uint32_t gr; /** Significand of Gr gain. |
| 34 | u[integer_bits].[16-integer_bits], [0,65535], | 34 | u[integer_bits].[16-integer_bits], [0,65535], |
| 35 | default/ineffective 32768(u1.15, 1.0) */ | 35 | default/ineffective 32768(u1.15, 1.0) */ |
| 36 | uint32_t r; /**< Significand of R gain. | 36 | uint32_t r; /** Significand of R gain. |
| 37 | u[integer_bits].[16-integer_bits], [0,65535], | 37 | u[integer_bits].[16-integer_bits], [0,65535], |
| 38 | default/ineffective 32768(u1.15, 1.0) */ | 38 | default/ineffective 32768(u1.15, 1.0) */ |
| 39 | uint32_t b; /**< Significand of B gain. | 39 | uint32_t b; /** Significand of B gain. |
| 40 | u[integer_bits].[16-integer_bits], [0,65535], | 40 | u[integer_bits].[16-integer_bits], [0,65535], |
| 41 | default/ineffective 32768(u1.15, 1.0) */ | 41 | default/ineffective 32768(u1.15, 1.0) */ |
| 42 | uint32_t gb; /**< Significand of Gb gain. | 42 | uint32_t gb; /** Significand of Gb gain. |
| 43 | u[integer_bits].[16-integer_bits], [0,65535], | 43 | u[integer_bits].[16-integer_bits], [0,65535], |
| 44 | default/ineffective 32768(u1.15, 1.0) */ | 44 | default/ineffective 32768(u1.15, 1.0) */ |
| 45 | }; | 45 | }; |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/xnr/xnr_1.0/ia_css_xnr.host.c b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/xnr/xnr_1.0/ia_css_xnr.host.c index 3018100f6f76..abcb531f51cc 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/xnr/xnr_1.0/ia_css_xnr.host.c +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/xnr/xnr_1.0/ia_css_xnr.host.c | |||
| @@ -21,7 +21,7 @@ | |||
| 21 | #include "ia_css_xnr.host.h" | 21 | #include "ia_css_xnr.host.h" |
| 22 | 22 | ||
| 23 | const struct ia_css_xnr_config default_xnr_config = { | 23 | const struct ia_css_xnr_config default_xnr_config = { |
| 24 | /** default threshold 6400 translates to 25 on ISP. */ | 24 | /* default threshold 6400 translates to 25 on ISP. */ |
| 25 | 6400 | 25 | 6400 |
| 26 | }; | 26 | }; |
| 27 | 27 | ||
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/xnr/xnr_1.0/ia_css_xnr_param.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/xnr/xnr_1.0/ia_css_xnr_param.h index 806c9f8f0e2e..a5caebbe2f84 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/xnr/xnr_1.0/ia_css_xnr_param.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/xnr/xnr_1.0/ia_css_xnr_param.h | |||
| @@ -41,7 +41,7 @@ struct sh_css_isp_xnr_vamem_params { | |||
| 41 | }; | 41 | }; |
| 42 | 42 | ||
| 43 | struct sh_css_isp_xnr_params { | 43 | struct sh_css_isp_xnr_params { |
| 44 | /** XNR threshold. | 44 | /* XNR threshold. |
| 45 | * type:u0.16 but actual valid range is:[0,255] | 45 | * type:u0.16 but actual valid range is:[0,255] |
| 46 | * valid range is dependent on SH_CSS_ISP_YUV_BITS (currently 8bits) | 46 | * valid range is dependent on SH_CSS_ISP_YUV_BITS (currently 8bits) |
| 47 | * default: 25 */ | 47 | * default: 25 */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/xnr/xnr_1.0/ia_css_xnr_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/xnr/xnr_1.0/ia_css_xnr_types.h index 89e8b0f17e8c..d2b634211a3f 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/xnr/xnr_1.0/ia_css_xnr_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/xnr/xnr_1.0/ia_css_xnr_types.h | |||
| @@ -15,11 +15,11 @@ | |||
| 15 | #ifndef __IA_CSS_XNR_TYPES_H | 15 | #ifndef __IA_CSS_XNR_TYPES_H |
| 16 | #define __IA_CSS_XNR_TYPES_H | 16 | #define __IA_CSS_XNR_TYPES_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * CSS-API header file for Extra Noise Reduction (XNR) parameters. | 19 | * CSS-API header file for Extra Noise Reduction (XNR) parameters. |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | /** XNR table. | 22 | /* XNR table. |
| 23 | * | 23 | * |
| 24 | * NOTE: The driver does not need to set this table, | 24 | * NOTE: The driver does not need to set this table, |
| 25 | * because the default values are set inside the css. | 25 | * because the default values are set inside the css. |
| @@ -36,23 +36,23 @@ | |||
| 36 | * | 36 | * |
| 37 | */ | 37 | */ |
| 38 | 38 | ||
| 39 | /** Number of elements in the xnr table. */ | 39 | /* Number of elements in the xnr table. */ |
| 40 | #define IA_CSS_VAMEM_1_XNR_TABLE_SIZE_LOG2 6 | 40 | #define IA_CSS_VAMEM_1_XNR_TABLE_SIZE_LOG2 6 |
| 41 | /** Number of elements in the xnr table. */ | 41 | /* Number of elements in the xnr table. */ |
| 42 | #define IA_CSS_VAMEM_1_XNR_TABLE_SIZE (1U<<IA_CSS_VAMEM_1_XNR_TABLE_SIZE_LOG2) | 42 | #define IA_CSS_VAMEM_1_XNR_TABLE_SIZE (1U<<IA_CSS_VAMEM_1_XNR_TABLE_SIZE_LOG2) |
| 43 | 43 | ||
| 44 | /** Number of elements in the xnr table. */ | 44 | /* Number of elements in the xnr table. */ |
| 45 | #define IA_CSS_VAMEM_2_XNR_TABLE_SIZE_LOG2 6 | 45 | #define IA_CSS_VAMEM_2_XNR_TABLE_SIZE_LOG2 6 |
| 46 | /** Number of elements in the xnr table. */ | 46 | /* Number of elements in the xnr table. */ |
| 47 | #define IA_CSS_VAMEM_2_XNR_TABLE_SIZE (1U<<IA_CSS_VAMEM_2_XNR_TABLE_SIZE_LOG2) | 47 | #define IA_CSS_VAMEM_2_XNR_TABLE_SIZE (1U<<IA_CSS_VAMEM_2_XNR_TABLE_SIZE_LOG2) |
| 48 | 48 | ||
| 49 | /**< IA_CSS_VAMEM_TYPE_1(ISP2300) or | 49 | /** IA_CSS_VAMEM_TYPE_1(ISP2300) or |
| 50 | IA_CSS_VAMEM_TYPE_2(ISP2400) */ | 50 | IA_CSS_VAMEM_TYPE_2(ISP2400) */ |
| 51 | union ia_css_xnr_data { | 51 | union ia_css_xnr_data { |
| 52 | uint16_t vamem_1[IA_CSS_VAMEM_1_XNR_TABLE_SIZE]; | 52 | uint16_t vamem_1[IA_CSS_VAMEM_1_XNR_TABLE_SIZE]; |
| 53 | /**< Coefficients table on vamem type1. u0.12, [0,4095] */ | 53 | /** Coefficients table on vamem type1. u0.12, [0,4095] */ |
| 54 | uint16_t vamem_2[IA_CSS_VAMEM_2_XNR_TABLE_SIZE]; | 54 | uint16_t vamem_2[IA_CSS_VAMEM_2_XNR_TABLE_SIZE]; |
| 55 | /**< Coefficients table on vamem type2. u0.12, [0,4095] */ | 55 | /** Coefficients table on vamem type2. u0.12, [0,4095] */ |
| 56 | }; | 56 | }; |
| 57 | 57 | ||
| 58 | struct ia_css_xnr_table { | 58 | struct ia_css_xnr_table { |
| @@ -61,7 +61,7 @@ struct ia_css_xnr_table { | |||
| 61 | }; | 61 | }; |
| 62 | 62 | ||
| 63 | struct ia_css_xnr_config { | 63 | struct ia_css_xnr_config { |
| 64 | /** XNR threshold. | 64 | /* XNR threshold. |
| 65 | * type:u0.16 valid range:[0,65535] | 65 | * type:u0.16 valid range:[0,65535] |
| 66 | * default: 6400 */ | 66 | * default: 6400 */ |
| 67 | uint16_t threshold; | 67 | uint16_t threshold; |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/xnr/xnr_3.0/ia_css_xnr3_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/xnr/xnr_3.0/ia_css_xnr3_types.h index 8f14d1080651..669200caf72e 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/xnr/xnr_3.0/ia_css_xnr3_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/xnr/xnr_3.0/ia_css_xnr3_types.h | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | #ifndef __IA_CSS_XNR3_TYPES_H | 15 | #ifndef __IA_CSS_XNR3_TYPES_H |
| 16 | #define __IA_CSS_XNR3_TYPES_H | 16 | #define __IA_CSS_XNR3_TYPES_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * CSS-API header file for Extra Noise Reduction (XNR) parameters. | 19 | * CSS-API header file for Extra Noise Reduction (XNR) parameters. |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| @@ -47,12 +47,12 @@ | |||
| 47 | * IA_CSS_XNR3_SIGMA_SCALE. | 47 | * IA_CSS_XNR3_SIGMA_SCALE. |
| 48 | */ | 48 | */ |
| 49 | struct ia_css_xnr3_sigma_params { | 49 | struct ia_css_xnr3_sigma_params { |
| 50 | int y0; /**< Sigma for Y range similarity in dark area */ | 50 | int y0; /** Sigma for Y range similarity in dark area */ |
| 51 | int y1; /**< Sigma for Y range similarity in bright area */ | 51 | int y1; /** Sigma for Y range similarity in bright area */ |
| 52 | int u0; /**< Sigma for U range similarity in dark area */ | 52 | int u0; /** Sigma for U range similarity in dark area */ |
| 53 | int u1; /**< Sigma for U range similarity in bright area */ | 53 | int u1; /** Sigma for U range similarity in bright area */ |
| 54 | int v0; /**< Sigma for V range similarity in dark area */ | 54 | int v0; /** Sigma for V range similarity in dark area */ |
| 55 | int v1; /**< Sigma for V range similarity in bright area */ | 55 | int v1; /** Sigma for V range similarity in bright area */ |
| 56 | }; | 56 | }; |
| 57 | 57 | ||
| 58 | /** | 58 | /** |
| @@ -64,10 +64,10 @@ struct ia_css_xnr3_sigma_params { | |||
| 64 | * with IA_CSS_XNR3_CORING_SCALE. The ineffective value is 0. | 64 | * with IA_CSS_XNR3_CORING_SCALE. The ineffective value is 0. |
| 65 | */ | 65 | */ |
| 66 | struct ia_css_xnr3_coring_params { | 66 | struct ia_css_xnr3_coring_params { |
| 67 | int u0; /**< Coring threshold of U channel in dark area */ | 67 | int u0; /** Coring threshold of U channel in dark area */ |
| 68 | int u1; /**< Coring threshold of U channel in bright area */ | 68 | int u1; /** Coring threshold of U channel in bright area */ |
| 69 | int v0; /**< Coring threshold of V channel in dark area */ | 69 | int v0; /** Coring threshold of V channel in dark area */ |
| 70 | int v1; /**< Coring threshold of V channel in bright area */ | 70 | int v1; /** Coring threshold of V channel in bright area */ |
| 71 | }; | 71 | }; |
| 72 | 72 | ||
| 73 | /** | 73 | /** |
| @@ -81,7 +81,7 @@ struct ia_css_xnr3_coring_params { | |||
| 81 | * value of 0.0 bypasses the entire xnr3 filter. | 81 | * value of 0.0 bypasses the entire xnr3 filter. |
| 82 | */ | 82 | */ |
| 83 | struct ia_css_xnr3_blending_params { | 83 | struct ia_css_xnr3_blending_params { |
| 84 | int strength; /**< Blending strength */ | 84 | int strength; /** Blending strength */ |
| 85 | }; | 85 | }; |
| 86 | 86 | ||
| 87 | /** | 87 | /** |
| @@ -90,9 +90,9 @@ struct ia_css_xnr3_blending_params { | |||
| 90 | * from the CSS API. | 90 | * from the CSS API. |
| 91 | */ | 91 | */ |
| 92 | struct ia_css_xnr3_config { | 92 | struct ia_css_xnr3_config { |
| 93 | struct ia_css_xnr3_sigma_params sigma; /**< XNR3 sigma parameters */ | 93 | struct ia_css_xnr3_sigma_params sigma; /** XNR3 sigma parameters */ |
| 94 | struct ia_css_xnr3_coring_params coring; /**< XNR3 coring parameters */ | 94 | struct ia_css_xnr3_coring_params coring; /** XNR3 coring parameters */ |
| 95 | struct ia_css_xnr3_blending_params blending; /**< XNR3 blending parameters */ | 95 | struct ia_css_xnr3_blending_params blending; /** XNR3 blending parameters */ |
| 96 | }; | 96 | }; |
| 97 | 97 | ||
| 98 | #endif /* __IA_CSS_XNR3_TYPES_H */ | 98 | #endif /* __IA_CSS_XNR3_TYPES_H */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ynr/ynr_1.0/ia_css_ynr_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ynr/ynr_1.0/ia_css_ynr_types.h index 3f46655bee57..3f8589a5a43a 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ynr/ynr_1.0/ia_css_ynr_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ynr/ynr_1.0/ia_css_ynr_types.h | |||
| @@ -15,11 +15,11 @@ | |||
| 15 | #ifndef __IA_CSS_YNR_TYPES_H | 15 | #ifndef __IA_CSS_YNR_TYPES_H |
| 16 | #define __IA_CSS_YNR_TYPES_H | 16 | #define __IA_CSS_YNR_TYPES_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * CSS-API header file for Noise Reduction (BNR) and YCC Noise Reduction (YNR,CNR). | 19 | * CSS-API header file for Noise Reduction (BNR) and YCC Noise Reduction (YNR,CNR). |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | /** Configuration used by Bayer Noise Reduction (BNR) and | 22 | /* Configuration used by Bayer Noise Reduction (BNR) and |
| 23 | * YCC Noise Reduction (YNR,CNR). | 23 | * YCC Noise Reduction (YNR,CNR). |
| 24 | * | 24 | * |
| 25 | * ISP block: BNR1, YNR1, CNR1 | 25 | * ISP block: BNR1, YNR1, CNR1 |
| @@ -28,28 +28,28 @@ | |||
| 28 | * BNR1,YNR2,CNR2 are used for Still. | 28 | * BNR1,YNR2,CNR2 are used for Still. |
| 29 | */ | 29 | */ |
| 30 | struct ia_css_nr_config { | 30 | struct ia_css_nr_config { |
| 31 | ia_css_u0_16 bnr_gain; /**< Strength of noise reduction (BNR). | 31 | ia_css_u0_16 bnr_gain; /** Strength of noise reduction (BNR). |
| 32 | u0.16, [0,65535], | 32 | u0.16, [0,65535], |
| 33 | default 14336(0.21875), ineffective 0 */ | 33 | default 14336(0.21875), ineffective 0 */ |
| 34 | ia_css_u0_16 ynr_gain; /**< Strength of noise reduction (YNR). | 34 | ia_css_u0_16 ynr_gain; /** Strength of noise reduction (YNR). |
| 35 | u0.16, [0,65535], | 35 | u0.16, [0,65535], |
| 36 | default 14336(0.21875), ineffective 0 */ | 36 | default 14336(0.21875), ineffective 0 */ |
| 37 | ia_css_u0_16 direction; /**< Sensitivity of edge (BNR). | 37 | ia_css_u0_16 direction; /** Sensitivity of edge (BNR). |
| 38 | u0.16, [0,65535], | 38 | u0.16, [0,65535], |
| 39 | default 512(0.0078125), ineffective 0 */ | 39 | default 512(0.0078125), ineffective 0 */ |
| 40 | ia_css_u0_16 threshold_cb; /**< Coring threshold for Cb (CNR). | 40 | ia_css_u0_16 threshold_cb; /** Coring threshold for Cb (CNR). |
| 41 | This is the same as | 41 | This is the same as |
| 42 | de_config.c1_coring_threshold. | 42 | de_config.c1_coring_threshold. |
| 43 | u0.16, [0,65535], | 43 | u0.16, [0,65535], |
| 44 | default 0(0), ineffective 0 */ | 44 | default 0(0), ineffective 0 */ |
| 45 | ia_css_u0_16 threshold_cr; /**< Coring threshold for Cr (CNR). | 45 | ia_css_u0_16 threshold_cr; /** Coring threshold for Cr (CNR). |
| 46 | This is the same as | 46 | This is the same as |
| 47 | de_config.c2_coring_threshold. | 47 | de_config.c2_coring_threshold. |
| 48 | u0.16, [0,65535], | 48 | u0.16, [0,65535], |
| 49 | default 0(0), ineffective 0 */ | 49 | default 0(0), ineffective 0 */ |
| 50 | }; | 50 | }; |
| 51 | 51 | ||
| 52 | /** Edge Enhancement (sharpen) configuration. | 52 | /* Edge Enhancement (sharpen) configuration. |
| 53 | * | 53 | * |
| 54 | * ISP block: YEE1 | 54 | * ISP block: YEE1 |
| 55 | * ISP1: YEE1 is used. | 55 | * ISP1: YEE1 is used. |
| @@ -57,24 +57,24 @@ struct ia_css_nr_config { | |||
| 57 | * (YEE2 is used for Still.) | 57 | * (YEE2 is used for Still.) |
| 58 | */ | 58 | */ |
| 59 | struct ia_css_ee_config { | 59 | struct ia_css_ee_config { |
| 60 | ia_css_u5_11 gain; /**< The strength of sharpness. | 60 | ia_css_u5_11 gain; /** The strength of sharpness. |
| 61 | u5.11, [0,65535], | 61 | u5.11, [0,65535], |
| 62 | default 8192(4.0), ineffective 0 */ | 62 | default 8192(4.0), ineffective 0 */ |
| 63 | ia_css_u8_8 threshold; /**< The threshold that divides noises from | 63 | ia_css_u8_8 threshold; /** The threshold that divides noises from |
| 64 | edge. | 64 | edge. |
| 65 | u8.8, [0,65535], | 65 | u8.8, [0,65535], |
| 66 | default 256(1.0), ineffective 65535 */ | 66 | default 256(1.0), ineffective 65535 */ |
| 67 | ia_css_u5_11 detail_gain; /**< The strength of sharpness in pell-mell | 67 | ia_css_u5_11 detail_gain; /** The strength of sharpness in pell-mell |
| 68 | area. | 68 | area. |
| 69 | u5.11, [0,65535], | 69 | u5.11, [0,65535], |
| 70 | default 2048(1.0), ineffective 0 */ | 70 | default 2048(1.0), ineffective 0 */ |
| 71 | }; | 71 | }; |
| 72 | 72 | ||
| 73 | /** YNR and YEE (sharpen) configuration. | 73 | /* YNR and YEE (sharpen) configuration. |
| 74 | */ | 74 | */ |
| 75 | struct ia_css_yee_config { | 75 | struct ia_css_yee_config { |
| 76 | struct ia_css_nr_config nr; /**< The NR configuration. */ | 76 | struct ia_css_nr_config nr; /** The NR configuration. */ |
| 77 | struct ia_css_ee_config ee; /**< The EE configuration. */ | 77 | struct ia_css_ee_config ee; /** The EE configuration. */ |
| 78 | }; | 78 | }; |
| 79 | 79 | ||
| 80 | #endif /* __IA_CSS_YNR_TYPES_H */ | 80 | #endif /* __IA_CSS_YNR_TYPES_H */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ynr/ynr_2/ia_css_ynr2_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ynr/ynr_2/ia_css_ynr2_types.h index e0a0b10ac5fa..83161a24207d 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ynr/ynr_2/ia_css_ynr2_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/ynr/ynr_2/ia_css_ynr2_types.h | |||
| @@ -15,11 +15,11 @@ | |||
| 15 | #ifndef __IA_CSS_YNR2_TYPES_H | 15 | #ifndef __IA_CSS_YNR2_TYPES_H |
| 16 | #define __IA_CSS_YNR2_TYPES_H | 16 | #define __IA_CSS_YNR2_TYPES_H |
| 17 | 17 | ||
| 18 | /** @file | 18 | /* @file |
| 19 | * CSS-API header file for Y(Luma) Noise Reduction. | 19 | * CSS-API header file for Y(Luma) Noise Reduction. |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | /** Y(Luma) Noise Reduction configuration. | 22 | /* Y(Luma) Noise Reduction configuration. |
| 23 | * | 23 | * |
| 24 | * ISP block: YNR2 & YEE2 | 24 | * ISP block: YNR2 & YEE2 |
| 25 | * (ISP1: YNR1 and YEE1 are used.) | 25 | * (ISP1: YNR1 and YEE1 are used.) |
| @@ -27,21 +27,21 @@ | |||
| 27 | * ISP2: YNR2 and YEE2 are used for Still. | 27 | * ISP2: YNR2 and YEE2 are used for Still. |
| 28 | */ | 28 | */ |
| 29 | struct ia_css_ynr_config { | 29 | struct ia_css_ynr_config { |
| 30 | uint16_t edge_sense_gain_0; /**< Sensitivity of edge in dark area. | 30 | uint16_t edge_sense_gain_0; /** Sensitivity of edge in dark area. |
| 31 | u13.0, [0,8191], | 31 | u13.0, [0,8191], |
| 32 | default 1000, ineffective 0 */ | 32 | default 1000, ineffective 0 */ |
| 33 | uint16_t edge_sense_gain_1; /**< Sensitivity of edge in bright area. | 33 | uint16_t edge_sense_gain_1; /** Sensitivity of edge in bright area. |
| 34 | u13.0, [0,8191], | 34 | u13.0, [0,8191], |
| 35 | default 1000, ineffective 0 */ | 35 | default 1000, ineffective 0 */ |
| 36 | uint16_t corner_sense_gain_0; /**< Sensitivity of corner in dark area. | 36 | uint16_t corner_sense_gain_0; /** Sensitivity of corner in dark area. |
| 37 | u13.0, [0,8191], | 37 | u13.0, [0,8191], |
| 38 | default 1000, ineffective 0 */ | 38 | default 1000, ineffective 0 */ |
| 39 | uint16_t corner_sense_gain_1; /**< Sensitivity of corner in bright area. | 39 | uint16_t corner_sense_gain_1; /** Sensitivity of corner in bright area. |
| 40 | u13.0, [0,8191], | 40 | u13.0, [0,8191], |
| 41 | default 1000, ineffective 0 */ | 41 | default 1000, ineffective 0 */ |
| 42 | }; | 42 | }; |
| 43 | 43 | ||
| 44 | /** Fringe Control configuration. | 44 | /* Fringe Control configuration. |
| 45 | * | 45 | * |
| 46 | * ISP block: FC2 (FC2 is used with YNR2/YEE2.) | 46 | * ISP block: FC2 (FC2 is used with YNR2/YEE2.) |
| 47 | * (ISP1: FC2 is not used.) | 47 | * (ISP1: FC2 is not used.) |
| @@ -49,43 +49,43 @@ struct ia_css_ynr_config { | |||
| 49 | * ISP2: FC2 is used for Still. | 49 | * ISP2: FC2 is used for Still. |
| 50 | */ | 50 | */ |
| 51 | struct ia_css_fc_config { | 51 | struct ia_css_fc_config { |
| 52 | uint8_t gain_exp; /**< Common exponent of gains. | 52 | uint8_t gain_exp; /** Common exponent of gains. |
| 53 | u8.0, [0,13], | 53 | u8.0, [0,13], |
| 54 | default 1, ineffective 0 */ | 54 | default 1, ineffective 0 */ |
| 55 | uint16_t coring_pos_0; /**< Coring threshold for positive edge in dark area. | 55 | uint16_t coring_pos_0; /** Coring threshold for positive edge in dark area. |
| 56 | u0.13, [0,8191], | 56 | u0.13, [0,8191], |
| 57 | default 0(0), ineffective 0 */ | 57 | default 0(0), ineffective 0 */ |
| 58 | uint16_t coring_pos_1; /**< Coring threshold for positive edge in bright area. | 58 | uint16_t coring_pos_1; /** Coring threshold for positive edge in bright area. |
| 59 | u0.13, [0,8191], | 59 | u0.13, [0,8191], |
| 60 | default 0(0), ineffective 0 */ | 60 | default 0(0), ineffective 0 */ |
| 61 | uint16_t coring_neg_0; /**< Coring threshold for negative edge in dark area. | 61 | uint16_t coring_neg_0; /** Coring threshold for negative edge in dark area. |
| 62 | u0.13, [0,8191], | 62 | u0.13, [0,8191], |
| 63 | default 0(0), ineffective 0 */ | 63 | default 0(0), ineffective 0 */ |
| 64 | uint16_t coring_neg_1; /**< Coring threshold for negative edge in bright area. | 64 | uint16_t coring_neg_1; /** Coring threshold for negative edge in bright area. |
| 65 | u0.13, [0,8191], | 65 | u0.13, [0,8191], |
| 66 | default 0(0), ineffective 0 */ | 66 | default 0(0), ineffective 0 */ |
| 67 | uint16_t gain_pos_0; /**< Gain for positive edge in dark area. | 67 | uint16_t gain_pos_0; /** Gain for positive edge in dark area. |
| 68 | u0.13, [0,8191], | 68 | u0.13, [0,8191], |
| 69 | default 4096(0.5), ineffective 0 */ | 69 | default 4096(0.5), ineffective 0 */ |
| 70 | uint16_t gain_pos_1; /**< Gain for positive edge in bright area. | 70 | uint16_t gain_pos_1; /** Gain for positive edge in bright area. |
| 71 | u0.13, [0,8191], | 71 | u0.13, [0,8191], |
| 72 | default 4096(0.5), ineffective 0 */ | 72 | default 4096(0.5), ineffective 0 */ |
| 73 | uint16_t gain_neg_0; /**< Gain for negative edge in dark area. | 73 | uint16_t gain_neg_0; /** Gain for negative edge in dark area. |
| 74 | u0.13, [0,8191], | 74 | u0.13, [0,8191], |
| 75 | default 4096(0.5), ineffective 0 */ | 75 | default 4096(0.5), ineffective 0 */ |
| 76 | uint16_t gain_neg_1; /**< Gain for negative edge in bright area. | 76 | uint16_t gain_neg_1; /** Gain for negative edge in bright area. |
| 77 | u0.13, [0,8191], | 77 | u0.13, [0,8191], |
| 78 | default 4096(0.5), ineffective 0 */ | 78 | default 4096(0.5), ineffective 0 */ |
| 79 | uint16_t crop_pos_0; /**< Limit for positive edge in dark area. | 79 | uint16_t crop_pos_0; /** Limit for positive edge in dark area. |
| 80 | u0.13, [0,8191], | 80 | u0.13, [0,8191], |
| 81 | default/ineffective 8191(almost 1.0) */ | 81 | default/ineffective 8191(almost 1.0) */ |
| 82 | uint16_t crop_pos_1; /**< Limit for positive edge in bright area. | 82 | uint16_t crop_pos_1; /** Limit for positive edge in bright area. |
| 83 | u0.13, [0,8191], | 83 | u0.13, [0,8191], |
| 84 | default/ineffective 8191(almost 1.0) */ | 84 | default/ineffective 8191(almost 1.0) */ |
| 85 | int16_t crop_neg_0; /**< Limit for negative edge in dark area. | 85 | int16_t crop_neg_0; /** Limit for negative edge in dark area. |
| 86 | s0.13, [-8192,0], | 86 | s0.13, [-8192,0], |
| 87 | default/ineffective -8192(-1.0) */ | 87 | default/ineffective -8192(-1.0) */ |
| 88 | int16_t crop_neg_1; /**< Limit for negative edge in bright area. | 88 | int16_t crop_neg_1; /** Limit for negative edge in bright area. |
| 89 | s0.13, [-8192,0], | 89 | s0.13, [-8192,0], |
| 90 | default/ineffective -8192(-1.0) */ | 90 | default/ineffective -8192(-1.0) */ |
| 91 | }; | 91 | }; |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/yuv_ls/yuv_ls_1.0/ia_css_yuv_ls_param.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/yuv_ls/yuv_ls_1.0/ia_css_yuv_ls_param.h index 63a8703c9c44..c9ff0cb2493a 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/yuv_ls/yuv_ls_1.0/ia_css_yuv_ls_param.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/isp/kernels/yuv_ls/yuv_ls_1.0/ia_css_yuv_ls_param.h | |||
| @@ -24,7 +24,7 @@ | |||
| 24 | */ | 24 | */ |
| 25 | #define NUM_YUV_LS 2 | 25 | #define NUM_YUV_LS 2 |
| 26 | 26 | ||
| 27 | /** YUV load/store */ | 27 | /* YUV load/store */ |
| 28 | struct sh_css_isp_yuv_ls_isp_config { | 28 | struct sh_css_isp_yuv_ls_isp_config { |
| 29 | unsigned base_address[NUM_YUV_LS]; | 29 | unsigned base_address[NUM_YUV_LS]; |
| 30 | unsigned width[NUM_YUV_LS]; | 30 | unsigned width[NUM_YUV_LS]; |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/memory_realloc.c b/drivers/staging/media/atomisp/pci/atomisp2/css2400/memory_realloc.c index e814f1bf19f7..6512a1ceb9d3 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/memory_realloc.c +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/memory_realloc.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /** | 1 | /* |
| 2 | Support for Intel Camera Imaging ISP subsystem. | 2 | Support for Intel Camera Imaging ISP subsystem. |
| 3 | Copyright (c) 2010 - 2015, Intel Corporation. | 3 | Copyright (c) 2010 - 2015, Intel Corporation. |
| 4 | 4 | ||
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/binary/interface/ia_css_binary.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/binary/interface/ia_css_binary.h index c65194619a34..5a58abe2b233 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/binary/interface/ia_css_binary.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/binary/interface/ia_css_binary.h | |||
| @@ -269,7 +269,7 @@ enum ia_css_err | |||
| 269 | ia_css_binary_find(struct ia_css_binary_descr *descr, | 269 | ia_css_binary_find(struct ia_css_binary_descr *descr, |
| 270 | struct ia_css_binary *binary); | 270 | struct ia_css_binary *binary); |
| 271 | 271 | ||
| 272 | /** @brief Get the shading information of the specified shading correction type. | 272 | /* @brief Get the shading information of the specified shading correction type. |
| 273 | * | 273 | * |
| 274 | * @param[in] binary: The isp binary which has the shading correction. | 274 | * @param[in] binary: The isp binary which has the shading correction. |
| 275 | * @param[in] type: The shading correction type. | 275 | * @param[in] type: The shading correction type. |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/binary/src/binary.c b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/binary/src/binary.c index e028e460ae4c..295e07049393 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/binary/src/binary.c +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/binary/src/binary.c | |||
| @@ -972,7 +972,7 @@ ia_css_binary_uninit(void) | |||
| 972 | return IA_CSS_SUCCESS; | 972 | return IA_CSS_SUCCESS; |
| 973 | } | 973 | } |
| 974 | 974 | ||
| 975 | /** @brief Compute decimation factor for 3A statistics and shading correction. | 975 | /* @brief Compute decimation factor for 3A statistics and shading correction. |
| 976 | * | 976 | * |
| 977 | * @param[in] width Frame width in pixels. | 977 | * @param[in] width Frame width in pixels. |
| 978 | * @param[in] height Frame height in pixels. | 978 | * @param[in] height Frame height in pixels. |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/bufq/src/bufq.c b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/bufq/src/bufq.c index 42d9a8508858..e50d9f2e2609 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/bufq/src/bufq.c +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/bufq/src/bufq.c | |||
| @@ -152,7 +152,7 @@ void ia_css_queue_map( | |||
| 152 | unmap_buffer_type_to_queue_id(thread_id, buf_type); | 152 | unmap_buffer_type_to_queue_id(thread_id, buf_type); |
| 153 | } | 153 | } |
| 154 | 154 | ||
| 155 | /** | 155 | /* |
| 156 | * @brief Query the internal queue ID. | 156 | * @brief Query the internal queue ID. |
| 157 | */ | 157 | */ |
| 158 | bool ia_css_query_internal_queue_id( | 158 | bool ia_css_query_internal_queue_id( |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/debug/interface/ia_css_debug.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/debug/interface/ia_css_debug.h index 3c8dcfd4bbc6..4b28b2a0863a 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/debug/interface/ia_css_debug.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/debug/interface/ia_css_debug.h | |||
| @@ -54,21 +54,21 @@ extern unsigned int ia_css_debug_trace_level; | |||
| 54 | * Values can be combined to dump a combination of sets. | 54 | * Values can be combined to dump a combination of sets. |
| 55 | */ | 55 | */ |
| 56 | enum ia_css_debug_enable_param_dump { | 56 | enum ia_css_debug_enable_param_dump { |
| 57 | IA_CSS_DEBUG_DUMP_FPN = 1 << 0, /**< FPN table */ | 57 | IA_CSS_DEBUG_DUMP_FPN = 1 << 0, /** FPN table */ |
| 58 | IA_CSS_DEBUG_DUMP_OB = 1 << 1, /**< OB table */ | 58 | IA_CSS_DEBUG_DUMP_OB = 1 << 1, /** OB table */ |
| 59 | IA_CSS_DEBUG_DUMP_SC = 1 << 2, /**< Shading table */ | 59 | IA_CSS_DEBUG_DUMP_SC = 1 << 2, /** Shading table */ |
| 60 | IA_CSS_DEBUG_DUMP_WB = 1 << 3, /**< White balance */ | 60 | IA_CSS_DEBUG_DUMP_WB = 1 << 3, /** White balance */ |
| 61 | IA_CSS_DEBUG_DUMP_DP = 1 << 4, /**< Defect Pixel */ | 61 | IA_CSS_DEBUG_DUMP_DP = 1 << 4, /** Defect Pixel */ |
| 62 | IA_CSS_DEBUG_DUMP_BNR = 1 << 5, /**< Bayer Noise Reductions */ | 62 | IA_CSS_DEBUG_DUMP_BNR = 1 << 5, /** Bayer Noise Reductions */ |
| 63 | IA_CSS_DEBUG_DUMP_S3A = 1 << 6, /**< 3A Statistics */ | 63 | IA_CSS_DEBUG_DUMP_S3A = 1 << 6, /** 3A Statistics */ |
| 64 | IA_CSS_DEBUG_DUMP_DE = 1 << 7, /**< De Mosaicing */ | 64 | IA_CSS_DEBUG_DUMP_DE = 1 << 7, /** De Mosaicing */ |
| 65 | IA_CSS_DEBUG_DUMP_YNR = 1 << 8, /**< Luma Noise Reduction */ | 65 | IA_CSS_DEBUG_DUMP_YNR = 1 << 8, /** Luma Noise Reduction */ |
| 66 | IA_CSS_DEBUG_DUMP_CSC = 1 << 9, /**< Color Space Conversion */ | 66 | IA_CSS_DEBUG_DUMP_CSC = 1 << 9, /** Color Space Conversion */ |
| 67 | IA_CSS_DEBUG_DUMP_GC = 1 << 10, /**< Gamma Correction */ | 67 | IA_CSS_DEBUG_DUMP_GC = 1 << 10, /** Gamma Correction */ |
| 68 | IA_CSS_DEBUG_DUMP_TNR = 1 << 11, /**< Temporal Noise Reduction */ | 68 | IA_CSS_DEBUG_DUMP_TNR = 1 << 11, /** Temporal Noise Reduction */ |
| 69 | IA_CSS_DEBUG_DUMP_ANR = 1 << 12, /**< Advanced Noise Reduction */ | 69 | IA_CSS_DEBUG_DUMP_ANR = 1 << 12, /** Advanced Noise Reduction */ |
| 70 | IA_CSS_DEBUG_DUMP_CE = 1 << 13, /**< Chroma Enhancement */ | 70 | IA_CSS_DEBUG_DUMP_CE = 1 << 13, /** Chroma Enhancement */ |
| 71 | IA_CSS_DEBUG_DUMP_ALL = 1 << 14 /**< Dump all device parameters */ | 71 | IA_CSS_DEBUG_DUMP_ALL = 1 << 14 /** Dump all device parameters */ |
| 72 | }; | 72 | }; |
| 73 | 73 | ||
| 74 | #define IA_CSS_ERROR(fmt, ...) \ | 74 | #define IA_CSS_ERROR(fmt, ...) \ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/debug/src/ia_css_debug.c b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/debug/src/ia_css_debug.c index 0fa7cb2423d8..dd1127a21494 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/debug/src/ia_css_debug.c +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/debug/src/ia_css_debug.c | |||
| @@ -1617,7 +1617,7 @@ void ia_css_debug_print_sp_debug_state(const struct sh_css_sp_debug_state | |||
| 1617 | 1617 | ||
| 1618 | #elif SP_DEBUG == SP_DEBUG_TRACE | 1618 | #elif SP_DEBUG == SP_DEBUG_TRACE |
| 1619 | 1619 | ||
| 1620 | /** | 1620 | /* |
| 1621 | * This is just an example how TRACE_FILE_ID (see ia_css_debug.sp.h) will | 1621 | * This is just an example how TRACE_FILE_ID (see ia_css_debug.sp.h) will |
| 1622 | * me mapped on the file name string. | 1622 | * me mapped on the file name string. |
| 1623 | * | 1623 | * |
| @@ -2267,7 +2267,7 @@ void ia_css_debug_dump_debug_info(const char *context) | |||
| 2267 | return; | 2267 | return; |
| 2268 | } | 2268 | } |
| 2269 | 2269 | ||
| 2270 | /** this function is for debug use, it can make SP go to sleep | 2270 | /* this function is for debug use, it can make SP go to sleep |
| 2271 | state after each frame, then user can dump the stable SP dmem. | 2271 | state after each frame, then user can dump the stable SP dmem. |
| 2272 | this function can be called after ia_css_start_sp() | 2272 | this function can be called after ia_css_start_sp() |
| 2273 | and before sh_css_init_buffer_queues() | 2273 | and before sh_css_init_buffer_queues() |
| @@ -2526,7 +2526,7 @@ void ia_css_debug_dump_ddr_debug_queue(void) | |||
| 2526 | } | 2526 | } |
| 2527 | */ | 2527 | */ |
| 2528 | 2528 | ||
| 2529 | /** | 2529 | /* |
| 2530 | * @brief Initialize the debug mode. | 2530 | * @brief Initialize the debug mode. |
| 2531 | * Refer to "ia_css_debug.h" for more details. | 2531 | * Refer to "ia_css_debug.h" for more details. |
| 2532 | */ | 2532 | */ |
| @@ -2537,7 +2537,7 @@ bool ia_css_debug_mode_init(void) | |||
| 2537 | return rc; | 2537 | return rc; |
| 2538 | } | 2538 | } |
| 2539 | 2539 | ||
| 2540 | /** | 2540 | /* |
| 2541 | * @brief Disable the DMA channel. | 2541 | * @brief Disable the DMA channel. |
| 2542 | * Refer to "ia_css_debug.h" for more details. | 2542 | * Refer to "ia_css_debug.h" for more details. |
| 2543 | */ | 2543 | */ |
| @@ -2552,7 +2552,7 @@ ia_css_debug_mode_disable_dma_channel(int dma_id, | |||
| 2552 | return rc; | 2552 | return rc; |
| 2553 | } | 2553 | } |
| 2554 | 2554 | ||
| 2555 | /** | 2555 | /* |
| 2556 | * @brief Enable the DMA channel. | 2556 | * @brief Enable the DMA channel. |
| 2557 | * Refer to "ia_css_debug.h" for more details. | 2557 | * Refer to "ia_css_debug.h" for more details. |
| 2558 | */ | 2558 | */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/event/src/event.c b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/event/src/event.c index 2698c3e1adb0..239c06730bf4 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/event/src/event.c +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/event/src/event.c | |||
| @@ -13,7 +13,7 @@ | |||
| 13 | * more details. | 13 | * more details. |
| 14 | */ | 14 | */ |
| 15 | #else | 15 | #else |
| 16 | /** | 16 | /* |
| 17 | Support for Intel Camera Imaging ISP subsystem. | 17 | Support for Intel Camera Imaging ISP subsystem. |
| 18 | Copyright (c) 2010 - 2015, Intel Corporation. | 18 | Copyright (c) 2010 - 2015, Intel Corporation. |
| 19 | 19 | ||
| @@ -52,7 +52,7 @@ more details. | |||
| 52 | 52 | ||
| 53 | #include "ia_css_queue.h" /* host_sp_enqueue_XXX */ | 53 | #include "ia_css_queue.h" /* host_sp_enqueue_XXX */ |
| 54 | #include "ia_css_event.h" /* ia_css_event_encode */ | 54 | #include "ia_css_event.h" /* ia_css_event_encode */ |
| 55 | /** | 55 | /* |
| 56 | * @brief Encode the information into the software-event. | 56 | * @brief Encode the information into the software-event. |
| 57 | * Refer to "sw_event_public.h" for details. | 57 | * Refer to "sw_event_public.h" for details. |
| 58 | */ | 58 | */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/eventq/src/eventq.c b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/eventq/src/eventq.c index 56d6858890ec..913a4bf7a34f 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/eventq/src/eventq.c +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/eventq/src/eventq.c | |||
| @@ -37,7 +37,7 @@ int ia_css_eventq_recv( | |||
| 37 | return error; | 37 | return error; |
| 38 | } | 38 | } |
| 39 | 39 | ||
| 40 | /** | 40 | /* |
| 41 | * @brief The Host sends the event to the SP. | 41 | * @brief The Host sends the event to the SP. |
| 42 | * Refer to "sh_css_sp.h" for details. | 42 | * Refer to "sh_css_sp.h" for details. |
| 43 | */ | 43 | */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/frame/interface/ia_css_frame.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/frame/interface/ia_css_frame.h index c7e07b79f4e5..89ad8080ceb1 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/frame/interface/ia_css_frame.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/frame/interface/ia_css_frame.h | |||
| @@ -41,7 +41,7 @@ more details. | |||
| 41 | /********************************************************************* | 41 | /********************************************************************* |
| 42 | **** Frame INFO APIs | 42 | **** Frame INFO APIs |
| 43 | **********************************************************************/ | 43 | **********************************************************************/ |
| 44 | /** @brief Sets the given width and alignment to the frame info | 44 | /* @brief Sets the given width and alignment to the frame info |
| 45 | * | 45 | * |
| 46 | * @param | 46 | * @param |
| 47 | * @param[in] info The info to which parameters would set | 47 | * @param[in] info The info to which parameters would set |
| @@ -53,7 +53,7 @@ void ia_css_frame_info_set_width(struct ia_css_frame_info *info, | |||
| 53 | unsigned int width, | 53 | unsigned int width, |
| 54 | unsigned int min_padded_width); | 54 | unsigned int min_padded_width); |
| 55 | 55 | ||
| 56 | /** @brief Sets the given format to the frame info | 56 | /* @brief Sets the given format to the frame info |
| 57 | * | 57 | * |
| 58 | * @param | 58 | * @param |
| 59 | * @param[in] info The info to which parameters would set | 59 | * @param[in] info The info to which parameters would set |
| @@ -63,7 +63,7 @@ void ia_css_frame_info_set_width(struct ia_css_frame_info *info, | |||
| 63 | void ia_css_frame_info_set_format(struct ia_css_frame_info *info, | 63 | void ia_css_frame_info_set_format(struct ia_css_frame_info *info, |
| 64 | enum ia_css_frame_format format); | 64 | enum ia_css_frame_format format); |
| 65 | 65 | ||
| 66 | /** @brief Sets the frame info with the given parameters | 66 | /* @brief Sets the frame info with the given parameters |
| 67 | * | 67 | * |
| 68 | * @param | 68 | * @param |
| 69 | * @param[in] info The info to which parameters would set | 69 | * @param[in] info The info to which parameters would set |
| @@ -79,7 +79,7 @@ void ia_css_frame_info_init(struct ia_css_frame_info *info, | |||
| 79 | enum ia_css_frame_format format, | 79 | enum ia_css_frame_format format, |
| 80 | unsigned int aligned); | 80 | unsigned int aligned); |
| 81 | 81 | ||
| 82 | /** @brief Checks whether 2 frame infos has the same resolution | 82 | /* @brief Checks whether 2 frame infos has the same resolution |
| 83 | * | 83 | * |
| 84 | * @param | 84 | * @param |
| 85 | * @param[in] frame_a The first frame to be compared | 85 | * @param[in] frame_a The first frame to be compared |
| @@ -90,7 +90,7 @@ bool ia_css_frame_info_is_same_resolution( | |||
| 90 | const struct ia_css_frame_info *info_a, | 90 | const struct ia_css_frame_info *info_a, |
| 91 | const struct ia_css_frame_info *info_b); | 91 | const struct ia_css_frame_info *info_b); |
| 92 | 92 | ||
| 93 | /** @brief Check the frame info is valid | 93 | /* @brief Check the frame info is valid |
| 94 | * | 94 | * |
| 95 | * @param | 95 | * @param |
| 96 | * @param[in] info The frame attributes to be initialized | 96 | * @param[in] info The frame attributes to be initialized |
| @@ -102,7 +102,7 @@ enum ia_css_err ia_css_frame_check_info(const struct ia_css_frame_info *info); | |||
| 102 | **** Frame APIs | 102 | **** Frame APIs |
| 103 | **********************************************************************/ | 103 | **********************************************************************/ |
| 104 | 104 | ||
| 105 | /** @brief Initialize the plane depending on the frame type | 105 | /* @brief Initialize the plane depending on the frame type |
| 106 | * | 106 | * |
| 107 | * @param | 107 | * @param |
| 108 | * @param[in] frame The frame attributes to be initialized | 108 | * @param[in] frame The frame attributes to be initialized |
| @@ -110,7 +110,7 @@ enum ia_css_err ia_css_frame_check_info(const struct ia_css_frame_info *info); | |||
| 110 | */ | 110 | */ |
| 111 | enum ia_css_err ia_css_frame_init_planes(struct ia_css_frame *frame); | 111 | enum ia_css_err ia_css_frame_init_planes(struct ia_css_frame *frame); |
| 112 | 112 | ||
| 113 | /** @brief Free an array of frames | 113 | /* @brief Free an array of frames |
| 114 | * | 114 | * |
| 115 | * @param | 115 | * @param |
| 116 | * @param[in] num_frames The number of frames to be freed in the array | 116 | * @param[in] num_frames The number of frames to be freed in the array |
| @@ -120,7 +120,7 @@ enum ia_css_err ia_css_frame_init_planes(struct ia_css_frame *frame); | |||
| 120 | void ia_css_frame_free_multiple(unsigned int num_frames, | 120 | void ia_css_frame_free_multiple(unsigned int num_frames, |
| 121 | struct ia_css_frame **frames_array); | 121 | struct ia_css_frame **frames_array); |
| 122 | 122 | ||
| 123 | /** @brief Allocate a CSS frame structure of given size in bytes.. | 123 | /* @brief Allocate a CSS frame structure of given size in bytes.. |
| 124 | * | 124 | * |
| 125 | * @param frame The allocated frame. | 125 | * @param frame The allocated frame. |
| 126 | * @param[in] size_bytes The frame size in bytes. | 126 | * @param[in] size_bytes The frame size in bytes. |
| @@ -135,7 +135,7 @@ enum ia_css_err ia_css_frame_allocate_with_buffer_size( | |||
| 135 | const unsigned int size_bytes, | 135 | const unsigned int size_bytes, |
| 136 | const bool contiguous); | 136 | const bool contiguous); |
| 137 | 137 | ||
| 138 | /** @brief Check whether 2 frames are same type | 138 | /* @brief Check whether 2 frames are same type |
| 139 | * | 139 | * |
| 140 | * @param | 140 | * @param |
| 141 | * @param[in] frame_a The first frame to be compared | 141 | * @param[in] frame_a The first frame to be compared |
| @@ -146,7 +146,7 @@ bool ia_css_frame_is_same_type( | |||
| 146 | const struct ia_css_frame *frame_a, | 146 | const struct ia_css_frame *frame_a, |
| 147 | const struct ia_css_frame *frame_b); | 147 | const struct ia_css_frame *frame_b); |
| 148 | 148 | ||
| 149 | /** @brief Configure a dma port from frame info | 149 | /* @brief Configure a dma port from frame info |
| 150 | * | 150 | * |
| 151 | * @param | 151 | * @param |
| 152 | * @param[in] config The DAM port configuration | 152 | * @param[in] config The DAM port configuration |
| @@ -158,7 +158,7 @@ void ia_css_dma_configure_from_info( | |||
| 158 | const struct ia_css_frame_info *info); | 158 | const struct ia_css_frame_info *info); |
| 159 | 159 | ||
| 160 | #ifdef ISP2401 | 160 | #ifdef ISP2401 |
| 161 | /** @brief Finds the cropping resolution | 161 | /* @brief Finds the cropping resolution |
| 162 | * This function finds the maximum cropping resolution in an input image keeping | 162 | * This function finds the maximum cropping resolution in an input image keeping |
| 163 | * the aspect ratio for the given output resolution.Calculates the coordinates | 163 | * the aspect ratio for the given output resolution.Calculates the coordinates |
| 164 | * for cropping from the center and returns the starting pixel location of the | 164 | * for cropping from the center and returns the starting pixel location of the |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/frame/src/frame.c b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/frame/src/frame.c index f1a943cf04c0..5faa89ad8a23 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/frame/src/frame.c +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/frame/src/frame.c | |||
| @@ -13,7 +13,7 @@ | |||
| 13 | * more details. | 13 | * more details. |
| 14 | */ | 14 | */ |
| 15 | #else | 15 | #else |
| 16 | /** | 16 | /* |
| 17 | Support for Intel Camera Imaging ISP subsystem. | 17 | Support for Intel Camera Imaging ISP subsystem. |
| 18 | Copyright (c) 2010 - 2015, Intel Corporation. | 18 | Copyright (c) 2010 - 2015, Intel Corporation. |
| 19 | 19 | ||
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/ifmtr/src/ifmtr.c b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/ifmtr/src/ifmtr.c index 11d3995ba0db..adefa57820a4 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/ifmtr/src/ifmtr.c +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/ifmtr/src/ifmtr.c | |||
| @@ -13,7 +13,7 @@ | |||
| 13 | * more details. | 13 | * more details. |
| 14 | */ | 14 | */ |
| 15 | #else | 15 | #else |
| 16 | /** | 16 | /* |
| 17 | Support for Intel Camera Imaging ISP subsystem. | 17 | Support for Intel Camera Imaging ISP subsystem. |
| 18 | Copyright (c) 2010 - 2015, Intel Corporation. | 18 | Copyright (c) 2010 - 2015, Intel Corporation. |
| 19 | 19 | ||
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/inputfifo/src/inputfifo.c b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/inputfifo/src/inputfifo.c index d9a5f3e9283a..8dc74927e9a2 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/inputfifo/src/inputfifo.c +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/inputfifo/src/inputfifo.c | |||
| @@ -13,7 +13,7 @@ | |||
| 13 | * more details. | 13 | * more details. |
| 14 | */ | 14 | */ |
| 15 | #else | 15 | #else |
| 16 | /** | 16 | /* |
| 17 | Support for Intel Camera Imaging ISP subsystem. | 17 | Support for Intel Camera Imaging ISP subsystem. |
| 18 | Copyright (c) 2010 - 2015, Intel Corporation. | 18 | Copyright (c) 2010 - 2015, Intel Corporation. |
| 19 | 19 | ||
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isp_param/interface/ia_css_isp_param_types.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isp_param/interface/ia_css_isp_param_types.h index 8e651b80345a..2283dd1c1c9b 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isp_param/interface/ia_css_isp_param_types.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isp_param/interface/ia_css_isp_param_types.h | |||
| @@ -53,7 +53,7 @@ enum ia_css_param_class { | |||
| 53 | }; | 53 | }; |
| 54 | #define IA_CSS_NUM_PARAM_CLASSES (IA_CSS_PARAM_CLASS_STATE + 1) | 54 | #define IA_CSS_NUM_PARAM_CLASSES (IA_CSS_PARAM_CLASS_STATE + 1) |
| 55 | 55 | ||
| 56 | /** ISP parameter descriptor */ | 56 | /* ISP parameter descriptor */ |
| 57 | struct ia_css_isp_parameter { | 57 | struct ia_css_isp_parameter { |
| 58 | uint32_t offset; /* Offset in isp_<mem>)parameters, etc. */ | 58 | uint32_t offset; /* Offset in isp_<mem>)parameters, etc. */ |
| 59 | uint32_t size; /* Disabled if 0 */ | 59 | uint32_t size; /* Disabled if 0 */ |
| @@ -77,10 +77,10 @@ struct ia_css_isp_param_isp_segments { | |||
| 77 | 77 | ||
| 78 | /* Memory offsets in binary info */ | 78 | /* Memory offsets in binary info */ |
| 79 | struct ia_css_isp_param_memory_offsets { | 79 | struct ia_css_isp_param_memory_offsets { |
| 80 | uint32_t offsets[IA_CSS_NUM_PARAM_CLASSES]; /**< offset wrt hdr in bytes */ | 80 | uint32_t offsets[IA_CSS_NUM_PARAM_CLASSES]; /** offset wrt hdr in bytes */ |
| 81 | }; | 81 | }; |
| 82 | 82 | ||
| 83 | /** Offsets for ISP kernel parameters per isp memory. | 83 | /* Offsets for ISP kernel parameters per isp memory. |
| 84 | * Only relevant for standard ISP binaries, not ACC or SP. | 84 | * Only relevant for standard ISP binaries, not ACC or SP. |
| 85 | */ | 85 | */ |
| 86 | union ia_css_all_memory_offsets { | 86 | union ia_css_all_memory_offsets { |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isp_param/src/isp_param.c b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isp_param/src/isp_param.c index 832d9e16edeb..f793ce125f02 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isp_param/src/isp_param.c +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isp_param/src/isp_param.c | |||
| @@ -13,7 +13,7 @@ | |||
| 13 | * more details. | 13 | * more details. |
| 14 | */ | 14 | */ |
| 15 | #else | 15 | #else |
| 16 | /** | 16 | /* |
| 17 | Support for Intel Camera Imaging ISP subsystem. | 17 | Support for Intel Camera Imaging ISP subsystem. |
| 18 | Copyright (c) 2010 - 2015, Intel Corporation. | 18 | Copyright (c) 2010 - 2015, Intel Corporation. |
| 19 | 19 | ||
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isys/interface/ia_css_isys.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isys/interface/ia_css_isys.h index 02bf908d94e6..4cf2defe9ef0 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isys/interface/ia_css_isys.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isys/interface/ia_css_isys.h | |||
| @@ -44,7 +44,7 @@ more details. | |||
| 44 | * Virtual Input System. (Input System 2401) | 44 | * Virtual Input System. (Input System 2401) |
| 45 | */ | 45 | */ |
| 46 | typedef input_system_cfg_t ia_css_isys_descr_t; | 46 | typedef input_system_cfg_t ia_css_isys_descr_t; |
| 47 | /** end of Virtual Input System */ | 47 | /* end of Virtual Input System */ |
| 48 | #endif | 48 | #endif |
| 49 | 49 | ||
| 50 | #if defined(USE_INPUT_SYSTEM_VERSION_2) || defined(USE_INPUT_SYSTEM_VERSION_2401) | 50 | #if defined(USE_INPUT_SYSTEM_VERSION_2) || defined(USE_INPUT_SYSTEM_VERSION_2401) |
| @@ -112,7 +112,7 @@ unsigned int ia_css_isys_rx_translate_irq_infos(unsigned int bits); | |||
| 112 | 112 | ||
| 113 | #endif /* #if !defined(USE_INPUT_SYSTEM_VERSION_2401) */ | 113 | #endif /* #if !defined(USE_INPUT_SYSTEM_VERSION_2401) */ |
| 114 | 114 | ||
| 115 | /** @brief Translate format and compression to format type. | 115 | /* @brief Translate format and compression to format type. |
| 116 | * | 116 | * |
| 117 | * @param[in] input_format The input format. | 117 | * @param[in] input_format The input format. |
| 118 | * @param[in] compression The compression scheme. | 118 | * @param[in] compression The compression scheme. |
| @@ -195,7 +195,7 @@ extern void ia_css_isys_stream2mmio_sid_rmgr_release( | |||
| 195 | stream2mmio_ID_t stream2mmio, | 195 | stream2mmio_ID_t stream2mmio, |
| 196 | stream2mmio_sid_ID_t *sid); | 196 | stream2mmio_sid_ID_t *sid); |
| 197 | 197 | ||
| 198 | /** end of Virtual Input System */ | 198 | /* end of Virtual Input System */ |
| 199 | #endif | 199 | #endif |
| 200 | 200 | ||
| 201 | #endif /* __IA_CSS_ISYS_H__ */ | 201 | #endif /* __IA_CSS_ISYS_H__ */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isys/src/csi_rx_rmgr.c b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isys/src/csi_rx_rmgr.c index d1d4f79c00f1..3b04dc51335a 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isys/src/csi_rx_rmgr.c +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isys/src/csi_rx_rmgr.c | |||
| @@ -13,7 +13,7 @@ | |||
| 13 | * more details. | 13 | * more details. |
| 14 | */ | 14 | */ |
| 15 | #else | 15 | #else |
| 16 | /** | 16 | /* |
| 17 | Support for Intel Camera Imaging ISP subsystem. | 17 | Support for Intel Camera Imaging ISP subsystem. |
| 18 | Copyright (c) 2010 - 2015, Intel Corporation. | 18 | Copyright (c) 2010 - 2015, Intel Corporation. |
| 19 | 19 | ||
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isys/src/ibuf_ctrl_rmgr.c b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isys/src/ibuf_ctrl_rmgr.c index faef97672eac..d8c3b75d7fac 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isys/src/ibuf_ctrl_rmgr.c +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isys/src/ibuf_ctrl_rmgr.c | |||
| @@ -13,7 +13,7 @@ | |||
| 13 | * more details. | 13 | * more details. |
| 14 | */ | 14 | */ |
| 15 | #else | 15 | #else |
| 16 | /** | 16 | /* |
| 17 | * Support for Intel Camera Imaging ISP subsystem. | 17 | * Support for Intel Camera Imaging ISP subsystem. |
| 18 | * Copyright (c) 2010 - 2015, Intel Corporation. | 18 | * Copyright (c) 2010 - 2015, Intel Corporation. |
| 19 | * | 19 | * |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isys/src/isys_dma_rmgr.c b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isys/src/isys_dma_rmgr.c index 5032627342d9..4def4a542b7d 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isys/src/isys_dma_rmgr.c +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isys/src/isys_dma_rmgr.c | |||
| @@ -13,7 +13,7 @@ | |||
| 13 | * more details. | 13 | * more details. |
| 14 | */ | 14 | */ |
| 15 | #else | 15 | #else |
| 16 | /** | 16 | /* |
| 17 | Support for Intel Camera Imaging ISP subsystem. | 17 | Support for Intel Camera Imaging ISP subsystem. |
| 18 | Copyright (c) 2010 - 2015, Intel Corporation. | 18 | Copyright (c) 2010 - 2015, Intel Corporation. |
| 19 | 19 | ||
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isys/src/isys_init.c b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isys/src/isys_init.c index 239ef310bdeb..4122084fd237 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isys/src/isys_init.c +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isys/src/isys_init.c | |||
| @@ -13,7 +13,7 @@ | |||
| 13 | * more details. | 13 | * more details. |
| 14 | */ | 14 | */ |
| 15 | #else | 15 | #else |
| 16 | /** | 16 | /* |
| 17 | Support for Intel Camera Imaging ISP subsystem. | 17 | Support for Intel Camera Imaging ISP subsystem. |
| 18 | Copyright (c) 2010 - 2015, Intel Corporation. | 18 | Copyright (c) 2010 - 2015, Intel Corporation. |
| 19 | 19 | ||
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isys/src/isys_stream2mmio_rmgr.c b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isys/src/isys_stream2mmio_rmgr.c index a93c7f44ff12..222b294c0ab0 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isys/src/isys_stream2mmio_rmgr.c +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isys/src/isys_stream2mmio_rmgr.c | |||
| @@ -13,7 +13,7 @@ | |||
| 13 | * more details. | 13 | * more details. |
| 14 | */ | 14 | */ |
| 15 | #else | 15 | #else |
| 16 | /** | 16 | /* |
| 17 | Support for Intel Camera Imaging ISP subsystem. | 17 | Support for Intel Camera Imaging ISP subsystem. |
| 18 | Copyright (c) 2010 - 2015, Intel Corporation. | 18 | Copyright (c) 2010 - 2015, Intel Corporation. |
| 19 | 19 | ||
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isys/src/rx.c b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isys/src/rx.c index 46a157f64343..70f6cb5e5918 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isys/src/rx.c +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isys/src/rx.c | |||
| @@ -13,7 +13,7 @@ | |||
| 13 | * more details. | 13 | * more details. |
| 14 | */ | 14 | */ |
| 15 | #else | 15 | #else |
| 16 | /** | 16 | /* |
| 17 | Support for Intel Camera Imaging ISP subsystem. | 17 | Support for Intel Camera Imaging ISP subsystem. |
| 18 | Copyright (c) 2010 - 2015, Intel Corporation. | 18 | Copyright (c) 2010 - 2015, Intel Corporation. |
| 19 | 19 | ||
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isys/src/virtual_isys.c b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isys/src/virtual_isys.c index 0f1e8a2f6b10..90922a7acefd 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isys/src/virtual_isys.c +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/isys/src/virtual_isys.c | |||
| @@ -13,7 +13,7 @@ | |||
| 13 | * more details. | 13 | * more details. |
| 14 | */ | 14 | */ |
| 15 | #else | 15 | #else |
| 16 | /** | 16 | /* |
| 17 | Support for Intel Camera Imaging ISP subsystem. | 17 | Support for Intel Camera Imaging ISP subsystem. |
| 18 | Copyright (c) 2010 - 2015, Intel Corporation. | 18 | Copyright (c) 2010 - 2015, Intel Corporation. |
| 19 | 19 | ||
| @@ -166,7 +166,7 @@ static int32_t calculate_stride( | |||
| 166 | bool raw_packed, | 166 | bool raw_packed, |
| 167 | int32_t align_in_bytes); | 167 | int32_t align_in_bytes); |
| 168 | 168 | ||
| 169 | /** end of Forwarded Declaration */ | 169 | /* end of Forwarded Declaration */ |
| 170 | 170 | ||
| 171 | /************************************************** | 171 | /************************************************** |
| 172 | * | 172 | * |
| @@ -292,7 +292,7 @@ ia_css_isys_error_t ia_css_isys_stream_calculate_cfg( | |||
| 292 | return rc; | 292 | return rc; |
| 293 | } | 293 | } |
| 294 | 294 | ||
| 295 | /** end of Public Methods */ | 295 | /* end of Public Methods */ |
| 296 | 296 | ||
| 297 | /************************************************** | 297 | /************************************************** |
| 298 | * | 298 | * |
| @@ -894,5 +894,5 @@ static csi_mipi_packet_type_t get_csi_mipi_packet_type( | |||
| 894 | 894 | ||
| 895 | return packet_type; | 895 | return packet_type; |
| 896 | } | 896 | } |
| 897 | /** end of Private Methods */ | 897 | /* end of Private Methods */ |
| 898 | #endif | 898 | #endif |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/pipeline/interface/ia_css_pipeline.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/pipeline/interface/ia_css_pipeline.h index 90646f5f8885..e64936e2d46e 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/pipeline/interface/ia_css_pipeline.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/pipeline/interface/ia_css_pipeline.h | |||
| @@ -103,7 +103,7 @@ struct ia_css_pipeline_stage_desc { | |||
| 103 | struct ia_css_frame *vf_frame; | 103 | struct ia_css_frame *vf_frame; |
| 104 | }; | 104 | }; |
| 105 | 105 | ||
| 106 | /** @brief initialize the pipeline module | 106 | /* @brief initialize the pipeline module |
| 107 | * | 107 | * |
| 108 | * @return None | 108 | * @return None |
| 109 | * | 109 | * |
| @@ -112,7 +112,7 @@ struct ia_css_pipeline_stage_desc { | |||
| 112 | */ | 112 | */ |
| 113 | void ia_css_pipeline_init(void); | 113 | void ia_css_pipeline_init(void); |
| 114 | 114 | ||
| 115 | /** @brief initialize the pipeline structure with default values | 115 | /* @brief initialize the pipeline structure with default values |
| 116 | * | 116 | * |
| 117 | * @param[out] pipeline structure to be initialized with defaults | 117 | * @param[out] pipeline structure to be initialized with defaults |
| 118 | * @param[in] pipe_id | 118 | * @param[in] pipe_id |
| @@ -129,7 +129,7 @@ enum ia_css_err ia_css_pipeline_create( | |||
| 129 | unsigned int pipe_num, | 129 | unsigned int pipe_num, |
| 130 | unsigned int dvs_frame_delay); | 130 | unsigned int dvs_frame_delay); |
| 131 | 131 | ||
| 132 | /** @brief destroy a pipeline | 132 | /* @brief destroy a pipeline |
| 133 | * | 133 | * |
| 134 | * @param[in] pipeline | 134 | * @param[in] pipeline |
| 135 | * @return None | 135 | * @return None |
| @@ -138,7 +138,7 @@ enum ia_css_err ia_css_pipeline_create( | |||
| 138 | void ia_css_pipeline_destroy(struct ia_css_pipeline *pipeline); | 138 | void ia_css_pipeline_destroy(struct ia_css_pipeline *pipeline); |
| 139 | 139 | ||
| 140 | 140 | ||
| 141 | /** @brief Starts a pipeline | 141 | /* @brief Starts a pipeline |
| 142 | * | 142 | * |
| 143 | * @param[in] pipe_id | 143 | * @param[in] pipe_id |
| 144 | * @param[in] pipeline | 144 | * @param[in] pipeline |
| @@ -148,7 +148,7 @@ void ia_css_pipeline_destroy(struct ia_css_pipeline *pipeline); | |||
| 148 | void ia_css_pipeline_start(enum ia_css_pipe_id pipe_id, | 148 | void ia_css_pipeline_start(enum ia_css_pipe_id pipe_id, |
| 149 | struct ia_css_pipeline *pipeline); | 149 | struct ia_css_pipeline *pipeline); |
| 150 | 150 | ||
| 151 | /** @brief Request to stop a pipeline | 151 | /* @brief Request to stop a pipeline |
| 152 | * | 152 | * |
| 153 | * @param[in] pipeline | 153 | * @param[in] pipeline |
| 154 | * @return IA_CSS_SUCCESS or error code upon error. | 154 | * @return IA_CSS_SUCCESS or error code upon error. |
| @@ -156,7 +156,7 @@ void ia_css_pipeline_start(enum ia_css_pipe_id pipe_id, | |||
| 156 | */ | 156 | */ |
| 157 | enum ia_css_err ia_css_pipeline_request_stop(struct ia_css_pipeline *pipeline); | 157 | enum ia_css_err ia_css_pipeline_request_stop(struct ia_css_pipeline *pipeline); |
| 158 | 158 | ||
| 159 | /** @brief Check whether pipeline has stopped | 159 | /* @brief Check whether pipeline has stopped |
| 160 | * | 160 | * |
| 161 | * @param[in] pipeline | 161 | * @param[in] pipeline |
| 162 | * @return true if the pipeline has stopped | 162 | * @return true if the pipeline has stopped |
| @@ -164,7 +164,7 @@ enum ia_css_err ia_css_pipeline_request_stop(struct ia_css_pipeline *pipeline); | |||
| 164 | */ | 164 | */ |
| 165 | bool ia_css_pipeline_has_stopped(struct ia_css_pipeline *pipe); | 165 | bool ia_css_pipeline_has_stopped(struct ia_css_pipeline *pipe); |
| 166 | 166 | ||
| 167 | /** @brief clean all the stages pipeline and make it as new | 167 | /* @brief clean all the stages pipeline and make it as new |
| 168 | * | 168 | * |
| 169 | * @param[in] pipeline | 169 | * @param[in] pipeline |
| 170 | * @return None | 170 | * @return None |
| @@ -172,7 +172,7 @@ bool ia_css_pipeline_has_stopped(struct ia_css_pipeline *pipe); | |||
| 172 | */ | 172 | */ |
| 173 | void ia_css_pipeline_clean(struct ia_css_pipeline *pipeline); | 173 | void ia_css_pipeline_clean(struct ia_css_pipeline *pipeline); |
| 174 | 174 | ||
| 175 | /** @brief Add a stage to pipeline. | 175 | /* @brief Add a stage to pipeline. |
| 176 | * | 176 | * |
| 177 | * @param pipeline Pointer to the pipeline to be added to. | 177 | * @param pipeline Pointer to the pipeline to be added to. |
| 178 | * @param[in] stage_desc The description of the stage | 178 | * @param[in] stage_desc The description of the stage |
| @@ -188,7 +188,7 @@ enum ia_css_err ia_css_pipeline_create_and_add_stage( | |||
| 188 | struct ia_css_pipeline_stage_desc *stage_desc, | 188 | struct ia_css_pipeline_stage_desc *stage_desc, |
| 189 | struct ia_css_pipeline_stage **stage); | 189 | struct ia_css_pipeline_stage **stage); |
| 190 | 190 | ||
| 191 | /** @brief Finalize the stages in a pipeline | 191 | /* @brief Finalize the stages in a pipeline |
| 192 | * | 192 | * |
| 193 | * @param pipeline Pointer to the pipeline to be added to. | 193 | * @param pipeline Pointer to the pipeline to be added to. |
| 194 | * @return None | 194 | * @return None |
| @@ -198,7 +198,7 @@ enum ia_css_err ia_css_pipeline_create_and_add_stage( | |||
| 198 | void ia_css_pipeline_finalize_stages(struct ia_css_pipeline *pipeline, | 198 | void ia_css_pipeline_finalize_stages(struct ia_css_pipeline *pipeline, |
| 199 | bool continuous); | 199 | bool continuous); |
| 200 | 200 | ||
| 201 | /** @brief gets a stage from the pipeline | 201 | /* @brief gets a stage from the pipeline |
| 202 | * | 202 | * |
| 203 | * @param[in] pipeline | 203 | * @param[in] pipeline |
| 204 | * @return IA_CSS_SUCCESS or error code upon error. | 204 | * @return IA_CSS_SUCCESS or error code upon error. |
| @@ -208,7 +208,7 @@ enum ia_css_err ia_css_pipeline_get_stage(struct ia_css_pipeline *pipeline, | |||
| 208 | int mode, | 208 | int mode, |
| 209 | struct ia_css_pipeline_stage **stage); | 209 | struct ia_css_pipeline_stage **stage); |
| 210 | 210 | ||
| 211 | /** @brief Gets a pipeline stage corresponding Firmware handle from the pipeline | 211 | /* @brief Gets a pipeline stage corresponding Firmware handle from the pipeline |
| 212 | * | 212 | * |
| 213 | * @param[in] pipeline | 213 | * @param[in] pipeline |
| 214 | * @param[in] fw_handle | 214 | * @param[in] fw_handle |
| @@ -221,7 +221,7 @@ enum ia_css_err ia_css_pipeline_get_stage_from_fw(struct ia_css_pipeline *pipeli | |||
| 221 | uint32_t fw_handle, | 221 | uint32_t fw_handle, |
| 222 | struct ia_css_pipeline_stage **stage); | 222 | struct ia_css_pipeline_stage **stage); |
| 223 | 223 | ||
| 224 | /** @brief Gets the Firmware handle correponding the stage num from the pipeline | 224 | /* @brief Gets the Firmware handle correponding the stage num from the pipeline |
| 225 | * | 225 | * |
| 226 | * @param[in] pipeline | 226 | * @param[in] pipeline |
| 227 | * @param[in] stage_num | 227 | * @param[in] stage_num |
| @@ -234,7 +234,7 @@ enum ia_css_err ia_css_pipeline_get_fw_from_stage(struct ia_css_pipeline *pipeli | |||
| 234 | uint32_t stage_num, | 234 | uint32_t stage_num, |
| 235 | uint32_t *fw_handle); | 235 | uint32_t *fw_handle); |
| 236 | 236 | ||
| 237 | /** @brief gets the output stage from the pipeline | 237 | /* @brief gets the output stage from the pipeline |
| 238 | * | 238 | * |
| 239 | * @param[in] pipeline | 239 | * @param[in] pipeline |
| 240 | * @return IA_CSS_SUCCESS or error code upon error. | 240 | * @return IA_CSS_SUCCESS or error code upon error. |
| @@ -245,7 +245,7 @@ enum ia_css_err ia_css_pipeline_get_output_stage( | |||
| 245 | int mode, | 245 | int mode, |
| 246 | struct ia_css_pipeline_stage **stage); | 246 | struct ia_css_pipeline_stage **stage); |
| 247 | 247 | ||
| 248 | /** @brief Checks whether the pipeline uses params | 248 | /* @brief Checks whether the pipeline uses params |
| 249 | * | 249 | * |
| 250 | * @param[in] pipeline | 250 | * @param[in] pipeline |
| 251 | * @return true if the pipeline uses params | 251 | * @return true if the pipeline uses params |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/pipeline/src/pipeline.c b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/pipeline/src/pipeline.c index 62d13978475d..8f93d29d1c51 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/pipeline/src/pipeline.c +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/pipeline/src/pipeline.c | |||
| @@ -13,7 +13,7 @@ | |||
| 13 | * more details. | 13 | * more details. |
| 14 | */ | 14 | */ |
| 15 | #else | 15 | #else |
| 16 | /** | 16 | /* |
| 17 | Support for Intel Camera Imaging ISP subsystem. | 17 | Support for Intel Camera Imaging ISP subsystem. |
| 18 | Copyright (c) 2010 - 2015, Intel Corporation. | 18 | Copyright (c) 2010 - 2015, Intel Corporation. |
| 19 | 19 | ||
| @@ -114,7 +114,7 @@ void ia_css_pipeline_map(unsigned int pipe_num, bool map) | |||
| 114 | IA_CSS_LEAVE_PRIVATE("void"); | 114 | IA_CSS_LEAVE_PRIVATE("void"); |
| 115 | } | 115 | } |
| 116 | 116 | ||
| 117 | /** @brief destroy a pipeline | 117 | /* @brief destroy a pipeline |
| 118 | * | 118 | * |
| 119 | * @param[in] pipeline | 119 | * @param[in] pipeline |
| 120 | * @return None | 120 | * @return None |
| @@ -187,7 +187,7 @@ void ia_css_pipeline_start(enum ia_css_pipe_id pipe_id, | |||
| 187 | "ia_css_pipeline_start() leave: return_void\n"); | 187 | "ia_css_pipeline_start() leave: return_void\n"); |
| 188 | } | 188 | } |
| 189 | 189 | ||
| 190 | /** | 190 | /* |
| 191 | * @brief Query the SP thread ID. | 191 | * @brief Query the SP thread ID. |
| 192 | * Refer to "sh_css_internal.h" for details. | 192 | * Refer to "sh_css_internal.h" for details. |
| 193 | */ | 193 | */ |
| @@ -285,7 +285,7 @@ void ia_css_pipeline_clean(struct ia_css_pipeline *pipeline) | |||
| 285 | IA_CSS_LEAVE_PRIVATE("void"); | 285 | IA_CSS_LEAVE_PRIVATE("void"); |
| 286 | } | 286 | } |
| 287 | 287 | ||
| 288 | /** @brief Add a stage to pipeline. | 288 | /* @brief Add a stage to pipeline. |
| 289 | * | 289 | * |
| 290 | * @param pipeline Pointer to the pipeline to be added to. | 290 | * @param pipeline Pointer to the pipeline to be added to. |
| 291 | * @param[in] stage_desc The description of the stage | 291 | * @param[in] stage_desc The description of the stage |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/queue/interface/ia_css_queue.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/queue/interface/ia_css_queue.h index e50a0f813753..aaf2e247cafb 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/queue/interface/ia_css_queue.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/queue/interface/ia_css_queue.h | |||
| @@ -51,7 +51,7 @@ typedef struct ia_css_queue ia_css_queue_t; | |||
| 51 | /***************************************************************************** | 51 | /***************************************************************************** |
| 52 | * Queue Public APIs | 52 | * Queue Public APIs |
| 53 | *****************************************************************************/ | 53 | *****************************************************************************/ |
| 54 | /** @brief Initialize a local queue instance. | 54 | /* @brief Initialize a local queue instance. |
| 55 | * | 55 | * |
| 56 | * @param[out] qhandle. Handle to queue instance for use with API | 56 | * @param[out] qhandle. Handle to queue instance for use with API |
| 57 | * @param[in] desc. Descriptor with queue properties filled-in | 57 | * @param[in] desc. Descriptor with queue properties filled-in |
| @@ -63,7 +63,7 @@ extern int ia_css_queue_local_init( | |||
| 63 | ia_css_queue_t *qhandle, | 63 | ia_css_queue_t *qhandle, |
| 64 | ia_css_queue_local_t *desc); | 64 | ia_css_queue_local_t *desc); |
| 65 | 65 | ||
| 66 | /** @brief Initialize a remote queue instance | 66 | /* @brief Initialize a remote queue instance |
| 67 | * | 67 | * |
| 68 | * @param[out] qhandle. Handle to queue instance for use with API | 68 | * @param[out] qhandle. Handle to queue instance for use with API |
| 69 | * @param[in] desc. Descriptor with queue properties filled-in | 69 | * @param[in] desc. Descriptor with queue properties filled-in |
| @@ -74,7 +74,7 @@ extern int ia_css_queue_remote_init( | |||
| 74 | ia_css_queue_t *qhandle, | 74 | ia_css_queue_t *qhandle, |
| 75 | ia_css_queue_remote_t *desc); | 75 | ia_css_queue_remote_t *desc); |
| 76 | 76 | ||
| 77 | /** @brief Uninitialize a queue instance | 77 | /* @brief Uninitialize a queue instance |
| 78 | * | 78 | * |
| 79 | * @param[in] qhandle. Handle to queue instance | 79 | * @param[in] qhandle. Handle to queue instance |
| 80 | * @return 0 - Successful uninit. | 80 | * @return 0 - Successful uninit. |
| @@ -83,7 +83,7 @@ extern int ia_css_queue_remote_init( | |||
| 83 | extern int ia_css_queue_uninit( | 83 | extern int ia_css_queue_uninit( |
| 84 | ia_css_queue_t *qhandle); | 84 | ia_css_queue_t *qhandle); |
| 85 | 85 | ||
| 86 | /** @brief Enqueue an item in the queue instance | 86 | /* @brief Enqueue an item in the queue instance |
| 87 | * | 87 | * |
| 88 | * @param[in] qhandle. Handle to queue instance | 88 | * @param[in] qhandle. Handle to queue instance |
| 89 | * @param[in] item. Object to be enqueued. | 89 | * @param[in] item. Object to be enqueued. |
| @@ -96,7 +96,7 @@ extern int ia_css_queue_enqueue( | |||
| 96 | ia_css_queue_t *qhandle, | 96 | ia_css_queue_t *qhandle, |
| 97 | uint32_t item); | 97 | uint32_t item); |
| 98 | 98 | ||
| 99 | /** @brief Dequeue an item from the queue instance | 99 | /* @brief Dequeue an item from the queue instance |
| 100 | * | 100 | * |
| 101 | * @param[in] qhandle. Handle to queue instance | 101 | * @param[in] qhandle. Handle to queue instance |
| 102 | * @param[out] item. Object to be dequeued into this item. | 102 | * @param[out] item. Object to be dequeued into this item. |
| @@ -110,7 +110,7 @@ extern int ia_css_queue_dequeue( | |||
| 110 | ia_css_queue_t *qhandle, | 110 | ia_css_queue_t *qhandle, |
| 111 | uint32_t *item); | 111 | uint32_t *item); |
| 112 | 112 | ||
| 113 | /** @brief Check if the queue is empty | 113 | /* @brief Check if the queue is empty |
| 114 | * | 114 | * |
| 115 | * @param[in] qhandle. Handle to queue instance | 115 | * @param[in] qhandle. Handle to queue instance |
| 116 | * @param[in] is_empty True if empty, False if not. | 116 | * @param[in] is_empty True if empty, False if not. |
| @@ -123,7 +123,7 @@ extern int ia_css_queue_is_empty( | |||
| 123 | ia_css_queue_t *qhandle, | 123 | ia_css_queue_t *qhandle, |
| 124 | bool *is_empty); | 124 | bool *is_empty); |
| 125 | 125 | ||
| 126 | /** @brief Check if the queue is full | 126 | /* @brief Check if the queue is full |
| 127 | * | 127 | * |
| 128 | * @param[in] qhandle. Handle to queue instance | 128 | * @param[in] qhandle. Handle to queue instance |
| 129 | * @param[in] is_full True if Full, False if not. | 129 | * @param[in] is_full True if Full, False if not. |
| @@ -136,7 +136,7 @@ extern int ia_css_queue_is_full( | |||
| 136 | ia_css_queue_t *qhandle, | 136 | ia_css_queue_t *qhandle, |
| 137 | bool *is_full); | 137 | bool *is_full); |
| 138 | 138 | ||
| 139 | /** @brief Get used space in the queue | 139 | /* @brief Get used space in the queue |
| 140 | * | 140 | * |
| 141 | * @param[in] qhandle. Handle to queue instance | 141 | * @param[in] qhandle. Handle to queue instance |
| 142 | * @param[in] size Number of available elements in the queue | 142 | * @param[in] size Number of available elements in the queue |
| @@ -148,7 +148,7 @@ extern int ia_css_queue_get_used_space( | |||
| 148 | ia_css_queue_t *qhandle, | 148 | ia_css_queue_t *qhandle, |
| 149 | uint32_t *size); | 149 | uint32_t *size); |
| 150 | 150 | ||
| 151 | /** @brief Get free space in the queue | 151 | /* @brief Get free space in the queue |
| 152 | * | 152 | * |
| 153 | * @param[in] qhandle. Handle to queue instance | 153 | * @param[in] qhandle. Handle to queue instance |
| 154 | * @param[in] size Number of free elements in the queue | 154 | * @param[in] size Number of free elements in the queue |
| @@ -160,7 +160,7 @@ extern int ia_css_queue_get_free_space( | |||
| 160 | ia_css_queue_t *qhandle, | 160 | ia_css_queue_t *qhandle, |
| 161 | uint32_t *size); | 161 | uint32_t *size); |
| 162 | 162 | ||
| 163 | /** @brief Peek at an element in the queue | 163 | /* @brief Peek at an element in the queue |
| 164 | * | 164 | * |
| 165 | * @param[in] qhandle. Handle to queue instance | 165 | * @param[in] qhandle. Handle to queue instance |
| 166 | * @param[in] offset Offset of element to peek, | 166 | * @param[in] offset Offset of element to peek, |
| @@ -175,7 +175,7 @@ extern int ia_css_queue_peek( | |||
| 175 | uint32_t offset, | 175 | uint32_t offset, |
| 176 | uint32_t *element); | 176 | uint32_t *element); |
| 177 | 177 | ||
| 178 | /** @brief Get the usable size for the queue | 178 | /* @brief Get the usable size for the queue |
| 179 | * | 179 | * |
| 180 | * @param[in] qhandle. Handle to queue instance | 180 | * @param[in] qhandle. Handle to queue instance |
| 181 | * @param[out] size Size value to be returned here. | 181 | * @param[out] size Size value to be returned here. |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/queue/src/queue_access.c b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/queue/src/queue_access.c index 946d4f2d2108..7bb2b494836e 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/queue/src/queue_access.c +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/queue/src/queue_access.c | |||
| @@ -13,7 +13,7 @@ | |||
| 13 | * more details. | 13 | * more details. |
| 14 | */ | 14 | */ |
| 15 | #else | 15 | #else |
| 16 | /** | 16 | /* |
| 17 | Support for Intel Camera Imaging ISP subsystem. | 17 | Support for Intel Camera Imaging ISP subsystem. |
| 18 | Copyright (c) 2010 - 2015, Intel Corporation. | 18 | Copyright (c) 2010 - 2015, Intel Corporation. |
| 19 | 19 | ||
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/rmgr/src/rmgr.c b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/rmgr/src/rmgr.c index efa9c140484f..370ff3816dbe 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/rmgr/src/rmgr.c +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/rmgr/src/rmgr.c | |||
| @@ -13,7 +13,7 @@ | |||
| 13 | * more details. | 13 | * more details. |
| 14 | */ | 14 | */ |
| 15 | #else | 15 | #else |
| 16 | /** | 16 | /* |
| 17 | Support for Intel Camera Imaging ISP subsystem. | 17 | Support for Intel Camera Imaging ISP subsystem. |
| 18 | Copyright (c) 2010 - 2015, Intel Corporation. | 18 | Copyright (c) 2010 - 2015, Intel Corporation. |
| 19 | 19 | ||
| @@ -44,7 +44,7 @@ enum ia_css_err ia_css_rmgr_init(void) | |||
| 44 | return err; | 44 | return err; |
| 45 | } | 45 | } |
| 46 | 46 | ||
| 47 | /** | 47 | /* |
| 48 | * @brief Uninitialize resource pool (host) | 48 | * @brief Uninitialize resource pool (host) |
| 49 | */ | 49 | */ |
| 50 | void ia_css_rmgr_uninit(void) | 50 | void ia_css_rmgr_uninit(void) |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/rmgr/src/rmgr_vbuf.c b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/rmgr/src/rmgr_vbuf.c index e56006c07ee8..54239ac9d7c9 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/rmgr/src/rmgr_vbuf.c +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/rmgr/src/rmgr_vbuf.c | |||
| @@ -20,13 +20,13 @@ | |||
| 20 | #include <memory_access.h> /* mmmgr_malloc, mhmm_free */ | 20 | #include <memory_access.h> /* mmmgr_malloc, mhmm_free */ |
| 21 | #include <ia_css_debug.h> | 21 | #include <ia_css_debug.h> |
| 22 | 22 | ||
| 23 | /** | 23 | /* |
| 24 | * @brief VBUF resource handles | 24 | * @brief VBUF resource handles |
| 25 | */ | 25 | */ |
| 26 | #define NUM_HANDLES 1000 | 26 | #define NUM_HANDLES 1000 |
| 27 | struct ia_css_rmgr_vbuf_handle handle_table[NUM_HANDLES]; | 27 | struct ia_css_rmgr_vbuf_handle handle_table[NUM_HANDLES]; |
| 28 | 28 | ||
| 29 | /** | 29 | /* |
| 30 | * @brief VBUF resource pool - refpool | 30 | * @brief VBUF resource pool - refpool |
| 31 | */ | 31 | */ |
| 32 | struct ia_css_rmgr_vbuf_pool refpool = { | 32 | struct ia_css_rmgr_vbuf_pool refpool = { |
| @@ -37,7 +37,7 @@ struct ia_css_rmgr_vbuf_pool refpool = { | |||
| 37 | NULL, /* handles */ | 37 | NULL, /* handles */ |
| 38 | }; | 38 | }; |
| 39 | 39 | ||
| 40 | /** | 40 | /* |
| 41 | * @brief VBUF resource pool - writepool | 41 | * @brief VBUF resource pool - writepool |
| 42 | */ | 42 | */ |
| 43 | struct ia_css_rmgr_vbuf_pool writepool = { | 43 | struct ia_css_rmgr_vbuf_pool writepool = { |
| @@ -48,7 +48,7 @@ struct ia_css_rmgr_vbuf_pool writepool = { | |||
| 48 | NULL, /* handles */ | 48 | NULL, /* handles */ |
| 49 | }; | 49 | }; |
| 50 | 50 | ||
| 51 | /** | 51 | /* |
| 52 | * @brief VBUF resource pool - hmmbufferpool | 52 | * @brief VBUF resource pool - hmmbufferpool |
| 53 | */ | 53 | */ |
| 54 | struct ia_css_rmgr_vbuf_pool hmmbufferpool = { | 54 | struct ia_css_rmgr_vbuf_pool hmmbufferpool = { |
| @@ -63,7 +63,7 @@ struct ia_css_rmgr_vbuf_pool *vbuf_ref = &refpool; | |||
| 63 | struct ia_css_rmgr_vbuf_pool *vbuf_write = &writepool; | 63 | struct ia_css_rmgr_vbuf_pool *vbuf_write = &writepool; |
| 64 | struct ia_css_rmgr_vbuf_pool *hmm_buffer_pool = &hmmbufferpool; | 64 | struct ia_css_rmgr_vbuf_pool *hmm_buffer_pool = &hmmbufferpool; |
| 65 | 65 | ||
| 66 | /** | 66 | /* |
| 67 | * @brief Initialize the reference count (host, vbuf) | 67 | * @brief Initialize the reference count (host, vbuf) |
| 68 | */ | 68 | */ |
| 69 | static void rmgr_refcount_init_vbuf(void) | 69 | static void rmgr_refcount_init_vbuf(void) |
| @@ -72,7 +72,7 @@ static void rmgr_refcount_init_vbuf(void) | |||
| 72 | memset(&handle_table, 0, sizeof(handle_table)); | 72 | memset(&handle_table, 0, sizeof(handle_table)); |
| 73 | } | 73 | } |
| 74 | 74 | ||
| 75 | /** | 75 | /* |
| 76 | * @brief Retain the reference count for a handle (host, vbuf) | 76 | * @brief Retain the reference count for a handle (host, vbuf) |
| 77 | * | 77 | * |
| 78 | * @param handle The pointer to the handle | 78 | * @param handle The pointer to the handle |
| @@ -109,7 +109,7 @@ void ia_css_rmgr_refcount_retain_vbuf(struct ia_css_rmgr_vbuf_handle **handle) | |||
| 109 | (*handle)->count++; | 109 | (*handle)->count++; |
| 110 | } | 110 | } |
| 111 | 111 | ||
| 112 | /** | 112 | /* |
| 113 | * @brief Release the reference count for a handle (host, vbuf) | 113 | * @brief Release the reference count for a handle (host, vbuf) |
| 114 | * | 114 | * |
| 115 | * @param handle The pointer to the handle | 115 | * @param handle The pointer to the handle |
| @@ -131,7 +131,7 @@ void ia_css_rmgr_refcount_release_vbuf(struct ia_css_rmgr_vbuf_handle **handle) | |||
| 131 | } | 131 | } |
| 132 | } | 132 | } |
| 133 | 133 | ||
| 134 | /** | 134 | /* |
| 135 | * @brief Initialize the resource pool (host, vbuf) | 135 | * @brief Initialize the resource pool (host, vbuf) |
| 136 | * | 136 | * |
| 137 | * @param pool The pointer to the pool | 137 | * @param pool The pointer to the pool |
| @@ -163,7 +163,7 @@ enum ia_css_err ia_css_rmgr_init_vbuf(struct ia_css_rmgr_vbuf_pool *pool) | |||
| 163 | return err; | 163 | return err; |
| 164 | } | 164 | } |
| 165 | 165 | ||
| 166 | /** | 166 | /* |
| 167 | * @brief Uninitialize the resource pool (host, vbuf) | 167 | * @brief Uninitialize the resource pool (host, vbuf) |
| 168 | * | 168 | * |
| 169 | * @param pool The pointer to the pool | 169 | * @param pool The pointer to the pool |
| @@ -197,7 +197,7 @@ void ia_css_rmgr_uninit_vbuf(struct ia_css_rmgr_vbuf_pool *pool) | |||
| 197 | } | 197 | } |
| 198 | } | 198 | } |
| 199 | 199 | ||
| 200 | /** | 200 | /* |
| 201 | * @brief Push a handle to the pool | 201 | * @brief Push a handle to the pool |
| 202 | * | 202 | * |
| 203 | * @param pool The pointer to the pool | 203 | * @param pool The pointer to the pool |
| @@ -224,7 +224,7 @@ void rmgr_push_handle(struct ia_css_rmgr_vbuf_pool *pool, | |||
| 224 | assert(succes); | 224 | assert(succes); |
| 225 | } | 225 | } |
| 226 | 226 | ||
| 227 | /** | 227 | /* |
| 228 | * @brief Pop a handle from the pool | 228 | * @brief Pop a handle from the pool |
| 229 | * | 229 | * |
| 230 | * @param pool The pointer to the pool | 230 | * @param pool The pointer to the pool |
| @@ -254,7 +254,7 @@ void rmgr_pop_handle(struct ia_css_rmgr_vbuf_pool *pool, | |||
| 254 | } | 254 | } |
| 255 | } | 255 | } |
| 256 | 256 | ||
| 257 | /** | 257 | /* |
| 258 | * @brief Acquire a handle from the pool (host, vbuf) | 258 | * @brief Acquire a handle from the pool (host, vbuf) |
| 259 | * | 259 | * |
| 260 | * @param pool The pointer to the pool | 260 | * @param pool The pointer to the pool |
| @@ -302,7 +302,7 @@ void ia_css_rmgr_acq_vbuf(struct ia_css_rmgr_vbuf_pool *pool, | |||
| 302 | ia_css_rmgr_refcount_retain_vbuf(handle); | 302 | ia_css_rmgr_refcount_retain_vbuf(handle); |
| 303 | } | 303 | } |
| 304 | 304 | ||
| 305 | /** | 305 | /* |
| 306 | * @brief Release a handle to the pool (host, vbuf) | 306 | * @brief Release a handle to the pool (host, vbuf) |
| 307 | * | 307 | * |
| 308 | * @param pool The pointer to the pool | 308 | * @param pool The pointer to the pool |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/spctrl/interface/ia_css_spctrl.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/spctrl/interface/ia_css_spctrl.h index 27e9eb1e2102..bc4b1723369e 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/spctrl/interface/ia_css_spctrl.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/spctrl/interface/ia_css_spctrl.h | |||
| @@ -37,17 +37,17 @@ more details. | |||
| 37 | 37 | ||
| 38 | 38 | ||
| 39 | typedef struct { | 39 | typedef struct { |
| 40 | uint32_t ddr_data_offset; /**< posistion of data in DDR */ | 40 | uint32_t ddr_data_offset; /** posistion of data in DDR */ |
| 41 | uint32_t dmem_data_addr; /**< data segment address in dmem */ | 41 | uint32_t dmem_data_addr; /** data segment address in dmem */ |
| 42 | uint32_t dmem_bss_addr; /**< bss segment address in dmem */ | 42 | uint32_t dmem_bss_addr; /** bss segment address in dmem */ |
| 43 | uint32_t data_size; /**< data segment size */ | 43 | uint32_t data_size; /** data segment size */ |
| 44 | uint32_t bss_size; /**< bss segment size */ | 44 | uint32_t bss_size; /** bss segment size */ |
| 45 | uint32_t spctrl_config_dmem_addr; /** <location of dmem_cfg in SP dmem */ | 45 | uint32_t spctrl_config_dmem_addr; /* <location of dmem_cfg in SP dmem */ |
| 46 | uint32_t spctrl_state_dmem_addr; /** < location of state in SP dmem */ | 46 | uint32_t spctrl_state_dmem_addr; /* < location of state in SP dmem */ |
| 47 | unsigned int sp_entry; /** < entry function ptr on SP */ | 47 | unsigned int sp_entry; /* < entry function ptr on SP */ |
| 48 | const void *code; /**< location of firmware */ | 48 | const void *code; /** location of firmware */ |
| 49 | uint32_t code_size; | 49 | uint32_t code_size; |
| 50 | char *program_name; /**< not used on hardware, only for simulation */ | 50 | char *program_name; /** not used on hardware, only for simulation */ |
| 51 | } ia_css_spctrl_cfg; | 51 | } ia_css_spctrl_cfg; |
| 52 | 52 | ||
| 53 | /* Get the code addr in DDR of SP */ | 53 | /* Get the code addr in DDR of SP */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/spctrl/interface/ia_css_spctrl_comm.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/spctrl/interface/ia_css_spctrl_comm.h index 3af2891efca7..2620d7514f79 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/spctrl/interface/ia_css_spctrl_comm.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/spctrl/interface/ia_css_spctrl_comm.h | |||
| @@ -41,16 +41,16 @@ typedef enum { | |||
| 41 | IA_CSS_SP_SW_RUNNING | 41 | IA_CSS_SP_SW_RUNNING |
| 42 | } ia_css_spctrl_sp_sw_state; | 42 | } ia_css_spctrl_sp_sw_state; |
| 43 | 43 | ||
| 44 | /** Structure to encapsulate required arguments for | 44 | /* Structure to encapsulate required arguments for |
| 45 | * initialization of SP DMEM using the SP itself | 45 | * initialization of SP DMEM using the SP itself |
| 46 | */ | 46 | */ |
| 47 | struct ia_css_sp_init_dmem_cfg { | 47 | struct ia_css_sp_init_dmem_cfg { |
| 48 | ia_css_ptr ddr_data_addr; /**< data segment address in ddr */ | 48 | ia_css_ptr ddr_data_addr; /** data segment address in ddr */ |
| 49 | uint32_t dmem_data_addr; /**< data segment address in dmem */ | 49 | uint32_t dmem_data_addr; /** data segment address in dmem */ |
| 50 | uint32_t dmem_bss_addr; /**< bss segment address in dmem */ | 50 | uint32_t dmem_bss_addr; /** bss segment address in dmem */ |
| 51 | uint32_t data_size; /**< data segment size */ | 51 | uint32_t data_size; /** data segment size */ |
| 52 | uint32_t bss_size; /**< bss segment size */ | 52 | uint32_t bss_size; /** bss segment size */ |
| 53 | sp_ID_t sp_id; /** <sp Id */ | 53 | sp_ID_t sp_id; /* <sp Id */ |
| 54 | }; | 54 | }; |
| 55 | 55 | ||
| 56 | #define SIZE_OF_IA_CSS_SP_INIT_DMEM_CFG_STRUCT \ | 56 | #define SIZE_OF_IA_CSS_SP_INIT_DMEM_CFG_STRUCT \ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/spctrl/src/spctrl.c b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/spctrl/src/spctrl.c index 6d9bceb60196..844e4d536cec 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/spctrl/src/spctrl.c +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/spctrl/src/spctrl.c | |||
| @@ -13,7 +13,7 @@ | |||
| 13 | * more details. | 13 | * more details. |
| 14 | */ | 14 | */ |
| 15 | #else | 15 | #else |
| 16 | /** | 16 | /* |
| 17 | Support for Intel Camera Imaging ISP subsystem. | 17 | Support for Intel Camera Imaging ISP subsystem. |
| 18 | Copyright (c) 2010 - 2015, Intel Corporation. | 18 | Copyright (c) 2010 - 2015, Intel Corporation. |
| 19 | 19 | ||
| @@ -39,7 +39,7 @@ more details. | |||
| 39 | 39 | ||
| 40 | struct spctrl_context_info { | 40 | struct spctrl_context_info { |
| 41 | struct ia_css_sp_init_dmem_cfg dmem_config; | 41 | struct ia_css_sp_init_dmem_cfg dmem_config; |
| 42 | uint32_t spctrl_config_dmem_addr; /** location of dmem_cfg in SP dmem */ | 42 | uint32_t spctrl_config_dmem_addr; /* location of dmem_cfg in SP dmem */ |
| 43 | uint32_t spctrl_state_dmem_addr; | 43 | uint32_t spctrl_state_dmem_addr; |
| 44 | unsigned int sp_entry; /* entry function ptr on SP */ | 44 | unsigned int sp_entry; /* entry function ptr on SP */ |
| 45 | hrt_vaddress code_addr; /* sp firmware location in host mem-DDR*/ | 45 | hrt_vaddress code_addr; /* sp firmware location in host mem-DDR*/ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/timer/src/timer.c b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/timer/src/timer.c index 49c69e60ca5c..b7dd18492a91 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/timer/src/timer.c +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/timer/src/timer.c | |||
| @@ -13,7 +13,7 @@ | |||
| 13 | * more details. | 13 | * more details. |
| 14 | */ | 14 | */ |
| 15 | #else | 15 | #else |
| 16 | /** | 16 | /* |
| 17 | Support for Intel Camera Imaging ISP subsystem. | 17 | Support for Intel Camera Imaging ISP subsystem. |
| 18 | Copyright (c) 2010 - 2015, Intel Corporation. | 18 | Copyright (c) 2010 - 2015, Intel Corporation. |
| 19 | 19 | ||
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css.c b/drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css.c index f92b6a9f77eb..322bb3de6098 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css.c +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css.c | |||
| @@ -176,7 +176,7 @@ static struct sh_css_hmm_buffer_record hmm_buffer_record[MAX_HMM_BUFFER_NUM]; | |||
| 176 | 176 | ||
| 177 | static bool fw_explicitly_loaded = false; | 177 | static bool fw_explicitly_loaded = false; |
| 178 | 178 | ||
| 179 | /** | 179 | /* |
| 180 | * Local prototypes | 180 | * Local prototypes |
| 181 | */ | 181 | */ |
| 182 | 182 | ||
| @@ -187,7 +187,7 @@ static enum ia_css_err | |||
| 187 | sh_css_pipe_start(struct ia_css_stream *stream); | 187 | sh_css_pipe_start(struct ia_css_stream *stream); |
| 188 | 188 | ||
| 189 | #ifdef ISP2401 | 189 | #ifdef ISP2401 |
| 190 | /** | 190 | /* |
| 191 | * @brief Stop all "ia_css_pipe" instances in the target | 191 | * @brief Stop all "ia_css_pipe" instances in the target |
| 192 | * "ia_css_stream" instance. | 192 | * "ia_css_stream" instance. |
| 193 | * | 193 | * |
| @@ -207,7 +207,7 @@ sh_css_pipe_start(struct ia_css_stream *stream); | |||
| 207 | static enum ia_css_err | 207 | static enum ia_css_err |
| 208 | sh_css_pipes_stop(struct ia_css_stream *stream); | 208 | sh_css_pipes_stop(struct ia_css_stream *stream); |
| 209 | 209 | ||
| 210 | /** | 210 | /* |
| 211 | * @brief Check if all "ia_css_pipe" instances in the target | 211 | * @brief Check if all "ia_css_pipe" instances in the target |
| 212 | * "ia_css_stream" instance have stopped. | 212 | * "ia_css_stream" instance have stopped. |
| 213 | * | 213 | * |
| @@ -1649,7 +1649,7 @@ ia_css_init(const struct ia_css_env *env, | |||
| 1649 | void (*flush_func)(struct ia_css_acc_fw *fw); | 1649 | void (*flush_func)(struct ia_css_acc_fw *fw); |
| 1650 | hrt_data select, enable; | 1650 | hrt_data select, enable; |
| 1651 | 1651 | ||
| 1652 | /** | 1652 | /* |
| 1653 | * The C99 standard does not specify the exact object representation of structs; | 1653 | * The C99 standard does not specify the exact object representation of structs; |
| 1654 | * the representation is compiler dependent. | 1654 | * the representation is compiler dependent. |
| 1655 | * | 1655 | * |
| @@ -4617,23 +4617,23 @@ ia_css_pipe_dequeue_buffer(struct ia_css_pipe *pipe, | |||
| 4617 | * 4) "enum ia_css_event_type convert_event_sp_to_host_domain" (sh_css.c) | 4617 | * 4) "enum ia_css_event_type convert_event_sp_to_host_domain" (sh_css.c) |
| 4618 | */ | 4618 | */ |
| 4619 | static enum ia_css_event_type convert_event_sp_to_host_domain[] = { | 4619 | static enum ia_css_event_type convert_event_sp_to_host_domain[] = { |
| 4620 | IA_CSS_EVENT_TYPE_OUTPUT_FRAME_DONE, /**< Output frame ready. */ | 4620 | IA_CSS_EVENT_TYPE_OUTPUT_FRAME_DONE, /** Output frame ready. */ |
| 4621 | IA_CSS_EVENT_TYPE_SECOND_OUTPUT_FRAME_DONE, /**< Second output frame ready. */ | 4621 | IA_CSS_EVENT_TYPE_SECOND_OUTPUT_FRAME_DONE, /** Second output frame ready. */ |
| 4622 | IA_CSS_EVENT_TYPE_VF_OUTPUT_FRAME_DONE, /**< Viewfinder Output frame ready. */ | 4622 | IA_CSS_EVENT_TYPE_VF_OUTPUT_FRAME_DONE, /** Viewfinder Output frame ready. */ |
| 4623 | IA_CSS_EVENT_TYPE_SECOND_VF_OUTPUT_FRAME_DONE, /**< Second viewfinder Output frame ready. */ | 4623 | IA_CSS_EVENT_TYPE_SECOND_VF_OUTPUT_FRAME_DONE, /** Second viewfinder Output frame ready. */ |
| 4624 | IA_CSS_EVENT_TYPE_3A_STATISTICS_DONE, /**< Indication that 3A statistics are available. */ | 4624 | IA_CSS_EVENT_TYPE_3A_STATISTICS_DONE, /** Indication that 3A statistics are available. */ |
| 4625 | IA_CSS_EVENT_TYPE_DIS_STATISTICS_DONE, /**< Indication that DIS statistics are available. */ | 4625 | IA_CSS_EVENT_TYPE_DIS_STATISTICS_DONE, /** Indication that DIS statistics are available. */ |
| 4626 | IA_CSS_EVENT_TYPE_PIPELINE_DONE, /**< Pipeline Done event, sent after last pipeline stage. */ | 4626 | IA_CSS_EVENT_TYPE_PIPELINE_DONE, /** Pipeline Done event, sent after last pipeline stage. */ |
| 4627 | IA_CSS_EVENT_TYPE_FRAME_TAGGED, /**< Frame tagged. */ | 4627 | IA_CSS_EVENT_TYPE_FRAME_TAGGED, /** Frame tagged. */ |
| 4628 | IA_CSS_EVENT_TYPE_INPUT_FRAME_DONE, /**< Input frame ready. */ | 4628 | IA_CSS_EVENT_TYPE_INPUT_FRAME_DONE, /** Input frame ready. */ |
| 4629 | IA_CSS_EVENT_TYPE_METADATA_DONE, /**< Metadata ready. */ | 4629 | IA_CSS_EVENT_TYPE_METADATA_DONE, /** Metadata ready. */ |
| 4630 | IA_CSS_EVENT_TYPE_LACE_STATISTICS_DONE, /**< Indication that LACE statistics are available. */ | 4630 | IA_CSS_EVENT_TYPE_LACE_STATISTICS_DONE, /** Indication that LACE statistics are available. */ |
| 4631 | IA_CSS_EVENT_TYPE_ACC_STAGE_COMPLETE, /**< Extension stage executed. */ | 4631 | IA_CSS_EVENT_TYPE_ACC_STAGE_COMPLETE, /** Extension stage executed. */ |
| 4632 | IA_CSS_EVENT_TYPE_TIMER, /**< Timing measurement data. */ | 4632 | IA_CSS_EVENT_TYPE_TIMER, /** Timing measurement data. */ |
| 4633 | IA_CSS_EVENT_TYPE_PORT_EOF, /**< End Of Frame event, sent when in buffered sensor mode. */ | 4633 | IA_CSS_EVENT_TYPE_PORT_EOF, /** End Of Frame event, sent when in buffered sensor mode. */ |
| 4634 | IA_CSS_EVENT_TYPE_FW_WARNING, /**< Performance warning encountered by FW */ | 4634 | IA_CSS_EVENT_TYPE_FW_WARNING, /** Performance warning encountered by FW */ |
| 4635 | IA_CSS_EVENT_TYPE_FW_ASSERT, /**< Assertion hit by FW */ | 4635 | IA_CSS_EVENT_TYPE_FW_ASSERT, /** Assertion hit by FW */ |
| 4636 | 0, /** error if sp passes SH_CSS_SP_EVENT_NR_OF_TYPES as a valid event. */ | 4636 | 0, /* error if sp passes SH_CSS_SP_EVENT_NR_OF_TYPES as a valid event. */ |
| 4637 | }; | 4637 | }; |
| 4638 | 4638 | ||
| 4639 | enum ia_css_err | 4639 | enum ia_css_err |
| @@ -5028,7 +5028,7 @@ sh_css_enable_cont_capt(bool enable, bool stop_copy_preview) | |||
| 5028 | bool | 5028 | bool |
| 5029 | sh_css_continuous_is_enabled(uint8_t pipe_num) | 5029 | sh_css_continuous_is_enabled(uint8_t pipe_num) |
| 5030 | #else | 5030 | #else |
| 5031 | /** | 5031 | /* |
| 5032 | * @brief Stop all "ia_css_pipe" instances in the target | 5032 | * @brief Stop all "ia_css_pipe" instances in the target |
| 5033 | * "ia_css_stream" instance. | 5033 | * "ia_css_stream" instance. |
| 5034 | * | 5034 | * |
| @@ -5107,7 +5107,7 @@ ia_css_stream_set_buffer_depth(struct ia_css_stream *stream, int buffer_depth) | |||
| 5107 | return IA_CSS_SUCCESS; | 5107 | return IA_CSS_SUCCESS; |
| 5108 | } | 5108 | } |
| 5109 | #else | 5109 | #else |
| 5110 | /** | 5110 | /* |
| 5111 | * Stop all "ia_css_pipe" instances in this target | 5111 | * Stop all "ia_css_pipe" instances in this target |
| 5112 | * "ia_css_stream" instance. | 5112 | * "ia_css_stream" instance. |
| 5113 | */ | 5113 | */ |
| @@ -5146,7 +5146,7 @@ ia_css_stream_get_buffer_depth(struct ia_css_stream *stream, int *buffer_depth) | |||
| 5146 | } | 5146 | } |
| 5147 | } | 5147 | } |
| 5148 | 5148 | ||
| 5149 | /** | 5149 | /* |
| 5150 | * In the CSS firmware use scenario "Continuous Preview" | 5150 | * In the CSS firmware use scenario "Continuous Preview" |
| 5151 | * as well as "Continuous Video", the "ia_css_pipe" instance | 5151 | * as well as "Continuous Video", the "ia_css_pipe" instance |
| 5152 | * "Copy Pipe" is activated. This "Copy Pipe" is private to | 5152 | * "Copy Pipe" is activated. This "Copy Pipe" is private to |
| @@ -5183,7 +5183,7 @@ ERR: | |||
| 5183 | return err; | 5183 | return err; |
| 5184 | } | 5184 | } |
| 5185 | 5185 | ||
| 5186 | /** | 5186 | /* |
| 5187 | * @brief Check if all "ia_css_pipe" instances in the target | 5187 | * @brief Check if all "ia_css_pipe" instances in the target |
| 5188 | * "ia_css_stream" instance have stopped. | 5188 | * "ia_css_stream" instance have stopped. |
| 5189 | * | 5189 | * |
| @@ -5218,7 +5218,7 @@ sh_css_pipes_have_stopped(struct ia_css_stream *stream) | |||
| 5218 | main_pipe_id = main_pipe->mode; | 5218 | main_pipe_id = main_pipe->mode; |
| 5219 | IA_CSS_ENTER_PRIVATE("main_pipe_id=%d", main_pipe_id); | 5219 | IA_CSS_ENTER_PRIVATE("main_pipe_id=%d", main_pipe_id); |
| 5220 | 5220 | ||
| 5221 | /** | 5221 | /* |
| 5222 | * Check if every "ia_css_pipe" instance in this target | 5222 | * Check if every "ia_css_pipe" instance in this target |
| 5223 | * "ia_css_stream" instance has stopped. | 5223 | * "ia_css_stream" instance has stopped. |
| 5224 | */ | 5224 | */ |
| @@ -5229,7 +5229,7 @@ sh_css_pipes_have_stopped(struct ia_css_stream *stream) | |||
| 5229 | rval); | 5229 | rval); |
| 5230 | } | 5230 | } |
| 5231 | 5231 | ||
| 5232 | /** | 5232 | /* |
| 5233 | * In the CSS firmware use scenario "Continuous Preview" | 5233 | * In the CSS firmware use scenario "Continuous Preview" |
| 5234 | * as well as "Continuous Video", the "ia_css_pipe" instance | 5234 | * as well as "Continuous Video", the "ia_css_pipe" instance |
| 5235 | * "Copy Pipe" is activated. This "Copy Pipe" is private to | 5235 | * "Copy Pipe" is activated. This "Copy Pipe" is private to |
| @@ -5474,7 +5474,7 @@ ERR: | |||
| 5474 | } | 5474 | } |
| 5475 | 5475 | ||
| 5476 | #ifdef ISP2401 | 5476 | #ifdef ISP2401 |
| 5477 | /** | 5477 | /* |
| 5478 | * @brief Check if a format is supported by the pipe. | 5478 | * @brief Check if a format is supported by the pipe. |
| 5479 | * | 5479 | * |
| 5480 | */ | 5480 | */ |
| @@ -8626,7 +8626,7 @@ sh_css_pipeline_add_acc_stage(struct ia_css_pipeline *pipeline, | |||
| 8626 | return err; | 8626 | return err; |
| 8627 | } | 8627 | } |
| 8628 | 8628 | ||
| 8629 | /** | 8629 | /* |
| 8630 | * @brief Tag a specific frame in continuous capture. | 8630 | * @brief Tag a specific frame in continuous capture. |
| 8631 | * Refer to "sh_css_internal.h" for details. | 8631 | * Refer to "sh_css_internal.h" for details. |
| 8632 | */ | 8632 | */ |
| @@ -8666,7 +8666,7 @@ enum ia_css_err ia_css_stream_capture_frame(struct ia_css_stream *stream, | |||
| 8666 | return err; | 8666 | return err; |
| 8667 | } | 8667 | } |
| 8668 | 8668 | ||
| 8669 | /** | 8669 | /* |
| 8670 | * @brief Configure the continuous capture. | 8670 | * @brief Configure the continuous capture. |
| 8671 | * Refer to "sh_css_internal.h" for details. | 8671 | * Refer to "sh_css_internal.h" for details. |
| 8672 | */ | 8672 | */ |
| @@ -8822,7 +8822,7 @@ sh_css_init_host_sp_control_vars(void) | |||
| 8822 | "sh_css_init_host_sp_control_vars() leave: return_void\n"); | 8822 | "sh_css_init_host_sp_control_vars() leave: return_void\n"); |
| 8823 | } | 8823 | } |
| 8824 | 8824 | ||
| 8825 | /** | 8825 | /* |
| 8826 | * create the internal structures and fill in the configuration data | 8826 | * create the internal structures and fill in the configuration data |
| 8827 | */ | 8827 | */ |
| 8828 | void ia_css_pipe_config_defaults(struct ia_css_pipe_config *pipe_config) | 8828 | void ia_css_pipe_config_defaults(struct ia_css_pipe_config *pipe_config) |
| @@ -10435,7 +10435,7 @@ ia_css_start_sp(void) | |||
| 10435 | return err; | 10435 | return err; |
| 10436 | } | 10436 | } |
| 10437 | 10437 | ||
| 10438 | /** | 10438 | /* |
| 10439 | * Time to wait SP for termincate. Only condition when this can happen | 10439 | * Time to wait SP for termincate. Only condition when this can happen |
| 10440 | * is a fatal hw failure, but we must be able to detect this and emit | 10440 | * is a fatal hw failure, but we must be able to detect this and emit |
| 10441 | * a proper error trace. | 10441 | * a proper error trace. |
| @@ -10713,7 +10713,7 @@ ia_css_unlock_raw_frame(struct ia_css_stream *stream, uint32_t exp_id) | |||
| 10713 | return ret; | 10713 | return ret; |
| 10714 | } | 10714 | } |
| 10715 | 10715 | ||
| 10716 | /** @brief Set the state (Enable or Disable) of the Extension stage in the | 10716 | /* @brief Set the state (Enable or Disable) of the Extension stage in the |
| 10717 | * given pipe. | 10717 | * given pipe. |
| 10718 | */ | 10718 | */ |
| 10719 | enum ia_css_err | 10719 | enum ia_css_err |
| @@ -10758,7 +10758,7 @@ ia_css_pipe_set_qos_ext_state(struct ia_css_pipe *pipe, uint32_t fw_handle, bool | |||
| 10758 | return err; | 10758 | return err; |
| 10759 | } | 10759 | } |
| 10760 | 10760 | ||
| 10761 | /** @brief Get the state (Enable or Disable) of the Extension stage in the | 10761 | /* @brief Get the state (Enable or Disable) of the Extension stage in the |
| 10762 | * given pipe. | 10762 | * given pipe. |
| 10763 | */ | 10763 | */ |
| 10764 | enum ia_css_err | 10764 | enum ia_css_err |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css_internal.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css_internal.h index 0910021286a4..161122e1bcbc 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css_internal.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css_internal.h | |||
| @@ -188,7 +188,7 @@ enum host2sp_commands { | |||
| 188 | N_host2sp_cmd | 188 | N_host2sp_cmd |
| 189 | }; | 189 | }; |
| 190 | 190 | ||
| 191 | /** Enumeration used to indicate the events that are produced by | 191 | /* Enumeration used to indicate the events that are produced by |
| 192 | * the SP and consumed by the Host. | 192 | * the SP and consumed by the Host. |
| 193 | * | 193 | * |
| 194 | * !!!IMPORTANT!!! KEEP THE FOLLOWING IN SYNC: | 194 | * !!!IMPORTANT!!! KEEP THE FOLLOWING IN SYNC: |
| @@ -274,10 +274,10 @@ struct sh_css_ddr_address_map_compound { | |||
| 274 | }; | 274 | }; |
| 275 | 275 | ||
| 276 | struct ia_css_isp_parameter_set_info { | 276 | struct ia_css_isp_parameter_set_info { |
| 277 | struct sh_css_ddr_address_map mem_map;/**< pointers to Parameters in ISP format IMPT: | 277 | struct sh_css_ddr_address_map mem_map;/** pointers to Parameters in ISP format IMPT: |
| 278 | This should be first member of this struct */ | 278 | This should be first member of this struct */ |
| 279 | uint32_t isp_parameters_id;/**< Unique ID to track which config was actually applied to a particular frame */ | 279 | uint32_t isp_parameters_id;/** Unique ID to track which config was actually applied to a particular frame */ |
| 280 | ia_css_ptr output_frame_ptr;/**< Output frame to which this config has to be applied (optional) */ | 280 | ia_css_ptr output_frame_ptr;/** Output frame to which this config has to be applied (optional) */ |
| 281 | }; | 281 | }; |
| 282 | 282 | ||
| 283 | /* this struct contains all arguments that can be passed to | 283 | /* this struct contains all arguments that can be passed to |
| @@ -398,9 +398,9 @@ struct sh_css_sp_input_formatter_set { | |||
| 398 | /* SP configuration information */ | 398 | /* SP configuration information */ |
| 399 | struct sh_css_sp_config { | 399 | struct sh_css_sp_config { |
| 400 | uint8_t no_isp_sync; /* Signal host immediately after start */ | 400 | uint8_t no_isp_sync; /* Signal host immediately after start */ |
| 401 | uint8_t enable_raw_pool_locking; /**< Enable Raw Buffer Locking for HALv3 Support */ | 401 | uint8_t enable_raw_pool_locking; /** Enable Raw Buffer Locking for HALv3 Support */ |
| 402 | uint8_t lock_all; | 402 | uint8_t lock_all; |
| 403 | /**< If raw buffer locking is enabled, this flag indicates whether raw | 403 | /** If raw buffer locking is enabled, this flag indicates whether raw |
| 404 | frames are locked when their EOF event is successfully sent to the | 404 | frames are locked when their EOF event is successfully sent to the |
| 405 | host (true) or when they are passed to the preview/video pipe | 405 | host (true) or when they are passed to the preview/video pipe |
| 406 | (false). */ | 406 | (false). */ |
| @@ -458,13 +458,13 @@ struct sh_css_sp_pipeline_io { | |||
| 458 | /*struct sh_css_sp_pipeline_terminal output;*/ | 458 | /*struct sh_css_sp_pipeline_terminal output;*/ |
| 459 | }; | 459 | }; |
| 460 | 460 | ||
| 461 | /** This struct tracks how many streams are registered per CSI port. | 461 | /* This struct tracks how many streams are registered per CSI port. |
| 462 | * This is used to track which streams have already been configured. | 462 | * This is used to track which streams have already been configured. |
| 463 | * Only when all streams are configured, the CSI RX is started for that port. | 463 | * Only when all streams are configured, the CSI RX is started for that port. |
| 464 | */ | 464 | */ |
| 465 | struct sh_css_sp_pipeline_io_status { | 465 | struct sh_css_sp_pipeline_io_status { |
| 466 | uint32_t active[N_INPUT_SYSTEM_CSI_PORT]; /**< registered streams */ | 466 | uint32_t active[N_INPUT_SYSTEM_CSI_PORT]; /** registered streams */ |
| 467 | uint32_t running[N_INPUT_SYSTEM_CSI_PORT]; /**< configured streams */ | 467 | uint32_t running[N_INPUT_SYSTEM_CSI_PORT]; /** configured streams */ |
| 468 | }; | 468 | }; |
| 469 | 469 | ||
| 470 | #endif | 470 | #endif |
| @@ -500,7 +500,7 @@ enum sh_css_port_type { | |||
| 500 | #define SH_CSS_METADATA_OFFLINE_MODE 0x04 | 500 | #define SH_CSS_METADATA_OFFLINE_MODE 0x04 |
| 501 | #define SH_CSS_METADATA_WAIT_INPUT 0x08 | 501 | #define SH_CSS_METADATA_WAIT_INPUT 0x08 |
| 502 | 502 | ||
| 503 | /** @brief Free an array of metadata buffers. | 503 | /* @brief Free an array of metadata buffers. |
| 504 | * | 504 | * |
| 505 | * @param[in] num_bufs Number of metadata buffers to be freed. | 505 | * @param[in] num_bufs Number of metadata buffers to be freed. |
| 506 | * @param[in] bufs Pointer of array of metadata buffers. | 506 | * @param[in] bufs Pointer of array of metadata buffers. |
| @@ -764,7 +764,7 @@ struct sh_css_hmm_buffer { | |||
| 764 | hrt_vaddress frame_data; | 764 | hrt_vaddress frame_data; |
| 765 | uint32_t flashed; | 765 | uint32_t flashed; |
| 766 | uint32_t exp_id; | 766 | uint32_t exp_id; |
| 767 | uint32_t isp_parameters_id; /**< Unique ID to track which config was | 767 | uint32_t isp_parameters_id; /** Unique ID to track which config was |
| 768 | actually applied to a particular frame */ | 768 | actually applied to a particular frame */ |
| 769 | #if CONFIG_ON_FRAME_ENQUEUE() | 769 | #if CONFIG_ON_FRAME_ENQUEUE() |
| 770 | struct sh_css_config_on_frame_enqueue config_on_frame_enqueue; | 770 | struct sh_css_config_on_frame_enqueue config_on_frame_enqueue; |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css_legacy.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css_legacy.h index e12789236bb9..4bcc35d219f8 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css_legacy.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css_legacy.h | |||
| @@ -22,7 +22,7 @@ | |||
| 22 | #include <ia_css_pipe_public.h> | 22 | #include <ia_css_pipe_public.h> |
| 23 | #include <ia_css_stream_public.h> | 23 | #include <ia_css_stream_public.h> |
| 24 | 24 | ||
| 25 | /** The pipe id type, distinguishes the kind of pipes that | 25 | /* The pipe id type, distinguishes the kind of pipes that |
| 26 | * can be run in parallel. | 26 | * can be run in parallel. |
| 27 | */ | 27 | */ |
| 28 | enum ia_css_pipe_id { | 28 | enum ia_css_pipe_id { |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css_mipi.c b/drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css_mipi.c index 36aaa3019a15..883474e90c81 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css_mipi.c +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css_mipi.c | |||
| @@ -321,7 +321,7 @@ calculate_mipi_buff_size( | |||
| 321 | height = stream_cfg->input_config.input_res.height; | 321 | height = stream_cfg->input_config.input_res.height; |
| 322 | format = stream_cfg->input_config.format; | 322 | format = stream_cfg->input_config.format; |
| 323 | pack_raw_pixels = stream_cfg->pack_raw_pixels; | 323 | pack_raw_pixels = stream_cfg->pack_raw_pixels; |
| 324 | /** end of NOTE */ | 324 | /* end of NOTE */ |
| 325 | 325 | ||
| 326 | /** | 326 | /** |
| 327 | #ifndef ISP2401 | 327 | #ifndef ISP2401 |
| @@ -341,7 +341,7 @@ calculate_mipi_buff_size( | |||
| 341 | * in the non-continuous use scenario. | 341 | * in the non-continuous use scenario. |
| 342 | */ | 342 | */ |
| 343 | width_padded = width + (2 * ISP_VEC_NELEMS); | 343 | width_padded = width + (2 * ISP_VEC_NELEMS); |
| 344 | /** end of NOTE */ | 344 | /* end of NOTE */ |
| 345 | 345 | ||
| 346 | IA_CSS_ENTER("padded_width=%d, height=%d, format=%d\n", | 346 | IA_CSS_ENTER("padded_width=%d, height=%d, format=%d\n", |
| 347 | width_padded, height, format); | 347 | width_padded, height, format); |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css_params.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css_params.h index a7ffe6d8331b..270ec2b60a3e 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css_params.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css_params.h | |||
| @@ -144,8 +144,8 @@ struct ia_css_isp_parameters { | |||
| 144 | struct sh_css_ddr_address_map_size pipe_ddr_ptrs_size[IA_CSS_PIPE_ID_NUM]; | 144 | struct sh_css_ddr_address_map_size pipe_ddr_ptrs_size[IA_CSS_PIPE_ID_NUM]; |
| 145 | struct sh_css_ddr_address_map ddr_ptrs; | 145 | struct sh_css_ddr_address_map ddr_ptrs; |
| 146 | struct sh_css_ddr_address_map_size ddr_ptrs_size; | 146 | struct sh_css_ddr_address_map_size ddr_ptrs_size; |
| 147 | struct ia_css_frame *output_frame; /**< Output frame the config is to be applied to (optional) */ | 147 | struct ia_css_frame *output_frame; /** Output frame the config is to be applied to (optional) */ |
| 148 | uint32_t isp_parameters_id; /**< Unique ID to track which config was actually applied to a particular frame */ | 148 | uint32_t isp_parameters_id; /** Unique ID to track which config was actually applied to a particular frame */ |
| 149 | }; | 149 | }; |
| 150 | 150 | ||
| 151 | void | 151 | void |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css_sp.c b/drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css_sp.c index e6a345979ff1..6fc00fc402b1 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css_sp.c +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css_sp.c | |||
| @@ -261,7 +261,7 @@ sh_css_sp_start_raw_copy(struct ia_css_frame *out_frame, | |||
| 261 | assert(out_frame != NULL); | 261 | assert(out_frame != NULL); |
| 262 | 262 | ||
| 263 | { | 263 | { |
| 264 | /** | 264 | /* |
| 265 | * Clear sh_css_sp_stage for easy debugging. | 265 | * Clear sh_css_sp_stage for easy debugging. |
| 266 | * program_input_circuit must be saved as it is set outside | 266 | * program_input_circuit must be saved as it is set outside |
| 267 | * this function. | 267 | * this function. |
| @@ -335,7 +335,7 @@ sh_css_sp_start_isys_copy(struct ia_css_frame *out_frame, | |||
| 335 | assert(out_frame != NULL); | 335 | assert(out_frame != NULL); |
| 336 | 336 | ||
| 337 | { | 337 | { |
| 338 | /** | 338 | /* |
| 339 | * Clear sh_css_sp_stage for easy debugging. | 339 | * Clear sh_css_sp_stage for easy debugging. |
| 340 | * program_input_circuit must be saved as it is set outside | 340 | * program_input_circuit must be saved as it is set outside |
| 341 | * this function. | 341 | * this function. |
| @@ -909,7 +909,7 @@ sh_css_sp_init_stage(struct ia_css_binary *binary, | |||
| 909 | xinfo = binary->info; | 909 | xinfo = binary->info; |
| 910 | info = &xinfo->sp; | 910 | info = &xinfo->sp; |
| 911 | { | 911 | { |
| 912 | /** | 912 | /* |
| 913 | * Clear sh_css_sp_stage for easy debugging. | 913 | * Clear sh_css_sp_stage for easy debugging. |
| 914 | * program_input_circuit must be saved as it is set outside | 914 | * program_input_circuit must be saved as it is set outside |
| 915 | * this function. | 915 | * this function. |
| @@ -980,7 +980,7 @@ sh_css_sp_init_stage(struct ia_css_binary *binary, | |||
| 980 | sh_css_isp_stage.binary_name[SH_CSS_MAX_BINARY_NAME - 1] = 0; | 980 | sh_css_isp_stage.binary_name[SH_CSS_MAX_BINARY_NAME - 1] = 0; |
| 981 | sh_css_isp_stage.mem_initializers = *isp_mem_if; | 981 | sh_css_isp_stage.mem_initializers = *isp_mem_if; |
| 982 | 982 | ||
| 983 | /** | 983 | /* |
| 984 | * Even when a stage does not need uds and does not params, | 984 | * Even when a stage does not need uds and does not params, |
| 985 | * ia_css_uds_sp_scale_params() seems to be called (needs | 985 | * ia_css_uds_sp_scale_params() seems to be called (needs |
| 986 | * further investigation). This function can not deal with | 986 | * further investigation). This function can not deal with |
| @@ -1429,7 +1429,7 @@ sh_css_init_host2sp_frame_data(void) | |||
| 1429 | } | 1429 | } |
| 1430 | 1430 | ||
| 1431 | 1431 | ||
| 1432 | /** | 1432 | /* |
| 1433 | * @brief Update the offline frame information in host_sp_communication. | 1433 | * @brief Update the offline frame information in host_sp_communication. |
| 1434 | * Refer to "sh_css_sp.h" for more details. | 1434 | * Refer to "sh_css_sp.h" for more details. |
| 1435 | */ | 1435 | */ |
| @@ -1461,7 +1461,7 @@ sh_css_update_host2sp_offline_frame( | |||
| 1461 | } | 1461 | } |
| 1462 | 1462 | ||
| 1463 | #if defined(USE_INPUT_SYSTEM_VERSION_2) || defined(USE_INPUT_SYSTEM_VERSION_2401) | 1463 | #if defined(USE_INPUT_SYSTEM_VERSION_2) || defined(USE_INPUT_SYSTEM_VERSION_2401) |
| 1464 | /** | 1464 | /* |
| 1465 | * @brief Update the mipi frame information in host_sp_communication. | 1465 | * @brief Update the mipi frame information in host_sp_communication. |
| 1466 | * Refer to "sh_css_sp.h" for more details. | 1466 | * Refer to "sh_css_sp.h" for more details. |
| 1467 | */ | 1467 | */ |
| @@ -1488,7 +1488,7 @@ sh_css_update_host2sp_mipi_frame( | |||
| 1488 | frame ? frame->data : 0); | 1488 | frame ? frame->data : 0); |
| 1489 | } | 1489 | } |
| 1490 | 1490 | ||
| 1491 | /** | 1491 | /* |
| 1492 | * @brief Update the mipi metadata information in host_sp_communication. | 1492 | * @brief Update the mipi metadata information in host_sp_communication. |
| 1493 | * Refer to "sh_css_sp.h" for more details. | 1493 | * Refer to "sh_css_sp.h" for more details. |
| 1494 | */ | 1494 | */ |
| @@ -1735,7 +1735,7 @@ ia_css_isp_has_started(void) | |||
| 1735 | } | 1735 | } |
| 1736 | 1736 | ||
| 1737 | 1737 | ||
| 1738 | /** | 1738 | /* |
| 1739 | * @brief Initialize the DMA software-mask in the debug mode. | 1739 | * @brief Initialize the DMA software-mask in the debug mode. |
| 1740 | * Refer to "sh_css_sp.h" for more details. | 1740 | * Refer to "sh_css_sp.h" for more details. |
| 1741 | */ | 1741 | */ |
| @@ -1761,7 +1761,7 @@ sh_css_sp_init_dma_sw_reg(int dma_id) | |||
| 1761 | return true; | 1761 | return true; |
| 1762 | } | 1762 | } |
| 1763 | 1763 | ||
| 1764 | /** | 1764 | /* |
| 1765 | * @brief Set the DMA software-mask in the debug mode. | 1765 | * @brief Set the DMA software-mask in the debug mode. |
| 1766 | * Refer to "sh_css_sp.h" for more details. | 1766 | * Refer to "sh_css_sp.h" for more details. |
| 1767 | */ | 1767 | */ |
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css_struct.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css_struct.h index e49e478ab354..0b8e3d872069 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css_struct.h +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css_struct.h | |||
| @@ -61,7 +61,7 @@ struct sh_css { | |||
| 61 | #endif | 61 | #endif |
| 62 | hrt_vaddress sp_bin_addr; | 62 | hrt_vaddress sp_bin_addr; |
| 63 | hrt_data page_table_base_index; | 63 | hrt_data page_table_base_index; |
| 64 | unsigned int size_mem_words; /** \deprecated{Use ia_css_mipi_buffer_config instead.}*/ | 64 | unsigned int size_mem_words; /* \deprecated{Use ia_css_mipi_buffer_config instead.}*/ |
| 65 | enum ia_css_irq_type irq_type; | 65 | enum ia_css_irq_type irq_type; |
| 66 | unsigned int pipe_counter; | 66 | unsigned int pipe_counter; |
| 67 | 67 | ||
diff --git a/drivers/staging/octeon-usb/octeon-hcd.c b/drivers/staging/octeon-usb/octeon-hcd.c index 068aece25d37..cded30f145aa 100644 --- a/drivers/staging/octeon-usb/octeon-hcd.c +++ b/drivers/staging/octeon-usb/octeon-hcd.c | |||
| @@ -394,7 +394,7 @@ struct octeon_hcd { | |||
| 394 | result = -1; \ | 394 | result = -1; \ |
| 395 | break; \ | 395 | break; \ |
| 396 | } else \ | 396 | } else \ |
| 397 | cvmx_wait(100); \ | 397 | __delay(100); \ |
| 398 | } \ | 398 | } \ |
| 399 | } while (0); \ | 399 | } while (0); \ |
| 400 | result; }) | 400 | result; }) |
| @@ -774,7 +774,7 @@ retry: | |||
| 774 | usbn_clk_ctl.s.hclk_rst = 1; | 774 | usbn_clk_ctl.s.hclk_rst = 1; |
| 775 | cvmx_write64_uint64(CVMX_USBNX_CLK_CTL(usb->index), usbn_clk_ctl.u64); | 775 | cvmx_write64_uint64(CVMX_USBNX_CLK_CTL(usb->index), usbn_clk_ctl.u64); |
| 776 | /* 2e. Wait 64 core-clock cycles for HCLK to stabilize */ | 776 | /* 2e. Wait 64 core-clock cycles for HCLK to stabilize */ |
| 777 | cvmx_wait(64); | 777 | __delay(64); |
| 778 | /* | 778 | /* |
| 779 | * 3. Program the power-on reset field in the USBN clock-control | 779 | * 3. Program the power-on reset field in the USBN clock-control |
| 780 | * register: | 780 | * register: |
| @@ -795,7 +795,7 @@ retry: | |||
| 795 | cvmx_write64_uint64(CVMX_USBNX_USBP_CTL_STATUS(usb->index), | 795 | cvmx_write64_uint64(CVMX_USBNX_USBP_CTL_STATUS(usb->index), |
| 796 | usbn_usbp_ctl_status.u64); | 796 | usbn_usbp_ctl_status.u64); |
| 797 | /* 6. Wait 10 cycles */ | 797 | /* 6. Wait 10 cycles */ |
| 798 | cvmx_wait(10); | 798 | __delay(10); |
| 799 | /* | 799 | /* |
| 800 | * 7. Clear ATE_RESET field in the USBN clock-control register: | 800 | * 7. Clear ATE_RESET field in the USBN clock-control register: |
| 801 | * USBN_USBP_CTL_STATUS[ATE_RESET] = 0 | 801 | * USBN_USBP_CTL_STATUS[ATE_RESET] = 0 |
diff --git a/drivers/staging/pi433/rf69.c b/drivers/staging/pi433/rf69.c index e69a2153c999..12c9df9cddde 100644 --- a/drivers/staging/pi433/rf69.c +++ b/drivers/staging/pi433/rf69.c | |||
| @@ -102,7 +102,7 @@ enum modulation rf69_get_modulation(struct spi_device *spi) | |||
| 102 | 102 | ||
| 103 | currentValue = READ_REG(REG_DATAMODUL); | 103 | currentValue = READ_REG(REG_DATAMODUL); |
| 104 | 104 | ||
| 105 | switch (currentValue & MASK_DATAMODUL_MODULATION_TYPE >> 3) { // TODO improvement: change 3 to define | 105 | switch (currentValue & MASK_DATAMODUL_MODULATION_TYPE) { |
| 106 | case DATAMODUL_MODULATION_TYPE_OOK: return OOK; | 106 | case DATAMODUL_MODULATION_TYPE_OOK: return OOK; |
| 107 | case DATAMODUL_MODULATION_TYPE_FSK: return FSK; | 107 | case DATAMODUL_MODULATION_TYPE_FSK: return FSK; |
| 108 | default: return undefined; | 108 | default: return undefined; |
diff --git a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c index c0664dc80bf2..446310775e90 100644 --- a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c | |||
| @@ -1395,19 +1395,13 @@ static int rtw_wx_get_essid(struct net_device *dev, | |||
| 1395 | if ((check_fwstate(pmlmepriv, _FW_LINKED)) || | 1395 | if ((check_fwstate(pmlmepriv, _FW_LINKED)) || |
| 1396 | (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE))) { | 1396 | (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE))) { |
| 1397 | len = pcur_bss->Ssid.SsidLength; | 1397 | len = pcur_bss->Ssid.SsidLength; |
| 1398 | |||
| 1399 | wrqu->essid.length = len; | ||
| 1400 | |||
| 1401 | memcpy(extra, pcur_bss->Ssid.Ssid, len); | 1398 | memcpy(extra, pcur_bss->Ssid.Ssid, len); |
| 1402 | |||
| 1403 | wrqu->essid.flags = 1; | ||
| 1404 | } else { | 1399 | } else { |
| 1405 | ret = -1; | 1400 | len = 0; |
| 1406 | goto exit; | 1401 | *extra = 0; |
| 1407 | } | 1402 | } |
| 1408 | 1403 | wrqu->essid.length = len; | |
| 1409 | exit: | 1404 | wrqu->essid.flags = 1; |
| 1410 | |||
| 1411 | 1405 | ||
| 1412 | return ret; | 1406 | return ret; |
| 1413 | } | 1407 | } |
diff --git a/drivers/tee/optee/core.c b/drivers/tee/optee/core.c index 7952357df9c8..edb6e4e9ef3a 100644 --- a/drivers/tee/optee/core.c +++ b/drivers/tee/optee/core.c | |||
| @@ -590,7 +590,6 @@ static int __init optee_driver_init(void) | |||
| 590 | return -ENODEV; | 590 | return -ENODEV; |
| 591 | 591 | ||
| 592 | np = of_find_matching_node(fw_np, optee_match); | 592 | np = of_find_matching_node(fw_np, optee_match); |
| 593 | of_node_put(fw_np); | ||
| 594 | if (!np) | 593 | if (!np) |
| 595 | return -ENODEV; | 594 | return -ENODEV; |
| 596 | 595 | ||
diff --git a/drivers/tty/serdev/serdev-ttyport.c b/drivers/tty/serdev/serdev-ttyport.c index ce7ad0acee7a..247788a16f0b 100644 --- a/drivers/tty/serdev/serdev-ttyport.c +++ b/drivers/tty/serdev/serdev-ttyport.c | |||
| @@ -27,23 +27,41 @@ static int ttyport_receive_buf(struct tty_port *port, const unsigned char *cp, | |||
| 27 | { | 27 | { |
| 28 | struct serdev_controller *ctrl = port->client_data; | 28 | struct serdev_controller *ctrl = port->client_data; |
| 29 | struct serport *serport = serdev_controller_get_drvdata(ctrl); | 29 | struct serport *serport = serdev_controller_get_drvdata(ctrl); |
| 30 | int ret; | ||
| 30 | 31 | ||
| 31 | if (!test_bit(SERPORT_ACTIVE, &serport->flags)) | 32 | if (!test_bit(SERPORT_ACTIVE, &serport->flags)) |
| 32 | return 0; | 33 | return 0; |
| 33 | 34 | ||
| 34 | return serdev_controller_receive_buf(ctrl, cp, count); | 35 | ret = serdev_controller_receive_buf(ctrl, cp, count); |
| 36 | |||
| 37 | dev_WARN_ONCE(&ctrl->dev, ret < 0 || ret > count, | ||
| 38 | "receive_buf returns %d (count = %zu)\n", | ||
| 39 | ret, count); | ||
| 40 | if (ret < 0) | ||
| 41 | return 0; | ||
| 42 | else if (ret > count) | ||
| 43 | return count; | ||
| 44 | |||
| 45 | return ret; | ||
| 35 | } | 46 | } |
| 36 | 47 | ||
| 37 | static void ttyport_write_wakeup(struct tty_port *port) | 48 | static void ttyport_write_wakeup(struct tty_port *port) |
| 38 | { | 49 | { |
| 39 | struct serdev_controller *ctrl = port->client_data; | 50 | struct serdev_controller *ctrl = port->client_data; |
| 40 | struct serport *serport = serdev_controller_get_drvdata(ctrl); | 51 | struct serport *serport = serdev_controller_get_drvdata(ctrl); |
| 52 | struct tty_struct *tty; | ||
| 53 | |||
| 54 | tty = tty_port_tty_get(port); | ||
| 55 | if (!tty) | ||
| 56 | return; | ||
| 41 | 57 | ||
| 42 | if (test_and_clear_bit(TTY_DO_WRITE_WAKEUP, &port->tty->flags) && | 58 | if (test_and_clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags) && |
| 43 | test_bit(SERPORT_ACTIVE, &serport->flags)) | 59 | test_bit(SERPORT_ACTIVE, &serport->flags)) |
| 44 | serdev_controller_write_wakeup(ctrl); | 60 | serdev_controller_write_wakeup(ctrl); |
| 45 | 61 | ||
| 46 | wake_up_interruptible_poll(&port->tty->write_wait, POLLOUT); | 62 | wake_up_interruptible_poll(&tty->write_wait, POLLOUT); |
| 63 | |||
| 64 | tty_kref_put(tty); | ||
| 47 | } | 65 | } |
| 48 | 66 | ||
| 49 | static const struct tty_port_client_operations client_ops = { | 67 | static const struct tty_port_client_operations client_ops = { |
| @@ -136,8 +154,10 @@ static void ttyport_close(struct serdev_controller *ctrl) | |||
| 136 | 154 | ||
| 137 | clear_bit(SERPORT_ACTIVE, &serport->flags); | 155 | clear_bit(SERPORT_ACTIVE, &serport->flags); |
| 138 | 156 | ||
| 157 | tty_lock(tty); | ||
| 139 | if (tty->ops->close) | 158 | if (tty->ops->close) |
| 140 | tty->ops->close(tty, NULL); | 159 | tty->ops->close(tty, NULL); |
| 160 | tty_unlock(tty); | ||
| 141 | 161 | ||
| 142 | tty_release_struct(tty, serport->tty_idx); | 162 | tty_release_struct(tty, serport->tty_idx); |
| 143 | } | 163 | } |
diff --git a/drivers/tty/serial/8250/8250_early.c b/drivers/tty/serial/8250/8250_early.c index 362c25ff188a..ae6a256524d8 100644 --- a/drivers/tty/serial/8250/8250_early.c +++ b/drivers/tty/serial/8250/8250_early.c | |||
| @@ -122,12 +122,14 @@ static void __init init_port(struct earlycon_device *device) | |||
| 122 | serial8250_early_out(port, UART_FCR, 0); /* no fifo */ | 122 | serial8250_early_out(port, UART_FCR, 0); /* no fifo */ |
| 123 | serial8250_early_out(port, UART_MCR, 0x3); /* DTR + RTS */ | 123 | serial8250_early_out(port, UART_MCR, 0x3); /* DTR + RTS */ |
| 124 | 124 | ||
| 125 | divisor = DIV_ROUND_CLOSEST(port->uartclk, 16 * device->baud); | 125 | if (port->uartclk && device->baud) { |
| 126 | c = serial8250_early_in(port, UART_LCR); | 126 | divisor = DIV_ROUND_CLOSEST(port->uartclk, 16 * device->baud); |
| 127 | serial8250_early_out(port, UART_LCR, c | UART_LCR_DLAB); | 127 | c = serial8250_early_in(port, UART_LCR); |
| 128 | serial8250_early_out(port, UART_DLL, divisor & 0xff); | 128 | serial8250_early_out(port, UART_LCR, c | UART_LCR_DLAB); |
| 129 | serial8250_early_out(port, UART_DLM, (divisor >> 8) & 0xff); | 129 | serial8250_early_out(port, UART_DLL, divisor & 0xff); |
| 130 | serial8250_early_out(port, UART_LCR, c & ~UART_LCR_DLAB); | 130 | serial8250_early_out(port, UART_DLM, (divisor >> 8) & 0xff); |
| 131 | serial8250_early_out(port, UART_LCR, c & ~UART_LCR_DLAB); | ||
| 132 | } | ||
| 131 | } | 133 | } |
| 132 | 134 | ||
| 133 | int __init early_serial8250_setup(struct earlycon_device *device, | 135 | int __init early_serial8250_setup(struct earlycon_device *device, |
diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c index b7e0e3416641..54adf8d56350 100644 --- a/drivers/tty/serial/8250/8250_pci.c +++ b/drivers/tty/serial/8250/8250_pci.c | |||
| @@ -5135,6 +5135,9 @@ static const struct pci_device_id serial_pci_tbl[] = { | |||
| 5135 | { PCI_DEVICE(0x1601, 0x0800), .driver_data = pbn_b0_4_1250000 }, | 5135 | { PCI_DEVICE(0x1601, 0x0800), .driver_data = pbn_b0_4_1250000 }, |
| 5136 | { PCI_DEVICE(0x1601, 0xa801), .driver_data = pbn_b0_4_1250000 }, | 5136 | { PCI_DEVICE(0x1601, 0xa801), .driver_data = pbn_b0_4_1250000 }, |
| 5137 | 5137 | ||
| 5138 | /* Amazon PCI serial device */ | ||
| 5139 | { PCI_DEVICE(0x1d0f, 0x8250), .driver_data = pbn_b0_1_115200 }, | ||
| 5140 | |||
| 5138 | /* | 5141 | /* |
| 5139 | * These entries match devices with class COMMUNICATION_SERIAL, | 5142 | * These entries match devices with class COMMUNICATION_SERIAL, |
| 5140 | * COMMUNICATION_MODEM or COMMUNICATION_MULTISERIAL | 5143 | * COMMUNICATION_MODEM or COMMUNICATION_MULTISERIAL |
diff --git a/drivers/usb/common/ulpi.c b/drivers/usb/common/ulpi.c index 8b351444cc40..9a2ab6751a23 100644 --- a/drivers/usb/common/ulpi.c +++ b/drivers/usb/common/ulpi.c | |||
| @@ -180,9 +180,9 @@ static int ulpi_of_register(struct ulpi *ulpi) | |||
| 180 | /* Find a ulpi bus underneath the parent or the grandparent */ | 180 | /* Find a ulpi bus underneath the parent or the grandparent */ |
| 181 | parent = ulpi->dev.parent; | 181 | parent = ulpi->dev.parent; |
| 182 | if (parent->of_node) | 182 | if (parent->of_node) |
| 183 | np = of_find_node_by_name(parent->of_node, "ulpi"); | 183 | np = of_get_child_by_name(parent->of_node, "ulpi"); |
| 184 | else if (parent->parent && parent->parent->of_node) | 184 | else if (parent->parent && parent->parent->of_node) |
| 185 | np = of_find_node_by_name(parent->parent->of_node, "ulpi"); | 185 | np = of_get_child_by_name(parent->parent->of_node, "ulpi"); |
| 186 | if (!np) | 186 | if (!np) |
| 187 | return 0; | 187 | return 0; |
| 188 | 188 | ||
diff --git a/drivers/usb/core/config.c b/drivers/usb/core/config.c index da8acd980fc6..78e92d29f8d9 100644 --- a/drivers/usb/core/config.c +++ b/drivers/usb/core/config.c | |||
| @@ -555,6 +555,9 @@ static int usb_parse_configuration(struct usb_device *dev, int cfgidx, | |||
| 555 | unsigned iad_num = 0; | 555 | unsigned iad_num = 0; |
| 556 | 556 | ||
| 557 | memcpy(&config->desc, buffer, USB_DT_CONFIG_SIZE); | 557 | memcpy(&config->desc, buffer, USB_DT_CONFIG_SIZE); |
| 558 | nintf = nintf_orig = config->desc.bNumInterfaces; | ||
| 559 | config->desc.bNumInterfaces = 0; // Adjusted later | ||
| 560 | |||
| 558 | if (config->desc.bDescriptorType != USB_DT_CONFIG || | 561 | if (config->desc.bDescriptorType != USB_DT_CONFIG || |
| 559 | config->desc.bLength < USB_DT_CONFIG_SIZE || | 562 | config->desc.bLength < USB_DT_CONFIG_SIZE || |
| 560 | config->desc.bLength > size) { | 563 | config->desc.bLength > size) { |
| @@ -568,7 +571,6 @@ static int usb_parse_configuration(struct usb_device *dev, int cfgidx, | |||
| 568 | buffer += config->desc.bLength; | 571 | buffer += config->desc.bLength; |
| 569 | size -= config->desc.bLength; | 572 | size -= config->desc.bLength; |
| 570 | 573 | ||
| 571 | nintf = nintf_orig = config->desc.bNumInterfaces; | ||
| 572 | if (nintf > USB_MAXINTERFACES) { | 574 | if (nintf > USB_MAXINTERFACES) { |
| 573 | dev_warn(ddev, "config %d has too many interfaces: %d, " | 575 | dev_warn(ddev, "config %d has too many interfaces: %d, " |
| 574 | "using maximum allowed: %d\n", | 576 | "using maximum allowed: %d\n", |
| @@ -905,14 +907,25 @@ void usb_release_bos_descriptor(struct usb_device *dev) | |||
| 905 | } | 907 | } |
| 906 | } | 908 | } |
| 907 | 909 | ||
| 910 | static const __u8 bos_desc_len[256] = { | ||
| 911 | [USB_CAP_TYPE_WIRELESS_USB] = USB_DT_USB_WIRELESS_CAP_SIZE, | ||
| 912 | [USB_CAP_TYPE_EXT] = USB_DT_USB_EXT_CAP_SIZE, | ||
| 913 | [USB_SS_CAP_TYPE] = USB_DT_USB_SS_CAP_SIZE, | ||
| 914 | [USB_SSP_CAP_TYPE] = USB_DT_USB_SSP_CAP_SIZE(1), | ||
| 915 | [CONTAINER_ID_TYPE] = USB_DT_USB_SS_CONTN_ID_SIZE, | ||
| 916 | [USB_PTM_CAP_TYPE] = USB_DT_USB_PTM_ID_SIZE, | ||
| 917 | }; | ||
| 918 | |||
| 908 | /* Get BOS descriptor set */ | 919 | /* Get BOS descriptor set */ |
| 909 | int usb_get_bos_descriptor(struct usb_device *dev) | 920 | int usb_get_bos_descriptor(struct usb_device *dev) |
| 910 | { | 921 | { |
| 911 | struct device *ddev = &dev->dev; | 922 | struct device *ddev = &dev->dev; |
| 912 | struct usb_bos_descriptor *bos; | 923 | struct usb_bos_descriptor *bos; |
| 913 | struct usb_dev_cap_header *cap; | 924 | struct usb_dev_cap_header *cap; |
| 925 | struct usb_ssp_cap_descriptor *ssp_cap; | ||
| 914 | unsigned char *buffer; | 926 | unsigned char *buffer; |
| 915 | int length, total_len, num, i; | 927 | int length, total_len, num, i, ssac; |
| 928 | __u8 cap_type; | ||
| 916 | int ret; | 929 | int ret; |
| 917 | 930 | ||
| 918 | bos = kzalloc(sizeof(struct usb_bos_descriptor), GFP_KERNEL); | 931 | bos = kzalloc(sizeof(struct usb_bos_descriptor), GFP_KERNEL); |
| @@ -965,7 +978,13 @@ int usb_get_bos_descriptor(struct usb_device *dev) | |||
| 965 | dev->bos->desc->bNumDeviceCaps = i; | 978 | dev->bos->desc->bNumDeviceCaps = i; |
| 966 | break; | 979 | break; |
| 967 | } | 980 | } |
| 981 | cap_type = cap->bDevCapabilityType; | ||
| 968 | length = cap->bLength; | 982 | length = cap->bLength; |
| 983 | if (bos_desc_len[cap_type] && length < bos_desc_len[cap_type]) { | ||
| 984 | dev->bos->desc->bNumDeviceCaps = i; | ||
| 985 | break; | ||
| 986 | } | ||
| 987 | |||
| 969 | total_len -= length; | 988 | total_len -= length; |
| 970 | 989 | ||
| 971 | if (cap->bDescriptorType != USB_DT_DEVICE_CAPABILITY) { | 990 | if (cap->bDescriptorType != USB_DT_DEVICE_CAPABILITY) { |
| @@ -973,7 +992,7 @@ int usb_get_bos_descriptor(struct usb_device *dev) | |||
| 973 | continue; | 992 | continue; |
| 974 | } | 993 | } |
| 975 | 994 | ||
| 976 | switch (cap->bDevCapabilityType) { | 995 | switch (cap_type) { |
| 977 | case USB_CAP_TYPE_WIRELESS_USB: | 996 | case USB_CAP_TYPE_WIRELESS_USB: |
| 978 | /* Wireless USB cap descriptor is handled by wusb */ | 997 | /* Wireless USB cap descriptor is handled by wusb */ |
| 979 | break; | 998 | break; |
| @@ -986,8 +1005,11 @@ int usb_get_bos_descriptor(struct usb_device *dev) | |||
| 986 | (struct usb_ss_cap_descriptor *)buffer; | 1005 | (struct usb_ss_cap_descriptor *)buffer; |
| 987 | break; | 1006 | break; |
| 988 | case USB_SSP_CAP_TYPE: | 1007 | case USB_SSP_CAP_TYPE: |
| 989 | dev->bos->ssp_cap = | 1008 | ssp_cap = (struct usb_ssp_cap_descriptor *)buffer; |
| 990 | (struct usb_ssp_cap_descriptor *)buffer; | 1009 | ssac = (le32_to_cpu(ssp_cap->bmAttributes) & |
| 1010 | USB_SSP_SUBLINK_SPEED_ATTRIBS) + 1; | ||
| 1011 | if (length >= USB_DT_USB_SSP_CAP_SIZE(ssac)) | ||
| 1012 | dev->bos->ssp_cap = ssp_cap; | ||
| 991 | break; | 1013 | break; |
| 992 | case CONTAINER_ID_TYPE: | 1014 | case CONTAINER_ID_TYPE: |
| 993 | dev->bos->ss_id = | 1015 | dev->bos->ss_id = |
diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c index 705c573d0257..a3fad4ec9870 100644 --- a/drivers/usb/core/devio.c +++ b/drivers/usb/core/devio.c | |||
| @@ -1442,14 +1442,18 @@ static int proc_do_submiturb(struct usb_dev_state *ps, struct usbdevfs_urb *uurb | |||
| 1442 | int number_of_packets = 0; | 1442 | int number_of_packets = 0; |
| 1443 | unsigned int stream_id = 0; | 1443 | unsigned int stream_id = 0; |
| 1444 | void *buf; | 1444 | void *buf; |
| 1445 | 1445 | unsigned long mask = USBDEVFS_URB_SHORT_NOT_OK | | |
| 1446 | if (uurb->flags & ~(USBDEVFS_URB_ISO_ASAP | | ||
| 1447 | USBDEVFS_URB_SHORT_NOT_OK | | ||
| 1448 | USBDEVFS_URB_BULK_CONTINUATION | | 1446 | USBDEVFS_URB_BULK_CONTINUATION | |
| 1449 | USBDEVFS_URB_NO_FSBR | | 1447 | USBDEVFS_URB_NO_FSBR | |
| 1450 | USBDEVFS_URB_ZERO_PACKET | | 1448 | USBDEVFS_URB_ZERO_PACKET | |
| 1451 | USBDEVFS_URB_NO_INTERRUPT)) | 1449 | USBDEVFS_URB_NO_INTERRUPT; |
| 1452 | return -EINVAL; | 1450 | /* USBDEVFS_URB_ISO_ASAP is a special case */ |
| 1451 | if (uurb->type == USBDEVFS_URB_TYPE_ISO) | ||
| 1452 | mask |= USBDEVFS_URB_ISO_ASAP; | ||
| 1453 | |||
| 1454 | if (uurb->flags & ~mask) | ||
| 1455 | return -EINVAL; | ||
| 1456 | |||
| 1453 | if ((unsigned int)uurb->buffer_length >= USBFS_XFER_MAX) | 1457 | if ((unsigned int)uurb->buffer_length >= USBFS_XFER_MAX) |
| 1454 | return -EINVAL; | 1458 | return -EINVAL; |
| 1455 | if (uurb->buffer_length > 0 && !uurb->buffer) | 1459 | if (uurb->buffer_length > 0 && !uurb->buffer) |
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index 7ccdd3d4db84..cf7bbcb9a63c 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c | |||
| @@ -4948,6 +4948,15 @@ loop: | |||
| 4948 | usb_put_dev(udev); | 4948 | usb_put_dev(udev); |
| 4949 | if ((status == -ENOTCONN) || (status == -ENOTSUPP)) | 4949 | if ((status == -ENOTCONN) || (status == -ENOTSUPP)) |
| 4950 | break; | 4950 | break; |
| 4951 | |||
| 4952 | /* When halfway through our retry count, power-cycle the port */ | ||
| 4953 | if (i == (SET_CONFIG_TRIES / 2) - 1) { | ||
| 4954 | dev_info(&port_dev->dev, "attempt power cycle\n"); | ||
| 4955 | usb_hub_set_port_power(hdev, hub, port1, false); | ||
| 4956 | msleep(2 * hub_power_on_good_delay(hub)); | ||
| 4957 | usb_hub_set_port_power(hdev, hub, port1, true); | ||
| 4958 | msleep(hub_power_on_good_delay(hub)); | ||
| 4959 | } | ||
| 4951 | } | 4960 | } |
| 4952 | if (hub->hdev->parent || | 4961 | if (hub->hdev->parent || |
| 4953 | !hcd->driver->port_handed_over || | 4962 | !hcd->driver->port_handed_over || |
diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c index f1dbab6f798f..a10b346b9777 100644 --- a/drivers/usb/core/quirks.c +++ b/drivers/usb/core/quirks.c | |||
| @@ -146,6 +146,9 @@ static const struct usb_device_id usb_quirk_list[] = { | |||
| 146 | /* appletouch */ | 146 | /* appletouch */ |
| 147 | { USB_DEVICE(0x05ac, 0x021a), .driver_info = USB_QUIRK_RESET_RESUME }, | 147 | { USB_DEVICE(0x05ac, 0x021a), .driver_info = USB_QUIRK_RESET_RESUME }, |
| 148 | 148 | ||
| 149 | /* Genesys Logic hub, internally used by KY-688 USB 3.1 Type-C Hub */ | ||
| 150 | { USB_DEVICE(0x05e3, 0x0612), .driver_info = USB_QUIRK_NO_LPM }, | ||
| 151 | |||
| 149 | /* Genesys Logic hub, internally used by Moshi USB to Ethernet Adapter */ | 152 | /* Genesys Logic hub, internally used by Moshi USB to Ethernet Adapter */ |
| 150 | { USB_DEVICE(0x05e3, 0x0616), .driver_info = USB_QUIRK_NO_LPM }, | 153 | { USB_DEVICE(0x05e3, 0x0616), .driver_info = USB_QUIRK_NO_LPM }, |
| 151 | 154 | ||
diff --git a/drivers/usb/dwc2/core.h b/drivers/usb/dwc2/core.h index f66c94130cac..31749c79045f 100644 --- a/drivers/usb/dwc2/core.h +++ b/drivers/usb/dwc2/core.h | |||
| @@ -537,6 +537,7 @@ struct dwc2_core_params { | |||
| 537 | * 2 - Internal DMA | 537 | * 2 - Internal DMA |
| 538 | * @power_optimized Are power optimizations enabled? | 538 | * @power_optimized Are power optimizations enabled? |
| 539 | * @num_dev_ep Number of device endpoints available | 539 | * @num_dev_ep Number of device endpoints available |
| 540 | * @num_dev_in_eps Number of device IN endpoints available | ||
| 540 | * @num_dev_perio_in_ep Number of device periodic IN endpoints | 541 | * @num_dev_perio_in_ep Number of device periodic IN endpoints |
| 541 | * available | 542 | * available |
| 542 | * @dev_token_q_depth Device Mode IN Token Sequence Learning Queue | 543 | * @dev_token_q_depth Device Mode IN Token Sequence Learning Queue |
| @@ -565,6 +566,7 @@ struct dwc2_core_params { | |||
| 565 | * 2 - 8 or 16 bits | 566 | * 2 - 8 or 16 bits |
| 566 | * @snpsid: Value from SNPSID register | 567 | * @snpsid: Value from SNPSID register |
| 567 | * @dev_ep_dirs: Direction of device endpoints (GHWCFG1) | 568 | * @dev_ep_dirs: Direction of device endpoints (GHWCFG1) |
| 569 | * @g_tx_fifo_size[] Power-on values of TxFIFO sizes | ||
| 568 | */ | 570 | */ |
| 569 | struct dwc2_hw_params { | 571 | struct dwc2_hw_params { |
| 570 | unsigned op_mode:3; | 572 | unsigned op_mode:3; |
| @@ -586,12 +588,14 @@ struct dwc2_hw_params { | |||
| 586 | unsigned fs_phy_type:2; | 588 | unsigned fs_phy_type:2; |
| 587 | unsigned i2c_enable:1; | 589 | unsigned i2c_enable:1; |
| 588 | unsigned num_dev_ep:4; | 590 | unsigned num_dev_ep:4; |
| 591 | unsigned num_dev_in_eps : 4; | ||
| 589 | unsigned num_dev_perio_in_ep:4; | 592 | unsigned num_dev_perio_in_ep:4; |
| 590 | unsigned total_fifo_size:16; | 593 | unsigned total_fifo_size:16; |
| 591 | unsigned power_optimized:1; | 594 | unsigned power_optimized:1; |
| 592 | unsigned utmi_phy_data_width:2; | 595 | unsigned utmi_phy_data_width:2; |
| 593 | u32 snpsid; | 596 | u32 snpsid; |
| 594 | u32 dev_ep_dirs; | 597 | u32 dev_ep_dirs; |
| 598 | u32 g_tx_fifo_size[MAX_EPS_CHANNELS]; | ||
| 595 | }; | 599 | }; |
| 596 | 600 | ||
| 597 | /* Size of control and EP0 buffers */ | 601 | /* Size of control and EP0 buffers */ |
diff --git a/drivers/usb/dwc2/gadget.c b/drivers/usb/dwc2/gadget.c index 88529d092503..e4c3ce0de5de 100644 --- a/drivers/usb/dwc2/gadget.c +++ b/drivers/usb/dwc2/gadget.c | |||
| @@ -195,55 +195,18 @@ int dwc2_hsotg_tx_fifo_count(struct dwc2_hsotg *hsotg) | |||
| 195 | { | 195 | { |
| 196 | if (hsotg->hw_params.en_multiple_tx_fifo) | 196 | if (hsotg->hw_params.en_multiple_tx_fifo) |
| 197 | /* In dedicated FIFO mode we need count of IN EPs */ | 197 | /* In dedicated FIFO mode we need count of IN EPs */ |
| 198 | return (dwc2_readl(hsotg->regs + GHWCFG4) & | 198 | return hsotg->hw_params.num_dev_in_eps; |
| 199 | GHWCFG4_NUM_IN_EPS_MASK) >> GHWCFG4_NUM_IN_EPS_SHIFT; | ||
| 200 | else | 199 | else |
| 201 | /* In shared FIFO mode we need count of Periodic IN EPs */ | 200 | /* In shared FIFO mode we need count of Periodic IN EPs */ |
| 202 | return hsotg->hw_params.num_dev_perio_in_ep; | 201 | return hsotg->hw_params.num_dev_perio_in_ep; |
| 203 | } | 202 | } |
| 204 | 203 | ||
| 205 | /** | 204 | /** |
| 206 | * dwc2_hsotg_ep_info_size - return Endpoint Info Control block size in DWORDs | ||
| 207 | */ | ||
| 208 | static int dwc2_hsotg_ep_info_size(struct dwc2_hsotg *hsotg) | ||
| 209 | { | ||
| 210 | int val = 0; | ||
| 211 | int i; | ||
| 212 | u32 ep_dirs; | ||
| 213 | |||
| 214 | /* | ||
| 215 | * Don't need additional space for ep info control registers in | ||
| 216 | * slave mode. | ||
| 217 | */ | ||
| 218 | if (!using_dma(hsotg)) { | ||
| 219 | dev_dbg(hsotg->dev, "Buffer DMA ep info size 0\n"); | ||
| 220 | return 0; | ||
| 221 | } | ||
| 222 | |||
| 223 | /* | ||
| 224 | * Buffer DMA mode - 1 location per endpoit | ||
| 225 | * Descriptor DMA mode - 4 locations per endpoint | ||
| 226 | */ | ||
| 227 | ep_dirs = hsotg->hw_params.dev_ep_dirs; | ||
| 228 | |||
| 229 | for (i = 0; i <= hsotg->hw_params.num_dev_ep; i++) { | ||
| 230 | val += ep_dirs & 3 ? 1 : 2; | ||
| 231 | ep_dirs >>= 2; | ||
| 232 | } | ||
| 233 | |||
| 234 | if (using_desc_dma(hsotg)) | ||
| 235 | val = val * 4; | ||
| 236 | |||
| 237 | return val; | ||
| 238 | } | ||
| 239 | |||
| 240 | /** | ||
| 241 | * dwc2_hsotg_tx_fifo_total_depth - return total FIFO depth available for | 205 | * dwc2_hsotg_tx_fifo_total_depth - return total FIFO depth available for |
| 242 | * device mode TX FIFOs | 206 | * device mode TX FIFOs |
| 243 | */ | 207 | */ |
| 244 | int dwc2_hsotg_tx_fifo_total_depth(struct dwc2_hsotg *hsotg) | 208 | int dwc2_hsotg_tx_fifo_total_depth(struct dwc2_hsotg *hsotg) |
| 245 | { | 209 | { |
| 246 | int ep_info_size; | ||
| 247 | int addr; | 210 | int addr; |
| 248 | int tx_addr_max; | 211 | int tx_addr_max; |
| 249 | u32 np_tx_fifo_size; | 212 | u32 np_tx_fifo_size; |
| @@ -252,8 +215,7 @@ int dwc2_hsotg_tx_fifo_total_depth(struct dwc2_hsotg *hsotg) | |||
| 252 | hsotg->params.g_np_tx_fifo_size); | 215 | hsotg->params.g_np_tx_fifo_size); |
| 253 | 216 | ||
| 254 | /* Get Endpoint Info Control block size in DWORDs. */ | 217 | /* Get Endpoint Info Control block size in DWORDs. */ |
| 255 | ep_info_size = dwc2_hsotg_ep_info_size(hsotg); | 218 | tx_addr_max = hsotg->hw_params.total_fifo_size; |
| 256 | tx_addr_max = hsotg->hw_params.total_fifo_size - ep_info_size; | ||
| 257 | 219 | ||
| 258 | addr = hsotg->params.g_rx_fifo_size + np_tx_fifo_size; | 220 | addr = hsotg->params.g_rx_fifo_size + np_tx_fifo_size; |
| 259 | if (tx_addr_max <= addr) | 221 | if (tx_addr_max <= addr) |
diff --git a/drivers/usb/dwc2/params.c b/drivers/usb/dwc2/params.c index ef73af6e03a9..03fd20f0b496 100644 --- a/drivers/usb/dwc2/params.c +++ b/drivers/usb/dwc2/params.c | |||
| @@ -484,8 +484,7 @@ static void dwc2_check_param_tx_fifo_sizes(struct dwc2_hsotg *hsotg) | |||
| 484 | } | 484 | } |
| 485 | 485 | ||
| 486 | for (fifo = 1; fifo <= fifo_count; fifo++) { | 486 | for (fifo = 1; fifo <= fifo_count; fifo++) { |
| 487 | dptxfszn = (dwc2_readl(hsotg->regs + DPTXFSIZN(fifo)) & | 487 | dptxfszn = hsotg->hw_params.g_tx_fifo_size[fifo]; |
| 488 | FIFOSIZE_DEPTH_MASK) >> FIFOSIZE_DEPTH_SHIFT; | ||
| 489 | 488 | ||
| 490 | if (hsotg->params.g_tx_fifo_size[fifo] < min || | 489 | if (hsotg->params.g_tx_fifo_size[fifo] < min || |
| 491 | hsotg->params.g_tx_fifo_size[fifo] > dptxfszn) { | 490 | hsotg->params.g_tx_fifo_size[fifo] > dptxfszn) { |
| @@ -609,6 +608,7 @@ static void dwc2_get_dev_hwparams(struct dwc2_hsotg *hsotg) | |||
| 609 | struct dwc2_hw_params *hw = &hsotg->hw_params; | 608 | struct dwc2_hw_params *hw = &hsotg->hw_params; |
| 610 | bool forced; | 609 | bool forced; |
| 611 | u32 gnptxfsiz; | 610 | u32 gnptxfsiz; |
| 611 | int fifo, fifo_count; | ||
| 612 | 612 | ||
| 613 | if (hsotg->dr_mode == USB_DR_MODE_HOST) | 613 | if (hsotg->dr_mode == USB_DR_MODE_HOST) |
| 614 | return; | 614 | return; |
| @@ -617,6 +617,14 @@ static void dwc2_get_dev_hwparams(struct dwc2_hsotg *hsotg) | |||
| 617 | 617 | ||
| 618 | gnptxfsiz = dwc2_readl(hsotg->regs + GNPTXFSIZ); | 618 | gnptxfsiz = dwc2_readl(hsotg->regs + GNPTXFSIZ); |
| 619 | 619 | ||
| 620 | fifo_count = dwc2_hsotg_tx_fifo_count(hsotg); | ||
| 621 | |||
| 622 | for (fifo = 1; fifo <= fifo_count; fifo++) { | ||
| 623 | hw->g_tx_fifo_size[fifo] = | ||
| 624 | (dwc2_readl(hsotg->regs + DPTXFSIZN(fifo)) & | ||
| 625 | FIFOSIZE_DEPTH_MASK) >> FIFOSIZE_DEPTH_SHIFT; | ||
| 626 | } | ||
| 627 | |||
| 620 | if (forced) | 628 | if (forced) |
| 621 | dwc2_clear_force_mode(hsotg); | 629 | dwc2_clear_force_mode(hsotg); |
| 622 | 630 | ||
| @@ -661,14 +669,6 @@ int dwc2_get_hwparams(struct dwc2_hsotg *hsotg) | |||
| 661 | hwcfg4 = dwc2_readl(hsotg->regs + GHWCFG4); | 669 | hwcfg4 = dwc2_readl(hsotg->regs + GHWCFG4); |
| 662 | grxfsiz = dwc2_readl(hsotg->regs + GRXFSIZ); | 670 | grxfsiz = dwc2_readl(hsotg->regs + GRXFSIZ); |
| 663 | 671 | ||
| 664 | /* | ||
| 665 | * Host specific hardware parameters. Reading these parameters | ||
| 666 | * requires the controller to be in host mode. The mode will | ||
| 667 | * be forced, if necessary, to read these values. | ||
| 668 | */ | ||
| 669 | dwc2_get_host_hwparams(hsotg); | ||
| 670 | dwc2_get_dev_hwparams(hsotg); | ||
| 671 | |||
| 672 | /* hwcfg1 */ | 672 | /* hwcfg1 */ |
| 673 | hw->dev_ep_dirs = hwcfg1; | 673 | hw->dev_ep_dirs = hwcfg1; |
| 674 | 674 | ||
| @@ -711,6 +711,8 @@ int dwc2_get_hwparams(struct dwc2_hsotg *hsotg) | |||
| 711 | hw->en_multiple_tx_fifo = !!(hwcfg4 & GHWCFG4_DED_FIFO_EN); | 711 | hw->en_multiple_tx_fifo = !!(hwcfg4 & GHWCFG4_DED_FIFO_EN); |
| 712 | hw->num_dev_perio_in_ep = (hwcfg4 & GHWCFG4_NUM_DEV_PERIO_IN_EP_MASK) >> | 712 | hw->num_dev_perio_in_ep = (hwcfg4 & GHWCFG4_NUM_DEV_PERIO_IN_EP_MASK) >> |
| 713 | GHWCFG4_NUM_DEV_PERIO_IN_EP_SHIFT; | 713 | GHWCFG4_NUM_DEV_PERIO_IN_EP_SHIFT; |
| 714 | hw->num_dev_in_eps = (hwcfg4 & GHWCFG4_NUM_IN_EPS_MASK) >> | ||
| 715 | GHWCFG4_NUM_IN_EPS_SHIFT; | ||
| 714 | hw->dma_desc_enable = !!(hwcfg4 & GHWCFG4_DESC_DMA); | 716 | hw->dma_desc_enable = !!(hwcfg4 & GHWCFG4_DESC_DMA); |
| 715 | hw->power_optimized = !!(hwcfg4 & GHWCFG4_POWER_OPTIMIZ); | 717 | hw->power_optimized = !!(hwcfg4 & GHWCFG4_POWER_OPTIMIZ); |
| 716 | hw->utmi_phy_data_width = (hwcfg4 & GHWCFG4_UTMI_PHY_DATA_WIDTH_MASK) >> | 718 | hw->utmi_phy_data_width = (hwcfg4 & GHWCFG4_UTMI_PHY_DATA_WIDTH_MASK) >> |
| @@ -719,6 +721,13 @@ int dwc2_get_hwparams(struct dwc2_hsotg *hsotg) | |||
| 719 | /* fifo sizes */ | 721 | /* fifo sizes */ |
| 720 | hw->rx_fifo_size = (grxfsiz & GRXFSIZ_DEPTH_MASK) >> | 722 | hw->rx_fifo_size = (grxfsiz & GRXFSIZ_DEPTH_MASK) >> |
| 721 | GRXFSIZ_DEPTH_SHIFT; | 723 | GRXFSIZ_DEPTH_SHIFT; |
| 724 | /* | ||
| 725 | * Host specific hardware parameters. Reading these parameters | ||
| 726 | * requires the controller to be in host mode. The mode will | ||
| 727 | * be forced, if necessary, to read these values. | ||
| 728 | */ | ||
| 729 | dwc2_get_host_hwparams(hsotg); | ||
| 730 | dwc2_get_dev_hwparams(hsotg); | ||
| 722 | 731 | ||
| 723 | return 0; | 732 | return 0; |
| 724 | } | 733 | } |
diff --git a/drivers/usb/dwc3/dwc3-of-simple.c b/drivers/usb/dwc3/dwc3-of-simple.c index c4a4d7bd2766..7ae0eefc7cc7 100644 --- a/drivers/usb/dwc3/dwc3-of-simple.c +++ b/drivers/usb/dwc3/dwc3-of-simple.c | |||
| @@ -51,8 +51,10 @@ static int dwc3_of_simple_clk_init(struct dwc3_of_simple *simple, int count) | |||
| 51 | 51 | ||
| 52 | clk = of_clk_get(np, i); | 52 | clk = of_clk_get(np, i); |
| 53 | if (IS_ERR(clk)) { | 53 | if (IS_ERR(clk)) { |
| 54 | while (--i >= 0) | 54 | while (--i >= 0) { |
| 55 | clk_disable_unprepare(simple->clks[i]); | ||
| 55 | clk_put(simple->clks[i]); | 56 | clk_put(simple->clks[i]); |
| 57 | } | ||
| 56 | return PTR_ERR(clk); | 58 | return PTR_ERR(clk); |
| 57 | } | 59 | } |
| 58 | 60 | ||
| @@ -203,6 +205,7 @@ static struct platform_driver dwc3_of_simple_driver = { | |||
| 203 | .driver = { | 205 | .driver = { |
| 204 | .name = "dwc3-of-simple", | 206 | .name = "dwc3-of-simple", |
| 205 | .of_match_table = of_dwc3_simple_match, | 207 | .of_match_table = of_dwc3_simple_match, |
| 208 | .pm = &dwc3_of_simple_dev_pm_ops, | ||
| 206 | }, | 209 | }, |
| 207 | }; | 210 | }; |
| 208 | 211 | ||
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 981fd986cf82..639dd1b163a0 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c | |||
| @@ -259,7 +259,7 @@ int dwc3_send_gadget_ep_cmd(struct dwc3_ep *dep, unsigned cmd, | |||
| 259 | { | 259 | { |
| 260 | const struct usb_endpoint_descriptor *desc = dep->endpoint.desc; | 260 | const struct usb_endpoint_descriptor *desc = dep->endpoint.desc; |
| 261 | struct dwc3 *dwc = dep->dwc; | 261 | struct dwc3 *dwc = dep->dwc; |
| 262 | u32 timeout = 500; | 262 | u32 timeout = 1000; |
| 263 | u32 reg; | 263 | u32 reg; |
| 264 | 264 | ||
| 265 | int cmd_status = 0; | 265 | int cmd_status = 0; |
| @@ -912,7 +912,7 @@ static void __dwc3_prepare_one_trb(struct dwc3_ep *dep, struct dwc3_trb *trb, | |||
| 912 | */ | 912 | */ |
| 913 | if (speed == USB_SPEED_HIGH) { | 913 | if (speed == USB_SPEED_HIGH) { |
| 914 | struct usb_ep *ep = &dep->endpoint; | 914 | struct usb_ep *ep = &dep->endpoint; |
| 915 | unsigned int mult = ep->mult - 1; | 915 | unsigned int mult = 2; |
| 916 | unsigned int maxp = usb_endpoint_maxp(ep->desc); | 916 | unsigned int maxp = usb_endpoint_maxp(ep->desc); |
| 917 | 917 | ||
| 918 | if (length <= (2 * maxp)) | 918 | if (length <= (2 * maxp)) |
diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c index eec14e6ed20b..77c7ecca816a 100644 --- a/drivers/usb/gadget/composite.c +++ b/drivers/usb/gadget/composite.c | |||
| @@ -146,7 +146,6 @@ int config_ep_by_speed(struct usb_gadget *g, | |||
| 146 | struct usb_function *f, | 146 | struct usb_function *f, |
| 147 | struct usb_ep *_ep) | 147 | struct usb_ep *_ep) |
| 148 | { | 148 | { |
| 149 | struct usb_composite_dev *cdev = get_gadget_data(g); | ||
| 150 | struct usb_endpoint_descriptor *chosen_desc = NULL; | 149 | struct usb_endpoint_descriptor *chosen_desc = NULL; |
| 151 | struct usb_descriptor_header **speed_desc = NULL; | 150 | struct usb_descriptor_header **speed_desc = NULL; |
| 152 | 151 | ||
| @@ -226,8 +225,12 @@ ep_found: | |||
| 226 | _ep->maxburst = comp_desc->bMaxBurst + 1; | 225 | _ep->maxburst = comp_desc->bMaxBurst + 1; |
| 227 | break; | 226 | break; |
| 228 | default: | 227 | default: |
| 229 | if (comp_desc->bMaxBurst != 0) | 228 | if (comp_desc->bMaxBurst != 0) { |
| 229 | struct usb_composite_dev *cdev; | ||
| 230 | |||
| 231 | cdev = get_gadget_data(g); | ||
| 230 | ERROR(cdev, "ep0 bMaxBurst must be 0\n"); | 232 | ERROR(cdev, "ep0 bMaxBurst must be 0\n"); |
| 233 | } | ||
| 231 | _ep->maxburst = 1; | 234 | _ep->maxburst = 1; |
| 232 | break; | 235 | break; |
| 233 | } | 236 | } |
diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c index 97ea059a7aa4..b6cf5ab5a0a1 100644 --- a/drivers/usb/gadget/function/f_fs.c +++ b/drivers/usb/gadget/function/f_fs.c | |||
| @@ -1012,7 +1012,7 @@ static ssize_t ffs_epfile_io(struct file *file, struct ffs_io_data *io_data) | |||
| 1012 | else | 1012 | else |
| 1013 | ret = ep->status; | 1013 | ret = ep->status; |
| 1014 | goto error_mutex; | 1014 | goto error_mutex; |
| 1015 | } else if (!(req = usb_ep_alloc_request(ep->ep, GFP_KERNEL))) { | 1015 | } else if (!(req = usb_ep_alloc_request(ep->ep, GFP_ATOMIC))) { |
| 1016 | ret = -ENOMEM; | 1016 | ret = -ENOMEM; |
| 1017 | } else { | 1017 | } else { |
| 1018 | req->buf = data; | 1018 | req->buf = data; |
| @@ -2282,9 +2282,18 @@ static int __ffs_data_do_os_desc(enum ffs_os_desc_type type, | |||
| 2282 | int i; | 2282 | int i; |
| 2283 | 2283 | ||
| 2284 | if (len < sizeof(*d) || | 2284 | if (len < sizeof(*d) || |
| 2285 | d->bFirstInterfaceNumber >= ffs->interfaces_count || | 2285 | d->bFirstInterfaceNumber >= ffs->interfaces_count) |
| 2286 | !d->Reserved1) | ||
| 2287 | return -EINVAL; | 2286 | return -EINVAL; |
| 2287 | if (d->Reserved1 != 1) { | ||
| 2288 | /* | ||
| 2289 | * According to the spec, Reserved1 must be set to 1 | ||
| 2290 | * but older kernels incorrectly rejected non-zero | ||
| 2291 | * values. We fix it here to avoid returning EINVAL | ||
| 2292 | * in response to values we used to accept. | ||
| 2293 | */ | ||
| 2294 | pr_debug("usb_ext_compat_desc::Reserved1 forced to 1\n"); | ||
| 2295 | d->Reserved1 = 1; | ||
| 2296 | } | ||
| 2288 | for (i = 0; i < ARRAY_SIZE(d->Reserved2); ++i) | 2297 | for (i = 0; i < ARRAY_SIZE(d->Reserved2); ++i) |
| 2289 | if (d->Reserved2[i]) | 2298 | if (d->Reserved2[i]) |
| 2290 | return -EINVAL; | 2299 | return -EINVAL; |
diff --git a/drivers/usb/gadget/legacy/Kconfig b/drivers/usb/gadget/legacy/Kconfig index a12fb459dbd9..784bf86dad4f 100644 --- a/drivers/usb/gadget/legacy/Kconfig +++ b/drivers/usb/gadget/legacy/Kconfig | |||
| @@ -479,7 +479,7 @@ endif | |||
| 479 | # or video class gadget drivers), or specific hardware, here. | 479 | # or video class gadget drivers), or specific hardware, here. |
| 480 | config USB_G_WEBCAM | 480 | config USB_G_WEBCAM |
| 481 | tristate "USB Webcam Gadget" | 481 | tristate "USB Webcam Gadget" |
| 482 | depends on VIDEO_DEV | 482 | depends on VIDEO_V4L2 |
| 483 | select USB_LIBCOMPOSITE | 483 | select USB_LIBCOMPOSITE |
| 484 | select VIDEOBUF2_VMALLOC | 484 | select VIDEOBUF2_VMALLOC |
| 485 | select USB_F_UVC | 485 | select USB_F_UVC |
diff --git a/drivers/usb/gadget/udc/bdc/bdc_core.c b/drivers/usb/gadget/udc/bdc/bdc_core.c index d39f070acbd7..01b44e159623 100644 --- a/drivers/usb/gadget/udc/bdc/bdc_core.c +++ b/drivers/usb/gadget/udc/bdc/bdc_core.c | |||
| @@ -642,7 +642,6 @@ static const struct of_device_id bdc_of_match[] = { | |||
| 642 | static struct platform_driver bdc_driver = { | 642 | static struct platform_driver bdc_driver = { |
| 643 | .driver = { | 643 | .driver = { |
| 644 | .name = BRCM_BDC_NAME, | 644 | .name = BRCM_BDC_NAME, |
| 645 | .owner = THIS_MODULE, | ||
| 646 | .pm = &bdc_pm_ops, | 645 | .pm = &bdc_pm_ops, |
| 647 | .of_match_table = bdc_of_match, | 646 | .of_match_table = bdc_of_match, |
| 648 | }, | 647 | }, |
diff --git a/drivers/usb/gadget/udc/core.c b/drivers/usb/gadget/udc/core.c index 61422d624ad0..93eff7dec2f5 100644 --- a/drivers/usb/gadget/udc/core.c +++ b/drivers/usb/gadget/udc/core.c | |||
| @@ -1069,8 +1069,12 @@ static inline void usb_gadget_udc_stop(struct usb_udc *udc) | |||
| 1069 | static inline void usb_gadget_udc_set_speed(struct usb_udc *udc, | 1069 | static inline void usb_gadget_udc_set_speed(struct usb_udc *udc, |
| 1070 | enum usb_device_speed speed) | 1070 | enum usb_device_speed speed) |
| 1071 | { | 1071 | { |
| 1072 | if (udc->gadget->ops->udc_set_speed) | 1072 | if (udc->gadget->ops->udc_set_speed) { |
| 1073 | udc->gadget->ops->udc_set_speed(udc->gadget, speed); | 1073 | enum usb_device_speed s; |
| 1074 | |||
| 1075 | s = min(speed, udc->gadget->max_speed); | ||
| 1076 | udc->gadget->ops->udc_set_speed(udc->gadget, s); | ||
| 1077 | } | ||
| 1074 | } | 1078 | } |
| 1075 | 1079 | ||
| 1076 | /** | 1080 | /** |
diff --git a/drivers/usb/gadget/udc/renesas_usb3.c b/drivers/usb/gadget/udc/renesas_usb3.c index bc37f40baacf..6e87af248367 100644 --- a/drivers/usb/gadget/udc/renesas_usb3.c +++ b/drivers/usb/gadget/udc/renesas_usb3.c | |||
| @@ -252,7 +252,7 @@ | |||
| 252 | #define USB3_EP0_SS_MAX_PACKET_SIZE 512 | 252 | #define USB3_EP0_SS_MAX_PACKET_SIZE 512 |
| 253 | #define USB3_EP0_HSFS_MAX_PACKET_SIZE 64 | 253 | #define USB3_EP0_HSFS_MAX_PACKET_SIZE 64 |
| 254 | #define USB3_EP0_BUF_SIZE 8 | 254 | #define USB3_EP0_BUF_SIZE 8 |
| 255 | #define USB3_MAX_NUM_PIPES 30 | 255 | #define USB3_MAX_NUM_PIPES 6 /* This includes PIPE 0 */ |
| 256 | #define USB3_WAIT_US 3 | 256 | #define USB3_WAIT_US 3 |
| 257 | #define USB3_DMA_NUM_SETTING_AREA 4 | 257 | #define USB3_DMA_NUM_SETTING_AREA 4 |
| 258 | /* | 258 | /* |
diff --git a/drivers/usb/host/ehci-dbg.c b/drivers/usb/host/ehci-dbg.c index 19f00424f53e..3ed75aaa09d9 100644 --- a/drivers/usb/host/ehci-dbg.c +++ b/drivers/usb/host/ehci-dbg.c | |||
| @@ -827,7 +827,7 @@ static ssize_t fill_registers_buffer(struct debug_buffer *buf) | |||
| 827 | default: /* unknown */ | 827 | default: /* unknown */ |
| 828 | break; | 828 | break; |
| 829 | } | 829 | } |
| 830 | temp = (cap >> 8) & 0xff; | 830 | offset = (cap >> 8) & 0xff; |
| 831 | } | 831 | } |
| 832 | } | 832 | } |
| 833 | #endif | 833 | #endif |
diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c index e1fba4688509..3a29b32a3bd0 100644 --- a/drivers/usb/host/xhci-mem.c +++ b/drivers/usb/host/xhci-mem.c | |||
| @@ -934,6 +934,12 @@ void xhci_free_virt_devices_depth_first(struct xhci_hcd *xhci, int slot_id) | |||
| 934 | if (!vdev) | 934 | if (!vdev) |
| 935 | return; | 935 | return; |
| 936 | 936 | ||
| 937 | if (vdev->real_port == 0 || | ||
| 938 | vdev->real_port > HCS_MAX_PORTS(xhci->hcs_params1)) { | ||
| 939 | xhci_dbg(xhci, "Bad vdev->real_port.\n"); | ||
| 940 | goto out; | ||
| 941 | } | ||
| 942 | |||
| 937 | tt_list_head = &(xhci->rh_bw[vdev->real_port - 1].tts); | 943 | tt_list_head = &(xhci->rh_bw[vdev->real_port - 1].tts); |
| 938 | list_for_each_entry_safe(tt_info, next, tt_list_head, tt_list) { | 944 | list_for_each_entry_safe(tt_info, next, tt_list_head, tt_list) { |
| 939 | /* is this a hub device that added a tt_info to the tts list */ | 945 | /* is this a hub device that added a tt_info to the tts list */ |
| @@ -947,6 +953,7 @@ void xhci_free_virt_devices_depth_first(struct xhci_hcd *xhci, int slot_id) | |||
| 947 | } | 953 | } |
| 948 | } | 954 | } |
| 949 | } | 955 | } |
| 956 | out: | ||
| 950 | /* we are now at a leaf device */ | 957 | /* we are now at a leaf device */ |
| 951 | xhci_debugfs_remove_slot(xhci, slot_id); | 958 | xhci_debugfs_remove_slot(xhci, slot_id); |
| 952 | xhci_free_virt_device(xhci, slot_id); | 959 | xhci_free_virt_device(xhci, slot_id); |
| @@ -964,10 +971,9 @@ int xhci_alloc_virt_device(struct xhci_hcd *xhci, int slot_id, | |||
| 964 | return 0; | 971 | return 0; |
| 965 | } | 972 | } |
| 966 | 973 | ||
| 967 | xhci->devs[slot_id] = kzalloc(sizeof(*xhci->devs[slot_id]), flags); | 974 | dev = kzalloc(sizeof(*dev), flags); |
| 968 | if (!xhci->devs[slot_id]) | 975 | if (!dev) |
| 969 | return 0; | 976 | return 0; |
| 970 | dev = xhci->devs[slot_id]; | ||
| 971 | 977 | ||
| 972 | /* Allocate the (output) device context that will be used in the HC. */ | 978 | /* Allocate the (output) device context that will be used in the HC. */ |
| 973 | dev->out_ctx = xhci_alloc_container_ctx(xhci, XHCI_CTX_TYPE_DEVICE, flags); | 979 | dev->out_ctx = xhci_alloc_container_ctx(xhci, XHCI_CTX_TYPE_DEVICE, flags); |
| @@ -1008,9 +1014,17 @@ int xhci_alloc_virt_device(struct xhci_hcd *xhci, int slot_id, | |||
| 1008 | 1014 | ||
| 1009 | trace_xhci_alloc_virt_device(dev); | 1015 | trace_xhci_alloc_virt_device(dev); |
| 1010 | 1016 | ||
| 1017 | xhci->devs[slot_id] = dev; | ||
| 1018 | |||
| 1011 | return 1; | 1019 | return 1; |
| 1012 | fail: | 1020 | fail: |
| 1013 | xhci_free_virt_device(xhci, slot_id); | 1021 | |
| 1022 | if (dev->in_ctx) | ||
| 1023 | xhci_free_container_ctx(xhci, dev->in_ctx); | ||
| 1024 | if (dev->out_ctx) | ||
| 1025 | xhci_free_container_ctx(xhci, dev->out_ctx); | ||
| 1026 | kfree(dev); | ||
| 1027 | |||
| 1014 | return 0; | 1028 | return 0; |
| 1015 | } | 1029 | } |
| 1016 | 1030 | ||
diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c index c239c688076c..c5cbc685c691 100644 --- a/drivers/usb/host/xhci-ring.c +++ b/drivers/usb/host/xhci-ring.c | |||
| @@ -2477,12 +2477,16 @@ static int handle_tx_event(struct xhci_hcd *xhci, | |||
| 2477 | */ | 2477 | */ |
| 2478 | if (list_empty(&ep_ring->td_list)) { | 2478 | if (list_empty(&ep_ring->td_list)) { |
| 2479 | /* | 2479 | /* |
| 2480 | * A stopped endpoint may generate an extra completion | 2480 | * Don't print wanings if it's due to a stopped endpoint |
| 2481 | * event if the device was suspended. Don't print | 2481 | * generating an extra completion event if the device |
| 2482 | * warnings. | 2482 | * was suspended. Or, a event for the last TRB of a |
| 2483 | * short TD we already got a short event for. | ||
| 2484 | * The short TD is already removed from the TD list. | ||
| 2483 | */ | 2485 | */ |
| 2486 | |||
| 2484 | if (!(trb_comp_code == COMP_STOPPED || | 2487 | if (!(trb_comp_code == COMP_STOPPED || |
| 2485 | trb_comp_code == COMP_STOPPED_LENGTH_INVALID)) { | 2488 | trb_comp_code == COMP_STOPPED_LENGTH_INVALID || |
| 2489 | ep_ring->last_td_was_short)) { | ||
| 2486 | xhci_warn(xhci, "WARN Event TRB for slot %d ep %d with no TDs queued?\n", | 2490 | xhci_warn(xhci, "WARN Event TRB for slot %d ep %d with no TDs queued?\n", |
| 2487 | TRB_TO_SLOT_ID(le32_to_cpu(event->flags)), | 2491 | TRB_TO_SLOT_ID(le32_to_cpu(event->flags)), |
| 2488 | ep_index); | 2492 | ep_index); |
| @@ -3108,7 +3112,7 @@ static u32 xhci_td_remainder(struct xhci_hcd *xhci, int transferred, | |||
| 3108 | { | 3112 | { |
| 3109 | u32 maxp, total_packet_count; | 3113 | u32 maxp, total_packet_count; |
| 3110 | 3114 | ||
| 3111 | /* MTK xHCI is mostly 0.97 but contains some features from 1.0 */ | 3115 | /* MTK xHCI 0.96 contains some features from 1.0 */ |
| 3112 | if (xhci->hci_version < 0x100 && !(xhci->quirks & XHCI_MTK_HOST)) | 3116 | if (xhci->hci_version < 0x100 && !(xhci->quirks & XHCI_MTK_HOST)) |
| 3113 | return ((td_total_len - transferred) >> 10); | 3117 | return ((td_total_len - transferred) >> 10); |
| 3114 | 3118 | ||
| @@ -3117,8 +3121,8 @@ static u32 xhci_td_remainder(struct xhci_hcd *xhci, int transferred, | |||
| 3117 | trb_buff_len == td_total_len) | 3121 | trb_buff_len == td_total_len) |
| 3118 | return 0; | 3122 | return 0; |
| 3119 | 3123 | ||
| 3120 | /* for MTK xHCI, TD size doesn't include this TRB */ | 3124 | /* for MTK xHCI 0.96, TD size include this TRB, but not in 1.x */ |
| 3121 | if (xhci->quirks & XHCI_MTK_HOST) | 3125 | if ((xhci->quirks & XHCI_MTK_HOST) && (xhci->hci_version < 0x100)) |
| 3122 | trb_buff_len = 0; | 3126 | trb_buff_len = 0; |
| 3123 | 3127 | ||
| 3124 | maxp = usb_endpoint_maxp(&urb->ep->desc); | 3128 | maxp = usb_endpoint_maxp(&urb->ep->desc); |
diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c index 0397606a211b..6c036de63272 100644 --- a/drivers/usb/musb/da8xx.c +++ b/drivers/usb/musb/da8xx.c | |||
| @@ -284,7 +284,15 @@ static irqreturn_t da8xx_musb_interrupt(int irq, void *hci) | |||
| 284 | musb->xceiv->otg->state = OTG_STATE_A_WAIT_VRISE; | 284 | musb->xceiv->otg->state = OTG_STATE_A_WAIT_VRISE; |
| 285 | portstate(musb->port1_status |= USB_PORT_STAT_POWER); | 285 | portstate(musb->port1_status |= USB_PORT_STAT_POWER); |
| 286 | del_timer(&musb->dev_timer); | 286 | del_timer(&musb->dev_timer); |
| 287 | } else { | 287 | } else if (!(musb->int_usb & MUSB_INTR_BABBLE)) { |
| 288 | /* | ||
| 289 | * When babble condition happens, drvvbus interrupt | ||
| 290 | * is also generated. Ignore this drvvbus interrupt | ||
| 291 | * and let babble interrupt handler recovers the | ||
| 292 | * controller; otherwise, the host-mode flag is lost | ||
| 293 | * due to the MUSB_DEV_MODE() call below and babble | ||
| 294 | * recovery logic will not be called. | ||
| 295 | */ | ||
| 288 | musb->is_active = 0; | 296 | musb->is_active = 0; |
| 289 | MUSB_DEV_MODE(musb); | 297 | MUSB_DEV_MODE(musb); |
| 290 | otg->default_a = 0; | 298 | otg->default_a = 0; |
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c index aaa7d901a06d..3b3513874cfd 100644 --- a/drivers/usb/serial/option.c +++ b/drivers/usb/serial/option.c | |||
| @@ -238,6 +238,7 @@ static void option_instat_callback(struct urb *urb); | |||
| 238 | /* These Quectel products use Quectel's vendor ID */ | 238 | /* These Quectel products use Quectel's vendor ID */ |
| 239 | #define QUECTEL_PRODUCT_EC21 0x0121 | 239 | #define QUECTEL_PRODUCT_EC21 0x0121 |
| 240 | #define QUECTEL_PRODUCT_EC25 0x0125 | 240 | #define QUECTEL_PRODUCT_EC25 0x0125 |
| 241 | #define QUECTEL_PRODUCT_BG96 0x0296 | ||
| 241 | 242 | ||
| 242 | #define CMOTECH_VENDOR_ID 0x16d8 | 243 | #define CMOTECH_VENDOR_ID 0x16d8 |
| 243 | #define CMOTECH_PRODUCT_6001 0x6001 | 244 | #define CMOTECH_PRODUCT_6001 0x6001 |
| @@ -1182,6 +1183,8 @@ static const struct usb_device_id option_ids[] = { | |||
| 1182 | .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, | 1183 | .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, |
| 1183 | { USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC25), | 1184 | { USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC25), |
| 1184 | .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, | 1185 | .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, |
| 1186 | { USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_BG96), | ||
| 1187 | .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, | ||
| 1185 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6001) }, | 1188 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6001) }, |
| 1186 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CMU_300) }, | 1189 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CMU_300) }, |
| 1187 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6003), | 1190 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6003), |
diff --git a/drivers/usb/serial/usb_debug.c b/drivers/usb/serial/usb_debug.c index ab5a2ac4993a..aaf4813e4971 100644 --- a/drivers/usb/serial/usb_debug.c +++ b/drivers/usb/serial/usb_debug.c | |||
| @@ -31,12 +31,14 @@ static const struct usb_device_id id_table[] = { | |||
| 31 | }; | 31 | }; |
| 32 | 32 | ||
| 33 | static const struct usb_device_id dbc_id_table[] = { | 33 | static const struct usb_device_id dbc_id_table[] = { |
| 34 | { USB_DEVICE(0x1d6b, 0x0010) }, | ||
| 34 | { USB_DEVICE(0x1d6b, 0x0011) }, | 35 | { USB_DEVICE(0x1d6b, 0x0011) }, |
| 35 | { }, | 36 | { }, |
| 36 | }; | 37 | }; |
| 37 | 38 | ||
| 38 | static const struct usb_device_id id_table_combined[] = { | 39 | static const struct usb_device_id id_table_combined[] = { |
| 39 | { USB_DEVICE(0x0525, 0x127a) }, | 40 | { USB_DEVICE(0x0525, 0x127a) }, |
| 41 | { USB_DEVICE(0x1d6b, 0x0010) }, | ||
| 40 | { USB_DEVICE(0x1d6b, 0x0011) }, | 42 | { USB_DEVICE(0x1d6b, 0x0011) }, |
| 41 | { }, | 43 | { }, |
| 42 | }; | 44 | }; |
diff --git a/drivers/usb/storage/uas-detect.h b/drivers/usb/storage/uas-detect.h index 1fcd758a961f..3734a25e09e5 100644 --- a/drivers/usb/storage/uas-detect.h +++ b/drivers/usb/storage/uas-detect.h | |||
| @@ -112,6 +112,10 @@ static int uas_use_uas_driver(struct usb_interface *intf, | |||
| 112 | } | 112 | } |
| 113 | } | 113 | } |
| 114 | 114 | ||
| 115 | /* All Seagate disk enclosures have broken ATA pass-through support */ | ||
| 116 | if (le16_to_cpu(udev->descriptor.idVendor) == 0x0bc2) | ||
| 117 | flags |= US_FL_NO_ATA_1X; | ||
| 118 | |||
| 115 | usb_stor_adjust_quirks(udev, &flags); | 119 | usb_stor_adjust_quirks(udev, &flags); |
| 116 | 120 | ||
| 117 | if (flags & US_FL_IGNORE_UAS) { | 121 | if (flags & US_FL_IGNORE_UAS) { |
diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h index 2968046e7c05..f72d045ee9ef 100644 --- a/drivers/usb/storage/unusual_devs.h +++ b/drivers/usb/storage/unusual_devs.h | |||
| @@ -2100,6 +2100,13 @@ UNUSUAL_DEV( 0x152d, 0x0567, 0x0114, 0x0116, | |||
| 2100 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, | 2100 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, |
| 2101 | US_FL_BROKEN_FUA ), | 2101 | US_FL_BROKEN_FUA ), |
| 2102 | 2102 | ||
| 2103 | /* Reported by David Kozub <zub@linux.fjfi.cvut.cz> */ | ||
| 2104 | UNUSUAL_DEV(0x152d, 0x0578, 0x0000, 0x9999, | ||
| 2105 | "JMicron", | ||
| 2106 | "JMS567", | ||
| 2107 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, | ||
| 2108 | US_FL_BROKEN_FUA), | ||
| 2109 | |||
| 2103 | /* | 2110 | /* |
| 2104 | * Reported by Alexandre Oliva <oliva@lsd.ic.unicamp.br> | 2111 | * Reported by Alexandre Oliva <oliva@lsd.ic.unicamp.br> |
| 2105 | * JMicron responds to USN and several other SCSI ioctls with a | 2112 | * JMicron responds to USN and several other SCSI ioctls with a |
diff --git a/drivers/usb/storage/unusual_uas.h b/drivers/usb/storage/unusual_uas.h index d520374a824e..e6127fb21c12 100644 --- a/drivers/usb/storage/unusual_uas.h +++ b/drivers/usb/storage/unusual_uas.h | |||
| @@ -129,6 +129,13 @@ UNUSUAL_DEV(0x152d, 0x0567, 0x0000, 0x9999, | |||
| 129 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, | 129 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, |
| 130 | US_FL_BROKEN_FUA | US_FL_NO_REPORT_OPCODES), | 130 | US_FL_BROKEN_FUA | US_FL_NO_REPORT_OPCODES), |
| 131 | 131 | ||
| 132 | /* Reported-by: David Kozub <zub@linux.fjfi.cvut.cz> */ | ||
| 133 | UNUSUAL_DEV(0x152d, 0x0578, 0x0000, 0x9999, | ||
| 134 | "JMicron", | ||
| 135 | "JMS567", | ||
| 136 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, | ||
| 137 | US_FL_BROKEN_FUA), | ||
| 138 | |||
| 132 | /* Reported-by: Hans de Goede <hdegoede@redhat.com> */ | 139 | /* Reported-by: Hans de Goede <hdegoede@redhat.com> */ |
| 133 | UNUSUAL_DEV(0x2109, 0x0711, 0x0000, 0x9999, | 140 | UNUSUAL_DEV(0x2109, 0x0711, 0x0000, 0x9999, |
| 134 | "VIA", | 141 | "VIA", |
diff --git a/drivers/usb/typec/Kconfig b/drivers/usb/typec/Kconfig index 465d7da849c3..bcb2744c5977 100644 --- a/drivers/usb/typec/Kconfig +++ b/drivers/usb/typec/Kconfig | |||
| @@ -1,13 +1,53 @@ | |||
| 1 | 1 | ||
| 2 | menu "USB Power Delivery and Type-C drivers" | 2 | menuconfig TYPEC |
| 3 | tristate "USB Type-C Support" | ||
| 4 | help | ||
| 5 | USB Type-C Specification defines a cable and connector for USB where | ||
| 6 | only one type of plug is supported on both ends, i.e. there will not | ||
| 7 | be Type-A plug on one end of the cable and Type-B plug on the other. | ||
| 8 | Determination of the host-to-device relationship happens through a | ||
| 9 | specific Configuration Channel (CC) which goes through the USB Type-C | ||
| 10 | cable. The Configuration Channel may also be used to detect optional | ||
| 11 | Accessory Modes - Analog Audio and Debug - and if USB Power Delivery | ||
| 12 | is supported, the Alternate Modes, where the connector is used for | ||
| 13 | something else then USB communication. | ||
| 14 | |||
| 15 | USB Power Delivery Specification defines a protocol that can be used | ||
| 16 | to negotiate the voltage and current levels with the connected | ||
| 17 | partners. USB Power Delivery allows higher voltages then the normal | ||
| 18 | 5V, up to 20V, and current up to 5A over the cable. The USB Power | ||
| 19 | Delivery protocol is also used to negotiate the optional Alternate | ||
| 20 | Modes when they are supported. USB Power Delivery does not depend on | ||
| 21 | USB Type-C connector, however it is mostly used together with USB | ||
| 22 | Type-C connectors. | ||
| 23 | |||
| 24 | USB Type-C and USB Power Delivery Specifications define a set of state | ||
| 25 | machines that need to be implemented in either software or firmware. | ||
| 26 | Simple USB Type-C PHYs, for example USB Type-C Port Controller | ||
| 27 | Interface Specification compliant "Port Controllers" need the state | ||
| 28 | machines to be handled in the OS, but stand-alone USB Type-C and Power | ||
| 29 | Delivery controllers handle the state machines inside their firmware. | ||
| 30 | The USB Type-C and Power Delivery controllers usually function | ||
| 31 | autonomously, and do not necessarily require drivers. | ||
| 32 | |||
| 33 | Enable this configurations option if you have USB Type-C connectors on | ||
| 34 | your system and 1) you know your USB Type-C hardware requires OS | ||
| 35 | control (a driver) to function, or 2) if you need to be able to read | ||
| 36 | the status of the USB Type-C ports in your system, or 3) if you need | ||
| 37 | to be able to swap the power role (decide are you supplying or | ||
| 38 | consuming power over the cable) or data role (host or device) when | ||
| 39 | both roles are supported. | ||
| 40 | |||
| 41 | For more information, see the kernel documentation for USB Type-C | ||
| 42 | Connector Class API (Documentation/driver-api/usb/typec.rst) | ||
| 43 | <https://www.kernel.org/doc/html/latest/driver-api/usb/typec.html> | ||
| 44 | and ABI (Documentation/ABI/testing/sysfs-class-typec). | ||
| 3 | 45 | ||
| 4 | config TYPEC | 46 | if TYPEC |
| 5 | tristate | ||
| 6 | 47 | ||
| 7 | config TYPEC_TCPM | 48 | config TYPEC_TCPM |
| 8 | tristate "USB Type-C Port Controller Manager" | 49 | tristate "USB Type-C Port Controller Manager" |
| 9 | depends on USB | 50 | depends on USB |
| 10 | select TYPEC | ||
| 11 | help | 51 | help |
| 12 | The Type-C Port Controller Manager provides a USB PD and USB Type-C | 52 | The Type-C Port Controller Manager provides a USB PD and USB Type-C |
| 13 | state machine for use with Type-C Port Controllers. | 53 | state machine for use with Type-C Port Controllers. |
| @@ -22,7 +62,6 @@ config TYPEC_WCOVE | |||
| 22 | depends on INTEL_SOC_PMIC | 62 | depends on INTEL_SOC_PMIC |
| 23 | depends on INTEL_PMC_IPC | 63 | depends on INTEL_PMC_IPC |
| 24 | depends on BXT_WC_PMIC_OPREGION | 64 | depends on BXT_WC_PMIC_OPREGION |
| 25 | select TYPEC | ||
| 26 | help | 65 | help |
| 27 | This driver adds support for USB Type-C detection on Intel Broxton | 66 | This driver adds support for USB Type-C detection on Intel Broxton |
| 28 | platforms that have Intel Whiskey Cove PMIC. The driver can detect the | 67 | platforms that have Intel Whiskey Cove PMIC. The driver can detect the |
| @@ -31,14 +70,13 @@ config TYPEC_WCOVE | |||
| 31 | To compile this driver as module, choose M here: the module will be | 70 | To compile this driver as module, choose M here: the module will be |
| 32 | called typec_wcove | 71 | called typec_wcove |
| 33 | 72 | ||
| 34 | endif | 73 | endif # TYPEC_TCPM |
| 35 | 74 | ||
| 36 | source "drivers/usb/typec/ucsi/Kconfig" | 75 | source "drivers/usb/typec/ucsi/Kconfig" |
| 37 | 76 | ||
| 38 | config TYPEC_TPS6598X | 77 | config TYPEC_TPS6598X |
| 39 | tristate "TI TPS6598x USB Power Delivery controller driver" | 78 | tristate "TI TPS6598x USB Power Delivery controller driver" |
| 40 | depends on I2C | 79 | depends on I2C |
| 41 | select TYPEC | ||
| 42 | help | 80 | help |
| 43 | Say Y or M here if your system has TI TPS65982 or TPS65983 USB Power | 81 | Say Y or M here if your system has TI TPS65982 or TPS65983 USB Power |
| 44 | Delivery controller. | 82 | Delivery controller. |
| @@ -46,4 +84,4 @@ config TYPEC_TPS6598X | |||
| 46 | If you choose to build this driver as a dynamically linked module, the | 84 | If you choose to build this driver as a dynamically linked module, the |
| 47 | module will be called tps6598x.ko. | 85 | module will be called tps6598x.ko. |
| 48 | 86 | ||
| 49 | endmenu | 87 | endif # TYPEC |
diff --git a/drivers/usb/typec/ucsi/Kconfig b/drivers/usb/typec/ucsi/Kconfig index d0c31cee4720..e36d6c73c4a4 100644 --- a/drivers/usb/typec/ucsi/Kconfig +++ b/drivers/usb/typec/ucsi/Kconfig | |||
| @@ -1,7 +1,6 @@ | |||
| 1 | config TYPEC_UCSI | 1 | config TYPEC_UCSI |
| 2 | tristate "USB Type-C Connector System Software Interface driver" | 2 | tristate "USB Type-C Connector System Software Interface driver" |
| 3 | depends on !CPU_BIG_ENDIAN | 3 | depends on !CPU_BIG_ENDIAN |
| 4 | select TYPEC | ||
| 5 | help | 4 | help |
| 6 | USB Type-C Connector System Software Interface (UCSI) is a | 5 | USB Type-C Connector System Software Interface (UCSI) is a |
| 7 | specification for an interface that allows the operating system to | 6 | specification for an interface that allows the operating system to |
diff --git a/drivers/usb/usbip/stub_rx.c b/drivers/usb/usbip/stub_rx.c index 536e037f541f..493ac2928391 100644 --- a/drivers/usb/usbip/stub_rx.c +++ b/drivers/usb/usbip/stub_rx.c | |||
| @@ -322,23 +322,34 @@ static struct stub_priv *stub_priv_alloc(struct stub_device *sdev, | |||
| 322 | return priv; | 322 | return priv; |
| 323 | } | 323 | } |
| 324 | 324 | ||
| 325 | static int get_pipe(struct stub_device *sdev, int epnum, int dir) | 325 | static int get_pipe(struct stub_device *sdev, struct usbip_header *pdu) |
| 326 | { | 326 | { |
| 327 | struct usb_device *udev = sdev->udev; | 327 | struct usb_device *udev = sdev->udev; |
| 328 | struct usb_host_endpoint *ep; | 328 | struct usb_host_endpoint *ep; |
| 329 | struct usb_endpoint_descriptor *epd = NULL; | 329 | struct usb_endpoint_descriptor *epd = NULL; |
| 330 | int epnum = pdu->base.ep; | ||
| 331 | int dir = pdu->base.direction; | ||
| 332 | |||
| 333 | if (epnum < 0 || epnum > 15) | ||
| 334 | goto err_ret; | ||
| 330 | 335 | ||
| 331 | if (dir == USBIP_DIR_IN) | 336 | if (dir == USBIP_DIR_IN) |
| 332 | ep = udev->ep_in[epnum & 0x7f]; | 337 | ep = udev->ep_in[epnum & 0x7f]; |
| 333 | else | 338 | else |
| 334 | ep = udev->ep_out[epnum & 0x7f]; | 339 | ep = udev->ep_out[epnum & 0x7f]; |
| 335 | if (!ep) { | 340 | if (!ep) |
| 336 | dev_err(&sdev->udev->dev, "no such endpoint?, %d\n", | 341 | goto err_ret; |
| 337 | epnum); | ||
| 338 | BUG(); | ||
| 339 | } | ||
| 340 | 342 | ||
| 341 | epd = &ep->desc; | 343 | epd = &ep->desc; |
| 344 | |||
| 345 | /* validate transfer_buffer_length */ | ||
| 346 | if (pdu->u.cmd_submit.transfer_buffer_length > INT_MAX) { | ||
| 347 | dev_err(&sdev->udev->dev, | ||
| 348 | "CMD_SUBMIT: -EMSGSIZE transfer_buffer_length %d\n", | ||
| 349 | pdu->u.cmd_submit.transfer_buffer_length); | ||
| 350 | return -1; | ||
| 351 | } | ||
| 352 | |||
| 342 | if (usb_endpoint_xfer_control(epd)) { | 353 | if (usb_endpoint_xfer_control(epd)) { |
| 343 | if (dir == USBIP_DIR_OUT) | 354 | if (dir == USBIP_DIR_OUT) |
| 344 | return usb_sndctrlpipe(udev, epnum); | 355 | return usb_sndctrlpipe(udev, epnum); |
| @@ -361,15 +372,31 @@ static int get_pipe(struct stub_device *sdev, int epnum, int dir) | |||
| 361 | } | 372 | } |
| 362 | 373 | ||
| 363 | if (usb_endpoint_xfer_isoc(epd)) { | 374 | if (usb_endpoint_xfer_isoc(epd)) { |
| 375 | /* validate packet size and number of packets */ | ||
| 376 | unsigned int maxp, packets, bytes; | ||
| 377 | |||
| 378 | maxp = usb_endpoint_maxp(epd); | ||
| 379 | maxp *= usb_endpoint_maxp_mult(epd); | ||
| 380 | bytes = pdu->u.cmd_submit.transfer_buffer_length; | ||
| 381 | packets = DIV_ROUND_UP(bytes, maxp); | ||
| 382 | |||
| 383 | if (pdu->u.cmd_submit.number_of_packets < 0 || | ||
| 384 | pdu->u.cmd_submit.number_of_packets > packets) { | ||
| 385 | dev_err(&sdev->udev->dev, | ||
| 386 | "CMD_SUBMIT: isoc invalid num packets %d\n", | ||
| 387 | pdu->u.cmd_submit.number_of_packets); | ||
| 388 | return -1; | ||
| 389 | } | ||
| 364 | if (dir == USBIP_DIR_OUT) | 390 | if (dir == USBIP_DIR_OUT) |
| 365 | return usb_sndisocpipe(udev, epnum); | 391 | return usb_sndisocpipe(udev, epnum); |
| 366 | else | 392 | else |
| 367 | return usb_rcvisocpipe(udev, epnum); | 393 | return usb_rcvisocpipe(udev, epnum); |
| 368 | } | 394 | } |
| 369 | 395 | ||
| 396 | err_ret: | ||
| 370 | /* NOT REACHED */ | 397 | /* NOT REACHED */ |
| 371 | dev_err(&sdev->udev->dev, "get pipe, epnum %d\n", epnum); | 398 | dev_err(&sdev->udev->dev, "CMD_SUBMIT: invalid epnum %d\n", epnum); |
| 372 | return 0; | 399 | return -1; |
| 373 | } | 400 | } |
| 374 | 401 | ||
| 375 | static void masking_bogus_flags(struct urb *urb) | 402 | static void masking_bogus_flags(struct urb *urb) |
| @@ -433,7 +460,10 @@ static void stub_recv_cmd_submit(struct stub_device *sdev, | |||
| 433 | struct stub_priv *priv; | 460 | struct stub_priv *priv; |
| 434 | struct usbip_device *ud = &sdev->ud; | 461 | struct usbip_device *ud = &sdev->ud; |
| 435 | struct usb_device *udev = sdev->udev; | 462 | struct usb_device *udev = sdev->udev; |
| 436 | int pipe = get_pipe(sdev, pdu->base.ep, pdu->base.direction); | 463 | int pipe = get_pipe(sdev, pdu); |
| 464 | |||
| 465 | if (pipe == -1) | ||
| 466 | return; | ||
| 437 | 467 | ||
| 438 | priv = stub_priv_alloc(sdev, pdu); | 468 | priv = stub_priv_alloc(sdev, pdu); |
| 439 | if (!priv) | 469 | if (!priv) |
| @@ -452,7 +482,8 @@ static void stub_recv_cmd_submit(struct stub_device *sdev, | |||
| 452 | } | 482 | } |
| 453 | 483 | ||
| 454 | /* allocate urb transfer buffer, if needed */ | 484 | /* allocate urb transfer buffer, if needed */ |
| 455 | if (pdu->u.cmd_submit.transfer_buffer_length > 0) { | 485 | if (pdu->u.cmd_submit.transfer_buffer_length > 0 && |
| 486 | pdu->u.cmd_submit.transfer_buffer_length <= INT_MAX) { | ||
| 456 | priv->urb->transfer_buffer = | 487 | priv->urb->transfer_buffer = |
| 457 | kzalloc(pdu->u.cmd_submit.transfer_buffer_length, | 488 | kzalloc(pdu->u.cmd_submit.transfer_buffer_length, |
| 458 | GFP_KERNEL); | 489 | GFP_KERNEL); |
diff --git a/drivers/usb/usbip/stub_tx.c b/drivers/usb/usbip/stub_tx.c index b18bce96c212..53172b1f6257 100644 --- a/drivers/usb/usbip/stub_tx.c +++ b/drivers/usb/usbip/stub_tx.c | |||
| @@ -167,6 +167,13 @@ static int stub_send_ret_submit(struct stub_device *sdev) | |||
| 167 | memset(&pdu_header, 0, sizeof(pdu_header)); | 167 | memset(&pdu_header, 0, sizeof(pdu_header)); |
| 168 | memset(&msg, 0, sizeof(msg)); | 168 | memset(&msg, 0, sizeof(msg)); |
| 169 | 169 | ||
| 170 | if (urb->actual_length > 0 && !urb->transfer_buffer) { | ||
| 171 | dev_err(&sdev->udev->dev, | ||
| 172 | "urb: actual_length %d transfer_buffer null\n", | ||
| 173 | urb->actual_length); | ||
| 174 | return -1; | ||
| 175 | } | ||
| 176 | |||
| 170 | if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS) | 177 | if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS) |
| 171 | iovnum = 2 + urb->number_of_packets; | 178 | iovnum = 2 + urb->number_of_packets; |
| 172 | else | 179 | else |
diff --git a/drivers/usb/usbip/usbip_common.h b/drivers/usb/usbip/usbip_common.h index e5de35c8c505..473fb8a87289 100644 --- a/drivers/usb/usbip/usbip_common.h +++ b/drivers/usb/usbip/usbip_common.h | |||
| @@ -256,6 +256,7 @@ struct usbip_device { | |||
| 256 | /* lock for status */ | 256 | /* lock for status */ |
| 257 | spinlock_t lock; | 257 | spinlock_t lock; |
| 258 | 258 | ||
| 259 | int sockfd; | ||
| 259 | struct socket *tcp_socket; | 260 | struct socket *tcp_socket; |
| 260 | 261 | ||
| 261 | struct task_struct *tcp_rx; | 262 | struct task_struct *tcp_rx; |
diff --git a/drivers/usb/usbip/vhci_hcd.c b/drivers/usb/usbip/vhci_hcd.c index 713e94170963..6b3278c4b72a 100644 --- a/drivers/usb/usbip/vhci_hcd.c +++ b/drivers/usb/usbip/vhci_hcd.c | |||
| @@ -1098,7 +1098,6 @@ static int hcd_name_to_id(const char *name) | |||
| 1098 | static int vhci_setup(struct usb_hcd *hcd) | 1098 | static int vhci_setup(struct usb_hcd *hcd) |
| 1099 | { | 1099 | { |
| 1100 | struct vhci *vhci = *((void **)dev_get_platdata(hcd->self.controller)); | 1100 | struct vhci *vhci = *((void **)dev_get_platdata(hcd->self.controller)); |
| 1101 | hcd->self.sg_tablesize = ~0; | ||
| 1102 | if (usb_hcd_is_primary_hcd(hcd)) { | 1101 | if (usb_hcd_is_primary_hcd(hcd)) { |
| 1103 | vhci->vhci_hcd_hs = hcd_to_vhci_hcd(hcd); | 1102 | vhci->vhci_hcd_hs = hcd_to_vhci_hcd(hcd); |
| 1104 | vhci->vhci_hcd_hs->vhci = vhci; | 1103 | vhci->vhci_hcd_hs->vhci = vhci; |
diff --git a/drivers/usb/usbip/vhci_sysfs.c b/drivers/usb/usbip/vhci_sysfs.c index e78f7472cac4..091f76b7196d 100644 --- a/drivers/usb/usbip/vhci_sysfs.c +++ b/drivers/usb/usbip/vhci_sysfs.c | |||
| @@ -17,15 +17,20 @@ | |||
| 17 | 17 | ||
| 18 | /* | 18 | /* |
| 19 | * output example: | 19 | * output example: |
| 20 | * hub port sta spd dev socket local_busid | 20 | * hub port sta spd dev sockfd local_busid |
| 21 | * hs 0000 004 000 00000000 c5a7bb80 1-2.3 | 21 | * hs 0000 004 000 00000000 3 1-2.3 |
| 22 | * ................................................ | 22 | * ................................................ |
| 23 | * ss 0008 004 000 00000000 d8cee980 2-3.4 | 23 | * ss 0008 004 000 00000000 4 2-3.4 |
| 24 | * ................................................ | 24 | * ................................................ |
| 25 | * | 25 | * |
| 26 | * IP address can be retrieved from a socket pointer address by looking | 26 | * Output includes socket fd instead of socket pointer address to avoid |
| 27 | * up /proc/net/{tcp,tcp6}. Also, a userland program may remember a | 27 | * leaking kernel memory address in: |
| 28 | * port number and its peer IP address. | 28 | * /sys/devices/platform/vhci_hcd.0/status and in debug output. |
| 29 | * The socket pointer address is not used at the moment and it was made | ||
| 30 | * visible as a convenient way to find IP address from socket pointer | ||
| 31 | * address by looking up /proc/net/{tcp,tcp6}. As this opens a security | ||
| 32 | * hole, the change is made to use sockfd instead. | ||
| 33 | * | ||
| 29 | */ | 34 | */ |
| 30 | static void port_show_vhci(char **out, int hub, int port, struct vhci_device *vdev) | 35 | static void port_show_vhci(char **out, int hub, int port, struct vhci_device *vdev) |
| 31 | { | 36 | { |
| @@ -39,8 +44,8 @@ static void port_show_vhci(char **out, int hub, int port, struct vhci_device *vd | |||
| 39 | if (vdev->ud.status == VDEV_ST_USED) { | 44 | if (vdev->ud.status == VDEV_ST_USED) { |
| 40 | *out += sprintf(*out, "%03u %08x ", | 45 | *out += sprintf(*out, "%03u %08x ", |
| 41 | vdev->speed, vdev->devid); | 46 | vdev->speed, vdev->devid); |
| 42 | *out += sprintf(*out, "%16p %s", | 47 | *out += sprintf(*out, "%u %s", |
| 43 | vdev->ud.tcp_socket, | 48 | vdev->ud.sockfd, |
| 44 | dev_name(&vdev->udev->dev)); | 49 | dev_name(&vdev->udev->dev)); |
| 45 | 50 | ||
| 46 | } else { | 51 | } else { |
| @@ -160,7 +165,8 @@ static ssize_t nports_show(struct device *dev, struct device_attribute *attr, | |||
| 160 | char *s = out; | 165 | char *s = out; |
| 161 | 166 | ||
| 162 | /* | 167 | /* |
| 163 | * Half the ports are for SPEED_HIGH and half for SPEED_SUPER, thus the * 2. | 168 | * Half the ports are for SPEED_HIGH and half for SPEED_SUPER, |
| 169 | * thus the * 2. | ||
| 164 | */ | 170 | */ |
| 165 | out += sprintf(out, "%d\n", VHCI_PORTS * vhci_num_controllers); | 171 | out += sprintf(out, "%d\n", VHCI_PORTS * vhci_num_controllers); |
| 166 | return out - s; | 172 | return out - s; |
| @@ -366,6 +372,7 @@ static ssize_t store_attach(struct device *dev, struct device_attribute *attr, | |||
| 366 | 372 | ||
| 367 | vdev->devid = devid; | 373 | vdev->devid = devid; |
| 368 | vdev->speed = speed; | 374 | vdev->speed = speed; |
| 375 | vdev->ud.sockfd = sockfd; | ||
| 369 | vdev->ud.tcp_socket = socket; | 376 | vdev->ud.tcp_socket = socket; |
| 370 | vdev->ud.status = VDEV_ST_NOTASSIGNED; | 377 | vdev->ud.status = VDEV_ST_NOTASSIGNED; |
| 371 | 378 | ||
diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c index 8d626d7c2e7e..c7bdeb655646 100644 --- a/drivers/vhost/net.c +++ b/drivers/vhost/net.c | |||
| @@ -778,16 +778,6 @@ static void handle_rx(struct vhost_net *net) | |||
| 778 | /* On error, stop handling until the next kick. */ | 778 | /* On error, stop handling until the next kick. */ |
| 779 | if (unlikely(headcount < 0)) | 779 | if (unlikely(headcount < 0)) |
| 780 | goto out; | 780 | goto out; |
| 781 | if (nvq->rx_array) | ||
| 782 | msg.msg_control = vhost_net_buf_consume(&nvq->rxq); | ||
| 783 | /* On overrun, truncate and discard */ | ||
| 784 | if (unlikely(headcount > UIO_MAXIOV)) { | ||
| 785 | iov_iter_init(&msg.msg_iter, READ, vq->iov, 1, 1); | ||
| 786 | err = sock->ops->recvmsg(sock, &msg, | ||
| 787 | 1, MSG_DONTWAIT | MSG_TRUNC); | ||
| 788 | pr_debug("Discarded rx packet: len %zd\n", sock_len); | ||
| 789 | continue; | ||
| 790 | } | ||
| 791 | /* OK, now we need to know about added descriptors. */ | 781 | /* OK, now we need to know about added descriptors. */ |
| 792 | if (!headcount) { | 782 | if (!headcount) { |
| 793 | if (unlikely(vhost_enable_notify(&net->dev, vq))) { | 783 | if (unlikely(vhost_enable_notify(&net->dev, vq))) { |
| @@ -800,6 +790,16 @@ static void handle_rx(struct vhost_net *net) | |||
| 800 | * they refilled. */ | 790 | * they refilled. */ |
| 801 | goto out; | 791 | goto out; |
| 802 | } | 792 | } |
| 793 | if (nvq->rx_array) | ||
| 794 | msg.msg_control = vhost_net_buf_consume(&nvq->rxq); | ||
| 795 | /* On overrun, truncate and discard */ | ||
| 796 | if (unlikely(headcount > UIO_MAXIOV)) { | ||
| 797 | iov_iter_init(&msg.msg_iter, READ, vq->iov, 1, 1); | ||
| 798 | err = sock->ops->recvmsg(sock, &msg, | ||
| 799 | 1, MSG_DONTWAIT | MSG_TRUNC); | ||
| 800 | pr_debug("Discarded rx packet: len %zd\n", sock_len); | ||
| 801 | continue; | ||
| 802 | } | ||
| 803 | /* We don't need to be notified again. */ | 803 | /* We don't need to be notified again. */ |
| 804 | iov_iter_init(&msg.msg_iter, READ, vq->iov, in, vhost_len); | 804 | iov_iter_init(&msg.msg_iter, READ, vq->iov, in, vhost_len); |
| 805 | fixup = msg.msg_iter; | 805 | fixup = msg.msg_iter; |
diff --git a/drivers/virtio/virtio.c b/drivers/virtio/virtio.c index 48230a5e12f2..bf7ff3934d7f 100644 --- a/drivers/virtio/virtio.c +++ b/drivers/virtio/virtio.c | |||
| @@ -333,6 +333,8 @@ int register_virtio_device(struct virtio_device *dev) | |||
| 333 | /* device_register() causes the bus infrastructure to look for a | 333 | /* device_register() causes the bus infrastructure to look for a |
| 334 | * matching driver. */ | 334 | * matching driver. */ |
| 335 | err = device_register(&dev->dev); | 335 | err = device_register(&dev->dev); |
| 336 | if (err) | ||
| 337 | ida_simple_remove(&virtio_index_ida, dev->index); | ||
| 336 | out: | 338 | out: |
| 337 | if (err) | 339 | if (err) |
| 338 | virtio_add_status(dev, VIRTIO_CONFIG_S_FAILED); | 340 | virtio_add_status(dev, VIRTIO_CONFIG_S_FAILED); |
diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c index 7960746f7597..a1fb52cb3f0a 100644 --- a/drivers/virtio/virtio_balloon.c +++ b/drivers/virtio/virtio_balloon.c | |||
| @@ -174,13 +174,12 @@ static unsigned fill_balloon(struct virtio_balloon *vb, size_t num) | |||
| 174 | while ((page = balloon_page_pop(&pages))) { | 174 | while ((page = balloon_page_pop(&pages))) { |
| 175 | balloon_page_enqueue(&vb->vb_dev_info, page); | 175 | balloon_page_enqueue(&vb->vb_dev_info, page); |
| 176 | 176 | ||
| 177 | vb->num_pfns += VIRTIO_BALLOON_PAGES_PER_PAGE; | ||
| 178 | |||
| 179 | set_page_pfns(vb, vb->pfns + vb->num_pfns, page); | 177 | set_page_pfns(vb, vb->pfns + vb->num_pfns, page); |
| 180 | vb->num_pages += VIRTIO_BALLOON_PAGES_PER_PAGE; | 178 | vb->num_pages += VIRTIO_BALLOON_PAGES_PER_PAGE; |
| 181 | if (!virtio_has_feature(vb->vdev, | 179 | if (!virtio_has_feature(vb->vdev, |
| 182 | VIRTIO_BALLOON_F_DEFLATE_ON_OOM)) | 180 | VIRTIO_BALLOON_F_DEFLATE_ON_OOM)) |
| 183 | adjust_managed_page_count(page, -1); | 181 | adjust_managed_page_count(page, -1); |
| 182 | vb->num_pfns += VIRTIO_BALLOON_PAGES_PER_PAGE; | ||
| 184 | } | 183 | } |
| 185 | 184 | ||
| 186 | num_allocated_pages = vb->num_pfns; | 185 | num_allocated_pages = vb->num_pfns; |
diff --git a/drivers/virtio/virtio_mmio.c b/drivers/virtio/virtio_mmio.c index 74dc7170fd35..c92131edfaba 100644 --- a/drivers/virtio/virtio_mmio.c +++ b/drivers/virtio/virtio_mmio.c | |||
| @@ -493,7 +493,16 @@ static const struct virtio_config_ops virtio_mmio_config_ops = { | |||
| 493 | }; | 493 | }; |
| 494 | 494 | ||
| 495 | 495 | ||
| 496 | static void virtio_mmio_release_dev_empty(struct device *_d) {} | 496 | static void virtio_mmio_release_dev(struct device *_d) |
| 497 | { | ||
| 498 | struct virtio_device *vdev = | ||
| 499 | container_of(_d, struct virtio_device, dev); | ||
| 500 | struct virtio_mmio_device *vm_dev = | ||
| 501 | container_of(vdev, struct virtio_mmio_device, vdev); | ||
| 502 | struct platform_device *pdev = vm_dev->pdev; | ||
| 503 | |||
| 504 | devm_kfree(&pdev->dev, vm_dev); | ||
| 505 | } | ||
| 497 | 506 | ||
| 498 | /* Platform device */ | 507 | /* Platform device */ |
| 499 | 508 | ||
| @@ -514,10 +523,10 @@ static int virtio_mmio_probe(struct platform_device *pdev) | |||
| 514 | 523 | ||
| 515 | vm_dev = devm_kzalloc(&pdev->dev, sizeof(*vm_dev), GFP_KERNEL); | 524 | vm_dev = devm_kzalloc(&pdev->dev, sizeof(*vm_dev), GFP_KERNEL); |
| 516 | if (!vm_dev) | 525 | if (!vm_dev) |
| 517 | return -ENOMEM; | 526 | return -ENOMEM; |
| 518 | 527 | ||
| 519 | vm_dev->vdev.dev.parent = &pdev->dev; | 528 | vm_dev->vdev.dev.parent = &pdev->dev; |
| 520 | vm_dev->vdev.dev.release = virtio_mmio_release_dev_empty; | 529 | vm_dev->vdev.dev.release = virtio_mmio_release_dev; |
| 521 | vm_dev->vdev.config = &virtio_mmio_config_ops; | 530 | vm_dev->vdev.config = &virtio_mmio_config_ops; |
| 522 | vm_dev->pdev = pdev; | 531 | vm_dev->pdev = pdev; |
| 523 | INIT_LIST_HEAD(&vm_dev->virtqueues); | 532 | INIT_LIST_HEAD(&vm_dev->virtqueues); |
| @@ -573,13 +582,16 @@ static int virtio_mmio_probe(struct platform_device *pdev) | |||
| 573 | 582 | ||
| 574 | platform_set_drvdata(pdev, vm_dev); | 583 | platform_set_drvdata(pdev, vm_dev); |
| 575 | 584 | ||
| 576 | return register_virtio_device(&vm_dev->vdev); | 585 | rc = register_virtio_device(&vm_dev->vdev); |
| 586 | if (rc) | ||
| 587 | put_device(&vm_dev->vdev.dev); | ||
| 588 | |||
| 589 | return rc; | ||
| 577 | } | 590 | } |
| 578 | 591 | ||
| 579 | static int virtio_mmio_remove(struct platform_device *pdev) | 592 | static int virtio_mmio_remove(struct platform_device *pdev) |
| 580 | { | 593 | { |
| 581 | struct virtio_mmio_device *vm_dev = platform_get_drvdata(pdev); | 594 | struct virtio_mmio_device *vm_dev = platform_get_drvdata(pdev); |
| 582 | |||
| 583 | unregister_virtio_device(&vm_dev->vdev); | 595 | unregister_virtio_device(&vm_dev->vdev); |
| 584 | 596 | ||
| 585 | return 0; | 597 | return 0; |
diff --git a/drivers/xen/Kconfig b/drivers/xen/Kconfig index d8dd54678ab7..e5d0c28372ea 100644 --- a/drivers/xen/Kconfig +++ b/drivers/xen/Kconfig | |||
| @@ -269,7 +269,7 @@ config XEN_ACPI_HOTPLUG_CPU | |||
| 269 | 269 | ||
| 270 | config XEN_ACPI_PROCESSOR | 270 | config XEN_ACPI_PROCESSOR |
| 271 | tristate "Xen ACPI processor" | 271 | tristate "Xen ACPI processor" |
| 272 | depends on XEN && X86 && ACPI_PROCESSOR && CPU_FREQ | 272 | depends on XEN && XEN_DOM0 && X86 && ACPI_PROCESSOR && CPU_FREQ |
| 273 | default m | 273 | default m |
| 274 | help | 274 | help |
| 275 | This ACPI processor uploads Power Management information to the Xen | 275 | This ACPI processor uploads Power Management information to the Xen |
diff --git a/drivers/xen/pvcalls-front.c b/drivers/xen/pvcalls-front.c index 40caa92bff33..d1e1d8d2b9d5 100644 --- a/drivers/xen/pvcalls-front.c +++ b/drivers/xen/pvcalls-front.c | |||
| @@ -1103,7 +1103,7 @@ static int pvcalls_front_remove(struct xenbus_device *dev) | |||
| 1103 | kfree(map); | 1103 | kfree(map); |
| 1104 | } | 1104 | } |
| 1105 | } | 1105 | } |
| 1106 | if (bedata->ref >= 0) | 1106 | if (bedata->ref != -1) |
| 1107 | gnttab_end_foreign_access(bedata->ref, 0, 0); | 1107 | gnttab_end_foreign_access(bedata->ref, 0, 0); |
| 1108 | kfree(bedata->ring.sring); | 1108 | kfree(bedata->ring.sring); |
| 1109 | kfree(bedata); | 1109 | kfree(bedata); |
| @@ -1128,6 +1128,8 @@ static int pvcalls_front_probe(struct xenbus_device *dev, | |||
| 1128 | } | 1128 | } |
| 1129 | 1129 | ||
| 1130 | versions = xenbus_read(XBT_NIL, dev->otherend, "versions", &len); | 1130 | versions = xenbus_read(XBT_NIL, dev->otherend, "versions", &len); |
| 1131 | if (IS_ERR(versions)) | ||
| 1132 | return PTR_ERR(versions); | ||
| 1131 | if (!len) | 1133 | if (!len) |
| 1132 | return -EINVAL; | 1134 | return -EINVAL; |
| 1133 | if (strcmp(versions, "1")) { | 1135 | if (strcmp(versions, "1")) { |
