diff --git a/Makefile.am b/Makefile.am index e7cfdfb6..ceed83fd 100644 --- a/Makefile.am +++ b/Makefile.am @@ -46,8 +46,6 @@ freedom_metal_header_generator_SOURCES = \ metal_header/sifive_fe310_g000_pll.h \ metal_header/sifive_fe310_g000_prci.c++ \ metal_header/sifive_fe310_g000_prci.h \ - metal_header/sifive_fu540_c000_l2.c++ \ - metal_header/sifive_fu540_c000_l2.h \ metal_header/sifive_global_external_interrupts0.c++ \ metal_header/sifive_global_external_interrupts0.h \ metal_header/sifive_gpio0.c++ \ @@ -62,6 +60,8 @@ freedom_metal_header_generator_SOURCES = \ metal_header/sifive_i2c0.h \ metal_header/sifive_local_external_interrupts0.c++ \ metal_header/sifive_local_external_interrupts0.h \ + metal_header/sifive_l2pf0.c++ \ + metal_header/sifive_l2pf0.h \ metal_header/sifive_pwm0.c++ \ metal_header/sifive_pwm0.h \ metal_header/sifive_rtc0.c++ \ @@ -107,7 +107,6 @@ freedom_bare_header_generator_SOURCES = \ bare_header/sifive_fe310_g000_lfrosc.h \ bare_header/sifive_fe310_g000_prci.h \ bare_header/sifive_fe310_g000_pll.h \ - bare_header/sifive_fu540_c000_l2.h \ bare_header/sifive_global_external_interrupts0.h \ bare_header/sifive_gpio0.h \ bare_header/sifive_gpio_buttons.h \ @@ -115,6 +114,7 @@ freedom_bare_header_generator_SOURCES = \ bare_header/sifive_gpio_switches.h \ bare_header/sifive_i2c0.h \ bare_header/sifive_local_external_interrupts0.h \ + bare_header/sifive_l2pf0.h \ bare_header/sifive_pwm0.h \ bare_header/sifive_rtc0.h \ bare_header/sifive_spi0.h \ diff --git a/Makefile.in b/Makefile.in index 25fb4a49..1d242ddb 100644 --- a/Makefile.in +++ b/Makefile.in @@ -136,7 +136,6 @@ am_freedom_metal_header_generator_OBJECTS = \ metal_header/freedom_metal_header_generator-sifive_fe310_g000_lfrosc.$(OBJEXT) \ metal_header/freedom_metal_header_generator-sifive_fe310_g000_pll.$(OBJEXT) \ metal_header/freedom_metal_header_generator-sifive_fe310_g000_prci.$(OBJEXT) \ - metal_header/freedom_metal_header_generator-sifive_fu540_c000_l2.$(OBJEXT) \ metal_header/freedom_metal_header_generator-sifive_global_external_interrupts0.$(OBJEXT) \ metal_header/freedom_metal_header_generator-sifive_gpio0.$(OBJEXT) \ metal_header/freedom_metal_header_generator-sifive_gpio_button.$(OBJEXT) \ @@ -144,6 +143,7 @@ am_freedom_metal_header_generator_OBJECTS = \ metal_header/freedom_metal_header_generator-sifive_gpio_switch.$(OBJEXT) \ metal_header/freedom_metal_header_generator-sifive_i2c0.$(OBJEXT) \ metal_header/freedom_metal_header_generator-sifive_local_external_interrupts0.$(OBJEXT) \ + metal_header/freedom_metal_header_generator-sifive_l2pf0.$(OBJEXT) \ metal_header/freedom_metal_header_generator-sifive_pwm0.$(OBJEXT) \ metal_header/freedom_metal_header_generator-sifive_rtc0.$(OBJEXT) \ metal_header/freedom_metal_header_generator-sifive_spi0.$(OBJEXT) \ @@ -589,8 +589,6 @@ freedom_metal_header_generator_SOURCES = \ metal_header/sifive_fe310_g000_pll.h \ metal_header/sifive_fe310_g000_prci.c++ \ metal_header/sifive_fe310_g000_prci.h \ - metal_header/sifive_fu540_c000_l2.c++ \ - metal_header/sifive_fu540_c000_l2.h \ metal_header/sifive_global_external_interrupts0.c++ \ metal_header/sifive_global_external_interrupts0.h \ metal_header/sifive_gpio0.c++ \ @@ -605,6 +603,8 @@ freedom_metal_header_generator_SOURCES = \ metal_header/sifive_i2c0.h \ metal_header/sifive_local_external_interrupts0.c++ \ metal_header/sifive_local_external_interrupts0.h \ + metal_header/sifive_l2pf0.c++ \ + metal_header/sifive_l2pf0.h \ metal_header/sifive_pwm0.c++ \ metal_header/sifive_pwm0.h \ metal_header/sifive_rtc0.c++ \ @@ -649,7 +649,6 @@ freedom_bare_header_generator_SOURCES = \ bare_header/sifive_fe310_g000_lfrosc.h \ bare_header/sifive_fe310_g000_prci.h \ bare_header/sifive_fe310_g000_pll.h \ - bare_header/sifive_fu540_c000_l2.h \ bare_header/sifive_global_external_interrupts0.h \ bare_header/sifive_gpio0.h \ bare_header/sifive_gpio_buttons.h \ @@ -657,6 +656,7 @@ freedom_bare_header_generator_SOURCES = \ bare_header/sifive_gpio_switches.h \ bare_header/sifive_i2c0.h \ bare_header/sifive_local_external_interrupts0.h \ + bare_header/sifive_l2pf0.h \ bare_header/sifive_pwm0.h \ bare_header/sifive_rtc0.h \ bare_header/sifive_spi0.h \ @@ -1005,9 +1005,6 @@ metal_header/freedom_metal_header_generator-sifive_fe310_g000_pll.$(OBJEXT): \ metal_header/freedom_metal_header_generator-sifive_fe310_g000_prci.$(OBJEXT): \ metal_header/$(am__dirstamp) \ metal_header/$(DEPDIR)/$(am__dirstamp) -metal_header/freedom_metal_header_generator-sifive_fu540_c000_l2.$(OBJEXT): \ - metal_header/$(am__dirstamp) \ - metal_header/$(DEPDIR)/$(am__dirstamp) metal_header/freedom_metal_header_generator-sifive_global_external_interrupts0.$(OBJEXT): \ metal_header/$(am__dirstamp) \ metal_header/$(DEPDIR)/$(am__dirstamp) @@ -1029,6 +1026,9 @@ metal_header/freedom_metal_header_generator-sifive_i2c0.$(OBJEXT): \ metal_header/freedom_metal_header_generator-sifive_local_external_interrupts0.$(OBJEXT): \ metal_header/$(am__dirstamp) \ metal_header/$(DEPDIR)/$(am__dirstamp) +metal_header/freedom_metal_header_generator-sifive_l2pf0.$(OBJEXT): \ + metal_header/$(am__dirstamp) \ + metal_header/$(DEPDIR)/$(am__dirstamp) metal_header/freedom_metal_header_generator-sifive_pwm0.$(OBJEXT): \ metal_header/$(am__dirstamp) \ metal_header/$(DEPDIR)/$(am__dirstamp) @@ -1098,13 +1098,13 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@metal_header/$(DEPDIR)/freedom_metal_header_generator-sifive_fe310_g000_lfrosc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@metal_header/$(DEPDIR)/freedom_metal_header_generator-sifive_fe310_g000_pll.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@metal_header/$(DEPDIR)/freedom_metal_header_generator-sifive_fe310_g000_prci.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@metal_header/$(DEPDIR)/freedom_metal_header_generator-sifive_fu540_c000_l2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@metal_header/$(DEPDIR)/freedom_metal_header_generator-sifive_global_external_interrupts0.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@metal_header/$(DEPDIR)/freedom_metal_header_generator-sifive_gpio0.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@metal_header/$(DEPDIR)/freedom_metal_header_generator-sifive_gpio_button.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@metal_header/$(DEPDIR)/freedom_metal_header_generator-sifive_gpio_led.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@metal_header/$(DEPDIR)/freedom_metal_header_generator-sifive_gpio_switch.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@metal_header/$(DEPDIR)/freedom_metal_header_generator-sifive_i2c0.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@metal_header/$(DEPDIR)/freedom_metal_header_generator-sifive_l2pf0.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@metal_header/$(DEPDIR)/freedom_metal_header_generator-sifive_local_external_interrupts0.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@metal_header/$(DEPDIR)/freedom_metal_header_generator-sifive_pwm0.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@metal_header/$(DEPDIR)/freedom_metal_header_generator-sifive_rtc0.Po@am__quote@ @@ -1456,20 +1456,6 @@ metal_header/freedom_metal_header_generator-sifive_fe310_g000_prci.obj: metal_he @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(freedom_metal_header_generator_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o metal_header/freedom_metal_header_generator-sifive_fe310_g000_prci.obj `if test -f 'metal_header/sifive_fe310_g000_prci.c++'; then $(CYGPATH_W) 'metal_header/sifive_fe310_g000_prci.c++'; else $(CYGPATH_W) '$(srcdir)/metal_header/sifive_fe310_g000_prci.c++'; fi` -metal_header/freedom_metal_header_generator-sifive_fu540_c000_l2.o: metal_header/sifive_fu540_c000_l2.c++ -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(freedom_metal_header_generator_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT metal_header/freedom_metal_header_generator-sifive_fu540_c000_l2.o -MD -MP -MF metal_header/$(DEPDIR)/freedom_metal_header_generator-sifive_fu540_c000_l2.Tpo -c -o metal_header/freedom_metal_header_generator-sifive_fu540_c000_l2.o `test -f 'metal_header/sifive_fu540_c000_l2.c++' || echo '$(srcdir)/'`metal_header/sifive_fu540_c000_l2.c++ -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) metal_header/$(DEPDIR)/freedom_metal_header_generator-sifive_fu540_c000_l2.Tpo metal_header/$(DEPDIR)/freedom_metal_header_generator-sifive_fu540_c000_l2.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='metal_header/sifive_fu540_c000_l2.c++' object='metal_header/freedom_metal_header_generator-sifive_fu540_c000_l2.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(freedom_metal_header_generator_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o metal_header/freedom_metal_header_generator-sifive_fu540_c000_l2.o `test -f 'metal_header/sifive_fu540_c000_l2.c++' || echo '$(srcdir)/'`metal_header/sifive_fu540_c000_l2.c++ - -metal_header/freedom_metal_header_generator-sifive_fu540_c000_l2.obj: metal_header/sifive_fu540_c000_l2.c++ -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(freedom_metal_header_generator_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT metal_header/freedom_metal_header_generator-sifive_fu540_c000_l2.obj -MD -MP -MF metal_header/$(DEPDIR)/freedom_metal_header_generator-sifive_fu540_c000_l2.Tpo -c -o metal_header/freedom_metal_header_generator-sifive_fu540_c000_l2.obj `if test -f 'metal_header/sifive_fu540_c000_l2.c++'; then $(CYGPATH_W) 'metal_header/sifive_fu540_c000_l2.c++'; else $(CYGPATH_W) '$(srcdir)/metal_header/sifive_fu540_c000_l2.c++'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) metal_header/$(DEPDIR)/freedom_metal_header_generator-sifive_fu540_c000_l2.Tpo metal_header/$(DEPDIR)/freedom_metal_header_generator-sifive_fu540_c000_l2.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='metal_header/sifive_fu540_c000_l2.c++' object='metal_header/freedom_metal_header_generator-sifive_fu540_c000_l2.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(freedom_metal_header_generator_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o metal_header/freedom_metal_header_generator-sifive_fu540_c000_l2.obj `if test -f 'metal_header/sifive_fu540_c000_l2.c++'; then $(CYGPATH_W) 'metal_header/sifive_fu540_c000_l2.c++'; else $(CYGPATH_W) '$(srcdir)/metal_header/sifive_fu540_c000_l2.c++'; fi` - metal_header/freedom_metal_header_generator-sifive_global_external_interrupts0.o: metal_header/sifive_global_external_interrupts0.c++ @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(freedom_metal_header_generator_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT metal_header/freedom_metal_header_generator-sifive_global_external_interrupts0.o -MD -MP -MF metal_header/$(DEPDIR)/freedom_metal_header_generator-sifive_global_external_interrupts0.Tpo -c -o metal_header/freedom_metal_header_generator-sifive_global_external_interrupts0.o `test -f 'metal_header/sifive_global_external_interrupts0.c++' || echo '$(srcdir)/'`metal_header/sifive_global_external_interrupts0.c++ @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) metal_header/$(DEPDIR)/freedom_metal_header_generator-sifive_global_external_interrupts0.Tpo metal_header/$(DEPDIR)/freedom_metal_header_generator-sifive_global_external_interrupts0.Po @@ -1568,6 +1554,20 @@ metal_header/freedom_metal_header_generator-sifive_local_external_interrupts0.ob @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(freedom_metal_header_generator_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o metal_header/freedom_metal_header_generator-sifive_local_external_interrupts0.obj `if test -f 'metal_header/sifive_local_external_interrupts0.c++'; then $(CYGPATH_W) 'metal_header/sifive_local_external_interrupts0.c++'; else $(CYGPATH_W) '$(srcdir)/metal_header/sifive_local_external_interrupts0.c++'; fi` +metal_header/freedom_metal_header_generator-sifive_l2pf0.o: metal_header/sifive_l2pf0.c++ +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(freedom_metal_header_generator_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT metal_header/freedom_metal_header_generator-sifive_l2pf0.o -MD -MP -MF metal_header/$(DEPDIR)/freedom_metal_header_generator-sifive_l2pf0.Tpo -c -o metal_header/freedom_metal_header_generator-sifive_l2pf0.o `test -f 'metal_header/sifive_l2pf0.c++' || echo '$(srcdir)/'`metal_header/sifive_l2pf0.c++ +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) metal_header/$(DEPDIR)/freedom_metal_header_generator-sifive_l2pf0.Tpo metal_header/$(DEPDIR)/freedom_metal_header_generator-sifive_l2pf0.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='metal_header/sifive_l2pf0.c++' object='metal_header/freedom_metal_header_generator-sifive_l2pf0.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(freedom_metal_header_generator_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o metal_header/freedom_metal_header_generator-sifive_l2pf0.o `test -f 'metal_header/sifive_l2pf0.c++' || echo '$(srcdir)/'`metal_header/sifive_l2pf0.c++ + +metal_header/freedom_metal_header_generator-sifive_l2pf0.obj: metal_header/sifive_l2pf0.c++ +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(freedom_metal_header_generator_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT metal_header/freedom_metal_header_generator-sifive_l2pf0.obj -MD -MP -MF metal_header/$(DEPDIR)/freedom_metal_header_generator-sifive_l2pf0.Tpo -c -o metal_header/freedom_metal_header_generator-sifive_l2pf0.obj `if test -f 'metal_header/sifive_l2pf0.c++'; then $(CYGPATH_W) 'metal_header/sifive_l2pf0.c++'; else $(CYGPATH_W) '$(srcdir)/metal_header/sifive_l2pf0.c++'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) metal_header/$(DEPDIR)/freedom_metal_header_generator-sifive_l2pf0.Tpo metal_header/$(DEPDIR)/freedom_metal_header_generator-sifive_l2pf0.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='metal_header/sifive_l2pf0.c++' object='metal_header/freedom_metal_header_generator-sifive_l2pf0.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(freedom_metal_header_generator_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o metal_header/freedom_metal_header_generator-sifive_l2pf0.obj `if test -f 'metal_header/sifive_l2pf0.c++'; then $(CYGPATH_W) 'metal_header/sifive_l2pf0.c++'; else $(CYGPATH_W) '$(srcdir)/metal_header/sifive_l2pf0.c++'; fi` + metal_header/freedom_metal_header_generator-sifive_pwm0.o: metal_header/sifive_pwm0.c++ @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(freedom_metal_header_generator_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT metal_header/freedom_metal_header_generator-sifive_pwm0.o -MD -MP -MF metal_header/$(DEPDIR)/freedom_metal_header_generator-sifive_pwm0.Tpo -c -o metal_header/freedom_metal_header_generator-sifive_pwm0.o `test -f 'metal_header/sifive_pwm0.c++' || echo '$(srcdir)/'`metal_header/sifive_pwm0.c++ @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) metal_header/$(DEPDIR)/freedom_metal_header_generator-sifive_pwm0.Tpo metal_header/$(DEPDIR)/freedom_metal_header_generator-sifive_pwm0.Po diff --git a/bare_header/freedom-bare_header-generator.c++ b/bare_header/freedom-bare_header-generator.c++ index c74df8ba..d219b159 100644 --- a/bare_header/freedom-bare_header-generator.c++ +++ b/bare_header/freedom-bare_header-generator.c++ @@ -35,7 +35,6 @@ #include "bare_header/sifive_fe310_g000_lfrosc.h" #include "bare_header/sifive_fe310_g000_pll.h" #include "bare_header/sifive_fe310_g000_prci.h" -#include "bare_header/sifive_fu540_c000_l2.h" #include "bare_header/sifive_global_external_interrupts0.h" #include "bare_header/sifive_gpio0.h" #include "bare_header/sifive_gpio_buttons.h" @@ -43,6 +42,7 @@ #include "bare_header/sifive_gpio_switches.h" #include "bare_header/sifive_hca_0_5_x.h" #include "bare_header/sifive_i2c0.h" +#include "bare_header/sifive_l2pf0.h" #include "bare_header/sifive_local_external_interrupts0.h" #include "bare_header/sifive_pwm0.h" #include "bare_header/sifive_rtc0.h" @@ -158,7 +158,6 @@ static void write_config_file(const fdt &dtb, fstream &os, std::string cfg_file, devices.push_back(new sifive_fe310_g000_lfrosc(os, dtb)); devices.push_back(new sifive_fe310_g000_prci(os, dtb)); devices.push_back(new sifive_fe310_g000_pll(os, dtb)); - devices.push_back(new sifive_fu540_c000_l2(os, dtb)); devices.push_back(new sifive_global_external_interrupts0(os, dtb)); devices.push_back(new sifive_gpio0(os, dtb)); devices.push_back(new sifive_gpio_buttons(os, dtb)); @@ -166,6 +165,7 @@ static void write_config_file(const fdt &dtb, fstream &os, std::string cfg_file, devices.push_back(new sifive_gpio_switches(os, dtb)); devices.push_back(new sifive_i2c0(os, dtb)); devices.push_back(new sifive_local_external_interrupts0(os, dtb)); + devices.push_back(new sifive_l2pf0(os, dtb)); devices.push_back(new sifive_pwm0(os, dtb)); devices.push_back(new sifive_rtc0(os, dtb)); devices.push_back(new sifive_spi0(os, dtb)); diff --git a/bare_header/sifive_ccache0.h b/bare_header/sifive_ccache0.h index e9705f14..0f25b9f5 100644 --- a/bare_header/sifive_ccache0.h +++ b/bare_header/sifive_ccache0.h @@ -11,7 +11,7 @@ class sifive_ccache0 : public Device { public: sifive_ccache0(std::ostream &os, const fdt &dtb) - : Device(os, dtb, "sifive,ccache0") {} + : Device(os, dtb, "sifive,(ccache0|fu540-c000,l2)") {} int get_index(const node &n) { return Device::get_index(n, compat_string); } @@ -19,8 +19,8 @@ class sifive_ccache0 : public Device { dtb.match(std::regex(compat_string), [&](node n) { emit_comment(n); - emit_base(n); - emit_size(n); + emit_base("sifive,ccache0", n); + emit_size("sifive,ccache0", n); os << std::endl; }); @@ -28,9 +28,46 @@ class sifive_ccache0 : public Device { void emit_offsets() { if (dtb.match(std::regex(compat_string), [](const node n) {}) != 0) { - emit_compat(); - emit_offset(METAL_SIFIVE_CCACHE_CONFIG_LABEL, 0x0); - emit_offset(METAL_SIFIVE_CCACHE_WAYENABLE_LABEL, 0x8); + + emit_compat("sifive,ccache0"); + emit_offset("sifive,ccache0", METAL_SIFIVE_CCACHE_CONFIG_LABEL, 0x0000); + emit_offset("sifive,ccache0", METAL_SIFIVE_CCACHE_WAYENABLE_LABEL, + 0x0008); + emit_offset("sifive,ccache0", METAL_SIFIVE_CCACHE_ECCINJECTERROR_LABEL, + 0X0040); + emit_offset("sifive,ccache0", METAL_SIFIVE_CCACHE_DIRECCFIXLOW_LABEL, + 0X0100); + emit_offset("sifive,ccache0", METAL_SIFIVE_CCACHE_DIRECCFIXHIGH_LABEL, + 0X0104); + emit_offset("sifive,ccache0", METAL_SIFIVE_CCACHE_DIRECCFIXCOUNT_LABEL, + 0X0108); + emit_offset("sifive,ccache0", METAL_SIFIVE_CCACHE_DIRECCFAILLOW_LABEL, + 0X0120); + emit_offset("sifive,ccache0", METAL_SIFIVE_CCACHE_DIRECCFAILHIGH_LABEL, + 0X0124); + emit_offset("sifive,ccache0", METAL_SIFIVE_CCACHE_DIRECCFAILCOUNT_LABEL, + 0X0128); + emit_offset("sifive,ccache0", METAL_SIFIVE_CCACHE_DATECCFIXLOW_LABEL, + 0X0140); + emit_offset("sifive,ccache0", METAL_SIFIVE_CCACHE_DATECCFIXHIGH_LABEL, + 0X0144); + emit_offset("sifive,ccache0", METAL_SIFIVE_CCACHE_DATECCFIXCOUNT_LABEL, + 0X0148); + emit_offset("sifive,ccache0", METAL_SIFIVE_CCACHE_DATECCFAILLOW_LABEL, + 0X0160); + emit_offset("sifive,ccache0", METAL_SIFIVE_CCACHE_DATECCFAILHIGH_LABEL, + 0X0164); + emit_offset("sifive,ccache0", METAL_SIFIVE_CCACHE_DATECCFAILCOUNT_LABEL, + 0X0168); + emit_offset("sifive,ccache0", METAL_SIFIVE_CCACHE_FLUSH64_LABEL, 0X0200); + emit_offset("sifive,ccache0", METAL_SIFIVE_CCACHE_FLUSH32_LABEL, 0X0240); + emit_offset("sifive,ccache0", METAL_SIFIVE_CCACHE_WAYMASK0_LABEL, 0X0800); + emit_offset("sifive,ccache0", METAL_SIFIVE_CCACHE_PMEVENTSELECT0_LABEL, + 0X2000); + emit_offset("sifive,ccache0", METAL_SIFIVE_CCACHE_PMCLIENTFILTER_LABEL, + 0X2800); + emit_offset("sifive,ccache0", METAL_SIFIVE_CCACHE_PMEVENTCOUNTER0_LABEL, + 0X3000); os << std::endl; } diff --git a/bare_header/sifive_fu540_c000_l2.h b/bare_header/sifive_l2pf0.h similarity index 56% rename from bare_header/sifive_fu540_c000_l2.h rename to bare_header/sifive_l2pf0.h index 617ecb93..50e5346a 100644 --- a/bare_header/sifive_fu540_c000_l2.h +++ b/bare_header/sifive_l2pf0.h @@ -1,17 +1,17 @@ -/* Copyright 2019 SiFive, Inc */ +/* Copyright 2020 SiFive, Inc */ /* SPDX-License-Identifier: Apache-2.0 */ -#ifndef __BARE_HEADER_SIFIVE_FU540_C000_L2__H -#define __BARE_HEADER_SIFIVE_FU540_C000_L2__H +#ifndef __BARE_HEADER_SIFIVE_L2PF0__H +#define __BARE_HEADER_SIFIVE_L2PF0__H #include "bare_header/device.h" #include -class sifive_fu540_c000_l2 : public Device { +class sifive_l2pf0 : public Device { public: - sifive_fu540_c000_l2(std::ostream &os, const fdt &dtb) - : Device(os, dtb, "sifive,fu540-c000,l2") {} + sifive_l2pf0(std::ostream &os, const fdt &dtb) + : Device(os, dtb, "sifive,l2pf0") {} int get_index(const node &n) { return Device::get_index(n, compat_string); } @@ -29,8 +29,8 @@ class sifive_fu540_c000_l2 : public Device { void emit_offsets() { if (dtb.match(std::regex(compat_string), [](const node n) {}) != 0) { emit_compat(); - emit_offset(METAL_SIFIVE_FU540_C000_L2_CONFIG_LABEL, 0x0); - emit_offset(METAL_SIFIVE_FU540_C000_L2_WAYENABLE_LABEL, 0x8); + emit_offset("BASIC_CONTROL", 0x00); + emit_offset("USER_CONTROL", 0x04); os << std::endl; } diff --git a/header-labels.h b/header-labels.h index 5302e775..2ee6a36c 100644 --- a/header-labels.h +++ b/header-labels.h @@ -44,6 +44,25 @@ /* CCACHE */ #define METAL_SIFIVE_CCACHE_CONFIG_LABEL "CONFIG" #define METAL_SIFIVE_CCACHE_WAYENABLE_LABEL "WAYENABLE" +#define METAL_SIFIVE_CCACHE_ECCINJECTERROR_LABEL "ECCINJECTERROR" +#define METAL_SIFIVE_CCACHE_DIRECCFIXLOW_LABEL "DIRECCFIXLOW" +#define METAL_SIFIVE_CCACHE_DIRECCFIXHIGH_LABEL "DIRECCFIXHIGH" +#define METAL_SIFIVE_CCACHE_DIRECCFIXCOUNT_LABEL "DIRECCFIXCOUNT" +#define METAL_SIFIVE_CCACHE_DIRECCFAILLOW_LABEL "DIRECCFAILLOW" +#define METAL_SIFIVE_CCACHE_DIRECCFAILHIGH_LABEL "DIRECCFAILHIGH" +#define METAL_SIFIVE_CCACHE_DIRECCFAILCOUNT_LABEL "DIRECCFAILCOUNT" +#define METAL_SIFIVE_CCACHE_DATECCFIXLOW_LABEL "DATECCFIXLOW" +#define METAL_SIFIVE_CCACHE_DATECCFIXHIGH_LABEL "DATECCFIXHIGH" +#define METAL_SIFIVE_CCACHE_DATECCFIXCOUNT_LABEL "DATECCFIXCOUNT" +#define METAL_SIFIVE_CCACHE_DATECCFAILLOW_LABEL "DATECCFAILLOW" +#define METAL_SIFIVE_CCACHE_DATECCFAILHIGH_LABEL "DATECCFAILHIGH" +#define METAL_SIFIVE_CCACHE_DATECCFAILCOUNT_LABEL "DATECCFAILCOUNT" +#define METAL_SIFIVE_CCACHE_FLUSH64_LABEL "FLUSH64" +#define METAL_SIFIVE_CCACHE_FLUSH32_LABEL "FLUSH32" +#define METAL_SIFIVE_CCACHE_WAYMASK0_LABEL "WAYMASK0" +#define METAL_SIFIVE_CCACHE_PMEVENTSELECT0_LABEL "PMEVENTSELECT0" +#define METAL_SIFIVE_CCACHE_PMCLIENTFILTER_LABEL "PMCLIENTFILTER" +#define METAL_SIFIVE_CCACHE_PMEVENTCOUNTER0_LABEL "PMEVENTCOUNTER0" /* BUSERROR */ #define METAL_SIFIVE_BUSERROR_CAUSE_LABEL "CAUSE" diff --git a/metal_header/freedom-metal_header-generator.c++ b/metal_header/freedom-metal_header-generator.c++ index 474a278e..478763ab 100644 --- a/metal_header/freedom-metal_header-generator.c++ +++ b/metal_header/freedom-metal_header-generator.c++ @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -47,9 +48,6 @@ #include #include -/* FU540-C000 Devices */ -#include - /* STL */ #include #include @@ -160,6 +158,7 @@ static void prepare_devices(const fdt &dtb, fstream &os, devices.push_back(new sifive_gpio_led(os, dtb)); devices.push_back(new sifive_gpio_switch(os, dtb)); devices.push_back(new sifive_i2c0(os, dtb)); + devices.push_back(new sifive_l2pf0(os, dtb)); devices.push_back(new sifive_pwm0(os, dtb)); devices.push_back(new sifive_rtc0(os, dtb)); devices.push_back(new sifive_spi0(os, dtb)); @@ -176,9 +175,6 @@ static void prepare_devices(const fdt &dtb, fstream &os, devices.push_back(new sifive_fe310_g000_lfrosc(os, dtb)); devices.push_back(new sifive_fe310_g000_pll(os, dtb)); devices.push_back(new sifive_fe310_g000_prci(os, dtb)); - - /* FU540-C000 Devices */ - devices.push_back(new sifive_fu540_c000_l2(os, dtb)); } static void write_h_file(const fdt &dtb, fstream &os, std::string h_file, diff --git a/metal_header/sifive_ccache0.c++ b/metal_header/sifive_ccache0.c++ index bf8c3ba5..e7454d87 100644 --- a/metal_header/sifive_ccache0.c++ +++ b/metal_header/sifive_ccache0.c++ @@ -1,4 +1,4 @@ -/* Copyright 2019 SiFive, Inc */ +/* Copyright 2020 SiFive, Inc */ /* SPDX-License-Identifier: Apache-2.0 */ #include @@ -6,83 +6,48 @@ #include sifive_ccache0::sifive_ccache0(std::ostream &os, const fdt &dtb) - : Device(os, dtb, "sifive,ccache0") {} + : Device(os, dtb, "sifive,(ccache0|fu540-c000,l2)") {} void sifive_ccache0::include_headers() { dtb.match(std::regex(compat_string), - [&](node n) { emit_include(compat_string); }); + [&](node n) { emit_include("sifive,ccache0"); }); } -void sifive_ccache0::declare_inlines() { - Inline *func; - std::list extern_inlines; - int count = 0; +void sifive_ccache0::create_defines() { dtb.match(std::regex(compat_string), [&](node n) { - if (count == 0) { - func = create_inline_dec("control_base", "uintptr_t", - "struct metal_cache *cache"); - extern_inlines.push_back(func); + /* Get list of interrupt IDs */ + std::string interrupt_arr = "{ "; + for (int i = 0; i < n.get_fields_count("interrupts"); i++) { + interrupt_arr += std::to_string(n.get_fields("interrupts")[i]); + interrupt_arr += ", "; } - count++; - }); - os << "\n"; - os << "/* --------------------- sifive_ccache0 ------------ */\n"; - while (!extern_inlines.empty()) { - func = extern_inlines.front(); - extern_inlines.pop_front(); - emit_inline_dec(func, "sifive_ccache0"); - delete func; - } - os << "\n"; -} + interrupt_arr += "}"; -void sifive_ccache0::define_inlines() { - Inline *func; - std::list extern_inlines; + emit_def("METAL_SIFIVE_CCACHE0_INTERRUPTS", interrupt_arr); - int count = 0; - dtb.match(std::regex(compat_string), [&](node n) { - if (count == 0) { - func = create_inline_def("control_base", "uintptr_t", - "(uintptr_t)cache == (uintptr_t)&__metal_dt_" + - n.handle(), - platform_define(n, METAL_BASE_ADDRESS_LABEL), - "struct metal_cache *cache"); - add_inline_body(func, "else", "0"); - extern_inlines.push_back(func); - } - count++; - }); - os << "\n"; - os << "/* --------------------- sifive_ccache0 ------------ */\n"; - while (!extern_inlines.empty()) { - func = extern_inlines.front(); - extern_inlines.pop_front(); - emit_inline_def(func, "sifive_ccache0"); - delete func; - } - os << "\n"; -} + /* Interrupt parent controller */ + std::string int_parent_value = "NULL"; + n.maybe_tuple("interrupt-parent", tuple_t(), [&]() {}, + [&](node m) { + int_parent_value = + "&__metal_dt_" + m.handle() + ".controller"; + }); -void sifive_ccache0::declare_structs() { - dtb.match(std::regex(compat_string), - [&](node n) { emit_struct_decl("sifive_ccache0", n); }); -} + emit_def("METAL_SIFIVE_CCACHE0_INTERRUPT_PARENT", int_parent_value); -void sifive_ccache0::define_structs() { - dtb.match(std::regex(compat_string), [&](node n) { - emit_struct_begin("sifive_ccache0", n); + emit_def("METAL_CACHE_DRIVER_PREFIX", "sifive_ccache0"); - emit_struct_field("cache.vtable", - "&__metal_driver_vtable_sifive_ccache0.cache"); + uint32_t perfmon_count = 0; - emit_struct_end(); - }); -} + if (n.field_exists("sifive,perfmon-counters")) { + /* Get available L2 cache performance counters */ + perfmon_count = n.get_fields("sifive,perfmon-counters")[0]; + } + emit_def("METAL_SIFIVE_CCACHE0_PERFMON_COUNTERS", + std::to_string(perfmon_count)); -void sifive_ccache0::create_handles() { - dtb.match(std::regex(compat_string), [&](node n) { - emit_def_handle("__METAL_DT_SIFIVE_CCACHE0_HANDLE", n, ".cache"); + /* Set handle as NULL, for API compatibility */ + emit_def("__METAL_DT_SIFIVE_CCACHE0_HANDLE", "(struct metal_cache *)NULL"); }); } diff --git a/metal_header/sifive_ccache0.h b/metal_header/sifive_ccache0.h index e325086c..75abeda8 100644 --- a/metal_header/sifive_ccache0.h +++ b/metal_header/sifive_ccache0.h @@ -1,4 +1,4 @@ -/* Copyright 2019 SiFive, Inc */ +/* Copyright 2020 SiFive, Inc */ /* SPDX-License-Identifier: Apache-2.0 */ #ifndef __METAL_HEADER_SIFIVE_CCACHE0__H @@ -12,11 +12,7 @@ class sifive_ccache0 : public Device { public: sifive_ccache0(std::ostream &os, const fdt &dtb); void include_headers(); - void declare_inlines(); - void define_inlines(); - void declare_structs(); - void define_structs(); - void create_handles(); + void create_defines(); }; #endif diff --git a/metal_header/sifive_fu540_c000_l2.c++ b/metal_header/sifive_fu540_c000_l2.c++ deleted file mode 100644 index 4faacb47..00000000 --- a/metal_header/sifive_fu540_c000_l2.c++ +++ /dev/null @@ -1,88 +0,0 @@ -/* Copyright 2019 SiFive, Inc */ -/* SPDX-License-Identifier: Apache-2.0 */ - -#include - -#include - -sifive_fu540_c000_l2::sifive_fu540_c000_l2(std::ostream &os, const fdt &dtb) - : Device(os, dtb, "sifive,fu540-c000,l2") {} - -void sifive_fu540_c000_l2::include_headers() { - dtb.match(std::regex(compat_string), - [&](node n) { emit_include(compat_string); }); -} - -void sifive_fu540_c000_l2::declare_inlines() { - Inline *func; - std::list extern_inlines; - int count = 0; - - dtb.match(std::regex(compat_string), [&](node n) { - if (count == 0) { - func = create_inline_dec("control_base", "uintptr_t", - "struct metal_cache *cache"); - extern_inlines.push_back(func); - } - count++; - }); - os << "\n"; - os << "/* --------------------- sifive_fu540_c000_l2 ------------ */\n"; - while (!extern_inlines.empty()) { - func = extern_inlines.front(); - extern_inlines.pop_front(); - emit_inline_dec(func, "sifive_fu540_c000_l2"); - delete func; - } - os << "\n"; -} - -void sifive_fu540_c000_l2::define_inlines() { - Inline *func; - std::list extern_inlines; - - int count = 0; - dtb.match(std::regex(compat_string), [&](node n) { - if (count == 0) { - func = create_inline_def("control_base", "uintptr_t", - "(uintptr_t)cache == (uintptr_t)&__metal_dt_" + - n.handle(), - platform_define(n, METAL_BASE_ADDRESS_LABEL), - "struct metal_cache *cache"); - add_inline_body(func, "else", "0"); - extern_inlines.push_back(func); - } - count++; - }); - os << "\n"; - os << "/* --------------------- sifive_fu540_c000_l2 ------------ */\n"; - while (!extern_inlines.empty()) { - func = extern_inlines.front(); - extern_inlines.pop_front(); - emit_inline_def(func, "sifive_fu540_c000_l2"); - delete func; - } - os << "\n"; -} - -void sifive_fu540_c000_l2::declare_structs() { - dtb.match(std::regex(compat_string), - [&](node n) { emit_struct_decl("sifive_fu540_c000_l2", n); }); -} - -void sifive_fu540_c000_l2::define_structs() { - dtb.match(std::regex(compat_string), [&](node n) { - emit_struct_begin("sifive_fu540_c000_l2", n); - - emit_struct_field("cache.vtable", - "&__metal_driver_vtable_sifive_fu540_c000_l2.cache"); - - emit_struct_end(); - }); -} - -void sifive_fu540_c000_l2::create_handles() { - dtb.match(std::regex(compat_string), [&](node n) { - emit_def_handle("__METAL_DT_SIFIVE_FU540_C000_L2_HANDLE", n, ".cache"); - }); -} diff --git a/metal_header/sifive_fu540_c000_l2.h b/metal_header/sifive_fu540_c000_l2.h deleted file mode 100644 index e788248a..00000000 --- a/metal_header/sifive_fu540_c000_l2.h +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright 2019 SiFive, Inc */ -/* SPDX-License-Identifier: Apache-2.0 */ - -#ifndef __METAL_HEADER_TEMPLATE_DEVICE__H -#define __METAL_HEADER_TEMPLATE_DEVICE__H - -#include - -#include - -class sifive_fu540_c000_l2 : public Device { -public: - sifive_fu540_c000_l2(std::ostream &os, const fdt &dtb); - void include_headers(); - void declare_inlines(); - void define_inlines(); - void declare_structs(); - void define_structs(); - void create_handles(); -}; - -#endif diff --git a/metal_header/sifive_l2pf0.c++ b/metal_header/sifive_l2pf0.c++ new file mode 100644 index 00000000..783e0b96 --- /dev/null +++ b/metal_header/sifive_l2pf0.c++ @@ -0,0 +1,44 @@ +/* Copyright 2020 SiFive, Inc */ +/* SPDX-License-Identifier: Apache-2.0 */ + +#include + +#include + +sifive_l2pf0::sifive_l2pf0(std::ostream &os, const fdt &dtb) + : Device(os, dtb, "sifive,l2pf0") {} + +void sifive_l2pf0::include_headers() { + dtb.match(std::regex(compat_string), + [&](node n) { emit_include(compat_string); }); +} + +void sifive_l2pf0::create_defines() { + dtb.match(std::regex(compat_string), [&](node n) { + uint32_t val = 0; + /* Generate defines for L2 prefetch parameters */ + + if (n.field_exists("sifive,spf-queue-entries")) { + val = n.get_fields("sifive,spf-queue-entries")[0]; + } + emit_def("METAL_SIFIVE_L2PF0_QUEUE_ENTRIES", std::to_string(val)); + + val = 0; + if (n.field_exists("sifive,spf-window-bits")) { + val = n.get_fields("sifive,spf-window-bits")[0]; + } + emit_def("METAL_SIFIVE_L2PF0_WINDOW_BITS", std::to_string(val)); + + val = 0; + if (n.field_exists("sifive,spf-distance-bits")) { + val = n.get_fields("sifive,spf-distance-bits")[0]; + } + emit_def("METAL_SIFIVE_L2PF0_DISTANCE_BITS", std::to_string(val)); + + val = 0; + if (n.field_exists("sifive,spf-streams")) { + val = n.get_fields("sifive,spf-streams")[0]; + } + emit_def("METAL_SIFIVE_L2PF0_STREAMS", std::to_string(val)); + }); +} diff --git a/metal_header/sifive_l2pf0.h b/metal_header/sifive_l2pf0.h new file mode 100644 index 00000000..1e1e993a --- /dev/null +++ b/metal_header/sifive_l2pf0.h @@ -0,0 +1,18 @@ +/* Copyright 2020 SiFive, Inc */ +/* SPDX-License-Identifier: Apache-2.0 */ + +#ifndef __METAL_HEADER_SIFIVE_L2PF0__H +#define __METAL_HEADER_SIFIVE_L2PF0__H + +#include + +#include + +class sifive_l2pf0 : public Device { +public: + sifive_l2pf0(std::ostream &os, const fdt &dtb); + void include_headers(); + void create_defines(); +}; + +#endif