Skip to contentSkip to conversation

Configure tweaks for SystemACE without CONFIG_XILINX_OCP

DISCUSSION Stephen Williams 2 participants 4 messages Jun 10, 2004 – Jun 16, 2004 1 message not in the archive Arm/Zynq architecture

lore
Share & tools
lore
#0 lore raw

I'm working to clean up my integration of our JSE board, which is based on PPC405GPr, and has a Xilinx SystemACE as a cf interface. I find that the block/drivers/xilinx_systemace/adapter driver needs the arch/ppc/platforms/xilinx_ocp/xilinx_ocp.o file compiled, but definitely does *NOT* want the CONFIG_XILINX_OCP config defined. If the latter is defined, then some changes in the ppc405_pci.c source file are compiled in that are not right for ppc405GPr devices.

In order to get CONFIG_XILINX_SYSACE to define, the unmodified source requries that CONFIG_XILINX_OCP is defined. I created this patch to alloc SYSACE on by board:

@@ -41,7 +41,7 @@
dep_tristate 'Micro Memory MM5415 Battery Backed RAM support (EXPERIMENTAL)'
CONFIG_BLK_DEV_UMEM $CONFIG_PCI $CONFIG_EXPERIMENTAL
dep_tristate 'Promise SATA SX8 (carmel) support' CONFIG_BLK_DEV_CARMEL $CONFIG_PCI

-if [ "$CONFIG_XILINX_OCP" = "y" ]; then
+if [ "$CONFIG_XILINX_OCP" = "y" || "$CONFIG_JSE" = "y" ]; then
tristate 'Xilinx on-chip System ACE' CONFIG_XILINX_SYSACE
fi

Functional, but brutish. Better would be for the ifdefs on the CONFIG_XILINX_OCP in arch/ppc/kernel/ppc405_pci.o go away. Who is the maintainer for this bit (Andrei?) and would in be OK to further qualify this code so that the CONFIG_XILINX_OCP is not enough to make a complete mess for non-virtex2pro folks? Heck, one idea would be to change ppc405_pci.c:135 from:

  #ifdef CONFIG_XILINX_OCP

to the more complete test:

  #if DEFINED(CONFIG_XILINX_OCP) && defined(CONFIG_VIRTEX_II_PRO)

Please?
--

Steve Williams                "The woods are lovely, dark and deep.
steve at XXXXXXXXXX           But I have promises to keep,
http://www.XXXXXXXXXX         and lines to code before I sleep,
http://www.picturel.com       And lines to code before I sleep."

** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/

#1 lore raw
Quoted 3 lines · Stephen Williams 612dlag102-at-sneakemail.com |PPC Linux Embedded| wrote:

In order to get CONFIG_XILINX_SYSACE to define, the unmodified source requries that CONFIG_XILINX_OCP is defined. I created this patch to alloc SYSACE on by board:

I've made a patch that demonstrates what I have in mind, and should work in general. With this patch, a configuration can enable CONFIG_XILINX_OCP and enable CONFIG_XILINX_SYSACE and not have ppc405gpr pci setup or PIC setup messed with.

Patch is relative the ppc.bkbits.net linuxppc-2.4 tree. I'm guessing Andrei is the authority for this aspect.

--

Steve Williams                "The woods are lovely, dark and deep.
steve at XXXXXXXXXX           But I have promises to keep,
http://www.XXXXXXXXXX         and lines to code before I sleep,
http://www.picturel.com       And lines to code before I sleep."
# This is a BitKeeper generated diff -Nru style patch.
#
# ChangeSet
#   2004/06/10 18:45:08-07:00 [email protected]
#   Condition Xilinx on-chip processor config with
#   CONFIG_VIRTEX_II_PRO
#
# arch/ppc/kernel/ppc405_pci.c
#   2004/06/10 18:45:06-07:00 [email protected] +1 -1
#   Condition Xilinx on-chip processor support with
#   CONFIG_VIRTEX_II_PRO
#
# arch/ppc/kernel/Makefile
#   2004/06/10 18:45:06-07:00 [email protected] +1 -1
#   Condition Xilinx on-chip processor support with
#   CONFIG_VIRTEX_II_PRO
#
# BitKeeper/etc/ignore
#   2004/06/10 18:45:06-07:00 [email protected] +4 -0
#   Added arch/ppc/boot/images/uImage arch/ppc/boot/images/vmlinux.UBoot arch/ppc/boot/images/vmlinux.gz arch/ppc/kernel/ppc_defs.h to the ignore list
#
diff -Nru a/arch/ppc/kernel/Makefile b/arch/ppc/kernel/Makefile
--- a/arch/ppc/kernel/Makefile	2004-06-10 19:57:40 -07:00
+++ b/arch/ppc/kernel/Makefile	2004-06-10 19:57:40 -07:00
@@ -61,7 +61,7 @@
 obj-$(CONFIG_PPC_OCP)		+= ocp.o
 obj-$(CONFIG_40x)		+= ppc4xx_setup.o
 obj-$(CONFIG_4xx)		+= todc_time.o idle_4xx.o
-ifeq ($(CONFIG_XILINX_OCP),y)
+ifeq ($(CONFIG_XILINX_OCP)$(CONFIG_VIRTEX_II_PRO),yy)
 obj-$(CONFIG_40x)		+= xilinx_pic.o
 else
 obj-$(CONFIG_40x)		+= ppc4xx_pic.o
diff -Nru a/arch/ppc/kernel/ppc405_pci.c b/arch/ppc/kernel/ppc405_pci.c
--- a/arch/ppc/kernel/ppc405_pci.c	2004-06-10 19:57:40 -07:00
+++ b/arch/ppc/kernel/ppc405_pci.c	2004-06-10 19:57:40 -07:00
@@ -132,7 +132,7 @@
 	setup_indirect_pci(hose_a, PPC405_PCI_CONFIG_ADDR,
 			   PPC405_PCI_CONFIG_DATA);

-#ifdef CONFIG_XILINX_OCP
+#if defined(CONFIG_XILINX_OCP) && defined(CONFIG_VIRTEX_II_PRO)
/* Eliminate "unused variable" warning for pcip. Optimizer removes. */ pcip = NULL;
new_pmm_min = PPC405_PCI_LOWER_MEM;

#2 lore raw

The patch is OK for me.

Thanks,
Andrei

Quoted 62 lines · Stephen Williams
Quoted 3 lines · Stephen Williams 612dlag102-at-sneakemail.com |PPC Linux Embedded| wrote:

In order to get CONFIG_XILINX_SYSACE to define, the unmodified source requries that CONFIG_XILINX_OCP is defined. I created this patch to alloc SYSACE on by board:

I've made a patch that demonstrates what I have in mind, and should work in general. With this patch, a configuration can enable CONFIG_XILINX_OCP and enable CONFIG_XILINX_SYSACE and not have ppc405gpr pci setup or PIC setup messed with.

Patch is relative the ppc.bkbits.net linuxppc-2.4 tree. I'm guessing Andrei is the authority for this aspect.

--

Steve Williams                "The woods are lovely, dark and deep.
steve at XXXXXXXXXX           But I have promises to keep,
http://www.XXXXXXXXXX         and lines to code before I sleep,
http://www.picturel.com       And lines to code before I sleep."

------------------------------------------------------------------------

# This is a BitKeeper generated diff -Nru style patch. #
# ChangeSet

#   2004/06/10 18:45:08-07:00 [email protected]
#   Condition Xilinx on-chip processor config with
#   CONFIG_VIRTEX_II_PRO
#
# arch/ppc/kernel/ppc405_pci.c
#   2004/06/10 18:45:06-07:00 [email protected] +1 -1
#   Condition Xilinx on-chip processor support with
#   CONFIG_VIRTEX_II_PRO
#
# arch/ppc/kernel/Makefile
#   2004/06/10 18:45:06-07:00 [email protected] +1 -1
#   Condition Xilinx on-chip processor support with
#   CONFIG_VIRTEX_II_PRO
#
# BitKeeper/etc/ignore
#   2004/06/10 18:45:06-07:00 [email protected] +4 -0
#   Added arch/ppc/boot/images/uImage arch/ppc/boot/images/vmlinux.UBoot arch/ppc/boot/images/vmlinux.gz arch/ppc/kernel/ppc_defs.h to the ignore list
#
diff -Nru a/arch/ppc/kernel/Makefile b/arch/ppc/kernel/Makefile
arch/ppc/kernel/Makefile +1 -1
@@ -61,7 +61,7 @@
 obj-$(CONFIG_PPC_OCP)		+= ocp.o
 obj-$(CONFIG_40x)		+= ppc4xx_setup.o
 obj-$(CONFIG_4xx)		+= todc_time.o idle_4xx.o
-ifeq ($(CONFIG_XILINX_OCP),y)
+ifeq ($(CONFIG_XILINX_OCP)$(CONFIG_VIRTEX_II_PRO),yy)
 obj-$(CONFIG_40x)		+= xilinx_pic.o
 else
 obj-$(CONFIG_40x)		+= ppc4xx_pic.o

diff -Nru a/arch/ppc/kernel/ppc405_pci.c b/arch/ppc/kernel/ppc405_pci.c

arch/ppc/kernel/ppc405_pci.c line 138

Quoted 8 lines
arch/ppc/kernel/ppc405_pci.c +1 -1
@@ -132,7 +132,7 @@
 	setup_indirect_pci(hose_a, PPC405_PCI_CONFIG_ADDR,
 			   PPC405_PCI_CONFIG_DATA);
 
-#ifdef CONFIG_XILINX_OCP
+#if defined(CONFIG_XILINX_OCP) && defined(CONFIG_VIRTEX_II_PRO)
 	/* Eliminate "unused variable" warning for pcip.  Optimizer removes. */
 	pcip = NULL;
 	new_pmm_min = PPC405_PCI_LOWER_MEM;

** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/

A message that is not in the archive (sent off-list or not yet received): [email protected]

#4 lore raw
Quoted 13 lines · Travis B. Sawyer tsawyer-at-sandburst.com |PPC Linux Embedded| wrote:

Steve:

I'm working on getting sysace to come up on our custom hw.

Where did you put the definitions that the driver code needs, eg:
#if defined(CONFIG_XILINX_SYSACE)
#define XPAR_XSYSACE_NUM_INSTANCES 1
#define XPAR_SYSACE_0_BASEADDR 0xe8100000
#define XPAR_SYSACE_0_HIGHADDR 0xe8100FFF
#define XPAR_SYSACE_0_DEVICE_ID 160
#define XPAR_INTC_0_SYSACE_0_VEC_ID 51 /* UIC1:20, IRQ9 */
#endif

Quoted 5 lines

Am I way off base with these? I dropped them in my board specific header file... Or, should I be using:

#define XPAR_SYSACE_0_BASEADDR 0x0000000148100000ULL
#define XPAR_SYSACE_0_HIGHADDR 0x0000000148100FFFULL

First, you'll need the attached sysace-without-virtexii patch, which has not been pushed to the linuxppc-2.4 tree yet. This fixes some V2PRO dependencies when XILINX_OCP is activated.

I started by editing the file platforms/xilinx_ocp/xparameters.h:

===== arch/ppc/platforms/xilinx_ocp/xparameters.h 1.1 vs edited =====

arch/ppc/platforms/xilinx_ocp/xparameters.h +4 -0
@@ -16,3 +16,7 @@
 #if defined(CONFIG_XILINX_ML300)
 #include "xparameters_ml300.h"
 #endif
+
+#if defined(CONFIG_JSE)
+#include "xparameters_jse.h"
+#endif

The CONFIG_JSE is for my board. I then added the xparameters_jse.h file next to the xparameters_ml300.h that has the pertinent values for my system. I've attached mine as a working example.

I also edited the arch/ppc/config.in so that the right defines are enabled:

===== arch/ppc/config.in 1.69 vs edited =====

arch/ppc/config.in +6 -0
@@ -79,6 +79,7 @@
 	 CPCI405	CONFIG_CPCI405 		\
 	 EP405/EP405PC	CONFIG_EP405 		\
 	 405EP-eval	CONFIG_EVB405EP		\
+	 JSE		CONFIG_JSE              \
 	 Oak		CONFIG_OAK 		\
 	 Rainier	CONFIG_RAINIER		\
 	 Redwood-4	CONFIG_REDWOOD_4 	\
@@ -321,6 +322,11 @@
     define_bool CONFIG_405GPR y
     define_bool CONFIG_BIOS_FIXUP y
     define_bool CONFIG_IBM_OPENBIOS y
+  fi
+
+  if [ "$CONFIG_JSE" = "y" ]; then
+    define_bool CONFIG_405GPR y
+    define_bool CONFIG_XILINX_OCP y
   fi
 
   if [ "$CONFIG_EBONY" = "y" ]; then

This activates CONFIG_XILINX_OCP when I config the JSE board, and that allows the XILINX_SYSACE to be selected. From here, make sure CONFIG_XILINX_SYSACE=y in your .config and you are set.

--

Steve Williams                "The woods are lovely, dark and deep.
steve at XXXXXXXXXX           But I have promises to keep,
http://www.XXXXXXXXXX         and lines to code before I sleep,
http://www.picturel.com       And lines to code before I sleep."
# This is a BitKeeper generated diff -Nru style patch.
#
# ChangeSet
#   2004/06/10 18:45:08-07:00 [email protected]
#   Condition Xilinx on-chip processor config with
#   CONFIG_VIRTEX_II_PRO
#
# arch/ppc/kernel/ppc405_pci.c
#   2004/06/10 18:45:06-07:00 [email protected] +1 -1
#   Condition Xilinx on-chip processor support with
#   CONFIG_VIRTEX_II_PRO
#
# arch/ppc/kernel/Makefile
#   2004/06/10 18:45:06-07:00 [email protected] +1 -1
#   Condition Xilinx on-chip processor support with
#   CONFIG_VIRTEX_II_PRO
#
# BitKeeper/etc/ignore
#   2004/06/10 18:45:06-07:00 [email protected] +4 -0
#   Added arch/ppc/boot/images/uImage arch/ppc/boot/images/vmlinux.UBoot arch/ppc/boot/images/vmlinux.gz arch/ppc/kernel/ppc_defs.h to the ignore list
#
diff -Nru a/arch/ppc/kernel/Makefile b/arch/ppc/kernel/Makefile
--- a/arch/ppc/kernel/Makefile	2004-06-10 19:57:40 -07:00
+++ b/arch/ppc/kernel/Makefile	2004-06-10 19:57:40 -07:00
@@ -61,7 +61,7 @@
 obj-$(CONFIG_PPC_OCP)		+= ocp.o
 obj-$(CONFIG_40x)		+= ppc4xx_setup.o
 obj-$(CONFIG_4xx)		+= todc_time.o idle_4xx.o
-ifeq ($(CONFIG_XILINX_OCP),y)
+ifeq ($(CONFIG_XILINX_OCP)$(CONFIG_VIRTEX_II_PRO),yy)
 obj-$(CONFIG_40x)		+= xilinx_pic.o
 else
 obj-$(CONFIG_40x)		+= ppc4xx_pic.o
diff -Nru a/arch/ppc/kernel/ppc405_pci.c b/arch/ppc/kernel/ppc405_pci.c
--- a/arch/ppc/kernel/ppc405_pci.c	2004-06-10 19:57:40 -07:00
+++ b/arch/ppc/kernel/ppc405_pci.c	2004-06-10 19:57:40 -07:00
@@ -132,7 +132,7 @@
 	setup_indirect_pci(hose_a, PPC405_PCI_CONFIG_ADDR,
 			   PPC405_PCI_CONFIG_DATA);

-#ifdef CONFIG_XILINX_OCP
+#if defined(CONFIG_XILINX_OCP) && defined(CONFIG_VIRTEX_II_PRO)
/* Eliminate "unused variable" warning for pcip. Optimizer removes. */ pcip = NULL;
new_pmm_min = PPC405_PCI_LOWER_MEM;

/* The SystemACE chip is on CS1#, mapped here. */
#define XPAR_SYSACE_0_BASEADDR 0xf0000000 #define XPAR_SYSACE_0_HIGHADDR 0xf00001FF

/* On the JSE board, the SystemACE chip is wired to IRQ 29 */
#define XPAR_INTC_0_SYSACE_0_VEC_ID 2

#define XPAR_XSYSACE_NUM_INSTANCES 1
#define XPAR_OPB_SYSACE_0_MEM_WIDTH 8
#define XPAR_OPB_SYSACE_0_DEVICE_ID 0
#define XPAR_OPB_SYSACE_0_BASEADDR XPAR_SYSACE_0_BASEADDR