Skip to content

Commit

Permalink
net: ipa: rename db_enable flag
Browse files Browse the repository at this point in the history
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: Alex Elder <elder@linaro.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Alex Elder authored and David S. Miller committed May 7, 2020
1 parent ee733cd commit f86a190
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 21 deletions.
16 changes: 8 additions & 8 deletions drivers/net/ipa/gsi.c
Original file line number Diff line number Diff line change
Expand Up @@ -834,7 +834,7 @@ int gsi_channel_stop(struct gsi *gsi, u32 channel_id)
}

/* 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];

Expand All @@ -845,7 +845,7 @@ void gsi_channel_reset(struct gsi *gsi, u32 channel_id, bool db_enable)
if (!channel->toward_ipa)
gsi_channel_reset_command(channel);

gsi_channel_program(channel, db_enable);
gsi_channel_program(channel, legacy);
gsi_channel_trans_cancel_pending(channel);

mutex_unlock(&gsi->mutex);
Expand Down Expand Up @@ -1455,7 +1455,7 @@ static void gsi_evt_ring_teardown(struct gsi *gsi)

/* Setup function for a single channel */
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];
u32 evt_ring_id = channel->evt_ring_id;
Expand All @@ -1474,7 +1474,7 @@ static int gsi_channel_setup_one(struct gsi *gsi, u32 channel_id,
if (ret)
goto err_evt_ring_de_alloc;

gsi_channel_program(channel, db_enable);
gsi_channel_program(channel, legacy);

if (channel->toward_ipa)
netif_tx_napi_add(&gsi->dummy_dev, &channel->napi,
Expand Down Expand Up @@ -1545,7 +1545,7 @@ static void gsi_modem_channel_halt(struct gsi *gsi, u32 channel_id)
}

/* 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 mask;
Expand All @@ -1557,7 +1557,7 @@ static int gsi_channel_setup(struct gsi *gsi, bool db_enable)
mutex_lock(&gsi->mutex);

do {
ret = gsi_channel_setup_one(gsi, channel_id, db_enable);
ret = gsi_channel_setup_one(gsi, channel_id, legacy);
if (ret)
goto err_unwind;
} while (++channel_id < gsi->channel_count);
Expand Down Expand Up @@ -1643,7 +1643,7 @@ static void gsi_channel_teardown(struct gsi *gsi)
}

/* 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;

Expand Down Expand Up @@ -1686,7 +1686,7 @@ int gsi_setup(struct gsi *gsi, bool db_enable)
/* Writing 1 indicates IRQ interrupts; 0 would be MSI */
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() */
Expand Down
12 changes: 6 additions & 6 deletions drivers/net/ipa/gsi.h
Original file line number Diff line number Diff line change
Expand Up @@ -165,14 +165,14 @@ struct gsi {
/**
* gsi_setup() - Set up the GSI subsystem
* @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
*
* Performs initialization that must wait until the GSI hardware is
* 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
Expand Down Expand Up @@ -220,15 +220,15 @@ int gsi_channel_stop(struct gsi *gsi, u32 channel_id);
* gsi_channel_reset() - Reset an allocated GSI channel
* @gsi: GSI pointer
* @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
* whether the doorbell engine will be enabled following reconfiguration.
* Reset a channel and reconfigure it. The @legacy flag indicates
* that some steps should be done differently for legacy hardware.
*
* GSI hardware relinquishes ownership of all pending receive buffer
* 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_resume(struct gsi *gsi, u32 channel_id, bool start);
Expand Down
12 changes: 6 additions & 6 deletions drivers/net/ipa/ipa_endpoint.c
Original file line number Diff line number Diff line change
Expand Up @@ -1136,7 +1136,7 @@ static int ipa_endpoint_reset_rx_aggr(struct ipa_endpoint *endpoint)
bool endpoint_suspended = false;
struct gsi *gsi = &ipa->gsi;
dma_addr_t addr;
bool db_enable;
bool legacy;
u32 retries;
u32 len = 1;
void *virt;
Expand Down Expand Up @@ -1200,8 +1200,8 @@ static int ipa_endpoint_reset_rx_aggr(struct ipa_endpoint *endpoint)
* complete the channel reset sequence. Finish by suspending the
* channel again (if necessary).
*/
db_enable = ipa->version == IPA_VERSION_3_5_1;
gsi_channel_reset(gsi, endpoint->channel_id, db_enable);
legacy = ipa->version == IPA_VERSION_3_5_1;
gsi_channel_reset(gsi, endpoint->channel_id, legacy);

msleep(1);

Expand All @@ -1223,8 +1223,8 @@ static void ipa_endpoint_reset(struct ipa_endpoint *endpoint)
{
u32 channel_id = endpoint->channel_id;
struct ipa *ipa = endpoint->ipa;
bool db_enable;
bool special;
bool legacy;
int ret = 0;

/* On IPA v3.5.1, if an RX endpoint is reset while aggregation
Expand All @@ -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.
*/
db_enable = ipa->version == IPA_VERSION_3_5_1;
legacy = ipa->version == IPA_VERSION_3_5_1;
special = !endpoint->toward_ipa && endpoint->data->aggregation;
if (special && ipa_endpoint_aggr_active(endpoint))
ret = ipa_endpoint_reset_rx_aggr(endpoint);
else
gsi_channel_reset(&ipa->gsi, channel_id, db_enable);
gsi_channel_reset(&ipa->gsi, channel_id, legacy);

if (ret)
dev_err(&ipa->pdev->dev,
Expand Down
2 changes: 1 addition & 1 deletion drivers/net/ipa/ipa_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ int ipa_setup(struct ipa *ipa)
struct ipa_endpoint *command_endpoint;
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);
if (ret)
return ret;
Expand Down

0 comments on commit f86a190

Please sign in to comment.