diff options
| -rw-r--r-- | arch/arm/boot/dts/stm32mp157c.dtsi | 2 | ||||
| -rw-r--r-- | arch/arm/configs/multi_v7_defconfig | 1 | ||||
| -rw-r--r-- | arch/arm/mach-omap1/board-ams-delta.c | 8 | ||||
| -rw-r--r-- | arch/arm/plat-orion/mpp.c | 7 | ||||
| -rw-r--r-- | arch/arm64/configs/defconfig | 3 | ||||
| -rw-r--r-- | drivers/soc/ti/knav_qmss.h | 4 | ||||
| -rw-r--r-- | drivers/soc/ti/knav_qmss_acc.c | 10 | ||||
| -rw-r--r-- | drivers/soc/ti/knav_qmss_queue.c | 22 |
8 files changed, 35 insertions, 22 deletions
diff --git a/arch/arm/boot/dts/stm32mp157c.dtsi b/arch/arm/boot/dts/stm32mp157c.dtsi index c50c36baba75..8bf1c17f8cef 100644 --- a/arch/arm/boot/dts/stm32mp157c.dtsi +++ b/arch/arm/boot/dts/stm32mp157c.dtsi | |||
| @@ -923,7 +923,7 @@ | |||
| 923 | interrupts = <GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>; | 923 | interrupts = <GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>; |
| 924 | clocks = <&rcc HASH1>; | 924 | clocks = <&rcc HASH1>; |
| 925 | resets = <&rcc HASH1_R>; | 925 | resets = <&rcc HASH1_R>; |
| 926 | dmas = <&mdma1 31 0x10 0x1000A02 0x0 0x0 0x0>; | 926 | dmas = <&mdma1 31 0x10 0x1000A02 0x0 0x0>; |
| 927 | dma-names = "in"; | 927 | dma-names = "in"; |
| 928 | dma-maxburst = <2>; | 928 | dma-maxburst = <2>; |
| 929 | status = "disabled"; | 929 | status = "disabled"; |
diff --git a/arch/arm/configs/multi_v7_defconfig b/arch/arm/configs/multi_v7_defconfig index 63af6234c1b6..1c7616815a86 100644 --- a/arch/arm/configs/multi_v7_defconfig +++ b/arch/arm/configs/multi_v7_defconfig | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | CONFIG_SYSVIPC=y | 1 | CONFIG_SYSVIPC=y |
| 2 | CONFIG_NO_HZ=y | 2 | CONFIG_NO_HZ=y |
| 3 | CONFIG_HIGH_RES_TIMERS=y | 3 | CONFIG_HIGH_RES_TIMERS=y |
| 4 | CONFIG_PREEMPT=y | ||
| 4 | CONFIG_CGROUPS=y | 5 | CONFIG_CGROUPS=y |
| 5 | CONFIG_BLK_DEV_INITRD=y | 6 | CONFIG_BLK_DEV_INITRD=y |
| 6 | CONFIG_EMBEDDED=y | 7 | CONFIG_EMBEDDED=y |
diff --git a/arch/arm/mach-omap1/board-ams-delta.c b/arch/arm/mach-omap1/board-ams-delta.c index af318d958fd2..3d191fd52910 100644 --- a/arch/arm/mach-omap1/board-ams-delta.c +++ b/arch/arm/mach-omap1/board-ams-delta.c | |||
| @@ -773,7 +773,7 @@ static struct plat_serial8250_port ams_delta_modem_ports[] = { | |||
| 773 | { | 773 | { |
| 774 | .membase = IOMEM(MODEM_VIRT), | 774 | .membase = IOMEM(MODEM_VIRT), |
| 775 | .mapbase = MODEM_PHYS, | 775 | .mapbase = MODEM_PHYS, |
| 776 | .irq = -EINVAL, /* changed later */ | 776 | .irq = IRQ_NOTCONNECTED, /* changed later */ |
| 777 | .flags = UPF_BOOT_AUTOCONF, | 777 | .flags = UPF_BOOT_AUTOCONF, |
| 778 | .irqflags = IRQF_TRIGGER_RISING, | 778 | .irqflags = IRQF_TRIGGER_RISING, |
| 779 | .iotype = UPIO_MEM, | 779 | .iotype = UPIO_MEM, |
| @@ -864,8 +864,7 @@ static int __init modem_nreset_init(void) | |||
| 864 | 864 | ||
| 865 | 865 | ||
| 866 | /* | 866 | /* |
| 867 | * This function expects MODEM IRQ number already assigned to the port | 867 | * This function expects MODEM IRQ number already assigned to the port. |
| 868 | * and fails if it's not. | ||
| 869 | * The MODEM device requires its RESET# pin kept high during probe. | 868 | * The MODEM device requires its RESET# pin kept high during probe. |
| 870 | * That requirement can be fulfilled in several ways: | 869 | * That requirement can be fulfilled in several ways: |
| 871 | * - with a descriptor of already functional modem_nreset regulator | 870 | * - with a descriptor of already functional modem_nreset regulator |
| @@ -888,9 +887,6 @@ static int __init ams_delta_modem_init(void) | |||
| 888 | if (!machine_is_ams_delta()) | 887 | if (!machine_is_ams_delta()) |
| 889 | return -ENODEV; | 888 | return -ENODEV; |
| 890 | 889 | ||
| 891 | if (ams_delta_modem_ports[0].irq < 0) | ||
| 892 | return ams_delta_modem_ports[0].irq; | ||
| 893 | |||
| 894 | omap_cfg_reg(M14_1510_GPIO2); | 890 | omap_cfg_reg(M14_1510_GPIO2); |
| 895 | 891 | ||
| 896 | /* Initialize the modem_nreset regulator consumer before use */ | 892 | /* Initialize the modem_nreset regulator consumer before use */ |
diff --git a/arch/arm/plat-orion/mpp.c b/arch/arm/plat-orion/mpp.c index 5b4ff9373c89..8a6880d528b6 100644 --- a/arch/arm/plat-orion/mpp.c +++ b/arch/arm/plat-orion/mpp.c | |||
| @@ -28,10 +28,15 @@ void __init orion_mpp_conf(unsigned int *mpp_list, unsigned int variant_mask, | |||
| 28 | unsigned int mpp_max, void __iomem *dev_bus) | 28 | unsigned int mpp_max, void __iomem *dev_bus) |
| 29 | { | 29 | { |
| 30 | unsigned int mpp_nr_regs = (1 + mpp_max/8); | 30 | unsigned int mpp_nr_regs = (1 + mpp_max/8); |
| 31 | u32 mpp_ctrl[mpp_nr_regs]; | 31 | u32 mpp_ctrl[8]; |
| 32 | int i; | 32 | int i; |
| 33 | 33 | ||
| 34 | printk(KERN_DEBUG "initial MPP regs:"); | 34 | printk(KERN_DEBUG "initial MPP regs:"); |
| 35 | if (mpp_nr_regs > ARRAY_SIZE(mpp_ctrl)) { | ||
| 36 | printk(KERN_ERR "orion_mpp_conf: invalid mpp_max\n"); | ||
| 37 | return; | ||
| 38 | } | ||
| 39 | |||
| 35 | for (i = 0; i < mpp_nr_regs; i++) { | 40 | for (i = 0; i < mpp_nr_regs; i++) { |
| 36 | mpp_ctrl[i] = readl(mpp_ctrl_addr(i, dev_bus)); | 41 | mpp_ctrl[i] = readl(mpp_ctrl_addr(i, dev_bus)); |
| 37 | printk(" %08x", mpp_ctrl[i]); | 42 | printk(" %08x", mpp_ctrl[i]); |
diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig index 3cb995606e60..c9a57d11330b 100644 --- a/arch/arm64/configs/defconfig +++ b/arch/arm64/configs/defconfig | |||
| @@ -308,6 +308,9 @@ CONFIG_SERIAL_XILINX_PS_UART_CONSOLE=y | |||
| 308 | CONFIG_SERIAL_MVEBU_UART=y | 308 | CONFIG_SERIAL_MVEBU_UART=y |
| 309 | CONFIG_SERIAL_DEV_BUS=y | 309 | CONFIG_SERIAL_DEV_BUS=y |
| 310 | CONFIG_VIRTIO_CONSOLE=y | 310 | CONFIG_VIRTIO_CONSOLE=y |
| 311 | CONFIG_IPMI_HANDLER=m | ||
| 312 | CONFIG_IPMI_DEVICE_INTERFACE=m | ||
| 313 | CONFIG_IPMI_SI=m | ||
| 311 | CONFIG_TCG_TPM=y | 314 | CONFIG_TCG_TPM=y |
| 312 | CONFIG_TCG_TIS_I2C_INFINEON=y | 315 | CONFIG_TCG_TIS_I2C_INFINEON=y |
| 313 | CONFIG_I2C_CHARDEV=y | 316 | CONFIG_I2C_CHARDEV=y |
diff --git a/drivers/soc/ti/knav_qmss.h b/drivers/soc/ti/knav_qmss.h index 7c128132799e..4c28fa938ac7 100644 --- a/drivers/soc/ti/knav_qmss.h +++ b/drivers/soc/ti/knav_qmss.h | |||
| @@ -329,8 +329,8 @@ struct knav_range_ops { | |||
| 329 | }; | 329 | }; |
| 330 | 330 | ||
| 331 | struct knav_irq_info { | 331 | struct knav_irq_info { |
| 332 | int irq; | 332 | int irq; |
| 333 | u32 cpu_map; | 333 | struct cpumask *cpu_mask; |
| 334 | }; | 334 | }; |
| 335 | 335 | ||
| 336 | struct knav_range_info { | 336 | struct knav_range_info { |
diff --git a/drivers/soc/ti/knav_qmss_acc.c b/drivers/soc/ti/knav_qmss_acc.c index 316e82e46f6c..2f7fb2dcc1d6 100644 --- a/drivers/soc/ti/knav_qmss_acc.c +++ b/drivers/soc/ti/knav_qmss_acc.c | |||
| @@ -205,18 +205,18 @@ static int knav_range_setup_acc_irq(struct knav_range_info *range, | |||
| 205 | { | 205 | { |
| 206 | struct knav_device *kdev = range->kdev; | 206 | struct knav_device *kdev = range->kdev; |
| 207 | struct knav_acc_channel *acc; | 207 | struct knav_acc_channel *acc; |
| 208 | unsigned long cpu_map; | 208 | struct cpumask *cpu_mask; |
| 209 | int ret = 0, irq; | 209 | int ret = 0, irq; |
| 210 | u32 old, new; | 210 | u32 old, new; |
| 211 | 211 | ||
| 212 | if (range->flags & RANGE_MULTI_QUEUE) { | 212 | if (range->flags & RANGE_MULTI_QUEUE) { |
| 213 | acc = range->acc; | 213 | acc = range->acc; |
| 214 | irq = range->irqs[0].irq; | 214 | irq = range->irqs[0].irq; |
| 215 | cpu_map = range->irqs[0].cpu_map; | 215 | cpu_mask = range->irqs[0].cpu_mask; |
| 216 | } else { | 216 | } else { |
| 217 | acc = range->acc + queue; | 217 | acc = range->acc + queue; |
| 218 | irq = range->irqs[queue].irq; | 218 | irq = range->irqs[queue].irq; |
| 219 | cpu_map = range->irqs[queue].cpu_map; | 219 | cpu_mask = range->irqs[queue].cpu_mask; |
| 220 | } | 220 | } |
| 221 | 221 | ||
| 222 | old = acc->open_mask; | 222 | old = acc->open_mask; |
| @@ -239,8 +239,8 @@ static int knav_range_setup_acc_irq(struct knav_range_info *range, | |||
| 239 | acc->name, acc->name); | 239 | acc->name, acc->name); |
| 240 | ret = request_irq(irq, knav_acc_int_handler, 0, acc->name, | 240 | ret = request_irq(irq, knav_acc_int_handler, 0, acc->name, |
| 241 | range); | 241 | range); |
| 242 | if (!ret && cpu_map) { | 242 | if (!ret && cpu_mask) { |
| 243 | ret = irq_set_affinity_hint(irq, to_cpumask(&cpu_map)); | 243 | ret = irq_set_affinity_hint(irq, cpu_mask); |
| 244 | if (ret) { | 244 | if (ret) { |
| 245 | dev_warn(range->kdev->dev, | 245 | dev_warn(range->kdev->dev, |
| 246 | "Failed to set IRQ affinity\n"); | 246 | "Failed to set IRQ affinity\n"); |
diff --git a/drivers/soc/ti/knav_qmss_queue.c b/drivers/soc/ti/knav_qmss_queue.c index b5d5673c255c..8b418379272d 100644 --- a/drivers/soc/ti/knav_qmss_queue.c +++ b/drivers/soc/ti/knav_qmss_queue.c | |||
| @@ -118,19 +118,17 @@ static int knav_queue_setup_irq(struct knav_range_info *range, | |||
| 118 | struct knav_queue_inst *inst) | 118 | struct knav_queue_inst *inst) |
| 119 | { | 119 | { |
| 120 | unsigned queue = inst->id - range->queue_base; | 120 | unsigned queue = inst->id - range->queue_base; |
| 121 | unsigned long cpu_map; | ||
| 122 | int ret = 0, irq; | 121 | int ret = 0, irq; |
| 123 | 122 | ||
| 124 | if (range->flags & RANGE_HAS_IRQ) { | 123 | if (range->flags & RANGE_HAS_IRQ) { |
| 125 | irq = range->irqs[queue].irq; | 124 | irq = range->irqs[queue].irq; |
| 126 | cpu_map = range->irqs[queue].cpu_map; | ||
| 127 | ret = request_irq(irq, knav_queue_int_handler, 0, | 125 | ret = request_irq(irq, knav_queue_int_handler, 0, |
| 128 | inst->irq_name, inst); | 126 | inst->irq_name, inst); |
| 129 | if (ret) | 127 | if (ret) |
| 130 | return ret; | 128 | return ret; |
| 131 | disable_irq(irq); | 129 | disable_irq(irq); |
| 132 | if (cpu_map) { | 130 | if (range->irqs[queue].cpu_mask) { |
| 133 | ret = irq_set_affinity_hint(irq, to_cpumask(&cpu_map)); | 131 | ret = irq_set_affinity_hint(irq, range->irqs[queue].cpu_mask); |
| 134 | if (ret) { | 132 | if (ret) { |
| 135 | dev_warn(range->kdev->dev, | 133 | dev_warn(range->kdev->dev, |
| 136 | "Failed to set IRQ affinity\n"); | 134 | "Failed to set IRQ affinity\n"); |
| @@ -1262,9 +1260,19 @@ static int knav_setup_queue_range(struct knav_device *kdev, | |||
| 1262 | 1260 | ||
| 1263 | range->num_irqs++; | 1261 | range->num_irqs++; |
| 1264 | 1262 | ||
| 1265 | if (IS_ENABLED(CONFIG_SMP) && oirq.args_count == 3) | 1263 | if (IS_ENABLED(CONFIG_SMP) && oirq.args_count == 3) { |
| 1266 | range->irqs[i].cpu_map = | 1264 | unsigned long mask; |
| 1267 | (oirq.args[2] & 0x0000ff00) >> 8; | 1265 | int bit; |
| 1266 | |||
| 1267 | range->irqs[i].cpu_mask = devm_kzalloc(dev, | ||
| 1268 | cpumask_size(), GFP_KERNEL); | ||
| 1269 | if (!range->irqs[i].cpu_mask) | ||
| 1270 | return -ENOMEM; | ||
| 1271 | |||
| 1272 | mask = (oirq.args[2] & 0x0000ff00) >> 8; | ||
| 1273 | for_each_set_bit(bit, &mask, BITS_PER_LONG) | ||
| 1274 | cpumask_set_cpu(bit, range->irqs[i].cpu_mask); | ||
| 1275 | } | ||
| 1268 | } | 1276 | } |
| 1269 | 1277 | ||
| 1270 | range->num_irqs = min(range->num_irqs, range->num_queues); | 1278 | range->num_irqs = min(range->num_irqs, range->num_queues); |
