diff mbox

[U-Boot,5/6] arm: socfpga: Introduce common board code

Message ID 1449348262-18488-5-git-send-email-marex@denx.de
State Accepted
Delegated to: Marek Vasut
Headers show

Commit Message

Marek Vasut Dec. 5, 2015, 8:44 p.m. UTC
The SoCFPGA has reached a point where every single board code become
the same, since each and every single board is probed equally from OF.
Move the common board code into arch/arm/mach-socfpga/ .

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Chin Liang See <clsee@altera.com>
Cc: Dinh Nguyen <dinguyen@opensource.altera.com>
---
 arch/arm/mach-socfpga/Makefile |  2 +-
 arch/arm/mach-socfpga/board.c  | 64 ++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 65 insertions(+), 1 deletion(-)
 create mode 100644 arch/arm/mach-socfpga/board.c

Comments

Chin Liang See Dec. 7, 2015, 12:53 p.m. UTC | #1
On Sat, 2015-12-05 at 21:44 +0100, Marek Vasut wrote:
> The SoCFPGA has reached a point where every single board code become
> the same, since each and every single board is probed equally from
> OF.
> Move the common board code into arch/arm/mach-socfpga/ .
> 
> Signed-off-by: Marek Vasut <marex@denx.de>
> Cc: Chin Liang See <clsee@altera.com>
> Cc: Dinh Nguyen <dinguyen@opensource.altera.com>
> ---
>  arch/arm/mach-socfpga/Makefile |  2 +-
>  arch/arm/mach-socfpga/board.c  | 64
> ++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 65 insertions(+), 1 deletion(-)
>  create mode 100644 arch/arm/mach-socfpga/board.c
> 
> diff --git a/arch/arm/mach-socfpga/Makefile b/arch/arm/mach
> -socfpga/Makefile
> index 316b326..5cf9e23 100644
> --- a/arch/arm/mach-socfpga/Makefile
> +++ b/arch/arm/mach-socfpga/Makefile
> @@ -8,7 +8,7 @@
>  #
>  
>  obj-y	+= misc.o timer.o reset_manager.o system_manager.o
> clock_manager.o \
> -	   fpga_manager.o scan_manager.o
> +	   fpga_manager.o scan_manager.o board.o
>  obj-$(CONFIG_SPL_BUILD) += spl.o freeze_controller.o
>  
>  # QTS-generated config file wrappers
> diff --git a/arch/arm/mach-socfpga/board.c b/arch/arm/mach
> -socfpga/board.c
> new file mode 100644
> index 0000000..a41d089
> --- /dev/null
> +++ b/arch/arm/mach-socfpga/board.c


I am thinking this can go into misc.c instead new file. 


> @@ -0,0 +1,64 @@
> +/*
> + * Altera SoCFPGA common board code
> + *
> + * Copyright (C) 2015 Marek Vasut <marex@denx.de>
> + *
> + * SPDX-License-Identifier:	GPL-2.0+
> + */
> +
> +#include <common.h>
> +#include <errno.h>
> +#include <asm/arch/reset_manager.h>
> +#include <asm/io.h>
> +
> +#include <usb.h>
> +#include <usb/dwc2_udc.h>
> +
> +DECLARE_GLOBAL_DATA_PTR;
> +
> +void s_init(void) {}
> +
> +/*
> + * Miscellaneous platform dependent initialisations
> + */
> +int board_init(void)

I am thinking we can skip the board_init where it located at original
board folder. If user has unique board specific initialization, they
can still do it there.

Thanks
Chin Liang
Marek Vasut Dec. 7, 2015, 1:23 p.m. UTC | #2
On Monday, December 07, 2015 at 01:53:48 PM, Chin Liang See wrote:

[...]

> > diff --git a/arch/arm/mach-socfpga/board.c b/arch/arm/mach
> > -socfpga/board.c
> > new file mode 100644
> > index 0000000..a41d089
> > --- /dev/null
> > +++ b/arch/arm/mach-socfpga/board.c
> 
> I am thinking this can go into misc.c instead new file.

misc.c is bloated with random crap already, I would like to keep things
orderly a little. Let's keep the board code and platform code separated.

> > @@ -0,0 +1,64 @@
> > +/*
> > + * Altera SoCFPGA common board code
> > + *
> > + * Copyright (C) 2015 Marek Vasut <marex@denx.de>
> > + *
> > + * SPDX-License-Identifier:	GPL-2.0+
> > + */
> > +
> > +#include <common.h>
> > +#include <errno.h>
> > +#include <asm/arch/reset_manager.h>
> > +#include <asm/io.h>
> > +
> > +#include <usb.h>
> > +#include <usb/dwc2_udc.h>
> > +
> > +DECLARE_GLOBAL_DATA_PTR;
> > +
> > +void s_init(void) {}
> > +
> > +/*
> > + * Miscellaneous platform dependent initialisations
> > + */
> > +int board_init(void)
> 
> I am thinking we can skip the board_init where it located at original
> board folder. If user has unique board specific initialization, they
> can still do it there.

See my reply to 6/6 .

Best regards,
Marek Vasut
Chin Liang See Dec. 7, 2015, 1:32 p.m. UTC | #3
On Mon, 2015-12-07 at 14:23 +0100, Marek Vasut wrote:
> On Monday, December 07, 2015 at 01:53:48 PM, Chin Liang See wrote:
> 
> [...]
> 
> > > diff --git a/arch/arm/mach-socfpga/board.c b/arch/arm/mach
> > > -socfpga/board.c
> > > new file mode 100644
> > > index 0000000..a41d089
> > > --- /dev/null
> > > +++ b/arch/arm/mach-socfpga/board.c
> > 
> > I am thinking this can go into misc.c instead new file.
> 
> misc.c is bloated with random crap already, I would like to keep
> things
> orderly a little. Let's keep the board code and platform code
> separated.

Initial thinking misc.c should be as lean as possible but that seems
not today. Can consider split them out per features such as usb.c
ethernet.c.

Thanks
Chin Liang
 

> 
> > > @@ -0,0 +1,64 @@
> > > +/*
> > > + * Altera SoCFPGA common board code
> > > + *
> > > + * Copyright (C) 2015 Marek Vasut <marex@denx.de>
> > > + *
> > > + * SPDX-License-Identifier:	GPL-2.0+
> > > + */
> > > +
> > > +#include <common.h>
> > > +#include <errno.h>
> > > +#include <asm/arch/reset_manager.h>
> > > +#include <asm/io.h>
> > > +
> > > +#include <usb.h>
> > > +#include <usb/dwc2_udc.h>
> > > +
> > > +DECLARE_GLOBAL_DATA_PTR;
> > > +
> > > +void s_init(void) {}
> > > +
> > > +/*
> > > + * Miscellaneous platform dependent initialisations
> > > + */
> > > +int board_init(void)
> > 
> > I am thinking we can skip the board_init where it located at
> > original
> > board folder. If user has unique board specific initialization,
> > they
> > can still do it there.
> 
> See my reply to 6/6 .
> 
> Best regards,
> Marek Vasut
Marek Vasut Dec. 7, 2015, 2:23 p.m. UTC | #4
On Monday, December 07, 2015 at 02:32:04 PM, Chin Liang See wrote:
> On Mon, 2015-12-07 at 14:23 +0100, Marek Vasut wrote:
> > On Monday, December 07, 2015 at 01:53:48 PM, Chin Liang See wrote:
> > 
> > [...]
> > 
> > > > diff --git a/arch/arm/mach-socfpga/board.c b/arch/arm/mach
> > > > -socfpga/board.c
> > > > new file mode 100644
> > > > index 0000000..a41d089
> > > > --- /dev/null
> > > > +++ b/arch/arm/mach-socfpga/board.c
> > > 
> > > I am thinking this can go into misc.c instead new file.
> > 
> > misc.c is bloated with random crap already, I would like to keep
> > things
> > orderly a little. Let's keep the board code and platform code
> > separated.
> 
> Initial thinking misc.c should be as lean as possible but that seems
> not today. Can consider split them out per features such as usb.c
> ethernet.c.

There is no ethernet/usb... anything in misc.c and there shouldn't be.
All of this stuff is (or should be) probed from OF :-)

Best regards,
Marek Vasut
Chin Liang See Dec. 7, 2015, 2:29 p.m. UTC | #5
On Mon, 2015-12-07 at 15:23 +0100, Marek Vasut wrote:
> On Monday, December 07, 2015 at 02:32:04 PM, Chin Liang See wrote:
> > On Mon, 2015-12-07 at 14:23 +0100, Marek Vasut wrote:
> > > On Monday, December 07, 2015 at 01:53:48 PM, Chin Liang See
> > > wrote:
> > > 
> > > [...]
> > > 
> > > > > diff --git a/arch/arm/mach-socfpga/board.c b/arch/arm/mach
> > > > > -socfpga/board.c
> > > > > new file mode 100644
> > > > > index 0000000..a41d089
> > > > > --- /dev/null
> > > > > +++ b/arch/arm/mach-socfpga/board.c
> > > > 
> > > > I am thinking this can go into misc.c instead new file.
> > > 
> > > misc.c is bloated with random crap already, I would like to keep
> > > things
> > > orderly a little. Let's keep the board code and platform code
> > > separated.
> > 
> > Initial thinking misc.c should be as lean as possible but that
> > seems
> > not today. Can consider split them out per features such as usb.c
> > ethernet.c.
> 
> There is no ethernet/usb... anything in misc.c and there shouldn't
> be.
> All of this stuff is (or should be) probed from OF :-)

Looking at misc.c, yup, they are specific to socfpga such as system
manager emac registers. Till then, good from me

Acked-by: Chin Liang See <clsee@altera.com>

Thanks
Chin Liang


> 
> Best regards,
> Marek Vasut
Marek Vasut Dec. 7, 2015, 2:37 p.m. UTC | #6
On Monday, December 07, 2015 at 03:29:16 PM, Chin Liang See wrote:
> On Mon, 2015-12-07 at 15:23 +0100, Marek Vasut wrote:
> > On Monday, December 07, 2015 at 02:32:04 PM, Chin Liang See wrote:
> > > On Mon, 2015-12-07 at 14:23 +0100, Marek Vasut wrote:
> > > > On Monday, December 07, 2015 at 01:53:48 PM, Chin Liang See
> > > > wrote:
> > > > 
> > > > [...]
> > > > 
> > > > > > diff --git a/arch/arm/mach-socfpga/board.c b/arch/arm/mach
> > > > > > -socfpga/board.c
> > > > > > new file mode 100644
> > > > > > index 0000000..a41d089
> > > > > > --- /dev/null
> > > > > > +++ b/arch/arm/mach-socfpga/board.c
> > > > > 
> > > > > I am thinking this can go into misc.c instead new file.
> > > > 
> > > > misc.c is bloated with random crap already, I would like to keep
> > > > things
> > > > orderly a little. Let's keep the board code and platform code
> > > > separated.
> > > 
> > > Initial thinking misc.c should be as lean as possible but that
> > > seems
> > > not today. Can consider split them out per features such as usb.c
> > > ethernet.c.
> > 
> > There is no ethernet/usb... anything in misc.c and there shouldn't
> > be.
> > All of this stuff is (or should be) probed from OF :-)
> 
> Looking at misc.c, yup, they are specific to socfpga such as system
> manager emac registers. Till then, good from me

The cpu_eth_init() could use improvement, but we don't support generic
reset handling yet I believe. That's the only thing which is obviously
visible there, which could be improved.

The other thing which might use improvement is the FPGA registration,
I suspect that might recycle the bindings from current linux 4.4.x at
some point and move to DT as well.

Best regards,
Marek Vasut
Chin Liang See Dec. 7, 2015, 2:56 p.m. UTC | #7
On Mon, 2015-12-07 at 15:37 +0100, Marek Vasut wrote:
> On Monday, December 07, 2015 at 03:29:16 PM, Chin Liang See wrote:
> > On Mon, 2015-12-07 at 15:23 +0100, Marek Vasut wrote:
> > > On Monday, December 07, 2015 at 02:32:04 PM, Chin Liang See
> > > wrote:
> > > > On Mon, 2015-12-07 at 14:23 +0100, Marek Vasut wrote:
> > > > > On Monday, December 07, 2015 at 01:53:48 PM, Chin Liang See
> > > > > wrote:
> > > > > 
> > > > > [...]
> > > > > 
> > > > > > > diff --git a/arch/arm/mach-socfpga/board.c
> > > > > > > b/arch/arm/mach
> > > > > > > -socfpga/board.c
> > > > > > > new file mode 100644
> > > > > > > index 0000000..a41d089
> > > > > > > --- /dev/null
> > > > > > > +++ b/arch/arm/mach-socfpga/board.c
> > > > > > 
> > > > > > I am thinking this can go into misc.c instead new file.
> > > > > 
> > > > > misc.c is bloated with random crap already, I would like to
> > > > > keep
> > > > > things
> > > > > orderly a little. Let's keep the board code and platform code
> > > > > separated.
> > > > 
> > > > Initial thinking misc.c should be as lean as possible but that
> > > > seems
> > > > not today. Can consider split them out per features such as
> > > > usb.c
> > > > ethernet.c.
> > > 
> > > There is no ethernet/usb... anything in misc.c and there
> > > shouldn't
> > > be.
> > > All of this stuff is (or should be) probed from OF :-)
> > 
> > Looking at misc.c, yup, they are specific to socfpga such as system
> > manager emac registers. Till then, good from me
> 
> The cpu_eth_init() could use improvement, but we don't support
> generic
> reset handling yet I believe. That's the only thing which is
> obviously
> visible there, which could be improved.
> 
> The other thing which might use improvement is the FPGA registration,
> I suspect that might recycle the bindings from current linux 4.4.x at
> some point and move to DT as well.
> 

Nice, looking forward then :)

To further clean-up, I am thinking we can move do_bridge to
reset_manager.c too. I can do this if it sound good to you.

Thanks
Chin Liang


> Best regards,
> Marek Vasut
Marek Vasut Dec. 7, 2015, 5:46 p.m. UTC | #8
On Monday, December 07, 2015 at 03:56:01 PM, Chin Liang See wrote:
[...]
> > The cpu_eth_init() could use improvement, but we don't support
> > generic
> > reset handling yet I believe. That's the only thing which is
> > obviously
> > visible there, which could be improved.
> > 
> > The other thing which might use improvement is the FPGA registration,
> > I suspect that might recycle the bindings from current linux 4.4.x at
> > some point and move to DT as well.
> 
> Nice, looking forward then :)
> 
> To further clean-up, I am thinking we can move do_bridge to
> reset_manager.c too. I can do this if it sound good to you.

It's not reset-manager specific though, is it ?

Best regards,
Marek Vasut
Chin Liang See Dec. 8, 2015, 12:34 p.m. UTC | #9
On Mon, 2015-12-07 at 18:46 +0100, Marek Vasut wrote:
> On Monday, December 07, 2015 at 03:56:01 PM, Chin Liang See wrote:
> [...]
> > > The cpu_eth_init() could use improvement, but we don't support
> > > generic
> > > reset handling yet I believe. That's the only thing which is
> > > obviously
> > > visible there, which could be improved.
> > > 
> > > The other thing which might use improvement is the FPGA
> > > registration,
> > > I suspect that might recycle the bindings from current linux
> > > 4.4.x at
> > > some point and move to DT as well.
> > 
> > Nice, looking forward then :)
> > 
> > To further clean-up, I am thinking we can move do_bridge to
> > reset_manager.c too. I can do this if it sound good to you.
> 
> It's not reset-manager specific though, is it ?
> 

All bridges are still release through reset manager except the
fpga2sdram. Since we bridge assert at reset manager, consolidating
these deassert function will make misc.c cleaner.

Thanks
Chin Liang

> Best regards,
> Marek Vasut
Marek Vasut Dec. 8, 2015, 12:57 p.m. UTC | #10
On Tuesday, December 08, 2015 at 01:34:53 PM, Chin Liang See wrote:
> On Mon, 2015-12-07 at 18:46 +0100, Marek Vasut wrote:
> > On Monday, December 07, 2015 at 03:56:01 PM, Chin Liang See wrote:
> > [...]
> > 
> > > > The cpu_eth_init() could use improvement, but we don't support
> > > > generic
> > > > reset handling yet I believe. That's the only thing which is
> > > > obviously
> > > > visible there, which could be improved.
> > > > 
> > > > The other thing which might use improvement is the FPGA
> > > > registration,
> > > > I suspect that might recycle the bindings from current linux
> > > > 4.4.x at
> > > > some point and move to DT as well.
> > > 
> > > Nice, looking forward then :)
> > > 
> > > To further clean-up, I am thinking we can move do_bridge to
> > > reset_manager.c too. I can do this if it sound good to you.
> > 
> > It's not reset-manager specific though, is it ?
> 
> All bridges are still release through reset manager except the
> fpga2sdram. Since we bridge assert at reset manager, consolidating
> these deassert function will make misc.c cleaner.

OK, it might be better if we discuss this over a patch, so let's see
how that looks.

Best regards,
Marek Vasut
Chin Liang See Dec. 9, 2015, 1:46 p.m. UTC | #11
On Tue, 2015-12-08 at 13:57 +0100, Marek Vasut wrote:
> On Tuesday, December 08, 2015 at 01:34:53 PM, Chin Liang See wrote:
> > On Mon, 2015-12-07 at 18:46 +0100, Marek Vasut wrote:
> > > On Monday, December 07, 2015 at 03:56:01 PM, Chin Liang See
> > > wrote:
> > > [...]
> > > 
> > > > > The cpu_eth_init() could use improvement, but we don't
> > > > > support
> > > > > generic
> > > > > reset handling yet I believe. That's the only thing which is
> > > > > obviously
> > > > > visible there, which could be improved.
> > > > > 
> > > > > The other thing which might use improvement is the FPGA
> > > > > registration,
> > > > > I suspect that might recycle the bindings from current linux
> > > > > 4.4.x at
> > > > > some point and move to DT as well.
> > > > 
> > > > Nice, looking forward then :)
> > > > 
> > > > To further clean-up, I am thinking we can move do_bridge to
> > > > reset_manager.c too. I can do this if it sound good to you.
> > > 
> > > It's not reset-manager specific though, is it ?
> > 
> > All bridges are still release through reset manager except the
> > fpga2sdram. Since we bridge assert at reset manager, consolidating
> > these deassert function will make misc.c cleaner.
> 
> OK, it might be better if we discuss this over a patch, so let's see
> how that looks.
> 

Sure

Thanks
Chin Liang

> Best regards,
> Marek Vasut
diff mbox

Patch

diff --git a/arch/arm/mach-socfpga/Makefile b/arch/arm/mach-socfpga/Makefile
index 316b326..5cf9e23 100644
--- a/arch/arm/mach-socfpga/Makefile
+++ b/arch/arm/mach-socfpga/Makefile
@@ -8,7 +8,7 @@ 
 #
 
 obj-y	+= misc.o timer.o reset_manager.o system_manager.o clock_manager.o \
-	   fpga_manager.o scan_manager.o
+	   fpga_manager.o scan_manager.o board.o
 obj-$(CONFIG_SPL_BUILD) += spl.o freeze_controller.o
 
 # QTS-generated config file wrappers
diff --git a/arch/arm/mach-socfpga/board.c b/arch/arm/mach-socfpga/board.c
new file mode 100644
index 0000000..a41d089
--- /dev/null
+++ b/arch/arm/mach-socfpga/board.c
@@ -0,0 +1,64 @@ 
+/*
+ * Altera SoCFPGA common board code
+ *
+ * Copyright (C) 2015 Marek Vasut <marex@denx.de>
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#include <common.h>
+#include <errno.h>
+#include <asm/arch/reset_manager.h>
+#include <asm/io.h>
+
+#include <usb.h>
+#include <usb/dwc2_udc.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+void s_init(void) {}
+
+/*
+ * Miscellaneous platform dependent initialisations
+ */
+int board_init(void)
+{
+	/* Address of boot parameters for ATAG (if ATAG is used) */
+	gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100;
+
+	return 0;
+}
+
+#ifdef CONFIG_USB_GADGET
+struct dwc2_plat_otg_data socfpga_otg_data = {
+	.usb_gusbcfg	= 0x1417,
+};
+
+int board_usb_init(int index, enum usb_init_type init)
+{
+	int node[2], count;
+	fdt_addr_t addr;
+
+	count = fdtdec_find_aliases_for_id(gd->fdt_blob, "udc",
+					   COMPAT_ALTERA_SOCFPGA_DWC2USB,
+					   node, 2);
+	if (count <= 0)	/* No controller found. */
+		return 0;
+
+	addr = fdtdec_get_addr(gd->fdt_blob, node[0], "reg");
+	if (addr == FDT_ADDR_T_NONE) {
+		printf("UDC Controller has no 'reg' property!\n");
+		return -EINVAL;
+	}
+
+	/* Patch the address from OF into the controller pdata. */
+	socfpga_otg_data.regs_otg = addr;
+
+	return dwc2_udc_probe(&socfpga_otg_data);
+}
+
+int g_dnl_board_usb_cable_connected(void)
+{
+	return 1;
+}
+#endif