Message ID | 1407051288-17324-19-git-send-email-nikita@compulab.co.il |
---|---|
State | Changes Requested |
Delegated to: | Stefano Babic |
Headers | show |
On Sunday, August 03, 2014 at 09:34:48 AM, Nikita Kiryanov wrote: > Add support for SATA. > > Cc: Igor Grinberg <grinberg@compulab.co.il> > Cc: Stefano Babic <sbabic@denx.de> > Cc: Tom Rini <trini@ti.com> > Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il> I'd just squash all the cf_mx6 patches into the "add cf_mx6 board" patch. Best regards, Marek Vasut
Hi Marek, On 08/03/14 17:10, Marek Vasut wrote: > On Sunday, August 03, 2014 at 09:34:48 AM, Nikita Kiryanov wrote: >> Add support for SATA. >> >> Cc: Igor Grinberg <grinberg@compulab.co.il> >> Cc: Stefano Babic <sbabic@denx.de> >> Cc: Tom Rini <trini@ti.com> >> Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il> > > I'd just squash all the cf_mx6 patches into the "add cf_mx6 board" patch. Well, I tend to disagree on this. I find extremely hard to review the "long long squashed into one patch" patches. It is much easier to review small, functionality oriented, patches.
On Monday, August 04, 2014 at 09:23:12 AM, Igor Grinberg wrote: > Hi Marek, > > On 08/03/14 17:10, Marek Vasut wrote: > > On Sunday, August 03, 2014 at 09:34:48 AM, Nikita Kiryanov wrote: > >> Add support for SATA. > >> > >> Cc: Igor Grinberg <grinberg@compulab.co.il> > >> Cc: Stefano Babic <sbabic@denx.de> > >> Cc: Tom Rini <trini@ti.com> > >> Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il> > > > > I'd just squash all the cf_mx6 patches into the "add cf_mx6 board" patch. > > Well, I tend to disagree on this. > I find extremely hard to review the "long long squashed into one patch" > patches. It is much easier to review small, functionality oriented, > patches. You do have a valid point when it comes to review, all right. There's no point in keeping them separate when they're applied though. Tough decisions this is. Let's see what others think then . Best regards, Marek Vasut
On 08/04/14 11:27, Marek Vasut wrote: > On Monday, August 04, 2014 at 09:23:12 AM, Igor Grinberg wrote: >> Hi Marek, >> >> On 08/03/14 17:10, Marek Vasut wrote: >>> On Sunday, August 03, 2014 at 09:34:48 AM, Nikita Kiryanov wrote: >>>> Add support for SATA. >>>> >>>> Cc: Igor Grinberg <grinberg@compulab.co.il> >>>> Cc: Stefano Babic <sbabic@denx.de> >>>> Cc: Tom Rini <trini@ti.com> >>>> Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il> >>> >>> I'd just squash all the cf_mx6 patches into the "add cf_mx6 board" patch. >> >> Well, I tend to disagree on this. >> I find extremely hard to review the "long long squashed into one patch" >> patches. It is much easier to review small, functionality oriented, >> patches. > > You do have a valid point when it comes to review, all right. There's no point > in keeping them separate when they're applied though. Tough decisions this is. When it comes to keeping them separate when applied, I'd disagree also... Keeping the changes small and functionality oriented helps: a) bisect-ability and blaming/reverting granularity b) gives an opportunity to better explain the change in the commit message c) easier fixing of merge conflicts (if any) d) learning curve for new developers in the log (as to how to add features/fix bugs) e) a bit more burden on maintainers ;-)
On Monday, August 04, 2014 at 12:47:38 PM, Igor Grinberg wrote: > On 08/04/14 11:27, Marek Vasut wrote: > > On Monday, August 04, 2014 at 09:23:12 AM, Igor Grinberg wrote: > >> Hi Marek, > >> > >> On 08/03/14 17:10, Marek Vasut wrote: > >>> On Sunday, August 03, 2014 at 09:34:48 AM, Nikita Kiryanov wrote: > >>>> Add support for SATA. > >>>> > >>>> Cc: Igor Grinberg <grinberg@compulab.co.il> > >>>> Cc: Stefano Babic <sbabic@denx.de> > >>>> Cc: Tom Rini <trini@ti.com> > >>>> Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il> > >>> > >>> I'd just squash all the cf_mx6 patches into the "add cf_mx6 board" > >>> patch. > >> > >> Well, I tend to disagree on this. > >> I find extremely hard to review the "long long squashed into one patch" > >> patches. It is much easier to review small, functionality oriented, > >> patches. > > > > You do have a valid point when it comes to review, all right. There's no > > point in keeping them separate when they're applied though. Tough > > decisions this is. > > When it comes to keeping them separate when applied, I'd disagree also... > Keeping the changes small and functionality oriented helps: > a) bisect-ability and blaming/reverting granularity > b) gives an opportunity to better explain the change in the commit message > c) easier fixing of merge conflicts (if any) > d) learning curve for new developers in the log (as to how to add > features/fix bugs) e) a bit more burden on maintainers ;-) I cannot disagree with neither ;-) Let's go with the split approach then Best regards, Marek Vasut
diff --git a/board/compulab/cm_fx6/cm_fx6.c b/board/compulab/cm_fx6/cm_fx6.c index d06b00e..fe80376 100644 --- a/board/compulab/cm_fx6/cm_fx6.c +++ b/board/compulab/cm_fx6/cm_fx6.c @@ -12,10 +12,12 @@ #include <miiphy.h> #include <netdev.h> #include <fdt_support.h> +#include <sata.h> #include <asm/arch/crm_regs.h> #include <asm/arch/sys_proto.h> #include <asm/arch/iomux.h> #include <asm/imx-common/mxc_i2c.h> +#include <asm/imx-common/sata.h> #include <asm/io.h> #include <asm/gpio.h> #include "common.h" @@ -23,6 +25,94 @@ DECLARE_GLOBAL_DATA_PTR; +#ifdef CONFIG_DWC_AHSATA +static int cm_fx6_issd_gpios[] = { + /* The order of the GPIOs in the array is important! */ + CM_FX6_SATA_PHY_SLP, + CM_FX6_SATA_NRSTDLY, + CM_FX6_SATA_PWREN, + CM_FX6_SATA_NSTANDBY1, + CM_FX6_SATA_NSTANDBY2, + CM_FX6_SATA_LDO_EN, +}; + +static void cm_fx6_sata_power(int on) +{ + int i; + + if (!on) { /* tell the iSSD that the power will be removed */ + gpio_direction_output(CM_FX6_SATA_PWLOSS_INT, 1); + mdelay(10); + } + + for (i = 0; i < ARRAY_SIZE(cm_fx6_issd_gpios); i++) { + gpio_direction_output(cm_fx6_issd_gpios[i], on); + udelay(100); + } + + if (!on) /* for compatibility lower the power loss interrupt */ + gpio_direction_output(CM_FX6_SATA_PWLOSS_INT, 0); +} + +static iomux_v3_cfg_t const sata_pads[] = { + /* SATA PWR */ + IOMUX_PADS(PAD_ENET_TX_EN__GPIO1_IO28 | MUX_PAD_CTRL(NO_PAD_CTRL)), + IOMUX_PADS(PAD_EIM_A22__GPIO2_IO16 | MUX_PAD_CTRL(NO_PAD_CTRL)), + IOMUX_PADS(PAD_EIM_D20__GPIO3_IO20 | MUX_PAD_CTRL(NO_PAD_CTRL)), + IOMUX_PADS(PAD_EIM_A25__GPIO5_IO02 | MUX_PAD_CTRL(NO_PAD_CTRL)), + /* SATA CTRL */ + IOMUX_PADS(PAD_ENET_TXD0__GPIO1_IO30 | MUX_PAD_CTRL(NO_PAD_CTRL)), + IOMUX_PADS(PAD_EIM_D23__GPIO3_IO23 | MUX_PAD_CTRL(NO_PAD_CTRL)), + IOMUX_PADS(PAD_EIM_D29__GPIO3_IO29 | MUX_PAD_CTRL(NO_PAD_CTRL)), + IOMUX_PADS(PAD_EIM_A23__GPIO6_IO06 | MUX_PAD_CTRL(NO_PAD_CTRL)), + IOMUX_PADS(PAD_EIM_BCLK__GPIO6_IO31 | MUX_PAD_CTRL(NO_PAD_CTRL)), + +}; + +static void cm_fx6_setup_issd(void) +{ + SETUP_IOMUX_PADS(sata_pads); + /* Make sure this gpio has logical 0 value */ + gpio_direction_output(CM_FX6_SATA_PWLOSS_INT, 0); + udelay(100); + + cm_fx6_sata_power(0); + mdelay(250); + cm_fx6_sata_power(1); +} + +#define CM_FX6_SATA_INIT_RETRIES 10 +int sata_initialize(void) +{ + int err, i; + + cm_fx6_setup_issd(); + for (i = 0; i < CM_FX6_SATA_INIT_RETRIES; i++) { + err = setup_sata(); + if (err) { + printf("SATA setup failed: %d\n", err); + return err; + } + + udelay(100); + + err = __sata_initialize(); + if (!err) + break; + + /* There is no device on the SATA port */ + if (sata_port_status(0, 0) == 0) + break; + + /* There's a device, but link not established. Retry */ + } + + return err; +} +#else +static void cm_fx6_setup_issd(void) {} +#endif + #ifdef CONFIG_SYS_I2C_MXC #define I2C_PAD_CTRL (PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED | \ PAD_CTL_DSE_40ohm | PAD_CTL_HYS | \ diff --git a/board/compulab/cm_fx6/common.h b/board/compulab/cm_fx6/common.h index bd04d62..ddccffb 100644 --- a/board/compulab/cm_fx6/common.h +++ b/board/compulab/cm_fx6/common.h @@ -19,6 +19,19 @@ #define CM_FX6_ENET_NRST IMX_GPIO_NR(2, 8) #define CM_FX6_USB_HUB_RST IMX_GPIO_NR(7, 8) #define SB_FX6_USB_OTG_PWR IMX_GPIO_NR(3, 22) +#define CM_FX6_ENET_NRST IMX_GPIO_NR(2, 8) +#define CM_FX6_USB_HUB_RST IMX_GPIO_NR(7, 8) +#define SB_FX6_USB_OTG_PWR IMX_GPIO_NR(3, 22) +#define CM_FX6_SATA_PWREN IMX_GPIO_NR(1, 28) +#define CM_FX6_SATA_VDDC_CTRL IMX_GPIO_NR(1, 30) +#define CM_FX6_SATA_LDO_EN IMX_GPIO_NR(2, 16) +#define CM_FX6_SATA_NSTANDBY1 IMX_GPIO_NR(3, 20) +#define CM_FX6_SATA_PHY_SLP IMX_GPIO_NR(3, 23) +#define CM_FX6_SATA_STBY_REQ IMX_GPIO_NR(3, 29) +#define CM_FX6_SATA_NSTANDBY2 IMX_GPIO_NR(5, 2) +#define CM_FX6_SATA_NRSTDLY IMX_GPIO_NR(6, 6) +#define CM_FX6_SATA_PWLOSS_INT IMX_GPIO_NR(6, 31) + #if defined(CONFIG_FSL_ESDHC) #include <fsl_esdhc.h> diff --git a/include/configs/cm_fx6.h b/include/configs/cm_fx6.h index b49fd29..8021299 100644 --- a/include/configs/cm_fx6.h +++ b/include/configs/cm_fx6.h @@ -133,6 +133,19 @@ "mmcboot=echo Booting from mmc ...; " \ "run mmcargs; " \ "run doboot\0" \ + "satadev=0\0" \ + "sataroot=/dev/sda2 rw rootwait\0" \ + "sataargs=setenv bootargs console=${console} " \ + "root=${sataroot} " \ + "${video}\0" \ + "loadsatabootscript=fatload sata ${satadev} ${loadaddr} ${bootscr}\0" \ + "satabootscript=echo Running bootscript from sata ...; " \ + "source ${loadaddr}\0" \ + "sataloadkernel=fatload sata ${satadev} ${loadaddr} ${kernel}\0" \ + "sataloadfdt=fatload sata ${satadev} ${fdtaddr} ${fdtfile}\0" \ + "sataboot=echo Booting from sata ...; "\ + "run sataargs; " \ + "run doboot\0" \ "nandroot=/dev/mtdblock4 rw\0" \ "nandrootfstype=ubifs\0" \ "nandargs=setenv bootargs console=${console} " \ @@ -159,7 +172,19 @@ "run mmcboot;" \ "fi;" \ "fi;" \ - "fi;" + "fi;" \ + "if sata init; then " \ + "if run loadsatabootscript; then " \ + "run satabootscript;" \ + "else "\ + "if run sataloadkernel; then " \ + "if ${loadfdt}; then " \ + "run sataloadfdt; " \ + "fi;" \ + "run sataboot;" \ + "fi;" \ + "fi;" \ + "fi;\0" #define CONFIG_BOOTCOMMAND \ "run setboottypem; run boot" @@ -225,6 +250,15 @@ #define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 1 #define CONFIG_SYS_I2C_EEPROM_BUS 2 +/* SATA */ +#define CONFIG_CMD_SATA +#define CONFIG_SYS_SATA_MAX_DEVICE 1 +#define CONFIG_LIBATA +#define CONFIG_LBA48 +#define CONFIG_DWC_AHSATA +#define CONFIG_DWC_AHSATA_PORT_ID 0 +#define CONFIG_DWC_AHSATA_BASE_ADDR SATA_ARB_BASE_ADDR + /* GPIO */ #define CONFIG_MXC_GPIO
Add support for SATA. Cc: Igor Grinberg <grinberg@compulab.co.il> Cc: Stefano Babic <sbabic@denx.de> Cc: Tom Rini <trini@ti.com> Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il> --- board/compulab/cm_fx6/cm_fx6.c | 90 ++++++++++++++++++++++++++++++++++++++++++ board/compulab/cm_fx6/common.h | 13 ++++++ include/configs/cm_fx6.h | 36 ++++++++++++++++- 3 files changed, 138 insertions(+), 1 deletion(-)