[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-0002.html>
More information about the devel
mailing list