Commit f86a1909 authored by Alex Elder's avatar Alex Elder Committed by David S. Miller

net: ipa: rename db_enable flag

In several places, a Boolean flag is used in the GSI code to
indicate whether the "doorbell engine" should be enabled or not
when a channel is configured.  This is basically done to abstract
this property from the IPA version; the GSI code doesn't otherwise
"know" what the IPA hardware version is.  The doorbell engine is
enabled only for IPA v3.5.1, not for IPA v4.0 and later.

The next patch makes another change that affects behavior during
channel reset (which also involves programming the channel).  It
also distinguishes IPA v3.5.1 hardware from newer hardware.

Rather than creating another flag whose value matches the "db_enable"
value, just rename "db_enable" to be "legacy" so it can be used to
signal more than just the special doorbell handling.
Signed-off-by: default avatarAlex Elder <elder@linaro.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent ee733cd8
...@@ -834,7 +834,7 @@ int gsi_channel_stop(struct gsi *gsi, u32 channel_id) ...@@ -834,7 +834,7 @@ int gsi_channel_stop(struct gsi *gsi, u32 channel_id)
} }
/* Reset and reconfigure a channel (possibly leaving doorbell disabled) */ /* Reset and reconfigure a channel (possibly leaving doorbell disabled) */
void gsi_channel_reset(struct gsi *gsi, u32 channel_id, bool db_enable) void gsi_channel_reset(struct gsi *gsi, u32 channel_id, bool legacy)
{ {
struct gsi_channel *channel = &gsi->channel[channel_id]; struct gsi_channel *channel = &gsi->channel[channel_id];
...@@ -845,7 +845,7 @@ void gsi_channel_reset(struct gsi *gsi, u32 channel_id, bool db_enable) ...@@ -845,7 +845,7 @@ void gsi_channel_reset(struct gsi *gsi, u32 channel_id, bool db_enable)
if (!channel->toward_ipa) if (!channel->toward_ipa)
gsi_channel_reset_command(channel); gsi_channel_reset_command(channel);
gsi_channel_program(channel, db_enable); gsi_channel_program(channel, legacy);
gsi_channel_trans_cancel_pending(channel); gsi_channel_trans_cancel_pending(channel);
mutex_unlock(&gsi->mutex); mutex_unlock(&gsi->mutex);
...@@ -1455,7 +1455,7 @@ static void gsi_evt_ring_teardown(struct gsi *gsi) ...@@ -1455,7 +1455,7 @@ static void gsi_evt_ring_teardown(struct gsi *gsi)
/* Setup function for a single channel */ /* Setup function for a single channel */
static int gsi_channel_setup_one(struct gsi *gsi, u32 channel_id, static int gsi_channel_setup_one(struct gsi *gsi, u32 channel_id,
bool db_enable) bool legacy)
{ {
struct gsi_channel *channel = &gsi->channel[channel_id]; struct gsi_channel *channel = &gsi->channel[channel_id];
u32 evt_ring_id = channel->evt_ring_id; u32 evt_ring_id = channel->evt_ring_id;
...@@ -1474,7 +1474,7 @@ static int gsi_channel_setup_one(struct gsi *gsi, u32 channel_id, ...@@ -1474,7 +1474,7 @@ static int gsi_channel_setup_one(struct gsi *gsi, u32 channel_id,
if (ret) if (ret)
goto err_evt_ring_de_alloc; goto err_evt_ring_de_alloc;
gsi_channel_program(channel, db_enable); gsi_channel_program(channel, legacy);
if (channel->toward_ipa) if (channel->toward_ipa)
netif_tx_napi_add(&gsi->dummy_dev, &channel->napi, netif_tx_napi_add(&gsi->dummy_dev, &channel->napi,
...@@ -1545,7 +1545,7 @@ static void gsi_modem_channel_halt(struct gsi *gsi, u32 channel_id) ...@@ -1545,7 +1545,7 @@ static void gsi_modem_channel_halt(struct gsi *gsi, u32 channel_id)
} }
/* Setup function for channels */ /* Setup function for channels */
static int gsi_channel_setup(struct gsi *gsi, bool db_enable) static int gsi_channel_setup(struct gsi *gsi, bool legacy)
{ {
u32 channel_id = 0; u32 channel_id = 0;
u32 mask; u32 mask;
...@@ -1557,7 +1557,7 @@ static int gsi_channel_setup(struct gsi *gsi, bool db_enable) ...@@ -1557,7 +1557,7 @@ static int gsi_channel_setup(struct gsi *gsi, bool db_enable)
mutex_lock(&gsi->mutex); mutex_lock(&gsi->mutex);
do { do {
ret = gsi_channel_setup_one(gsi, channel_id, db_enable); ret = gsi_channel_setup_one(gsi, channel_id, legacy);
if (ret) if (ret)
goto err_unwind; goto err_unwind;
} while (++channel_id < gsi->channel_count); } while (++channel_id < gsi->channel_count);
...@@ -1643,7 +1643,7 @@ static void gsi_channel_teardown(struct gsi *gsi) ...@@ -1643,7 +1643,7 @@ static void gsi_channel_teardown(struct gsi *gsi)
} }
/* Setup function for GSI. GSI firmware must be loaded and initialized */ /* Setup function for GSI. GSI firmware must be loaded and initialized */
int gsi_setup(struct gsi *gsi, bool db_enable) int gsi_setup(struct gsi *gsi, bool legacy)
{ {
u32 val; u32 val;
...@@ -1686,7 +1686,7 @@ int gsi_setup(struct gsi *gsi, bool db_enable) ...@@ -1686,7 +1686,7 @@ int gsi_setup(struct gsi *gsi, bool db_enable)
/* Writing 1 indicates IRQ interrupts; 0 would be MSI */ /* Writing 1 indicates IRQ interrupts; 0 would be MSI */
iowrite32(1, gsi->virt + GSI_CNTXT_INTSET_OFFSET); iowrite32(1, gsi->virt + GSI_CNTXT_INTSET_OFFSET);
return gsi_channel_setup(gsi, db_enable); return gsi_channel_setup(gsi, legacy);
} }
/* Inverse of gsi_setup() */ /* Inverse of gsi_setup() */
......
...@@ -165,14 +165,14 @@ struct gsi { ...@@ -165,14 +165,14 @@ struct gsi {
/** /**
* gsi_setup() - Set up the GSI subsystem * gsi_setup() - Set up the GSI subsystem
* @gsi: Address of GSI structure embedded in an IPA structure * @gsi: Address of GSI structure embedded in an IPA structure
* @db_enable: Whether to use the GSI doorbell engine * @legacy: Set up for legacy hardware
* *
* @Return: 0 if successful, or a negative error code * @Return: 0 if successful, or a negative error code
* *
* Performs initialization that must wait until the GSI hardware is * Performs initialization that must wait until the GSI hardware is
* ready (including firmware loaded). * ready (including firmware loaded).
*/ */
int gsi_setup(struct gsi *gsi, bool db_enable); int gsi_setup(struct gsi *gsi, bool legacy);
/** /**
* gsi_teardown() - Tear down GSI subsystem * gsi_teardown() - Tear down GSI subsystem
...@@ -220,15 +220,15 @@ int gsi_channel_stop(struct gsi *gsi, u32 channel_id); ...@@ -220,15 +220,15 @@ int gsi_channel_stop(struct gsi *gsi, u32 channel_id);
* gsi_channel_reset() - Reset an allocated GSI channel * gsi_channel_reset() - Reset an allocated GSI channel
* @gsi: GSI pointer * @gsi: GSI pointer
* @channel_id: Channel to be reset * @channel_id: Channel to be reset
* @db_enable: Whether doorbell engine should be enabled * @legacy: Legacy behavior
* *
* Reset a channel and reconfigure it. The @db_enable flag indicates * Reset a channel and reconfigure it. The @legacy flag indicates
* whether the doorbell engine will be enabled following reconfiguration. * that some steps should be done differently for legacy hardware.
* *
* GSI hardware relinquishes ownership of all pending receive buffer * GSI hardware relinquishes ownership of all pending receive buffer
* transactions and they will complete with their cancelled flag set. * transactions and they will complete with their cancelled flag set.
*/ */
void gsi_channel_reset(struct gsi *gsi, u32 channel_id, bool db_enable); void gsi_channel_reset(struct gsi *gsi, u32 channel_id, bool legacy);
int gsi_channel_suspend(struct gsi *gsi, u32 channel_id, bool stop); int gsi_channel_suspend(struct gsi *gsi, u32 channel_id, bool stop);
int gsi_channel_resume(struct gsi *gsi, u32 channel_id, bool start); int gsi_channel_resume(struct gsi *gsi, u32 channel_id, bool start);
......
...@@ -1136,7 +1136,7 @@ static int ipa_endpoint_reset_rx_aggr(struct ipa_endpoint *endpoint) ...@@ -1136,7 +1136,7 @@ static int ipa_endpoint_reset_rx_aggr(struct ipa_endpoint *endpoint)
bool endpoint_suspended = false; bool endpoint_suspended = false;
struct gsi *gsi = &ipa->gsi; struct gsi *gsi = &ipa->gsi;
dma_addr_t addr; dma_addr_t addr;
bool db_enable; bool legacy;
u32 retries; u32 retries;
u32 len = 1; u32 len = 1;
void *virt; void *virt;
...@@ -1200,8 +1200,8 @@ static int ipa_endpoint_reset_rx_aggr(struct ipa_endpoint *endpoint) ...@@ -1200,8 +1200,8 @@ static int ipa_endpoint_reset_rx_aggr(struct ipa_endpoint *endpoint)
* complete the channel reset sequence. Finish by suspending the * complete the channel reset sequence. Finish by suspending the
* channel again (if necessary). * channel again (if necessary).
*/ */
db_enable = ipa->version == IPA_VERSION_3_5_1; legacy = ipa->version == IPA_VERSION_3_5_1;
gsi_channel_reset(gsi, endpoint->channel_id, db_enable); gsi_channel_reset(gsi, endpoint->channel_id, legacy);
msleep(1); msleep(1);
...@@ -1223,8 +1223,8 @@ static void ipa_endpoint_reset(struct ipa_endpoint *endpoint) ...@@ -1223,8 +1223,8 @@ static void ipa_endpoint_reset(struct ipa_endpoint *endpoint)
{ {
u32 channel_id = endpoint->channel_id; u32 channel_id = endpoint->channel_id;
struct ipa *ipa = endpoint->ipa; struct ipa *ipa = endpoint->ipa;
bool db_enable;
bool special; bool special;
bool legacy;
int ret = 0; int ret = 0;
/* On IPA v3.5.1, if an RX endpoint is reset while aggregation /* On IPA v3.5.1, if an RX endpoint is reset while aggregation
...@@ -1233,12 +1233,12 @@ static void ipa_endpoint_reset(struct ipa_endpoint *endpoint) ...@@ -1233,12 +1233,12 @@ static void ipa_endpoint_reset(struct ipa_endpoint *endpoint)
* *
* IPA v3.5.1 enables the doorbell engine. Newer versions do not. * IPA v3.5.1 enables the doorbell engine. Newer versions do not.
*/ */
db_enable = ipa->version == IPA_VERSION_3_5_1; legacy = ipa->version == IPA_VERSION_3_5_1;
special = !endpoint->toward_ipa && endpoint->data->aggregation; special = !endpoint->toward_ipa && endpoint->data->aggregation;
if (special && ipa_endpoint_aggr_active(endpoint)) if (special && ipa_endpoint_aggr_active(endpoint))
ret = ipa_endpoint_reset_rx_aggr(endpoint); ret = ipa_endpoint_reset_rx_aggr(endpoint);
else else
gsi_channel_reset(&ipa->gsi, channel_id, db_enable); gsi_channel_reset(&ipa->gsi, channel_id, legacy);
if (ret) if (ret)
dev_err(&ipa->pdev->dev, dev_err(&ipa->pdev->dev,
......
...@@ -108,7 +108,7 @@ int ipa_setup(struct ipa *ipa) ...@@ -108,7 +108,7 @@ int ipa_setup(struct ipa *ipa)
struct ipa_endpoint *command_endpoint; struct ipa_endpoint *command_endpoint;
int ret; int ret;
/* IPA v4.0 and above don't use the doorbell engine. */ /* Setup for IPA v3.5.1 has some slight differences */
ret = gsi_setup(&ipa->gsi, ipa->version == IPA_VERSION_3_5_1); ret = gsi_setup(&ipa->gsi, ipa->version == IPA_VERSION_3_5_1);
if (ret) if (ret)
return ret; return ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment