add support for DWC UFS Controller
Subsystems (3)
v10 cover add support for DWC UFS Controller
The work consisted of:
- Fixed typo in ufshcd-pltfrm.c
- Tweak ufshcd.c for UFS 2.0 support
- Implement ufshcd-dwc which contains all DWC HW specific code
- Unipro attributes were added and new registers were added to the driver
- Implement a tc-dwc-g210 containing G210 MPHY specific code
- Implement a tc-dwc-g210 glue platform driver
- Implement a tc-dwc-g210 glue pci driver
- Documentation update
Remark: The individual patches are not atomic, depending on other patches of the set. The patch set was made like this to improve readability.
Joao Pinto (6):
fixed typo in ufshcd-pltfrm
added UFS 2.0 capabilities
added support for DesignWare Controller
added support for Synopsys G210 Test Chip
add TC G210 platform driver
add TC G210 pci driver
.../devicetree/bindings/ufs/tc-dwc-g210-pltfrm.txt | 26 ++ .../devicetree/bindings/ufs/ufshcd-pltfrm.txt | 4 +- MAINTAINERS | 6 + drivers/scsi/ufs/Kconfig | 25 ++ drivers/scsi/ufs/Makefile | 4 + drivers/scsi/ufs/tc-dwc-g210-pci.c | 178 ++++++++++++ drivers/scsi/ufs/tc-dwc-g210-pltfrm.c | 109 +++++++ drivers/scsi/ufs/tc-dwc-g210.c | 315 +++++++++++++++++++++ drivers/scsi/ufs/tc-dwc-g210.h | 19 ++ drivers/scsi/ufs/ufshcd-dwc.c | 150 ++++++++++ drivers/scsi/ufs/ufshcd-dwc.h | 26 ++ drivers/scsi/ufs/ufshcd-pltfrm.c | 2 +- drivers/scsi/ufs/ufshcd.c | 29 +- drivers/scsi/ufs/ufshcd.h | 2 + drivers/scsi/ufs/ufshci-dwc.h | 42 +++ drivers/scsi/ufs/ufshci.h | 1 + drivers/scsi/ufs/unipro.h | 39 +++ 17 files changed, 970 insertions(+), 7 deletions(-) create mode 100644 Documentation/devicetree/bindings/ufs/tc-dwc-g210-pltfrm.txt create mode 100644 drivers/scsi/ufs/tc-dwc-g210-pci.c create mode 100644 drivers/scsi/ufs/tc-dwc-g210-pltfrm.c create mode 100644 drivers/scsi/ufs/tc-dwc-g210.c create mode 100644 drivers/scsi/ufs/tc-dwc-g210.h create mode 100644 drivers/scsi/ufs/ufshcd-dwc.c create mode 100644 drivers/scsi/ufs/ufshcd-dwc.h create mode 100644 drivers/scsi/ufs/ufshci-dwc.h
Signature · 1 line
1.8.1.5
PATCH v10 1/6 fixed typo in ufshcd-pltfrm
Fixed typo in ufshcd-pltfrm.
---
Changes v0->v10:
- Nothing changed (just to keep up with patch set version).
drivers/scsi/ufs/ufshcd-pltfrm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/scsi/ufs/ufshcd-pltfrm.c +1 -1
@@ -353,6 +353,6 @@ EXPORT_SYMBOL_GPL(ufshcd_pltfrm_init);MODULE_AUTHOR ("Santosh Yaragnavi <[email protected]>" );MODULE_AUTHOR ("Vinayak Holikatti <[email protected]>" ); -MODULE_DESCRIPTION ("UFS host controller Pltform bus based glue driver" ); +MODULE_DESCRIPTION ("UFS host controller Platform bus based glue driver" );MODULE_LICENSE ("GPL" );MODULE_VERSION (UFSHCD_DRIVER_VERSION );
Signature · 1 line
1.8.1.5
Re: [PATCH v10 1/6] fixed typo in ufshcd-pltfrm
Quoted 3 lines · On Friday 04 March 2016 17:22:14 Joao Pinto wrote:
Fixed typo in ufshcd-pltfrm.
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH v10 2/6 added UFS 2.0 capabilities
In reply to Joao PintoAdding UFS 2.0 support to the UFS core driver.
---
Changes v8->v10:
- Nothing changed (just to keep up with patch set version). Changes v7->v8:
- Added "jedec, ufs-2.0" to the ufschd-platform compatibility strings Changes v0->v7:
- Nothing changed (just to keep up with patch set version).
.../devicetree/bindings/ufs/ufshcd-pltfrm.txt | 4 +-- drivers/scsi/ufs/ufshcd.c | 29 +++++++++++++++++++--- drivers/scsi/ufs/ufshci.h | 1 + 3 files changed, 28 insertions(+), 6 deletions(-)
Documentation/devicetree/bindings/ufs/ufshcd-pltfrm.txt +2 -2
@@ -4,8 +4,8 @@ UFSHC nodes are defined to describe on-chip UFS host controllers. Each UFS controller instance should have its own node. Required properties: -- compatible : must contain "jedec,ufs-1.1", may also list one or more - of the following: +- compatible : must contain "jedec,ufs-1.1" or "jedec,ufs-2.0", may + also list one or more of the following: "qcom,msm8994-ufshc" "qcom,msm8996-ufshc" "qcom,ufshc"
drivers/scsi/ufs/ufshcd.c +25 -4
@@ -1223,6 +1223,7 @@ static int ufshcd_compose_upiu(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) ret = -EINVAL ; }break ; +case UTP_CMD_TYPE_UFS_STORAGE :case UTP_CMD_TYPE_DEV_MANAGE :ufshcd_prepare_req_desc_hdr (lrbp, &upiu_flags,DMA_NONE );if (hba->dev_cmd.type ==DEV_CMD_TYPE_QUERY )
@@ -1287,6 +1288,7 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd)struct ufshcd_lrb *lrbp;struct ufs_hba *hba;unsigned long flags; +u32 upiu_flags;int tag;int err =0 ;
@@ -1343,10 +1345,23 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd) lrbp->task_tag = tag; lrbp->lun =ufshcd_scsi_to_upiu_lun (cmd->device->lun); lrbp->intr_cmd = !ufshcd_is_intr_aggr_allowed (hba) ? true : false; - lrbp->command_type =UTP_CMD_TYPE_SCSI ; + +if (hba->ufs_version ==UFSHCI_VERSION_20 ) + lrbp->command_type =UTP_CMD_TYPE_UFS_STORAGE ; +else + lrbp->command_type =UTP_CMD_TYPE_SCSI ;/* form UPIU before issuing the command */ -ufshcd_compose_upiu (hba, lrbp); +if (hba->ufs_version ==UFSHCI_VERSION_20 ) { +if (likely (lrbp->cmd)) { +ufshcd_prepare_req_desc_hdr (lrbp, &upiu_flags, + lrbp->cmd->sc_data_direction); +ufshcd_prepare_utp_scsi_cmd_upiu (lrbp, upiu_flags); + }else + err = -EINVAL ; + }else +ufshcd_compose_upiu (hba, lrbp); + err =ufshcd_map_sg (lrbp);if (err) { lrbp->cmd =NULL ;
@@ -1371,7 +1386,12 @@ static int ufshcd_compose_dev_cmd(struct ufs_hba *hba, lrbp->sense_buffer =NULL ; lrbp->task_tag = tag; lrbp->lun =0 ;/* device management cmd is not specific to any LUN */ - lrbp->command_type =UTP_CMD_TYPE_DEV_MANAGE ; + +if (hba->ufs_version ==UFSHCI_VERSION_20 ) + lrbp->command_type =UTP_CMD_TYPE_UFS_STORAGE ; +else + lrbp->command_type =UTP_CMD_TYPE_DEV_MANAGE ; + lrbp->intr_cmd = true;/* No interrupt aggregation */ hba->dev_cmd.type = cmd_type;
@@ -3187,7 +3207,8 @@ static void ufshcd_transfer_req_compl(struct ufs_hba *hba)/* Do not touch lrbp after scsi done */ cmd->scsi_done (cmd);__ufshcd_release (hba); - }else if (lrbp->command_type ==UTP_CMD_TYPE_DEV_MANAGE ) { + }else if (lrbp->command_type ==UTP_CMD_TYPE_DEV_MANAGE || + lrbp->command_type ==UTP_CMD_TYPE_UFS_STORAGE ) {if (hba->dev_cmd.complete)complete (hba->dev_cmd.complete); }
drivers/scsi/ufs/ufshci.h +1 -0
@@ -273,6 +273,7 @@ enum {UTP_CMD_TYPE_SCSI =0x0 ,UTP_CMD_TYPE_UFS =0x1 ,UTP_CMD_TYPE_DEV_MANAGE =0x2 , + UTP_CMD_TYPE_UFS_STORAGE = 0x11, }; enum {
Signature · 1 line
1.8.1.5
Re: [PATCH v10 2/6] added UFS 2.0 capabilities
Quoted 4 lines · On Friday 04 March 2016 17:22:15 Joao Pinto wrote:
Adding UFS 2.0 support to the UFS core driver.
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v10 2/6] added UFS 2.0 capabilities
In reply to Joao PintoQuoted 11 lines · Joao Pinto
Adding UFS 2.0 support to the UFS core driver.
---
Changesv8->v10:
- Nothing changed (just to keep up with patch set version). Changesv7->v8:
- Added "jedec, ufs-2.0" to the ufschd-platform compatibility strings Changesv0->v7:
- Nothing changed (just to keep up with patch set version).
Quoted 4 lines
.../devicetree/bindings/ufs/ufshcd-pltfrm.txt | 4 +-- drivers/scsi/ufs/ufshcd.c | 29 +++++++++++++++++++--- drivers/scsi/ufs/ufshci.h | 1 + 3 files changed, 28 insertions(+), 6 deletions(-)
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Rob Herring
maintainerRe: [RESEND] [PATCH v11 2/6] added UFS 2.0 capabilities
In reply to Joao PintoQuoted 5 lines · Joao Pinto
Adding UFS 2.0 support to the UFS core driver.
Signed-off-by Joao Pinto <[email protected]>Acked-by Arnd Bergmann <[email protected]>Acked-by Rob Herring <[email protected]>
You don't need to resend just to add acks. The maintainer will do that.
Rob
RE: [RESEND] [PATCH v11 2/6] added UFS 2.0 capabilities
In reply to Joao PintoAdding UFS 2.0 support to the UFS core driver.
---
Changes v8->v11:
- Nothing changed (just to keep up with patch set version).
Changes v7->v8:
- Added "jedec, ufs-2.0" to the ufschd-platform compatibility strings Changes v0->v7:
- Nothing changed (just to keep up with patch set version).
.../devicetree/bindings/ufs/ufshcd-pltfrm.txt | 4 +-- drivers/scsi/ufs/ufshcd.c | 29 +++++++++++++++++++--- drivers/scsi/ufs/ufshci.h | 1 + 3 files changed, 28 insertions(+), 6 deletions(-)
Documentation/devicetree/bindings/ufs/ufshcd-pltfrm.txt +2 -2
@@ -4,8 +4,8 @@ UFSHC nodes are defined to describe on-chip UFS host controllers. Each UFS controller instance should have its own node. Required properties: -- compatible : must contain "jedec,ufs-1.1", may also list one or more - of the following: +- compatible : must contain "jedec,ufs-1.1" or "jedec,ufs-2.0", may + also list one or more of the following: "qcom,msm8994-ufshc" "qcom,msm8996-ufshc" "qcom,ufshc"
drivers/scsi/ufs/ufshcd.c index 85cd256..2b5f2bf 100644 renamed from drivers/scsi/ufs/ufshcd.c +0 -0
I think this should go in separate patch
drivers/scsi/ufs/ufshcd.c +1 -0
@@ -1223,6 +1223,7 @@ static int ufshcd_compose_upiu(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) ret = -EINVAL ; }break ; +case UTP_CMD_TYPE_UFS_STORAGE :case UTP_CMD_TYPE_DEV_MANAGE :ufshcd_prepare_req_desc_hdr (lrbp, &upiu_flags,DMA_NONE ); if (hba->dev_cmd.type == DEV_CMD_TYPE_QUERY) @@ -1287,6 +1288,7 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd)
struct ufshcd_lrb *lrbp;
struct ufs_hba *hba;
unsigned long flags;
+ u32 upiu_flags;
int tag;
int err = 0;
@@ -1343,10 +1345,23 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd)
lrbp->task_tag = tag;
lrbp->lun = ufshcd_scsi_to_upiu_lun(cmd->device->lun);
lrbp->intr_cmd = !ufshcd_is_intr_aggr_allowed(hba) ? true : false;
- lrbp->command_type = UTP_CMD_TYPE_SCSI;
+
+ if (hba->ufs_version == UFSHCI_VERSION_20)
+ lrbp->command_type = UTP_CMD_TYPE_UFS_STORAGE;
+ else
+ lrbp->command_type = UTP_CMD_TYPE_SCSI;
This translation can be pushed to prepare_req_desc_hdr and you end up with ~oneliner fix
/* form UPIU before issuing the command */
- ufshcd_compose_upiu(hba, lrbp);
+ if (hba->ufs_version == UFSHCI_VERSION_20) {
+ if (likely(lrbp->cmd)) {
How this can be possible NULL, the code above will crash or I'm missing something ?
+ ufshcd_prepare_req_desc_hdr(lrbp, &upiu_flags,
+ lrbp->cmd->sc_data_direction);
+ ufshcd_prepare_utp_scsi_cmd_upiu(lrbp, upiu_flags);
What is different her from the code in ufshcd_compose_upiu ?
+ } else
+ err = -EINVAL;
+ } else
+ ufshcd_compose_upiu(hba, lrbp);
+
err = ufshcd_map_sg(lrbp);
if (err) {
lrbp->cmd = NULL;
@@ -1371,7 +1386,12 @@ static int ufshcd_compose_dev_cmd(struct ufs_hba *hba,
lrbp->sense_buffer = NULL;
lrbp->task_tag = tag;
lrbp->lun = 0; /* device management cmd is not specific to any LUN */
- lrbp->command_type = UTP_CMD_TYPE_DEV_MANAGE;
+
+ if (hba->ufs_version == UFSHCI_VERSION_20)
+ lrbp->command_type = UTP_CMD_TYPE_UFS_STORAGE;
+ else
+ lrbp->command_type = UTP_CMD_TYPE_DEV_MANAGE;
+
This translation can be pushed to prepare_req_desc_hdr and you end up with ~ oneliner fix
lrbp->intr_cmd = true; /* No interrupt aggregation */ hba->dev_cmd.type = cmd_type;
@@ -3187,7 +3207,8 @@ static void ufshcd_transfer_req_compl(struct ufs_hba *hba)
/* Do not touch lrbp after scsi done */ cmd->scsi_done(cmd);
__ufshcd_release(hba);
- } else if (lrbp->command_type == UTP_CMD_TYPE_DEV_MANAGE) {
+ } else if (lrbp->command_type == UTP_CMD_TYPE_DEV_MANAGE ||
+ lrbp->command_type == UTP_CMD_TYPE_UFS_STORAGE) {
if (hba->dev_cmd.complete)
complete(hba->dev_cmd.complete);
}
drivers/scsi/ufs/ufshci.h +1 -0
@@ -273,6 +273,7 @@ enum {UTP_CMD_TYPE_SCSI =0x0 ,UTP_CMD_TYPE_UFS =0x1 ,UTP_CMD_TYPE_DEV_MANAGE =0x2 , + UTP_CMD_TYPE_UFS_STORAGE = 0x11, }; enum {
--
1.8.1.5
Re: [RESEND] [PATCH v11 2/6] added UFS 2.0 capabilities
Hi Thomas,
Quoted 35 lines · Tomas
Adding UFS 2.0 support to the UFS core driver.
Signed-off-by Joao Pinto <[email protected]>Acked-by Arnd Bergmann <[email protected]>Acked-by Rob Herring <[email protected]>---
Changesv8->v11:
- Nothing changed (just to keep up with patch set version).
Changesv7->v8:
- Added "jedec, ufs-2.0" to the ufschd-platform compatibility strings Changesv0->v7:
- Nothing changed (just to keep up with patch set version)..../devicetree/bindings/ufs/ufshcd-pltfrm.txt | 4 +-- drivers/scsi/ufs/ufshcd.c | 29 +++++++++++++++++++--- drivers/scsi/ufs/ufshci.h | 1 + 3 files changed, 28 insertions(+), 6 deletions(-)Documentation/devicetree/bindings/ufs/ufshcd-pltfrm.txt +2
-2@@ -4,8 +4,8 @@ UFSHC nodes are defined to describe on-chip UFS host controllers. Each UFS controller instance should have its own node. Required properties: -- compatible : must contain "jedec,ufs-1.1", may also list one or more - of the following: +- compatible : must contain "jedec,ufs-1.1" or "jedec,ufs-2.0", may + also list one or more of the following: "qcom,msm8994-ufshc" "qcom,msm8996-ufshc" "qcom,ufshc"drivers/scsi/ufs/ufshcd.c index 85cd256..2b5f2bf 100644 renamed from drivers/scsi/ufs/ufshcd.c +0
-0
Quoted 1 line
I think this should go in separate patch
In my opinion it only makes sense to add 2.0 to the device-tree binding if the driver actually supports it, that was why I added to the same patch, but of course it can be separated if more people agree with the approach.
Quoted 28 lines
drivers/scsi/ufs/ufshcd.c +1
-0@@ -1223,6 +1223,7 @@ static int ufshcd_compose_upiu(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) ret = -EINVAL ; }break ; +case UTP_CMD_TYPE_UFS_STORAGE :case UTP_CMD_TYPE_DEV_MANAGE :ufshcd_prepare_req_desc_hdr (lrbp, &upiu_flags,DMA_NONE ); if (hba->dev_cmd.type == DEV_CMD_TYPE_QUERY) @@ -1287,6 +1288,7 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd)drivers/scsi/ufs/ufshcd.c +6
-1struct ufshcd_lrb *lrbp;struct ufs_hba *hba;unsigned long flags; +u32 upiu_flags;int tag;int err =0 ;@@ -1343,10 +1345,23 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd) lrbp->task_tag = tag; lrbp->lun =ufshcd_scsi_to_upiu_lun (cmd->device->lun); lrbp->intr_cmd = !ufshcd_is_intr_aggr_allowed (hba) ? true : false; - lrbp->command_type =UTP_CMD_TYPE_SCSI ; + +if (hba->ufs_version ==UFSHCI_VERSION_20 ) + lrbp->command_type =UTP_CMD_TYPE_UFS_STORAGE ; +else + lrbp->command_type =UTP_CMD_TYPE_SCSI ;
Quoted 1 line
This translation can be pushed to
prepare_req_desc_hdrand you end up with ~oneliner fix
I think your suggestion is good! We have to check the 2.0 version in 2 places and with your approach we would only check it in prepare_req_desc_hdr() once. I will do that update!
Quoted 11 lines
drivers/scsi/ufs/ufshcd.c +2
-1/* form UPIU before issuing the command */ -ufshcd_compose_upiu (hba, lrbp); +if (hba->ufs_version ==UFSHCI_VERSION_20 ) { +if (likely (lrbp->cmd)) {How this can be possible NULL, the code above will crash or I'm missing something ?
drivers/scsi/ufs/ufshcd.c +3
-0+ufshcd_prepare_req_desc_hdr (lrbp, &upiu_flags, + lrbp->cmd->sc_data_direction); +ufshcd_prepare_utp_scsi_cmd_upiu (lrbp, upiu_flags);What is different her from the code in
ufshcd_compose_upiu?
drivers/scsi/ufs/ufshcd.c
Quoted 4 lines
drivers/scsi/ufs/ufshcd.c +4
-0+ }else + err = -EINVAL ; + }else +ufshcd_compose_upiu (hba, lrbp);
If you check ufshcd_compose_upiu() you will see that it contains 2 scopes:cmd_upiu and query_req_upiu. Before 2.0 this single function approach that had both scopes worked well, but now with 2.0 we must use the same command_type (UTP_CMD_TYPE_UFS_STORAGE) which causes incompatibility. This was why I put the same code from cmd_upiu in the outside.
Of course we can break ufshcd_compose_upiu() in 2: ufshcd_compose_cmd_upiu() and ufshcd_compose_query_upiu(). What do you think?
Quoted 44 lines
drivers/scsi/ufs/ufshcd.c +7
-1+ err =ufshcd_map_sg (lrbp);if (err) { lrbp->cmd =NULL ;@@ -1371,7 +1386,12 @@ static int ufshcd_compose_dev_cmd(struct ufs_hba *hba, lrbp->sense_buffer =NULL ; lrbp->task_tag = tag; lrbp->lun =0 ;/* device management cmd is not specific to any LUN */ - lrbp->command_type =UTP_CMD_TYPE_DEV_MANAGE ; + +if (hba->ufs_version ==UFSHCI_VERSION_20 ) + lrbp->command_type =UTP_CMD_TYPE_UFS_STORAGE ; +else + lrbp->command_type =UTP_CMD_TYPE_DEV_MANAGE ; +This translation can be pushed to
prepare_req_desc_hdrand you end up with ~ oneliner fixdrivers/scsi/ufs/ufshcd.c +2
-1lrbp->intr_cmd = true;/* No interrupt aggregation */ hba->dev_cmd.type = cmd_type;@@ -3187,7 +3207,8 @@ static void ufshcd_transfer_req_compl(struct ufs_hba *hba)/* Do not touch lrbp after scsi done */ cmd->scsi_done (cmd);__ufshcd_release (hba); - }else if (lrbp->command_type ==UTP_CMD_TYPE_DEV_MANAGE ) { + }else if (lrbp->command_type ==UTP_CMD_TYPE_DEV_MANAGE || + lrbp->command_type ==UTP_CMD_TYPE_UFS_STORAGE ) {if (hba->dev_cmd.complete)complete (hba->dev_cmd.complete); }drivers/scsi/ufs/ufshci.h +1
-1@@ -273,6 +273,7 @@ enum {UTP_CMD_TYPE_SCSI =0x0 ,UTP_CMD_TYPE_UFS =0x1 ,UTP_CMD_TYPE_DEV_MANAGE =0x2 , + UTP_CMD_TYPE_UFS_STORAGE = 0x11, }; enum { --1.8.1.5
Quoted 3 lines
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Thanks,
Joao
RE: [RESEND] [PATCH v11 2/6] added UFS 2.0 capabilities
Hi Thomas,
Quoted 37 lines · Tomas
Adding UFS 2.0 support to the UFS core driver.
Signed-off-by Joao Pinto <[email protected]>Acked-by Arnd Bergmann <[email protected]>Acked-by Rob Herring <[email protected]>---
Changesv8->v11:
- Nothing changed (just to keep up with patch set version).
Changesv7->v8:
- Added "jedec, ufs-2.0" to the ufschd-platform compatibility strings Changesv0->v7:
- Nothing changed (just to keep up with patch set version)..../devicetree/bindings/ufs/ufshcd-pltfrm.txt | 4 +-- drivers/scsi/ufs/ufshcd.c | 29 +++++++++++++++++++--- drivers/scsi/ufs/ufshci.h | 1 + 3 files changed, 28 insertions(+), 6 deletions(-)Documentation/devicetree/bindings/ufs/ufshcd-pltfrm.txt +2
-2@@ -4,8 +4,8 @@ UFSHC nodes are defined to describe on-chip UFS host controllers. Each UFS controller instance should have its own node. Required properties: -- compatible : must contain "jedec,ufs-1.1", may also list one or more - of the following: +- compatible : must contain "jedec,ufs-1.1" or "jedec,ufs-2.0", may + also list one or more of the following: "qcom,msm8994-ufshc" "qcom,msm8996-ufshc" "qcom,ufshc"drivers/scsi/ufs/ufshcd.c +0
-0
Quoted 1 line
I think this should go in separate patch
In my opinion it only makes sense to add 2.0 to the device-tree binding if the driver actually supports it, that was why I added to the same patch, but of course it can be separated if more people agree with the approach.
Yes, we have ufshcd-pci device that needs that so I think this should go separately
Quoted 28 lines
drivers/scsi/ufs/ufshcd.c +1
-0@@ -1223,6 +1223,7 @@ static int ufshcd_compose_upiu(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) ret = -EINVAL ; }break ; +case UTP_CMD_TYPE_UFS_STORAGE :case UTP_CMD_TYPE_DEV_MANAGE :ufshcd_prepare_req_desc_hdr (lrbp, &upiu_flags,DMA_NONE ); if (hba->dev_cmd.type == DEV_CMD_TYPE_QUERY) @@ -1287,6 +1288,7 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd)drivers/scsi/ufs/ufshcd.c +6
-1struct ufshcd_lrb *lrbp;struct ufs_hba *hba;unsigned long flags; +u32 upiu_flags;int tag;int err =0 ;@@ -1343,10 +1345,23 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd) lrbp->task_tag = tag; lrbp->lun =ufshcd_scsi_to_upiu_lun (cmd->device->lun); lrbp->intr_cmd = !ufshcd_is_intr_aggr_allowed (hba) ? true : false; - lrbp->command_type =UTP_CMD_TYPE_SCSI ; + +if (hba->ufs_version ==UFSHCI_VERSION_20 ) + lrbp->command_type =UTP_CMD_TYPE_UFS_STORAGE ; +else + lrbp->command_type =UTP_CMD_TYPE_SCSI ;
Quoted 2 lines
This translation can be pushed to
prepare_req_desc_hdrand you end up with ~oneliner fix
I think your suggestion is good! We have to check the 2.0 version in 2 places and with your approach we would only check it in prepare_req_desc_hdr() once. I will do that update!
Okay I think you can alter ufshcd_lrb structure and push the information there,
Add ufs version there as hba is not available in req_desc_hdr, I think both command_type and ufs_version can be u8 so the structure won't grow.
Quoted 11 lines
drivers/scsi/ufs/ufshcd.c +2
-1/* form UPIU before issuing the command */ -ufshcd_compose_upiu (hba, lrbp); +if (hba->ufs_version ==UFSHCI_VERSION_20 ) { +if (likely (lrbp->cmd)) {How this can be possible NULL, the code above will crash or I'm missing something ?
drivers/scsi/ufs/ufshcd.c +3
-0+ufshcd_prepare_req_desc_hdr (lrbp, &upiu_flags, + lrbp->cmd->sc_data_direction); +ufshcd_prepare_utp_scsi_cmd_upiu (lrbp, upiu_flags);What is different her from the code in
ufshcd_compose_upiu?
drivers/scsi/ufs/ufshcd.c
Quoted 4 lines
drivers/scsi/ufs/ufshcd.c +4
-0+ }else + err = -EINVAL ; + }else +ufshcd_compose_upiu (hba, lrbp);
If you check ufshcd_compose_upiu() you will see that it contains 2 scopes:cmd_upiu and query_req_upiu. Before 2.0 this single function approach that had both scopes worked well, but now with 2.0 we must use the same command_type (UTP_CMD_TYPE_UFS_STORAGE) which causes incompatibility. This was why I put the same code from cmd_upiu in the outside.
Of course we can break ufshcd_compose_upiu() in 2: ufshcd_compose_cmd_upiu() and ufshcd_compose_query_upiu(). What do you think? If you use ufs_version only in req_desc_hdr then you don't need this
If (ufs_version == 2.0)
cmd_type = UFS_STORAGE
else
cmd_type = lrb->command_type
...
I think with this change
Quoted 36 lines
drivers/scsi/ufs/ufshcd.c +7
-1+ err =ufshcd_map_sg (lrbp);if (err) { lrbp->cmd =NULL ;@@ -1371,7 +1386,12 @@ static int ufshcd_compose_dev_cmd(struct ufs_hba *hba, lrbp->sense_buffer =NULL ; lrbp->task_tag = tag; lrbp->lun =0 ;/* device management cmd is not specific to any LUN */ - lrbp->command_type =UTP_CMD_TYPE_DEV_MANAGE ; + +if (hba->ufs_version ==UFSHCI_VERSION_20 ) + lrbp->command_type =UTP_CMD_TYPE_UFS_STORAGE ; +else + lrbp->command_type =UTP_CMD_TYPE_DEV_MANAGE ; +This translation can be pushed to
prepare_req_desc_hdrand you end up with ~ oneliner fixdrivers/scsi/ufs/ufshcd.c +2
-1lrbp->intr_cmd = true;/* No interrupt aggregation */ hba->dev_cmd.type = cmd_type;@@ -3187,7 +3207,8 @@ static void ufshcd_transfer_req_compl(struct ufs_hba *hba)/* Do not touch lrbp after scsi done */ cmd->scsi_done (cmd);__ufshcd_release (hba); - }else if (lrbp->command_type ==UTP_CMD_TYPE_DEV_MANAGE ) { + }else if (lrbp->command_type ==UTP_CMD_TYPE_DEV_MANAGE || + lrbp->command_type ==UTP_CMD_TYPE_UFS_STORAGE ) {if (hba->dev_cmd.complete)complete (hba->dev_cmd.complete); }drivers/scsi/ufs/ufshci.h +0
-0
drivers/scsi/ufs/ufshci.h enum { · line 276
Quoted 4 lines
drivers/scsi/ufs/ufshci.h +1
-0@@ -273,6 +273,7 @@ enum {UTP_CMD_TYPE_SCSI =0x0 ,UTP_CMD_TYPE_UFS =0x1 ,UTP_CMD_TYPE_DEV_MANAGE =0x2 , + UTP_CMD_TYPE_UFS_STORAGE = 0x11,
Why 0x11?
Thanks
Tomas
Re: [RESEND] [PATCH v11 2/6] added UFS 2.0 capabilities
Quoted 40 lines · Tomas
Hi Thomas,
Quoted 37 lines · Tomas
Adding UFS 2.0 support to the UFS core driver.
Signed-off-by Joao Pinto <[email protected]>Acked-by Arnd Bergmann <[email protected]>Acked-by Rob Herring <[email protected]>---
Changesv8->v11:
- Nothing changed (just to keep up with patch set version).
Changesv7->v8:
- Added "jedec, ufs-2.0" to the ufschd-platform compatibility strings Changesv0->v7:
- Nothing changed (just to keep up with patch set version)..../devicetree/bindings/ufs/ufshcd-pltfrm.txt | 4 +-- drivers/scsi/ufs/ufshcd.c | 29 +++++++++++++++++++--- drivers/scsi/ufs/ufshci.h | 1 + 3 files changed, 28 insertions(+), 6 deletions(-)Documentation/devicetree/bindings/ufs/ufshcd-pltfrm.txt +2
-2@@ -4,8 +4,8 @@ UFSHC nodes are defined to describe on-chip UFS host controllers. Each UFS controller instance should have its own node. Required properties: -- compatible : must contain "jedec,ufs-1.1", may also list one or more - of the following: +- compatible : must contain "jedec,ufs-1.1" or "jedec,ufs-2.0", may + also list one or more of the following: "qcom,msm8994-ufshc" "qcom,msm8996-ufshc" "qcom,ufshc"drivers/scsi/ufs/ufshcd.c +0
-0
Quoted 5 lines
Quoted 1 line
I think this should go in separate patch
In my opinion it only makes sense to add 2.0 to the device-tree binding if the driver actually supports it, that was why I added to the same patch, but of course it can be separated if more people agree with the approach.
Yes, we have ufshcd-pci device that needs that so I think this should go separately
I will separate this, no problem.
Quoted 34 lines
Quoted 28 lines
drivers/scsi/ufs/ufshcd.c +1
-0@@ -1223,6 +1223,7 @@ static int ufshcd_compose_upiu(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) ret = -EINVAL ; }break ; +case UTP_CMD_TYPE_UFS_STORAGE :case UTP_CMD_TYPE_DEV_MANAGE :ufshcd_prepare_req_desc_hdr (lrbp, &upiu_flags,DMA_NONE ); if (hba->dev_cmd.type == DEV_CMD_TYPE_QUERY) @@ -1287,6 +1288,7 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd)drivers/scsi/ufs/ufshcd.c +6
-1struct ufshcd_lrb *lrbp;struct ufs_hba *hba;unsigned long flags; +u32 upiu_flags;int tag;int err =0 ;@@ -1343,10 +1345,23 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd) lrbp->task_tag = tag; lrbp->lun =ufshcd_scsi_to_upiu_lun (cmd->device->lun); lrbp->intr_cmd = !ufshcd_is_intr_aggr_allowed (hba) ? true : false; - lrbp->command_type =UTP_CMD_TYPE_SCSI ; + +if (hba->ufs_version ==UFSHCI_VERSION_20 ) + lrbp->command_type =UTP_CMD_TYPE_UFS_STORAGE ; +else + lrbp->command_type =UTP_CMD_TYPE_SCSI ;Quoted 2 lines
This translation can be pushed to
prepare_req_desc_hdrand you end up with ~oneliner fixI think your suggestion is good! We have to check the 2.0 version in 2 places and with your approach we would only check it in
prepare_req_desc_hdr()once. I will do that update!
Quoted 2 lines
Okay I think you can alter
ufshcd_lrbstructure and push the information there,
Add ufs version there as hba is not available inreq_desc_hdr, I think bothcommand_typeandufs_versioncan be u8 so the structure won't grow.
Going to check it out.
Quoted 25 lines
Quoted 13 lines
drivers/scsi/ufs/ufshcd.c +2
-1/* form UPIU before issuing the command */ -ufshcd_compose_upiu (hba, lrbp); +if (hba->ufs_version ==UFSHCI_VERSION_20 ) { +if (likely (lrbp->cmd)) {How this can be possible NULL, the code above will crash or I'm missing something ?
drivers/scsi/ufs/ufshcd.c +3
-0+ufshcd_prepare_req_desc_hdr (lrbp, &upiu_flags, + lrbp->cmd->sc_data_direction); +ufshcd_prepare_utp_scsi_cmd_upiu (lrbp, upiu_flags);What is different her from the code in
ufshcd_compose_upiu?drivers/scsi/ufs/ufshcd.c
Quoted 4 lines
drivers/scsi/ufs/ufshcd.c +4
-0+ }else + err = -EINVAL ; + }else +ufshcd_compose_upiu (hba, lrbp);If you check
ufshcd_compose_upiu()you will see that it contains 2 scopes:cmd_upiuandquery_req_upiu. Before 2.0 this single function approach that had both scopes worked well, but now with 2.0 we must use the samecommand_type(UTP_CMD_TYPE_UFS_STORAGE) which causes incompatibility. This was why I put the same code fromcmd_upiuin the outside.Of course we can break
ufshcd_compose_upiu()in 2:ufshcd_compose_cmd_upiu()andufshcd_compose_query_upiu(). What do you think? If you useufs_versiononly inreq_desc_hdrthen you don't need this
Quoted 7 lines
If (
ufs_version== 2.0)
cmd_type=UFS_STORAGE
elsecmd_type = lrb->command_type...
I think with this change
Ok, I will test that.
Quoted 7 lines
Quoted 7 lines
drivers/scsi/ufs/ufshcd.c +1
-0+ err =ufshcd_map_sg (lrbp);if (err) { lrbp->cmd =NULL ;@@ -1371,7 +1386,12 @@ static int ufshcd_compose_dev_cmd(struct ufs_hba *hba, lrbp->sense_buffer =NULL ;
[snip]
Quoted 4 lines
Quoted 4 lines
drivers/scsi/ufs/ufshcd.c +0
-0complete (hba->dev_cmd.complete); }drivers/scsi/ufs/ufshci.h +0
-0
Quoted 8 lines
drivers/scsi/ufs/ufshci.h enum { · line 276
Quoted 7 lines
drivers/scsi/ufs/ufshci.h +1
-0@@ -273,6 +273,7 @@ enum {UTP_CMD_TYPE_SCSI =0x0 ,UTP_CMD_TYPE_UFS =0x1 ,UTP_CMD_TYPE_DEV_MANAGE =0x2 , + UTP_CMD_TYPE_UFS_STORAGE = 0x11,Why
0x11?
I'll have to check with our R&D team.
Quoted 4 lines
Thanks
Tomas
Thanks
Joao
PATCH v10 3/6 added support for DesignWare Controller
In reply to Joao PintoThis patch has the goal to add support for DesignWare UFS Controller specific operations.
---
Changes v9->v10 (Arnd Bergmann):
- Patch now only has DWC controller specific code
- Added custom_phy_initialization callback for PHY specific code Changes v8->v9 (Robert Herring):
- drop 0x in the node declaration
- most specific compatibility string declared first
Changes v7->v8 (Akinobu Mita):
- DME sets were simplified for easier reading
- CLK DIV default values definitions names were changed to match the register's name
- New line added to dev_err and dev_info statements
Changes v6->v7 (Arnd Bergmann):
- Changed DT node name (to ufs only) and the memory address (to 0xd000000)
- Removed CONFIG_PM from the PCI glue driver (pm.h already does this)
- No other changes are necessary in ufshcd.c because of the link up notify function usage (it is simpler now)
- Removed the PHY mentioning since the Test Chip is not a real PHY for real world usage, since it is a test chip for prototyping with a very specific usage
- Added again the Test Chip 20-bit option
Changes v5->v6:
- Patch bad format fixed
Changes v4->v5 (Akinobu Mita):
- All functions used only locally in ufshcd-dwc are now declared as static
- ufshcd_dwc_configuration() was removed in ufshcd-dwc and a notify function (ufshcd_dwc_link_startup_notify) was created to deal with the DWC specific init routines
- 20-bit RMMI option was removed from Kconfig. Now if MPHY TC is selected and 40-bit is not then it assumes a 20-bit config
Changes v3->v4 (Arnd Bergmann and Mark Rutland):
- SCSI_UFS_DWC_HOOKS is now silent and selected by the SCSI_UFS_DWC_PLAT or SCSI_UFS_DWC_PCI
- Compatibility string has the ufs core version for info purposes since the driver is capable of getting the controller version from its registers
- Created ufs-dwc-pci glue driver with specific DWC data
- MPHY configuration remains in the ufshcd-dwc since it is unipro attribute writting only not following the a linux phy framework logic
Changes v2->v3 (Julian Calaby):
- Implement a common DWC code to be used by the platform and pci glue drivers
- Synopsys ID & Class added to the existing pci driver and specific DWC was also added to the pci driver
Changes v1->v2 (Akinobu Mita):
- Implement a platform driver that uses the existing UFS core driver
- Add DWC specific code to the existing UFS core driver
MAINTAINERS | 6 ++ drivers/scsi/ufs/Kconfig | 3 + drivers/scsi/ufs/Makefile | 1 + drivers/scsi/ufs/ufshcd-dwc.c | 150 ++++++++++++++++++++++++++++++++++++++++++ drivers/scsi/ufs/ufshcd-dwc.h | 26 ++++++++ drivers/scsi/ufs/ufshcd.h | 2 + drivers/scsi/ufs/ufshci-dwc.h | 42 ++++++++++++ drivers/scsi/ufs/unipro.h | 39 +++++++++++ 8 files changed, 269 insertions(+) create mode 100644 drivers/scsi/ufs/ufshcd-dwc.c create mode 100644 drivers/scsi/ufs/ufshcd-dwc.h create mode 100644 drivers/scsi/ufs/ufshci-dwc.h
MAINTAINERS +6 -0
@@ -11006,6 +11006,12 @@ S: Supported F: Documentation/scsi/ufs.txt F: drivers/scsi/ufs/ +UNIVERSAL FLASH STORAGE HOST CONTROLLER DRIVER DWC HOOKS +M: Joao Pinto <[email protected]> +L: [email protected] +S: Supported +F: drivers/scsi/ufs/*dwc* + UNSORTED BLOCK IMAGES (UBI) M: Artem Bityutskiy <[email protected]> M: Richard Weinberger <[email protected]>
drivers/scsi/ufs/Kconfig +3 -0
@@ -83,3 +83,6 @@ config SCSI_UFS_QCOM Select this if you have UFS controller on QCOM chipset. If unsure, say N. + +config SCSI_UFS_DWC + bool
drivers/scsi/ufs/Makefile +1 -0
@@ -1,4 +1,5 @@ # UFSHCD makefile +obj-$(CONFIG_SCSI_UFS_DWC) += ufshcd-dwc.o obj-$(CONFIG_SCSI_UFS_QCOM) += ufs-qcom.o obj-$(CONFIG_SCSI_UFSHCD) += ufshcd.o obj-$(CONFIG_SCSI_UFSHCD_PCI) += ufshcd-pci.o
drivers/scsi/ufs/ufshcd-dwc.c new file +150 -0
150 lines not on this page · raw message
drivers/scsi/ufs/ufshcd-dwc.h new file +26 -0
@@ -0,0 +1,26 @@ +/* +* UFS Host driver for Synopsys Designware Core +* +* Copyright (C) 2015-2016 Synopsys, Inc. (www.synopsys.com) +* +* Authors: Joao Pinto <[email protected]> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License version 2 as +* published by the Free Software Foundation. +*/ + +#ifndef _UFSHCD_DWC_H +#define _UFSHCD_DWC_H + +struct ufshcd_dme_attr_val { +u32 attr_sel; +u32 mib_val; +u8 peer; +}; + +int ufshcd_dwc_link_startup_notify (struct ufs_hba *hba, +enum ufs_notify_change_status status); +int ufshcd_dwc_dme_set_attrs (struct ufs_hba *hba, +const struct ufshcd_dme_attr_val *v,int n); +#endif /* End of Header */
drivers/scsi/ufs/ufshcd.h +2 -0
@@ -262,6 +262,7 @@ struct ufs_pwr_mode_info {* @suspend: called during host controller PM callback * @resume: called during host controller PM callback * @dbg_register_dump: used to dump controller debug information +* @custom_phy_initialization: used to initialize phys in DWC Cores */ struct ufs_hba_variant_ops {const char *name;
@@ -283,6 +284,7 @@ struct ufs_hba_variant_ops {int (*suspend)(struct ufs_hba *,enum ufs_pm_op );int (*resume)(struct ufs_hba *,enum ufs_pm_op );void (*dbg_register_dump)(struct ufs_hba *hba); +int (*custom_phy_initialization)(struct ufs_hba *); };/* clock gating state */
drivers/scsi/ufs/ufshci-dwc.h new file +42 -0
42 lines not on this page · raw message
drivers/scsi/ufs/unipro.h +39 -0
@@ -35,6 +35,10 @@#define TX_LCC_SEQUENCER 0x0032#define TX_MIN_ACTIVATETIME 0x0033#define TX_PWM_G6_G7_SYNC_LENGTH 0x0034 +#define TX_REFCLKFREQ 0x00EB +#define TX_CFGCLKFREQVAL 0x00EC +#define CFGEXTRATTR 0x00F0 +#define DITHERCTRL2 0x00F1/* * M-RX Configuration Attributes
@@ -48,8 +52,38 @@#define RX_ENTER_HIBERN8 0x00A7#define RX_BYPASS_8B10B_ENABLE 0x00A8#define RX_TERMINATION_FORCE_ENABLE 0x0089 +#define RX_REFCLKFREQ 0x00EB +#define RX_CFGCLKFREQVAL 0x00EC +#define CFGWIDEINLN 0x00F0 +#define CFGRXCDR8 0x00BA +#define ENARXDIRECTCFG4 0x00F2 +#define CFGRXOVR8 0x00BD +#define RXDIRECTCTRL2 0x00C7 +#define ENARXDIRECTCFG3 0x00F3 +#define RXCALCTRL 0x00B4 +#define ENARXDIRECTCFG2 0x00F4 +#define CFGRXOVR4 0x00E9 +#define RXSQCTRL 0x00B5 +#define CFGRXOVR6 0x00BF#define is_mphy_tx_attr (attr) (attr < RX_MODE) + +/* +* Common Block Attributes +*/ +#define TX_GLOBALHIBERNATE UNIPRO_CB_OFFSET(0x002B) +#define REFCLKMODE UNIPRO_CB_OFFSET(0x00BF) +#define DIRECTCTRL19 UNIPRO_CB_OFFSET(0x00CD) +#define DIRECTCTRL10 UNIPRO_CB_OFFSET(0x00E6) +#define CDIRECTCTRL6 UNIPRO_CB_OFFSET(0x00EA) +#define RTOBSERVESELECT UNIPRO_CB_OFFSET(0x00F0) +#define CBDIVFACTOR UNIPRO_CB_OFFSET(0x00F1) +#define CBDCOCTRL5 UNIPRO_CB_OFFSET(0x00F3) +#define CBPRGPLL2 UNIPRO_CB_OFFSET(0x00F8) +#define CBPRGTUNING UNIPRO_CB_OFFSET(0x00FB) + +#define UNIPRO_CB_OFFSET (x) (0x8000 | x) +/* * PHY Adpater attributes */
@@ -110,6 +144,11 @@#define PA_STALLNOCONFIGTIME 0x15A3#define PA_SAVECONFIGTIME 0x15A4 +/*Other attributes*/ +#define VS_MPHYCFGUPDT 0xD085 +#define VS_DEBUGOMC 0xD09E +#define VS_POWERSTATE 0xD083 +/* PA power modes */ enum {FAST_MODE =1 ,
Signature · 1 line
1.8.1.5
Re: [PATCH v10 3/6] added support for DesignWare Controller
Quoted 5 lines · On Friday 04 March 2016 17:22:16 Joao Pinto wrote:
This patch has the goal to add support for DesignWare UFS Controller specific operations.
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
RE: [RESEND] [PATCH v11 3/6] added support for DesignWare Controller
In reply to Joao Pintodrivers/scsi/ufs/ufshcd.h +2 -0
@@ -262,6 +262,7 @@ struct ufs_pwr_mode_info {* @suspend: called during host controller PM callback * @resume: called during host controller PM callback * @dbg_register_dump: used to dump controller debug information +* @custom_phy_initialization: used to initialize phys in DWC Cores */ struct ufs_hba_variant_ops {const char *name;
@@ -283,6 +284,7 @@ struct ufs_hba_variant_ops {int (*suspend)(struct ufs_hba *,enum ufs_pm_op );int (*resume)(struct ufs_hba *,enum ufs_pm_op );void (*dbg_register_dump)(struct ufs_hba *hba); +int (*custom_phy_initialization)(struct ufs_hba *); };
I think just drop custom_ prefix these handlers are for customization so this doesn't add any information Also here, I prefer that infrastructure changes will be in separate patches and not mangled with a specific device patch.
/* clock gating state */
drivers/scsi/ufs/ufshci-dwc.h new file +25 -0
@@ -0,0 +1,42 @@ +/* +* UFS Host driver for Synopsys Designware Core +* +* Copyright (C) 2015-2016 Synopsys, Inc. (www.synopsys.com) +* +* Authors: Joao Pinto <jpinto-HKixBCOQz3hWk0Htik3J/[email protected]> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License version 2 as +* published by the Free Software Foundation. +*/ + +#ifndef _UFSHCI_DWC_H +#define _UFSHCI_DWC_H + +/* DWC HC UFSHCI specific Registers */ +enum dwc_specific_registers { +DWC_UFS_REG_HCLKDIV =0xFC , +}; + +/* Link Status*/ +enum link_status { +UFSHCD_LINK_IS_DOWN =1 , +UFSHCD_LINK_IS_UP =2 , +};
Is is designware specific ? Then should probably be DWC_ prefixed, if not then shouldn't be defined here.
+#endif /* End of Header */
drivers/scsi/ufs/unipro.h +0 -0
Should also go to a separate patch ?
@@ -35,6 +35,10 @@
#define TX_LCC_SEQUENCER 0x0032
#define TX_MIN_ACTIVATETIME 0x0033
#define TX_PWM_G6_G7_SYNC_LENGTH 0x0034
+#define TX_REFCLKFREQ 0x00EB
+#define TX_CFGCLKFREQVAL 0x00EC
+#define CFGEXTRATTR 0x00F0
+#define DITHERCTRL2 0x00F1
/*
* M-RX Configuration Attributes
@@ -48,8 +52,38 @@
#define RX_ENTER_HIBERN8 0x00A7
#define RX_BYPASS_8B10B_ENABLE 0x00A8
#define RX_TERMINATION_FORCE_ENABLE 0x0089
+#define RX_REFCLKFREQ 0x00EB
+#define RX_CFGCLKFREQVAL 0x00EC
+#define CFGWIDEINLN 0x00F0
+#define CFGRXCDR8 0x00BA
+#define ENARXDIRECTCFG4 0x00F2
+#define CFGRXOVR8 0x00BD
+#define RXDIRECTCTRL2 0x00C7
+#define ENARXDIRECTCFG3 0x00F3
+#define RXCALCTRL 0x00B4
+#define ENARXDIRECTCFG2 0x00F4
+#define CFGRXOVR4 0x00E9
+#define RXSQCTRL 0x00B5
+#define CFGRXOVR6 0x00BF
#define is_mphy_tx_attr(attr) (attr < RX_MODE)
+
+/*
+ * Common Block Attributes
+ */
+#define TX_GLOBALHIBERNATE UNIPRO_CB_OFFSET(0x002B)
+#define REFCLKMODE UNIPRO_CB_OFFSET(0x00BF)
+#define DIRECTCTRL19 UNIPRO_CB_OFFSET(0x00CD)
+#define DIRECTCTRL10 UNIPRO_CB_OFFSET(0x00E6)
+#define CDIRECTCTRL6 UNIPRO_CB_OFFSET(0x00EA)
+#define RTOBSERVESELECT UNIPRO_CB_OFFSET(0x00F0)
+#define CBDIVFACTOR UNIPRO_CB_OFFSET(0x00F1)
+#define CBDCOCTRL5 UNIPRO_CB_OFFSET(0x00F3)
+#define CBPRGPLL2 UNIPRO_CB_OFFSET(0x00F8)
+#define CBPRGTUNING UNIPRO_CB_OFFSET(0x00FB)
+
+#define UNIPRO_CB_OFFSET(x) (0x8000 | x)
+
/*
* PHY Adpater attributes
*/
@@ -110,6 +144,11 @@
#define PA_STALLNOCONFIGTIME 0x15A3
#define PA_SAVECONFIGTIME 0x15A4
+/*Other attributes*/
+#define VS_MPHYCFGUPDT 0xD085
+#define VS_DEBUGOMC 0xD09E
+#define VS_POWERSTATE 0xD083
+
/* PA power modes */
enum {
FAST_MODE = 1,
--
1.8.1.5
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [RESEND] [PATCH v11 3/6] added support for DesignWare Controller
Hi Thomas,
Quoted 13 lines · Tomas
drivers/scsi/ufs/ufshcd.h +1
-0@@ -262,6 +262,7 @@ struct ufs_pwr_mode_info {* @suspend: called during host controller PM callback * @resume: called during host controller PM callback * @dbg_register_dump: used to dump controller debug information +* @custom_phy_initialization: used to initialize phys in DWC Cores */ struct ufs_hba_variant_ops {const char *name;
drivers/scsi/ufs/ufshcd.h struct ufs_hba_variant_ops { · line 286
Quoted 3 lines
drivers/scsi/ufs/ufshcd.h +0
-0@@ -283,6 +284,7 @@ struct ufs_hba_variant_ops {int (*suspend)(struct ufs_hba *,enum ufs_pm_op );int (*resume)(struct ufs_hba *,enum ufs_pm_op );void (*dbg_register_dump)(struct ufs_hba *hba);
[snip]...
Quoted 18 lines
drivers/scsi/ufs/ufshcd.h +5
-1/* * PHY Adpater attributes */ @@ -110,6 +144,11 @@#define PA_STALLNOCONFIGTIME 0x15A3#define PA_SAVECONFIGTIME 0x15A4 +/*Other attributes*/ +#define VS_MPHYCFGUPDT 0xD085 +#define VS_DEBUGOMC 0xD09E +#define VS_POWERSTATE 0xD083 +/* PA power modes */ enum {FAST_MODE =1 , --1.8.1.5
Quoted 3 lines
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
I am planning to start working today in the v12 of the patch-set. Did you have opportunity to check the other patches (4, 5 and 6)?
Thanks,
Joao
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH v10 4/6 added support for Synopsys G210 Test Chip
In reply to Joao PintoThis patch adds support for Synopsys G210 Test Chip.
---
Changes v0->v10:
- This patch only appeared in v10
drivers/scsi/ufs/Kconfig | 4 + drivers/scsi/ufs/Makefile | 1 + drivers/scsi/ufs/tc-dwc-g210.c | 315 +++++++++++++++++++++++++++++++++++++++++ drivers/scsi/ufs/tc-dwc-g210.h | 19 +++ 4 files changed, 339 insertions(+) create mode 100644 drivers/scsi/ufs/tc-dwc-g210.c create mode 100644 drivers/scsi/ufs/tc-dwc-g210.h
drivers/scsi/ufs/Kconfig +4 -0
@@ -86,3 +86,7 @@ config SCSI_UFS_QCOM config SCSI_UFS_DWC bool + +config SCSI_UFS_DWC_TC + bool + select SCSI_UFS_DWC
drivers/scsi/ufs/Makefile +1 -0
@@ -1,5 +1,6 @@ # UFSHCD makefile obj-$(CONFIG_SCSI_UFS_DWC) += ufshcd-dwc.o +obj-$(CONFIG_SCSI_UFS_DWC_TC) += tc-dwc-g210.o obj-$(CONFIG_SCSI_UFS_QCOM) += ufs-qcom.o obj-$(CONFIG_SCSI_UFSHCD) += ufshcd.o obj-$(CONFIG_SCSI_UFSHCD_PCI) += ufshcd-pci.o
drivers/scsi/ufs/tc-dwc-g210.c new file +315 -0
315 lines not on this page · raw message
drivers/scsi/ufs/tc-dwc-g210.h new file +19 -0
@@ -0,0 +1,19 @@ +/* +* Synopsys G210 Test Chip driver +* +* Copyright (C) 2015-2016 Synopsys, Inc. (www.synopsys.com) +* +* Authors: Joao Pinto <[email protected]> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License version 2 as +* published by the Free Software Foundation. +*/ + +#ifndef _TC_DWC_G210_H +#define _TC_DWC_G210_H + +int tc_dwc_g210_config_40_bit (struct ufs_hba *hba); +int tc_dwc_g210_config_20_bit (struct ufs_hba *hba); + +#endif /* End of Header */
Signature · 1 line
1.8.1.5
Re: [PATCH v10 4/6] added support for Synopsys G210 Test Chip
Quoted 4 lines · On Friday 04 March 2016 17:22:17 Joao Pinto wrote:
This patch adds support for Synopsys G210 Test Chip.
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH v10 5/6 add TC G210 platform driver
In reply to Joao PintoThis patch adds a glue platform driver for the Synopsys G210 Test Chip.
---
Changes v0->v10:
- This patch only appeared in v10
.../devicetree/bindings/ufs/tc-dwc-g210-pltfrm.txt | 26 +++++ drivers/scsi/ufs/Kconfig | 9 ++ drivers/scsi/ufs/Makefile | 1 + drivers/scsi/ufs/tc-dwc-g210-pltfrm.c | 109 +++++++++++++++++++++ 4 files changed, 145 insertions(+) create mode 100644 Documentation/devicetree/bindings/ufs/tc-dwc-g210-pltfrm.txt create mode 100644 drivers/scsi/ufs/tc-dwc-g210-pltfrm.c
Documentation/devicetree/bindings/ufs/tc-dwc-g210-pltfrm.txt new file +26 -0
@@ -0,0 +1,26 @@ +* Universal Flash Storage (UFS) DesignWare Host Controller + +DWC_UFS nodes are defined to describe on-chip UFS host controllers and MPHY. +Each UFS controller instance should have its own node. + +Required properties: +- compatible : compatible list must contain the PHY type & version: + "snps, g210-tc-6.00-20bit" + "snps, g210-tc-6.00-40bit" + complemented with the Controller IP version: + "snps, dwc-ufshcd-1.40a" + complemented with the JEDEC version: + "jedec,ufs-1.1" + "jedec,ufs-2.0" + +- reg : <registers mapping> +- interrupts : <interrupt mapping for UFS host controller IRQ> + +Example for a setup using a 1.40a DWC Controller with a 6.00 G210 40-bit TC: + dwc_ufs@d0000000 { + compatible = "snps, g210-tc-6.00-40bit", + "snps, dwc-ufshcd-1.40a", + "jedec,ufs-2.0"; + reg = < 0xd0000000 0x10000 >; + interrupts = < 24 >; + };
drivers/scsi/ufs/Kconfig +9 -0
@@ -90,3 +90,12 @@ config SCSI_UFS_DWC config SCSI_UFS_DWC_TC bool select SCSI_UFS_DWC + +config SCSI_UFS_DWC_TC_PLATFORM + tristate "DesignWare platform support using a G210 Test Chip" + depends on SCSI_UFSHCD_PLATFORM + select SCSI_UFS_DWC_TC + ---help--- + Synopsys Test Chip is a PHY for prototyping purposes. + + If unsure, say N."
drivers/scsi/ufs/Makefile +1 -0
@@ -1,6 +1,7 @@ # UFSHCD makefile obj-$(CONFIG_SCSI_UFS_DWC) += ufshcd-dwc.o obj-$(CONFIG_SCSI_UFS_DWC_TC) += tc-dwc-g210.o +obj-$(CONFIG_SCSI_UFS_DWC_TC_PLATFORM) += tc-dwc-g210-pltfrm.o obj-$(CONFIG_SCSI_UFS_QCOM) += ufs-qcom.o obj-$(CONFIG_SCSI_UFSHCD) += ufshcd.o obj-$(CONFIG_SCSI_UFSHCD_PCI) += ufshcd-pci.o
drivers/scsi/ufs/tc-dwc-g210-pltfrm.c new file +109 -0
109 lines not on this page · raw message
Signature · 1 line
1.8.1.5
Re: [PATCH v10 5/6] add TC G210 platform driver
Quoted 3 lines · On Friday 04 March 2016 17:22:18 Joao Pinto wrote:
This patch adds a glue platform driver for the Synopsys G210 Test Chip.
Looks basically ok, but I think it can be simplified a little:
Quoted 17 lines
drivers/scsi/ufs/tc-dwc-g210-pltfrm.c new file +17
-0+/** +* struct ufs_hba_dwc_vops - UFS DWC specific variant operations +*/ +static struct ufs_hba_variant_ops tc_dwc_g210_pltfm_hba_vops = { + .name ="tc-dwc-g210-pltfm" , + .link_startup_notify = ufshcd_dwc_link_startup_notify, +}; + +/** +* tc_dwc_g210_pltfm_probe() +* @pdev: pointer to platform device structure +* +*/ +static int tc_dwc_g210_pltfm_probe (struct platform_device *pdev) +{ +int err; +struct device *dev = &pdev->dev;
drivers/scsi/ufs/tc-dwc-g210-pltfrm.c line 49
Quoted 10 lines
drivers/scsi/ufs/tc-dwc-g210-pltfrm.c new file +10
-0+struct device_node *np = dev->of_node; + +/* Check Test Chip type and set the specific setup routine */ +if (of_device_is_compatible (np,"snps, g210-tc-6.00-20bit" )) { + tc_dwc_g210_pltfm_hba_vops.custom_phy_initialization = + tc_dwc_g210_config_20_bit; + }else if (of_device_is_compatible (np,"snps, g210-tc-6.00-40bit" )) { + tc_dwc_g210_pltfm_hba_vops.custom_phy_initialization = + tc_dwc_g210_config_40_bit; + }
Instead of manually checking the compatible string, define two copies of the ufs_hba_variant_ops, and put a pointer to them into the .data field of tc_dwc_g210_pltfm_match.
Arnd
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v10 5/6] add TC G210 platform driver
Hi,
Quoted 30 lines · Arnd Bergmann
Quoted 3 lines · On Friday 04 March 2016 17:22:18 Joao Pinto wrote:
This patch adds a glue platform driver for the Synopsys G210 Test Chip.
Signed-off-by Joao Pinto <[email protected]>Looks basically ok, but I think it can be simplified a little:
Quoted 23 lines
drivers/scsi/ufs/tc-dwc-g210-pltfrm.c new file +23
-0+/** +* struct ufs_hba_dwc_vops - UFS DWC specific variant operations +*/ +static struct ufs_hba_variant_ops tc_dwc_g210_pltfm_hba_vops = { + .name ="tc-dwc-g210-pltfm" , + .link_startup_notify = ufshcd_dwc_link_startup_notify, +}; + +/** +* tc_dwc_g210_pltfm_probe() +* @pdev: pointer to platform device structure +* +*/ +static int tc_dwc_g210_pltfm_probe (struct platform_device *pdev) +{ +int err; +struct device *dev = &pdev->dev; +struct device_node *np = dev->of_node; + +/* Check Test Chip type and set the specific setup routine */ +if (of_device_is_compatible (np,"snps, g210-tc-6.00-20bit" )) { + tc_dwc_g210_pltfm_hba_vops.custom_phy_initialization = + tc_dwc_g210_config_20_bit;
Quoted 8 lines
drivers/scsi/ufs/tc-dwc-g210-pltfrm.c line 49
Quoted 4 lines
drivers/scsi/ufs/tc-dwc-g210-pltfrm.c new file +4
-0+ }else if (of_device_is_compatible (np,"snps, g210-tc-6.00-40bit" )) { + tc_dwc_g210_pltfm_hba_vops.custom_phy_initialization = + tc_dwc_g210_config_40_bit; + }Instead of manually checking the compatible string, define two copies of the
ufs_hba_variant_ops, and put a pointer to them into the .data field oftc_dwc_g210_pltfm_match.
Sounds nice. I'll do that!
Quoted 3 lines
Arnd
Joao
PATCH v10 6/6 add TC G210 pci driver
In reply to Joao PintoThis patch adds a glue pci driver for the Synopsys G210 Test Chip.
---
Changes v0->v10:
- This patch only appeared in v10
drivers/scsi/ufs/Kconfig | 9 ++ drivers/scsi/ufs/Makefile | 1 + drivers/scsi/ufs/tc-dwc-g210-pci.c | 178 +++++++++++++++++++++++++++++++++++++ 3 files changed, 188 insertions(+) create mode 100644 drivers/scsi/ufs/tc-dwc-g210-pci.c
drivers/scsi/ufs/Kconfig +9 -0
@@ -99,3 +99,12 @@ config SCSI_UFS_DWC_TC_PLATFORM Synopsys Test Chip is a PHY for prototyping purposes. If unsure, say N." + +config SCSI_UFS_DWC_TC_PCI + tristate "DesignWare pci support using a G210 Test Chip" + depends on SCSI_UFSHCD_PCI + select SCSI_UFS_DWC_TC + ---help--- + Synopsys Test Chip is a PHY for prototyping purposes. + + If unsure, say N."
drivers/scsi/ufs/Makefile +1 -0
@@ -2,6 +2,7 @@ obj-$(CONFIG_SCSI_UFS_DWC) += ufshcd-dwc.o obj-$(CONFIG_SCSI_UFS_DWC_TC) += tc-dwc-g210.o obj-$(CONFIG_SCSI_UFS_DWC_TC_PLATFORM) += tc-dwc-g210-pltfrm.o +obj-$(CONFIG_SCSI_UFS_DWC_TC_PCI) += tc-dwc-g210-pci.o obj-$(CONFIG_SCSI_UFS_QCOM) += ufs-qcom.o obj-$(CONFIG_SCSI_UFSHCD) += ufshcd.o obj-$(CONFIG_SCSI_UFSHCD_PCI) += ufshcd-pci.o
drivers/scsi/ufs/tc-dwc-g210-pci.c new file +178 -0
178 lines not on this page · raw message
Signature · 1 line
1.8.1.5
Re: [PATCH v10 6/6] add TC G210 pci driver
Quoted 3 lines · On Friday 04 March 2016 17:22:19 Joao Pinto wrote:
This patch adds a glue pci driver for the Synopsys G210 Test Chip.
Mostly ok, just a few suggestions:
drivers/scsi/ufs/tc-dwc-g210-pci.c line 27
Quoted 10 lines
drivers/scsi/ufs/tc-dwc-g210-pci.c new file +9
-0+ +/* Test Chip type expected values */ +#define TC_G210_20BIT 20 +#define TC_G210_40BIT 40 +#define TC_G210_DEFAULTBIT 40 + +static int tc_type =TC_G210_DEFAULTBIT ; +module_param (tc_type, int,0 ); +MODULE_PARM_DESC (tc_type,"Test Chip Type (20 = 20-bit, 40 = 40-bit)" );
What is the effect of setting the wrong one here? I was thinking it would be best to have the default be 'invalid' and then return an error from the probe() function when you neither value is set.
drivers/scsi/ufs/tc-dwc-g210-pci.c line 106
Quoted 9 lines
drivers/scsi/ufs/tc-dwc-g210-pci.c new file +9
-0+ +/* Check Test Chip type and set the specific setup routine */ +if (tc_type ==TC_G210_20BIT ) { + tc_dwc_g210_pci_hba_vops.custom_phy_initialization = + tc_dwc_g210_config_20_bit; + }else if (tc_type ==TC_G210_40BIT ) { + tc_dwc_g210_pci_hba_vops.custom_phy_initialization = + tc_dwc_g210_config_40_bit; + }
As for the platform driver, I would define two separate structures here, and then mark the operations as 'const'.
drivers/scsi/ufs/tc-dwc-g210-pci.c line 159
Quoted 5 lines
drivers/scsi/ufs/tc-dwc-g210-pci.c new file +5
-0+static const struct pci_device_id tc_dwc_g210_pci_tbl[] = { + {PCI_VENDOR_ID_SYNOPSYS ,0xB101 ,PCI_ANY_ID ,PCI_ANY_ID ,0 ,0 ,0 }, + {PCI_VENDOR_ID_SYNOPSYS ,0xB102 ,PCI_ANY_ID ,PCI_ANY_ID ,0 ,0 ,0 }, + { }/* terminate list */ +};
Is there any difference between these two IDs?
Arnd
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v10 6/6] add TC G210 pci driver
Hi,
Quoted 7 lines · Arnd Bergmann
Quoted 3 lines · On Friday 04 March 2016 17:22:19 Joao Pinto wrote:
This patch adds a glue pci driver for the Synopsys G210 Test Chip.
Mostly ok, just a few suggestions:
Quoted 15 lines
drivers/scsi/ufs/tc-dwc-g210-pci.c line 27
Quoted 10 lines
drivers/scsi/ufs/tc-dwc-g210-pci.c new file +9
-0+ +/* Test Chip type expected values */ +#define TC_G210_20BIT 20 +#define TC_G210_40BIT 40 +#define TC_G210_DEFAULTBIT 40 + +static int tc_type =TC_G210_DEFAULTBIT ; +module_param (tc_type, int,0 ); +MODULE_PARM_DESC (tc_type,"Test Chip Type (20 = 20-bit, 40 = 40-bit)" );What is the effect of setting the wrong one here? I was thinking it would be best to have the default be 'invalid' and then return an error from the
probe()function when you neither value is set.
You're right. Maybe an TC_G210_20BIT_INV by default and also check if the inserted value is TC_G210_20BIT or TC_G210_40BIT. if not, then abort the probe.
Quoted 14 lines
drivers/scsi/ufs/tc-dwc-g210-pci.c line 106
Quoted 10 lines
drivers/scsi/ufs/tc-dwc-g210-pci.c new file +9
-0+ +/* Check Test Chip type and set the specific setup routine */ +if (tc_type ==TC_G210_20BIT ) { + tc_dwc_g210_pci_hba_vops.custom_phy_initialization = + tc_dwc_g210_config_20_bit; + }else if (tc_type ==TC_G210_40BIT ) { + tc_dwc_g210_pci_hba_vops.custom_phy_initialization = + tc_dwc_g210_config_40_bit; + }As for the platform driver, I would define two separate structures here, and then mark the operations as 'const'.
Quoted 7 lines
drivers/scsi/ufs/tc-dwc-g210-pci.c line 159
Quoted 5 lines
drivers/scsi/ufs/tc-dwc-g210-pci.c new file +5
-0+static const struct pci_device_id tc_dwc_g210_pci_tbl[] = { + {PCI_VENDOR_ID_SYNOPSYS ,0xB101 ,PCI_ANY_ID ,PCI_ANY_ID ,0 ,0 ,0 }, + {PCI_VENDOR_ID_SYNOPSYS ,0xB102 ,PCI_ANY_ID ,PCI_ANY_ID ,0 ,0 ,0 }, + { }/* terminate list */ +};Is there any difference between these two IDs?
The Synopsys can be identified by one of these 2 IDs. There is no particular reason.
Quoted 3 lines
Arnd
Joao
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH v11 5/6 add TC G210 platform driver
In reply to Joao PintoThis patch adds a glue platform driver for the Synopsys G210 Test Chip.
---
Changes v10->v11 (Arnd Bergmann):
- vops structs are now passed in .data
Changes v0->v10:
- This patch only appeared in v10
.../devicetree/bindings/ufs/tc-dwc-g210-pltfrm.txt | 26 +++++ drivers/scsi/ufs/Kconfig | 9 ++ drivers/scsi/ufs/Makefile | 1 + drivers/scsi/ufs/tc-dwc-g210-pltfrm.c | 113 +++++++++++++++++++++ 4 files changed, 149 insertions(+) create mode 100644 Documentation/devicetree/bindings/ufs/tc-dwc-g210-pltfrm.txt create mode 100644 drivers/scsi/ufs/tc-dwc-g210-pltfrm.c
Documentation/devicetree/bindings/ufs/tc-dwc-g210-pltfrm.txt new file +26 -0
@@ -0,0 +1,26 @@ +* Universal Flash Storage (UFS) DesignWare Host Controller + +DWC_UFS nodes are defined to describe on-chip UFS host controllers and MPHY. +Each UFS controller instance should have its own node. + +Required properties: +- compatible : compatible list must contain the PHY type & version: + "snps, g210-tc-6.00-20bit" + "snps, g210-tc-6.00-40bit" + complemented with the Controller IP version: + "snps, dwc-ufshcd-1.40a" + complemented with the JEDEC version: + "jedec,ufs-1.1" + "jedec,ufs-2.0" + +- reg : <registers mapping> +- interrupts : <interrupt mapping for UFS host controller IRQ> + +Example for a setup using a 1.40a DWC Controller with a 6.00 G210 40-bit TC: + dwc_ufs@d0000000 { + compatible = "snps, g210-tc-6.00-40bit", + "snps, dwc-ufshcd-1.40a", + "jedec,ufs-2.0"; + reg = < 0xd0000000 0x10000 >; + interrupts = < 24 >; + };
drivers/scsi/ufs/Kconfig +9 -0
@@ -90,3 +90,12 @@ config SCSI_UFS_DWC config SCSI_UFS_DWC_TC bool select SCSI_UFS_DWC + +config SCSI_UFS_DWC_TC_PLATFORM + tristate "DesignWare platform support using a G210 Test Chip" + depends on SCSI_UFSHCD_PLATFORM + select SCSI_UFS_DWC_TC + ---help--- + Synopsys Test Chip is a PHY for prototyping purposes. + + If unsure, say N."
drivers/scsi/ufs/Makefile +1 -0
@@ -1,6 +1,7 @@ # UFSHCD makefile obj-$(CONFIG_SCSI_UFS_DWC) += ufshcd-dwc.o obj-$(CONFIG_SCSI_UFS_DWC_TC) += tc-dwc-g210.o +obj-$(CONFIG_SCSI_UFS_DWC_TC_PLATFORM) += tc-dwc-g210-pltfrm.o obj-$(CONFIG_SCSI_UFS_QCOM) += ufs-qcom.o obj-$(CONFIG_SCSI_UFSHCD) += ufshcd.o obj-$(CONFIG_SCSI_UFSHCD_PCI) += ufshcd-pci.o
drivers/scsi/ufs/tc-dwc-g210-pltfrm.c new file +113 -0
113 lines not on this page · raw message
Signature · 1 line
1.8.1.5
Rob Herring
maintainerRe: [PATCH v11 5/6] add TC G210 platform driver
Quoted 23 lines · Joao Pinto
This patch adds a glue platform driver for the Synopsys G210 Test Chip.
Signed-off-by Joao Pinto <[email protected]>---
Changesv10->v11(Arnd Bergmann):
- vops structs are now passed in .data
Changesv0->v10:
- This patch only appeared in v10.../devicetree/bindings/ufs/tc-dwc-g210-pltfrm.txt | 26 +++++ drivers/scsi/ufs/Kconfig | 9 ++ drivers/scsi/ufs/Makefile | 1 + drivers/scsi/ufs/tc-dwc-g210-pltfrm.c | 113 +++++++++++++++++++++ 4 files changed, 149 insertions(+) create mode 100644 Documentation/devicetree/bindings/ufs/tc-dwc-g210-pltfrm.txt create mode 100644 drivers/scsi/ufs/tc-dwc-g210-pltfrm.cDocumentation/devicetree/bindings/ufs/tc-dwc-g210-pltfrm.txt new file +0
-0
Documentation/devicetree/bindings/ufs/tc-dwc-g210-pltfrm.txt line 9
Quoted 9 lines
Documentation/devicetree/bindings/ufs/tc-dwc-g210-pltfrm.txt new file +9
-0@@ -0,0 +1,26 @@ +* Universal Flash Storage (UFS) DesignWare Host Controller + +DWC_UFS nodes are defined to describe on-chip UFS host controllers and MPHY. +Each UFS controller instance should have its own node. + +Required properties: +- compatible : compatible list must contain the PHY type & version: + "snps, g210-tc-6.00-20bit" + "snps, g210-tc-6.00-40bit"
drop the spaces ^
Documentation/devicetree/bindings/ufs/tc-dwc-g210-pltfrm.txt line 11
Quoted 2 lines
Documentation/devicetree/bindings/ufs/tc-dwc-g210-pltfrm.txt new file +2
-0+ complemented with the Controller IP version: + "snps, dwc-ufshcd-1.40a"
ditto
Documentation/devicetree/bindings/ufs/tc-dwc-g210-pltfrm.txt line 22
Quoted 11 lines
Documentation/devicetree/bindings/ufs/tc-dwc-g210-pltfrm.txt new file +11
-0+ complemented with the JEDEC version: + "jedec,ufs-1.1" + "jedec,ufs-2.0" + +- reg : <registers mapping> +- interrupts : <interrupt mapping for UFS host controller IRQ> + +Example for a setup using a 1.40a DWC Controller with a 6.00 G210 40-bit TC: + dwc_ufs@d0000000 { + compatible = "snps, g210-tc-6.00-40bit", + "snps, dwc-ufshcd-1.40a",
ditto
Quoted 4 lines
Documentation/devicetree/bindings/ufs/tc-dwc-g210-pltfrm.txt new file +4
-0+ "jedec,ufs-2.0"; + reg = < 0xd0000000 0x10000 >; + interrupts = < 24 >; + };
PATCH v11 6/6 add-TC-G210-pci-driver
In reply to Joao PintoThis patch adds a glue pci driver for the Synopsys G210 Test Chip.
---
Changes v10->v11 (Arnd Bergmann):
- tc_type is now initialized to TC_G210_INV
- probe function checks if the test chip version is specified Changes v0->v10:
- This patch only appeared in v10
drivers/scsi/ufs/Kconfig | 9 ++ drivers/scsi/ufs/Makefile | 1 + drivers/scsi/ufs/tc-dwc-g210-pci.c | 181 +++++++++++++++++++++++++++++++++++++ 3 files changed, 191 insertions(+) create mode 100644 drivers/scsi/ufs/tc-dwc-g210-pci.c
drivers/scsi/ufs/Kconfig +9 -0
@@ -99,3 +99,12 @@ config SCSI_UFS_DWC_TC_PLATFORM Synopsys Test Chip is a PHY for prototyping purposes. If unsure, say N." + +config SCSI_UFS_DWC_TC_PCI + tristate "DesignWare pci support using a G210 Test Chip" + depends on SCSI_UFSHCD_PCI + select SCSI_UFS_DWC_TC + ---help--- + Synopsys Test Chip is a PHY for prototyping purposes. + + If unsure, say N."
drivers/scsi/ufs/Makefile +1 -0
@@ -2,6 +2,7 @@ obj-$(CONFIG_SCSI_UFS_DWC) += ufshcd-dwc.o obj-$(CONFIG_SCSI_UFS_DWC_TC) += tc-dwc-g210.o obj-$(CONFIG_SCSI_UFS_DWC_TC_PLATFORM) += tc-dwc-g210-pltfrm.o +obj-$(CONFIG_SCSI_UFS_DWC_TC_PCI) += tc-dwc-g210-pci.o obj-$(CONFIG_SCSI_UFS_QCOM) += ufs-qcom.o obj-$(CONFIG_SCSI_UFSHCD) += ufshcd.o obj-$(CONFIG_SCSI_UFSHCD_PCI) += ufshcd-pci.o
drivers/scsi/ufs/tc-dwc-g210-pci.c new file +181 -0
181 lines not on this page · raw message
Signature · 1 line
1.8.1.5