soc: fsl: cpm1: tsa: Introduce tsa_serial_get_num()
authorHerve Codina <herve.codina@bootlin.com>
Thu, 8 Aug 2024 07:11:09 +0000 (09:11 +0200)
committerChristophe Leroy <christophe.leroy@csgroup.eu>
Tue, 3 Sep 2024 05:49:19 +0000 (07:49 +0200)
TSA consumers in CPM1 implementation don't need to know about the serial
device number used by the TSA component. In QUICC Engine implementation,
this information is needed.

Improve the TSA API with tsa_serial_get_num() in order to provide this
information.

Signed-off-by: Herve Codina <herve.codina@bootlin.com>
Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Link: https://lore.kernel.org/r/20240808071132.149251-17-herve.codina@bootlin.com
Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
drivers/soc/fsl/qe/tsa.c
drivers/soc/fsl/qe/tsa.h

index c540cf9..f0889b3 100644 (file)
@@ -231,6 +231,39 @@ static bool tsa_is_qe(const struct tsa *tsa)
        return IS_ENABLED(CONFIG_QUICC_ENGINE);
 }
 
+static int tsa_qe_serial_get_num(struct tsa_serial *tsa_serial)
+{
+       struct tsa *tsa = tsa_serial_get_tsa(tsa_serial);
+
+       switch (tsa_serial->id) {
+       case FSL_QE_TSA_UCC1: return 0;
+       case FSL_QE_TSA_UCC2: return 1;
+       case FSL_QE_TSA_UCC3: return 2;
+       case FSL_QE_TSA_UCC4: return 3;
+       case FSL_QE_TSA_UCC5: return 4;
+       default:
+               break;
+       }
+
+       dev_err(tsa->dev, "Unsupported serial id %u\n", tsa_serial->id);
+       return -EINVAL;
+}
+
+int tsa_serial_get_num(struct tsa_serial *tsa_serial)
+{
+       struct tsa *tsa = tsa_serial_get_tsa(tsa_serial);
+
+       /*
+        * There is no need to get the serial num out of the TSA driver in the
+        * CPM case.
+        * Further more, in CPM, we can have 2 types of serial SCCs and FCCs.
+        * What kind of numbering to use that can be global to both SCCs and
+        * FCCs ?
+        */
+       return tsa_is_qe(tsa) ? tsa_qe_serial_get_num(tsa_serial) : -EOPNOTSUPP;
+}
+EXPORT_SYMBOL(tsa_serial_get_num);
+
 static int tsa_cpm1_serial_connect(struct tsa_serial *tsa_serial, bool connect)
 {
        struct tsa *tsa = tsa_serial_get_tsa(tsa_serial);
@@ -271,26 +304,9 @@ static int tsa_qe_serial_connect(struct tsa_serial *tsa_serial, bool connect)
        int ucc_num;
        int ret;
 
-       switch (tsa_serial->id) {
-       case FSL_QE_TSA_UCC1:
-               ucc_num = 0;
-               break;
-       case FSL_QE_TSA_UCC2:
-               ucc_num = 1;
-               break;
-       case FSL_QE_TSA_UCC3:
-               ucc_num = 2;
-               break;
-       case FSL_QE_TSA_UCC4:
-               ucc_num = 3;
-               break;
-       case FSL_QE_TSA_UCC5:
-               ucc_num = 4;
-               break;
-       default:
-               dev_err(tsa->dev, "Unsupported serial id %u\n", tsa_serial->id);
-               return -EINVAL;
-       }
+       ucc_num = tsa_qe_serial_get_num(tsa_serial);
+       if (ucc_num < 0)
+               return ucc_num;
 
        spin_lock_irqsave(&tsa->lock, flags);
        ret = ucc_set_qe_mux_tsa(ucc_num, connect);
index d9df89b..da137bc 100644 (file)
@@ -39,4 +39,7 @@ struct tsa_serial_info {
 /* Get information */
 int tsa_serial_get_info(struct tsa_serial *tsa_serial, struct tsa_serial_info *info);
 
+/* Get serial number */
+int tsa_serial_get_num(struct tsa_serial *tsa_serial);
+
 #endif /* __SOC_FSL_TSA_H__ */