Re: [RFC PATCH v2 4/6] mmc: sdhci: host: add new f_sdh30

2014-06-29 Thread Vincent Yang
2014-06-27 18:12 GMT+08:00 Mark Rutland mark.rutl...@arm.com:
 On Fri, Jun 27, 2014 at 04:32:21AM +0100, Vincent Yang wrote:
 2014-06-26 19:03 GMT+08:00 Mark Rutland mark.rutl...@arm.com:
  On Thu, Jun 26, 2014 at 07:23:30AM +0100, Vincent Yang wrote:
  This patch adds new host controller driver for
  Fujitsu SDHCI controller f_sdh30.
 
  Signed-off-by: Vincent Yang vincent.y...@tw.fujitsu.com
  ---
   .../devicetree/bindings/mmc/sdhci-fujitsu.txt  |  35 +++
   drivers/mmc/host/Kconfig   |   7 +
   drivers/mmc/host/Makefile  |   1 +
   drivers/mmc/host/sdhci_f_sdh30.c   | 346 
  +
   drivers/mmc/host/sdhci_f_sdh30.h   |  40 +++
   5 files changed, 429 insertions(+)
   create mode 100644 
  Documentation/devicetree/bindings/mmc/sdhci-fujitsu.txt
   create mode 100644 drivers/mmc/host/sdhci_f_sdh30.c
   create mode 100644 drivers/mmc/host/sdhci_f_sdh30.h
 
  diff --git a/Documentation/devicetree/bindings/mmc/sdhci-fujitsu.txt 
  b/Documentation/devicetree/bindings/mmc/sdhci-fujitsu.txt
  new file mode 100644
  index 000..40add438
  --- /dev/null
  +++ b/Documentation/devicetree/bindings/mmc/sdhci-fujitsu.txt
  @@ -0,0 +1,35 @@
  +* Fujitsu SDHCI controller
  +
  +This file documents differences between the core properties in mmc.txt
  +and the properties used by the sdhci_f_sdh30 driver.
  +
  +Required properties:
  +- compatible: fujitsu,f_sdh30
 
  Please use '-' rather than '_' in compatible strings.

 Hi Mark,
 Yes, I'll update it to '-' in next version.

 
  This seems to be the name of the driver. What is the precise name of the
  IP block?

 The name of the IP block is F_SDH30.
 That's why it uses fujitsu,f_sdh30

 Hmm. I'd still be tempted to use fujitsu,f-sdh30.

Hi Mark,
Sure, I'll update it to fujitsu,f-sdh30 in next version.


 
  [...]
 
  +   if (!of_property_read_u32(pdev-dev.of_node, vendor-hs200,
  + priv-vendor_hs200))
  +   dev_info(dev, Applying vendor-hs200 setting\n);
  +   else
  +   priv-vendor_hs200 = 0;
 
  This wasn't in the binding document, and a grep for vendor-hs200 in a
  v3.16-rc2 tree found me nothing.
 
  Please document this.

 Yes, it is a setting for a vendor specific register.
 I'll update it in next version.

 It would be nice to know exactly what this is. We usually shy clear of
 placing register values in dt. I can wait until the next posting if
 you're goin to document that.

I'm thinking about removing this register value in dt.
I'll update it in next version.


  +   if (!of_property_read_u32(pdev-dev.of_node, bus-width, 
  bus_width)) {
  +   if (bus_width == 8) {
  +   dev_info(dev, Applying 8 bit bus width\n);
  +   host-mmc-caps |= MMC_CAP_8_BIT_DATA;
  +   }
  +   }
 
  What if bus-width is not 8, or is not present?

 In both cases, it will not touch host-mmc-caps at all. Then 
 sdhci_add_host()
 will handle it and set MMC_CAP_4_BIT_DATA as default:

 [...]
 /*
 * A controller may support 8-bit width, but the board itself
 * might not have the pins brought out.  Boards that support
 * 8-bit width must set mmc-caps |= MMC_CAP_8_BIT_DATA; in
 * their platform code before calling sdhci_add_host(), and we
 * won't assume 8-bit width for hosts without that CAP.
 */
 if (!(host-quirks  SDHCI_QUIRK_FORCE_1_BIT_DATA))
 mmc-caps |= MMC_CAP_4_BIT_DATA;

 Ok, but does it make sense for a dts to have:

 bus-width = 1;

 If so, we should presumably do something.

 If not, we should at least print a warning that the dtb doesn't make
 sense.

I'll print a warning for invalid values in next version.
Thanks a lot for your review!


Best regards,
Vincent Yang


 Cheers,
 Mark.
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Re: [RFC PATCH v2 4/6] mmc: sdhci: host: add new f_sdh30

2014-06-27 Thread Mark Rutland
On Fri, Jun 27, 2014 at 04:32:21AM +0100, Vincent Yang wrote:
 2014-06-26 19:03 GMT+08:00 Mark Rutland mark.rutl...@arm.com:
  On Thu, Jun 26, 2014 at 07:23:30AM +0100, Vincent Yang wrote:
  This patch adds new host controller driver for
  Fujitsu SDHCI controller f_sdh30.
 
  Signed-off-by: Vincent Yang vincent.y...@tw.fujitsu.com
  ---
   .../devicetree/bindings/mmc/sdhci-fujitsu.txt  |  35 +++
   drivers/mmc/host/Kconfig   |   7 +
   drivers/mmc/host/Makefile  |   1 +
   drivers/mmc/host/sdhci_f_sdh30.c   | 346 
  +
   drivers/mmc/host/sdhci_f_sdh30.h   |  40 +++
   5 files changed, 429 insertions(+)
   create mode 100644 Documentation/devicetree/bindings/mmc/sdhci-fujitsu.txt
   create mode 100644 drivers/mmc/host/sdhci_f_sdh30.c
   create mode 100644 drivers/mmc/host/sdhci_f_sdh30.h
 
  diff --git a/Documentation/devicetree/bindings/mmc/sdhci-fujitsu.txt 
  b/Documentation/devicetree/bindings/mmc/sdhci-fujitsu.txt
  new file mode 100644
  index 000..40add438
  --- /dev/null
  +++ b/Documentation/devicetree/bindings/mmc/sdhci-fujitsu.txt
  @@ -0,0 +1,35 @@
  +* Fujitsu SDHCI controller
  +
  +This file documents differences between the core properties in mmc.txt
  +and the properties used by the sdhci_f_sdh30 driver.
  +
  +Required properties:
  +- compatible: fujitsu,f_sdh30
 
  Please use '-' rather than '_' in compatible strings.
 
 Hi Mark,
 Yes, I'll update it to '-' in next version.
 
 
  This seems to be the name of the driver. What is the precise name of the
  IP block?
 
 The name of the IP block is F_SDH30.
 That's why it uses fujitsu,f_sdh30

Hmm. I'd still be tempted to use fujitsu,f-sdh30.

 
  [...]
 
  +   if (!of_property_read_u32(pdev-dev.of_node, vendor-hs200,
  + priv-vendor_hs200))
  +   dev_info(dev, Applying vendor-hs200 setting\n);
  +   else
  +   priv-vendor_hs200 = 0;
 
  This wasn't in the binding document, and a grep for vendor-hs200 in a
  v3.16-rc2 tree found me nothing.
 
  Please document this.
 
 Yes, it is a setting for a vendor specific register.
 I'll update it in next version.

It would be nice to know exactly what this is. We usually shy clear of
placing register values in dt. I can wait until the next posting if
you're goin to document that.

  +   if (!of_property_read_u32(pdev-dev.of_node, bus-width, 
  bus_width)) {
  +   if (bus_width == 8) {
  +   dev_info(dev, Applying 8 bit bus width\n);
  +   host-mmc-caps |= MMC_CAP_8_BIT_DATA;
  +   }
  +   }
 
  What if bus-width is not 8, or is not present?
 
 In both cases, it will not touch host-mmc-caps at all. Then sdhci_add_host()
 will handle it and set MMC_CAP_4_BIT_DATA as default:
 
 [...]
 /*
 * A controller may support 8-bit width, but the board itself
 * might not have the pins brought out.  Boards that support
 * 8-bit width must set mmc-caps |= MMC_CAP_8_BIT_DATA; in
 * their platform code before calling sdhci_add_host(), and we
 * won't assume 8-bit width for hosts without that CAP.
 */
 if (!(host-quirks  SDHCI_QUIRK_FORCE_1_BIT_DATA))
 mmc-caps |= MMC_CAP_4_BIT_DATA;

Ok, but does it make sense for a dts to have:

bus-width = 1;

If so, we should presumably do something.

If not, we should at least print a warning that the dtb doesn't make
sense.

Cheers,
Mark.
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Re: [RFC PATCH v2 4/6] mmc: sdhci: host: add new f_sdh30

2014-06-26 Thread Mark Rutland
On Thu, Jun 26, 2014 at 07:23:30AM +0100, Vincent Yang wrote:
 This patch adds new host controller driver for
 Fujitsu SDHCI controller f_sdh30.

 Signed-off-by: Vincent Yang vincent.y...@tw.fujitsu.com
 ---
  .../devicetree/bindings/mmc/sdhci-fujitsu.txt  |  35 +++
  drivers/mmc/host/Kconfig   |   7 +
  drivers/mmc/host/Makefile  |   1 +
  drivers/mmc/host/sdhci_f_sdh30.c   | 346 
 +
  drivers/mmc/host/sdhci_f_sdh30.h   |  40 +++
  5 files changed, 429 insertions(+)
  create mode 100644 Documentation/devicetree/bindings/mmc/sdhci-fujitsu.txt
  create mode 100644 drivers/mmc/host/sdhci_f_sdh30.c
  create mode 100644 drivers/mmc/host/sdhci_f_sdh30.h

 diff --git a/Documentation/devicetree/bindings/mmc/sdhci-fujitsu.txt 
 b/Documentation/devicetree/bindings/mmc/sdhci-fujitsu.txt
 new file mode 100644
 index 000..40add438
 --- /dev/null
 +++ b/Documentation/devicetree/bindings/mmc/sdhci-fujitsu.txt
 @@ -0,0 +1,35 @@
 +* Fujitsu SDHCI controller
 +
 +This file documents differences between the core properties in mmc.txt
 +and the properties used by the sdhci_f_sdh30 driver.
 +
 +Required properties:
 +- compatible: fujitsu,f_sdh30

Please use '-' rather than '_' in compatible strings.

This seems to be the name of the driver. What is the precise name of the
IP block?

 +- voltage-ranges : two cells are required, first cell specifies minimum
 +  slot voltage (mV), second cell specifies maximum slot voltage (mV).
 +  Several ranges could be specified.

Describe this as a list of pairs, it's confusing otherwise.

I'm not sure I follow what having multiple pairs implies.

 +Optional properties:
 +- gpios: This is one optional gpio for controlling a power mux which
 +  switches between two power supplies. 3.3V is selected when gpio is high,
 +  and 1.8V is selected when gpio is low. This voltage is used for signal
 +  level.

Give this a more descriptive name, like power-mux-gpios. That will match
up with the style of cd-gpios and wp-gpios.

 +- clocks: Must contain an entry for each entry in clock-names. It is a
 +  list of phandles and clock-specifier pairs.
 +  See ../clocks/clock-bindings.txt for details.
 +- clock-names: Should contain the following two entries:
 +   sd_sd4clk - clock primarily used for tuning process
 +   sd_bclk   - base clock for sdhci controller
 +
 +Example:
 +
 +   sdhci1: sdio@3660 {
 +   compatible = fujitsu,f_sdh30;
 +   reg = 0 0x3660 0x1000;
 +   interrupts = 0 172 0x4,
 +0 173 0x4;
 +   voltage-ranges = 1800 1800 3300 3300;

Place brackets around each pair to make this clearer:

voltage-ranges = 1800 1800, 3300 3300;

[...]

 +   if (!of_property_read_u32(pdev-dev.of_node, vendor-hs200,
 + priv-vendor_hs200))
 +   dev_info(dev, Applying vendor-hs200 setting\n);
 +   else
 +   priv-vendor_hs200 = 0;

This wasn't in the binding document, and a grep for vendor-hs200 in a
v3.16-rc2 tree found me nothing.

Please document this.

 +
 +   if (!of_property_read_u32(pdev-dev.of_node, bus-width, 
 bus_width)) {
 +   if (bus_width == 8) {
 +   dev_info(dev, Applying 8 bit bus width\n);
 +   host-mmc-caps |= MMC_CAP_8_BIT_DATA;
 +   }
 +   }

What if bus-width is not 8, or is not present?

 +
 +   ret = mmc_of_parse_voltage(pdev-dev.of_node, host-ocr_mask);
 +   if (ret) {
 +   dev_err(dev, %s: parse voltage error\n, __func__);
 +   goto err_voltage;
 +   }
 +
 +   host-hw_name = DRIVER_NAME;
 +   host-ops = sdhci_f_sdh30_ops;
 +   host-irq = irq;
 +
 +   host-ioaddr = of_iomap(pdev-dev.of_node, 0);
 +   if (!host-ioaddr) {
 +   dev_err(dev, %s: failed to remap registers\n, __func__);
 +   ret = -ENXIO;
 +   goto err_remap;
 +   }
 +
 +   priv-clk_sd4 = of_clk_get(pdev-dev.of_node, 0);
 +   if (!IS_ERR(priv-clk_sd4)) {
 +   ret = clk_prepare_enable(priv-clk_sd4);
 +   if (ret  0) {
 +   dev_err(dev, Failed to enable sd4 clock: %d\n, ret);
 +   goto err_clk1;
 +   }
 +   }
 +   priv-clk_b = of_clk_get(pdev-dev.of_node, 1);
 +   if (!IS_ERR(priv-clk_b)) {
 +   ret = clk_prepare_enable(priv-clk_b);
 +   if (ret  0) {
 +   dev_err(dev, Failed to enable clk_b clock: %d\n, 
 ret);
 +   goto err_clk2;
 +   }
 +   }

Given you gave these names, get these by name rather than index. It's
less surprising and more flexible.

Thanks,
Mark.
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Re: [RFC PATCH v2 4/6] mmc: sdhci: host: add new f_sdh30

2014-06-26 Thread Vincent Yang
2014-06-26 19:03 GMT+08:00 Mark Rutland mark.rutl...@arm.com:
 On Thu, Jun 26, 2014 at 07:23:30AM +0100, Vincent Yang wrote:
 This patch adds new host controller driver for
 Fujitsu SDHCI controller f_sdh30.

 Signed-off-by: Vincent Yang vincent.y...@tw.fujitsu.com
 ---
  .../devicetree/bindings/mmc/sdhci-fujitsu.txt  |  35 +++
  drivers/mmc/host/Kconfig   |   7 +
  drivers/mmc/host/Makefile  |   1 +
  drivers/mmc/host/sdhci_f_sdh30.c   | 346 
 +
  drivers/mmc/host/sdhci_f_sdh30.h   |  40 +++
  5 files changed, 429 insertions(+)
  create mode 100644 Documentation/devicetree/bindings/mmc/sdhci-fujitsu.txt
  create mode 100644 drivers/mmc/host/sdhci_f_sdh30.c
  create mode 100644 drivers/mmc/host/sdhci_f_sdh30.h

 diff --git a/Documentation/devicetree/bindings/mmc/sdhci-fujitsu.txt 
 b/Documentation/devicetree/bindings/mmc/sdhci-fujitsu.txt
 new file mode 100644
 index 000..40add438
 --- /dev/null
 +++ b/Documentation/devicetree/bindings/mmc/sdhci-fujitsu.txt
 @@ -0,0 +1,35 @@
 +* Fujitsu SDHCI controller
 +
 +This file documents differences between the core properties in mmc.txt
 +and the properties used by the sdhci_f_sdh30 driver.
 +
 +Required properties:
 +- compatible: fujitsu,f_sdh30

 Please use '-' rather than '_' in compatible strings.

Hi Mark,
Yes, I'll update it to '-' in next version.


 This seems to be the name of the driver. What is the precise name of the
 IP block?

The name of the IP block is F_SDH30.
That's why it uses fujitsu,f_sdh30


 +- voltage-ranges : two cells are required, first cell specifies minimum
 +  slot voltage (mV), second cell specifies maximum slot voltage (mV).
 +  Several ranges could be specified.

 Describe this as a list of pairs, it's confusing otherwise.

 I'm not sure I follow what having multiple pairs implies.

Yes, I'll update it in next version.


 +Optional properties:
 +- gpios: This is one optional gpio for controlling a power mux which
 +  switches between two power supplies. 3.3V is selected when gpio is high,
 +  and 1.8V is selected when gpio is low. This voltage is used for signal
 +  level.

 Give this a more descriptive name, like power-mux-gpios. That will match
 up with the style of cd-gpios and wp-gpios.

Yes, I'll update it in next version.


 +- clocks: Must contain an entry for each entry in clock-names. It is a
 +  list of phandles and clock-specifier pairs.
 +  See ../clocks/clock-bindings.txt for details.
 +- clock-names: Should contain the following two entries:
 +   sd_sd4clk - clock primarily used for tuning process
 +   sd_bclk   - base clock for sdhci controller
 +
 +Example:
 +
 +   sdhci1: sdio@3660 {
 +   compatible = fujitsu,f_sdh30;
 +   reg = 0 0x3660 0x1000;
 +   interrupts = 0 172 0x4,
 +0 173 0x4;
 +   voltage-ranges = 1800 1800 3300 3300;

 Place brackets around each pair to make this clearer:

 voltage-ranges = 1800 1800, 3300 3300;

Yes, I'll update it in next version.


 [...]

 +   if (!of_property_read_u32(pdev-dev.of_node, vendor-hs200,
 + priv-vendor_hs200))
 +   dev_info(dev, Applying vendor-hs200 setting\n);
 +   else
 +   priv-vendor_hs200 = 0;

 This wasn't in the binding document, and a grep for vendor-hs200 in a
 v3.16-rc2 tree found me nothing.

 Please document this.

Yes, it is a setting for a vendor specific register.
I'll update it in next version.


 +
 +   if (!of_property_read_u32(pdev-dev.of_node, bus-width, 
 bus_width)) {
 +   if (bus_width == 8) {
 +   dev_info(dev, Applying 8 bit bus width\n);
 +   host-mmc-caps |= MMC_CAP_8_BIT_DATA;
 +   }
 +   }

 What if bus-width is not 8, or is not present?

In both cases, it will not touch host-mmc-caps at all. Then sdhci_add_host()
will handle it and set MMC_CAP_4_BIT_DATA as default:

[...]
/*
* A controller may support 8-bit width, but the board itself
* might not have the pins brought out.  Boards that support
* 8-bit width must set mmc-caps |= MMC_CAP_8_BIT_DATA; in
* their platform code before calling sdhci_add_host(), and we
* won't assume 8-bit width for hosts without that CAP.
*/
if (!(host-quirks  SDHCI_QUIRK_FORCE_1_BIT_DATA))
mmc-caps |= MMC_CAP_4_BIT_DATA;
[...]


 +
 +   ret = mmc_of_parse_voltage(pdev-dev.of_node, host-ocr_mask);
 +   if (ret) {
 +   dev_err(dev, %s: parse voltage error\n, __func__);
 +   goto err_voltage;
 +   }
 +
 +   host-hw_name = DRIVER_NAME;
 +   host-ops = sdhci_f_sdh30_ops;
 +   host-irq = irq;
 +
 +   host-ioaddr = of_iomap(pdev-dev.of_node, 0);
 +   if (!host-ioaddr) {
 +   dev_err(dev, %s: failed to remap registers\n, __func__);
 +   ret = -ENXIO;
 +   goto err_remap;
 +   }
 +