* [U-Boot] [PATCH v3 1/3] spi: pl022: Simplify platdata code
@ 2018-11-22 6:33 Jagan Teki
2018-11-22 6:33 ` [U-Boot] [PATCH v3 2/3] spi: pl022: Drop unnecessary include files Jagan Teki
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Jagan Teki @ 2018-11-22 6:33 UTC (permalink / raw)
To: u-boot
pl022 spi driver support both OF_CONTROL and PLATDATA, this
patch is trying to simplify the code that differentiating
platdata vs of_control.
- Move OF_CONTROL code at one place
- Handle clock setup code directly in pl022_spi_ofdata_to_platdata
Cc: Quentin Schulz <quentin.schulz@bootlin.com>
Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
---
Changes for v3:
- none
Changes for v2:
- Update commit message
- Use struct clk for clkdev
drivers/spi/pl022_spi.c | 48 ++++++++++++----------------
include/dm/platform_data/pl022_spi.h | 9 ------
2 files changed, 20 insertions(+), 37 deletions(-)
diff --git a/drivers/spi/pl022_spi.c b/drivers/spi/pl022_spi.c
index 86b71d2e21..05f4f6f481 100644
--- a/drivers/spi/pl022_spi.c
+++ b/drivers/spi/pl022_spi.c
@@ -72,11 +72,7 @@
struct pl022_spi_slave {
void *base;
-#if !CONFIG_IS_ENABLED(OF_PLATDATA)
- struct clk clk;
-#else
unsigned int freq;
-#endif
};
/*
@@ -96,30 +92,13 @@ static int pl022_is_supported(struct pl022_spi_slave *ps)
return 0;
}
-#if !CONFIG_IS_ENABLED(OF_PLATDATA)
-static int pl022_spi_ofdata_to_platdata(struct udevice *bus)
-{
- struct pl022_spi_pdata *plat = bus->platdata;
- const void *fdt = gd->fdt_blob;
- int node = dev_of_offset(bus);
-
- plat->addr = fdtdec_get_addr_size(fdt, node, "reg", &plat->size);
-
- return clk_get_by_index(bus, 0, &plat->clk);
-}
-#endif
-
static int pl022_spi_probe(struct udevice *bus)
{
struct pl022_spi_pdata *plat = dev_get_platdata(bus);
struct pl022_spi_slave *ps = dev_get_priv(bus);
ps->base = ioremap(plat->addr, plat->size);
-#if !CONFIG_IS_ENABLED(OF_PLATDATA)
- ps->clk = plat->clk;
-#else
ps->freq = plat->freq;
-#endif
/* Check the PL022 version */
if (!pl022_is_supported(ps))
@@ -240,11 +219,7 @@ static int pl022_spi_set_speed(struct udevice *bus, uint speed)
u16 scr = SSP_SCR_MIN, cr0 = 0, cpsr = SSP_CPSR_MIN, best_scr = scr,
best_cpsr = cpsr;
u32 min, max, best_freq = 0, tmp;
-#if !CONFIG_IS_ENABLED(OF_PLATDATA)
- u32 rate = clk_get_rate(&ps->clk);
-#else
u32 rate = ps->freq;
-#endif
bool found = false;
max = spi_rate(rate, SSP_CPSR_MIN, SSP_SCR_MIN);
@@ -316,6 +291,25 @@ static const struct dm_spi_ops pl022_spi_ops = {
};
#if !CONFIG_IS_ENABLED(OF_PLATDATA)
+static int pl022_spi_ofdata_to_platdata(struct udevice *bus)
+{
+ struct pl022_spi_pdata *plat = bus->platdata;
+ const void *fdt = gd->fdt_blob;
+ int node = dev_of_offset(bus);
+ struct clk clkdev;
+ int ret;
+
+ plat->addr = fdtdec_get_addr_size(fdt, node, "reg", &plat->size);
+
+ ret = clk_get_by_index(bus, 0, &clkdev);
+ if (ret)
+ return ret;
+
+ plat->freq = clk_get_rate(&clkdev);
+
+ return 0;
+}
+
static const struct udevice_id pl022_spi_ids[] = {
{ .compatible = "arm,pl022-spi" },
{ }
@@ -327,11 +321,9 @@ U_BOOT_DRIVER(pl022_spi) = {
.id = UCLASS_SPI,
#if !CONFIG_IS_ENABLED(OF_PLATDATA)
.of_match = pl022_spi_ids,
-#endif
- .ops = &pl022_spi_ops,
-#if !CONFIG_IS_ENABLED(OF_PLATDATA)
.ofdata_to_platdata = pl022_spi_ofdata_to_platdata,
#endif
+ .ops = &pl022_spi_ops,
.platdata_auto_alloc_size = sizeof(struct pl022_spi_pdata),
.priv_auto_alloc_size = sizeof(struct pl022_spi_slave),
.probe = pl022_spi_probe,
diff --git a/include/dm/platform_data/pl022_spi.h b/include/dm/platform_data/pl022_spi.h
index 77fe6da3cb..57d12ac912 100644
--- a/include/dm/platform_data/pl022_spi.h
+++ b/include/dm/platform_data/pl022_spi.h
@@ -10,19 +10,10 @@
#ifndef __PL022_SPI_H__
#define __PL022_SPI_H__
-#if !CONFIG_IS_ENABLED(OF_PLATDATA)
-#include <clk.h>
-#endif
-#include <fdtdec.h>
-
struct pl022_spi_pdata {
fdt_addr_t addr;
fdt_size_t size;
-#if !CONFIG_IS_ENABLED(OF_PLATDATA)
- struct clk clk;
-#else
unsigned int freq;
-#endif
};
#endif
--
2.18.0.321.gffc6fa0e3
^ permalink raw reply related [flat|nested] 9+ messages in thread* [U-Boot] [PATCH v3 2/3] spi: pl022: Drop unnecessary include files 2018-11-22 6:33 [U-Boot] [PATCH v3 1/3] spi: pl022: Simplify platdata code Jagan Teki @ 2018-11-22 6:33 ` Jagan Teki 2018-11-22 6:33 ` [U-Boot] [PATCH v3 3/3] dm: platform_data: spi: s/pl022_spi.h/spi_pl022.h Jagan Teki 2018-11-22 7:51 ` [U-Boot] [PATCH v3 1/3] spi: pl022: Simplify platdata code Quentin Schulz 2 siblings, 0 replies; 9+ messages in thread From: Jagan Teki @ 2018-11-22 6:33 UTC (permalink / raw) To: u-boot This patch can drop unnecessary include files in pl022_spi driver. Cc: Quentin Schulz <quentin.schulz@bootlin.com> Signed-off-by: Jagan Teki <jagan@amarulasolutions.com> --- Changes for v3: - split patch from previous drivers/spi/pl022_spi.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/drivers/spi/pl022_spi.c b/drivers/spi/pl022_spi.c index 05f4f6f481..f2e5367225 100644 --- a/drivers/spi/pl022_spi.c +++ b/drivers/spi/pl022_spi.c @@ -9,16 +9,11 @@ * Driver for ARM PL022 SPI Controller. */ -#include <asm/io.h> #include <clk.h> #include <common.h> #include <dm.h> #include <dm/platform_data/pl022_spi.h> -#include <fdtdec.h> -#include <linux/bitops.h> -#include <linux/bug.h> #include <linux/io.h> -#include <linux/kernel.h> #include <spi.h> #define SSP_CR0 0x000 -- 2.18.0.321.gffc6fa0e3 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [U-Boot] [PATCH v3 3/3] dm: platform_data: spi: s/pl022_spi.h/spi_pl022.h 2018-11-22 6:33 [U-Boot] [PATCH v3 1/3] spi: pl022: Simplify platdata code Jagan Teki 2018-11-22 6:33 ` [U-Boot] [PATCH v3 2/3] spi: pl022: Drop unnecessary include files Jagan Teki @ 2018-11-22 6:33 ` Jagan Teki 2018-11-22 7:51 ` [U-Boot] [PATCH v3 1/3] spi: pl022: Simplify platdata code Quentin Schulz 2 siblings, 0 replies; 9+ messages in thread From: Jagan Teki @ 2018-11-22 6:33 UTC (permalink / raw) To: u-boot Rename platform_data include file as spi_pl022.h from pl022_spi.h, this is generic notation used for spi platdata include files. Cc: Quentin Schulz <quentin.schulz@bootlin.com> Signed-off-by: Jagan Teki <jagan@amarulasolutions.com> --- Changes for v3: - split patch from previous drivers/spi/pl022_spi.c | 2 +- include/dm/platform_data/{pl022_spi.h => spi_pl022.h} | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) rename include/dm/platform_data/{pl022_spi.h => spi_pl022.h} (81%) diff --git a/drivers/spi/pl022_spi.c b/drivers/spi/pl022_spi.c index f2e5367225..32bb8c8d21 100644 --- a/drivers/spi/pl022_spi.c +++ b/drivers/spi/pl022_spi.c @@ -12,7 +12,7 @@ #include <clk.h> #include <common.h> #include <dm.h> -#include <dm/platform_data/pl022_spi.h> +#include <dm/platform_data/spi_pl022.h> #include <linux/io.h> #include <spi.h> diff --git a/include/dm/platform_data/pl022_spi.h b/include/dm/platform_data/spi_pl022.h similarity index 81% rename from include/dm/platform_data/pl022_spi.h rename to include/dm/platform_data/spi_pl022.h index 57d12ac912..36e645c836 100644 --- a/include/dm/platform_data/pl022_spi.h +++ b/include/dm/platform_data/spi_pl022.h @@ -7,8 +7,8 @@ * in ofdata_to_platdata. */ -#ifndef __PL022_SPI_H__ -#define __PL022_SPI_H__ +#ifndef __spi_pl022_h +#define __spi_pl022_h struct pl022_spi_pdata { fdt_addr_t addr; @@ -16,4 +16,4 @@ struct pl022_spi_pdata { unsigned int freq; }; -#endif +#endif /* __spi_pl022_h */ -- 2.18.0.321.gffc6fa0e3 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [U-Boot] [PATCH v3 1/3] spi: pl022: Simplify platdata code 2018-11-22 6:33 [U-Boot] [PATCH v3 1/3] spi: pl022: Simplify platdata code Jagan Teki 2018-11-22 6:33 ` [U-Boot] [PATCH v3 2/3] spi: pl022: Drop unnecessary include files Jagan Teki 2018-11-22 6:33 ` [U-Boot] [PATCH v3 3/3] dm: platform_data: spi: s/pl022_spi.h/spi_pl022.h Jagan Teki @ 2018-11-22 7:51 ` Quentin Schulz 2018-11-22 8:01 ` Jagan Teki 2 siblings, 1 reply; 9+ messages in thread From: Quentin Schulz @ 2018-11-22 7:51 UTC (permalink / raw) To: u-boot Hi Jagan, On Thu, Nov 22, 2018 at 12:03:47PM +0530, Jagan Teki wrote: > pl022 spi driver support both OF_CONTROL and PLATDATA, this > patch is trying to simplify the code that differentiating > platdata vs of_control. > - Move OF_CONTROL code at one place > - Handle clock setup code directly in pl022_spi_ofdata_to_platdata > > Cc: Quentin Schulz <quentin.schulz@bootlin.com> > Signed-off-by: Jagan Teki <jagan@amarulasolutions.com> > --- > Changes for v3: > - none > Changes for v2: > - Update commit message > - Use struct clk for clkdev > > drivers/spi/pl022_spi.c | 48 ++++++++++++---------------- > include/dm/platform_data/pl022_spi.h | 9 ------ > 2 files changed, 20 insertions(+), 37 deletions(-) > > diff --git a/drivers/spi/pl022_spi.c b/drivers/spi/pl022_spi.c > index 86b71d2e21..05f4f6f481 100644 > --- a/drivers/spi/pl022_spi.c > +++ b/drivers/spi/pl022_spi.c > @@ -72,11 +72,7 @@ > > struct pl022_spi_slave { > void *base; > -#if !CONFIG_IS_ENABLED(OF_PLATDATA) > - struct clk clk; > -#else > unsigned int freq; > -#endif > }; > > /* > @@ -96,30 +92,13 @@ static int pl022_is_supported(struct pl022_spi_slave *ps) > return 0; > } > > -#if !CONFIG_IS_ENABLED(OF_PLATDATA) > -static int pl022_spi_ofdata_to_platdata(struct udevice *bus) > -{ > - struct pl022_spi_pdata *plat = bus->platdata; > - const void *fdt = gd->fdt_blob; > - int node = dev_of_offset(bus); > - > - plat->addr = fdtdec_get_addr_size(fdt, node, "reg", &plat->size); > - > - return clk_get_by_index(bus, 0, &plat->clk); > -} > -#endif > - > static int pl022_spi_probe(struct udevice *bus) > { > struct pl022_spi_pdata *plat = dev_get_platdata(bus); > struct pl022_spi_slave *ps = dev_get_priv(bus); > > ps->base = ioremap(plat->addr, plat->size); > -#if !CONFIG_IS_ENABLED(OF_PLATDATA) > - ps->clk = plat->clk; > -#else > ps->freq = plat->freq; > -#endif > > /* Check the PL022 version */ > if (!pl022_is_supported(ps)) > @@ -240,11 +219,7 @@ static int pl022_spi_set_speed(struct udevice *bus, uint speed) > u16 scr = SSP_SCR_MIN, cr0 = 0, cpsr = SSP_CPSR_MIN, best_scr = scr, > best_cpsr = cpsr; > u32 min, max, best_freq = 0, tmp; > -#if !CONFIG_IS_ENABLED(OF_PLATDATA) > - u32 rate = clk_get_rate(&ps->clk); > -#else > u32 rate = ps->freq; > -#endif > bool found = false; > > max = spi_rate(rate, SSP_CPSR_MIN, SSP_SCR_MIN); > @@ -316,6 +291,25 @@ static const struct dm_spi_ops pl022_spi_ops = { > }; > > #if !CONFIG_IS_ENABLED(OF_PLATDATA) > +static int pl022_spi_ofdata_to_platdata(struct udevice *bus) > +{ > + struct pl022_spi_pdata *plat = bus->platdata; > + const void *fdt = gd->fdt_blob; > + int node = dev_of_offset(bus); > + struct clk clkdev; > + int ret; > + > + plat->addr = fdtdec_get_addr_size(fdt, node, "reg", &plat->size); > + > + ret = clk_get_by_index(bus, 0, &clkdev); > + if (ret) > + return ret; > + > + plat->freq = clk_get_rate(&clkdev); > + > + return 0; > +} > + > static const struct udevice_id pl022_spi_ids[] = { > { .compatible = "arm,pl022-spi" }, > { } > @@ -327,11 +321,9 @@ U_BOOT_DRIVER(pl022_spi) = { > .id = UCLASS_SPI, > #if !CONFIG_IS_ENABLED(OF_PLATDATA) > .of_match = pl022_spi_ids, > -#endif > - .ops = &pl022_spi_ops, > -#if !CONFIG_IS_ENABLED(OF_PLATDATA) > .ofdata_to_platdata = pl022_spi_ofdata_to_platdata, > #endif > + .ops = &pl022_spi_ops, > .platdata_auto_alloc_size = sizeof(struct pl022_spi_pdata), > .priv_auto_alloc_size = sizeof(struct pl022_spi_slave), > .probe = pl022_spi_probe, > diff --git a/include/dm/platform_data/pl022_spi.h b/include/dm/platform_data/pl022_spi.h > index 77fe6da3cb..57d12ac912 100644 > --- a/include/dm/platform_data/pl022_spi.h > +++ b/include/dm/platform_data/pl022_spi.h > @@ -10,19 +10,10 @@ > #ifndef __PL022_SPI_H__ > #define __PL022_SPI_H__ > > -#if !CONFIG_IS_ENABLED(OF_PLATDATA) > -#include <clk.h> > -#endif > -#include <fdtdec.h> > - As stated in your first version of the patch[1][2], I need fdtdec.h to be in this header file so that I can successfuly compile. [1] https://lists.denx.de/pipermail/u-boot/2018-November/346470.html [2] https://lists.denx.de/pipermail/u-boot/2018-November/347371.html Quentin -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 833 bytes Desc: not available URL: <http://lists.denx.de/pipermail/u-boot/attachments/20181122/e3a251e6/attachment.sig> ^ permalink raw reply [flat|nested] 9+ messages in thread
* [U-Boot] [PATCH v3 1/3] spi: pl022: Simplify platdata code 2018-11-22 7:51 ` [U-Boot] [PATCH v3 1/3] spi: pl022: Simplify platdata code Quentin Schulz @ 2018-11-22 8:01 ` Jagan Teki 2018-11-22 8:18 ` Quentin Schulz 0 siblings, 1 reply; 9+ messages in thread From: Jagan Teki @ 2018-11-22 8:01 UTC (permalink / raw) To: u-boot On Thu, Nov 22, 2018 at 1:21 PM Quentin Schulz <quentin.schulz@bootlin.com> wrote: > > Hi Jagan, > > On Thu, Nov 22, 2018 at 12:03:47PM +0530, Jagan Teki wrote: > > pl022 spi driver support both OF_CONTROL and PLATDATA, this > > patch is trying to simplify the code that differentiating > > platdata vs of_control. > > - Move OF_CONTROL code at one place > > - Handle clock setup code directly in pl022_spi_ofdata_to_platdata > > > > Cc: Quentin Schulz <quentin.schulz@bootlin.com> > > Signed-off-by: Jagan Teki <jagan@amarulasolutions.com> > > --- > > Changes for v3: > > - none > > Changes for v2: > > - Update commit message > > - Use struct clk for clkdev > > > > drivers/spi/pl022_spi.c | 48 ++++++++++++---------------- > > include/dm/platform_data/pl022_spi.h | 9 ------ > > 2 files changed, 20 insertions(+), 37 deletions(-) > > > > diff --git a/drivers/spi/pl022_spi.c b/drivers/spi/pl022_spi.c > > index 86b71d2e21..05f4f6f481 100644 > > --- a/drivers/spi/pl022_spi.c > > +++ b/drivers/spi/pl022_spi.c > > @@ -72,11 +72,7 @@ > > > > struct pl022_spi_slave { > > void *base; > > -#if !CONFIG_IS_ENABLED(OF_PLATDATA) > > - struct clk clk; > > -#else > > unsigned int freq; > > -#endif > > }; > > > > /* > > @@ -96,30 +92,13 @@ static int pl022_is_supported(struct pl022_spi_slave *ps) > > return 0; > > } > > > > -#if !CONFIG_IS_ENABLED(OF_PLATDATA) > > -static int pl022_spi_ofdata_to_platdata(struct udevice *bus) > > -{ > > - struct pl022_spi_pdata *plat = bus->platdata; > > - const void *fdt = gd->fdt_blob; > > - int node = dev_of_offset(bus); > > - > > - plat->addr = fdtdec_get_addr_size(fdt, node, "reg", &plat->size); > > - > > - return clk_get_by_index(bus, 0, &plat->clk); > > -} > > -#endif > > - > > static int pl022_spi_probe(struct udevice *bus) > > { > > struct pl022_spi_pdata *plat = dev_get_platdata(bus); > > struct pl022_spi_slave *ps = dev_get_priv(bus); > > > > ps->base = ioremap(plat->addr, plat->size); > > -#if !CONFIG_IS_ENABLED(OF_PLATDATA) > > - ps->clk = plat->clk; > > -#else > > ps->freq = plat->freq; > > -#endif > > > > /* Check the PL022 version */ > > if (!pl022_is_supported(ps)) > > @@ -240,11 +219,7 @@ static int pl022_spi_set_speed(struct udevice *bus, uint speed) > > u16 scr = SSP_SCR_MIN, cr0 = 0, cpsr = SSP_CPSR_MIN, best_scr = scr, > > best_cpsr = cpsr; > > u32 min, max, best_freq = 0, tmp; > > -#if !CONFIG_IS_ENABLED(OF_PLATDATA) > > - u32 rate = clk_get_rate(&ps->clk); > > -#else > > u32 rate = ps->freq; > > -#endif > > bool found = false; > > > > max = spi_rate(rate, SSP_CPSR_MIN, SSP_SCR_MIN); > > @@ -316,6 +291,25 @@ static const struct dm_spi_ops pl022_spi_ops = { > > }; > > > > #if !CONFIG_IS_ENABLED(OF_PLATDATA) > > +static int pl022_spi_ofdata_to_platdata(struct udevice *bus) > > +{ > > + struct pl022_spi_pdata *plat = bus->platdata; > > + const void *fdt = gd->fdt_blob; > > + int node = dev_of_offset(bus); > > + struct clk clkdev; > > + int ret; > > + > > + plat->addr = fdtdec_get_addr_size(fdt, node, "reg", &plat->size); > > + > > + ret = clk_get_by_index(bus, 0, &clkdev); > > + if (ret) > > + return ret; > > + > > + plat->freq = clk_get_rate(&clkdev); > > + > > + return 0; > > +} > > + > > static const struct udevice_id pl022_spi_ids[] = { > > { .compatible = "arm,pl022-spi" }, > > { } > > @@ -327,11 +321,9 @@ U_BOOT_DRIVER(pl022_spi) = { > > .id = UCLASS_SPI, > > #if !CONFIG_IS_ENABLED(OF_PLATDATA) > > .of_match = pl022_spi_ids, > > -#endif > > - .ops = &pl022_spi_ops, > > -#if !CONFIG_IS_ENABLED(OF_PLATDATA) > > .ofdata_to_platdata = pl022_spi_ofdata_to_platdata, > > #endif > > + .ops = &pl022_spi_ops, > > .platdata_auto_alloc_size = sizeof(struct pl022_spi_pdata), > > .priv_auto_alloc_size = sizeof(struct pl022_spi_slave), > > .probe = pl022_spi_probe, > > diff --git a/include/dm/platform_data/pl022_spi.h b/include/dm/platform_data/pl022_spi.h > > index 77fe6da3cb..57d12ac912 100644 > > --- a/include/dm/platform_data/pl022_spi.h > > +++ b/include/dm/platform_data/pl022_spi.h > > @@ -10,19 +10,10 @@ > > #ifndef __PL022_SPI_H__ > > #define __PL022_SPI_H__ > > > > -#if !CONFIG_IS_ENABLED(OF_PLATDATA) > > -#include <clk.h> > > -#endif > > -#include <fdtdec.h> > > - > > As stated in your first version of the patch[1][2], I need fdtdec.h to > be in this header file so that I can successfuly compile. which board config I need to enable? ^ permalink raw reply [flat|nested] 9+ messages in thread
* [U-Boot] [PATCH v3 1/3] spi: pl022: Simplify platdata code 2018-11-22 8:01 ` Jagan Teki @ 2018-11-22 8:18 ` Quentin Schulz 2018-11-24 12:11 ` Jagan Teki 0 siblings, 1 reply; 9+ messages in thread From: Quentin Schulz @ 2018-11-22 8:18 UTC (permalink / raw) To: u-boot Hi Jagan, On Thu, Nov 22, 2018 at 01:31:25PM +0530, Jagan Teki wrote: > On Thu, Nov 22, 2018 at 1:21 PM Quentin Schulz > <quentin.schulz@bootlin.com> wrote: > > > > Hi Jagan, > > > > On Thu, Nov 22, 2018 at 12:03:47PM +0530, Jagan Teki wrote: > > > pl022 spi driver support both OF_CONTROL and PLATDATA, this > > > patch is trying to simplify the code that differentiating > > > platdata vs of_control. > > > - Move OF_CONTROL code at one place > > > - Handle clock setup code directly in pl022_spi_ofdata_to_platdata > > > > > > Cc: Quentin Schulz <quentin.schulz@bootlin.com> > > > Signed-off-by: Jagan Teki <jagan@amarulasolutions.com> > > > --- > > > Changes for v3: > > > - none > > > Changes for v2: > > > - Update commit message > > > - Use struct clk for clkdev > > > > > > drivers/spi/pl022_spi.c | 48 ++++++++++++---------------- > > > include/dm/platform_data/pl022_spi.h | 9 ------ > > > 2 files changed, 20 insertions(+), 37 deletions(-) > > > > > > diff --git a/drivers/spi/pl022_spi.c b/drivers/spi/pl022_spi.c > > > index 86b71d2e21..05f4f6f481 100644 > > > --- a/drivers/spi/pl022_spi.c > > > +++ b/drivers/spi/pl022_spi.c > > > @@ -72,11 +72,7 @@ > > > > > > struct pl022_spi_slave { > > > void *base; > > > -#if !CONFIG_IS_ENABLED(OF_PLATDATA) > > > - struct clk clk; > > > -#else > > > unsigned int freq; > > > -#endif > > > }; > > > > > > /* > > > @@ -96,30 +92,13 @@ static int pl022_is_supported(struct pl022_spi_slave *ps) > > > return 0; > > > } > > > > > > -#if !CONFIG_IS_ENABLED(OF_PLATDATA) > > > -static int pl022_spi_ofdata_to_platdata(struct udevice *bus) > > > -{ > > > - struct pl022_spi_pdata *plat = bus->platdata; > > > - const void *fdt = gd->fdt_blob; > > > - int node = dev_of_offset(bus); > > > - > > > - plat->addr = fdtdec_get_addr_size(fdt, node, "reg", &plat->size); > > > - > > > - return clk_get_by_index(bus, 0, &plat->clk); > > > -} > > > -#endif > > > - > > > static int pl022_spi_probe(struct udevice *bus) > > > { > > > struct pl022_spi_pdata *plat = dev_get_platdata(bus); > > > struct pl022_spi_slave *ps = dev_get_priv(bus); > > > > > > ps->base = ioremap(plat->addr, plat->size); > > > -#if !CONFIG_IS_ENABLED(OF_PLATDATA) > > > - ps->clk = plat->clk; > > > -#else > > > ps->freq = plat->freq; > > > -#endif > > > > > > /* Check the PL022 version */ > > > if (!pl022_is_supported(ps)) > > > @@ -240,11 +219,7 @@ static int pl022_spi_set_speed(struct udevice *bus, uint speed) > > > u16 scr = SSP_SCR_MIN, cr0 = 0, cpsr = SSP_CPSR_MIN, best_scr = scr, > > > best_cpsr = cpsr; > > > u32 min, max, best_freq = 0, tmp; > > > -#if !CONFIG_IS_ENABLED(OF_PLATDATA) > > > - u32 rate = clk_get_rate(&ps->clk); > > > -#else > > > u32 rate = ps->freq; > > > -#endif > > > bool found = false; > > > > > > max = spi_rate(rate, SSP_CPSR_MIN, SSP_SCR_MIN); > > > @@ -316,6 +291,25 @@ static const struct dm_spi_ops pl022_spi_ops = { > > > }; > > > > > > #if !CONFIG_IS_ENABLED(OF_PLATDATA) > > > +static int pl022_spi_ofdata_to_platdata(struct udevice *bus) > > > +{ > > > + struct pl022_spi_pdata *plat = bus->platdata; > > > + const void *fdt = gd->fdt_blob; > > > + int node = dev_of_offset(bus); > > > + struct clk clkdev; > > > + int ret; > > > + > > > + plat->addr = fdtdec_get_addr_size(fdt, node, "reg", &plat->size); > > > + > > > + ret = clk_get_by_index(bus, 0, &clkdev); > > > + if (ret) > > > + return ret; > > > + > > > + plat->freq = clk_get_rate(&clkdev); > > > + > > > + return 0; > > > +} > > > + > > > static const struct udevice_id pl022_spi_ids[] = { > > > { .compatible = "arm,pl022-spi" }, > > > { } > > > @@ -327,11 +321,9 @@ U_BOOT_DRIVER(pl022_spi) = { > > > .id = UCLASS_SPI, > > > #if !CONFIG_IS_ENABLED(OF_PLATDATA) > > > .of_match = pl022_spi_ids, > > > -#endif > > > - .ops = &pl022_spi_ops, > > > -#if !CONFIG_IS_ENABLED(OF_PLATDATA) > > > .ofdata_to_platdata = pl022_spi_ofdata_to_platdata, > > > #endif > > > + .ops = &pl022_spi_ops, > > > .platdata_auto_alloc_size = sizeof(struct pl022_spi_pdata), > > > .priv_auto_alloc_size = sizeof(struct pl022_spi_slave), > > > .probe = pl022_spi_probe, > > > diff --git a/include/dm/platform_data/pl022_spi.h b/include/dm/platform_data/pl022_spi.h > > > index 77fe6da3cb..57d12ac912 100644 > > > --- a/include/dm/platform_data/pl022_spi.h > > > +++ b/include/dm/platform_data/pl022_spi.h > > > @@ -10,19 +10,10 @@ > > > #ifndef __PL022_SPI_H__ > > > #define __PL022_SPI_H__ > > > > > > -#if !CONFIG_IS_ENABLED(OF_PLATDATA) > > > -#include <clk.h> > > > -#endif > > > -#include <fdtdec.h> > > > - > > > > As stated in your first version of the patch[1][2], I need fdtdec.h to > > be in this header file so that I can successfuly compile. > > which board config I need to enable? Not mainline. The point I'm trying to make[2], is that ANY board defining platdata in a board file will need the `include/dm/platform_data/pl022_spi.h` header, this is the reason it's there, to be reused outside of the driver. With your patch, each and every board file that will need to define a U_BOOT_DEVICE entry with .platdata being of type `struct pl022_spi_pdata` will need to include the fdtdec header because in this structure, we have both fdt_addr_t and fdt_size_t that are used which are only defined in include/fdtdec.h[3]. Your patch is wrong, because: 1) It breaks the compilation on my side. While I could hear the argument of "it's not mainline we don't care", there is 2) 2) It's absolutely horrendous design to rely on each header file or C file including this header to include also fdtdec.h. With this mindset, let's not include any header file except in the final C file. You include the header file where you use parts of it. Here we use fdt_addr_t and fdt_size_t in include/dm/platform_data/pl022_spi.h which are both defined in include/fdtdec.h. [2] https://lists.denx.de/pipermail/u-boot/2018-November/347371.html [3] https://elixir.bootlin.com/u-boot/latest/source/include/fdtdec.h#L25 Quentin -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 833 bytes Desc: not available URL: <http://lists.denx.de/pipermail/u-boot/attachments/20181122/ebb94c99/attachment.sig> ^ permalink raw reply [flat|nested] 9+ messages in thread
* [U-Boot] [PATCH v3 1/3] spi: pl022: Simplify platdata code 2018-11-22 8:18 ` Quentin Schulz @ 2018-11-24 12:11 ` Jagan Teki 2018-11-25 12:32 ` Quentin Schulz 0 siblings, 1 reply; 9+ messages in thread From: Jagan Teki @ 2018-11-24 12:11 UTC (permalink / raw) To: u-boot On Thu, Nov 22, 2018 at 1:48 PM Quentin Schulz <quentin.schulz@bootlin.com> wrote: > > Hi Jagan, > > On Thu, Nov 22, 2018 at 01:31:25PM +0530, Jagan Teki wrote: > > On Thu, Nov 22, 2018 at 1:21 PM Quentin Schulz > > <quentin.schulz@bootlin.com> wrote: > > > > > > Hi Jagan, > > > > > > On Thu, Nov 22, 2018 at 12:03:47PM +0530, Jagan Teki wrote: > > > > pl022 spi driver support both OF_CONTROL and PLATDATA, this > > > > patch is trying to simplify the code that differentiating > > > > platdata vs of_control. > > > > - Move OF_CONTROL code at one place > > > > - Handle clock setup code directly in pl022_spi_ofdata_to_platdata > > > > > > > > Cc: Quentin Schulz <quentin.schulz@bootlin.com> > > > > Signed-off-by: Jagan Teki <jagan@amarulasolutions.com> > > > > --- > > > > Changes for v3: > > > > - none > > > > Changes for v2: > > > > - Update commit message > > > > - Use struct clk for clkdev > > > > > > > > drivers/spi/pl022_spi.c | 48 ++++++++++++---------------- > > > > include/dm/platform_data/pl022_spi.h | 9 ------ > > > > 2 files changed, 20 insertions(+), 37 deletions(-) > > > > > > > > diff --git a/drivers/spi/pl022_spi.c b/drivers/spi/pl022_spi.c > > > > index 86b71d2e21..05f4f6f481 100644 > > > > --- a/drivers/spi/pl022_spi.c > > > > +++ b/drivers/spi/pl022_spi.c > > > > @@ -72,11 +72,7 @@ > > > > > > > > struct pl022_spi_slave { > > > > void *base; > > > > -#if !CONFIG_IS_ENABLED(OF_PLATDATA) > > > > - struct clk clk; > > > > -#else > > > > unsigned int freq; > > > > -#endif > > > > }; > > > > > > > > /* > > > > @@ -96,30 +92,13 @@ static int pl022_is_supported(struct pl022_spi_slave *ps) > > > > return 0; > > > > } > > > > > > > > -#if !CONFIG_IS_ENABLED(OF_PLATDATA) > > > > -static int pl022_spi_ofdata_to_platdata(struct udevice *bus) > > > > -{ > > > > - struct pl022_spi_pdata *plat = bus->platdata; > > > > - const void *fdt = gd->fdt_blob; > > > > - int node = dev_of_offset(bus); > > > > - > > > > - plat->addr = fdtdec_get_addr_size(fdt, node, "reg", &plat->size); > > > > - > > > > - return clk_get_by_index(bus, 0, &plat->clk); > > > > -} > > > > -#endif > > > > - > > > > static int pl022_spi_probe(struct udevice *bus) > > > > { > > > > struct pl022_spi_pdata *plat = dev_get_platdata(bus); > > > > struct pl022_spi_slave *ps = dev_get_priv(bus); > > > > > > > > ps->base = ioremap(plat->addr, plat->size); > > > > -#if !CONFIG_IS_ENABLED(OF_PLATDATA) > > > > - ps->clk = plat->clk; > > > > -#else > > > > ps->freq = plat->freq; > > > > -#endif > > > > > > > > /* Check the PL022 version */ > > > > if (!pl022_is_supported(ps)) > > > > @@ -240,11 +219,7 @@ static int pl022_spi_set_speed(struct udevice *bus, uint speed) > > > > u16 scr = SSP_SCR_MIN, cr0 = 0, cpsr = SSP_CPSR_MIN, best_scr = scr, > > > > best_cpsr = cpsr; > > > > u32 min, max, best_freq = 0, tmp; > > > > -#if !CONFIG_IS_ENABLED(OF_PLATDATA) > > > > - u32 rate = clk_get_rate(&ps->clk); > > > > -#else > > > > u32 rate = ps->freq; > > > > -#endif > > > > bool found = false; > > > > > > > > max = spi_rate(rate, SSP_CPSR_MIN, SSP_SCR_MIN); > > > > @@ -316,6 +291,25 @@ static const struct dm_spi_ops pl022_spi_ops = { > > > > }; > > > > > > > > #if !CONFIG_IS_ENABLED(OF_PLATDATA) > > > > +static int pl022_spi_ofdata_to_platdata(struct udevice *bus) > > > > +{ > > > > + struct pl022_spi_pdata *plat = bus->platdata; > > > > + const void *fdt = gd->fdt_blob; > > > > + int node = dev_of_offset(bus); > > > > + struct clk clkdev; > > > > + int ret; > > > > + > > > > + plat->addr = fdtdec_get_addr_size(fdt, node, "reg", &plat->size); > > > > + > > > > + ret = clk_get_by_index(bus, 0, &clkdev); > > > > + if (ret) > > > > + return ret; > > > > + > > > > + plat->freq = clk_get_rate(&clkdev); > > > > + > > > > + return 0; > > > > +} > > > > + > > > > static const struct udevice_id pl022_spi_ids[] = { > > > > { .compatible = "arm,pl022-spi" }, > > > > { } > > > > @@ -327,11 +321,9 @@ U_BOOT_DRIVER(pl022_spi) = { > > > > .id = UCLASS_SPI, > > > > #if !CONFIG_IS_ENABLED(OF_PLATDATA) > > > > .of_match = pl022_spi_ids, > > > > -#endif > > > > - .ops = &pl022_spi_ops, > > > > -#if !CONFIG_IS_ENABLED(OF_PLATDATA) > > > > .ofdata_to_platdata = pl022_spi_ofdata_to_platdata, > > > > #endif > > > > + .ops = &pl022_spi_ops, > > > > .platdata_auto_alloc_size = sizeof(struct pl022_spi_pdata), > > > > .priv_auto_alloc_size = sizeof(struct pl022_spi_slave), > > > > .probe = pl022_spi_probe, > > > > diff --git a/include/dm/platform_data/pl022_spi.h b/include/dm/platform_data/pl022_spi.h > > > > index 77fe6da3cb..57d12ac912 100644 > > > > --- a/include/dm/platform_data/pl022_spi.h > > > > +++ b/include/dm/platform_data/pl022_spi.h > > > > @@ -10,19 +10,10 @@ > > > > #ifndef __PL022_SPI_H__ > > > > #define __PL022_SPI_H__ > > > > > > > > -#if !CONFIG_IS_ENABLED(OF_PLATDATA) > > > > -#include <clk.h> > > > > -#endif > > > > -#include <fdtdec.h> > > > > - > > > > > > As stated in your first version of the patch[1][2], I need fdtdec.h to > > > be in this header file so that I can successfuly compile. > > > > which board config I need to enable? > > Not mainline. > > The point I'm trying to make[2], is that ANY board defining platdata in > a board file will need the `include/dm/platform_data/pl022_spi.h` > header, this is the reason it's there, to be reused outside of the > driver. > > With your patch, each and every board file that will need to define a > U_BOOT_DEVICE entry with .platdata being of type `struct > pl022_spi_pdata` will need to include the fdtdec header because in this > structure, we have both fdt_addr_t and fdt_size_t that are used which > are only defined in include/fdtdec.h[3]. > > Your patch is wrong, because: > 1) It breaks the compilation on my side. While I could hear the argument > of "it's not mainline we don't care", there is 2) > > 2) It's absolutely horrendous design to rely on each header file or C > file including this header to include also fdtdec.h. With this mindset, > let's not include any header file except in the final C file. You > include the header file where you use parts of it. Here we use > fdt_addr_t and fdt_size_t in include/dm/platform_data/pl022_spi.h which > are both defined in include/fdtdec.h. Got your point, didn't notice that the driver is using devfdt_get_addr. I think we can switch to recent devfdt function to skip the fdtdec.h. like using devfdt_get_addr and devm_ioremap ^ permalink raw reply [flat|nested] 9+ messages in thread
* [U-Boot] [PATCH v3 1/3] spi: pl022: Simplify platdata code 2018-11-24 12:11 ` Jagan Teki @ 2018-11-25 12:32 ` Quentin Schulz 2018-11-26 18:24 ` Jagan Teki 0 siblings, 1 reply; 9+ messages in thread From: Quentin Schulz @ 2018-11-25 12:32 UTC (permalink / raw) To: u-boot Hi Jagan, On Sat, Nov 24, 2018 at 05:41:03PM +0530, Jagan Teki wrote: > On Thu, Nov 22, 2018 at 1:48 PM Quentin Schulz > <quentin.schulz@bootlin.com> wrote: > > > > Hi Jagan, > > > > On Thu, Nov 22, 2018 at 01:31:25PM +0530, Jagan Teki wrote: > > > On Thu, Nov 22, 2018 at 1:21 PM Quentin Schulz > > > <quentin.schulz@bootlin.com> wrote: > > > > > > > > Hi Jagan, > > > > > > > > On Thu, Nov 22, 2018 at 12:03:47PM +0530, Jagan Teki wrote: > > > > > pl022 spi driver support both OF_CONTROL and PLATDATA, this > > > > > patch is trying to simplify the code that differentiating > > > > > platdata vs of_control. > > > > > - Move OF_CONTROL code at one place > > > > > - Handle clock setup code directly in pl022_spi_ofdata_to_platdata > > > > > > > > > > Cc: Quentin Schulz <quentin.schulz@bootlin.com> > > > > > Signed-off-by: Jagan Teki <jagan@amarulasolutions.com> > > > > > --- > > > > > Changes for v3: > > > > > - none > > > > > Changes for v2: > > > > > - Update commit message > > > > > - Use struct clk for clkdev > > > > > > > > > > drivers/spi/pl022_spi.c | 48 ++++++++++++---------------- > > > > > include/dm/platform_data/pl022_spi.h | 9 ------ > > > > > 2 files changed, 20 insertions(+), 37 deletions(-) > > > > > > > > > > diff --git a/drivers/spi/pl022_spi.c b/drivers/spi/pl022_spi.c > > > > > index 86b71d2e21..05f4f6f481 100644 > > > > > --- a/drivers/spi/pl022_spi.c > > > > > +++ b/drivers/spi/pl022_spi.c > > > > > @@ -72,11 +72,7 @@ > > > > > > > > > > struct pl022_spi_slave { > > > > > void *base; > > > > > -#if !CONFIG_IS_ENABLED(OF_PLATDATA) > > > > > - struct clk clk; > > > > > -#else > > > > > unsigned int freq; > > > > > -#endif > > > > > }; > > > > > > > > > > /* > > > > > @@ -96,30 +92,13 @@ static int pl022_is_supported(struct pl022_spi_slave *ps) > > > > > return 0; > > > > > } > > > > > > > > > > -#if !CONFIG_IS_ENABLED(OF_PLATDATA) > > > > > -static int pl022_spi_ofdata_to_platdata(struct udevice *bus) > > > > > -{ > > > > > - struct pl022_spi_pdata *plat = bus->platdata; > > > > > - const void *fdt = gd->fdt_blob; > > > > > - int node = dev_of_offset(bus); > > > > > - > > > > > - plat->addr = fdtdec_get_addr_size(fdt, node, "reg", &plat->size); > > > > > - > > > > > - return clk_get_by_index(bus, 0, &plat->clk); > > > > > -} > > > > > -#endif > > > > > - > > > > > static int pl022_spi_probe(struct udevice *bus) > > > > > { > > > > > struct pl022_spi_pdata *plat = dev_get_platdata(bus); > > > > > struct pl022_spi_slave *ps = dev_get_priv(bus); > > > > > > > > > > ps->base = ioremap(plat->addr, plat->size); > > > > > -#if !CONFIG_IS_ENABLED(OF_PLATDATA) > > > > > - ps->clk = plat->clk; > > > > > -#else > > > > > ps->freq = plat->freq; > > > > > -#endif > > > > > > > > > > /* Check the PL022 version */ > > > > > if (!pl022_is_supported(ps)) > > > > > @@ -240,11 +219,7 @@ static int pl022_spi_set_speed(struct udevice *bus, uint speed) > > > > > u16 scr = SSP_SCR_MIN, cr0 = 0, cpsr = SSP_CPSR_MIN, best_scr = scr, > > > > > best_cpsr = cpsr; > > > > > u32 min, max, best_freq = 0, tmp; > > > > > -#if !CONFIG_IS_ENABLED(OF_PLATDATA) > > > > > - u32 rate = clk_get_rate(&ps->clk); > > > > > -#else > > > > > u32 rate = ps->freq; > > > > > -#endif > > > > > bool found = false; > > > > > > > > > > max = spi_rate(rate, SSP_CPSR_MIN, SSP_SCR_MIN); > > > > > @@ -316,6 +291,25 @@ static const struct dm_spi_ops pl022_spi_ops = { > > > > > }; > > > > > > > > > > #if !CONFIG_IS_ENABLED(OF_PLATDATA) > > > > > +static int pl022_spi_ofdata_to_platdata(struct udevice *bus) > > > > > +{ > > > > > + struct pl022_spi_pdata *plat = bus->platdata; > > > > > + const void *fdt = gd->fdt_blob; > > > > > + int node = dev_of_offset(bus); > > > > > + struct clk clkdev; > > > > > + int ret; > > > > > + > > > > > + plat->addr = fdtdec_get_addr_size(fdt, node, "reg", &plat->size); > > > > > + > > > > > + ret = clk_get_by_index(bus, 0, &clkdev); > > > > > + if (ret) > > > > > + return ret; > > > > > + > > > > > + plat->freq = clk_get_rate(&clkdev); > > > > > + > > > > > + return 0; > > > > > +} > > > > > + > > > > > static const struct udevice_id pl022_spi_ids[] = { > > > > > { .compatible = "arm,pl022-spi" }, > > > > > { } > > > > > @@ -327,11 +321,9 @@ U_BOOT_DRIVER(pl022_spi) = { > > > > > .id = UCLASS_SPI, > > > > > #if !CONFIG_IS_ENABLED(OF_PLATDATA) > > > > > .of_match = pl022_spi_ids, > > > > > -#endif > > > > > - .ops = &pl022_spi_ops, > > > > > -#if !CONFIG_IS_ENABLED(OF_PLATDATA) > > > > > .ofdata_to_platdata = pl022_spi_ofdata_to_platdata, > > > > > #endif > > > > > + .ops = &pl022_spi_ops, > > > > > .platdata_auto_alloc_size = sizeof(struct pl022_spi_pdata), > > > > > .priv_auto_alloc_size = sizeof(struct pl022_spi_slave), > > > > > .probe = pl022_spi_probe, > > > > > diff --git a/include/dm/platform_data/pl022_spi.h b/include/dm/platform_data/pl022_spi.h > > > > > index 77fe6da3cb..57d12ac912 100644 > > > > > --- a/include/dm/platform_data/pl022_spi.h > > > > > +++ b/include/dm/platform_data/pl022_spi.h > > > > > @@ -10,19 +10,10 @@ > > > > > #ifndef __PL022_SPI_H__ > > > > > #define __PL022_SPI_H__ > > > > > > > > > > -#if !CONFIG_IS_ENABLED(OF_PLATDATA) > > > > > -#include <clk.h> > > > > > -#endif > > > > > -#include <fdtdec.h> > > > > > - > > > > > > > > As stated in your first version of the patch[1][2], I need fdtdec.h to > > > > be in this header file so that I can successfuly compile. > > > > > > which board config I need to enable? > > > > Not mainline. > > > > The point I'm trying to make[2], is that ANY board defining platdata in > > a board file will need the `include/dm/platform_data/pl022_spi.h` > > header, this is the reason it's there, to be reused outside of the > > driver. > > > > With your patch, each and every board file that will need to define a > > U_BOOT_DEVICE entry with .platdata being of type `struct > > pl022_spi_pdata` will need to include the fdtdec header because in this > > structure, we have both fdt_addr_t and fdt_size_t that are used which > > are only defined in include/fdtdec.h[3]. > > > > Your patch is wrong, because: > > 1) It breaks the compilation on my side. While I could hear the argument > > of "it's not mainline we don't care", there is 2) > > > > 2) It's absolutely horrendous design to rely on each header file or C > > file including this header to include also fdtdec.h. With this mindset, > > let's not include any header file except in the final C file. You > > include the header file where you use parts of it. Here we use > > fdt_addr_t and fdt_size_t in include/dm/platform_data/pl022_spi.h which > > are both defined in include/fdtdec.h. > > Got your point, didn't notice that the driver is using > devfdt_get_addr. I think we can switch to recent devfdt function to > skip the fdtdec.h. like using devfdt_get_addr and devm_ioremap You will NOT be able to get rid of fdtdec.h. In the include/dm/platform_data/pl022_spi.h header file you have the pl022_spi_pdata structure which have two variables, fdt_addr_t addr and fdt_size_t size. fdt_addr_t and fdt_size_t are only defined in fdtdec.h header file[1][2]. So the only way to get rid of fdtdec.h is to get rid of those two variables in the pl022_spi_pdata structure. Quentin [1] https://elixir.bootlin.com/u-boot/latest/ident/fdt_addr_t [2] https://elixir.bootlin.com/u-boot/latest/ident/fdt_size_t -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 833 bytes Desc: not available URL: <http://lists.denx.de/pipermail/u-boot/attachments/20181125/e69b2a66/attachment.sig> ^ permalink raw reply [flat|nested] 9+ messages in thread
* [U-Boot] [PATCH v3 1/3] spi: pl022: Simplify platdata code 2018-11-25 12:32 ` Quentin Schulz @ 2018-11-26 18:24 ` Jagan Teki 0 siblings, 0 replies; 9+ messages in thread From: Jagan Teki @ 2018-11-26 18:24 UTC (permalink / raw) To: u-boot On Sun, Nov 25, 2018 at 6:02 PM Quentin Schulz <quentin.schulz@bootlin.com> wrote: > > Hi Jagan, > > On Sat, Nov 24, 2018 at 05:41:03PM +0530, Jagan Teki wrote: > > On Thu, Nov 22, 2018 at 1:48 PM Quentin Schulz > > <quentin.schulz@bootlin.com> wrote: > > > > > > Hi Jagan, > > > > > > On Thu, Nov 22, 2018 at 01:31:25PM +0530, Jagan Teki wrote: > > > > On Thu, Nov 22, 2018 at 1:21 PM Quentin Schulz > > > > <quentin.schulz@bootlin.com> wrote: > > > > > > > > > > Hi Jagan, > > > > > > > > > > On Thu, Nov 22, 2018 at 12:03:47PM +0530, Jagan Teki wrote: > > > > > > pl022 spi driver support both OF_CONTROL and PLATDATA, this > > > > > > patch is trying to simplify the code that differentiating > > > > > > platdata vs of_control. > > > > > > - Move OF_CONTROL code at one place > > > > > > - Handle clock setup code directly in pl022_spi_ofdata_to_platdata > > > > > > > > > > > > Cc: Quentin Schulz <quentin.schulz@bootlin.com> > > > > > > Signed-off-by: Jagan Teki <jagan@amarulasolutions.com> > > > > > > --- > > > > > > Changes for v3: > > > > > > - none > > > > > > Changes for v2: > > > > > > - Update commit message > > > > > > - Use struct clk for clkdev > > > > > > > > > > > > drivers/spi/pl022_spi.c | 48 ++++++++++++---------------- > > > > > > include/dm/platform_data/pl022_spi.h | 9 ------ > > > > > > 2 files changed, 20 insertions(+), 37 deletions(-) > > > > > > > > > > > > diff --git a/drivers/spi/pl022_spi.c b/drivers/spi/pl022_spi.c > > > > > > index 86b71d2e21..05f4f6f481 100644 > > > > > > --- a/drivers/spi/pl022_spi.c > > > > > > +++ b/drivers/spi/pl022_spi.c > > > > > > @@ -72,11 +72,7 @@ > > > > > > > > > > > > struct pl022_spi_slave { > > > > > > void *base; > > > > > > -#if !CONFIG_IS_ENABLED(OF_PLATDATA) > > > > > > - struct clk clk; > > > > > > -#else > > > > > > unsigned int freq; > > > > > > -#endif > > > > > > }; > > > > > > > > > > > > /* > > > > > > @@ -96,30 +92,13 @@ static int pl022_is_supported(struct pl022_spi_slave *ps) > > > > > > return 0; > > > > > > } > > > > > > > > > > > > -#if !CONFIG_IS_ENABLED(OF_PLATDATA) > > > > > > -static int pl022_spi_ofdata_to_platdata(struct udevice *bus) > > > > > > -{ > > > > > > - struct pl022_spi_pdata *plat = bus->platdata; > > > > > > - const void *fdt = gd->fdt_blob; > > > > > > - int node = dev_of_offset(bus); > > > > > > - > > > > > > - plat->addr = fdtdec_get_addr_size(fdt, node, "reg", &plat->size); > > > > > > - > > > > > > - return clk_get_by_index(bus, 0, &plat->clk); > > > > > > -} > > > > > > -#endif > > > > > > - > > > > > > static int pl022_spi_probe(struct udevice *bus) > > > > > > { > > > > > > struct pl022_spi_pdata *plat = dev_get_platdata(bus); > > > > > > struct pl022_spi_slave *ps = dev_get_priv(bus); > > > > > > > > > > > > ps->base = ioremap(plat->addr, plat->size); > > > > > > -#if !CONFIG_IS_ENABLED(OF_PLATDATA) > > > > > > - ps->clk = plat->clk; > > > > > > -#else > > > > > > ps->freq = plat->freq; > > > > > > -#endif > > > > > > > > > > > > /* Check the PL022 version */ > > > > > > if (!pl022_is_supported(ps)) > > > > > > @@ -240,11 +219,7 @@ static int pl022_spi_set_speed(struct udevice *bus, uint speed) > > > > > > u16 scr = SSP_SCR_MIN, cr0 = 0, cpsr = SSP_CPSR_MIN, best_scr = scr, > > > > > > best_cpsr = cpsr; > > > > > > u32 min, max, best_freq = 0, tmp; > > > > > > -#if !CONFIG_IS_ENABLED(OF_PLATDATA) > > > > > > - u32 rate = clk_get_rate(&ps->clk); > > > > > > -#else > > > > > > u32 rate = ps->freq; > > > > > > -#endif > > > > > > bool found = false; > > > > > > > > > > > > max = spi_rate(rate, SSP_CPSR_MIN, SSP_SCR_MIN); > > > > > > @@ -316,6 +291,25 @@ static const struct dm_spi_ops pl022_spi_ops = { > > > > > > }; > > > > > > > > > > > > #if !CONFIG_IS_ENABLED(OF_PLATDATA) > > > > > > +static int pl022_spi_ofdata_to_platdata(struct udevice *bus) > > > > > > +{ > > > > > > + struct pl022_spi_pdata *plat = bus->platdata; > > > > > > + const void *fdt = gd->fdt_blob; > > > > > > + int node = dev_of_offset(bus); > > > > > > + struct clk clkdev; > > > > > > + int ret; > > > > > > + > > > > > > + plat->addr = fdtdec_get_addr_size(fdt, node, "reg", &plat->size); > > > > > > + > > > > > > + ret = clk_get_by_index(bus, 0, &clkdev); > > > > > > + if (ret) > > > > > > + return ret; > > > > > > + > > > > > > + plat->freq = clk_get_rate(&clkdev); > > > > > > + > > > > > > + return 0; > > > > > > +} > > > > > > + > > > > > > static const struct udevice_id pl022_spi_ids[] = { > > > > > > { .compatible = "arm,pl022-spi" }, > > > > > > { } > > > > > > @@ -327,11 +321,9 @@ U_BOOT_DRIVER(pl022_spi) = { > > > > > > .id = UCLASS_SPI, > > > > > > #if !CONFIG_IS_ENABLED(OF_PLATDATA) > > > > > > .of_match = pl022_spi_ids, > > > > > > -#endif > > > > > > - .ops = &pl022_spi_ops, > > > > > > -#if !CONFIG_IS_ENABLED(OF_PLATDATA) > > > > > > .ofdata_to_platdata = pl022_spi_ofdata_to_platdata, > > > > > > #endif > > > > > > + .ops = &pl022_spi_ops, > > > > > > .platdata_auto_alloc_size = sizeof(struct pl022_spi_pdata), > > > > > > .priv_auto_alloc_size = sizeof(struct pl022_spi_slave), > > > > > > .probe = pl022_spi_probe, > > > > > > diff --git a/include/dm/platform_data/pl022_spi.h b/include/dm/platform_data/pl022_spi.h > > > > > > index 77fe6da3cb..57d12ac912 100644 > > > > > > --- a/include/dm/platform_data/pl022_spi.h > > > > > > +++ b/include/dm/platform_data/pl022_spi.h > > > > > > @@ -10,19 +10,10 @@ > > > > > > #ifndef __PL022_SPI_H__ > > > > > > #define __PL022_SPI_H__ > > > > > > > > > > > > -#if !CONFIG_IS_ENABLED(OF_PLATDATA) > > > > > > -#include <clk.h> > > > > > > -#endif > > > > > > -#include <fdtdec.h> > > > > > > - > > > > > > > > > > As stated in your first version of the patch[1][2], I need fdtdec.h to > > > > > be in this header file so that I can successfuly compile. > > > > > > > > which board config I need to enable? > > > > > > Not mainline. > > > > > > The point I'm trying to make[2], is that ANY board defining platdata in > > > a board file will need the `include/dm/platform_data/pl022_spi.h` > > > header, this is the reason it's there, to be reused outside of the > > > driver. > > > > > > With your patch, each and every board file that will need to define a > > > U_BOOT_DEVICE entry with .platdata being of type `struct > > > pl022_spi_pdata` will need to include the fdtdec header because in this > > > structure, we have both fdt_addr_t and fdt_size_t that are used which > > > are only defined in include/fdtdec.h[3]. > > > > > > Your patch is wrong, because: > > > 1) It breaks the compilation on my side. While I could hear the argument > > > of "it's not mainline we don't care", there is 2) > > > > > > 2) It's absolutely horrendous design to rely on each header file or C > > > file including this header to include also fdtdec.h. With this mindset, > > > let's not include any header file except in the final C file. You > > > include the header file where you use parts of it. Here we use > > > fdt_addr_t and fdt_size_t in include/dm/platform_data/pl022_spi.h which > > > are both defined in include/fdtdec.h. > > > > Got your point, didn't notice that the driver is using > > devfdt_get_addr. I think we can switch to recent devfdt function to > > skip the fdtdec.h. like using devfdt_get_addr and devm_ioremap > > You will NOT be able to get rid of fdtdec.h. > > In the include/dm/platform_data/pl022_spi.h header file you have the > pl022_spi_pdata structure which have two variables, fdt_addr_t addr and > fdt_size_t size. fdt_addr_t and fdt_size_t are only defined in fdtdec.h > header file[1][2]. > > So the only way to get rid of fdtdec.h is to get rid of those two > variables in the pl022_spi_pdata structure. with adding structure pointer of reg space. anyway we can look it later. are you fine with v4? ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2018-11-26 18:24 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2018-11-22 6:33 [U-Boot] [PATCH v3 1/3] spi: pl022: Simplify platdata code Jagan Teki 2018-11-22 6:33 ` [U-Boot] [PATCH v3 2/3] spi: pl022: Drop unnecessary include files Jagan Teki 2018-11-22 6:33 ` [U-Boot] [PATCH v3 3/3] dm: platform_data: spi: s/pl022_spi.h/spi_pl022.h Jagan Teki 2018-11-22 7:51 ` [U-Boot] [PATCH v3 1/3] spi: pl022: Simplify platdata code Quentin Schulz 2018-11-22 8:01 ` Jagan Teki 2018-11-22 8:18 ` Quentin Schulz 2018-11-24 12:11 ` Jagan Teki 2018-11-25 12:32 ` Quentin Schulz 2018-11-26 18:24 ` Jagan Teki
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox