Commit 634b5bd7 authored by Rasmus Villemoes's avatar Rasmus Villemoes Committed by Jakub Kicinski

ethernet: ucc_geth: add helper to replace repeated switch statements

The translation from the ucc_geth_num_of_threads enum value to the
actual count can be written somewhat more compactly with a small
lookup table, allowing us to replace the four switch statements.
Signed-off-by: default avatarRasmus Villemoes <rasmus.villemoes@prevas.dk>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 33deb13c
...@@ -70,6 +70,20 @@ static struct { ...@@ -70,6 +70,20 @@ static struct {
module_param_named(debug, debug.msg_enable, int, 0); module_param_named(debug, debug.msg_enable, int, 0);
MODULE_PARM_DESC(debug, "Debug verbosity level (0=none, ..., 0xffff=all)"); MODULE_PARM_DESC(debug, "Debug verbosity level (0=none, ..., 0xffff=all)");
static int ucc_geth_thread_count(enum ucc_geth_num_of_threads idx)
{
static const u8 count[] = {
[UCC_GETH_NUM_OF_THREADS_1] = 1,
[UCC_GETH_NUM_OF_THREADS_2] = 2,
[UCC_GETH_NUM_OF_THREADS_4] = 4,
[UCC_GETH_NUM_OF_THREADS_6] = 6,
[UCC_GETH_NUM_OF_THREADS_8] = 8,
};
if (idx >= ARRAY_SIZE(count))
return 0;
return count[idx];
}
static const struct ucc_geth_info ugeth_primary_info = { static const struct ucc_geth_info ugeth_primary_info = {
.uf_info = { .uf_info = {
.rtsm = UCC_FAST_SEND_IDLES_BETWEEN_FRAMES, .rtsm = UCC_FAST_SEND_IDLES_BETWEEN_FRAMES,
...@@ -668,32 +682,12 @@ static void dump_regs(struct ucc_geth_private *ugeth) ...@@ -668,32 +682,12 @@ static void dump_regs(struct ucc_geth_private *ugeth)
in_be32(&ugeth->ug_regs->scam)); in_be32(&ugeth->ug_regs->scam));
if (ugeth->p_thread_data_tx) { if (ugeth->p_thread_data_tx) {
int numThreadsTxNumerical; int count = ucc_geth_thread_count(ugeth->ug_info->numThreadsTx);
switch (ugeth->ug_info->numThreadsTx) {
case UCC_GETH_NUM_OF_THREADS_1:
numThreadsTxNumerical = 1;
break;
case UCC_GETH_NUM_OF_THREADS_2:
numThreadsTxNumerical = 2;
break;
case UCC_GETH_NUM_OF_THREADS_4:
numThreadsTxNumerical = 4;
break;
case UCC_GETH_NUM_OF_THREADS_6:
numThreadsTxNumerical = 6;
break;
case UCC_GETH_NUM_OF_THREADS_8:
numThreadsTxNumerical = 8;
break;
default:
numThreadsTxNumerical = 0;
break;
}
pr_info("Thread data TXs:\n"); pr_info("Thread data TXs:\n");
pr_info("Base address: 0x%08x\n", pr_info("Base address: 0x%08x\n",
(u32)ugeth->p_thread_data_tx); (u32)ugeth->p_thread_data_tx);
for (i = 0; i < numThreadsTxNumerical; i++) { for (i = 0; i < count; i++) {
pr_info("Thread data TX[%d]:\n", i); pr_info("Thread data TX[%d]:\n", i);
pr_info("Base address: 0x%08x\n", pr_info("Base address: 0x%08x\n",
(u32)&ugeth->p_thread_data_tx[i]); (u32)&ugeth->p_thread_data_tx[i]);
...@@ -702,32 +696,12 @@ static void dump_regs(struct ucc_geth_private *ugeth) ...@@ -702,32 +696,12 @@ static void dump_regs(struct ucc_geth_private *ugeth)
} }
} }
if (ugeth->p_thread_data_rx) { if (ugeth->p_thread_data_rx) {
int numThreadsRxNumerical; int count = ucc_geth_thread_count(ugeth->ug_info->numThreadsRx);
switch (ugeth->ug_info->numThreadsRx) {
case UCC_GETH_NUM_OF_THREADS_1:
numThreadsRxNumerical = 1;
break;
case UCC_GETH_NUM_OF_THREADS_2:
numThreadsRxNumerical = 2;
break;
case UCC_GETH_NUM_OF_THREADS_4:
numThreadsRxNumerical = 4;
break;
case UCC_GETH_NUM_OF_THREADS_6:
numThreadsRxNumerical = 6;
break;
case UCC_GETH_NUM_OF_THREADS_8:
numThreadsRxNumerical = 8;
break;
default:
numThreadsRxNumerical = 0;
break;
}
pr_info("Thread data RX:\n"); pr_info("Thread data RX:\n");
pr_info("Base address: 0x%08x\n", pr_info("Base address: 0x%08x\n",
(u32)ugeth->p_thread_data_rx); (u32)ugeth->p_thread_data_rx);
for (i = 0; i < numThreadsRxNumerical; i++) { for (i = 0; i < count; i++) {
pr_info("Thread data RX[%d]:\n", i); pr_info("Thread data RX[%d]:\n", i);
pr_info("Base address: 0x%08x\n", pr_info("Base address: 0x%08x\n",
(u32)&ugeth->p_thread_data_rx[i]); (u32)&ugeth->p_thread_data_rx[i]);
...@@ -2315,45 +2289,15 @@ static int ucc_geth_startup(struct ucc_geth_private *ugeth) ...@@ -2315,45 +2289,15 @@ static int ucc_geth_startup(struct ucc_geth_private *ugeth)
uf_regs = uccf->uf_regs; uf_regs = uccf->uf_regs;
ug_regs = ugeth->ug_regs; ug_regs = ugeth->ug_regs;
switch (ug_info->numThreadsRx) { numThreadsRxNumerical = ucc_geth_thread_count(ug_info->numThreadsRx);
case UCC_GETH_NUM_OF_THREADS_1: if (!numThreadsRxNumerical) {
numThreadsRxNumerical = 1;
break;
case UCC_GETH_NUM_OF_THREADS_2:
numThreadsRxNumerical = 2;
break;
case UCC_GETH_NUM_OF_THREADS_4:
numThreadsRxNumerical = 4;
break;
case UCC_GETH_NUM_OF_THREADS_6:
numThreadsRxNumerical = 6;
break;
case UCC_GETH_NUM_OF_THREADS_8:
numThreadsRxNumerical = 8;
break;
default:
if (netif_msg_ifup(ugeth)) if (netif_msg_ifup(ugeth))
pr_err("Bad number of Rx threads value\n"); pr_err("Bad number of Rx threads value\n");
return -EINVAL; return -EINVAL;
} }
switch (ug_info->numThreadsTx) { numThreadsTxNumerical = ucc_geth_thread_count(ug_info->numThreadsTx);
case UCC_GETH_NUM_OF_THREADS_1: if (!numThreadsTxNumerical) {
numThreadsTxNumerical = 1;
break;
case UCC_GETH_NUM_OF_THREADS_2:
numThreadsTxNumerical = 2;
break;
case UCC_GETH_NUM_OF_THREADS_4:
numThreadsTxNumerical = 4;
break;
case UCC_GETH_NUM_OF_THREADS_6:
numThreadsTxNumerical = 6;
break;
case UCC_GETH_NUM_OF_THREADS_8:
numThreadsTxNumerical = 8;
break;
default:
if (netif_msg_ifup(ugeth)) if (netif_msg_ifup(ugeth))
pr_err("Bad number of Tx threads value\n"); pr_err("Bad number of Tx threads value\n");
return -EINVAL; return -EINVAL;
......
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