[PATCH 10/15] HiFive1: add clock driver support

Denis Obrezkov denisobrezkov at gmail.com
Mon Aug 21 16:25:19 UTC 2017


2017-08-17 17:13 GMT+02:00 Gedare Bloom <gedare at rtems.org>:

> On Wed, Aug 16, 2017 at 11:13 AM, Denis Obrezkov
> <denisobrezkov at gmail.com> wrote:
> > ---
> >  c/src/lib/libbsp/riscv32/hifive1/clock/clock.c | 67
> ++++++++++++++++++++++++++
> >  1 file changed, 67 insertions(+)
> >  create mode 100644 c/src/lib/libbsp/riscv32/hifive1/clock/clock.c
> >
> > diff --git a/c/src/lib/libbsp/riscv32/hifive1/clock/clock.c
> b/c/src/lib/libbsp/riscv32/hifive1/clock/clock.c
> > new file mode 100644
> > index 0000000..74132ed
> > --- /dev/null
> > +++ b/c/src/lib/libbsp/riscv32/hifive1/clock/clock.c
> > @@ -0,0 +1,67 @@
> > +/*
> > + * Copyright (c) 2017 Denis Obrezkov <denisobrezkov at gmail.com>
> > + *
> > + * The license and distribution terms for this file may be
> > + * found in the file LICENSE in this distribution or at
> > + * http://www.rtems.org/license/LICENSE.
> > + */
> > +
> > +
> > +#include <bsp/irq.h>
> > +#include <bsp/fatal.h>
> > +#include <bsp/fe310.h>
> > +
> > +
> > +static void FE310_clock_driver_support_install_isr(
> > +  rtems_isr_entry Clock_isr
> > +)
> > +{
> > +  rtems_status_code sc = RTEMS_SUCCESSFUL;
> > +
> > +  sc = rtems_interrupt_handler_install(
> > +    1,
> > +    "Clock",
> > +    RTEMS_INTERRUPT_UNIQUE,
> > +    (rtems_interrupt_handler) Clock_isr,
> > +    NULL
> > +  );
> > +  if ( sc != RTEMS_SUCCESSFUL ) {
> > +    rtems_fatal_error_occurred(0xdeadbeef);
> > +  }
> > +}
> > +
> > +static void FE310_clock_driver_support_at_tick ( void )
> > +{
> Does the timer automatically re-load?
>
 No, we reload it in interrupt_dispatch routine.
 I think now that it is not right. Should we place it here?

> > +}
> > +
> > +static void FE310_clock_init ( void )
> > +{
> > +  volatile uint64_t * mtime = (volatile uint64_t *)0x0200bff8;
> > +  volatile uint64_t * mtimecmp = (volatile uint64_t *)0x02004000;
> > +  (*mtimecmp) = (*mtime) + FE310_CLOCK_PERIOD + 0x3000;
> > +  asm volatile ("csrci mstatus, 0x8");
> > +  asm volatile ("li t0, 0x80\n\t"
> > +                "csrs mie, t0");
> > +  asm volatile ("csrsi mstatus, 0x8");
> It would be good to have inline functions for reading/writing all of
> these special purpose registers.
>
> > +}
> > +
> > +static void FE310_clock_driver_support_shutdown_hardware( void )
> > +{
> > +}
> > +
> > +#define Clock_driver_support_initialize_hardware() \
> > +  FE310_clock_init()
> > +
> > +#define CLOCK_DRIVER_USE_DUMMY_TIMECOUNTER
> > +
> > +#define Clock_driver_support_install_isr(isr,old) \
> > +  FE310_clock_driver_support_install_isr ( isr )
> > +
> > +#define Clock_driver_support_at_tick() \
> > +  FE310_clock_driver_support_at_tick()
> > +
> > +#define Clock_driver_support_shutdown_hardware() \
> > +  FE310_clock_driver_support_shutdown_hardware()
> > +
> > +#include "../../../shared/clockdrv_shell.h"
> > +
> > --
> > 2.1.4
> >
> > _______________________________________________
> > devel mailing list
> > devel at rtems.org
> > http://lists.rtems.org/mailman/listinfo/devel
>



-- 
Regards, Denis Obrezkov
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20170821/fdfbc16e/attachment.html>


More information about the devel mailing list