> On Wed, Sep 05, 2018 at 07:30:03AM +0000, Avri Altman wrote: > > Looking into the UFSHCI spec (JESD223C March 2016) paragraph 6.2, > > It doesn't specify any inner structure of the task management > > request or response, just a bunch of 8 DW each. > > I guess this is why it is defined as a __le32 array. > > > > So the host controller is not aware of the inner structure of this > > Sequence, and probably shouldn't. Making it aware of that, > > e.g. by moving utp_upiu_task_req and utp_upiu_task_rsp > > from ufs.h to ufshci.h will break this abstraction. > > Well, then just kill struct utp_upiu_task_req entirely and use > the dwords form the spec. But on the other hand, task management request and response UPIUs are honorable members of the ufs spec (JEDEC 220C paragraphs 10.7.6 & 10.7.7). and indeed they lives in ufs.h, where they should. So just removing it, replacing it with an opaque array is pointless. Trying to understand why this is happening for task management requests, But not for device management requests, I came to realized that you were originally right Saying: " I think someone needs to untangle how the data structures are used in this part of the code." Unlike utrd-typed requests (scsi & device management), that have their memory space properly configured (utrdl_base_addr in ufshcd_host_memory_configure()), task management requests - utmrd-typed requests (utmrdl_base_addr) do not get similar attention. Will fix that in a separate patch prior to this one. Thanks, Avri