Since I still not sure, what missing functionality should be covered, I
try to ques: the point is to make OpenOCD and Quartus users happy.
Without need to support Quartus, this construction is not needed. Correct?

Am 07.04.21 um 13:49 schrieb Ooi, Cinly:
> Hi Antonio
>
> Thank you for the quick reply. I broken it down to two parts in this reply. 
> The first part is about the dependencies and the second part about why use 
> aji_client?
>
>
> Part 1:
>
> Sorry for the link. I used the wrong one, it should be " 
> https://github.com/intel/libaji_client";. I have too many permutation of 
> "lib","aji","client" I am using right now that I got confused.
>
> libsafestring is at https://github.com/intel/safestringlib. Libaji_client 
> pulls it in for Linux only
>
> libaji_client and  libsafestring are on MIT license. While we are on the 
> subject of licensing, note that the MD5 routines in libaji_client 
> (https://github.com/intel/libaji_client/blob/release/21.1/src/jtag/jtag_md5_pd.cpp
>  and it's .h  counterparts) are Public Domain licensed.
>
> Allow me to take sometime to explain the relationship between libaji_client, 
> libsafestring and OpenOCD:
> libaji_client uses Linux to provide it with safer string manipulation routine 
> (strcat_s() etc)  found in Windows but not Linux. On Windows, there is no 
> libsafestring.dll as it is not needed. libaji_client.so/.dll  (and 
> libsafestring.so on linux) must be on the same directory as openocd.exe for 
> security reasons. This is enforced in 
> https://github.com/intel/aji_openocd/blob/release/21.1/src/jtag/aji_client/aji/c_jtag_client_gnuaji_lib64.c#L57
>  and its win64  counterpart. It will be very clear in the same file that I 
> used the mangled name to access libaji_client from opencod.
>
> Please check for me that I am in compliance of GPL-v2. I tried my best, but I 
> might be missing parts. Where possible can you also check me against GPLv3 
> please? The source code for aji_openocd is under GPL-v2+ and we do intent to 
> go to GPL-v3(+) if and when openocd decides to do it.
>
>
> Part 2:
>
> You are right to say that ftdi and ublast2 drivers  in OpenOCD already access 
> USB-Blaster and USB-Blaster2. I got ublast2 working and use it as a reference 
> to understand how OpenOCD work before embarking on writing aji_client driver.
>
> You had also understand the chain correctly. But take note that the current 
> implementation cannot yet access the FPGA, instead, it is accessing the ARM 
> SOC HPS on the jtag scan chain where FPGA is in the chain description. FPGA 
> access is of course one of our goal.
>
> For ease of discussion, I will use this ommunication flow in this email and 
> subsequent emails:
> OpenOCD -> libaji_client -> <TCP/IP> -> jtagd -> <jtag> ->FPGA
> where <TCP/IP> and <jtag> refers to TCP/IP and jtag protocol. Needless to 
> say, libaji_client and jtagd can be on different computing hosts, as long as 
> they are accessible via the internet.
>
> One way for me to argue for aji-client is to say that we have customer that 
> wants to use our aji_client.  While true, is not going to cut it even for me, 
> so I am just going to mention it for completeness.
>
> I will say the contribution here is the AJI API documented in 
> https://github.com/intel/libaji_client/blob/release/21.1/src/h/aji.h and the 
> actual client side implementation in the same repository.
>
> I think the advantage is how jtagd works.  It is a server capable of managing 
> multiple JTAG scan chains, expressed physically as multiple USB-Blaster 2 
> cables. It exposes those cables via the same TCP/IP port. Jtagd also allows 
> multiple client instances, such as multiple instances of openOCD, to access 
> the same JTAG scan chain at the same time. The effort of setting up jtagd is 
> only worthwhile when you have a pool of USB Blaster2-connected boards to be 
> shared by multiple developers/users. Obviously we deploy several of the pools 
> here, and we do have customers who have similar deployments.  Having said 
> that, anyone having jtagd (jtagserver.exe on windows) deployed, this includes 
> all users of Quartus, can connect to their board using OpenOCD. However, your 
> mileage is not very great if it is both openocd/libaji_client and jtagd is on 
> the same host.
>
> The TCP/IP communication is not raw jtag bitstream, but high level JTAG 
> commands, i.e. those exposed by interface_jtag*() in the minidriver 
> interface. That was the main reason for using minidriver interface. The 
> important IR and DR access command is at 
> https://github.com/intel/libaji_client/blob/a99de19d6224eb064feb4f13061504c1b50beb6f/src/jtag/jtag_client_open.cpp#L1151,
>  with the link pointing to the code fragment composing the message to be sent 
> to jtagd  for DR access. Note that m_openid is the representation of the 
> particular TAP of interest.
> The control communication can be found at 
> https://github.com/intel/libaji_client/blob/a99de19d6224eb064feb4f13061504c1b50beb6f/src/jtag/jtag_client_chain.cpp
>
> I had also elude the the fact that I am writing some code to allow aji_client 
> to access virtual JTAG / SLD (System Level Debuggin) hub/node. Hopefully this 
> will count as a plus for aji_client. More details later as we further our 
> conversation.
>
> Finally please note that Intel is willing to consider opensourcing jtagd if 
> there is demand. One of the reason for opensourcing the libaji_client is to 
> see whether there is appetite for jtagd like implementation in open source 
> world.
>
> Looking forward to hearing from you soon.
>
> Many thanks in advance
>
> Best regards
> Cinly
>
> -----Original Message-----
> From: Antonio Borneo <[email protected]>
> Sent: Wednesday, April 7, 2021 4:07 AM
> To: Ooi, Cinly <[email protected]>
> Cc: OpenOCD <[email protected]>
> Subject: Re: Moving away from minidriver [Was: [OpenOCD-devel] Survivability 
> of minidriver]
>
> Hi Cinly,
>
> thanks for releasing your work on OpenOCD.
>
> The link https://github.com/intel/aji_client is not accessible. I don't know 
> if it's incorrect or without proper permissions.
> I want to understand more about the two dynamic libraries "libSafeString.so" 
> and "libaji_client.so", mainly in terms of license and compatibility with 
> OpenOCD license GPL-v2.
>
> If I understand correctly, the chain will be:
> OpenOCD <-> AJI driver <-> above DLLs <-> network <-> jtagd daemon <->
> USB-Blaster2 <-> JTAG <-> FPGA
>
> Currently OpenOCD supports already USB-Blaster2. What would be the advantage 
> for OpenOCD users to justify this long chain, passing through proprietary SW?
>
> Are the API of the jtagd network protocol available? Do we really need to 
> link with the two DLLs above? Or can we simply open and use a socket to talk 
> with jtagd in the OpenOCD driver?
>
> Best Regards,
> Antonio
>
> On Tue, Apr 6, 2021 at 1:16 PM Ooi, Cinly <[email protected]> wrote:
>>
>> Hi Antonio and all OpenOCD developers
>>
>>
>>
>> Finally we released our driver on github.com/intel/aji_openocd. It uses the 
>> minidriver and is based on v0.10.0 (mid June 2020).
>>
>>
>>
>> I am finally ready to discuss how to go forward with the deprecation of 
>> minidriver. My ideal outcome from this discussion will be to have my driver 
>> implementation coexists with other drivers. At present, being a minidriver, 
>> it demands exclusive access to OpenOCD.
>>
>>
>>
>>
>>
>> I had updated the the driver to use release v0.11, and it is in branch
>> discuss/openocd. More specifically
>> https://github.com/intel/aji_openocd/commit/403ae3e955d728762159e2f274
>> 0c5987c25862c4
>>
>> should get you to the commit of interest. The commit previous to it is from 
>> v0.11 in case you need to find the actual commit where I had forked the 
>> driver from.
>>
>>
>>
>> Ignoring configure.ac, docs, and config files, the files of interest to us 
>> are all in src/jtag. My driver code is in src/jtag/aji_client.  I have to 
>> overwrite interface_* functions because the driver we use is expecting high 
>> level jtag commands and not jtag bitstream to drive the pins. 
>> src/jtag/aji_client/aji_client.c is where all the implementation of 
>> interface_* from minidriver are.
>>
>>
>>
>> I also have to use conditional compilation to help me bypass/replace 
>> functions in core OpenOCD to get the driver to work. To find them, use “grep 
>> -R BUILD_AJI_CLIENT”.
>>
>>
>>
>> For v0.11, I also have to revert some minor changes to restore minidriver 
>> functionality. Those should be obvious.
>>
>>
>>
>> Technically we need a lib/dll to be built from 
>> https://github.com/intel/aji_client . Just in case you need to compile it, 
>> instruction is in README. [Original openocd instruction was moved to 
>> README.openocd]. For this discussion, I believe compilation is not necessary.
>>
>>
>>
>> Looking forward to your replies. If there is any questions, please do not 
>> hesitate to contact me.
>>
>>
>>
>> Many thanks
>>
>> Cinly
>>
>>
>>
>> P.S.> In a few days’ time I will be asking for help again. This time is ask 
>> for comment on  current preliminary code to integrate virtual JTAG/SLD 
>> infrastructure (See 
>> https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/ug/ug_virtualjtag.pdf)
>>  into OpenOCD.  I am currently tidying up the code to make it more 
>> presentable.
>>
>>
>>
>>
>>
>>
>>
>> From: Ooi, Cinly <[email protected]>
>> Sent: Saturday, March 6, 2021 12:50 AM
>> To: Antonio Borneo <[email protected]>
>> Cc: OpenOCD <[email protected]>
>> Subject: Re: [OpenOCD-devel] Survivability of minidriver
>>
>>
>>
>> Hi Antonio
>>
>>
>>
>> Thank you for the reply.
>>
>>
>>
>> I did had a look at other adapter_drivers, including aice and
>> libjaylink (which was the closest to mine)
>>
>>
>>
>> Let’s wait for a few week for the driver to clear  internal process and 
>> officially open sourced in a few weeks. That way we have the source code 
>> laid in front of us, and we can discuss (1) how to proceed with both this 
>> and (2) discuss how I have to modify my driver to your satisfaction to allow 
>> me to create a pull request for openocd. I will based the modification on 
>> the new 0.11 base instead of 0.10 base I am using now.
>>
>>
>>
>> I will be back. Your reply that minidriver will be gone soon is not a 
>> surprise. When we started doing the driver, we were too new to OpenOCD and 
>> that was the fastest way to get things prototyped and working.  Management 
>> knew they have to revisit the issue.
>>
>>
>>
>> Many thanks for the quick reply. Looking forward to talk to you about this 
>> further in a few weeks.
>>
>>
>>
>> Best regards
>>
>> Cinly
>>
>>
>>
>> From: Antonio Borneo <[email protected]>
>> Sent: Friday, March 5, 2021 7:12 PM
>> To: Ooi, Cinly <[email protected]>
>> Cc: OpenOCD <[email protected]>
>> Subject: Re: [OpenOCD-devel] Survivability of minidriver
>>
>>
>>
>>
>>
>> On Fri, Mar 5, 2021, 12:00 Ooi, Cinly <[email protected]> wrote:
>>
>> Hi All
>>
>>
>>
>> I had written a driver which uses the minidriver interface, It is working 
>> fine and we plan to open source it in a few weeks (>5)  time when all 
>> internal due-diligence are done.
>>
>>
>>
>> Before I started I already noted that only zy1000.c is using the minidriver 
>> interface, and it itself is scheduled for removal. With that only use case 
>> gone it will mean there is a high chance that interface will be removed.  
>> This meant that I have to come here and ask the OpenOCD development team 
>> whether do they have plans to deprecate and remove this interface? and if 
>> so, when? And is there a replacement?
>>
>>
>>
>> Many thanks in advance and best regards
>>
>> Cinly
>>
>>
>>
>> Hi Cinly,
>>
>>
>>
>> I'm just waiting for the new release v0.11.0 within next few days to 
>> upstream a patch set that drops zy1000 and the minidriver.
>>
>>
>>
>> Have you checked the other drivers based on struct adapter_driver?
>>
>> If you can share your current code, we can check together how to move it to 
>> the new API, or even detect that minidriver is the best option and has to 
>> stay!
>>
>>
>>
>> Regards
>>
>> Antonio
>>
>>


--
Regards,
Oleksij

Reply via email to