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: Alex Elder <elder@linaro.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
ee733cd896
Коммит
f86a1909ea
|
@ -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];
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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() */
|
||||
|
|
|
@ -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
|
||||
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
|
|
Загрузка…
Ссылка в новой задаче