On 21/09/2020 18:18, Geert Stappers wrote:
Please express it all in a git commit.

Hi Geert,

Please see attached.

Cheers,

Damien

diff --git a/urjtag/configure.ac b/urjtag/configure.ac
index 95d1d743..e1a5ae8a 100644
--- a/urjtag/configure.ac
+++ b/urjtag/configure.ac
@@ -637,6 +637,7 @@ URJ_DRIVER_SET([bus], [
 	mpc824x
 	mpc8313
 	mpc837x
+	p1020
 	ppc405ep
 	ppc440gx_ebc8
 	prototype
diff --git a/urjtag/data/Makefile.am b/urjtag/data/Makefile.am
index 7fb82f0f..62e916d7 100644
--- a/urjtag/data/Makefile.am
+++ b/urjtag/data/Makefile.am
@@ -126,6 +126,8 @@ nobase_dist_pkgdata_DATA = \
 	freescale/mpc8378/mpc8378 \
 	freescale/mpc8379/STEPPINGS \
 	freescale/mpc8379/mpc8379 \
+	freescale/p1020/STEPPINGS \
+	freescale/p1020/p1020 \
 	ibm/PARTS \
 	ibm/ppc440gx/STEPPINGS \
 	ibm/ppc440gx/ppc440gx \
diff --git a/urjtag/data/bsdl/STD_1149_1_2001 b/urjtag/data/bsdl/STD_1149_1_2001
index a0e1c3e0..21a82f18 100644
--- a/urjtag/data/bsdl/STD_1149_1_2001
+++ b/urjtag/data/bsdl/STD_1149_1_2001
@@ -1,259 +1,173 @@
---
--- $Id$
---
--- Email header accompanying the original Yacc code:
---   http://www.eda.org/vug_bbs/bsdl.parser
--- 
--- -----------------------------------8<--------------------------------------
--- 
--- Hello All,
--- 
--- This is this first mailing of the BSDL* Version 0.0 parser specifications
--- we are sending to people who request it from our publicized E-Mail address;
--- 
---              bsdl%hpm...@hplabs.hp.com
--- 
--- You are free to redistribute this at will, but we feel that it would be
--- better if respondents asked for it directly so that their addresses can
--- be entered into our list for future mailings and updates.
--- 
--- It would be helpful if you could confirm receipt of this transmission.
--- We also would be very interested to hear about your experiences with this
--- information and what you are planning to do with BSDL.
--- 
--- Regards,
--- 
--- Ken Parker
--- Hewlett-Packard Company
--- 
--- 
--- *Boundary-Scan Description Language - as documented in:
--- 
--- "A Language for Describing Boundary-Scan Devices", K.P. Parker
--- and S. Oresjo, Proceedings 1990 International Test Conference,
--- Washington DC, pp 222-234
--- 
--- 
--- - -----------------cut here---------------------------------------------------
--- 
--- 
--- 901004.0721                                  Hewlett-Packard Company
--- 901016.1049                                  Manufacturing Test Division
---                                              P.O. Box 301
---                                              Loveland, Colorado  80537
---                                              USA
--- 
---                                                              October 1990
--- Hello BSDL Parser Requestor,
--- 
---    This Electronic Mail reply contains the computer specifications for
--- Hewlett-Packard's Version 0.0 BSDL parser.  This section of the reply
--- explains the contents of the rest of this file.
--- 
--- This file is composed of seven (7) parts:
--- 
---    1) How to use this file
--- 
---    2) UNIX* Lex source  (lexicographical tokenizing rules)
--- 
---    3) UNIX* Yacc source (BNF-like syntax description)
--- 
---    4) A sample main program to recognize BSDL.
--- 
---    5) A BSDL description of the Texas Instruments 74bct8374 that is
---       recognized by the parser, for testing purposes.
--- 
---    6) The VHDL package STD_1149_1_1990 needed by this parser.
--- 
---    7) [added 901016] Porting experiences to other systems.
--- 
--- 
--- RECOMMENDATION: Save a copy of this file in archival storage before
---                 processing it via the instructions below.  This will
---                 allow you to recover from errors, and allow you to
---                 compare subsequently released data for changes.
--- 
--- DISCLAIMERS:
--- 
--- 1.  The IEEE 1149.1 Working Group has not endorsed BSDL Version 0.0 and
---     therefore no person may represent it as an IEEE standard or imply that
---     a resulting IEEE standard will be identical to it.
--- 
--- 2.  The IEEE 1149.1 Working Group recognizes that BSDL Version 0.0 is a
---     well-conceived initiative that is likely to excelerate the creation
---     of tools that support the 1149.1 standard.  As such, changes and
---     enhancements will be carefully considered so as not to needlessly
---     disrupt these development efforts.  The overriding goal is the
---     ultimate success of the 1149.1 standard.
--- 
--- LEGAL NOTICES:
--- 
---     Hewlett-Packard Company makes no warranty of any kind with regard to
---     this information, including, but not limited to, the implied
---     waranties of merchantability and fitness for a particular purpose.
--- 
---     Hewlett-Packard Company shall not be liable for errors contained
---     herein or direct, indirect, special, incidental, or consequential
---     damages in connection with the furnishing, performance, or use of
---     this material.
--- 
--- 
--- *UNIX is a trademark of AT&T in the USA and other countries.
--- 
-
---  STD_1149_1_1990    VHDL Package and Package Body in support of 
---  BSDL Version 0.0
---
-
--- package STD_1149_1_1990 is             -- Created 900525
- package STD_1149_1_2001 is
-
- -- Give pin mapping declarations
-
- attribute PIN_MAP : string;
- subtype PIN_MAP_STRING is string; 
-
- -- Give TAP control declarations
-
- type CLOCK_LEVEL is (LOW, BOTH);
- type CLOCK_INFO  is record
-   FREQ : real;
-   LEVEL: CLOCK_LEVEL;
- end record;
-
- attribute  TAP_SCAN_IN   : boolean;
- attribute  TAP_SCAN_OUT  : boolean;
- attribute  TAP_SCAN_CLOCK: CLOCK_INFO;
- attribute  TAP_SCAN_MODE : boolean;
- attribute  TAP_SCAN_RESET: boolean;
-
- -- Give instruction register declarations
-
- attribute  INSTRUCTION_LENGTH : integer;
- attribute  INSTRUCTION_OPCODE : string;
- attribute  INSTRUCTION_CAPTURE : string;
- attribute  INSTRUCTION_DISABLE : string;
- attribute  INSTRUCTION_GUARD : string;
- attribute  INSTRUCTION_PRIVATE : string;
- attribute  INSTRUCTION_USAGE : string;
- attribute  INSTRUCTION_SEQUENCE : string;
-
- -- Give ID and USER code declarations
-
- type ID_BITS is ('0', '1', 'x', 'X');
- type ID_STRING is array (31 downto 0) of ID_BITS;
- attribute IDCODE_REGISTER  :  ID_STRING;
- attribute USERCODE_REGISTER:  ID_STRING;
-
- -- Give register declarations
-
- attribute REGISTER_ACCESS : string;
-
- -- Give boundary cell declarations
-
- type BSCAN_INST is (EXTEST, SAMPLE, INTEST, RUNBIST);
- type CELL_TYPE is (INPUT, INTERNAL, CLOCK,
-                      CONTROL, CONTROLR, OUTPUT2, 
-                      OUTPUT3, BIDIR_IN, BIDIR_OUT);
- type CAP_DATA is (PI, PO, UPD, CAP, X, ZERO, ONE);
- type CELL_DATA is record
-   CT : CELL_TYPE;
-   I  : BSCAN_INST;
-   CD : CAP_DATA;
- end record;
- type CELL_INFO is array (positive range <>) of CELL_DATA;
-
- -- Boundary Cell defered constants (see package body)
-
- constant BC_1  : CELL_INFO; 
- constant BC_2  : CELL_INFO; 
- constant BC_3  : CELL_INFO; 
- constant BC_4  : CELL_INFO; 
- constant BC_5  : CELL_INFO; 
- constant BC_6  : CELL_INFO; 
-
- -- Boundary Register declarations
-
- attribute BOUNDARY_CELLS : string;
- attribute BOUNDARY_LENGTH : integer;
- attribute BOUNDARY_REGISTER : string;
-
- -- Miscellaneous
-
- attribute DESIGN_WARNING : string;
---end STD_1149_1_1990;  -- End of 1149.1-1990 Package
-end STD_1149_1_2001;
-
-
---package body STD_1149_1_1990 is   -- Standard Boundary Cells  
-                                  -- Written  900525
-package body STD_1149_1_2001 is
-
--- Description for f10-12, f10-16, f10-18c, f10-18d, f10-21c
-
-constant BC_1 : CELL_INFO := 
- ((INPUT,   EXTEST,  PI),  (OUTPUT2,  EXTEST,  PI),
-  (INPUT,   SAMPLE,  PI),  (OUTPUT2,  SAMPLE,  PI),
-  (INPUT,   INTEST,  PI),  (OUTPUT2,  INTEST,  PI),
-  (INPUT,   RUNBIST, PI),  (OUTPUT2,  RUNBIST, PI),
-  (OUTPUT3, EXTEST,  PI),  (INTERNAL, EXTEST,  PI),
-  (OUTPUT3, SAMPLE,  PI),  (INTERNAL, SAMPLE,  PI),
-  (OUTPUT3, INTEST,  PI),  (INTERNAL, INTEST,  PI),
-  (OUTPUT3, RUNBIST, PI),  (INTERNAL, RUNBIST, PI),
-  (CONTROL, EXTEST,  PI),  (CONTROLR, EXTEST,  PI),
-  (CONTROL, SAMPLE,  PI),  (CONTROLR, SAMPLE,  PI),
-  (CONTROL, INTEST,  PI),  (CONTROLR, INTEST,  PI),
-  (CONTROL, RUNBIST, PI),  (CONTROLR, RUNBIST, PI) );
-
--- Description for f10-8, f10-17, f10-19c, f10-19d, f10-22c
-
-constant BC_2 : CELL_INFO := 
- ((INPUT,   EXTEST,  PI),  (OUTPUT2, EXTEST,   UPD),
-  (INPUT,   SAMPLE,  PI),  (OUTPUT2, SAMPLE,   PI),
-  (INPUT,   INTEST,  UPD),  -- Intest on output2 not supported
-  (INPUT,   RUNBIST, UPD), (OUTPUT2, RUNBIST, UPD),
-  (OUTPUT3, EXTEST,  UPD), (INTERNAL, EXTEST,  PI),
-  (OUTPUT3, SAMPLE,  PI),  (INTERNAL, SAMPLE,  PI),
-  (OUTPUT3, INTEST,  PI),  (INTERNAL, INTEST,  UPD),
-  (OUTPUT3, RUNBIST, PI),  (INTERNAL, RUNBIST, UPD),
-  (CONTROL, EXTEST,  UPD), (CONTROLR, EXTEST, UPD),
-  (CONTROL, SAMPLE,  PI),  (CONTROLR, SAMPLE,  PI),
-  (CONTROL, INTEST,  PI),  (CONTROLR, INTEST,  PI),
-  (CONTROL, RUNBIST, PI),  (CONTROLR, RUNBIST, PI) );
-
--- Description for f10-9
-
-constant BC_3 : CELL_INFO := 
- ((INPUT, EXTEST,  PI),    (INTERNAL, EXTEST,  PI),
-  (INPUT, SAMPLE,  PI),    (INTERNAL, SAMPLE,  PI),
-  (INPUT, INTEST,  PI),    (INTERNAL, INTEST,  PI),
-  (INPUT, RUNBIST, PI),    (INTERNAL, RUNBIST, PI) );
-
--- Description for f10-10, f10-11
-
-constant BC_4 : CELL_INFO := 
- ((INPUT, EXTEST,  PI),  -- Intest on input not supported                    
-  (INPUT, SAMPLE,  PI),  -- Runbist on input not supported                    
-  (CLOCK, EXTEST,  PI),   (INTERNAL, EXTEST,  PI),
-  (CLOCK, SAMPLE,  PI),   (INTERNAL, SAMPLE,  PI),
-  (CLOCK, INTEST,  PI),   (INTERNAL, INTEST,  PI),
-  (CLOCK, RUNBIST, PI),   (INTERNAL, RUNBIST, PI) );
-
--- Description for f10-20c, a combined Input/Control
-
-constant BC_5 : CELL_INFO := 
- ((INPUT, EXTEST,  PI),   (CONTROL, EXTEST,  PI),
-  (INPUT, SAMPLE,  PI),   (CONTROL, SAMPLE,  PI),
-  (INPUT, INTEST,  UPD),  (CONTROL, INTEST,  UPD),
-  (INPUT, RUNBIST, PI),   (CONTROL, RUNBIST, PI) );
-
--- Description for f10-22d, a reversible cell
-
-constant BC_6 : CELL_INFO := 
- ((BIDIR_IN, EXTEST,  PI),  (BIDIR_OUT, EXTEST,  UPD),
-  (BIDIR_IN, SAMPLE,  PI),  (BIDIR_OUT, SAMPLE,  PI),
-  (BIDIR_IN, INTEST,  UPD), (BIDIR_OUT, INTEST,  PI),
-  (BIDIR_IN, RUNBIST, UPD), (BIDIR_OUT, RUNBIST, PI) );
-
---end STD_1149_1_1990;  -- End of 1149.1-1990 Package Body
-end STD_1149_1_2001;
+      package STD_1149_1_2001 is
+      -- Give component conformance declaration 
+      attribute COMPONENT_CONFORMANCE : string; 
+
+      -- Give pin mapping declarations 
+      attribute PIN_MAP : string; 
+      subtype PIN_MAP_STRING is string; 
+
+      -- Give TAP control declarations 
+      type CLOCK_LEVEL is (LOW, BOTH); 
+      type CLOCK_INFO is record 
+      FREQ : real; 
+      LEVEL: CLOCK_LEVEL; 
+      end record; 
+
+      attribute TAP_SCAN_IN : boolean; 
+      attribute TAP_SCAN_OUT : boolean; 
+      attribute TAP_SCAN_CLOCK: CLOCK_INFO; 
+      attribute TAP_SCAN_MODE : boolean; 
+      attribute TAP_SCAN_RESET: boolean;
+      -- Give instruction register declarations 
+      attribute INSTRUCTION_LENGTH : integer; 
+      attribute INSTRUCTION_OPCODE : string; 
+      attribute INSTRUCTION_CAPTURE : string; 
+      attribute INSTRUCTION_PRIVATE : string; 
+
+      -- Give ID and USER code declarations 
+      type ID_BITS is ('0', '1', 'x', 'X'); 
+      type ID_STRING is array (31 downto 0) of ID_BITS; 
+      attribute IDCODE_REGISTER : ID_STRING; 
+      attribute USERCODE_REGISTER: ID_STRING; 
+
+      -- Give register declarations 
+      attribute REGISTER_ACCESS : string; 
+
+      -- Give boundary cell declarations 
+      type BSCAN_INST is (EXTEST, SAMPLE, INTEST); 
+      type CELL_TYPE is (INPUT, INTERNAL, CLOCK, OBSERVE_ONLY, 
+      CONTROL, CONTROLR, OUTPUT2, 
+      OUTPUT3, BIDIR_IN, BIDIR_OUT); 
+      type CAP_DATA is (PI, PO, UPD, CAP, X, ZERO, ONE); 
+      type CELL_DATA is record 
+      CT : CELL_TYPE; 
+      I : BSCAN_INST; 
+      CD : CAP_DATA; 
+      end record;
+      type CELL_INFO is array (positive range <>) of CELL_DATA; 
+
+      -- Boundary cell deferred constants (see package body) 
+      constant BC_0 : CELL_INFO; 
+      constant BC_1 : CELL_INFO; 
+      constant BC_2 : CELL_INFO; 
+      constant BC_3 : CELL_INFO; 
+      constant BC_4 : CELL_INFO; 
+      constant BC_5 : CELL_INFO; 
+      constant BC_6 : CELL_INFO; 
+      constant BC_7 : CELL_INFO; 
+      constant BC_8 : CELL_INFO; 
+      constant BC_9 : CELL_INFO; 
+      constant BC_10 : CELL_INFO;
+      -- Boundary register declarations 
+      attribute BOUNDARY_LENGTH : integer; 
+      attribute BOUNDARY_REGISTER : string; 
+
+      -- Miscellaneous 
+      attribute PORT_GROUPING : string; 
+      attribute RUNBIST_EXECUTION : string; 
+      attribute INTEST_EXECUTION : string; 
+      subtype BSDL_EXTENSION is string; 
+      attribute COMPLIANCE_PATTERNS : string; 
+      attribute DESIGN_WARNING : string; 
+
+      end STD_1149_1_2001; -- End of 1149.1-2001 Package 
+
+      package body STD_1149_1_2001 is -- Standard boundary cells 
+
+      -- Generic cell capturing minimum allowed data 
+      constant BC_0 : CELL_INFO := 
+      ((INPUT, EXTEST, PI), (OUTPUT2, EXTEST, X), 
+      (INPUT, SAMPLE, PI), (OUTPUT2, SAMPLE, PI), 
+      (INPUT, INTEST, X), (OUTPUT2, INTEST, PI), 
+      (OUTPUT3, EXTEST, X), (INTERNAL, EXTEST, X), 
+      (OUTPUT3, SAMPLE, PI), (INTERNAL, SAMPLE, X), 
+      (OUTPUT3, INTEST, PI), (INTERNAL, INTEST, X), 
+      (CONTROL, EXTEST, X), (CONTROLR, EXTEST, X), 
+      (CONTROL, SAMPLE, PI), (CONTROLR, SAMPLE, PI), 
+      (CONTROL, INTEST, PI), (CONTROLR, INTEST, PI), 
+      (BIDIR_IN,EXTEST, PI), (BIDIR_OUT, EXTEST, X ), 
+      (BIDIR_IN,SAMPLE, PI), (BIDIR_OUT, SAMPLE, PI), 
+      (BIDIR_IN,INTEST, X ), (BIDIR_OUT, INTEST, PI), 
+      (OBSERVE_ONLY, SAMPLE, PI), (OBSERVE_ONLY, EXTEST, PI) ); 
+
+      -- Description for f11-18, f11-30, f11-34c, f11-34d, f11-36c, f11-46d 
+      constant BC_1 : CELL_INFO := 
+      ((INPUT, EXTEST, PI), (OUTPUT2, EXTEST, PI), 
+      (INPUT, SAMPLE, PI), (OUTPUT2, SAMPLE, PI), 
+      (INPUT, INTEST, PI), (OUTPUT2, INTEST, PI), 
+      (OUTPUT3, EXTEST, PI), (INTERNAL, EXTEST, PI), 
+      (OUTPUT3, SAMPLE, PI), (INTERNAL, SAMPLE, PI), 
+      (OUTPUT3, INTEST, PI), (INTERNAL, INTEST, PI), 
+      (CONTROL, EXTEST, PI), (CONTROLR, EXTEST, PI), 
+      (CONTROL, SAMPLE, PI), (CONTROLR, SAMPLE, PI), 
+      (CONTROL, INTEST, PI), (CONTROLR, INTEST, PI) ); 
+
+      -- Description for f11-14, f11-31, f11-35c, f11-35d, f11-37c, 
+      -- f11-38c, f11-39(output) and f11-41c 
+      constant BC_2 : CELL_INFO := 
+      ((INPUT, EXTEST, PI), (OUTPUT2, EXTEST, UPD), 
+      (INPUT, SAMPLE, PI), (OUTPUT2, SAMPLE, PI), 
+      (INPUT, INTEST, UPD), -- Intest on output2 not supported 
+      (OUTPUT3, EXTEST, UPD), (INTERNAL, EXTEST, PI), 
+      (OUTPUT3, SAMPLE, PI), (INTERNAL, SAMPLE, PI), 
+      (OUTPUT3, INTEST, PI), (INTERNAL, INTEST, UPD), 
+      (CONTROL, EXTEST, UPD), (CONTROLR, EXTEST, UPD), 
+      (CONTROL, SAMPLE, PI), (CONTROLR, SAMPLE, PI), 
+      (CONTROL, INTEST, PI), (CONTROLR, INTEST, PI) ); 
+
+      -- Description for f11-15 
+      constant BC_3 : CELL_INFO := 
+      ((INPUT, EXTEST, PI), (INTERNAL, EXTEST, PI), 
+      (INPUT, SAMPLE, PI), (INTERNAL, SAMPLE, PI), 
+      (INPUT, INTEST, PI), (INTERNAL, INTEST, PI) ); 
+
+      -- Description for f11-16, f11-17, f11-39(input) 
+      constant BC_4 : CELL_INFO := 
+      ((INPUT, EXTEST, PI), -- Intest on input not supported 
+      (INPUT, SAMPLE, PI), 
+      (OBSERVE_ONLY, EXTEST, PI), 
+      (OBSERVE_ONLY, SAMPLE, PI), -- Intest on observe_only not supported 
+      (CLOCK, EXTEST, PI), (INTERNAL, EXTEST, PI), 
+      (CLOCK, SAMPLE, PI), (INTERNAL, SAMPLE, PI), 
+      (CLOCK, INTEST, PI), (INTERNAL, INTEST, PI) ); 
+
+      -- Description for f11-46c, a combined input/control 
+      constant BC_5 : CELL_INFO := 
+      ((INPUT, EXTEST, PI), (CONTROL, EXTEST, PI), 
+      (INPUT, SAMPLE, PI), (CONTROL, SAMPLE, PI), 
+      (INPUT, INTEST, UPD), (CONTROL, INTEST, UPD) ); 
+
+      -- Description for f11-38d, a reversible cell 
+      -- !! Not recommended; replaced by BC_7 below !! 
+      constant BC_6 : CELL_INFO := 
+      ((BIDIR_IN, EXTEST, PI), (BIDIR_OUT, EXTEST, UPD), 
+      (BIDIR_IN, SAMPLE, PI), (BIDIR_OUT, SAMPLE, PI), 
+      (BIDIR_IN, INTEST, UPD), (BIDIR_OUT, INTEST, PI) ); 
+
+      -- Description for f11-37d, self monitor reversible 
+      -- !! Recommended over cell BC_6 !! 
+      constant BC_7 : CELL_INFO := 
+      ((BIDIR_IN, EXTEST, PI), (BIDIR_OUT, EXTEST, PO), 
+      (BIDIR_IN, SAMPLE, PI), (BIDIR_OUT, SAMPLE, PI), 
+      (BIDIR_IN, INTEST, UPD), (BIDIR_OUT, INTEST, PI) ); 
+
+      -- Description for 11-40, f11-41d 
+      constant BC_8 : CELL_INFO := 
+      -- Intest on bidir not supported 
+      ((BIDIR_IN, EXTEST, PI), (BIDIR_OUT, EXTEST, PO), 
+      (BIDIR_IN, SAMPLE, PI), (BIDIR_OUT, SAMPLE, PO) ); 
+
+      -- Description for f11-32 
+      constant BC_9 : CELL_INFO := 
+      -- Self-monitoring output that supports Intest 
+      ((OUTPUT2, EXTEST, PO), (OUTPUT3, EXTEST, PO), 
+      (OUTPUT2, SAMPLE, PI), (OUTPUT3, SAMPLE, PI), 
+      (OUTPUT2, INTEST, PI), (OUTPUT3, INTEST, PI) ); 
+
+      -- Description for f11-33 
+      constant BC_10 : CELL_INFO := 
+      -- Self-monitoring output that does not support Intest 
+      ((OUTPUT2, EXTEST, PO), (OUTPUT3, EXTEST, PO), 
+      (OUTPUT2, SAMPLE, PO), (OUTPUT3, SAMPLE, PO) ); 
+
+      end STD_1149_1_2001; -- End of IEEE Std 1149.1-2001 Package Body
diff --git a/urjtag/data/freescale/PARTS b/urjtag/data/freescale/PARTS
index 2f5adc77..eeb7f690 100644
--- a/urjtag/data/freescale/PARTS
+++ b/urjtag/data/freescale/PARTS
@@ -27,5 +27,6 @@
 0001100011100100 mpc8378	mpc8378e
 0001100011100011 mpc8379	mpc8379
 0001100011100010 mpc8379	mpc8379e
+0110100011100010 p1020		p1020
 
 
diff --git a/urjtag/data/freescale/p1020/STEPPINGS b/urjtag/data/freescale/p1020/STEPPINGS
new file mode 100644
index 00000000..3d84fc65
--- /dev/null
+++ b/urjtag/data/freescale/p1020/STEPPINGS
@@ -0,0 +1,24 @@
+#
+# $Id: STEPPINGS
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+#
+# Documentation:
+# [1] Freescale, "Freescale MPC837x Users Guide"
+#
+
+# bits 31-28 of the Device Identification Register
+0000	p1020		0
diff --git a/urjtag/data/freescale/p1020/p1020 b/urjtag/data/freescale/p1020/p1020
new file mode 100644
index 00000000..9d893d86
--- /dev/null
+++ b/urjtag/data/freescale/p1020/p1020
@@ -0,0 +1,1232 @@
+signal XVSS(0)
+signal XVSS(1)
+signal XVSS(2)
+signal XVSS(3)
+signal XVSS(4)
+signal XVSS(5)
+signal XVSS(6)
+signal XVSS(7)
+signal XVDD(0)
+signal XVDD(1)
+signal XVDD(2)
+signal XVDD(3)
+signal XVDD(4)
+signal XVDD(5)
+signal VSS(0)
+signal VSS(1)
+signal VSS(2)
+signal VSS(3)
+signal VSS(4)
+signal VSS(5)
+signal VSS(6)
+signal VSS(7)
+signal VSS(8)
+signal VSS(9)
+signal VSS(10)
+signal VSS(11)
+signal VSS(12)
+signal VSS(13)
+signal VSS(14)
+signal VSS(15)
+signal VSS(16)
+signal VSS(17)
+signal VSS(18)
+signal VSS(19)
+signal VSS(20)
+signal VSS(21)
+signal VSS(22)
+signal VSS(23)
+signal VSS(24)
+signal VSS(25)
+signal VSS(26)
+signal VSS(27)
+signal VSS(28)
+signal VSS(29)
+signal VSS(30)
+signal VSS(31)
+signal VSS(32)
+signal VSS(33)
+signal VSS(34)
+signal VSS(35)
+signal VSS(36)
+signal VSS(37)
+signal VSS(38)
+signal VSS(39)
+signal VSS(40)
+signal VSS(41)
+signal VSS(42)
+signal VSS(43)
+signal VSS(44)
+signal VSS(45)
+signal VSS(46)
+signal VSS(47)
+signal VSS(48)
+signal VSS(49)
+signal VSS(50)
+signal VSS(51)
+signal VSS(52)
+signal VSS(53)
+signal VSS(54)
+signal VSS(55)
+signal VSS(56)
+signal VSS(57)
+signal VSS(58)
+signal VSS(59)
+signal VSS(60)
+signal VSS(61)
+signal VSS(62)
+signal VSS(63)
+signal VSS(64)
+signal VSS(65)
+signal VSS(66)
+signal VSS(67)
+signal VSS(68)
+signal VSS(69)
+signal VSS(70)
+signal VSS(71)
+signal VSS(72)
+signal VSS(73)
+signal VSS(74)
+signal VSS(75)
+signal VSS(76)
+signal VSS(77)
+signal VSS(78)
+signal VSS(79)
+signal VSS(80)
+signal VSS(81)
+signal VSS(82)
+signal VSS(83)
+signal VSS(84)
+signal VSS(85)
+signal VSS(86)
+signal VSS(87)
+signal VSS(88)
+signal VSS(89)
+signal VSS(90)
+signal VSS(91)
+signal VSS(92)
+signal VSS(93)
+signal VSS(94)
+signal VSS(95)
+signal VSS(96)
+signal VSS(97)
+signal VSS(98)
+signal VSS(99)
+signal VSS(100)
+signal VSS(101)
+signal VSS(102)
+signal VSS(103)
+signal VSS(104)
+signal VSS(105)
+signal VSS(106)
+signal VSS(107)
+signal VSS(108)
+signal VSS(109)
+signal VSS(110)
+signal VSS(111)
+signal VSS(112)
+signal VSS(113)
+signal VSS(114)
+signal VSS(115)
+signal VSS(116)
+signal VSS(117)
+signal VSS(118)
+signal VSS(119)
+signal VSS(120)
+signal VSS(121)
+signal VSS(122)
+signal VSS(123)
+signal VSS(124)
+signal VSS(125)
+signal VSS(126)
+signal VSS(127)
+signal VSS(128)
+signal VSS(129)
+signal VSS(130)
+signal VSS(131)
+signal VSS(132)
+signal VSS(133)
+signal VSS(134)
+signal VSS(135)
+signal VSS(136)
+signal VSS(137)
+signal VSS(138)
+signal VSS(139)
+signal VSS(140)
+signal VSS(141)
+signal VSS(142)
+signal VSS(143)
+signal VSS(144)
+signal VSS(145)
+signal VDDC(0)
+signal VDDC(1)
+signal VDDC(2)
+signal VDDC(3)
+signal VDDC(4)
+signal VDDC(5)
+signal VDDC(6)
+signal VDDC(7)
+signal VDDC(8)
+signal VDDC(9)
+signal VDDC(10)
+signal VDDC(11)
+signal VDDC(12)
+signal VDDC(13)
+signal VDDC(14)
+signal VDDC(15)
+signal VDDC(16)
+signal VDDC(17)
+signal VDDC(18)
+signal VDDC(19)
+signal VDDC(20)
+signal VDDC(21)
+signal VDDC(22)
+signal VDDC(23)
+signal VDDC(24)
+signal VDDC(25)
+signal VDDC(26)
+signal VDD(0)
+signal VDD(1)
+signal VDD(2)
+signal VDD(3)
+signal VDD(4)
+signal VDD(5)
+signal VDD(6)
+signal TEMP_CATHODE
+signal TEMP_ANODE
+signal SVSS(0)
+signal SVSS(1)
+signal SVSS(2)
+signal SVSS(3)
+signal SVSS(4)
+signal SVSS(5)
+signal SVSS(6)
+signal SVSS(7)
+signal SVSS(8)
+signal SVSS(9)
+signal SVSS(10)
+signal SVDD(0)
+signal SVDD(1)
+signal SVDD(2)
+signal SVDD(3)
+signal SVDD(4)
+signal SVDD(5)
+signal SENSEVSS
+signal SENSEVDD_RSVD
+signal SENSEVDD
+signal SD_PLL_TPD
+signal SD_PLL_TPA
+signal SD_IMP_CAL_TX
+signal SD_IMP_CAL_RX
+signal SDAVSS
+signal SDAVDD
+signal POVDD
+signal OVDD(0)
+signal OVDD(1)
+signal OVDD(2)
+signal OVDD(3)
+signal OVDD(4)
+signal OVDD(5)
+signal NC(0)
+signal NC(1)
+signal NC(2)
+signal NC(3)
+signal NC(4)
+signal NC(5)
+signal NC(6)
+signal NC(7)
+signal NC(8)
+signal NC(9)
+signal NC(10)
+signal NC(11)
+signal NC(12)
+signal NC(13)
+signal NC(14)
+signal NC(15)
+signal NC(16)
+signal NC(17)
+signal NC(18)
+signal NC(19)
+signal NC(20)
+signal NC(21)
+signal NC(22)
+signal NC(23)
+signal NC(24)
+signal NC(25)
+signal NC(26)
+signal NC(27)
+signal NC(28)
+signal NC(29)
+signal NC(30)
+signal NC(31)
+signal NC(32)
+signal NC(33)
+signal NC(34)
+signal NC(35)
+signal NC(36)
+signal NC(37)
+signal NC(38)
+signal NC(39)
+signal NC(40)
+signal NC(41)
+signal NC(42)
+signal NC(43)
+signal NC(44)
+signal NC(45)
+signal NC(46)
+signal NC(47)
+signal NC(48)
+signal NC(49)
+signal NC(50)
+signal NC(51)
+signal NC(52)
+signal NC(53)
+signal NC(54)
+signal NC(55)
+signal NC(56)
+signal NC(57)
+signal NC(58)
+signal NC(59)
+signal NC(60)
+signal NC(61)
+signal NC(62)
+signal NC(63)
+signal NC(64)
+signal NC(65)
+signal NC(66)
+signal NC(67)
+signal NC(68)
+signal NC(69)
+signal NC(70)
+signal NC(71)
+signal NC(72)
+signal NC(73)
+signal NC(74)
+signal NC(75)
+signal NC(76)
+signal NC(77)
+signal NC(78)
+signal NC(79)
+signal NC(80)
+signal MVREF
+signal LVDD_VSEL
+signal FA_VDD
+signal FA_ANALOG_PIN
+signal FA_ANALOG_G_V
+signal CVDD_VSEL1
+signal CVDD_VSEL0
+signal BVDD_VSEL1
+signal BVDD_VSEL0
+signal AVDD_PLAT
+signal AVDD_DDR
+signal AVDD_CORE1
+signal AVDD_CORE0
+signal USB_STP
+signal USB_PWRFAULT
+signal USB_NXT
+signal USB_DIR
+signal USB_D(0)
+signal USB_D(1)
+signal USB_D(2)
+signal USB_D(3)
+signal USB_D(4)
+signal USB_D(5)
+signal USB_D(6)
+signal USB_D(7)
+signal USB_CLK
+signal UDE1_B
+signal UDE0_B
+signal UART_SOUT(0)
+signal UART_SOUT(1)
+signal UART_SIN01
+signal UART_SIN00
+signal UART_RTS_B(0)
+signal UART_RTS_B(1)
+signal UART_CTS_B01
+signal UART_CTS_B00
+signal TSEC_1588_TRIG_IN2
+signal TSEC_1588_TRIG_IN1
+signal TSEC_1588_PULSE_OUT2
+signal TSEC_1588_PULSE_OUT1
+signal TSEC_1588_CLK_OUT
+signal TSEC_1588_CLK_IN
+signal TSEC_1588_ALARM_OUT2
+signal TSEC_1588_ALARM_OUT1
+signal TSEC2_TX_ER
+signal TSEC2_TXD01
+signal TSEC2_TXD(4)
+signal TSEC2_TXD(5)
+signal TSEC2_CRS
+signal TSEC2_COL
+signal TSEC1_TX_ER
+signal TSEC1_TX_EN
+signal TSEC1_TX_CLK
+signal TSEC1_TXD(0)
+signal TSEC1_TXD(1)
+signal TSEC1_TXD(2)
+signal TSEC1_TXD(3)
+signal TSEC1_TXD(4)
+signal TSEC1_TXD(5)
+signal TSEC1_TXD(6)
+signal TSEC1_TXD(7)
+signal TSEC1_RX_ER
+signal TSEC1_RX_DV
+signal TSEC1_RX_CLK
+signal TSEC1_RXD(0)
+signal TSEC1_RXD(1)
+signal TSEC1_RXD(2)
+signal TSEC1_RXD(3)
+signal TSEC1_RXD(4)
+signal TSEC1_RXD(5)
+signal TSEC1_RXD(6)
+signal TSEC1_RXD(7)
+signal TSEC1_GTX_CLK
+signal TSEC1_CRS
+signal TSEC1_COL
+signal TRST_B
+signal TRIG_OUT
+signal TRIG_IN
+signal TMS
+signal TEST_SEL_B
+signal TDO
+signal TDI
+signal TCK
+signal SYSCLK
+signal SRESET_B
+signal SPI_MOSI
+signal SPI_MISO
+signal SPI_CS3_B
+signal SPI_CS2_B
+signal SPI_CS1_B
+signal SPI_CS0_B
+signal SPI_CLK
+signal SD_TX_B(0)
+signal SD_TX_B(1)
+signal SD_TX_B(2)
+signal SD_TX_B(3)
+signal SD_TX(0)
+signal SD_TX(1)
+signal SD_TX(2)
+signal SD_TX(3)
+signal SD_RX_B(0)
+signal SD_RX_B(1)
+signal SD_RX_B(2)
+signal SD_RX_B(3)
+signal SD_RX(0)
+signal SD_RX(1)
+signal SD_RX(2)
+signal SD_RX(3)
+signal SD_REF_CLK_B
+signal SD_REF_CLK
+signal SDHC_DAT(0)
+signal SDHC_DAT(1)
+signal SDHC_DAT(2)
+signal SDHC_DAT(3)
+signal SDHC_CMD
+signal SDHC_CLK
+signal SCAN_MODE_B
+signal RTC
+signal READY_P1
+signal MWE_B
+signal MSRCID(0)
+signal MSRCID(1)
+signal MSRCID(2)
+signal MSRCID(3)
+signal MSRCID(4)
+signal MRAS_B
+signal MODT(0)
+signal MODT(1)
+signal MECC(0)
+signal MECC(1)
+signal MECC(2)
+signal MECC(3)
+signal MECC(4)
+signal MECC(5)
+signal MECC(6)
+signal MECC(7)
+signal MDVAL
+signal MDQS_B08
+signal MDQS_B(0)
+signal MDQS_B(1)
+signal MDQS_B(2)
+signal MDQS_B(3)
+signal MDQS08
+signal MDQS(0)
+signal MDQS(1)
+signal MDQS(2)
+signal MDQS(3)
+signal MDQ(0)
+signal MDQ(1)
+signal MDQ(2)
+signal MDQ(3)
+signal MDQ(4)
+signal MDQ(5)
+signal MDQ(6)
+signal MDQ(7)
+signal MDQ(8)
+signal MDQ(9)
+signal MDQ(10)
+signal MDQ(11)
+signal MDQ(12)
+signal MDQ(13)
+signal MDQ(14)
+signal MDQ(15)
+signal MDQ(16)
+signal MDQ(17)
+signal MDQ(18)
+signal MDQ(19)
+signal MDQ(20)
+signal MDQ(21)
+signal MDQ(22)
+signal MDQ(23)
+signal MDQ(24)
+signal MDQ(25)
+signal MDQ(26)
+signal MDQ(27)
+signal MDQ(28)
+signal MDQ(29)
+signal MDQ(30)
+signal MDQ(31)
+signal MDM08
+signal MDM(0)
+signal MDM(1)
+signal MDM(2)
+signal MDM(3)
+signal MDIC(0)
+signal MDIC(1)
+signal MCS_B(0)
+signal MCS_B(1)
+signal MCP1_B
+signal MCP0_B
+signal MCK_B(0)
+signal MCK_B(1)
+signal MCK_B(2)
+signal MCK_B(3)
+signal MCKE(0)
+signal MCKE(1)
+signal MCK(0)
+signal MCK(1)
+signal MCK(2)
+signal MCK(3)
+signal MCAS_B
+signal MBA(0)
+signal MBA(1)
+signal MBA(2)
+signal MAPAR_OUT
+signal MAPAR_ERR_B
+signal MA(0)
+signal MA(1)
+signal MA(2)
+signal MA(3)
+signal MA(4)
+signal MA(5)
+signal MA(6)
+signal MA(7)
+signal MA(8)
+signal MA(9)
+signal MA(10)
+signal MA(11)
+signal MA(12)
+signal MA(13)
+signal MA(14)
+signal MA(15)
+signal LWE_B(0)
+signal LWE_B(1)
+signal LSYNC_OUT
+signal LSYNC_IN
+signal LGPL5
+signal LGPL4
+signal LGPL3
+signal LGPL2
+signal LGPL1
+signal LGPL0
+signal LDP(0)
+signal LDP(1)
+signal LCS_B(0)
+signal LCS_B(1)
+signal LCS_B(2)
+signal LCS_B(3)
+signal LCS_B(4)
+signal LCS_B(5)
+signal LCS_B(6)
+signal LCS_B(7)
+signal LCLK(0)
+signal LCLK(1)
+signal LBCTL
+signal LALE
+signal LAD(0)
+signal LAD(1)
+signal LAD(2)
+signal LAD(3)
+signal LAD(4)
+signal LAD(5)
+signal LAD(6)
+signal LAD(7)
+signal LAD(8)
+signal LAD(9)
+signal LAD(10)
+signal LAD(11)
+signal LAD(12)
+signal LAD(13)
+signal LAD(14)
+signal LAD(15)
+signal LA(16)
+signal LA(17)
+signal LA(18)
+signal LA(19)
+signal LA(20)
+signal LA(21)
+signal LA(22)
+signal LA(23)
+signal LA(24)
+signal LA(25)
+signal LA(26)
+signal LA(27)
+signal LA(28)
+signal LA(29)
+signal LA(30)
+signal LA(31)
+signal IRQ_OUT_B
+signal IRQ06
+signal IRQ(0)
+signal IRQ(1)
+signal IRQ(2)
+signal IRQ(3)
+signal IRQ(4)
+signal IRQ(5)
+signal IIC2_SDA
+signal IIC2_SCL
+signal IIC1_SDA
+signal IIC1_SCL
+signal HRESET_REQ_B
+signal HRESET_B
+signal GPIO(0)
+signal GPIO(1)
+signal GPIO(2)
+signal GPIO(3)
+signal GPIO(4)
+signal GPIO(5)
+signal GPIO(6)
+signal GPIO(7)
+signal GPIO(8)
+signal GPIO(9)
+signal GPIO(10)
+signal GPIO(11)
+signal GPIO(12)
+signal GPIO(13)
+signal GPIO(14)
+signal GPIO(15)
+signal EC_MDIO
+signal EC_MDC
+signal EC_GTX_CLK125
+signal DMA2_DREQ_B(0)
+signal DMA2_DDONE_B(0)
+signal DMA2_DACK_B(0)
+signal DMA1_DREQ_B(0)
+signal DMA1_DDONE_B(0)
+signal DMA1_DACK_B(0)
+signal DDRCLK
+signal CLK_OUT
+signal CKSTP_OUT1_B
+signal CKSTP_OUT0_B
+signal CKSTP_IN1_B
+signal CKSTP_IN0_B
+signal ASLEEP
+instruction length 8
+register DIR 32
+register BSR 587
+register BYPASS 1
+instruction PRELOAD 11110000 BSR
+instruction IDCODE 11110011 DIR
+instruction HIGHZ 11110010 BYPASS
+instruction EXTEST 00000000 BSR
+instruction CLAMP 11110001 BYPASS
+instruction SAMPLE/PRELOAD 11110000 BSR
+instruction BYPASS 11111111 BYPASS
+bit 0 C 0 *
+bit 1 B ? EC_MDC 0 0 Z
+bit 2 C 0 *
+bit 3 B ? EC_MDIO 2 0 Z
+bit 4 C 0 *
+bit 5 B ? TSEC_1588_ALARM_OUT1 4 0 Z
+bit 6 O ? *
+bit 7 I ? TSEC_1588_TRIG_IN1
+bit 8 O ? *
+bit 9 I ? TSEC_1588_TRIG_IN2
+bit 10 C 0 *
+bit 11 B ? TSEC_1588_PULSE_OUT2 10 0 Z
+bit 12 O ? *
+bit 13 I ? TSEC_1588_CLK_IN
+bit 14 C 0 *
+bit 15 B ? TSEC_1588_PULSE_OUT1 14 0 Z
+bit 16 C 0 *
+bit 17 B ? TSEC_1588_CLK_OUT 16 0 Z
+bit 18 C 0 *
+bit 19 B ? TSEC1_TXD(4) 18 0 Z
+bit 20 O ? *
+bit 21 I ? TSEC1_RXD(1)
+bit 22 O ? *
+bit 23 I ? TSEC1_RXD(6)
+bit 24 O ? *
+bit 25 I ? TSEC1_RXD(5)
+bit 26 O ? *
+bit 27 I ? TSEC1_RX_ER
+bit 28 C 0 *
+bit 29 B ? TSEC1_TXD(7) 28 0 Z
+bit 30 C 0 *
+bit 31 B ? TSEC1_TX_ER 30 0 Z
+bit 32 O ? *
+bit 33 I ? TSEC1_TX_CLK
+bit 34 O ? *
+bit 35 I ? TSEC1_RXD(7)
+bit 36 C 0 *
+bit 37 B ? TSEC1_TX_EN 36 0 Z
+bit 38 O ? *
+bit 39 I ? TSEC1_RXD(2)
+bit 40 C 0 *
+bit 41 B ? TSEC1_TXD(6) 40 0 Z
+bit 42 O ? *
+bit 43 I ? EC_GTX_CLK125
+bit 44 C 0 *
+bit 45 B ? TSEC1_TXD(3) 44 0 Z
+bit 46 O ? *
+bit 47 I ? TSEC1_RXD(0)
+bit 48 C 0 *
+bit 49 B ? TSEC1_TXD(5) 48 0 Z
+bit 50 O ? *
+bit 51 I ? TSEC1_RX_DV
+bit 52 O ? *
+bit 53 I ? TSEC1_COL
+bit 54 C 0 *
+bit 55 B ? TSEC1_GTX_CLK 54 0 Z
+bit 56 O ? *
+bit 57 I ? TSEC1_RXD(4)
+bit 58 C 0 *
+bit 59 B ? TSEC1_CRS 58 0 Z
+bit 60 O ? *
+bit 61 I ? TSEC1_RXD(3)
+bit 62 C 0 *
+bit 63 B ? TSEC1_TXD(0) 62 0 Z
+bit 64 C 0 *
+bit 65 B ? TSEC1_TXD(1) 64 0 Z
+bit 66 O ? *
+bit 67 I ? TSEC1_RX_CLK
+bit 68 C 0 *
+bit 69 B ? TSEC1_TXD(2) 68 0 Z
+bit 70 C 0 *
+bit 71 B ? TSEC2_TXD(5) 70 0 Z
+bit 72 C 0 *
+bit 73 B ? TSEC2_TXD(4) 72 0 Z
+bit 74 O ? *
+bit 75 I ? TSEC2_CRS
+bit 76 C 0 *
+bit 77 B ? TSEC2_TXD01 76 0 Z
+bit 78 O ? *
+bit 79 I ? TSEC2_COL
+bit 80 C 0 *
+bit 81 B ? TSEC2_TX_ER 80 0 Z
+bit 82 O ? *
+bit 83 I ? TRIG_IN
+bit 84 O ? *
+bit 85 I ? MCP0_B
+bit 86 O ? *
+bit 87 I ? CKSTP_IN1_B
+bit 88 C 0 *
+bit 89 O ? CKSTP_OUT1_B 88 0 Z
+bit 90 O ? *
+bit 91 I ? HRESET_B
+bit 92 O ? *
+bit 93 I ? SRESET_B
+bit 94 C 0 *
+bit 95 B ? READY_P1 94 0 Z
+bit 96 O ? *
+bit 97 I ? CKSTP_IN0_B
+bit 98 C 0 *
+bit 99 O ? CKSTP_OUT0_B 98 0 Z
+bit 100 C 0 *
+bit 101 B ? DMA1_DREQ_B(0) 100 0 Z
+bit 102 C 0 *
+bit 103 B ? DMA2_DDONE_B(0) 102 0 Z
+bit 104 C 0 *
+bit 105 B ? DMA2_DREQ_B(0) 104 0 Z
+bit 106 O ? *
+bit 107 I ? SYSCLK
+bit 108 C 0 *
+bit 109 B ? ASLEEP 108 0 Z
+bit 110 C 0 *
+bit 111 O ? CLK_OUT 110 0 Z
+bit 112 C 0 *
+bit 113 B ? DMA1_DDONE_B(0) 112 0 Z
+bit 114 C 0 *
+bit 115 B ? HRESET_REQ_B 114 0 Z
+bit 116 C 0 *
+bit 117 B ? TRIG_OUT 116 0 Z
+bit 118 C 0 *
+bit 119 B ? GPIO(4) 118 0 Z
+bit 120 C 0 *
+bit 121 B ? DMA1_DACK_B(0) 120 0 Z
+bit 122 C 0 *
+bit 123 B ? DMA2_DACK_B(0) 122 0 Z
+bit 124 C 0 *
+bit 125 B ? GPIO(0) 124 0 Z
+bit 126 C 0 *
+bit 127 B ? GPIO(5) 126 0 Z
+bit 128 C 0 *
+bit 129 B ? MSRCID(1) 128 0 Z
+bit 130 C 0 *
+bit 131 B ? GPIO(6) 130 0 Z
+bit 132 C 0 *
+bit 133 B ? GPIO(2) 132 0 Z
+bit 134 C 0 *
+bit 135 B ? GPIO(1) 134 0 Z
+bit 136 C 0 *
+bit 137 B ? GPIO(7) 136 0 Z
+bit 138 C 0 *
+bit 139 B ? MSRCID(2) 138 0 Z
+bit 140 C 0 *
+bit 141 B ? MSRCID(0) 140 0 Z
+bit 142 C 0 *
+bit 143 B ? MSRCID(3) 142 0 Z
+bit 144 O ? *
+bit 145 I ? IRQ(3)
+bit 146 C 0 *
+bit 147 B ? GPIO(3) 146 0 Z
+bit 148 C 0 *
+bit 149 B ? MSRCID(4) 148 0 Z
+bit 150 C 0 *
+bit 151 O ? IRQ_OUT_B 150 0 Z
+bit 152 C 0 *
+bit 153 B ? MDVAL 152 0 Z
+bit 154 O ? *
+bit 155 I ? MCP1_B
+bit 156 O ? *
+bit 157 I ? IRQ(5)
+bit 158 O ? *
+bit 159 I ? IRQ(4)
+bit 160 O ? *
+bit 161 I ? IRQ(1)
+bit 162 C 0 *
+bit 163 B ? IRQ06 162 0 Z
+bit 164 O ? *
+bit 165 I ? IRQ(0)
+bit 166 O ? *
+bit 167 I ? IRQ(2)
+bit 168 O ? *
+bit 169 I ? RTC
+bit 170 O ? *
+bit 171 I ? UDE1_B
+bit 172 O ? *
+bit 173 I ? UDE0_B
+bit 174 C 0 *
+bit 175 B ? UART_SOUT(1) 174 0 Z
+bit 176 C 0 *
+bit 177 B ? UART_RTS_B(1) 176 0 Z
+bit 178 C 0 *
+bit 179 B ? UART_SOUT(0) 178 0 Z
+bit 180 C 0 *
+bit 181 B ? UART_CTS_B01 180 0 Z
+bit 182 O ? *
+bit 183 I ? UART_CTS_B00
+bit 184 C 0 *
+bit 185 B ? UART_RTS_B(0) 184 0 Z
+bit 186 O ? *
+bit 187 I ? UART_SIN00
+bit 188 C 0 *
+bit 189 B ? UART_SIN01 188 0 Z
+bit 190 C 0 *
+bit 191 B ? IIC2_SCL 190 0 Z
+bit 192 C 0 *
+bit 193 B ? IIC2_SDA 192 0 Z
+bit 194 C 0 *
+bit 195 B ? IIC1_SDA 194 0 Z
+bit 196 C 0 *
+bit 197 B ? IIC1_SCL 196 0 Z
+bit 198 C 0 *
+bit 199 B ? SDHC_DAT(2) 198 0 Z
+bit 200 C 0 *
+bit 201 B ? SDHC_DAT(3) 200 0 Z
+bit 202 C 0 *
+bit 203 B ? SDHC_DAT(0) 202 0 Z
+bit 204 C 0 *
+bit 205 B ? SDHC_CLK 204 0 Z
+bit 206 C 0 *
+bit 207 B ? SDHC_DAT(1) 206 0 Z
+bit 208 C 0 *
+bit 209 B ? SDHC_CMD 208 0 Z
+bit 210 O ? *
+bit 211 I ? SPI_MISO
+bit 212 C 0 *
+bit 213 B ? SPI_CS2_B 212 0 Z
+bit 214 C 0 *
+bit 215 B ? SPI_CS1_B 214 0 Z
+bit 216 C 0 *
+bit 217 B ? SPI_CS3_B 216 0 Z
+bit 218 C 0 *
+bit 219 B ? SPI_CS0_B 218 0 Z
+bit 220 C 0 *
+bit 221 B ? SPI_MOSI 220 0 Z
+bit 222 C 0 *
+bit 223 B ? SPI_CLK 222 0 Z
+bit 224 O ? *
+bit 225 I ? USB_CLK
+bit 226 C 0 *
+bit 227 B ? USB_PWRFAULT 226 0 Z
+bit 228 C 0 *
+bit 229 B ? USB_STP 228 0 Z
+bit 230 C 0 *
+bit 231 B ? USB_D(7) 230 0 Z
+bit 232 C 0 *
+bit 233 B ? USB_D(3) 232 0 Z
+bit 234 C 0 *
+bit 235 B ? USB_D(0) 234 0 Z
+bit 236 C 0 *
+bit 237 B ? USB_D(5) 236 0 Z
+bit 238 C 0 *
+bit 239 B ? USB_DIR 238 0 Z
+bit 240 C 0 *
+bit 241 B ? USB_D(6) 240 0 Z
+bit 242 C 0 *
+bit 243 B ? USB_D(2) 242 0 Z
+bit 244 C 0 *
+bit 245 B ? USB_NXT 244 0 Z
+bit 246 C 0 *
+bit 247 B ? USB_D(1) 246 0 Z
+bit 248 C 0 *
+bit 249 B ? USB_D(4) 248 0 Z
+bit 250 C 0 *
+bit 251 B ? GPIO(15) 250 0 Z
+bit 252 C 0 *
+bit 253 B ? GPIO(14) 252 0 Z
+bit 254 C 0 *
+bit 255 B ? GPIO(13) 254 0 Z
+bit 256 C 0 *
+bit 257 B ? GPIO(11) 256 0 Z
+bit 258 C 0 *
+bit 259 B ? GPIO(10) 258 0 Z
+bit 260 C 0 *
+bit 261 B ? GPIO(12) 260 0 Z
+bit 262 C 0 *
+bit 263 B ? GPIO(8) 262 0 Z
+bit 264 C 0 *
+bit 265 B ? GPIO(9) 264 0 Z
+bit 266 C 0 *
+bit 267 B ? LA(19) 266 0 Z
+bit 268 C 0 *
+bit 269 B ? LA(31) 268 0 Z
+bit 270 C 0 *
+bit 271 B ? LA(23) 270 0 Z
+bit 272 C 0 *
+bit 273 B ? LA(30) 272 0 Z
+bit 274 C 0 *
+bit 275 B ? LA(29) 274 0 Z
+bit 276 C 0 *
+bit 277 B ? LA(24) 276 0 Z
+bit 278 C 0 *
+bit 279 B ? LA(28) 278 0 Z
+bit 280 C 0 *
+bit 281 B ? LA(26) 280 0 Z
+bit 282 C 0 *
+bit 283 B ? LAD(8) 282 0 Z
+bit 284 C 0 *
+bit 285 B ? LA(25) 284 0 Z
+bit 286 C 0 *
+bit 287 B ? LA(17) 286 0 Z
+bit 288 C 0 *
+bit 289 B ? LCS_B(3) 288 0 Z
+bit 290 C 0 *
+bit 291 B ? LA(27) 290 0 Z
+bit 292 C 0 *
+bit 293 B ? LA(16) 292 0 Z
+bit 294 C 0 *
+bit 295 B ? LAD(1) 294 0 Z
+bit 296 C 0 *
+bit 297 B ? LA(18) 296 0 Z
+bit 298 C 0 *
+bit 299 B ? LA(21) 298 0 Z
+bit 300 C 0 *
+bit 301 B ? LCS_B(0) 300 0 Z
+bit 302 C 0 *
+bit 303 B ? LAD(3) 302 0 Z
+bit 304 C 0 *
+bit 305 B ? LGPL2 304 0 Z
+bit 306 C 0 *
+bit 307 B ? LCS_B(2) 306 0 Z
+bit 308 C 0 *
+bit 309 B ? LAD(7) 308 0 Z
+bit 310 C 0 *
+bit 311 B ? LBCTL 310 0 Z
+bit 312 C 0 *
+bit 313 B ? LAD(4) 312 0 Z
+bit 314 C 0 *
+bit 315 B ? LDP(0) 314 0 Z
+bit 316 C 0 *
+bit 317 B ? LGPL5 316 0 Z
+bit 318 C 0 *
+bit 319 B ? LSYNC_OUT 318 0 Z
+bit 320 C 0 *
+bit 321 B ? LDP(1) 320 0 Z
+bit 322 C 0 *
+bit 323 B ? LAD(12) 322 0 Z
+bit 324 C 0 *
+bit 325 B ? LAD(2) 324 0 Z
+bit 326 C 0 *
+bit 327 B ? LSYNC_IN 326 0 Z
+bit 328 C 0 *
+bit 329 B ? LAD(0) 328 0 Z
+bit 330 C 0 *
+bit 331 B ? LAD(5) 330 0 Z
+bit 332 C 0 *
+bit 333 B ? LALE 332 0 Z
+bit 334 C 0 *
+bit 335 B ? LAD(6) 334 0 Z
+bit 336 C 0 *
+bit 337 B ? LCS_B(7) 336 0 Z
+bit 338 C 0 *
+bit 339 B ? LAD(10) 338 0 Z
+bit 340 C 0 *
+bit 341 B ? LAD(14) 340 0 Z
+bit 342 C 0 *
+bit 343 B ? LAD(15) 342 0 Z
+bit 344 C 0 *
+bit 345 B ? LCS_B(5) 344 0 Z
+bit 346 C 0 *
+bit 347 B ? LCLK(0) 346 0 Z
+bit 348 C 0 *
+bit 349 B ? LCLK(1) 348 0 Z
+bit 350 C 0 *
+bit 351 B ? LAD(11) 350 0 Z
+bit 352 C 0 *
+bit 353 B ? LCS_B(6) 352 0 Z
+bit 354 C 0 *
+bit 355 B ? LGPL1 354 0 Z
+bit 356 C 0 *
+bit 357 B ? LGPL4 356 0 Z
+bit 358 C 0 *
+bit 359 B ? LA(20) 358 0 Z
+bit 360 C 0 *
+bit 361 B ? LCS_B(1) 360 0 Z
+bit 362 C 0 *
+bit 363 B ? LWE_B(0) 362 0 Z
+bit 364 C 0 *
+bit 365 B ? LGPL0 364 0 Z
+bit 366 C 0 *
+bit 367 B ? LCS_B(4) 366 0 Z
+bit 368 C 0 *
+bit 369 B ? LWE_B(1) 368 0 Z
+bit 370 C 0 *
+bit 371 B ? LA(22) 370 0 Z
+bit 372 C 0 *
+bit 373 B ? LAD(13) 372 0 Z
+bit 374 C 0 *
+bit 375 B ? LAD(9) 374 0 Z
+bit 376 C 0 *
+bit 377 B ? LGPL3 376 0 Z
+bit 378 C 0 *
+bit 379 B ? MDIC(1) 378 0 Z
+bit 380 C 0 *
+bit 381 B ? MDIC(0) 380 0 Z
+bit 382 O ? *
+bit 383 O ? *
+bit 384 C 0 *
+bit 385 O ? MCK(2) 384 0 Z
+bit 386 C 0 *
+bit 387 O ? MODT(1) 386 0 Z
+bit 388 C 0 *
+bit 389 B ? MA(13) 388 0 Z
+bit 390 C 0 *
+bit 391 O ? MCS_B(1) 390 0 Z
+bit 392 C 0 *
+bit 393 O ? MCS_B(0) 392 0 Z
+bit 394 C 0 *
+bit 395 B ? MCAS_B 394 0 Z
+bit 396 C 0 *
+bit 397 O ? MODT(0) 396 0 Z
+bit 398 C 0 *
+bit 399 O ? MWE_B 398 0 Z
+bit 400 C 0 *
+bit 401 B ? MA(10) 400 0 Z
+bit 402 C 0 *
+bit 403 O ? MRAS_B 402 0 Z
+bit 404 C 0 *
+bit 405 B ? MA(0) 404 0 Z
+bit 406 C 0 *
+bit 407 B ? MBA(0) 406 0 Z
+bit 408 C 0 *
+bit 409 B ? MBA(1) 408 0 Z
+bit 410 C 0 *
+bit 411 B ? MA(2) 410 0 Z
+bit 412 C 0 *
+bit 413 B ? MA(4) 412 0 Z
+bit 414 C 0 *
+bit 415 B ? MA(1) 414 0 Z
+bit 416 C 0 *
+bit 417 B ? MA(5) 416 0 Z
+bit 418 C 0 *
+bit 419 B ? MA(6) 418 0 Z
+bit 420 C 0 *
+bit 421 B ? MA(9) 420 0 Z
+bit 422 C 0 *
+bit 423 B ? MA(8) 422 0 Z
+bit 424 C 0 *
+bit 425 B ? MAPAR_OUT 424 0 Z
+bit 426 O ? *
+bit 427 I ? MAPAR_ERR_B
+bit 428 O ? *
+bit 429 O ? *
+bit 430 C 0 *
+bit 431 O ? MCK(3) 430 0 Z
+bit 432 O ? *
+bit 433 O ? *
+bit 434 C 0 *
+bit 435 O ? MCK(0) 434 0 Z
+bit 436 C 0 *
+bit 437 B ? MA(12) 436 0 Z
+bit 438 C 0 *
+bit 439 B ? MA(3) 438 0 Z
+bit 440 C 0 *
+bit 441 B ? MA(7) 440 0 Z
+bit 442 C 0 *
+bit 443 B ? MBA(2) 442 0 Z
+bit 444 C 0 *
+bit 445 B ? MA(14) 444 0 Z
+bit 446 C 0 *
+bit 447 B ? MA(11) 446 0 Z
+bit 448 C 0 *
+bit 449 B ? MA(15) 448 0 Z
+bit 450 C 0 *
+bit 451 O ? MCKE(1) 450 0 Z
+bit 452 C 0 *
+bit 453 O ? MCKE(0) 452 0 Z
+bit 454 C 0 *
+bit 455 B ? MECC(2) 454 0 Z
+bit 456 C 0 *
+bit 457 B ? MECC(7) 456 0 Z
+bit 458 C 0 *
+bit 459 B ? MECC(6) 458 0 Z
+bit 460 C 0 *
+bit 461 B ? MDQS08 460 0 Z
+bit 462 O ? *
+bit 463 O ? *
+bit 464 C 0 *
+bit 465 B ? MDM08 464 0 Z
+bit 466 C 0 *
+bit 467 B ? MECC(3) 466 0 Z
+bit 468 C 0 *
+bit 469 B ? MECC(1) 468 0 Z
+bit 470 C 0 *
+bit 471 B ? MECC(0) 470 0 Z
+bit 472 C 0 *
+bit 473 B ? MECC(4) 472 0 Z
+bit 474 C 0 *
+bit 475 B ? MECC(5) 474 0 Z
+bit 476 C 0 *
+bit 477 B ? MDQ(27) 476 0 Z
+bit 478 C 0 *
+bit 479 B ? MDM(3) 478 0 Z
+bit 480 C 0 *
+bit 481 B ? MDQ(26) 480 0 Z
+bit 482 C 0 *
+bit 483 B ? MDQ(31) 482 0 Z
+bit 484 C 0 *
+bit 485 B ? MDQS(3) 484 0 Z
+bit 486 O ? *
+bit 487 O ? *
+bit 488 C 0 *
+bit 489 B ? MDQ(25) 488 0 Z
+bit 490 C 0 *
+bit 491 B ? MDQ(28) 490 0 Z
+bit 492 C 0 *
+bit 493 B ? MDQ(30) 492 0 Z
+bit 494 C 0 *
+bit 495 B ? MDQ(29) 494 0 Z
+bit 496 C 0 *
+bit 497 B ? MDQ(24) 496 0 Z
+bit 498 C 0 *
+bit 499 B ? MDQ(18) 498 0 Z
+bit 500 C 0 *
+bit 501 B ? MDQ(19) 500 0 Z
+bit 502 C 0 *
+bit 503 B ? MDQ(23) 502 0 Z
+bit 504 C 0 *
+bit 505 B ? MDQ(22) 504 0 Z
+bit 506 O ? *
+bit 507 O ? *
+bit 508 C 0 *
+bit 509 B ? MDQS(2) 508 0 Z
+bit 510 C 0 *
+bit 511 B ? MDM(2) 510 0 Z
+bit 512 C 0 *
+bit 513 B ? MDQ(17) 512 0 Z
+bit 514 C 0 *
+bit 515 B ? MDQ(21) 514 0 Z
+bit 516 C 0 *
+bit 517 B ? MDQ(16) 516 0 Z
+bit 518 C 0 *
+bit 519 B ? MDQ(20) 518 0 Z
+bit 520 C 0 *
+bit 521 B ? MDQ(14) 520 0 Z
+bit 522 C 0 *
+bit 523 B ? MDQ(11) 522 0 Z
+bit 524 C 0 *
+bit 525 B ? MDQ(15) 524 0 Z
+bit 526 C 0 *
+bit 527 B ? MDQ(10) 526 0 Z
+bit 528 C 0 *
+bit 529 B ? MDQS(1) 528 0 Z
+bit 530 O ? *
+bit 531 O ? *
+bit 532 C 0 *
+bit 533 B ? MDM(1) 532 0 Z
+bit 534 C 0 *
+bit 535 B ? MDQ(8) 534 0 Z
+bit 536 C 0 *
+bit 537 B ? MDQ(9) 536 0 Z
+bit 538 C 0 *
+bit 539 B ? MDQ(12) 538 0 Z
+bit 540 C 0 *
+bit 541 B ? MDQ(13) 540 0 Z
+bit 542 O ? *
+bit 543 O ? *
+bit 544 C 0 *
+bit 545 O ? MCK(1) 544 0 Z
+bit 546 C 0 *
+bit 547 B ? MDQ(3) 546 0 Z
+bit 548 C 0 *
+bit 549 B ? MDQ(2) 548 0 Z
+bit 550 C 0 *
+bit 551 B ? MDQ(7) 550 0 Z
+bit 552 C 0 *
+bit 553 B ? MDQ(6) 552 0 Z
+bit 554 C 0 *
+bit 555 B ? MDQS(0) 554 0 Z
+bit 556 O ? *
+bit 557 O ? *
+bit 558 C 0 *
+bit 559 B ? MDM(0) 558 0 Z
+bit 560 C 0 *
+bit 561 B ? MDQ(1) 560 0 Z
+bit 562 C 0 *
+bit 563 B ? MDQ(0) 562 0 Z
+bit 564 C 0 *
+bit 565 B ? MDQ(5) 564 0 Z
+bit 566 C 0 *
+bit 567 B ? MDQ(4) 566 0 Z
+bit 568 O ? *
+bit 569 I ? DDRCLK
+bit 570 I ? SD_RX(0)
+bit 571 C 1 *
+bit 572 O 0 SD_TX(0) 571 1 Z
+bit 573 C 1 *
+bit 574 O 0 SD_TX(1) 573 1 Z
+bit 575 I ? SD_RX(1)
+bit 576 I ? SD_REF_CLK
+bit 577 O ? *
+bit 578 O ? *
+bit 579 I ? SD_RX(2)
+bit 580 C 1 *
+bit 581 O 0 SD_TX(2) 580 1 Z
+bit 582 C 1 *
+bit 583 O 0 SD_TX(3) 582 1 Z
+bit 584 I ? SD_RX(3)
+bit 585 C 0 *
+bit 586 B ? TSEC_1588_ALARM_OUT2 585 0 Z
diff --git a/urjtag/src/bsdl/bsdl_bison.y b/urjtag/src/bsdl/bsdl_bison.y
index c00d3fd7..6f7be147 100644
--- a/urjtag/src/bsdl/bsdl_bison.y
+++ b/urjtag/src/bsdl/bsdl_bison.y
@@ -192,6 +192,7 @@ void yyerror (urj_bsdl_parser_priv_t *, const char *);
 
 
 %token CONSTANT PIN_MAP
+%token PORT_GROUPING DIFFERENTIAL_CURRENT DIFFERENTIAL_VOLTAGE
 %token PHYSICAL_PIN_MAP PIN_MAP_STRING
 %token TAP_SCAN_IN TAP_SCAN_OUT TAP_SCAN_MODE TAP_SCAN_RESET
 %token TAP_SCAN_CLOCK
@@ -239,6 +240,8 @@ void yyerror (urj_bsdl_parser_priv_t *, const char *);
 %type <integer> Disable_Value
 %type <str> Standard_Reg
 %type <str> Instruction_Name
+%type <str> Port_Grouping_Type
+%type <str> Port_Grouping
 
 %start BSDL_Statement
 
@@ -258,6 +261,7 @@ BSDL_Statement   : BSDL_Pin_Map
                  | BSDL_Inst_Guard
                  | BSDL_Inst_Private
                  | BSDL_Idcode_Register
+                 | BSDL_Port_Grouping
                  | BSDL_Usercode_Register
                  | BSDL_Register_Access
                  | BSDL_Boundary_Length
@@ -388,6 +392,31 @@ BSDL_Idcode_Register : IDCODE_REGISTER BIN_X_PATTERN
                        { priv_data->jtag_ctrl->idcode = $2; }
 ;
 
+/****************************************************************************/
+BSDL_Port_Grouping : PORT_GROUPING Port_Grouping_Mapping
+;
+
+Port_Grouping_Mapping : IDENTIFIER LPAREN Port_Grouping_List RPAREN
+;
+
+Port_Grouping_Type : DIFFERENTIAL_VOLTAGE 
+					| DIFFERENTIAL_CURRENT
+;
+
+Port_Grouping_List : LPAREN Port_Grouping RPAREN
+                    | Port_Grouping_List COMMA LPAREN Port_Grouping RPAREN
+                    | error
+                      {
+                        Print_Error (priv_data, _("Error in Port Grouping List"));
+                        BUMP_ERROR;
+                        YYABORT;
+                      }
+;
+Port_Grouping      : IDENTIFIER LPAREN DECIMAL_NUMBER RPAREN COMMA IDENTIFIER LPAREN DECIMAL_NUMBER RPAREN
+					| IDENTIFIER COMMA IDENTIFIER
+                      { free ($1); }
+;
+
 /****************************************************************************/
 BSDL_Usercode_Register : USERCODE_REGISTER BIN_X_PATTERN
                          { priv_data->jtag_ctrl->usercode = $2; }
diff --git a/urjtag/src/bsdl/bsdl_flex.l b/urjtag/src/bsdl/bsdl_flex.l
index 1f7b98c9..6fc50859 100644
--- a/urjtag/src/bsdl/bsdl_flex.l
+++ b/urjtag/src/bsdl/bsdl_flex.l
@@ -209,6 +209,7 @@ Boundary_Length      BOUNDARY_LENGTH
 Boundary_Register    BOUNDARY_REGISTER
 Idcode_Register      IDCODE_REGISTER
 Usercode_Register    USERCODE_REGISTER
+Port_Grouping        PORT_GROUPING
 Boundary       BOUNDARY
 Bypass         BYPASS
 Clamp          CLAMP
@@ -278,6 +279,7 @@ Recommended           RECOMMENDED
 ISC_Illegal_Exit      ISC_ILLEGAL_EXIT
 %%
 {Constant}              {yyextra->Base = DECIMAL; return( CONSTANT ); }
+{Port_Grouping}         {return( PORT_GROUPING ); }
 {Pin_Map}               {return( PIN_MAP ); }
 {Physical_Pin_Map}      {return( PHYSICAL_PIN_MAP ); }
 {Pin_Map_String}        {return( PIN_MAP_STRING ); }
diff --git a/urjtag/src/bsdl/bsdl_types.h b/urjtag/src/bsdl/bsdl_types.h
index efe09579..44fe8f50 100644
--- a/urjtag/src/bsdl/bsdl_types.h
+++ b/urjtag/src/bsdl/bsdl_types.h
@@ -144,6 +144,7 @@ struct jtag_ctrl
     urj_vhdl_elem_t *vhdl_elem_last;
     /* collected by BSDL parser */
     char *idcode;               /* IDCODE string */
+    char *port_grouping;		/* PORT_GROUPING string */
     char *usercode;             /* USERCODE string */
     int instr_len;
     int bsr_len;
diff --git a/urjtag/src/bus/Makefile.am b/urjtag/src/bus/Makefile.am
index 3a082439..3fc9c265 100644
--- a/urjtag/src/bus/Makefile.am
+++ b/urjtag/src/bus/Makefile.am
@@ -122,6 +122,10 @@ if ENABLE_BUS_MPC837X
 libbus_la_SOURCES += mpc837x.c
 endif
 
+if ENABLE_BUS_P1020
+libbus_la_SOURCES += p1020.c
+endif
+
 if ENABLE_BUS_PPC405EP
 libbus_la_SOURCES += ppc405ep.c
 endif
diff --git a/urjtag/src/bus/buses_list.h b/urjtag/src/bus/buses_list.h
index aaaacc91..87728ef9 100644
--- a/urjtag/src/bus/buses_list.h
+++ b/urjtag/src/bus/buses_list.h
@@ -98,6 +98,9 @@ _URJ_BUS(mpc8313)
 #ifdef ENABLE_BUS_MPC837X
 _URJ_BUS(mpc837x)
 #endif
+#ifdef ENABLE_BUS_P1020
+_URJ_BUS(p1020)
+#endif
 #ifdef ENABLE_BUS_PPC405EP
 _URJ_BUS(ppc405ep)
 #endif
diff --git a/urjtag/src/bus/p1020.c b/urjtag/src/bus/p1020.c
new file mode 100644
index 00000000..fcf4564d
--- /dev/null
+++ b/urjtag/src/bus/p1020.c
@@ -0,0 +1,515 @@
+/*
+ * Freescale P1020 compatible bus driver via BSR
+ * Copyright (C) 2010 Andrzej Jalowiecki, Damien Mascord
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ *
+ * Documentation:
+ * [1] Freescale, "Freescale P1020 Reference Manual"
+ *
+ */
+
+#include "sysdep.h"
+
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+
+#include <urjtag/chain.h>
+#include <urjtag/part.h>
+#include <urjtag/bus.h>
+#include <urjtag/bssignal.h>
+
+#include "buses.h"
+#include "generic_bus.h"
+
+#define LBC_NUM_LCS 8
+#define LBC_NUM_LWE 2
+#define LBC_NUM_LAD 16
+#define LBC_NUM_LA 16
+
+typedef struct {
+    uint32_t last_adr;
+    urj_part_signal_t *nlcs[LBC_NUM_LCS];
+    urj_part_signal_t *lad[LBC_NUM_LAD];
+    urj_part_signal_t *la[LBC_NUM_LA];
+    urj_part_signal_t *nlwe[LBC_NUM_LWE];
+    urj_part_signal_t *nloe;
+    urj_part_signal_t *ale;
+    urj_part_signal_t *lbctl;
+    int lbc_muxed;
+    int lbc_num_ad;
+    int lbc_num_d;
+} bus_params_t;
+
+#define LAST_ADR ((bus_params_t *) bus->params)->last_adr /* Last used address */
+#define nCS      ((bus_params_t *) bus->params)->nlcs     /* Chipselect# */
+#define nWE      ((bus_params_t *) bus->params)->nlwe     /* Write enable# */
+#define nOE      ((bus_params_t *) bus->params)->nloe     /* Output enable# */
+#define ALE      ((bus_params_t *) bus->params)->ale      /* Addres strobe */
+#define BCTL     ((bus_params_t *) bus->params)->lbctl    /* Write /Read# */
+
+#define LAD      ((bus_params_t *) bus->params)->lad      /* Addres/Data Bus Mux */
+#define LA       ((bus_params_t *) bus->params)->la       /* Addres Bus nonMux */
+
+/**
+ * bus->driver->(*new_bus)
+ *
+ */
+static urj_bus_t *
+p1020_bus_new (urj_chain_t *chain, const urj_bus_driver_t *driver,
+                 const urj_param_t *cmd_params[])
+{
+    urj_bus_t *bus;
+    bus_params_t *bp;
+    urj_part_t *part;
+    char buff[10];
+    int i;
+    int failed = 0;
+
+    bus = urj_bus_generic_new (chain, driver, sizeof (bus_params_t));
+    if (bus == NULL)
+        return NULL;
+
+    part = bus->part;
+    bp = bus->params;
+
+    /* default values */
+    bp->lbc_muxed = 0;
+    bp->lbc_num_d = 8;
+    bp->lbc_num_ad = 25;
+
+    for (i = 0; cmd_params[i] != NULL; i++)
+    {
+        switch (cmd_params[i]->key)
+        {
+        case URJ_BUS_PARAM_KEY_HELP:
+            urj_bus_generic_free (bus);
+            urj_log (URJ_LOG_LEVEL_NORMAL,
+                     _("Usage: initbus p1020 [mux] [width=WIDTH]\n"
+                       "            MUX        multiplexed data bus (default no)\n"
+                       "            WIDTH      data bus width - 8, 16, 32 (default 8)\n"));
+            return NULL;
+        case URJ_BUS_PARAM_KEY_MUX:
+            bp->lbc_muxed = 1;
+            break;
+        case URJ_BUS_PARAM_KEY_WIDTH:
+            switch (cmd_params[i]->value.lu)
+            {
+            case 8:
+                bp->lbc_num_d = 8;
+                break;
+            case 16:
+                bp->lbc_num_d = 16;
+                break;
+            case 32:
+                bp->lbc_num_d = 32;
+                break;
+            default:
+                urj_error_set (URJ_ERROR_UNSUPPORTED,
+                               _("    Only 8, 16, 32 bus width are suported\n"));
+            }
+            break;
+        default:
+            urj_bus_generic_free (bus);
+            urj_error_set (URJ_ERROR_SYNTAX, "unrecognised bus parameter '%s'",
+            urj_param_string (&urj_bus_param_list, cmd_params[i]));
+            return NULL;
+        }
+    }
+
+    if (!bp->lbc_muxed && (bp->lbc_num_d > 16))
+    {
+        urj_bus_generic_free (bus);
+        urj_error_set (URJ_ERROR_UNSUPPORTED,
+                       _("    Only 8 and 16 non multiplexed bus width are suported\n"));
+        return NULL;
+    }
+
+    if (bp->lbc_muxed)
+        bp->lbc_num_ad = LBC_NUM_LAD;
+
+    /* Get the signals */
+    /*if (bp->lbc_muxed)
+    {
+        failed |= urj_bus_generic_attach_sig (part, &(ALE), "LALE");
+        for (i = 0; i < LBC_NUM_LAD; i++)
+        {
+            sprintf (buff, "LAD(%d)", i);
+            failed |= urj_bus_generic_attach_sig (part, &(LAD[i]), buff);
+        }
+    }
+    else
+    {
+        failed |= urj_bus_generic_attach_sig (part, &(LA[7]),  "LDP(0)");
+        failed |= urj_bus_generic_attach_sig (part, &(LA[8]),  "LDP(1)");
+        failed |= urj_bus_generic_attach_sig (part, &(LA[9]),  "LGPL5");
+        failed |= urj_bus_generic_attach_sig (part, &(LA[10]), "LALE");
+        for (i = 11; i < LBC_NUM_LAD - 5; i++)
+        {
+            sprintf (buff, "LAD(%d)", i + 5);
+            failed |= urj_bus_generic_attach_sig (part, &(LA[i]), buff);
+        }
+    }*/
+    
+    for (i = 0; i < LBC_NUM_LAD; i++)
+    {
+        sprintf (buff, "LAD(%d)", i);
+        failed |= urj_bus_generic_attach_sig (part, &(LAD[i]), buff);
+    }
+
+    for (i = 0; i < LBC_NUM_LA; i++)
+    {
+        sprintf (buff, "LA(%d)", i + LBC_NUM_LAD);
+        failed |= urj_bus_generic_attach_sig (part, &(LA[i]), buff);
+    }
+
+    for (i = 0; i < LBC_NUM_LCS; i++)
+    {
+        sprintf (buff, "LCS_B(%d)", i);
+        failed |= urj_bus_generic_attach_sig (part, &(nCS[i]), buff);
+    }
+
+    for (i = 0; i < LBC_NUM_LWE; i++)
+    {
+        sprintf (buff, "LWE_B(%d)", i);
+        failed |= urj_bus_generic_attach_sig (part, &(nWE[i]), buff);
+    }
+
+    failed |= urj_bus_generic_attach_sig (part, &(nOE), "LGPL2");
+    failed |= urj_bus_generic_attach_sig (part, &(BCTL), "LBCTL");
+
+    if (failed)
+    {
+        urj_bus_generic_free (bus);
+        return NULL;
+    }
+
+    urj_log (URJ_LOG_LEVEL_NORMAL,
+             "%sMUXed %db address, %db data bus\n",
+             ((bp->lbc_muxed) ? "" : "Non-"),
+             bp->lbc_num_ad, bp->lbc_num_d);
+
+    return bus;
+}
+
+/**
+ * bus->driver->(*printinfo)
+ *
+ */
+static void
+p1020_bus_printinfo (urj_log_level_t ll, urj_bus_t *bus)
+{
+    int i;
+
+    for (i = 0; i < bus->chain->parts->len; i++)
+        if (bus->part == bus->chain->parts->parts[i])
+            break;
+    urj_log (ll, _("Freescale p1020 compatible bus driver via BSR (JTAG part No. %d)\n"), i);
+}
+
+/**
+ * bus->driver->(*area)
+ *
+ */
+static int
+p1020_bus_area (urj_bus_t *bus, uint32_t adr, urj_bus_area_t *area)
+{
+    bus_params_t *bp = bus->params;
+
+    area->description = N_("Local Bus Controller");
+    area->start = UINT32_C(0x00000000);
+    area->length = UINT64_C(0x100000000);
+    area->width = bp->lbc_num_d;
+    return URJ_STATUS_OK;
+}
+
+static void
+setup_address (urj_bus_t *bus, uint32_t a)
+{
+    bus_params_t *bp = bus->params;
+    urj_part_t *p = bus->part;
+    int i;
+
+    if (bp->lbc_muxed)
+    {
+        for (i = 0; i < bp->lbc_num_ad; i++)
+            urj_part_set_signal (p, LAD[LBC_NUM_LAD - i - 1], 1, (a >> i) & 1);
+
+        for (i = 0; i < LBC_NUM_LA; i++)
+            urj_part_set_signal (p, LA[LBC_NUM_LA - i - 1], 1, (a >> i) & 1);
+    }
+    else
+    {
+        for (i = 0; i < LBC_NUM_LA; i++)
+            urj_part_set_signal (p, LA[LBC_NUM_LA - i - 1], 1, (a >> i) & 1);
+    }
+}
+
+static void
+set_data_in (urj_bus_t *bus, uint32_t adr)
+{
+    bus_params_t *bp = bus->params;
+    urj_part_t *p = bus->part;
+    urj_bus_area_t area;
+    int i;
+
+    p1020_bus_area (bus, adr, &area);
+    if (area.width > bp->lbc_num_d)
+        return;
+
+    for (i = 0; i < area.width; i++)
+        urj_part_set_signal_input (p, LAD[bp->lbc_num_d - i - 1]);
+}
+
+static void
+setup_data (urj_bus_t *bus, uint32_t adr, uint32_t d)
+{
+    bus_params_t *bp = bus->params;
+    urj_part_t *p = bus->part;
+    urj_bus_area_t area;
+    int i;
+
+    p1020_bus_area (bus, adr, &area);
+    if (area.width > bp->lbc_num_d)
+        return;
+
+    for (i = 0; i < area.width; i++)
+        urj_part_set_signal (p, LAD[bp->lbc_num_d - i - 1], 1, (d >> i) & 1);
+}
+
+static uint32_t
+get_data (urj_bus_t *bus, uint32_t adr)
+{
+    bus_params_t *bp = bus->params;
+    urj_part_t *p = bus->part;
+    urj_bus_area_t area;
+    uint32_t d = 0;
+    int i;
+
+    p1020_bus_area (bus, adr, &area);
+    if (area.width > bp->lbc_num_d)
+        return 0;
+
+    for (i = 0; i < area.width; i++)
+        d |= (urj_part_get_signal (p, LAD[bp->lbc_num_d - i - 1]) << i);
+    return d;
+}
+
+/**
+ * bus->driver->(*read_start)
+ *
+ */
+static int
+p1020_bus_read_start (urj_bus_t *bus, uint32_t adr)
+{
+    bus_params_t *bp = bus->params;
+    urj_chain_t *chain = bus->chain;
+    urj_part_t *p = bus->part;
+    uint8_t cs;
+    int i;
+
+    LAST_ADR = adr;
+    cs = 0;
+
+    for (i = 0; i < LBC_NUM_LCS; i++)
+        urj_part_set_signal (p, nCS[i], 1, !(cs == i));
+
+    for (i = 0; i < LBC_NUM_LWE; i++)
+        urj_part_set_signal_high (p, nWE[i]);
+
+    setup_address (bus, adr);
+
+    if (bp->lbc_muxed)
+    {
+        urj_part_set_signal_high (p, BCTL);    /* Address Out */
+        urj_part_set_signal_high (p, ALE);
+        urj_part_set_signal_high (p, nOE);
+        urj_tap_chain_shift_data_registers (chain, 0);
+        urj_part_set_signal_low (p, BCTL);    /* Data In */
+        urj_part_set_signal_low (p, ALE);
+        urj_part_set_signal_low (p, nOE);
+    }
+    else
+    {
+        urj_part_set_signal_low (p, BCTL);    /* Data In */
+        urj_part_set_signal_low (p, nOE);
+        set_data_in (bus, adr);
+    }
+
+    urj_tap_chain_shift_data_registers (chain, 0);
+
+    return URJ_STATUS_OK;
+}
+
+/**
+ * bus->driver->(*read_next)
+ *
+ */
+static uint32_t
+p1020_bus_read_next (urj_bus_t *bus, uint32_t adr)
+{
+    bus_params_t *bp = bus->params;
+    urj_chain_t *chain = bus->chain;
+    urj_part_t *p = bus->part;
+    uint32_t d;
+
+    if (bp->lbc_muxed)
+    {
+        set_data_in (bus, adr);
+        urj_tap_chain_shift_data_registers (chain, 0);
+
+        urj_tap_chain_shift_data_registers (chain, 1);
+        d = get_data (bus, LAST_ADR);
+
+        setup_address (bus, adr);
+        LAST_ADR = adr;
+
+        urj_part_set_signal_high (p, BCTL);    /* Address Out */
+        urj_part_set_signal_high (p, ALE);
+        urj_part_set_signal_high (p, nOE);
+        urj_tap_chain_shift_data_registers (chain, 0);
+
+        urj_part_set_signal_low (p, BCTL);    /* Data In */
+        urj_part_set_signal_low (p, ALE);
+        urj_part_set_signal_low (p, nOE);
+        urj_tap_chain_shift_data_registers (chain, 0);
+    }
+    else
+    {
+        setup_address (bus, adr);    /* Data In */
+        urj_tap_chain_shift_data_registers (chain, 1);
+        d = get_data (bus, LAST_ADR);
+    }
+
+    LAST_ADR = adr;
+    return d;
+}
+
+/**
+ * bus->driver->(*read_end)
+ *
+ */
+static uint32_t
+p1020_bus_read_end (urj_bus_t *bus)
+{
+    bus_params_t *bp = bus->params;
+    urj_chain_t *chain = bus->chain;
+    urj_part_t *p = bus->part;
+    int i;
+
+    if (bp->lbc_muxed)
+    {
+        set_data_in (bus, LAST_ADR);
+        urj_tap_chain_shift_data_registers (chain, 0);
+        urj_part_set_signal_high (p, ALE);
+    }
+
+    for (i = 0; i < LBC_NUM_LCS; i++)
+        urj_part_set_signal_high (p, nCS[i]);
+
+    urj_part_set_signal_high (p, BCTL);
+    urj_part_set_signal_high (p, nOE);
+
+    urj_tap_chain_shift_data_registers (chain, 1);
+
+    return get_data (bus, LAST_ADR);
+}
+
+/**
+ * bus->driver->(*write)
+ *
+ */
+static void
+p1020_bus_write (urj_bus_t *bus, uint32_t adr, uint32_t data)
+{
+    bus_params_t *bp =  bus->params;
+    urj_chain_t *chain = bus->chain;
+    urj_part_t *p = bus->part;
+    urj_bus_area_t area;
+    uint8_t cs;
+    int i;
+
+    p1020_bus_area (bus, adr, &area);
+    if (area.width > bp->lbc_num_d)
+        return;
+
+    cs = 0;
+    urj_part_set_signal_high (p, BCTL);
+    urj_part_set_signal_high (p, nOE);
+
+    for (i = 0; i < LBC_NUM_LWE; i++)
+        urj_part_set_signal_high (p, nWE[i]);
+
+    if (bp->lbc_muxed)
+    {
+        setup_address (bus, adr);
+        urj_part_set_signal_high (p, ALE);
+        urj_tap_chain_shift_data_registers (chain, 0);
+        urj_part_set_signal_low (p, ALE);
+        urj_tap_chain_shift_data_registers (chain, 0);
+    }
+    else
+        setup_address (bus, adr);
+
+    for (i = 0; i < LBC_NUM_LCS; i++)
+        urj_part_set_signal (p, nCS[i], 1, !(cs == i));
+
+    setup_data (bus, adr, data);
+
+    urj_tap_chain_shift_data_registers (chain, 0);
+
+    switch (area.width)
+    {
+    case 32:
+        urj_part_set_signal_low (p, nWE[3]);
+        urj_part_set_signal_low (p, nWE[2]);
+    case 16:
+        urj_part_set_signal_low (p, nWE[1]);
+    case 8:
+        urj_part_set_signal_low (p, nWE[0]);
+    default:
+        break;
+    }
+
+    urj_tap_chain_shift_data_registers (chain, 0);
+
+    for (i = 0; i < LBC_NUM_LWE; i++)
+        urj_part_set_signal_high (p, nWE[i]);
+
+    urj_tap_chain_shift_data_registers (chain, 0);
+}
+
+const urj_bus_driver_t urj_bus_p1020_bus = {
+    "p1020",
+    N_("Freescale p1020 compatible bus driver via BSR, parameter: [mux] [width]"),
+    p1020_bus_new,
+    urj_bus_generic_free,
+    p1020_bus_printinfo,
+    urj_bus_generic_prepare_extest,
+    p1020_bus_area,
+    p1020_bus_read_start,
+    p1020_bus_read_next,
+    p1020_bus_read_end,
+    urj_bus_generic_read,
+    urj_bus_generic_write_start,
+    p1020_bus_write,
+    urj_bus_generic_no_init,
+    urj_bus_generic_no_enable,
+    urj_bus_generic_no_disable,
+    URJ_BUS_TYPE_PARALLEL,
+};
_______________________________________________
UrJTAG-development mailing list
UrJTAG-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/urjtag-development

Reply via email to