ChanServ changed the topic of #glasgow to: glasgow debug tool · code https://github.com/GlasgowEmbedded/Glasgow · forum https://glasgow.whitequark.org · logs https://freenode.irclog.whitequark.org/glasgow
<kc8apf> re LPC; Google wanted POWER8 to talk to a LPC-connected EC so IBM wrote a bit-bang LPC driver in the firmware
<whitequark> AAAAAAAAAA
<kc8apf> then for POWER9, IBM needed FSI to boot the CPU but BMCs don't have FSI so they use the RISC co-processor in Aspeed BMCs to bit-bang FSI
<whitequark> AAAAAAAAa
<kc8apf> with the wonders of open source firmware, all of this available in github repos
<hl> strictly speaking, POWER9 shipped with a Linux kernel driver on the ast2500 BMC which bitbanged FSI using just GPIOs
<hl> the move to using the Coldfire coprocessor to get better bitbanging performance came later
<kc8apf> yes, yes
<TD-Linux> yeah my talos has a TPM port
<TD-Linux> 100% going to try to attach GlasgISA to it
<TD-Linux> so I can have a sb16 on power9
<hellsenberg> lol
<hellsenberg> kc8apf: heavily cursed
<hellsenberg> also the last bit, because those BMCs are swiss cheese
<hl> they are yes, the existing software stacks for them anyway
<kc8apf> Aspeed SoCs are terrible
<hl> they are pretty impressively mediocre yes
<kc8apf> Nuvoton BMCs are better but have their own quirks
<hl> you can tell from their datasheets that they're not exactly the A team
<hl> kc8apf: oh? I actually know really little about Nuvoton BMCs, I'd be interested to hear about them
<kc8apf> Nuvoton datasheets are a work of art
<hl> NDAd, right?
<kc8apf> yep
<hl> siiiiiiiigh
<hl> another electronics company for me to roll my eyes at
<hellsenberg> aspeed BMC datasheets are NDA'd too I think...
<hl> they are, yes
<kc8apf> they're also obfuscated
<hl> probably so you don't get to see how halfarsed they are
<hl> obfuscated?
<kc8apf> have you tried to make sense of them?
<hl> point
<hl> hellsenberg: here's an old one for reference: http://kb.nc.tc/_media/ipmi/aspeed/ast2050reg.pdf
<hellsenberg> don't worry, I have those already
<gruetzkopf> 2400 would be interesting for me
<kc8apf> gruetzkopf: you don't have that pdf already?
<hl> I don't have 2400 either actually
<gruetzkopf> i only have 2400 in devices
<kc8apf> things have appeared in whitequark's library
<whitequark> :D
<whitequark> ok so
<whitequark> i have an idea crystallizing for the SERDES+sideband refactor
<whitequark> i'm thinking i should define interfaces for ISERDES/OSERDES/IGPIO/OGPIO, all with stb/ack signaling
<whitequark> and they could either be implemented directly in the sane way, or, alternatively, on top of some other protocol like BSCAN
<whitequark> of course there should be an implementation of ISERDES on top of IGPIO and so on
* hellsenberg checks librarby
<hl> ...library?
<whitequark> Microcontroller/Aspeed
<whitequark> hl: pm me login:pw
<hellsenberg> oh, I think I would need a login too
<kc8apf> Microcontroller?
<whitequark> moved it out from Incoming
<kc8apf> they're not uCs though....
<whitequark> oh
<kc8apf> full ARM9 or ARM11 machines
<whitequark> i mean
<whitequark> haswell is a microcontroller
<kc8apf> hahah
<hellsenberg> O_o
<whitequark> and ivy bridge is a microprocessor
<futarisIRCcloud> :P
<whitequark> this isn't technically wrong is it? :p
<hellsenberg> ah, so microcontroller/SoC distinction is fading
<hellsenberg> but is an embedded controller the same thing as haswell-LP?
<whitequark> SoC is like "i'm making a microcontroller but i want to get paid more"
<kc8apf> I fall back to uC doesn't have an MMU
<whitequark> fine
<whitequark> where should we put it
<kc8apf> I'm sorry. I shouldn't have started a naming argument
<whitequark> that whose taxonomy is perfect shall cast the first mv
<hellsenberg> SoC *shrug*
<whitequark> no i mean
<whitequark> i don't care just tell me where to put it
<whitequark> oh we have a SoC directory
<whitequark> which is full of random unsorted crap
<kc8apf> yeah. there's another ast2400 thing there
<whitequark> ok i sorted it a bit
<hellsenberg> oh, who created eSPI?
<kc8apf> intel
<hellsenberg> i am curious about this: https://twitter.com/whitequark/status/1163948699535306753
<whitequark> no comment
krbtgt has joined #glasgow
<TD-Linux> I made some comments about the win2k sprite system and the person who wrote it at microsoft corrected me
<hl> oh god eSPI
<hl> i'm dismayed to hear people are actually using that now
<whitequark> TD-Linux: yes but you didn't call it "one of the worst things [intel] has ever done" i assume D:
<whitequark> awkward
<TD-Linux> :3
<hl> I assume the name of the eSPI architect isn't Marsia Mariner
<whitequark> no
<TD-Linux> I mean, your regular readers will know it's hyperbole because Intel is really good at making things that are even worse :^)
<hellsenberg> lmao
<TD-Linux> oh no I'm reading it now
<TD-Linux> >removes sideband pins
<TD-Linux> >still has CS, Alert, and Reset sidebands for every separate device
<TD-Linux> tunneling smbus over eSPI uses more pins than smbus
<hellsenberg> but it's not as easy to sniff, I guess
<whitequark> TD-Linux: ... yeah
<whitequark> what
<whitequark> why
<TD-Linux> smbus is 2 pins, adding a smbus to eSPI translator is 3 pins
<hl> in other news USB4 is supposed to have its spec released right about now. yet there's been no word. siigh.
<TD-Linux> well I guess you'd translate SMBUS interrupt to eSPI alert so it's 3 and 3
<hl> I mean when the USB4 spec is published I will probably read it and start screaming, so maybe it's for the best, but still, I was looking forward to its publication
<whitequark> TD-Linux: yes i understand it
<TD-Linux> whitequark, I thought I might have made a mistake cause I was "wut" too
<TD-Linux> how do IO address space read/writes work? I don't see a separate message type
<sorear> Given how much of the complexity of these protocols has to do with multimaster, I’m surprised I haven’t seen a token ring style reduced pin interface
<whitequark> page 61
<whitequark> sorear: DON'T GIVE THEM IDEAS
<TD-Linux> I'm confused about the transaction layer's cycle types vs the commands
<TD-Linux> sorear, mostly unrelated but a lot of lithium battery management chips use that as a way to avoid needing isolators
<TD-Linux> they just have to talk to the chip 4.2v up or down
<hellsenberg> O_o
<whitequark> TD-Linux: wtf
<whitequark> outstanding
<whitequark> tnt: figured out the cause of hangs on nmigen
<whitequark> as i expected, it was because usb requests weren't being cancelled
<whitequark> ok. so. should i pull the lever.
_whitenotifier-c has joined #glasgow
<_whitenotifier-c> [GlasgowEmbedded/Glasgow] whitequark pushed 1 commit to master [+0/-0/±1] https://git.io/fjblh
<_whitenotifier-c> [GlasgowEmbedded/Glasgow] whitequark 06798b8 - README: add forum link.
<_whitenotifier-c> [GlasgowEmbedded/Glasgow] whitequark pushed 1 commit to master [+0/-0/±1] https://git.io/fjb8f
<_whitenotifier-c> [GlasgowEmbedded/Glasgow] whitequark b8eb80b - README: add forum link.
<_whitenotifier-c> [GlasgowEmbedded/Glasgow] whitequark pushed 3 commits to master [+0/-0/±5] https://git.io/fjbzB
<_whitenotifier-c> [GlasgowEmbedded/Glasgow] whitequark f8508cb - access: add demultiplexer.cancel().
<_whitenotifier-c> [GlasgowEmbedded/Glasgow] whitequark d4f1aec - cli: flush and cancel demultiplexer after running applet.
<_whitenotifier-c> [GlasgowEmbedded/Glasgow] whitequark 80aef21 - cli: make FILENAME argument of run-prebuilt optional.
<_whitenotifier-c> [GlasgowEmbedded/Glasgow] whitequark pushed 10 commits to master [+2/-3/±65] https://git.io/fjbzE
<_whitenotifier-c> [GlasgowEmbedded/Glasgow] whitequark 18ea7fc - Bulk port of all gateware to nMigen compatibility layer.
<_whitenotifier-c> [GlasgowEmbedded/Glasgow] whitequark 3ec896d - gateware.analyzer: adjust for nMigen.
<_whitenotifier-c> [GlasgowEmbedded/Glasgow] whitequark 5fdf8a0 - gateware.pads: adjust for nMigen.
<_whitenotifier-c> [GlasgowEmbedded/Glasgow] ... and 7 more commits.
<_whitenotifier-c> [GlasgowEmbedded/Glasgow] whitequark deleted branch nmigen
<_whitenotifier-c> [Glasgow] whitequark deleted branch nmigen - https://git.io/fhhGp
<whitequark> done.
<whitequark> everything still has to be actually ported to nmigen tho
<whitequark> hrm
<_whitenotifier-c> [GlasgowEmbedded/Glasgow] whitequark pushed 1 commit to master [+0/-0/±1] https://git.io/fjbzz
<_whitenotifier-c> [GlasgowEmbedded/Glasgow] whitequark 52d62f4 - gateware.pads: fix tests.
<whitequark> yaaaay down to 2 failures
<_whitenotifier-c> [GlasgowEmbedded/Glasgow] whitequark pushed 4 commits to master [+0/-0/±4] https://git.io/fjbz7
<_whitenotifier-c> [GlasgowEmbedded/Glasgow] whitequark b3b7ff8 - gateware: adapt @simulation_test for nMigen.
<_whitenotifier-c> [GlasgowEmbedded/Glasgow] whitequark 6d9fb52 - gateware.lfsr: port to nMigen.
<_whitenotifier-c> [GlasgowEmbedded/Glasgow] whitequark d5ace4a - target.hardware: clean up temporary files (again).
<_whitenotifier-c> [GlasgowEmbedded/Glasgow] whitequark b889655 - target.hardware: remove obsolete code.
<_whitenotifier-c> [GlasgowEmbedded/Glasgow] whitequark pushed 2 commits to master [+0/-0/±2] https://git.io/fjbzp
<_whitenotifier-c> [GlasgowEmbedded/Glasgow] whitequark 8311c3a - target.hardware: clean up temporary files (again).
<_whitenotifier-c> [GlasgowEmbedded/Glasgow] whitequark 1e797bf - target.hardware: remove obsolete code.
<_whitenotifier-c> [GlasgowEmbedded/Glasgow] whitequark pushed 1 commit to master [+0/-0/±1] https://git.io/fjbg6
<_whitenotifier-c> [GlasgowEmbedded/Glasgow] whitequark 97a1b02 - applet: fix assertBuilds.
<tnt> whitequark: \o/
HexGlaze has quit [Ping timeout: 245 seconds]
HexGlaze has joined #glasgow
pie_ has joined #glasgow
thaytan has quit [Ping timeout: 268 seconds]
thaytan has joined #glasgow
pie_ has quit [Ping timeout: 252 seconds]
fibmod has quit [Ping timeout: 245 seconds]
fibmod has joined #glasgow
carl0s has joined #glasgow
yuriks has quit [Ping timeout: 250 seconds]
sorear has quit [Ping timeout: 250 seconds]
yuriks has joined #glasgow
sorear has joined #glasgow
Ultrasauce has quit [Ping timeout: 250 seconds]
Ultrasauce has joined #glasgow
<whitequark> ok, so here's my idea for the new Glasgow IO architecture
<whitequark> let's take OGPIO as an example.
<whitequark> it would have the following ports:
<whitequark> - data
<whitequark> - en (if high, causes data to appear on pins)
<whitequark> - o_tag
<whitequark> - i_tag
<whitequark> now, what are the tags? they're basically a buffer-aware ack mechanism
<whitequark> for example, suppose i have 4 registers inside the OGPIO for some reason. if i was using stb/ack signaling, it would mean that i can get a new value out there every 4 cycles.
<whitequark> but with en/tag signaling, what i can do is:
<whitequark> 1. present data, raise en; 2. each time i_tag changes, present new data; 3. once i'm out of data, lower en; 4. wait until i_tag == o_tag.
<whitequark> *pipeline-aware ack mechanism
<whitequark> i mean, maybe tags aren't the best idea for this. i'm not sure yet. maybe it should be something more like en/stb/empty
<whitequark> right, a pipeline is essentially a high latency FIFO, so one could imagine en/empty/full working
* tnt is lost
* hellsenberg is lost as well
<thaytan> whitequark, wishbone does something like that doesn't it?
<thaytan> it's been years since I looked at it
<whitequark> tnt: huh. that incomprehensible?
<whitequark> shit. let me try again
<whitequark> so what i'm trying to support is two primary use cases
<electronic_eel> whitequark: this OGPIO, will it always be just one bit / pin wide or can you also configure it to be a parallel bus of for example 8 bit width?
<whitequark> electronic_eel: i don't see what difference the width makes so it should be configurable
<whitequark> the semantics is exactly the same
<electronic_eel> ok. what about sending data to a foreign clock, like glasgow being spi slave?
<whitequark> that's more complicated
<electronic_eel> i know, that's why I'm asking ;)
<whitequark> i admit i haven't given it much thought yet
<whitequark> electronic_eel: the case i'm thinking about is things like SPI over BSCAN
<whitequark> well, one primary caes
<whitequark> the second primary case is the IOB FF latency
<whitequark> and sometimes CDC latency as well
<electronic_eel> sorry, I don't understand what IOB latency has to do with a concept like this
<electronic_eel> you need a mechanism to control the timing of en or ack signals in respect to the data, that is obvious
<electronic_eel> oh, another point that came to my mind: there are a bunch of protocols that use one wire for input and output and swtich directions based on commands, like SWD, eSPI,...
<whitequark> or just good old QSPI
<whitequark> yes. of course.
<electronic_eel> at least for cases where glasgow sends the command to switch, it would make sense to plan for that in the concept
<whitequark> oh, that's easy, oe is controlled with another OSERDES
<whitequark> ok so IOB latency.
<whitequark> or CDC.
<whitequark> let's say i have a JTAG applet and each input has a 2FF on it
<whitequark> this means that input data is delayed 2 cycles compared to my output data. i have to deal with that.
<electronic_eel> ok, but does the gateware need to do that or can it by done by the python program later on when it decodes the data?
<whitequark> of course gateware needs to do that
<whitequark> why would you possibly want this in python?!
<whitequark> i mean, that's not all
<whitequark> right now, you can drive JTAG at say 8 MHz but above you stumle into the problem that it's not pipelined (as in, doesn't treat the 2FFs as pipeline) and so it breaks
<whitequark> what i want is to drive JTAG at up to sysclk, with no additional logic like a PLL.
<whitequark> this means using DDR to drive the clock.
<whitequark> this also means i may need to use DDR to capture on a specific edge as well (i think not with JTAG but with other protocols certainly)
<whitequark> this means there's one more cycle of latency.
<whitequark> i want all of this to be handled transparently, such that you can mix and match various configurations
<electronic_eel> hmm, I fear I'm just stealing your time because I don't really understand the problems you are talking about. I'm an absolute noob at HDL and this is a big bit above my league
<whitequark> oh and re: doing things in python
<whitequark> there are two general problems
<whitequark> a) python absolutely sucks at bit manipulation
<whitequark> b) python is not the only bus master
<whitequark> for example i specifically want SPI over BSCAN to work completely in gateware
<whitequark> yes you could generate gigabytes of test vectors. no there is no reason to it's stupid
<hellsenberg> having to do bit manipulation with something that sucks at it sounds like hell
<whitequark> and yes you could push the latency handing into the SPI-over-BSCAN adapter, no there is no reason to again
<whitequark> i think gateware should just do something sane on every layer
<whitequark> electronic_eel: anyway. that's fine. i could never design the protection board, so it's all good we have diversity of skills
<whitequark> (i didn't even realize you could use FETs like that. although it's obvious in retrospect.)
<electronic_eel> yes, there are a lot of different skills combined here in the channel and that makes it intersting
<electronic_eel> I also always wanted to learn a bit HDL, thought Glasgow would be a good opportunity for that
<whitequark> sure, why not
<whitequark> most of HDL currently in glasgow is fairly primitive
<whitequark> which makes it easier to learn from it, I think
<whitequark> it's really written with a lot of KISS. which unfortunately no longer really cuts it
<hellsenberg> maybe KIASAP would do (keep it as simple as possible)
<hellsenberg> or not, maybe divide and conquer would do better? *shrugs*
<whitequark> tbh i think most of those catchphrases are useless
<whitequark> or worse than useless even
* hellsenberg carefully reads
<hellsenberg> > Invoking the ‘single responsibility principle’, programmers have been known to brutally decompose software into a terrifyingly large number of small interlocking pieces—a craft rarely seen outside of obscenely expensive watches, or bash.
<hellsenberg> O_o
<whitequark> tef has a way with words.
<hellsenberg> oh, this is written by tef?
<whitequark> yes
<hellsenberg> good to know, I'll check their writings
<hellsenberg> excellent read. thanks for sharing!
pie_ has joined #glasgow
pie_ has quit [Ping timeout: 250 seconds]
ali_as has joined #glasgow
pie_ has joined #glasgow
carl0s has quit [Remote host closed the connection]