* [PATCH linux dev-5.4 0/2] fsi: aspeed: Divisor settings
@ 2020-04-14 10:51 Joel Stanley
2020-04-14 10:51 ` [PATCH linux dev-5.4 1/2] fsi: aspeed: Run the bus at maximum speed Joel Stanley
2020-04-14 10:51 ` [PATCH linux dev-5.4 2/2] fsi: aspeed: Add module param for bus divisor Joel Stanley
0 siblings, 2 replies; 5+ messages in thread
From: Joel Stanley @ 2020-04-14 10:51 UTC (permalink / raw)
To: openbmc, Eddie James, Andrew Jeffery
This defaults the ASPEED FSI master to a faster bus speed, and allows a
user to override the speed using the kernel command line.
Joel Stanley (2):
fsi: aspeed: Run the bus at maximum speed
fsi: aspeed: Add module param for bus divisor
drivers/fsi/fsi-master-aspeed.c | 21 ++++++++++++++++++---
1 file changed, 18 insertions(+), 3 deletions(-)
--
2.25.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH linux dev-5.4 1/2] fsi: aspeed: Run the bus at maximum speed
2020-04-14 10:51 [PATCH linux dev-5.4 0/2] fsi: aspeed: Divisor settings Joel Stanley
@ 2020-04-14 10:51 ` Joel Stanley
2020-04-14 22:27 ` Eddie James
2020-04-14 10:51 ` [PATCH linux dev-5.4 2/2] fsi: aspeed: Add module param for bus divisor Joel Stanley
1 sibling, 1 reply; 5+ messages in thread
From: Joel Stanley @ 2020-04-14 10:51 UTC (permalink / raw)
To: openbmc, Eddie James, Andrew Jeffery
Testing of Tacoma has shown that the ASPEED master can be run at maximum
speed.
The exception is when wired externally with a cable, in which case we
use a divisor of two to ensure reliable operation.
Signed-off-by: Joel Stanley <joel@jms.id.au>
---
drivers/fsi/fsi-master-aspeed.c | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)
diff --git a/drivers/fsi/fsi-master-aspeed.c b/drivers/fsi/fsi-master-aspeed.c
index fe2da6f90590..80bc9132e4f8 100644
--- a/drivers/fsi/fsi-master-aspeed.c
+++ b/drivers/fsi/fsi-master-aspeed.c
@@ -83,7 +83,11 @@ static const u32 fsi_base = 0xa0000000;
#define FSI_LINK_ENABLE_SETUP_TIME 10 /* in mS */
-#define DEFAULT_DIVISOR 14
+/* Run the bus at maximum speed by default */
+#define FSI_DIVISOR_DEFAULT 1
+#define FSI_DIVISOR_CABLED 2
+static u16 aspeed_fsi_divisor = FSI_DIVISOR_DEFAULT;
+
#define OPB_POLL_TIMEOUT 10000
static int __opb_write(struct fsi_master_aspeed *aspeed, u32 addr,
@@ -389,9 +393,11 @@ static int aspeed_master_init(struct fsi_master_aspeed *aspeed)
opb_writel(aspeed, ctrl_base + FSI_MECTRL, reg);
reg = cpu_to_be32(FSI_MMODE_ECRC | FSI_MMODE_EPC | FSI_MMODE_RELA
- | fsi_mmode_crs0(DEFAULT_DIVISOR)
- | fsi_mmode_crs1(DEFAULT_DIVISOR)
+ | fsi_mmode_crs0(aspeed_fsi_divisor)
+ | fsi_mmode_crs1(aspeed_fsi_divisor)
| FSI_MMODE_P8_TO_LSB);
+ dev_info(aspeed->dev, "mmode set to %08x (divisor %d)\n",
+ be32_to_cpu(reg), aspeed_fsi_divisor);
opb_writel(aspeed, ctrl_base + FSI_MMODE, reg);
reg = cpu_to_be32(0xffff0000);
@@ -450,6 +456,11 @@ static int tacoma_cabled_fsi_fixup(struct device *dev)
/* If the routing GPIO is high we should set the mux to low. */
if (gpio) {
+ /*
+ * Cable signal integrity means we should run the bus
+ * slightly slower
+ */
+ aspeed_fsi_divisor = FSI_DIVISOR_CABLED;
gpiod_direction_output(mux_gpio, 0);
dev_info(dev, "FSI configured for external cable\n");
} else {
--
2.25.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH linux dev-5.4 2/2] fsi: aspeed: Add module param for bus divisor
2020-04-14 10:51 [PATCH linux dev-5.4 0/2] fsi: aspeed: Divisor settings Joel Stanley
2020-04-14 10:51 ` [PATCH linux dev-5.4 1/2] fsi: aspeed: Run the bus at maximum speed Joel Stanley
@ 2020-04-14 10:51 ` Joel Stanley
2020-04-14 22:27 ` Eddie James
1 sibling, 1 reply; 5+ messages in thread
From: Joel Stanley @ 2020-04-14 10:51 UTC (permalink / raw)
To: openbmc, Eddie James, Andrew Jeffery
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.
Signed-off-by: Joel Stanley <joel@jms.id.au>
---
drivers/fsi/fsi-master-aspeed.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/drivers/fsi/fsi-master-aspeed.c b/drivers/fsi/fsi-master-aspeed.c
index 80bc9132e4f8..b44f71f1f0a8 100644
--- a/drivers/fsi/fsi-master-aspeed.c
+++ b/drivers/fsi/fsi-master-aspeed.c
@@ -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
@@ -458,9 +459,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 {
--
2.25.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH linux dev-5.4 1/2] fsi: aspeed: Run the bus at maximum speed
2020-04-14 10:51 ` [PATCH linux dev-5.4 1/2] fsi: aspeed: Run the bus at maximum speed Joel Stanley
@ 2020-04-14 22:27 ` Eddie James
0 siblings, 0 replies; 5+ messages in thread
From: Eddie James @ 2020-04-14 22:27 UTC (permalink / raw)
To: Joel Stanley, openbmc, Eddie James, Andrew Jeffery
On 4/14/20 5:51 AM, Joel Stanley wrote:
> Testing of Tacoma has shown that the ASPEED master can be run at maximum
> speed.
>
> The exception is when wired externally with a cable, in which case we
> use a divisor of two to ensure reliable operation.
Reviewed-by: Eddie James <eajames@linux.ibm.com>
>
> Signed-off-by: Joel Stanley <joel@jms.id.au>
> ---
> drivers/fsi/fsi-master-aspeed.c | 17 ++++++++++++++---
> 1 file changed, 14 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/fsi/fsi-master-aspeed.c b/drivers/fsi/fsi-master-aspeed.c
> index fe2da6f90590..80bc9132e4f8 100644
> --- a/drivers/fsi/fsi-master-aspeed.c
> +++ b/drivers/fsi/fsi-master-aspeed.c
> @@ -83,7 +83,11 @@ static const u32 fsi_base = 0xa0000000;
>
> #define FSI_LINK_ENABLE_SETUP_TIME 10 /* in mS */
>
> -#define DEFAULT_DIVISOR 14
> +/* Run the bus at maximum speed by default */
> +#define FSI_DIVISOR_DEFAULT 1
> +#define FSI_DIVISOR_CABLED 2
> +static u16 aspeed_fsi_divisor = FSI_DIVISOR_DEFAULT;
> +
> #define OPB_POLL_TIMEOUT 10000
>
> static int __opb_write(struct fsi_master_aspeed *aspeed, u32 addr,
> @@ -389,9 +393,11 @@ static int aspeed_master_init(struct fsi_master_aspeed *aspeed)
> opb_writel(aspeed, ctrl_base + FSI_MECTRL, reg);
>
> reg = cpu_to_be32(FSI_MMODE_ECRC | FSI_MMODE_EPC | FSI_MMODE_RELA
> - | fsi_mmode_crs0(DEFAULT_DIVISOR)
> - | fsi_mmode_crs1(DEFAULT_DIVISOR)
> + | fsi_mmode_crs0(aspeed_fsi_divisor)
> + | fsi_mmode_crs1(aspeed_fsi_divisor)
> | FSI_MMODE_P8_TO_LSB);
> + dev_info(aspeed->dev, "mmode set to %08x (divisor %d)\n",
> + be32_to_cpu(reg), aspeed_fsi_divisor);
> opb_writel(aspeed, ctrl_base + FSI_MMODE, reg);
>
> reg = cpu_to_be32(0xffff0000);
> @@ -450,6 +456,11 @@ static int tacoma_cabled_fsi_fixup(struct device *dev)
>
> /* If the routing GPIO is high we should set the mux to low. */
> if (gpio) {
> + /*
> + * Cable signal integrity means we should run the bus
> + * slightly slower
> + */
> + aspeed_fsi_divisor = FSI_DIVISOR_CABLED;
> gpiod_direction_output(mux_gpio, 0);
> dev_info(dev, "FSI configured for external cable\n");
> } else {
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH linux dev-5.4 2/2] fsi: aspeed: Add module param for bus divisor
2020-04-14 10:51 ` [PATCH linux dev-5.4 2/2] fsi: aspeed: Add module param for bus divisor Joel Stanley
@ 2020-04-14 22:27 ` Eddie James
0 siblings, 0 replies; 5+ messages in thread
From: Eddie James @ 2020-04-14 22:27 UTC (permalink / raw)
To: Joel Stanley, openbmc, Eddie James, Andrew Jeffery
On 4/14/20 5:51 AM, Joel Stanley wrote:
> 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.
Looks good.
Reviewed-by: Eddie James <eajames@linux.ibm.com>
>
> Signed-off-by: Joel Stanley <joel@jms.id.au>
> ---
> drivers/fsi/fsi-master-aspeed.c | 8 ++++++--
> 1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/fsi/fsi-master-aspeed.c b/drivers/fsi/fsi-master-aspeed.c
> index 80bc9132e4f8..b44f71f1f0a8 100644
> --- a/drivers/fsi/fsi-master-aspeed.c
> +++ b/drivers/fsi/fsi-master-aspeed.c
> @@ -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
>
> @@ -458,9 +459,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 {
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2020-04-14 22:28 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-14 10:51 [PATCH linux dev-5.4 0/2] fsi: aspeed: Divisor settings Joel Stanley
2020-04-14 10:51 ` [PATCH linux dev-5.4 1/2] fsi: aspeed: Run the bus at maximum speed Joel Stanley
2020-04-14 22:27 ` Eddie James
2020-04-14 10:51 ` [PATCH linux dev-5.4 2/2] fsi: aspeed: Add module param for bus divisor Joel Stanley
2020-04-14 22:27 ` Eddie James
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.