[U-Boot-Users] [PATCH 1/3] Add the RapidIO framework for U-Boot
Zhang Wei
Wei.Zhang at freescale.com
Fri Jan 11 03:10:32 CET 2008
>
> On Jan 10, 2008, at 5:38 AM, Zhang Wei wrote:
>
> > The patch adds the RapidIO framework into U-Boot. The board
> > configuration
> > can be added into individual rio_init_board() function.
> Some functions
> > about RapidIO can be added later.
>
> can you explain what might get added in the future. At this
> point all
> this code seems to exist to just do fsl_rio_quirk.
Now only fsl_rio_quirk. We can add other jobs such as RapidIO network
enumeration in the future.
Cheers!
Wei.
>
> > The support for Freescale PowerPC RapidIO controller is also added.
> >
> > Signed-off-by: Zhang Wei <wei.zhang at freescale.com>
> > ---
> > Makefile | 1 +
> > drivers/rio/Makefile | 35 ++++++++++++++++++++++++++
> > drivers/rio/fsl_rio.c | 64
> ++++++++++++++++++++++++++++++++++++++++
> > ++++++++
> > drivers/rio/rio.c | 65
> ++++++++++++++++++++++++++++++++++++++++
> > +++++++++
> > include/common.h | 3 ++
> > include/rio.h | 46 ++++++++++++++++++++++++++++++++++
> > include/rio_ids.h | 9 +++++++
> > lib_ppc/board.c | 5 ++++
> > 8 files changed, 228 insertions(+), 0 deletions(-)
> > create mode 100644 drivers/rio/Makefile
> > create mode 100644 drivers/rio/fsl_rio.c
> > create mode 100644 drivers/rio/rio.c
> > create mode 100644 include/rio.h
> > create mode 100644 include/rio_ids.h
>
> [snip]
>
> > diff --git a/drivers/rio/fsl_rio.c b/drivers/rio/fsl_rio.c
> > new file mode 100644
> > index 0000000..c8bfa92
> > --- /dev/null
> > +++ b/drivers/rio/fsl_rio.c
> > @@ -0,0 +1,64 @@
> > +/*
> > + * Copyright (C) 2008 Freescale Semiconductor, Inc. All rights
> > reserved.
> > + *
> > + * Author: Zhang Wei, wei.zhang at freescale.com, Jan 2008
> > + *
> > + * Description:
> > + * Freescale PowerPC RapidIO controller initialization file.
> > + *
> > + * This 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.
> > + *
> > + */
> > +
> > +#include <common.h>
> > +
> > +#ifdef CONFIG_RAPIDIO
>
> you don't need to do file protection like this anymore with the new
> build system.
>
> >
> > +#include <command.h>
> > +#include <malloc.h>
> > +#include <rio.h>
> > +#include <rio_ids.h>
> > +
> > +#include <asm/processor.h>
> > +#include <asm/io.h>
> > +#include <asm/immap_86xx.h>
> > +#include <asm/io.h>
> > +
> > +void fsl_rio_init(void *base, int busno)
> > +{
> > + struct rio_dev *dev;
> > + volatile ccsr_rio_t *rio = base;
> > + struct rio_controller *hose;
> > +
> > + dev = malloc(sizeof(struct rio_dev));
> > + memset(dev, 0, sizeof(struct rio_dev));
> > +
> > + dev->vendor = in_be32(&rio->didcar) & 0xffff;
> > + dev->device = (in_be32(&rio->didcar) >> 16) & 0xffff;
> > +
> > + hose = malloc(sizeof(struct rio_controller));
> > + memset(hose, 0, sizeof(struct rio_controller));
> > +
> > + INIT_LIST_HEAD(&hose->dev_list);
> > + hose->busno = busno;
> > + hose->base = base;
> > + hose->self = dev;
> > + list_add_tail(&hose->node, &rio_hose_list);
> > +
> > + printf("RIO%d (%04x:%04x) on 0x%08x\n", hose->busno,
> dev->vendor,
> > + dev->device, base);
> > +}
> > +
> > +void fsl_rio_quirk(struct rio_controller *hose, struct
> rio_dev *rdev)
> > +{
> > +#ifdef FSL_RIO_IP_V2
> > + volatile ccsr_rio_t *rio = hose->base;
> > + /* Set the controller to accept all packets
> > + * without checking the target ID
> > + */
> > + out_be32(&rio->ptaacr, 1);
> > +#endif
> > +}
> > +#endif
> > diff --git a/drivers/rio/rio.c b/drivers/rio/rio.c
> > new file mode 100644
> > index 0000000..9391384
> > --- /dev/null
> > +++ b/drivers/rio/rio.c
> > @@ -0,0 +1,65 @@
> > +/*
> > + * Copyright (C) 2007-2008 Freescale Semiconductor, Inc.
> All rights
> > reserved.
> > + *
> > + * Author: Zhang Wei, wei.zhang at freescale.com, Jun 2007
> > + *
> > + * Description:
> > + * RapidIO initialization file.
> > + *
> > + * This 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.
> > + *
> > + */
> > +
> > +#include <common.h>
> > +
> > +#ifdef CONFIG_RAPIDIO
> > +
> > +#include <command.h>
> > +#include <linux/list.h>
> > +#include <rio.h>
> > +#include <rio_ids.h>
> > +#include <asm/processor.h>
> > +#include <asm/io.h>
> > +
> > +struct list_head rio_hose_list;
> > +
> > +struct rio_quirk rio_post_quirk[] = {
> > + {RIO_VENDOR_ID_FREESCALE, RIO_DEVICE_ID_MPC8548E,
> fsl_rio_quirk},
> > + {RIO_VENDOR_ID_FREESCALE, RIO_DEVICE_ID_MPC8548, fsl_rio_quirk},
> > + {RIO_VENDOR_ID_FREESCALE, RIO_DEVICE_ID_MPC8568E,
> fsl_rio_quirk},
> > + {RIO_VENDOR_ID_FREESCALE, RIO_DEVICE_ID_MPC8568, fsl_rio_quirk},
> > + {RIO_VENDOR_ID_FREESCALE, RIO_DEVICE_ID_MPC8641, fsl_rio_quirk},
> > + {RIO_VENDOR_ID_FREESCALE, RIO_DEVICE_ID_MPC8641D,
> fsl_rio_quirk},
> > + {},
> > +};
> > +
> > +void rio_hose_post(void)
> > +{
> > + struct rio_controller *hose;
> > + struct rio_quirk *post_quirk;
> > +
> > + list_for_each_entry(hose, &rio_hose_list, node)
> > + for (post_quirk = rio_post_quirk;
> > + post_quirk->vendor || post_quirk->device;
> post_quirk++)
> > + if ((post_quirk->vendor == hose->self->vendor)
> > + && (post_quirk->device ==
> hose->self->device)
> > + && post_quirk->quirk) {
> > + post_quirk->quirk(hose, hose->self);
> > + break;
> > + }
> > +}
>
> do we really need a full blown quirk system, or can we just let the
> board code handle this?
>
> >
> > +
> > +void rio_init(void)
> > +{
> > + INIT_LIST_HEAD(&rio_hose_list);
> > +
> > + /* Call board specific rio_init() */
> > + rio_init_board();
>
> what's the point of this. Why not just do this from some
> pre-existing
> board init function?
>
> >
> > +
> > + rio_hose_post();
> > +}
> > +
> > +#endif /* CONFIG_RAPIDIO */
>
>
>
>
More information about the U-Boot
mailing list