Skip to contentSkip to conversation

EXYNOS: mmc: support DesignWare Controller for Samsung-SoC

PATCH Superseded Jaehoon Chung 2 participants 4 messages Jul 3, 2012

Subsystems (3)

v1 of 3 Superseded Latest is v3 →

lore
Share & tools
lore
#0 lore raw

PATCH 2/2 EXYNOS: mmc: support DesignWare Controller for Samsung-SoC

Support DesignWare MMC Controller for Samsung Specific.

---
 arch/arm/include/asm/arch-exynos/dwmmc.h |   36 ++++++++++++++++++
 drivers/mmc/exynos_dw_mmc.c              |   60 ++++++++++++++++++++++++++++++
 2 files changed, 96 insertions(+), 0 deletions(-)
 create mode 100644 arch/arm/include/asm/arch-exynos/dwmmc.h
 create mode 100644 drivers/mmc/exynos_dw_mmc.c
arch/arm/include/asm/arch-exynos/dwmmc.h new file +36 -0
new file mode 100644
index 0000000..2e4354d
@@ -0,0 +1,36 @@
+/*
+ * (C) Copyright 2012 SAMSUNG Electronics
+ * Jaehoon Chung <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ */
+
+#define DWMCI_CLKSEL		0x09C
+#define DWMCI_SHIFT_0		0x0
+#define DWMCI_SHIFT_1		0x1
+#define DWMCI_SHIFT_2		0x2
+#define DWMCI_SHIFT_3		0x3
+#define DWMCI_SET_SAMPLE_CLK(x)	(x)
+#define DWMCI_SET_DRV_CLK(x)	((x) << 16)
+#define DWMCI_SET_DIV_RATIO(x)	((x) << 24)
+
+int exynos_dwmci_init(u32 regbase, u32 quirks, int bus_width, int index);
+
+static inline unsigned int exynos_dwmmc_init(int index, int bus_width)
+{
+	unsigned int base = samsung_get_base_mmc() + (0x10000 * index);
+	return exynos_dwmci_init(base, 50000000, 400000, index);
+}
drivers/mmc/exynos_dw_mmc.c new file +60 -0

60 lines not on this page · raw message

Signature · 1 line
1.7.4.1
#1 lore raw

PATCH 2/2 EXYNOS: mmc: support DesignWare Controller for Samsung-SoC

Hi Jaehoon Chung,

Quoted 43 lines · Jaehoon Chung

Support DesignWare MMC Controller for Samsung Specific.

---
 arch/arm/include/asm/arch-exynos/dwmmc.h |   36 ++++++++++++++++++
 drivers/mmc/exynos_dw_mmc.c              |   60 ++++++++++++++++++++++++++++++
 2 files changed, 96 insertions(+), 0 deletions(-)
 create mode 100644 arch/arm/include/asm/arch-exynos/dwmmc.h
 create mode 100644 drivers/mmc/exynos_dw_mmc.c
arch/arm/include/asm/arch-exynos/dwmmc.h new file +25 -0
new file mode 100644
index 0000000..2e4354d
@@ -0,0 +1,36 @@
+/*
+ * (C) Copyright 2012 SAMSUNG Electronics
+ * Jaehoon Chung <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ */
+
+#define DWMCI_CLKSEL           0x09C
+#define DWMCI_SHIFT_0          0x0
+#define DWMCI_SHIFT_1          0x1
+#define DWMCI_SHIFT_2          0x2
+#define DWMCI_SHIFT_3          0x3

arch/arm/include/asm/arch-exynos/dwmmc.h line 35

Quoted 10 lines
arch/arm/include/asm/arch-exynos/dwmmc.h new file +10 -0
+#define DWMCI_SET_SAMPLE_CLK(x)        (x)
+#define DWMCI_SET_DRV_CLK(x)   ((x) << 16)
+#define DWMCI_SET_DIV_RATIO(x) ((x) << 24)
+
+int exynos_dwmci_init(u32 regbase, u32 quirks, int bus_width, int index);
+
+static inline unsigned int exynos_dwmmc_init(int index, int bus_width)
+{
+       unsigned int base = samsung_get_base_mmc() + (0x10000 * index);
+       return exynos_dwmci_init(base, 50000000, 400000, index);

We donot use bus_width here ?

Quoted 48 lines
arch/arm/include/asm/arch-exynos/dwmmc.h new file +1 -0
+}
drivers/mmc/exynos_dw_mmc.c new file +41 -0
new file mode 100644
index 0000000..e9b0e1d
@@ -0,0 +1,60 @@
+/*
+ * (C) Copyright 2012 SAMSUNG Electronics
+ * Jaehoon Chung <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,  MA 02111-1307 USA
+ *
+ */
+
+#include <common.h>
+#include <malloc.h>
+#include <dwmmc.h>
+#include <asm/arch/dwmmc.h>
+#include <asm/arch/clk.h>
+
+static char *EXYNOS_NAME = "EXYNOS DWMMC";
+
+static void exynos_dwmci_clksel(struct dwmci_host *host)
+{
+       u32 val;
+       val = DWMCI_SET_SAMPLE_CLK(DWMCI_SHIFT_0) |
+               DWMCI_SET_DRV_CLK(DWMCI_SHIFT_0) | DWMCI_SET_DIV_RATIO(0);
+
+       dwmci_writel(host, DWMCI_CLKSEL, val);
+}
+
+int exynos_dwmci_init(u32 regbase, u32 quirks, int bus_width, int index)
+{
+       struct dwmci_host *host = NULL;
+       host = (struct dwmci_host *)malloc(sizeof(struct dwmci_host));

drivers/mmc/exynos_dw_mmc.c line 51

Quoted 10 lines
drivers/mmc/exynos_dw_mmc.c new file +10 -0
+       if (!host) {
+               printf("dwmci_host malloc fail!\n");
+               return 1;
+       }
+
+       host->name = EXYNOS_NAME;
+       host->ioaddr = (void *)regbase;
+       host->quirks = quirks;
+       host->buswidth = bus_width;
+       host->fifoth_val = 0x20100010;

Can this hard coding be removed?

drivers/mmc/exynos_dw_mmc.c line 54

Quoted 3 lines
drivers/mmc/exynos_dw_mmc.c new file +3 -0
+       host->clksel = exynos_dwmci_clksel;
+       host->dev_index = index;
+       host->get_mmc_clk = get_mmc_clk;

Can this be just mmc_clk, just a suggestion.

Quoted 12 lines
drivers/mmc/exynos_dw_mmc.c new file +6 -1
+
+       add_dwmci(host, 52000000, 400000, index);
+
+       return 0;
+}
+
--

1.7.4.1
_______________________________________________
U-Boot mailing list
U-Boot at lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

#2 lore raw

PATCH 2/2 EXYNOS: mmc: support DesignWare Controller for Samsung-SoC

Hi,

Quoted 50 lines · Rajeshwari Birje

Hi Jaehoon Chung,

Quoted 46 lines · Jaehoon Chung

Support DesignWare MMC Controller for Samsung Specific.

---
 arch/arm/include/asm/arch-exynos/dwmmc.h |   36 ++++++++++++++++++
 drivers/mmc/exynos_dw_mmc.c              |   60 ++++++++++++++++++++++++++++++
 2 files changed, 96 insertions(+), 0 deletions(-)
 create mode 100644 arch/arm/include/asm/arch-exynos/dwmmc.h
 create mode 100644 drivers/mmc/exynos_dw_mmc.c
arch/arm/include/asm/arch-exynos/dwmmc.h new file +28 -0
new file mode 100644
index 0000000..2e4354d
@@ -0,0 +1,36 @@
+/*
+ * (C) Copyright 2012 SAMSUNG Electronics
+ * Jaehoon Chung <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ */
+
+#define DWMCI_CLKSEL           0x09C
+#define DWMCI_SHIFT_0          0x0
+#define DWMCI_SHIFT_1          0x1
+#define DWMCI_SHIFT_2          0x2
+#define DWMCI_SHIFT_3          0x3
+#define DWMCI_SET_SAMPLE_CLK(x)        (x)
+#define DWMCI_SET_DRV_CLK(x)   ((x) << 16)
+#define DWMCI_SET_DIV_RATIO(x) ((x) << 24)
Quoted 8 lines

arch/arm/include/asm/arch-exynos/dwmmc.h line 35

Quoted 7 lines
arch/arm/include/asm/arch-exynos/dwmmc.h new file +7 -0
+
+int exynos_dwmci_init(u32 regbase, u32 quirks, int bus_width, int index);
+
+static inline unsigned int exynos_dwmmc_init(int index, int bus_width)
+{
+       unsigned int base = samsung_get_base_mmc() + (0x10000 * index);
+       return exynos_dwmci_init(base, 50000000, 400000, index);

We donot use bus_width here ?

It's missing.

Quoted 51 lines
Quoted 51 lines
arch/arm/include/asm/arch-exynos/dwmmc.h new file +1 -0
+}
drivers/mmc/exynos_dw_mmc.c new file +44 -0
new file mode 100644
index 0000000..e9b0e1d
@@ -0,0 +1,60 @@
+/*
+ * (C) Copyright 2012 SAMSUNG Electronics
+ * Jaehoon Chung <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,  MA 02111-1307 USA
+ *
+ */
+
+#include <common.h>
+#include <malloc.h>
+#include <dwmmc.h>
+#include <asm/arch/dwmmc.h>
+#include <asm/arch/clk.h>
+
+static char *EXYNOS_NAME = "EXYNOS DWMMC";
+
+static void exynos_dwmci_clksel(struct dwmci_host *host)
+{
+       u32 val;
+       val = DWMCI_SET_SAMPLE_CLK(DWMCI_SHIFT_0) |
+               DWMCI_SET_DRV_CLK(DWMCI_SHIFT_0) | DWMCI_SET_DIV_RATIO(0);
+
+       dwmci_writel(host, DWMCI_CLKSEL, val);
+}
+
+int exynos_dwmci_init(u32 regbase, u32 quirks, int bus_width, int index)
+{
+       struct dwmci_host *host = NULL;
+       host = (struct dwmci_host *)malloc(sizeof(struct dwmci_host));
+       if (!host) {
+               printf("dwmci_host malloc fail!\n");
+               return 1;
Quoted 8 lines

drivers/mmc/exynos_dw_mmc.c line 51

Quoted 7 lines
drivers/mmc/exynos_dw_mmc.c new file +7 -0
+       }
+
+       host->name = EXYNOS_NAME;
+       host->ioaddr = (void *)regbase;
+       host->quirks = quirks;
+       host->buswidth = bus_width;
+       host->fifoth_val = 0x20100010;

Can this hard coding be removed?

Sure, we can remove this, then should be calculated with register's value at dw_mmc.c. But we have two approaches..
1) Use the register value.
2) Set the fifoth_Val.
If you want to remove, don't mind..but i didn't ensure to work well.

Quoted 4 lines

drivers/mmc/exynos_dw_mmc.c line 54

Quoted 3 lines
drivers/mmc/exynos_dw_mmc.c new file +3 -0
+       host->clksel = exynos_dwmci_clksel;
+       host->dev_index = index;
+       host->get_mmc_clk = get_mmc_clk;

Can this be just mmc_clk, just a suggestion.

Sure..i will change the host->mmc_clk.

Quoted 17 lines
Quoted 7 lines
drivers/mmc/exynos_dw_mmc.c new file +6 -1
+
+       add_dwmci(host, 52000000, 400000, index);
+
+       return 0;
+}
+
--
Quoted 5 lines

1.7.4.1
_______________________________________________
U-Boot mailing list
U-Boot at lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

_______________________________________________
U-Boot mailing list
U-Boot at lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

#3 lore raw

PATCH 2/2 EXYNOS: mmc: support DesignWare Controller for Samsung-SoC

Hi Jaehoon Chung,

Quoted 63 lines · Jaehoon Chung

Hi,

Quoted 50 lines · Rajeshwari Birje

Hi Jaehoon Chung,

Quoted 46 lines · Jaehoon Chung

Support DesignWare MMC Controller for Samsung Specific.

---
 arch/arm/include/asm/arch-exynos/dwmmc.h |   36 ++++++++++++++++++
 drivers/mmc/exynos_dw_mmc.c              |   60 ++++++++++++++++++++++++++++++
 2 files changed, 96 insertions(+), 0 deletions(-)
 create mode 100644 arch/arm/include/asm/arch-exynos/dwmmc.h
 create mode 100644 drivers/mmc/exynos_dw_mmc.c
arch/arm/include/asm/arch-exynos/dwmmc.h new file +28 -0
new file mode 100644
index 0000000..2e4354d
@@ -0,0 +1,36 @@
+/*
+ * (C) Copyright 2012 SAMSUNG Electronics
+ * Jaehoon Chung <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ */
+
+#define DWMCI_CLKSEL           0x09C
+#define DWMCI_SHIFT_0          0x0
+#define DWMCI_SHIFT_1          0x1
+#define DWMCI_SHIFT_2          0x2
+#define DWMCI_SHIFT_3          0x3
+#define DWMCI_SET_SAMPLE_CLK(x)        (x)
+#define DWMCI_SET_DRV_CLK(x)   ((x) << 16)
+#define DWMCI_SET_DIV_RATIO(x) ((x) << 24)
Quoted 8 lines

arch/arm/include/asm/arch-exynos/dwmmc.h line 35

Quoted 7 lines
arch/arm/include/asm/arch-exynos/dwmmc.h new file +7 -0
+
+int exynos_dwmci_init(u32 regbase, u32 quirks, int bus_width, int index);
+
+static inline unsigned int exynos_dwmmc_init(int index, int bus_width)
+{
+       unsigned int base = samsung_get_base_mmc() + (0x10000 * index);
+       return exynos_dwmci_init(base, 50000000, 400000, index);

We donot use bus_width here ?

Quoted 1 line

It's missing.

ok

Quoted 61 lines
Quoted 52 lines
Quoted 52 lines
arch/arm/include/asm/arch-exynos/dwmmc.h new file +1 -0
+}
drivers/mmc/exynos_dw_mmc.c new file +44 -0
new file mode 100644
index 0000000..e9b0e1d
@@ -0,0 +1,60 @@
+/*
+ * (C) Copyright 2012 SAMSUNG Electronics
+ * Jaehoon Chung <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,  MA 02111-1307 USA
+ *
+ */
+
+#include <common.h>
+#include <malloc.h>
+#include <dwmmc.h>
+#include <asm/arch/dwmmc.h>
+#include <asm/arch/clk.h>
+
+static char *EXYNOS_NAME = "EXYNOS DWMMC";
+
+static void exynos_dwmci_clksel(struct dwmci_host *host)
+{
+       u32 val;
+       val = DWMCI_SET_SAMPLE_CLK(DWMCI_SHIFT_0) |
+               DWMCI_SET_DRV_CLK(DWMCI_SHIFT_0) | DWMCI_SET_DIV_RATIO(0);
+
+       dwmci_writel(host, DWMCI_CLKSEL, val);
+}
+
+int exynos_dwmci_init(u32 regbase, u32 quirks, int bus_width, int index)
+{
+       struct dwmci_host *host = NULL;
+       host = (struct dwmci_host *)malloc(sizeof(struct dwmci_host));
+       if (!host) {
+               printf("dwmci_host malloc fail!\n");
+               return 1;
Quoted 8 lines

drivers/mmc/exynos_dw_mmc.c line 51

Quoted 7 lines
drivers/mmc/exynos_dw_mmc.c new file +7 -0
+       }
+
+       host->name = EXYNOS_NAME;
+       host->ioaddr = (void *)regbase;
+       host->quirks = quirks;
+       host->buswidth = bus_width;
+       host->fifoth_val = 0x20100010;

Can this hard coding be removed?

Quoted 5 lines

Sure, we can remove this, then should be calculated with register's value at dw_mmc.c. But we have two approaches..
1) Use the register value.
2) Set the fifoth_Val.
If you want to remove, don't mind..but i didn't ensure to work well.

If not working well, we can at least define it in header file saying #define FIFOTH_VAL 0x20100010
host->fifoth_va = FIFOTH_VAL;

Quoted 7 lines
Quoted 5 lines

drivers/mmc/exynos_dw_mmc.c line 54

Quoted 4 lines
drivers/mmc/exynos_dw_mmc.c new file +3 -0
+       host->clksel = exynos_dwmci_clksel;
+       host->dev_index = index;
+       host->get_mmc_clk = get_mmc_clk;

Can this be just mmc_clk, just a suggestion.

Sure..i will change the host->mmc_clk.

ok

Quoted 20 lines
Quoted 18 lines
Quoted 8 lines
drivers/mmc/exynos_dw_mmc.c new file +6 -1
+
+       add_dwmci(host, 52000000, 400000, index);
+
+       return 0;
+}
+
--
Quoted 5 lines

1.7.4.1
_______________________________________________
U-Boot mailing list
U-Boot at lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

_______________________________________________
U-Boot mailing list
U-Boot at lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot