Message ID | 1484655976-25382-7-git-send-email-bgolaszewski@baylibre.com |
---|---|
State | New |
Headers | show |
Series | ARM: da850-lcdk: add SATA support | expand |
On 01/17/2017 06:26 AM, Bartosz Golaszewski wrote: > Register a dummy clock modelling the external SATA oscillator for > da850 DT mode. For non-DT boot we don't register the clock - instead > we rely on the default MPY value defined in the da850 ahci driver (as > is done currently). Why not register a clock for non-DT boot as well? _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
On Tuesday 17 January 2017 05:56 PM, Bartosz Golaszewski wrote: > Register a dummy clock modelling the external SATA oscillator for I would not call it a dummy clock. Its representing something physically present. Just call it "fixed rate clock" ? > da850 DT mode. For non-DT boot we don't register the clock - instead > we rely on the default MPY value defined in the da850 ahci driver (as > is done currently). Here too, like David suggested, it will be nice to register it both for DT and non-DT case. With that I think your driver will be simple too since you dont have to worry about the case when refclkpn is not supplied. > Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com> > --- > arch/arm/mach-davinci/da8xx-dt.c | 8 ++++++++ > arch/arm/mach-davinci/devices-da8xx.c | 23 +++++++++++++++++++++++ > arch/arm/mach-davinci/include/mach/da8xx.h | 1 + > 3 files changed, 32 insertions(+) > > diff --git a/arch/arm/mach-davinci/da8xx-dt.c b/arch/arm/mach-davinci/da8xx-dt.c > index b83e5d1..13137cb 100644 > --- a/arch/arm/mach-davinci/da8xx-dt.c > +++ b/arch/arm/mach-davinci/da8xx-dt.c > @@ -61,6 +61,14 @@ static void __init da850_init_machine(void) > pr_warn("%s: registering USB 1.1 PHY clock failed: %d", > __func__, ret); > > + if (of_machine_is_compatible("ti,da850-evm") || > + of_machine_is_compatible("ti,da850-lcdk")) { > + ret = da850_register_sata_refclk(100000000); > + if (ret) > + pr_warn("%s: registering SATA_REFCLK clock failed: %d", > + __func__, ret); > + } Since all supported boards use 100 Mhz refclk anyway, I would drop the machine check and just do: /* All existing boards use 100MHz SATA refclkpn */ unsigned long sata_refclkpn = 100 * 1000 * 1000; ret = da850_register_sata_refclk(sata_refclkpn); It should then be easy for the odd board (when it comes) to set sata_refclkpn to a different value. Thanks, Sekhar _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
diff --git a/arch/arm/mach-davinci/da8xx-dt.c b/arch/arm/mach-davinci/da8xx-dt.c index b83e5d1..13137cb 100644 --- a/arch/arm/mach-davinci/da8xx-dt.c +++ b/arch/arm/mach-davinci/da8xx-dt.c @@ -61,6 +61,14 @@ static void __init da850_init_machine(void) pr_warn("%s: registering USB 1.1 PHY clock failed: %d", __func__, ret); + if (of_machine_is_compatible("ti,da850-evm") || + of_machine_is_compatible("ti,da850-lcdk")) { + ret = da850_register_sata_refclk(100000000); + if (ret) + pr_warn("%s: registering SATA_REFCLK clock failed: %d", + __func__, ret); + } + of_platform_default_populate(NULL, da850_auxdata_lookup, NULL); davinci_pm_init(); } diff --git a/arch/arm/mach-davinci/devices-da8xx.c b/arch/arm/mach-davinci/devices-da8xx.c index c2457b3..2bb5b69 100644 --- a/arch/arm/mach-davinci/devices-da8xx.c +++ b/arch/arm/mach-davinci/devices-da8xx.c @@ -24,6 +24,7 @@ #include <mach/common.h> #include <mach/time.h> #include <mach/da8xx.h> +#include <mach/clock.h> #include "cpuidle.h" #include "sram.h" @@ -1023,6 +1024,28 @@ int __init da8xx_register_spi_bus(int instance, unsigned num_chipselect) } #ifdef CONFIG_ARCH_DAVINCI_DA850 +static struct clk sata_refclk = { + .name = "sata_refclk", + .set_rate = davinci_simple_set_rate, +}; + +static struct clk_lookup sata_refclk_lookup = + CLK("ahci_da850", "refclk", &sata_refclk); + +int __init da850_register_sata_refclk(int rate) +{ + int ret; + + sata_refclk.rate = rate; + ret = clk_register(&sata_refclk); + if (ret) + return ret; + + clkdev_add(&sata_refclk_lookup); + + return 0; +} + static struct resource da850_sata_resources[] = { { .start = DA850_SATA_BASE, diff --git a/arch/arm/mach-davinci/include/mach/da8xx.h b/arch/arm/mach-davinci/include/mach/da8xx.h index 85ff218..7e46422 100644 --- a/arch/arm/mach-davinci/include/mach/da8xx.h +++ b/arch/arm/mach-davinci/include/mach/da8xx.h @@ -95,6 +95,7 @@ int da8xx_register_usb11(struct da8xx_ohci_root_hub *pdata); int da8xx_register_usb_refclkin(int rate); int da8xx_register_usb20_phy_clk(bool use_usb_refclkin); int da8xx_register_usb11_phy_clk(bool use_usb_refclkin); +int da850_register_sata_refclk(int rate); int da8xx_register_emac(void); int da8xx_register_uio_pruss(void); int da8xx_register_lcdc(struct da8xx_lcdc_platform_data *pdata);
Register a dummy clock modelling the external SATA oscillator for da850 DT mode. For non-DT boot we don't register the clock - instead we rely on the default MPY value defined in the da850 ahci driver (as is done currently). Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com> --- arch/arm/mach-davinci/da8xx-dt.c | 8 ++++++++ arch/arm/mach-davinci/devices-da8xx.c | 23 +++++++++++++++++++++++ arch/arm/mach-davinci/include/mach/da8xx.h | 1 + 3 files changed, 32 insertions(+) -- 2.9.3 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel