Commit 2d265342 authored by Alex Elder's avatar Alex Elder Committed by Jakub Kicinski

net: ipa: assign endpoint to a resource group

The IPA hardware manages various resources (e.g. descriptors)
internally to perform its functions.  The resources are grouped,
allowing different endpoints to use separate resource pools.  This
way one group of endpoints can be configured to operate unaffected
by the resource use of endpoints in a different group.

Endpoints should be assigned to a resource group, but we currently
don't do that.

Define a new resource_group field in the endpoint configuration
data, and use it to assign the proper resource group to use for
each AP endpoint.
Tested-by: default avatarSujit Kautkar <sujitka@chromium.org>
Signed-off-by: default avatarAlex Elder <elder@linaro.org>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent d773f404
...@@ -24,6 +24,7 @@ static const struct ipa_gsi_endpoint_data ipa_gsi_endpoint_data[] = { ...@@ -24,6 +24,7 @@ static const struct ipa_gsi_endpoint_data ipa_gsi_endpoint_data[] = {
.endpoint = { .endpoint = {
.seq_type = IPA_SEQ_DMA_ONLY, .seq_type = IPA_SEQ_DMA_ONLY,
.config = { .config = {
.resource_group = 0,
.dma_mode = true, .dma_mode = true,
.dma_endpoint = IPA_ENDPOINT_AP_LAN_RX, .dma_endpoint = IPA_ENDPOINT_AP_LAN_RX,
}, },
...@@ -42,6 +43,7 @@ static const struct ipa_gsi_endpoint_data ipa_gsi_endpoint_data[] = { ...@@ -42,6 +43,7 @@ static const struct ipa_gsi_endpoint_data ipa_gsi_endpoint_data[] = {
.endpoint = { .endpoint = {
.seq_type = IPA_SEQ_INVALID, .seq_type = IPA_SEQ_INVALID,
.config = { .config = {
.resource_group = 0,
.aggregation = true, .aggregation = true,
.status_enable = true, .status_enable = true,
.rx = { .rx = {
...@@ -65,6 +67,7 @@ static const struct ipa_gsi_endpoint_data ipa_gsi_endpoint_data[] = { ...@@ -65,6 +67,7 @@ static const struct ipa_gsi_endpoint_data ipa_gsi_endpoint_data[] = {
.seq_type = .seq_type =
IPA_SEQ_PKT_PROCESS_NO_DEC_NO_UCP_DMAP, IPA_SEQ_PKT_PROCESS_NO_DEC_NO_UCP_DMAP,
.config = { .config = {
.resource_group = 0,
.checksum = true, .checksum = true,
.qmap = true, .qmap = true,
.status_enable = true, .status_enable = true,
...@@ -88,6 +91,7 @@ static const struct ipa_gsi_endpoint_data ipa_gsi_endpoint_data[] = { ...@@ -88,6 +91,7 @@ static const struct ipa_gsi_endpoint_data ipa_gsi_endpoint_data[] = {
.endpoint = { .endpoint = {
.seq_type = IPA_SEQ_INVALID, .seq_type = IPA_SEQ_INVALID,
.config = { .config = {
.resource_group = 0,
.checksum = true, .checksum = true,
.qmap = true, .qmap = true,
.aggregation = true, .aggregation = true,
......
...@@ -26,6 +26,7 @@ static const struct ipa_gsi_endpoint_data ipa_gsi_endpoint_data[] = { ...@@ -26,6 +26,7 @@ static const struct ipa_gsi_endpoint_data ipa_gsi_endpoint_data[] = {
.endpoint = { .endpoint = {
.seq_type = IPA_SEQ_DMA_ONLY, .seq_type = IPA_SEQ_DMA_ONLY,
.config = { .config = {
.resource_group = 1,
.dma_mode = true, .dma_mode = true,
.dma_endpoint = IPA_ENDPOINT_AP_LAN_RX, .dma_endpoint = IPA_ENDPOINT_AP_LAN_RX,
}, },
...@@ -44,6 +45,7 @@ static const struct ipa_gsi_endpoint_data ipa_gsi_endpoint_data[] = { ...@@ -44,6 +45,7 @@ static const struct ipa_gsi_endpoint_data ipa_gsi_endpoint_data[] = {
.endpoint = { .endpoint = {
.seq_type = IPA_SEQ_INVALID, .seq_type = IPA_SEQ_INVALID,
.config = { .config = {
.resource_group = 1,
.aggregation = true, .aggregation = true,
.status_enable = true, .status_enable = true,
.rx = { .rx = {
...@@ -67,6 +69,7 @@ static const struct ipa_gsi_endpoint_data ipa_gsi_endpoint_data[] = { ...@@ -67,6 +69,7 @@ static const struct ipa_gsi_endpoint_data ipa_gsi_endpoint_data[] = {
.seq_type = .seq_type =
IPA_SEQ_2ND_PKT_PROCESS_PASS_NO_DEC_UCP, IPA_SEQ_2ND_PKT_PROCESS_PASS_NO_DEC_UCP,
.config = { .config = {
.resource_group = 1,
.checksum = true, .checksum = true,
.qmap = true, .qmap = true,
.status_enable = true, .status_enable = true,
...@@ -90,6 +93,7 @@ static const struct ipa_gsi_endpoint_data ipa_gsi_endpoint_data[] = { ...@@ -90,6 +93,7 @@ static const struct ipa_gsi_endpoint_data ipa_gsi_endpoint_data[] = {
.endpoint = { .endpoint = {
.seq_type = IPA_SEQ_INVALID, .seq_type = IPA_SEQ_INVALID,
.config = { .config = {
.resource_group = 1,
.checksum = true, .checksum = true,
.qmap = true, .qmap = true,
.aggregation = true, .aggregation = true,
......
...@@ -109,6 +109,7 @@ struct ipa_endpoint_rx_data { ...@@ -109,6 +109,7 @@ struct ipa_endpoint_rx_data {
/** /**
* struct ipa_endpoint_config_data - IPA endpoint hardware configuration * struct ipa_endpoint_config_data - IPA endpoint hardware configuration
* @resource_group: resource group to assign endpoint to
* @checksum: whether checksum offload is enabled * @checksum: whether checksum offload is enabled
* @qmap: whether endpoint uses QMAP protocol * @qmap: whether endpoint uses QMAP protocol
* @aggregation: whether endpoint supports aggregation * @aggregation: whether endpoint supports aggregation
...@@ -119,6 +120,7 @@ struct ipa_endpoint_rx_data { ...@@ -119,6 +120,7 @@ struct ipa_endpoint_rx_data {
* @rx: RX-specific endpoint information (see above) * @rx: RX-specific endpoint information (see above)
*/ */
struct ipa_endpoint_config_data { struct ipa_endpoint_config_data {
u32 resource_group;
bool checksum; bool checksum;
bool qmap; bool qmap;
bool aggregation; bool aggregation;
......
...@@ -751,6 +751,16 @@ static void ipa_endpoint_init_deaggr(struct ipa_endpoint *endpoint) ...@@ -751,6 +751,16 @@ static void ipa_endpoint_init_deaggr(struct ipa_endpoint *endpoint)
iowrite32(val, endpoint->ipa->reg_virt + offset); iowrite32(val, endpoint->ipa->reg_virt + offset);
} }
static void ipa_endpoint_init_rsrc_grp(struct ipa_endpoint *endpoint)
{
u32 offset = IPA_REG_ENDP_INIT_RSRC_GRP_N_OFFSET(endpoint->endpoint_id);
struct ipa *ipa = endpoint->ipa;
u32 val;
val = rsrc_grp_encoded(ipa->version, endpoint->data->resource_group);
iowrite32(val, ipa->reg_virt + offset);
}
static void ipa_endpoint_init_seq(struct ipa_endpoint *endpoint) static void ipa_endpoint_init_seq(struct ipa_endpoint *endpoint)
{ {
u32 offset = IPA_REG_ENDP_INIT_SEQ_N_OFFSET(endpoint->endpoint_id); u32 offset = IPA_REG_ENDP_INIT_SEQ_N_OFFSET(endpoint->endpoint_id);
...@@ -1328,6 +1338,7 @@ static void ipa_endpoint_program(struct ipa_endpoint *endpoint) ...@@ -1328,6 +1338,7 @@ static void ipa_endpoint_program(struct ipa_endpoint *endpoint)
ipa_endpoint_init_mode(endpoint); ipa_endpoint_init_mode(endpoint);
ipa_endpoint_init_aggr(endpoint); ipa_endpoint_init_aggr(endpoint);
ipa_endpoint_init_deaggr(endpoint); ipa_endpoint_init_deaggr(endpoint);
ipa_endpoint_init_rsrc_grp(endpoint);
ipa_endpoint_init_seq(endpoint); ipa_endpoint_init_seq(endpoint);
ipa_endpoint_status(endpoint); ipa_endpoint_status(endpoint);
} }
......
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