diff options
author | Amaury Pouly <amaury.pouly@gmail.com> | 2016-02-07 21:46:58 +0000 |
---|---|---|
committer | Amaury Pouly <amaury.pouly@gmail.com> | 2016-04-08 19:38:18 +0200 |
commit | f6c61eb11a13f7a5141a980f56b9a14b3309c449 (patch) | |
tree | d1c4a4d992f88e40eacb65d5e046b595fdcb512a /utils/hwstub/tools/lua | |
parent | a2f4c5201d78b9f351834b0512623eeac622280f (diff) | |
download | rockbox-f6c61eb11a13f7a5141a980f56b9a14b3309c449.tar.gz rockbox-f6c61eb11a13f7a5141a980f56b9a14b3309c449.zip |
hwstub: port hwstub_shell to the new library
Also use this opportunity to cleanup support for multiple devices: the shell
now supports dynamic changes in the device and will call init() everytime
a new device is selected, to prepare a new environment. The shell now
honors register width on register read/write. The shell also provides access
to variants as follows by creating a subtable under the register using the
variant type in UPPER case and having the same layout as a register.
For example if register HW.GPIO.DIR has variants "set" and "clr", those can
be used like this:
HW.GPIO.DIR.SET.write(0xff)
HW.GPIO.DIR.CLR.write(0xff00)
Change-Id: I943947fa98bce875de0cba4338e8b7196a4c1165
Diffstat (limited to 'utils/hwstub/tools/lua')
-rw-r--r-- | utils/hwstub/tools/lua/atj.lua | 5 | ||||
-rw-r--r-- | utils/hwstub/tools/lua/help.lua | 60 | ||||
-rw-r--r-- | utils/hwstub/tools/lua/jz.lua | 26 | ||||
-rw-r--r-- | utils/hwstub/tools/lua/load.lua | 32 | ||||
-rw-r--r-- | utils/hwstub/tools/lua/pp.lua | 25 | ||||
-rw-r--r-- | utils/hwstub/tools/lua/rk27xx.lua | 7 | ||||
-rw-r--r-- | utils/hwstub/tools/lua/stmp.lua | 42 |
7 files changed, 150 insertions, 47 deletions
diff --git a/utils/hwstub/tools/lua/atj.lua b/utils/hwstub/tools/lua/atj.lua index a1ad0c7505..16d2639f3a 100644 --- a/utils/hwstub/tools/lua/atj.lua +++ b/utils/hwstub/tools/lua/atj.lua @@ -4,7 +4,10 @@ ATJ = {} -hwstub.soc:select("atj213x") +function ATJ.init() + hwstub.soc:select("atj213x") +end + require "atj/gpio" require "atj/lcm" require "atj/dsp" diff --git a/utils/hwstub/tools/lua/help.lua b/utils/hwstub/tools/lua/help.lua new file mode 100644 index 0000000000..280382eb61 --- /dev/null +++ b/utils/hwstub/tools/lua/help.lua @@ -0,0 +1,60 @@ +-- +-- HELP +-- +HELP = hwstub.help + +function HELP:create_topic(name) + self[name] = { create_topic = HELP.create_topic, add = HELP.add, get_topic = HELP.get_topic } + return self[name] +end + +function HELP:get_topic(name) + return self[name] +end + +function HELP:add(text) + table.insert(self, text) +end + +do + local h = HELP:create_topic("hwstub") + h:add("This tool uses a number of well-defined namespaces (tables) to organise its features.") + h:add("The hwstub table contains a number of information and functions related to the tool itself.") + h:add("Of particular interest are") + h:add("* hwstub.host which holds host specific information.") + h:add("* hwstub.dev which holds device specific information. See DEV") + h:add("* hwstub.help (aka HELP) which holds the help. See HELP."); + h:add("* hwstub.soc which holds soc specific information. See HW"); + + h = HELP:create_topic("HELP"); + h:add("This variable redirects to hwstub.help and provides access to the help system."); + h:add("You can enhance the help using the following methods on any topic (including HELP itself)."); + h:add("* t:create_topic(s) to create a new subtopic named s under topic t"); + h:add("* t:add(s) to add a help line to topic t"); + h:add("* t:get_topic(s) to get the subtopic s under topic t"); + + h = HELP:create_topic("DEV"); + h:add("This variable redirects to hwstub.dev and provides direct access to the device."); + h:add("It contains some information about the device and the following methods."); + h:add("* read8/16/32(a) reads a 8/16/32-bit integer at address a atomically"); + h:add("* write8/16/32(a, v) writes the 8/16/32-bit integer v at address a atomically"); + h:add("* jump(a) jump to specified address"); + h:add("* call(a) call function at specified address and return to hwstub"); + h:add("* print_log() prints the device log"); + + h = HELP:create_topic("HW"); + h:add("This variable redirects to the current soc under hwstub.soc and should be changed by calling hwstub:soc:select only."); + h:add("The complete register tree can be found under HW in a well organised fashion."); + h:add("* HW.dev points to device dev"); + h:add("* HW.dev[i] points to device devi if there are several copies of the device at different addresses."); + h:add("* HW.dev.reg points to the register reg under dev"); + h:add("* HW.dev.reg[i] points to the register regi if there are several copies."); + h:add("* HW.dev.reg.f points to the field f under register reg."); + h:add("* HW.dev.reg.f.v gives the value of named value v of field f."); + h:add("* All registers can be read using HW.dev.reg.read() and written using HW.dev.reg.write(v)."); + h:add("* Register with a SCT variant also implement HW.dev.reg.set/clr/tog(v)."); + h:add("* All register field can be read using HW.dev.reg.f.read() and written using HW.dev.reg.f.write(v)."); + h:add("* Field writes can either give a integer or a named value to write(v)."); + h:add("* Register with a SCT variant also implement HW.dev.reg.f.set/clr/tog(v) with the same properties."); + h:add("* All devices, registers and fields also have descriptions available such as addresses."); +end diff --git a/utils/hwstub/tools/lua/jz.lua b/utils/hwstub/tools/lua/jz.lua new file mode 100644 index 0000000000..ab2cb8658f --- /dev/null +++ b/utils/hwstub/tools/lua/jz.lua @@ -0,0 +1,26 @@ +--- +--- Chip Identification +--- +JZ = { info = {} } + +local h = HELP:create_topic("JZ") +h:add("This table contains the abstraction of the different device blocks for the JZ.") +h:add("It allows one to use higher-level primitives rather than poking at register directly.") + +hh = h:create_topic("debug") +hh:add("STMP.debug(...) prints some debug output if JZ.debug_on is true and does nothing otherwise.") + +JZ.debug_on = false + +function STMP.debug(...) + if STMP.debug_on then print(...) end +end + +-- init +function JZ.init() + local desc = string.format("jz%04x%c", hwstub.dev.jz.chipid, hwstub.dev.jz.rev) + desc = desc:lower() + if not hwstub.soc:select(desc) then + print("Looking for soc " .. desc .. ": not found. Please load a soc by hand.") + end +end diff --git a/utils/hwstub/tools/lua/load.lua b/utils/hwstub/tools/lua/load.lua index f636360c4c..cafa82751e 100644 --- a/utils/hwstub/tools/lua/load.lua +++ b/utils/hwstub/tools/lua/load.lua @@ -1,14 +1,24 @@ package.path = string.sub(string.gsub(debug.getinfo(1).source, "load.lua", "?.lua"),2) .. ";" .. package.path - -if hwstub.dev.target.id == hwstub.dev.target.STMP then - require "stmp" -elseif hwstub.dev.target.id == hwstub.dev.target.PP then - require "pp" -elseif hwstub.dev.target.id == hwstub.dev.target.RK27 then - require "rk27xx" -elseif hwstub.dev.target.id == hwstub.dev.target.ATJ then - require "atj" -end - +require "stmp" +require "pp" +require "rk27xx" +require "atj" +require "jz" require "hwlib" require "dumper" + +LOAD = {} + +function LOAD.init() + if hwstub.dev.target.id == hwstub.dev.target.STMP then + STMP.init() + elseif hwstub.dev.target.id == hwstub.dev.target.PP then + PP.init() + elseif hwstub.dev.target.id == hwstub.dev.target.RK27 then + RK27XX.init() + elseif hwstub.dev.target.id == hwstub.dev.target.ATJ then + ATJ.init() + elseif hwstub.dev.target.id == hwstub.dev.target.JZ then + JZ.init() + end +end
\ No newline at end of file diff --git a/utils/hwstub/tools/lua/pp.lua b/utils/hwstub/tools/lua/pp.lua index f9234780e5..38a4c1d0a2 100644 --- a/utils/hwstub/tools/lua/pp.lua +++ b/utils/hwstub/tools/lua/pp.lua @@ -42,16 +42,6 @@ function PP.is_pp500x() return hwstub.dev.pp.chipid >= 0x5000 and hwstub.dev.pp.chipid < 0x5010 end -if PP.is_pp611x() then - identify("PP611x (aka GoForce6110)", "pp6110", "pp6110") -elseif PP.is_pp502x() then - identify("PP502x", "pp502x", "pp502x") -elseif PP.is_pp500x() then - identify("PP500x", "pp500x", "pp500x") -else - print(string.format("Unable to identify this chip as a PP: chipid=0x%x", hwstub.dev.pp.chipid)); -end - hh = h:create_topic("debug") hh:add("PP.debug(...) prints some debug output if PP.debug_on is true and does nothing otherwise.") @@ -66,6 +56,17 @@ hh:add("PP.debug(...) prints some debug output if PP.debug_on is true and does n PP.debug_on = false -if PP.info.chip ~= nil then - require "pp/gpio" +-- init +function PP.init() + if PP.is_pp611x() then + identify("PP611x (aka GoForce6110)", "pp6110", "pp6110") + elseif PP.is_pp502x() then + identify("PP502x", "pp502x", "pp502x") + elseif PP.is_pp500x() then + identify("PP500x", "pp500x", "pp500x") + else + print(string.format("Unable to identify this chip as a PP: chipid=0x%x", hwstub.dev.pp.chipid)); + end end + +require "pp/gpio" diff --git a/utils/hwstub/tools/lua/rk27xx.lua b/utils/hwstub/tools/lua/rk27xx.lua index 2a5bb9287c..f7f1f7a60f 100644 --- a/utils/hwstub/tools/lua/rk27xx.lua +++ b/utils/hwstub/tools/lua/rk27xx.lua @@ -4,5 +4,8 @@ RK27XX = {} -hwstub.soc:select("rk27xx") -require 'rk27xx/lcdif' +function RK27XX.init() + hwstub.soc:select("rk27xx") +end + +require 'rk27xx/lradc' diff --git a/utils/hwstub/tools/lua/stmp.lua b/utils/hwstub/tools/lua/stmp.lua index 807c18df8d..ea1cde9c6d 100644 --- a/utils/hwstub/tools/lua/stmp.lua +++ b/utils/hwstub/tools/lua/stmp.lua @@ -1,7 +1,6 @@ --- --- Chip Identification --- - STMP = { info = {} } local h = HELP:create_topic("STMP") @@ -49,18 +48,6 @@ function STMP.is_stmp3600() return hwstub.dev.stmp.chipid >= 0x3600 and hwstub.dev.stmp.chipid < 0x3700 end -if STMP.is_imx233() then - identify("STMP3780 (aka i.MX233)", "imx233", "imx233") -elseif STMP.is_stmp3700() then - identify("STMP3700", "stmp3700", "stmp3700") -elseif STMP.is_stmp3770() then - identify("STMP3770", "stmp3770", "stmp3700") -elseif STMP.is_stmp3600() then - identify("STMP3600", "stmp3600", "stmp3600") -else - print(string.format("Unable to identify this chip as a STMP: chipid=0x%x", hwstub.dev.stmp.chipid)); -end - hh = h:create_topic("debug") hh:add("STMP.debug(...) prints some debug output if STMP.debug_on is true and does nothing otherwise.") @@ -70,11 +57,24 @@ function STMP.debug(...) if STMP.debug_on then print(...) end end -if STMP.info.chip ~= nil then - require "stmp/digctl" - require "stmp/pinctrl" - require "stmp/lcdif" - require "stmp/pwm" - require "stmp/clkctrl" - require "stmp/i2c" -end
\ No newline at end of file +-- init +function STMP.init() + if STMP.is_imx233() then + identify("STMP3780 (aka i.MX233)", "imx233", "imx233") + elseif STMP.is_stmp3700() then + identify("STMP3700", "stmp3700", "stmp3700") + elseif STMP.is_stmp3770() then + identify("STMP3770", "stmp3770", "stmp3700") + elseif STMP.is_stmp3600() then + identify("STMP3600", "stmp3600", "stmp3600") + else + print(string.format("Unable to identify this chip as a STMP: chipid=0x%x", hwstub.dev.stmp.chipid)); + end +end + +require "stmp/digctl" +require "stmp/pinctrl" +require "stmp/lcdif" +require "stmp/pwm" +require "stmp/clkctrl" +require "stmp/i2c"
\ No newline at end of file |