gsi.c (c778980a6594880204a44207e5cdceea6e859a1c) gsi.c (aba7924fa5a490d6c586b9cd7d0f78f872a40d1d)
1// SPDX-License-Identifier: GPL-2.0
2
3/* Copyright (c) 2015-2018, The Linux Foundation. All rights reserved.
4 * Copyright (C) 2018-2020 Linaro Ltd.
5 */
6
7#include <linux/types.h>
8#include <linux/bits.h>

--- 402 unchanged lines hidden (view full) ---

411
412 ret = evt_ring_command(gsi, evt_ring_id, GSI_EVT_DE_ALLOC);
413 if (!ret && evt_ring->state != GSI_EVT_RING_STATE_NOT_ALLOCATED)
414 dev_err(gsi->dev, "bad event ring state (%u) after dealloc\n",
415 evt_ring->state);
416}
417
418/* Return the hardware's notion of the current state of a channel */
1// SPDX-License-Identifier: GPL-2.0
2
3/* Copyright (c) 2015-2018, The Linux Foundation. All rights reserved.
4 * Copyright (C) 2018-2020 Linaro Ltd.
5 */
6
7#include <linux/types.h>
8#include <linux/bits.h>

--- 402 unchanged lines hidden (view full) ---

411
412 ret = evt_ring_command(gsi, evt_ring_id, GSI_EVT_DE_ALLOC);
413 if (!ret && evt_ring->state != GSI_EVT_RING_STATE_NOT_ALLOCATED)
414 dev_err(gsi->dev, "bad event ring state (%u) after dealloc\n",
415 evt_ring->state);
416}
417
418/* Return the hardware's notion of the current state of a channel */
419static enum gsi_channel_state
420gsi_channel_state(struct gsi *gsi, u32 channel_id)
419static enum gsi_channel_state gsi_channel_state(struct gsi_channel *channel)
421{
420{
421 u32 channel_id = gsi_channel_id(channel);
422 void *virt = channel->gsi->virt;
422 u32 val;
423
423 u32 val;
424
424 val = ioread32(gsi->virt + GSI_CH_C_CNTXT_0_OFFSET(channel_id));
425 val = ioread32(virt + GSI_CH_C_CNTXT_0_OFFSET(channel_id));
425
426 return u32_get_bits(val, CHSTATE_FMASK);
427}
428
429/* Issue a channel command and wait for it to complete */
430static int
431gsi_channel_command(struct gsi_channel *channel, enum gsi_ch_cmd_opcode opcode)
432{

--- 15 unchanged lines hidden (view full) ---

448
449/* Allocate GSI channel in NOT_ALLOCATED state */
450static int gsi_channel_alloc_command(struct gsi *gsi, u32 channel_id)
451{
452 struct gsi_channel *channel = &gsi->channel[channel_id];
453 int ret;
454
455 /* Get initial channel state */
426
427 return u32_get_bits(val, CHSTATE_FMASK);
428}
429
430/* Issue a channel command and wait for it to complete */
431static int
432gsi_channel_command(struct gsi_channel *channel, enum gsi_ch_cmd_opcode opcode)
433{

--- 15 unchanged lines hidden (view full) ---

449
450/* Allocate GSI channel in NOT_ALLOCATED state */
451static int gsi_channel_alloc_command(struct gsi *gsi, u32 channel_id)
452{
453 struct gsi_channel *channel = &gsi->channel[channel_id];
454 int ret;
455
456 /* Get initial channel state */
456 channel->state = gsi_channel_state(gsi, channel_id);
457 channel->state = gsi_channel_state(channel);
457
458 if (channel->state != GSI_CHANNEL_STATE_NOT_ALLOCATED)
459 return -EINVAL;
460
461 ret = gsi_channel_command(channel, GSI_CH_ALLOCATE);
462 if (!ret && channel->state != GSI_CHANNEL_STATE_ALLOCATED) {
463 dev_err(gsi->dev, "bad channel state (%u) after alloc\n",
464 channel->state);

--- 470 unchanged lines hidden (view full) ---

935
936 while (channel_mask) {
937 u32 channel_id = __ffs(channel_mask);
938 struct gsi_channel *channel;
939
940 channel_mask ^= BIT(channel_id);
941
942 channel = &gsi->channel[channel_id];
458
459 if (channel->state != GSI_CHANNEL_STATE_NOT_ALLOCATED)
460 return -EINVAL;
461
462 ret = gsi_channel_command(channel, GSI_CH_ALLOCATE);
463 if (!ret && channel->state != GSI_CHANNEL_STATE_ALLOCATED) {
464 dev_err(gsi->dev, "bad channel state (%u) after alloc\n",
465 channel->state);

--- 470 unchanged lines hidden (view full) ---

936
937 while (channel_mask) {
938 u32 channel_id = __ffs(channel_mask);
939 struct gsi_channel *channel;
940
941 channel_mask ^= BIT(channel_id);
942
943 channel = &gsi->channel[channel_id];
943 channel->state = gsi_channel_state(gsi, channel_id);
944 channel->state = gsi_channel_state(channel);
944
945 complete(&channel->completion);
946 }
947}
948
949/* Event ring control interrupt handler */
950static void gsi_isr_evt_ctrl(struct gsi *gsi)
951{

--- 84 unchanged lines hidden (view full) ---

1036
1037 val = ioread32(gsi->virt + GSI_CNTXT_SCRATCH_0_OFFSET);
1038 result = u32_get_bits(val, GENERIC_EE_RESULT_FMASK);
1039 if (result != GENERIC_EE_SUCCESS_FVAL)
1040 dev_err(gsi->dev, "global INT1 generic result %u\n", result);
1041
1042 complete(&gsi->completion);
1043}
945
946 complete(&channel->completion);
947 }
948}
949
950/* Event ring control interrupt handler */
951static void gsi_isr_evt_ctrl(struct gsi *gsi)
952{

--- 84 unchanged lines hidden (view full) ---

1037
1038 val = ioread32(gsi->virt + GSI_CNTXT_SCRATCH_0_OFFSET);
1039 result = u32_get_bits(val, GENERIC_EE_RESULT_FMASK);
1040 if (result != GENERIC_EE_SUCCESS_FVAL)
1041 dev_err(gsi->dev, "global INT1 generic result %u\n", result);
1042
1043 complete(&gsi->completion);
1044}
1044
1045/* Inter-EE interrupt handler */
1046static void gsi_isr_glob_ee(struct gsi *gsi)
1047{
1048 u32 val;
1049
1050 val = ioread32(gsi->virt + GSI_CNTXT_GLOB_IRQ_STTS_OFFSET);
1051
1052 if (val & ERROR_INT_FMASK)

--- 436 unchanged lines hidden (view full) ---

1489}
1490
1491static int gsi_generic_command(struct gsi *gsi, u32 channel_id,
1492 enum gsi_generic_cmd_opcode opcode)
1493{
1494 struct completion *completion = &gsi->completion;
1495 u32 val;
1496
1045/* Inter-EE interrupt handler */
1046static void gsi_isr_glob_ee(struct gsi *gsi)
1047{
1048 u32 val;
1049
1050 val = ioread32(gsi->virt + GSI_CNTXT_GLOB_IRQ_STTS_OFFSET);
1051
1052 if (val & ERROR_INT_FMASK)

--- 436 unchanged lines hidden (view full) ---

1489}
1490
1491static int gsi_generic_command(struct gsi *gsi, u32 channel_id,
1492 enum gsi_generic_cmd_opcode opcode)
1493{
1494 struct completion *completion = &gsi->completion;
1495 u32 val;
1496
1497 /* First zero the result code field */
1498 val = ioread32(gsi->virt + GSI_CNTXT_SCRATCH_0_OFFSET);
1499 val &= ~GENERIC_EE_RESULT_FMASK;
1500 iowrite32(val, gsi->virt + GSI_CNTXT_SCRATCH_0_OFFSET);
1501
1502 /* Now issue the command */
1503 val = u32_encode_bits(opcode, GENERIC_OPCODE_FMASK);
1504 val |= u32_encode_bits(channel_id, GENERIC_CHID_FMASK);
1505 val |= u32_encode_bits(GSI_EE_MODEM, GENERIC_EE_FMASK);
1506
1507 if (gsi_command(gsi, GSI_GENERIC_CMD_OFFSET, val, completion))
1508 return 0; /* Success! */
1509
1510 dev_err(gsi->dev, "GSI generic command %u to channel %u timed out\n",

--- 289 unchanged lines hidden (view full) ---

1800 u32 tre_count;
1801 int ret;
1802
1803 if (!gsi_channel_data_valid(gsi, data))
1804 return -EINVAL;
1805
1806 /* Worst case we need an event for every outstanding TRE */
1807 if (data->channel.tre_count > data->channel.event_count) {
1497 val = u32_encode_bits(opcode, GENERIC_OPCODE_FMASK);
1498 val |= u32_encode_bits(channel_id, GENERIC_CHID_FMASK);
1499 val |= u32_encode_bits(GSI_EE_MODEM, GENERIC_EE_FMASK);
1500
1501 if (gsi_command(gsi, GSI_GENERIC_CMD_OFFSET, val, completion))
1502 return 0; /* Success! */
1503
1504 dev_err(gsi->dev, "GSI generic command %u to channel %u timed out\n",

--- 289 unchanged lines hidden (view full) ---

1794 u32 tre_count;
1795 int ret;
1796
1797 if (!gsi_channel_data_valid(gsi, data))
1798 return -EINVAL;
1799
1800 /* Worst case we need an event for every outstanding TRE */
1801 if (data->channel.tre_count > data->channel.event_count) {
1808 tre_count = data->channel.event_count;
1809 dev_warn(gsi->dev, "channel %u limited to %u TREs\n",
1802 dev_warn(gsi->dev, "channel %u limited to %u TREs\n",
1810 data->channel_id, tre_count);
1803 data->channel_id, data->channel.tre_count);
1804 tre_count = data->channel.event_count;
1811 } else {
1812 tre_count = data->channel.tre_count;
1813 }
1814
1815 channel = &gsi->channel[data->channel_id];
1816 memset(channel, 0, sizeof(*channel));
1817
1818 channel->gsi = gsi;

--- 244 unchanged lines hidden ---
1805 } else {
1806 tre_count = data->channel.tre_count;
1807 }
1808
1809 channel = &gsi->channel[data->channel_id];
1810 memset(channel, 0, sizeof(*channel));
1811
1812 channel->gsi = gsi;

--- 244 unchanged lines hidden ---