Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751729AbdGaRRb (ORCPT ); Mon, 31 Jul 2017 13:17:31 -0400 Received: from mail-bl2nam02on0081.outbound.protection.outlook.com ([104.47.38.81]:45645 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751201AbdGaRR1 (ORCPT ); Mon, 31 Jul 2017 13:17:27 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=alex.g@adaptrum.com; Subject: Re: [PATCH 4/5] mtd: spi-nor: Add driver for Adaptrum Anarion QSPI controller To: Marek Vasut , linux-snps-arc@lists.infradead.org, linux-kernel@vger.kernel.org References: <20170728220707.13960-1-alex.g@adaptrum.com> <20170728220707.13960-5-alex.g@adaptrum.com> <135fdf95-1029-2d34-2802-1283a73588e5@gmail.com> Cc: David Woodhouse , Brian Norris , Boris Brezillon , Richard Weinberger , Cyrille Pitchen , Rob Herring , Mark Rutland , linux-mtd@lists.infradead.org, devicetree@vger.kernel.org From: Alexandru Gagniuc Message-ID: <83a4e27a-b96c-0558-fbb5-10e64f9bf59b@adaptrum.com> Date: Mon, 31 Jul 2017 10:17:17 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: <135fdf95-1029-2d34-2802-1283a73588e5@gmail.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [198.0.218.81] X-ClientProxiedBy: DM5PR21CA0019.namprd21.prod.outlook.com (10.173.176.157) To CY4PR04MB0841.namprd04.prod.outlook.com (10.172.138.18) X-MS-Office365-Filtering-Correlation-Id: 3aac6557-8dbc-44e7-9fa3-08d4d83801c2 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(2017082002075)(300000503095)(300135400095)(201703131423075)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);SRVR:CY4PR04MB0841; X-Microsoft-Exchange-Diagnostics: 1;CY4PR04MB0841;3:5qvtBaaFvTvJGV0HVSzi+ICzHwdjSRxsNLdy+QHMHR+T8c7ybN6jRRbI411C3GgE29xPFV9zmbfRjBln1pFUIPviF4Dm5izgXqSTPStLra4OKpvg50HaNk+SaUDE6zF57HcJ87dWeJXwe58F9E5/of7e1WJTuh3NDibgzAG15McgZOeI/w1JNyy51I5MK9FHEjlT+wwxVyZm2eseApT4HYw/eFktBosxNyRCOuQIv/iXB+5mzV8n2Kel/44U1T6uBf597sZW1yGVrso8yFg/YrsTqt/RFPJ+StIlam0I8LZjLZiw65vi+8qKiR3O959xOyNgzSlNUolsVFz4SJEyxHi3VeG2B8S00t31UJM5TGRFfHV4MjVRHmYxG20KKBvVGjIaJ+D6HTNLehzwcGiyqFc5/hiidkA1uP63RP60agQq9G5hLSwPuSFxV3NvjmNPOfdQDfLjSwOiB4b+fYK/kOhAd5pgproXxrQa/yuToq7ti0ZdQzDQjzRnY2MrF23SDxlqIZRStwXy6G+efl371N4YrLCL24Sn+DtVaVwQIEUkZQ2J6+vzPJIo0xURZE+GELlW1IPOIL3ELs6xU8d/hNW2JAZP4PO9vmobNJLhkHwcNhLy9Fv7rkvUgqEa3XoJ0Hxd3x1VGfuhL14GBUwxo1PsIJEk+jMJ1Ofo4YBaO2aj0xkrSSqszeJSYHC/lFtYr9p5l4teHvdpG59c5J5w/0hcHsRoeGyXQe8G2sl+gBp0eYKmgffm3pWaM4F7ZX5M3j+FPJOu2uOiFhVXBgbRARybKhcmDYLzaqDMScCJEPY= X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PR04MB0841: X-Microsoft-Exchange-Diagnostics: 1;CY4PR04MB0841;25:AhmnGSVIFMqXoMXFceLnpgCNb9n6YMcw1s8Vn0+mdmvuEzX9AKYgyOlzWBn5WBzoIFUwjDy0JQAs5llIV8qkei2p3Xkr3H4pje98Gcn7mKquL9sWCOgTqlpD/ZxUx/6aajzAujPgGKqgxPDP0lxtmidXgUDBpE8Odjd6OmSQ0hwOU6nHnnnIilWiQl94BjrxAMjk7ujQw1ihO1KBPH2v0yTI8oeAXZD7t85xsJj0KL3eTw69jZXdmTey6JcrD4yOjNLeYp65QZM+/wQJUZw0KA7uO+6TZ97dRWpGuvu0p0/iRAjg9P/4S5QUoiIyb2fW1mYlLoqoxWoQhJQ1nyQAdOZDejO7qYM5UgbofJsRcOqGAUqcejsZKqHeO2m4izUFLMO51hrAU+2VqVAWzkWoBfODlYwHZA5uQqeWnxdqc4C1LRVod2EHEvjH+wQmoVFSGzRnDZaKDlPzrVTBwJ5SohkNUBJEIun/lq4UUZl2uGYNZHY6J14lrW4dDYicIXoUS1JkG2K1i8pQjUmyBmTpIKpyIwhJ4HyMRlscNXGSyndP840eR7oA3W/AIiyPCz1PvI/fyrT6J7tqNS1DSOLeqmznQheRBZNZZQXdD40/VkkHcTbG5KVIBqvYBo4lbVECVF/n/PiktEy6Q8TJLYzGp/OhpGLIkNPfETWwg+V+tw+mPPUl/y1pekKQrkH21gDAsZOabMRaRbTnjUy+/6naWt+jkXzpUFC8tIKgjL9aIfeHGZ/lTNU7G/Bbsfvk0A9tYzXrdiu7UDjt4jUrmO4ACw4ZHyKI/frC4vcZT3B9kKqLkCPIVwZQ7ZQSawcNtbFEFFR0R1JDM4go7p8qcy+zQaSD+Ab6j5zAODnWItUi6/N1Qh6mEFAz+/l8Bg4Zuq72ZDQayoHzr9yLz2ygRTcdjNOmF6GHWGsbO2YmXvzY4iQ= X-Microsoft-Exchange-Diagnostics: 1;CY4PR04MB0841;31:+pBUui+aVgZFfvaS8z0w1LhbVf7+m9uRJc/WL9sO/T29c/M6zxaGDVMNAh2cF3W3TgRfypTXbsynNVmIeCSvLl/pDR3LkFOlJmcg31iF5tScsrq3rAqzVIEjSDP3dAucfDvy1lQEp9sgxK2O8wIriOAY4QjSLdNZImbZMVGArawMbislrdLV3A3BMdjcKdlMiS6B5XVIeyEx9ENiyfSX4kZs6U+GbEnsvTA22++8hCWJ8ICMBI9lIk+zOFVFV+dt79jVSjrzsAqwzXY0NvTDT3MP36CObbdhOlN+Lh6PXF/3OeffqpFzKzXmvDpJqDkFZcYdx7uhyhDfqmC7VjAXuMYlcDuGpCYyU0F4/UmvHViScYPiB7QalRBEmmrn1TD2JBk1NP5nOaD6JeF8NdworyEXpTzzeEa/Bt8mN5c8/43ZR30GnUDv7fzPuq4EUV17UnhnvcG6gkRl76gnfpI/QXGK1LNrcAm/kB4qZVzwPuZSD9uiPGSP5QJvT4mi4xK4Dganc30C7/Jl6Maft5f88/EzkdX74bD5DsQOXB/A4PLOmVwDRcGcFEJIJkg23D1QiZvpzOdyhcEvrqi3CpZwSHx4d+TR2FhcklrTkY2/46Pn73z4g/apZpkIhCXyshYt/wFrbjQ4tcTdvOmDgCHKd/kJl2ooUmIQl2kfrsosGJksdvl5CKc2JuB3pOsnSxs8ORRtx8tjPX1/uQqJIGX1qA== X-Exchange-Antispam-Report-Test: UriScan:; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(5005006)(8121501046)(3002001)(100000703101)(100105400095)(10201501046)(93006095)(93001095)(6041248)(20161123562025)(20161123560025)(20161123564025)(2016111802025)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(6072148)(6043046)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:CY4PR04MB0841;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:CY4PR04MB0841; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtDWTRQUjA0TUIwODQxOzQ6UjY2QmhkekUwSFA3RVlvVVRUcWh5eThUNG11?= =?utf-8?B?MzdkOTY1Y0NhRXR3dUNZQkw0K1pvaGw0eVhhcHJ1T0tQQ0wwcXgyaXVObHZn?= =?utf-8?B?cUlqOTlPT2dkMUhpakhWV1JyeGxDY1JySGx0M2lXTlFrWUQyVGhSeFNwaDBm?= =?utf-8?B?RVVqTzA2OGtBZGhEZFp0bXBPb0ZscW13elRIbFFVRkpHMEZQVmg1RHpUU2pC?= =?utf-8?B?aW44N05NUHcrSDVNTXE5ZHRWMFlKbmRaRmw3T1o2dGlCMkVUMWN6bGdNS1BD?= =?utf-8?B?ZlI1dEl1OWdqRnhzbEpicWJOc1RKcmRick4zdHZHZlF1Z045bWRKanBYV0dP?= =?utf-8?B?UWwrY2g4UnR0anI5MldxWHlDN0RlcVVid2tFSi94cmMwODlYRmVOOC8rSUFG?= =?utf-8?B?UmpRbjZEZFlJLzhuVDNCaXFGZ2ltU0haSkxHOWxpVWpGa3JDSGNLL3lMRjlI?= =?utf-8?B?NnU2UEVSOGVZbEkxdnZhU1JBNzJ2TXJWaG9SajNEcE9DSHYvb3hLK25jaTVX?= =?utf-8?B?dTVjc0JwaUZMT3UvbU1aejc0M3pKWW9kUDNDYU9VNXo5YndVL2hzUCtka0Zk?= =?utf-8?B?K3UvWXVDeDd3R0h6TW9wTnZFR2NaV3pTQWxwODF2Yjg4RE1XSHBEckdZS3lI?= =?utf-8?B?VnBWK3h4VTdJSnRVWlcyTU1MUTRESXZ6N251MWtmUW4zYXJHTjBvczkzZVlD?= =?utf-8?B?cDZmRDJnQ1llZm9xN3UyWEVXR1FmMURmVEdUNDhKMlhaSmhnVjI1dHczMmRY?= =?utf-8?B?Y0UvVlNhdXQ5a0c2R1NxWVVYNW5nV0Z6UkdiTG9JQllGS21neUoxNmdHT0g3?= =?utf-8?B?Z3NRYmdvM1NtY0Z6T1o2bkN4RTZsNjNjWmtGS0U4Tldzb2Z6WElESk5neS8r?= =?utf-8?B?bFBCZ0dlR3RiNk80RzBhNVB3VG9hdEpYWnFSVUJwRTNrZTlxZk9UYS9MYXJk?= =?utf-8?B?NTJzR1AxUDF6OWtmcUZwNmFya0RiallZdUc1YkN5UVdjL3RjazM4VGVsTkN3?= =?utf-8?B?UEl2MlRQYlkvN3Z2b3ZIUHRnVWd4azBEUEJuTnl4TkdFcXFucW9JSElEbmJ6?= =?utf-8?B?bW1wbkJtZm9wSS9sR0xwdnQybDEzRnpTU2FLOXhPNzZGcXN1Y0Y2RENka0VF?= =?utf-8?B?ZS83MWU5akd1VEtSSTQ0UDJlekpBTStkTm5qMjNOWVpaRkg4ZXdWbmdoYm5r?= =?utf-8?B?RW9MSzV3WUE1S0szQW9IZ1NTMnhMRkFiUGhOODhJRXlPRWVVVkdISUh2bFZ6?= =?utf-8?B?RVczWFBXajRlN210RnFTMjVpR1JsbnRXaFZlRjdJMzQyVHRKMU5IdFV0WkZl?= =?utf-8?B?Sy9jZHVCZ09ndCt6cVVhQXFmbVlXcWttNkRwNkVjZjU2OGRtNnNtZmFaaUZG?= =?utf-8?B?cTFidytWazFSYWFSajV6UCt3TFAwSm02VVVzUHRIb3F1T09Sd1FwRXN6bzAw?= =?utf-8?B?VW5MZUtpNXN1OWZ1MWxvRTRaUHFta01oaE1sSmxjblBoaS9udDl1THRab3I4?= =?utf-8?B?T2NSKzZWVkVzaHNmZzZsSXV0Y2lxWXB0VGVaelRWdUQ3RVZTOFI5ZmlWbWpp?= =?utf-8?B?b1F1KzhFQ1hRcVRoTW9pVUFxUGVFZWY0SHVVOGxuR2d1cTd5ZHJKeHphTURh?= =?utf-8?Q?DWEbJbvy5Cydrx650Wj?= X-Forefront-PRVS: 03853D523D X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(7370300001)(6009001)(39410400002)(39400400002)(39830400002)(39450400003)(377454003)(45984002)(24454002)(189002)(199003)(3846002)(2906002)(230700001)(6116002)(229853002)(5890100001)(478600001)(36756003)(6486002)(97736004)(53546010)(189998001)(2950100002)(23676002)(54356999)(68736007)(6666003)(4001350100001)(66066001)(65956001)(65806001)(50986999)(25786009)(6506006)(76176999)(6246003)(5660300001)(83506001)(101416001)(7416002)(7736002)(86362001)(42186005)(31696002)(64126003)(47776003)(6512007)(33646002)(4326008)(54906002)(65826007)(53936002)(81166006)(81156014)(31686004)(105586002)(7350300001)(305945005)(50466002)(110136004)(8676002)(38730400002)(106356001);DIR:OUT;SFP:1101;SCL:1;SRVR:CY4PR04MB0841;H:dev2.adaptrum;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtDWTRQUjA0TUIwODQxOzIzOkx6c1Q5cWE1d1FtMjMxZEIwTzhlRWplREM2?= =?utf-8?B?UkMzWUZXQitSeGpMMHRwcTdvK0tLdDFwZC9KbHhtZGV1TEdwWDZIaEgxZmlV?= =?utf-8?B?ZWNBR1FQT0ErN0p1TlNKMmRZNDhZTE1LcUFUcEh6c2FiN3c3Nkh6R3ZBU1J0?= =?utf-8?B?RzkxWkpuZmZYZ3Z1em1EWnk3SFR2UjYxMlN3S0NGcEVuckJGc1BzMjRacVJV?= =?utf-8?B?UDEweXVOVVJUUXdpdWhpOGRIVVVlOEdiQmpXaTF0R1M0VEJja2pGTGdRcVEx?= =?utf-8?B?S1ZKanFycDg1ZzVQVmhVR2grMzlPbzRNWjFrUXo1NFZxOW9UZktMTnJoUVlU?= =?utf-8?B?WFMwcE5uTWJFbU9xdWgzTFN2YnFHYngrWmNtSmVwRWV3TWZ3YjVNcnBHSStk?= =?utf-8?B?ZEJ0L2ZHTnBXV3preDNVdXZDb25SQVEybUtMR04reTV2TjZyVWpkY0FUWHdy?= =?utf-8?B?elVUZHpTMmorNHVObFZ2Vzk3MUNaSTRLbjV4WWdMUzcxeFJWNnNhR0E3TFYw?= =?utf-8?B?WTRhZk9PTGZHNTBkV3RCTzBMQXNnaFpvWm9JUGZXODZDaEZkZDhFdTZTSnhw?= =?utf-8?B?Qi9WUnVnTjZYbWExWHM0RHlNYzdTMGU4U2ZjWGF3ekdzSHpMZXozOFhvQjFT?= =?utf-8?B?cjQrcS9lT2dMamxBdm1LNndnbG5Od0VDamFna2JkMndDQnJPdkxMbFJNMExV?= =?utf-8?B?ZzYyZXBiU1NxSWRKTUsyYjNkZnd4VzZVZTY2OWhuVVdmNTY1ckY3bm1wSDN4?= =?utf-8?B?Smw3dkxPN0VjTFRpeUdUOGZLYzlmcy9PMjkvTzZFM1poL2k5dytlV1ZUb3Ux?= =?utf-8?B?TFBBSVBFZmtjSXpjT0orTitFaGRJdUNvQkxOaUJKNUlZMExYNzhYbEZYdjN2?= =?utf-8?B?Vmt6Zk9nb29NaHJtZWtNSnljRERWekFkNEV6Z05paVZPckY5WU1qSjh0aHNj?= =?utf-8?B?dUoyR1RyU0VaL1JzOFFtWllnKzFYU0lRMHlIbTV6Rk9UN1N5cGVWdTlmRkRm?= =?utf-8?B?ejh4NlVSTWpQeE1BNmY1ZjRWdlhTbGJpR2dmRXhCc3VFakNRd3NrT01PZzlN?= =?utf-8?B?bHlUd0kwL0dkTmEybXRXQ25XR3NJTXlod21nQ2ZnRTJQNU9PbUhCb0dOYTJx?= =?utf-8?B?QkpxOWNFRTJ2TmNvTFZ4SkVIaGE2V0YvZFMwZ1Fud2tEQnVOS0VxTlBmUHMv?= =?utf-8?B?RXFxUzhoS2VFaG1mYUp4M1hOVUFnV2E4THNkMDBGMHFQenlodnZ1VUFvbEdM?= =?utf-8?B?WkxjQldqdkhtcE5jYkh5RXRNVHAwMGJWcVV1TEs2ZGkwMFVXU1ZNSW1jZlov?= =?utf-8?B?c3lGa0ozQkZXdFF6WVhvdlNUSTJ2blZqK2VYUFpoSTZuRkNjUklqNWtFMEhh?= =?utf-8?B?U2tsME91b2FmK3VzL0E3NDFMRExYS3dZdkFnSTRrRW1uN1AzTzVGd0xEZXIw?= =?utf-8?B?czlRSTJsQmlEeW9GdWg3UmJMRzg2c2JVRFI3NmQwUkFZTnRXZmhZWjkzUDha?= =?utf-8?B?bU1YWnhzcnRpM0I5SDh1SGtHZ2F5b2NOMXJsVHlHZklVZlpqU1ZFRitxeE1p?= =?utf-8?B?UVBlVnliUGNlWUZKajViTHRvT0Ztak8vc3YyNDJGWk00dmtmYkQzSmdYMEpZ?= =?utf-8?B?TE9WTFVQaldyZCtkdHpBaEtHVWZMZW1YblFBa0l4VUx1c1lkbEVieWtZb3FR?= =?utf-8?B?QUJKQ3VEb1I5Vjh3eFNsS2pwTW5qQTArbW4vSk1renhnQXNSVjNtSVQwVmNq?= =?utf-8?B?VUg2b1l4MnVWTVYxZm9QSTgvZUliNFlsVjVLV3d2bWNGL3c0KzVTWk1YVkVS?= =?utf-8?B?SGF0UktuaTA4dlBLbEwyWjMyMmNOaXVCRGh6endkSndLZkR3a0IxWXBQdzRy?= =?utf-8?B?Yy9hdTRUWUtwMWZobnNqVkNHS3pJYjB4QmZIbWxIcFdaZnR6Y3FmRjlPNzZ4?= =?utf-8?B?Q3JmVlA2TkE1UVJtUGhOZ21zWjF1VTdxbER3UVdkTFphc0NTcDROdTEvR0dt?= =?utf-8?B?UENmakFLcEJhQ2RFQWpBZUg3NDFibU52Ti9UVVZRZlZRTDRBSGd4VEhwUzZ6?= =?utf-8?B?Mi9vdUduZ000eHpBUDhlQUFYTlcxcVBreW1KYklrclJSNFd2Qy9HMnNSVGdi?= =?utf-8?Q?Gi8X9WFnyM/I7p11VXxJgGQ=3D?= X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtDWTRQUjA0TUIwODQxOzY6Tk5LZG5QeXhqQVljMm1xTEpkeGNob1BFU0tG?= =?utf-8?B?bzVMeTU2ZUlFemUxMnMxQml6K1RYaXdIM214aHVXZlhLK2plQnVoNm9weklS?= =?utf-8?B?dlNsVFdWa21GbGxrMWVQUzdmbGNiREc4dzArUVZIU3A5c0dZUnFIL1lSelJw?= =?utf-8?B?Mk83L0phVnFMTmVVWFV5bDg5TVVsYyszd0FaV2hEZDgxbzluM2QyNWxuaG5J?= =?utf-8?B?bVdmVURUOXpFQ0Uva0cxcjBTdTJzNE9GOXQva2M2czVzY0xaRWpIYU94RnJu?= =?utf-8?B?b0VReCt6d2IyZzRhdnF5T24vOW11a29WYkIwWHlVTTlnUHljY3cwRC82bVlM?= =?utf-8?B?RVBnY25KWnM5WWFRRFc5d2MrRlpEZWk4TFM1am4ra2xtUk1wK0ZJNHJZMy9t?= =?utf-8?B?QkllbzdVUE9jazMrV2NTVnZxckNjU04xeitKdGw2UUJFZkdudlE2bXNCNUdT?= =?utf-8?B?c1c4QUNUTjQyRjUxNk9yWlhQYVBHdTFjbTJ1M2NHQjkxaW01UmpTYVl4S3JC?= =?utf-8?B?MkNDQTFLaWtVZ29BVjJEaGZUU2RLbHdsdWdnU0E2Y0l1MkZZZUlMTm5JWFF2?= =?utf-8?B?K1lmSGdOZ3cvU3c2THJTcHBjZ2ZHTE1tbnBjT25EMVRyYVc0VHR2aTF4RkJZ?= =?utf-8?B?NXUxUW5vRDVIaml1KzJ6RUxGaFQ2VlYvaXJvemVRRFA1VnF5MDRzRnFMY0NN?= =?utf-8?B?YXdkNlU4bDh5TjR4cDl5Szhha2w3d2J4NDE2djBRbVloMHZvSFZ4R0dzWVR0?= =?utf-8?B?TkFXak96clJKVTZqZUFBeEg4VmRKbnN3bko4cWQvTHR4THQ3YllVV3dvR29W?= =?utf-8?B?MCs3RTZkVWROaE5YeDhYNFc2TUd0V0xjejBpYkJSZm8rVjh5WUNoTE5JRkxm?= =?utf-8?B?SW5MS2VIZVlKTEVuOUpUbGpWS04zWEZCRHdyUTBUdjZrR2psbmZNeXhsSVJj?= =?utf-8?B?N3JLb1VIYzBVbktlbStvWFlwWlNlaVZEcFBUdnJZTGNEYnFLRy8zVVhsVDZR?= =?utf-8?B?R2J6Rk1pVDRsTDJFVThMOWIwZnNpUXZwVUNUWmNDZU9IRktyVnJPL2FSckYw?= =?utf-8?B?Rm16K1VVK2NndS9oNHBidy9YNEIyaWlBL0JMOUZZNnNkWDFHdnpQZi9VNnZM?= =?utf-8?B?UGJkelFPTnFqNVM0RGtqZ3VSZC9aVll4bjhpNm5aVlZYY1B5dmVGQnpnOFJw?= =?utf-8?B?cG42VGp1K3Z4UFlDcjNqZG9aTHVJUkxiQ3BKT2tobUExYmZLS256VFRKSEhI?= =?utf-8?B?Z05MSGFXUnlZMkZLSkpUTEUydzJhQ0t5d3RiVEFoREJRRHpVK3lmRUVBZktj?= =?utf-8?Q?ikbWv5MUKJtqzVZucFj2sZlk7QXe16E=3D?= X-Microsoft-Exchange-Diagnostics: 1;CY4PR04MB0841;5:H5qodUzakGDFEl/yy1AMfEsxu4/cavqA6NdiBaJt/qf90OfCunir+bQOxA07c/ZTCMJ92Mz+hTiQULOHiEH3w7yfo/8GAOVEn3KPT3vWnoElGrBxUyH1DVVev4XUk6AS7qOb6yaVp0tgpoXF1p9A+Ufq/CViwL9AcD8pNp91vKJpflfxHKu8KpJS4qn1OwRVZo0Vcc4q8Y8IByKEHISSpnA8USU0LuMZgQob+UZlUAUjMTrv/bujEPR07H3edFUMuK9J7bGTFTCkNktDmciKy1dctFm59zcoCY4gXAzQFaBw3P8AcKfj3PwenGMIR1M4MJa2M3VtU6b96LXgrqcX30PJYoDfK6K0F650o3TygaQuji0bUGuFxhUbDaLBBhdCArGYXaBl5D1a798my8BwiKjU54KAX/8gyxEsiz/6WqhN4iH4geQZIcEczgc5HC3swLIfAMaUW7b3RGa9wxJ8FCiFbHGTYNpi1dLedRls57xAoBhodYWERHT2JPe6o8lF;24:U9Y41hgH6a5Ja6o2mbulK6b++tGk9LcGYgGNqJ+CTKCPkkSwMZHT3fCl5Y0/9TZp963L+dtgHQ6MoHqlIvUzzisKr2cLr6CxtKwDXjEDEHw= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;CY4PR04MB0841;7:cvSqoC3cHsFPV9FddLW5gHHLsWIA4zt8Wtz3rmhGpcyFzU82t1LJ8MSVFGvh/JHs7vCvNnwZqbDASJAXGVaaesVtk22/A3zEciMcqcg92+LGFykeMGijtgEppUDviLPTazUB8W6QUyfIfKVi2WHYUa0qluWIOxuW38rEzO37aRbhqtWoIJkPxOg2WNiU72/LJ945Q/P/9fzAXYW8WV6dx2TZ/LcDOcZ2buhNf0Nsm88kajHAfKmQlPddt3taqteRUNWCQuGCO6hezGjZOtqE/ssjlJ8Ww2ZdlgiOJwILqvLIeS4VIQQg//A+HkQs7GSAHWilQYu3/MN/C7VyMpqQejb1CLojkdNg6MYMGayn1uc5FGw+cAcLLqVwo9fubPTDgei/Ed3s5YjHYy9lKLuqDCoUEl6/Dfaw2sk71qPrEAZ24GgxPWH5AerDg9tROOJHmM6UJR7AGKEY7Gda/Qk/PlVPJmpNhVd186ctfT4Ub3YipTm7ayv1DdjNQYccV2XkXz+mX/ULY0Q1BwNhWZndsm7sE4J8PPa0lniGftuHgh70erYLpJUFsCcjzalBwyeRv5mlKC7a3oSrTfJOehlck836uQ3ENlbzClGKIKhV1mDYHkhbtCHPXfvfKz4w7Gha2jZzy58WcM0beL/cfQ3Tw0esMifDTQXgrYUkRJirI17HvvAJiiHepMWYz0/41D5rNceY+HEu2yn6e2Z3wNNaM8GrFq8dIys05GmpRd0cFnJ2gvnma9T/1g5B/5xQZDDp1az7Z4WmnI57P0GOBqR/6wGqbsz6cQYxK6lKHEVaoMU= X-OriginatorOrg: adaptrum.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jul 2017 17:17:21.5070 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR04MB0841 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 9188 Lines: 290 On 07/29/2017 02:34 AM, Marek Vasut wrote: > On 07/29/2017 12:07 AM, Alexandru Gagniuc wrote: >> Add support for the QSPI controller found in Adaptrum Anarion SOCs. >> This controller is designed specifically to handle SPI NOR chips, and >> the driver is modeled as such. >> >> Because the system is emulated on an FPGA, we don't have a way to test >> all the hardware adjustemts, so only basic features are implemented at >> this time. >> Hi Marek, Thank you very much for the comments. I am going to fix most issues you pointed out in v2. I do have some follow-up question on some of your comments, so please bear with me. I hope I have responded to all your comments, but feel free to nudge me if I missed any. [snip] >> --- /dev/null >> +++ b/Documentation/devicetree/bindings/mtd/anarion-quadspi.txt >> @@ -0,0 +1,22 @@ >> +* Adaptrum Anarion Quad SPI controller >> + >> +Required properties: >> +- compatible : Should be "adaptrum,anarion-qspi". >> +- reg : Contains two entries, each of which is a tuple consisting of a >> + physical address and length. The first entry is the address and >> + length of the controller register set. The second entry is the >> + address and length of the memory-mapped flash. This second region is >> + the region where the controller responds to XIP requests, and may be >> + larger than the size of the attached flash. > > You want to split the bindings into separate patch and CC Rob to review > them. Yes, I do want that now! [snip] >> diff --git a/drivers/mtd/spi-nor/Kconfig b/drivers/mtd/spi-nor/Kconfig >> index 293c8a4..98dc012 100644 >> --- a/drivers/mtd/spi-nor/Kconfig >> +++ b/drivers/mtd/spi-nor/Kconfig >> @@ -48,6 +48,13 @@ config SPI_ATMEL_QUADSPI >> This driver does not support generic SPI. The implementation only >> supports SPI NOR. >> >> +config SPI_ANARION_QUADSPI >> + tristate "Adaptrum Anarion Quad SPI Controller" >> + depends on OF && HAS_IOMEM >> + help >> + Enable support for the Adaptrum Anarion Quad SPI controller. >> + This driver does not support generic SPI. It only supports SPI NOR. > > Keep the list sorted. Staged for [PATCH v2]. >> config SPI_CADENCE_QUADSPI >> tristate "Cadence Quad SPI controller" >> depends on OF && (ARM || COMPILE_TEST) >> diff --git a/drivers/mtd/spi-nor/Makefile b/drivers/mtd/spi-nor/Makefile >> index 285aab8..53635f6 100644 >> --- a/drivers/mtd/spi-nor/Makefile >> +++ b/drivers/mtd/spi-nor/Makefile >> @@ -1,6 +1,7 @@ >> obj-$(CONFIG_MTD_SPI_NOR) += spi-nor.o >> obj-$(CONFIG_SPI_ASPEED_SMC) += aspeed-smc.o >> obj-$(CONFIG_SPI_ATMEL_QUADSPI) += atmel-quadspi.o >> +obj-$(CONFIG_SPI_ANARION_QUADSPI) += anarion-quadspi.o > > DTTO, N is before S and T . Staged for [PATCH v2]. >> obj-$(CONFIG_SPI_CADENCE_QUADSPI) += cadence-quadspi.o >> obj-$(CONFIG_SPI_FSL_QUADSPI) += fsl-quadspi.o >> obj-$(CONFIG_SPI_HISI_SFC) += hisi-sfc.o >> diff --git a/drivers/mtd/spi-nor/anarion-quadspi.c b/drivers/mtd/spi-nor/anarion-quadspi.c >> new file mode 100644 >> index 0000000..d981356 >> --- /dev/null >> +++ b/drivers/mtd/spi-nor/anarion-quadspi.c >> @@ -0,0 +1,490 @@ >> +/* >> + * Adaptrum Anarion Quad SPI controller driver >> + * >> + * Copyright (C) 2017, Adaptrum, Inc. >> + * (Written by Alexandru Gagniuc for Adaptrum, Inc.) >> + * Licensed under the GPLv2 or (at your option) any later version. > > The GPL boilerplate should be here. I chose this form of the boilerplate because it seems to be quite used in other places. I am assuming the fatter boilerplate the requirement for drivers/mtd, correct? [snip] >> +#define ASPI_CLK_SW_RESET (1 << 0) > > BIT(0) , fix globally Staged for [PATCH v2]. >> +#define ASPI_CLK_RESET_BUF (1 << 1) >> +#define ASPI_CLK_RESET_ALL (ASPI_CLK_SW_RESET | ASPI_CLK_RESET_BUF) >> +#define ASPI_CLK_SPI_MODE3 (1 << 2) >> +#define ASPI_CLOCK_DIV_MASK (0xff << 8) >> +#define ASPI_CLOCK_DIV(d) (((d) << 8) & ASPI_CLOCK_DIV_MASK) >> + >> +#define ASPI_TIMEOUT_US 100000 >> + >> +#define ASPI_DATA_LEN_MASK 0x3fff >> +#define ASPI_MAX_XFER_LEN (size_t)(ASPI_DATA_LEN_MASK + 1) >> + >> +#define MODE_IO_X1 (0 << 16) >> +#define MODE_IO_X2 (1 << 16) >> +#define MODE_IO_X4 (2 << 16) >> +#define MODE_IO_SDR_POS_SKEW (0 << 20) >> +#define MODE_IO_SDR_NEG_SKEW (1 << 20) >> +#define MODE_IO_DDR_34_SKEW (2 << 20) >> +#define MODE_IO_DDR_PN_SKEW (3 << 20) >> +#define MODE_IO_DDR_DQS (5 << 20) >> + >> +#define ASPI_STATUS_BUSY (1 << 2) >> + >> +/* >> + * This mask does not match reality. Get over it: > > What is this about ? Each stage of the QSPI chain has two registers. The second register has a bitfield which takes in the length of the stage. For example, for DATA2, we can set the length up to 0x4000, but for ADDR2, we can only set a max of 4 bytes. I wrote this comment as a reminder to myself to be careful about using this mask. I'll rephrase the comment for [v2] >> + * DATA2: 0x3fff >> + * CMD2: 0x0003 >> + * ADDR2: 0x0007 >> + * PERF2: 0x0000 >> + * HI_Z: 0x003f >> + * BCNT: 0x0007 >> + */ >> +#define CHAIN_LEN(x) ((x - 1) & ASPI_DATA_LEN_MASK) >> + >> +struct anarion_qspi { >> + struct spi_nor nor; >> + struct device *dev; >> + uintptr_t regbase; > > Should be void __iomem * I guess ? I chose uintptr_t as opposed to void *, because arithmetic on void * is not valid in C. What is the right answer hen, without risking undefined behavior? > >> + uintptr_t xipbase; >> + uint32_t xfer_mode_cmd; > > u32 etc, fix globally, this is not userspace. From coding-style, section 5.(d), my understanding is that "Linux-specific u8/u16/u32/u64 types [...] are not mandatory in new code". Most of the code in this driver is shared between Linux, u-boot, openocd, ASIC validation tests, and manufacturing tests. Unlike, shortint types, stdint types are available in all cases. Therefore, having to use a different set of primitive types makes code sharing much more difficult, and increases the maintenance burden, hence the strong preference for standard types. Is this reasonable? [snip] >> +static void aspi_drain_fifo(struct anarion_qspi *aspi, uint8_t *buf, size_t len) >> +{ >> + uint32_t data; > > Is this stuff below something like ioread32_rep() ? > >> + aspi_write_reg(aspi, ASPI_REG_BYTE_COUNT, sizeof(uint32_t)); >> + while (len >= 4) { >> + data = aspi_read_reg(aspi, ASPI_REG_DATA1); >> + memcpy(buf, &data, sizeof(data)); >> + buf += 4; >> + len -= 4; >> + } That is very similar to ioread32_rep, yes. I kept this as for the reasons outlined above, but changing this to _rep() seems innocent enough. >> + if (len) { >> + aspi_write_reg(aspi, ASPI_REG_BYTE_COUNT, len); >> + data = aspi_read_reg(aspi, ASPI_REG_DATA1); >> + memcpy(buf, &data, len); >> + } >> +} >> + >> +static void aspi_seed_fifo(struct anarion_qspi *spi, >> + const uint8_t *buf, size_t len) >> +{ >> + uint32_t data; >> + >> + aspi_write_reg(spi, ASPI_REG_BYTE_COUNT, sizeof(uint32_t)); >> + while (len >= 4) { >> + memcpy(&data, buf, sizeof(data)); >> + aspi_write_reg(spi, ASPI_REG_DATA1, data); > > iowrite32_rep ? > [snip] >> +/* While we could send read commands manually to the flash chip, we'd have to >> + * get data back through the DATA2 register. That is on the AHB bus, whereas >> + * XIP reads go over AXI. Hence, we use the memory-mapped flash space for read. >> + * TODO: Look at using DMA instead of memcpy(). >> + */ > > Multiline comment looks like this, > /* > * foo > * bar > */ > Staged for [PATCH v2]. [snip] >> +static ssize_t anarion_spi_nor_write(struct spi_nor *nor, loff_t to, >> + size_t len, const uint8_t *src) >> +{ >> + int ret; >> + struct anarion_qspi *aspi = nor->priv; >> + >> + dev_err(aspi->dev, "%s, @0x%llx + %zu\n", __func__, to, len); > > Drop this. > OOPS! That wasn't supposed to be there. Staged for [PATCH v2]. [snip] >> + switch (nor->flash_read) { >> + default: /* Fall through */ > > This will break once we add OSPI support ... Ooh, I see the API here has changed significantly from the 4.9 LTS branch where we originally developed the driver. I will add and test normal and FAST_READ support, but I won't have the bandwidth to test other modes yet. Those will have to remain as a TODO. >> + case SPI_NOR_NORMAL: >> + aspi->num_hi_z_clocks = nor->read_dummy; >> + aspi->xfer_mode_cmd = MODE_IO_X1; >> + aspi->xfer_mode_addr = MODE_IO_X1; >> + aspi->xfer_mode_data = MODE_IO_X1; >> + break; >> + case SPI_NOR_FAST: >> + aspi->num_hi_z_clocks = nor->read_dummy; >> + aspi->xfer_mode_cmd = MODE_IO_X1; >> + aspi->xfer_mode_addr = MODE_IO_X1; >> + aspi->xfer_mode_data = MODE_IO_X1; >> + break; >> + case SPI_NOR_DUAL: >> + aspi->num_hi_z_clocks = nor->read_dummy; >> + aspi->xfer_mode_cmd = MODE_IO_X1; >> + aspi->xfer_mode_addr = MODE_IO_X1; >> + aspi->xfer_mode_data = MODE_IO_X2; >> + break; >> + case SPI_NOR_QUAD: >> + aspi->num_hi_z_clocks = nor->read_dummy; >> + aspi->xfer_mode_cmd = MODE_IO_X1; >> + aspi->xfer_mode_addr = MODE_IO_X1; >> + aspi->xfer_mode_data = MODE_IO_X4; >> + break; >> + } >> + >> + aspi_setup_xip_read_chain(aspi, nor); >> + >> + mtd_device_register(&aspi->nor.mtd, NULL, 0); >> + >> + return 0; >> +} [snip]