fsi: aspeed: Add module param for bus divisor
authorJoel Stanley <joel@jms.id.au>
Tue, 28 Jul 2020 02:55:26 +0000 (12:25 +0930)
committerJoel Stanley <joel@jms.id.au>
Thu, 10 Sep 2020 02:53:19 +0000 (12:23 +0930)
For testing and hardware debugging a user may wish to override the
divisor at runtime. By setting fsi_master_aspeed.bus_div=N, the divisor
will be set to N, if 0 < N <= 0x3ff.

This is a module parameter and not a device tree option as it will only
need to be set when testing or debugging.

Reviewed-by: Eddie James <eajames@linux.ibm.com>
Link: https://lore.kernel.org/r/20200728025527.174503-5-joel@jms.id.au
Signed-off-by: Joel Stanley <joel@jms.id.au>
drivers/fsi/fsi-master-aspeed.c

index f503f64ab32bfdc3cffc0a2407a6127d9dcbf360..2531e826ba8b28df84420da3e659e859ed5ab1b7 100644 (file)
@@ -87,6 +87,7 @@ static const u32 fsi_base = 0xa0000000;
 #define FSI_DIVISOR_DEFAULT            1
 #define FSI_DIVISOR_CABLED             2
 static u16 aspeed_fsi_divisor = FSI_DIVISOR_DEFAULT;
+module_param_named(bus_div,aspeed_fsi_divisor, ushort, 0);
 
 #define OPB_POLL_TIMEOUT               10000
 
@@ -454,9 +455,12 @@ static int tacoma_cabled_fsi_fixup(struct device *dev)
        if (gpio) {
                /*
                 * Cable signal integrity means we should run the bus
-                * slightly slower
+                * slightly slower. Do not override if a kernel param
+                * has already overridden.
                 */
-               aspeed_fsi_divisor = FSI_DIVISOR_CABLED;
+               if (aspeed_fsi_divisor == FSI_DIVISOR_DEFAULT)
+                       aspeed_fsi_divisor = FSI_DIVISOR_CABLED;
+
                gpiod_direction_output(mux_gpio, 0);
                dev_info(dev, "FSI configured for external cable\n");
        } else {