is the reason that we have adjusting entries in the first place to not have to do things that are too tedious during the bookkeeping process but still be able to shore them up to make the financial statement reporting correct at the end when we actually present the financial statements month end quarter end year end. So we're just simply going to reverse the the entry we did closing this long-term portion back into the the current portion so that everything is represented with this one account so that when the bookkeeper makes the next payment they can just do the same thing they normally do according to the amortization schedule and put it to that normal current account and tie out to the balance for that current account. All right so let's do that so note that if I go in here we could do this a couple different ways if I look at the reversing entry here's the journal entry if I if I go into it QuickBooks has this pretty neat just reverse thing down here now which will reverse it exactly so we could use that that would be the easiest thing to do but since there's only two accounts affected we can also kind of use the register so let's practice using the register and then we'll look at the journal entry so I'm going to close this out and then I'm going to go back and then I'm going to go into the first tab and let's go down to the transactions and into the chart of accounts close up the hand buggy and then we're looking for the account type of current liabilities so we've got other current liabilities then I'm looking for the loans here's the two loans you can see them with these indented items and so what I want is this loan that had the current portion I can use the register on any balance sheet account this is an a reversing entry that doesn't have an income statement portion to it it's only a balance sheet activity so I could use either the short term or the long term if I go down to the long term I could use either one to do the entry in so let's go back to the short term I think that's where we entered last time and I'll go into the register with that one and we're going to say actually maybe it would even be easier to go into the long term let's go back the long term might be easier to see because it'll close out to zero let's go into the long term one so I'm getting confused I'm confusing people but here's this one let's go into this register here for the chase and so this one needs to go down to zero so that's easy to see so I'm gonna go okay let's hit the drop down let's make a journal entry to do that as of the day after the cutoff date the cutoff date for us was 229 the end of February so 0301 24 reversing entries always the day after I'm going to call it a reversing entry and tree and then I'm gonna say that it's gonna decrease by the amount that's in there 56769.59 bringing it back down to zero the other side's gonna go into loan payable short-term portion there's this one for chase and that should bring it back to the current balance including both short and long term all right let's close it or save it which will close it and then we'll go into it again edit it see it as a journal entry so you can see now I'm gonna copy the reversing and put it in the description on both line items so you can see now that the loan payable we reversed it the long term portion we debited bringing it down it was you know at 56769 59 it's gonna go back down to zero and then we're gonna credit or increase the current portion so that the whole loan is represented in that one account under the current liability let's save and close it and then we'll check it out I think that looks good thus far so we've done well we're gonna go over to the balance sheet here and then and then run it and let's see what we have we're gonna go down and say that we have been in the current liabilities the the as of so as of the cutoff date it's at 13108 54 and then we reversed it back to this 69879 13 which matches the full balance on the amortization schedule so that if the bookkeepers making payments according to the amortization schedule they can just worry about that one account making the decrease to cash recording the interest portion and the reduction of the principal which will make the new total loan balance in one account go down to 688 1056 so that's the general idea if I go to the long-term side of things we broke out the long-term portion for the purposes of reporting and then we closed it back out so that the bookkeeper doesn't need to work worry about it even if we're the bookkeeper internally if I go into one of these accounts you can see that here it is with a journal entry there's the adjusting entry if I bring it up to 131 we have the reversing entries so we enter the adjusting entry and then we simply reversed it right back out okay so that's the idea looks movie be to the end so let's go ahead and take a look at our trial balance see where we stand well this is where we are in the balance sheet to do to do and I'm going fast and then here it is on the income statement we didn't do anything to the income statement so nothing happened there it's the same low mizmo and we're going to go to the tab to the right and then here's our trustee trial balance so February is the cutoff we didn't do anything to February this time we reversed what we did to February in a prior presentation on the loan payable short-term versus the long-term portions where was the short-term short-term versus the long-term portions income statement remains the same


Artaea, the white queen of Tor, offers Tarzan freedom for his companions if he will remain as her mate. Hoping to influence his decision, she shows him and Wong Tai the treasure cave of Tor. Toldo, an enormous lion chained to the floor, guards the treasure. Avarice, greed for power and envy of what he considers Tarzan's good fortune, causes Wong Tai to lead Artaea into the mistaken belief that the ape man is in love with Jeanette. Later, Artaea definitely states the condition under which Tarzan's companions may leave. The ape man must remain willingly, the alternative, death by sacrifice or torture for them all. To demonstrate what is in store for them, if Tarzan refuses, Artaea conducts the white group to a balcony overlooking a small arena. An unarmed yellow man is thrust into the enclosure. As he stands below them, smiling contemptuously up at Artaea, Toldo, the huge guardian lion of her treasure vault, bounds into the pit. As the white men stare, fascinated at the mighty beast, Artaea, unnoticed, pushes Jeanette over the low-storm rail. At the girl's scream, the yellow giant looks upward, Caesar falling toward him. He reaches out, catches her in his great arms. Placing her gently on the ground behind him, he turns to face Toldo. With a thunderous roar, the savage brute charges. The fierce challenge of the bull apes rings loud and clear above the voice of Toldo, as Tarzan springs over the low rail and drops like a plummet straight to the back of the charging brute. The ape man's steel-muscled arms wrap themselves like hiss to the snake about the tally neck. His legs clamp the great body in a vice-like grip. Toldo's mighty talon paws beat and slash the air as he bounds around the arena. Headlong, he throws himself against the wall, crashes to the ground and rolls in a vain attempt to rid himself of the clinging ape man. On the balcony, Artaea and the white men watch spellbound. In the pit, the yellow giant with Jeanette in his arms does his best to avoid the blind rushes of the furious Toldo. Present-blade Tarzan's left hand whips to the knife at his side. The long, keen blade flashes in the sunlight. Again and again, the deadly steel plungers deep into Toldo's unprotected left side. With a last gasping roar, the great beast lurches forward, stumbles, falls to the ground. Tarzan leaps upright, places a foot on the huge, tawny neck. It's all over. Your fall didn't hurt you. No, no, I'm all right. Thanks to this... I am Hooker, son of Sean Rattar, of the city of Rattar. My life is yours, oh mighty killer of beasts. Who are you? I am Tarzan of the Apes, king of the tribe of Kerchak. For such service, Tarzan of the Apes, there can be no reward but equal service in return. Hooker shall not forget... Tarzan, Tarzan, the lion, he did not reach you. No, darno, not a scratch. Yes, and when he fell with the brute, we thought he had his Tarzan. Our rook, Mungo, look to Lanaka Wango. Bring those three to the council chamber. Tarzan, look at that woman's face. She's furious. And here comes Mungo with his guard. Oh, what awful thing is she planning now? Into the arena stalks the giant Mungo, followed by a crowd of yellow guardsmen. They surround Tarzan, Jannet, and Uka, the Rhetorian. As the three are hurriedly conducted out of the pit, through a long passageway, up a short flight of broad stone steps and into the great audience chamber, the yellow men regard Tarzan with ill-concealed admiration and not a little awe. Never before have they witnessed the killing of a lion by a man, much less a man of Tarzan's to them small stature. Always here to fore, the sport had ended with Toldo's first charge. As the group halts before the throne upon which Artea has again seated herself, Tarzan, Jannet, and the Rhetorian are thrust forward to stand with Dano, O'Rourke, Ashley, and Wang under the blazing eyes of the Queen. I joked, Tarzan, that was a fight. We thought for a moment... Silence! Tarzan of the apes, you have killed the mighty Toldo, guardian of the treasure caves of Tor. In the judgment of Pantu and Artea, the punishment is death. Yet I would tempt the wrath of Pantu and save you from his embrace. What say you?  Decide quickly, for my patience is like to be short. Well, Dano, I can see no other way out. May move you. Do you want to stay here, Tarzan, with her? That isn't the point. If I don't, you and your friends will be sacrificed or tortured. If only we had a chance to fight, it would not be so bad for us men. You men. It's always you men who must be making sacrifices for women. Uncle Jim and I are willing to take our medicine rather than have you give in to this woman's demand. But, Jannet, I am... Wait, let me finish. Uncle Jim and I will not accept your sacrifice. She's right, Tarzan old chap. We can't accept it, you know. It wouldn't be playing the game. Faith and you might include Terrence O'Rourke in the party. If Tarzan stays, I will stay. And you, Dr. Wong Tai? I... I have nothing to say, daughter of Tor. Dr. Wong! What's that? You are a wise and clever man, Wong Tai.  It shall be so. You shall not leave without him.  Mungo! Orongolanok! Take them away! Guard them well. Stay! Wong Tai, you will remain here. I have need of your wise counsel. Take the others away, Mungo. Aruk! Monsieur le docteur Wong Tai, huh? He escapes the wrath of the queen. Monsieur le docteur? I wish I knew that. The head and Chinese seems to be in the good graces of her ladyship. But to the devil with him. He wouldn't stick with us. I can't imagine what's got into Dr. Wong. He's been so fine throughout all of our misfortune. He never complained. He always took things as they came. Now, at the crucial moment... Don't you give it a thought, O'Cushla.  A cultured Oxford bread gentleman. It's impossible, Terry. I thought he'd be the last to work.  Yes. Yes, it is. It's pretty much of a shock. He's not of our kind, Jeanette. Forget it. Faith, and do you see where Mungo and his men are leading us? Out over the storm bridge to the war. I believe we're going to the little house we were in first. If that's the case, perhaps we can manage to get out somehow. Never fear, Uncle Jim. Atea won't give us a chance. She'll probably have more guards around us than she has in her palace. Nevertheless, I'm thinking Tarzan will find a way out. I hope so. Will you look at him, talk into that big fella, Hukaror, whatever his name is, as though he were a long-lost brother. Faith, O'Cushla. It was lucky for you that that big fella was in the lion pit when he fell in. I didn't fall, Terry. Atea pushed me over that wall while you were all watching the lion and O'Cushla. Jeanette, do you see... Are you sure of that? I cannot mean to moisel that she deliberately pushed you over. That's exactly what I do mean, Lieutenant. She meant for that lion to kill me, just as surely she intended for him to finish Hukaror. Say, sir, huh? The shulming lady's idea is to put us aside one by one until number Tarzan is left. She no doubt believes he will then accept her so generous offer. Do you think he would, Lieutenant? Leave be, O'Cushla. You know well he wouldn't take up with Atea. He has no more use for her than... Well, then I have... Exactly, Monsam and Muzel. Tarzan will not accept. Willingly or otherwise, I know him. Back in the audience chamber, Wong Tai stands watching Atea from between narrowed eyes. Slowly she rises from the throne, turns to the Chinese. You are surprised, Wong Tai.  No, honorable daughter of Thor. What? You do not think Atea was in earnest? I did not say that, my gracious queen. I said I did not expect to die by your most honorable command. And why not? Your life means nothing to me. Did I hear the illustrious Atea say that she had need for my counsel? Hmm. It may be that I have, we will see. Serve me well, Wong Tai, and you need have no fear for your life. Hail me and you perish in the arms of Panthu. My services or magnificent ones are ever at your disposal. Speak, O Queen. Where in do you seek counsel? Behind your calm exterior, Wong Tai, you are afraid. Why do you fear Atea? It is your beauty that makes me fear, O Queen. I see that men still know how to be guy-loss women with false words. You were afraid because my eyes were searching out your thoughts behind that inscrutable face. However, being only a woman, I forgive you the lie. I do not lie, O illustrious queen. You are more beautiful than... Than Jeanette Burton? Than the blush on her eyes, or the luster on a ming vase. You please me, Wong Tai, but enough of flattery for the present. You ask where in I seek your counsel. You shall learn at another time. It grows late. You will be given quarters in the palace near me. The freedom of Thor shall be yours. See that you do not abuse my confidence. Look to the nook, Atea. Whom mungo to qua? Arook! Go, Wong Tai. The guard will conduct you to your chamber. Accept my humble thanks, O daughter of Thor. Meanwhile, Tarzan and his companions crossed the long stone viaduct and gained the broad top of the outer wall. Hemmed in by their yellow guards, Tarzan and the giant uka walked shoulder to shoulder conversing in low tones. Behind them follows the closely guarded little group of captives. To them comes the far-off snarling voice of the distant jungle as night settles rapidly over forest and city. The ape man glances casually back over his shoulder, catches down O's eye and nods his head slightly. Arook, faites attention. Something is about to happen. Tarzan has just given me a sign to be prepared. Ready, we are, Lieutenant. For anything he starts, be gory. I'd give a good deal for me rifle or automatic. We'll do the best we can without him. Do not keep your eyes open, old girl. We're picking our cue from Tarzan. About to pass one of the square stone watchtowers on the outer edge of the wall, Tarzan stumbles, crashes headlong into mongo walking ahead of him. The giant chief topples over the low coping to the roof of a house inside the enclosure. Uka whirls on the astonished yellow man at his side. With a mighty shove, he thrusts the man into the crowd of encircling guards. Ashley and Orook leap forward. With a challenging cry of the great apes ringing out over the yellows of surprise and rage of the yellow men, Tarzan charges. Uka whirls.


Hello, I hope all of you are enjoying the holiday season. I'm Ann Marie Burkle, acting chairman of the Consumer Product Safety Commission. With the new year just around the corner, here's a resolution we can all make. Put safety first. Here are four tips to help make that happen. Number one, develop a habit for helmets. Did someone in your home receive a bike over the holidays? Not just for cycling, but for skateboarding, skating, hoverboard, and scooter riding. Secondly, climb safely. When using a ladder to take down decorations or to do chores around the house, make sure it's on firm, level ground, and always have a helper hold the bottom of that ladder to keep it steady. Number three, anchor it. If you are lucky enough to get a new dresser, bookshelf, or TV for the holidays, we encourage you to anchor it to the wall. Avoid placing toys up high that may tempt young children to climb up on that piece of furniture or TVs. And lastly, celebrate safely. Planning to ring in the new year with fireworks? Remember when it comes to illegal and professional fireworks, don't make, purchase, or go near them. And remember never to relight or pick up a firework that didn't go off. Let's all keep these safety tips in mind now and into 2018. And from all of us at the CPSC, have a happy, healthy, and a safe new year. Thank you.


Welcome everybody. My name is Darren Hart and I work for Intel's open source technology center. I work primarily on the Yachto project But today I'm going to be talking about how not to write x86 platform drivers I'm a core kernel guy by I Guess experience mostly I spent about seven years at IBM doing some real-time Linux work schedule or work if you saw a recent announcement about the Latest zoom Walt Destroyer with Raytheon in the US Navy that was some work. I was involved in for a while It's kind of coming to fruition. It's kind of neat to see but that was all core core stuff So a few Texas real-time Locking primitives and now with the minnow board that I was involved in I started doing some driver work So this is a bit of a different talk for me. So rather than talking about something that I've been doing for a decade I'm going to talk to you about something I've been doing for six months and some of you in here are probably more of an expert in specific things that I'll be talking about that I am so I welcome your input and very interested to see where this goes so I'm going to talk about some of the mistakes that I made and Some of the approaches that work better and also some of the gaps that we have in the current technologies and where We're looking to get those improved so we've got a few folks in the audience that I know of that have been involved with minnow as well and Just to help me get an idea for Who's composing the room? How many of you have written a Linux kernel driver? Okay, so next door they're talking Wow, that's great Okay, that actually answers my question. We'll just we'll just go forward then So this is what we're going to talk about today I want to talk about the term platform a little bit and then we're going to go in specifically to using the minnow board as an example for how not to write x86 drivers platform drivers specifically We'll go once we've gone through the initial phase We'll talk about the lessons that can be learned from that process and then we'll do it again the right way And then as I said, there's a few next steps few gaps. We'll go over those Throughout this discussion If you have questions, please raise your hand. We've got 50 minutes. I've got 35 slides. I Did 55 slides at the last ELCE and 45 minutes, so I think we'll be okay But I'm more interested in the feedback and the discussion. So please feel free to raise your hand It's probably best that we use the mic because it's here, but if it's awkward for you to get there I will repeat the question So first of all platform This has got to be the most singly overloaded term in the Linux kernel and industry that I've come across in a decade So out of curiosity What is platform do you want to want to offer up definition Tim? Yeah, right platform. All right anyone else it's actually a really good definition Tongue-in-cheek, but also very good So platform defines a lot of things platform can be a computer architecture. So we hear PC compatible. That's a platform It's a software framework and OS application framework at Intel. Of course Intel has to redefine everything So Intel ease me for a platform is the combination of a CPU and the chipset Of course, we're doing so sees now. So it's kind of the chipset in the CPU. So it could be the SOC or anyway Linux platform driver. So what is a platform driver a platform driver within Linux doesn't even mean one thing? So there's two plot two kinds of platform drivers in the Linux kernel You've got pseudo bus drivers and I'll refer to them this way But this is the actual documented if you go into documentation and read about platform drivers This is what we mean. We're talking about not a real bus This is something that gets enumerated separately from PCI USB But then there's also Drivers platform slash architecture slash all the stuff that really shouldn't exist at all board files So that's another definition. So we're going to call those pseudo bus drivers and board files rather than platform drivers and platform drivers Some other examples of platforms PC BIOS UEFI Android Just a little bit of room for confusion in this term. So we're going to be talking about platform drivers today And it's kind of a mix of all of these things but primarily the ones we don't want to write our board files And the ones we should be writing our pseudo bus drivers, but there's a lot more to it than that which we'll get into Okay, so the minnow board. Let's talk about why this got us here. There's a minnow board up here It's probably not very visible to everybody. Hopefully people can see those little green lights because those are going to come in to play during the discussion The minnow board is Kind of unique it is to my knowledge one of the first Completely open designs for an atom CPU of the current current set of generations The the board is built by circuit co a lot of design work by David Anders David Albert The rest of the team there at circuit co with fame with the Beagle board and some of those other popular community boards The the Gerber files the schematics all the hardware Design for the board is released under the creative commons license All the parts are available through distributors So you can literally download the designs order all the parts build your own board You can duplicate the design The the minnow board is a little different than some other designs out there just for conceptual awareness For folks is this is one of those things that can be a little confusing But the minnow board has derivative works as one of its primary goals What that means is you can download all this stuff make tweaks rebuild the board into whatever you want it to be Matter of fact circuit co will do that happily for you So that's the minnow board It is an atom e6 xx. It's called a tunnel Creek design It uses the the CP. It's a two-chip solution currently So it uses the the e6 xx CPU and the e g20 t which is the the pch which adds some additional The nick the GPIO a few other components like that to enhance the platform And then together as I mentioned earlier tunnel Creek plus top cliff equals Queens Bay Which Intel calls a platform Queens Bay is the platform. We're talking about building on top of so some Properties of the minnow board. It's 32 bit UEFI. It's one of the first Queens Bay platforms to make use of all of its GPIO So this is one of the things that actually was quite a bit of work for us to get this thing going So despite the fact that Queens Bay had all these GPIOs in the past hadn't actually really been used on on a platform in this way the UART is a little bit special on every release of this platform and The the ethernet itself This was interesting We ended up using a fi that was not quite as common in some of the original Intel designs Which threw us for a few loops that we had to fix up in the software So that's these are some of the problems that we're going to address but more fundamentally to the minnow board And this is this is where it deviates from a lot of Intel architecture designs that are out there today most Intel designs that I'm aware of Tend to have a static base board a static mother board a system board It doesn't change and then you expand that to do what you want with PCI PCIe USB Sata all of these self-discoverable connections The minnow board has an expansion slot Actually, I've got it covered up because there is a secondary board on the top here and it exports PCIe It exports Sata it exports USB all Self-discoverable, but it also exports I-square C spy can non-discoverable buses that need to be described in some way, but because they're here When people build out this board to do things with it the base board is dynamic So it changes one person's minnow board is going to be different from someone else's minnow board the way the GP Ios are mapped or it's going to be different from Instance to instance of how the board is used and that is sort of a fundamental fundamental shift for Ia designs All right, so let's talk about how do we deal with this for the minnow board on the GP IO So there's three sources of GP IO on the minnow board the CPU itself has got a core well Which means it's powered when the CPU is powered and it's got a suspend well Which means these lines are available when the device is in resume It's also got another 12 GP IO lines on the platform controller hub on the PCH or the chipset Both of these are PCI enumerated and the kernel already knows about them We fixed had to fix like three bugs or something in there Again because those GP Ios had not really been Heavily used in the past there were problems like it assumed only eight bits, but as you can see we've got You know 13 and 12 so you kind of actually access the upper bits of the things There's some simple things like that those are easy to fix the cinema stream to get pulled into the stable trees done But how are we using these so if you look on the front of the minnow here there are How many people can see this very well there are four buttons here And then there's a series of LEDs and two of those are just tied to GP IO So we've got four user buttons tied to GP IO and two LEDs tied to GP IO This is not exactly interesting driver stuff, but it is representative And so if they serve good exam serve as good examples to talk about something you can't really see here Is the PHY has a physical reset line and one of the GP IO's is used to Tag that reset line to be able to wake the PHY up and we'll talk about that when we get into the to the Ethernet side of things and then of course we took another eight GP IO lines and we sent them out the expansion header So that people can build GP IO lures the daughter cards for the top of the minute. I'll call I'll call the lures So how do we how do we make use of these well, there's there's There's something called a board file which I mentioned earlier It's what you'll find in the kernel sources driver platform architecture Splat These are are non enumerating drivers So you just load them with mod probe right and and they load up and they do their thing Hopefully they do some sort of validation as to I should really be running here But they don't have to which makes them a little bit dangerous and make some assumptions about hardware there Yeah, we'll we'll get into this a little bit more but there's some great examples in the kernel on how to do this and They're really easy to write so you basically open up a driver You do your boilerplate driver stuff You've got your net your exit and then during a net you reserve a few GP IO lines You create the arrays that you need to do for the platform drivers and by now. I'm talking about the good kind so So for example GP GP IO keys or leds GP IO those are examples of platform drivers and what you do is you you take a platform structure platform data structure and you fill it in with The things that are relevant to that so for the leds for example, you need to give it a GP IO line You need to give it a trigger And then you just create that platform driver and you now have a leds GP IO driver. You do the same thing for GP IO keys Export a few GP IO's to the CISFS and you're done board works. It's great How many people have written a board file? Yeah Okay So they look something like this, right? They're really easy to do Up here. I really I tried to get it to fit on here in the back. Can people read this font? nice So in green is where I tried to highlight the interesting bits so At the very top is the list of files and to do everything that we've talked about to do the GP IO to do the Leads to do the buttons to do the fire reset board detection type sit out the hardware ID It's 462 lines all of which have a header about like this at the top of four different files and it's that's it So first for me to do this for my single board. This was easy There are requests for example, you can request an array of GP IO's You can request a single GP IO I should have highlighted there says Mino Phi reset right and then I registered the platform device that I had populated for Mino GP IO leads And that has a compatibility to work with the leds GP IO driver and it loads up and it's done I even have my own little functions for the Mino board so Mino detect for example It'll go and check the SM bio string DMI board name Make sure it's Mino board and if it is it returns true and if it's not it returns false So now I can just include my header file that has the Mino detect Declaration in any driver that I want if I have to do special stuff. I just check am I a Mino board? Yes, do this stuff right great No And actually I knew this was wrong when I did it But we didn't have really a solid way to handle this the right way So I went ahead and sent it out anyway and got some really great feedback. So Linus W Gave us some really good feedback great cage, of course Anybody that discussed this with me on LKML in the room? No, okay, I can say whatever I want No No, honestly Really great responses, but mostly let's not add anything to platform drivers x86 splat. Okay, nothing goes there. No more board files, please Okay, so why why is this bad? As I said, they're not Self-enumerating so they make assumptions and even though I had a Mino detect in there where I checked the DMI string Not everybody necessarily would have and so if you do that, let's say you just grab a GPIO line set it to an Input or no. Yeah, you set it to an input No, how's that work? Anyway, you can fry your board. I can't think up here You could really do some damage to your hardware if you make assumptions about the way it's supposed to work You start randomly writing to registers because those are yours, right? Unless it runs on another system and then they're not So it's really bad design practice It doesn't leverage code that already exists Worse yet for the kernel maintainers that you're talking to it adds more files that they have to maintain So that doesn't tend to make them happy it also Impacted every one of those drivers there along the bottom so the PCH you are the PCH GBE the the LPCSech GPIOCH the GPIO PCH all of these drivers now had to be Mino board aware That's great for me, but it doesn't scale So how many of you have supported a board? Okay, so now we have 50 if this is my board do this if this is your board do that so This doesn't scale well and it leads to evil vendor trees. Oh So that's not how you do it and we'll get back to what does work But in the meantime, let's talk about some others that that highlight things like enumeration Identification device description so the Mino board you are this is actually something I had to solve for a previous device called the Fisher River Island to but because of the way this You are it works is the firmware gets to decide the clock at which the you are it is driven So it's PCI enumerated. I know what the device is. I know the vendor I know the product. I still have no clue what the clock runs at So how do I check? There's a few options There's already Existing precedent in the driver to check for the SM bio string So that's what the previous systems did before I added these systems So we continued with that. I actually ended up rewriting it to use the DMI match infrastructure when Greg said hey There's a DMI match infrastructure.  So we rewrote it and made it and made it do that But it's pretty simple you can see what the old one did checks the product name if it's Fisher River Island 2 Then you set it to the 48 megahertz clock if it's the Mino board Then you set it to the Mino board you are clock which happened to be 50 megahertz just enough to You know give you garbage on the screen I wouldn't recommend using SM bio strings on new designs. It's not bad it works It's not really necessary and there's better ways to go about it and we'll talk about those Now the ethernet is fun and this is a really good example of Some of the complexity about driver writing which is not immediately obvious to a core kernel guy And I'll talk about that and in a little bit in more detail But what some summarized up here these are the things that we had to do special for our special thigh Basically There's two two things that are special about the fight first of all it's narcoleptic So it goes to sleep every opportunity it gets you pull the cable out it goes to sleep I'm sure that's great for some reasons, but it was really frustrating for us. The other thing is a lot of fies have Strapping involved which will allow you to either Use a two nanosecond clock delay in the traces on the board meaning you route the traces just so So that it takes some time for that signal to propagate or you can force it to use a software delay inside the fire This is this is technical stuff about the way max and fires work Is everybody comfortable with the difference between a Mac and a five because that's important today Okay, so worth covering so the Mac talks all of the Okay, somebody can describe this better than me But I'm gonna summit summit summarize it like this the Mac does all of the sort of digital aspect of the networking This is where the ethernet frames go. This is how we order the bits This is this is what it looks like and then the fire takes that and pushes it into the real world Okay, okay, so You can use various fies with a Mac. They don't necessarily have to be matched up But that doesn't mean that the drivers are necessarily aware that you can match them all up differently A fire hangs off the Mac and it can communicate over something called our gmi I and you can talk to it and say Hey, which fire you and it says oh, I'm this ID and say okay. I know how to talk to you These are the things we need to do in order to talk to this fire First of all we got to flip the the five reset line that we talked about so that's what the top four lines are doing Right, we just hold it low pull it back high wait. Okay. It's awake. Let's move forward The next block is to configure that two nanosecond delay. This is really easy You set the register you read the register you set the flag you write the register done Then you do it again for to say disable hibernate because I don't know when the same is going to sleep again And basically I just want to keep the thing awake so that I can use the the network right now This is not the ideal way to do this but Again set the register read the register set the flag right the register basic stuff The first patch we had to do this took these three blobs and then they stuck them in a knit probe and fi setup Done it works for my board doesn't work for anyone else's board How do I detect that I'm running on a minimal board? How do I make this acceptable to David Miller, right?  So it's not talking to you So you don't know who it is because it's not responding over our dream. I Okay, so we need another way to identify the platform. We could use SM bios and that would have worked We could use device tree But pulling in device tree onto an x86 board just for the fi It's kind of doesn't really seem right Could it could have used a CPI except this is a PCI enumerated device and it's already got all the infrastructure in place for PCI I've learned later. Actually this this could have worked. We could have used a CPI to do this But something I didn't know about was a PCI subsystem ID. So in addition to a PCI vendor ID and a PCI Product ID, there's also such thing as a PCI Subvendor ID which also subsystem ID which also gives you a vendor and a product for a subsystem Which means I took this chip from Intel. I put it on my board and now I'm treating it a little bit differently So here's my ID. This is really cool It took me a couple of months to find out track down all the people that I needed to track down to actually get an ID Assigned so if you're going to start working with an Intel device And you want to do some derivative work with a PCI device get yourself signed up for the PCI So it's cheap. You can get your IDs manage your own IDs save yourself some time This is really great now now when the miniboard device probes It sees the circuit co subsystem IDs and it knows which device it is So now what do we do we could we know we have three things that we need to do we need to wake it up We need to set the two nanosecond clock delay and we need to disable hibernation Some of those can actually be abstracted So rather than saying if I'm a miniboard do this if I'm a miniboard do that if I'm a miniboard do this in several places What if we were to have a platform in it structure? So now there's a little blob for the miniboard or any other device that wants to use this that is a little bit special And it can just set up do I need to nanosecond clock delay because this is not a miniboard specific thing That's a standard thing and someone could use this phi and not need it Or they could use a different phi and not need it So does it need to nanosecond does it need to have hibernation disabled and do you need to do anything special to initialize it in The first place so now we can make one of those structures for every device that uses this So now we we've been able to do something a little more generic So this is how we'd go about that so at the top is the priv data for the miniboard specifically So clock data true hibernate true platform in it function callback right so it calls that during in it Then we set up the PCI device table and so in green there you can see the delta right below it is the old one Right that was for the old Intel And you'll notice the vendor and device are the same for two blocks It just adds the sub vendor and the sub device So now we switch on that and we identify it and then we just create Yeah, I didn't flush them out for you because you already saw the code earlier in the bigger blob Right, so there's the three functions down below the platform in it, which does the GP IO Flip the clock delay and the hibernate so there's our three functions and That basically works okay But what about the mac so The mac has typically max typically have an ee prom and on the ee prom you can store various things including your ethernet address e problems cost money and A lot of hobbyist boards will just use one of the locally allocated Max right iEEE whatever that's called iEEE locally locally allocated. There's a little block that you can use for this Problem with that is if you have a lot of these boards on a network, obviously they will collide because they're eventually they'll be conflicting on max and The the the people we were working with with an intel thought, you know, we really should not be doing This for for an intel board. It's it's not going to be what people are expecting of an iA board So let's go ahead and get some max and do this right But we still didn't want to put an ee prom on the device keeping the cost down was really important And we just couldn't we just couldn't justify the ee prom So we went through some various ways of doing this. So so how do you store a mac? We actually got to the point where we said well, we've got the firmware We we could just stick it in a certain region of the spy flash and then you could go read it But while that's fairly doable from firmware. It's actually a lot more complicated from the os than you might like to think Well, okay, if the firmware knows it we're running a 32 bit efi firmware EFI firmware variables are actually really well suited to storing hex strings And we actually had a patch that did this we stored it in an efi variable If you were on the miniboard you loaded that efi variable. There was your mac Ethernet adder as you loaded it We would have definitely received some criticisms of it. I wasn't looking forward to sending that patch to david miller But what eventually at peter anvin had recommended this Typically the way the driver works as it boots up it reads the ee prom it finds the mac it sticks it in the pc i configuration register Well, there is no ee prom. So that read fails But that's okay because now what we can do is before we booted in the firmware We read it from the location on the spy flash, which was easy to do in firmware And then we just cram it in the pc i register from firmware So when we boot up it goes ahead and looks at the ee prom it doesn't find it it goes back It's got a valid one in the pc i register already And we didn't have to make any driver changes So that was great. If you don't have to do anything at all to your driver to support your device. That's That's the best way to go Okay So we've had a few successful changes the uart the mac the five those all worked The gpio was a disaster. Um, so let's talk about what we learned a little bit. Okay, so Does anyone have any questions this point? Yeah How do you mean So there is a tool on that we ship with the firmware that allows you to set the mac address again But if you did want to change your firmware you you certainly can but you would be responsible to populating the PCi register with the mac address. However You choose to store it, right? That would that would just be one of the requirements of your firmware So platform has become a pretty important thing for ia boards As something that is a block upon which you build other things the less you change it the more reusable it is Um a good platform reduces time to market for people building derivative works of your of your product and x86 is actually a really strong platform And so as driver riders it is our responsibility to uphold defend and continue that platform So we do not fragment it. We do not create evil vendor trees Right we we do this is this is how we should be doing this We preserve the platform So I mentioned something about complexity. So as a core kernel guy, I spent most of my Kernel development looking at really small sections of code and how they related to other really small sections of code Lots of them at a time hundreds of threads. How how do how do these parallel Algorithms run together. Does the locking work? Do you have my memory barriers in the right place? This was brain bending complexity for me. It was a lot of work and it was it's a lot of fun When I start if you start looking at drivers you take any one driver you take any one function and you look at it and it's Dead simple right read the register set the bit write the register Really simple stuff until you back out a little bit And you start to realize how all these devices interact with each other How many classes of devices there are how they enumerate? Um, it actually gets really complex as you back out and look at it from far away So the complexity of core kernel development versus driver development is inverted Great curl Hartman once said that a great dry. I don't know if he said software developer if he said driver developer But I think we can say It's true for a driver developer One of the best thing one of the things you want to look for in a great driver developer is organizational skills And I think that is especially true with drivers as I look at the complexity Of the all of the subsystems put together And greg has done a phenomenal job Organizing drivers and and everyone that works with him and it sounds like a lot of you. Um, so I was really impressed actually. I think it's um pretty clean code so On the front end this was this was something that we learned working with circuit code So this is the intel's yachter project folks the UEFI team that worked with us with circuit co together as we built this board one of the things we learned is that Typically the way ia products are designed. I but when I say ia I mean intel architecture Typically the way ia products are designed is there is a single reference design And then lots of companies take that single reference design and they make a product from it But they don't deviate very much from it Meaning they don't go out and use the cheapest fi they could find that suited their needs Or the one that they could get Quickly or the one that they could get in the quantities that they needed They use the one that we used in the reference design So if you have the opportunity to influence the design of the board before you start writing your drivers consider what the drivers support already And if you can select a part that already works with the drivers, that's a great way to go In the case of the ethernet on the minnow board one of the problems that we had was That particular driver probably could have been written better in the first place Probably could have used philib Which it doesn't use it should use and we have somebody volunteering to actually Migrate the changes that we made to make the driver use philib and incorporate the changes that we made He's doing that as a side project just to contribute. I think that's great Um Yeah, so if you have an opportunity to influence the design spend the time to research How the drivers that you plan on using already work and what they support Um, do they need special layout and configuration? For example, should you go ahead and run that long trace to get your two nanosecond clock delay between the tx and the And the output on the fi Is it okay, so maybe you can't do that, right? I didn't realize it was quite so long Um But those are some things to consider So identification and description As we as we started looking through all those drivers. There were two things that really came That this really boils down to is how do you identify your device and how do you describe your device? You can identify it in a number of ways that we talked about pc i provides vendor product subsystem IDs You've got firmware description either via acpi the device tree You can do s and bios there's probably some others um, but The those are the basics. Um, and then how do you describe it? So pc i of course has got register blocks for every single device and it's all there in hardware for you Um, and then there's big tables about what all of that means Um, it can be hard coded by id which is what we saw with the board files where Well, not necessarily the board. Well, anyway, you can hard code it in the driver But the problem with hard coding it in the driver is it's not particularly flexible So one of the things that I mentioned on the miniboard, right? You've got these leads and these buttons So the leads do things like run a heartbeat show you mmc activity stuff like that Well, what if I didn't want to show the mmc activity of mmc zero? I wanted to show it of mmc one that is the device that I added to my lure Now I have to change the kernel driver to do that Or at least by default. Yeah, I can do it through ssfs But it's going to boot up showing the wrong thing and maybe I care about what it's showing during boot um well Right, so you can describe it in firmware and on an x86 system. They typically have acpi already So you could try and take acpi and you can marry it with device tree and you could try to Cram them together onto the system and get them to work and you could do it But should you do it? I don't want to spend we could spend the next hour talking about device tree We could spend the next three hours talking about acpi and device tree. We could bike shed on this all day um, what i'm going to say As my stance from the experience that I had the people that I spoke with this is what I believe to be the right thing acpi and device tree try to accomplish some of the same things and it's not going to be easy or clean to take those two things and try and cram them both in the driver's seat so Really what I think we need is a way to be able to say hey firmware, whoever you are I need this device property Give it to me now if you're acpi give it to me this way if your device tree give it to me that way I'm seeing some skepticism. Let me show you what we've got working now um, so The biggest lesson I think about this is when when we're focusing on a board and we're working to get it out It's really easy to think about our delivery dates and all of that. It's not just about you When you're writing a device driver, you're contributing it to the linux kernel It's going to have to be maintained by people It's going to be used by your customers to do other things. Do you want to lock your customers into a specific kernel version? There's a lot of really good reasons to not write board files Do you want to make these things as flexible as possible as easily maintained as possible and um, Yeah, actually, I think that that sums it up um And of course linux decided yesterday or two days ago to go ahead and re-emphasize that for us So I had I got to add that slide this morning. So thank you linux All right, so let's take another approach to looking at the gpao drivers for the miniboard How how could we do this in a way that might be acceptable upstream? By the way, all the other drivers for the miniboard are now in 3.12 um The gpao drivers are not So from the lessons learned we want no device. We want no board files Matter of fact, if we could add no new files at all that reduces long-term maintenance reuses the most code that would be ideal um And then let's continue to support the platform on ia we have uef i On i'm sorry on the miniboard. We've got 32 bit uef i and on ia systems. We tend to have acpi So we're going to take a look at how can we do what we want to do with acpi Is device ring option sure it could be made to work So identification and description, what does acpi 5 do today You can create hids readily hardware hardware ids, right? So there it's it's Enumerable, it's actually very easy to take acpi bindings and add them to a pc i device so you can get added configuration that way um ACpi already knows about as as a 5.0 can already describe gpi. Oh, it can describe Pins it can describe interrupts It can describe the address and ranges and things like that what it does not do is provide a standard mechanism to be able to give you arbitrary device properties And i said standard mechanism. Can it be done? Yes apple does it now They have device specific methods for example that they Query in a certain way it sends them back a buffer for how big the result is and then they Send another query and then they get the big buffer back from acpi and then they do whatever they want with that It works, but it works in a very limited environment and it's not generally safe Is the summary again, that's probably something we could talk about a lot So in the next few slides i'm going to go over how we went ahead and made this work on the miniboard with acpi In a way that we're hopeful will be acceptable into the standard And acknowledgements to everybody here That had a lot to do with making this work wrote some of the code into acpi Did a lot of the brainstorming to help make this a reality so I want to make sure that everyone sees that the following slides are not all my work. It's Taken in with a lot of input from these folks Okay So a dsdt, um, I forget the d. I think it's device, but uh system descriptor table This is the big blob that you can dump out of any system running acpi with the right with with the iacpi tools You can just dump them out So with acpi 5 as it stands today, we can do something like this acpi is a heavily scoped Sorry asl is a heavily scoped language And what you're seeing here in green sb pci zero lpc. So this takes us down on the p on the system Bus the on the pci on pci zero. There's a low pin count device. It already knows about this So we're just going to scope it to there And now if we go below that we're going to create our own hid for the purposes of the demo. We're calling it minnow three here And then We're going to set up a couple of gpio resources So in this case, I want to take suspend line five and suspend line six And I want because I want to use these as the two gpio lines that are driving my leds So I've set up 10 and 11 here But once I've sent that up to the kernel I wouldn't necessarily be able to do anything with it because I don't know what the trigger is I don't know, you know, if these were gpio buttons. I don't know what the key codes are Right. These are all things that you can do today with the vice tree Really easily couple of lines you send it in right and the the platform drivers know how to use it Well acpi has something called a package And a package is basically a typeless array and you can use any kind of type that you want strings integers additional packages what It seems like we really want for device description is a dictionary You basically want a label and some data And it should be in received in some standard way that You you can readily parse it. You can readily validate it that it's what you want So we could just do A dictionary that would be just a you know string value string value string value And that you could make the code parse that and use it as a dictionary But if you wanted to add a little bit more structure to it If you wanted to make it a little more formal you could create a package of packages Which has each package is a tuple All right, and you've got a you've got a label and a value Um, so here's an example of that in the middle there So you've got string hello world number gives you 10 list has a package of one and two integer one and two um so if You wanted to throw that into acpi you could create a method called say properties And you could create a package and return that package that had a set of key value pairs But it really needs to be standardized So we should use a reserved word in acpi So we could come up with something reserved reserved words in acpi. I'll start with an underscore so You could have for example an underscore prp method, which would be the properties method Um, and it would look something like this So you'd have the device again. We're in the same scope system bus PCie zero lpc same device. This is leds, right? So up here in here, you would also have the gpio description that we had on the previous slide Just adding to that the prp method and then here's a dictionary that returns label um, so for instance with um with gpio lines It's generally helpful to be able to identify them and in sys kernel GPio no sys kernel debug gpio It'll list the name for each gpio line. So it'd be great if we can label those right So you can do that here on that first line. You just say label I don't want it to be minnow led zero minnow led one and then for The triggers I want to use heartbeat and mmc zero and then there's some other arbitrary Excuse me arbitrary properties that you need for this particular platform driver So you add that to your dsdt you compile the dsdt And then the only thing you need to do is add your ACpi hids to the acpi platform dot c and that's what's being done there. You add minnow two and minnow three This is yeah with this one or Okay, I think I okay, so the question is How how do these changes get onto the board so that you can use them? I think you're asking What is the equivalent to the lib firmware flattened device tree thing, right? Okay um That Is not a gap that I thought I didn't think it was a gap and then I found out it kind of is a gap and It's not a big gap though The way it works currently is you can you can take out the device You can take out the dsdt then you modify it and then you replace it And you can do that one of two ways you either compile it into the kernel Or you can set it up in an initial ram disk The way it should work is you should be able to Use what's called an ssdt, which is a secondary system descriptor descriptor table And as long as that augments information, this is in the acpi spec as long as that augments information not replaces it You can layer them right the The the the fact is because we haven't been doing this the tooling in the kernel today doesn't allow you to Augment it only allows you to completely replace the dsdt Um, that's a gap that needs to get fixed five minutes. Okay So In order to use this information We have to set the we have to set the hardware id so that the device drivers can recognize them And then we have to set up a ACpi parsing function So if you were to take a look at the leds gpio or their gpio keys You will see an of parsing function which reads device tree. So we add one that reads acpi And basically you Look and see which one you have and then you pop you basically just populate the platform structure That's empty and then you create your device with that and that's it it it parallels exactly how The open firmware model works and the acpi model works Okay So once you've done that in the acpi properties driver, then you augment your ledge gpio driver or your and I just meant This is actually what I just mentioned So you can see here I'm going to walk away for a second So that was one of the the strings that we had set in the acpi properties function So it works just like it does in device tree. You say hey, I want that function and I need You know these many of them and it reads an array and it sets it into the array and then you walk through the platform device Which has an array of of leds and it fills them in it's pretty straightforward um, and with that So there's the min and board. It's running 3.12 orc 5 right now and if we were to Watch uh debug gpio Um, you can see that we pulled in all the labels So you've got them. We did it for the buttons. We did it for the lads. We did it for the fi reset So they're all there. Um, and as I i'm going to push the wrong button. I know it Yeah, exactly So you can see Right those have been mapped into the driver They're working and if you look closely here um You'll see an le view that's blinking and so that's basically the heartbeat. So we've set up the trigger for the heartbeat um In the future i'm going to cut this a little bit short. I'm not cutting a lot off, but um, let's go to next steps there um There's a few things left here to be done the prp method needs to be formalized We really need one more layer of abstraction rather than having every device driver Have to say this is how you do open firmware parsing. This is how you do acpi parsing should just do device property collection I want to I need this property for this device if i'm open firmware. I'll go over there if i'm acpi I'll go over there. I'll collect the information. I'll make it work. Um So that that's been discussed on lkml. Um, there should be some more talk about it today at kernel summit There was another discussion at linux plumbers Um in new orleans about a month ago and this seems to be generally accepted as a good way to go So there's more detail that needs to be discussed, but it seems to be going in the right direction One thing you may have noticed Adding the mino 002 mino 003 ids. That's kind of a pain especially for generic drivers So what we'd really like to have is a set of standardized reusable Keys and or ids and then you don't have to add them at all You just just like in device tree you would say this is compatible with this driver In acpi you would say this is hid You know Linux 0 5 6 0 and that's the leds. Yes You you could add as many as you wanted. Yeah Full for the single device I suppose you could I don't Right, I don't see any reason why you couldn't do that. Um because you would just add to Yeah to the acpi match table you would add the two ids And then as you parse those ids you would get different information and configure the device I don't see why that wouldn't work. It's not something I've explored fully though As was asked about firmware one of the other gaps here is we need to continue to make the firmware more open Because this will make it more and more useful to people to be able to rebuild Reconfigure changes ds dts in the firmware and go So, um, I am out of time I hope we'd have a few more minutes for questions towards the end But I do have time scheduled at a chalk talk at the intel booth and basically That talk is answer questions and go into more depth So if you have questions you want to talk about it more detail come see us at the booth And I hope this was helpful. Thank you


Coming up on DTNS, the U.S. National Weather Service is running out of internet while the U.S. might be suing Facebook for the wrong thing and an iPhone with a game warren Steve Jobs turtleneck clipping. This is the Daily Tech News for Thursday, December 10th, 2020 in Los Angeles. I'm Tom Merritt. And from Studio Redwood. I'm Sarah Lane. Oh, from Oakland, California. I'm Justin Robert Young. And I'm the show's producer, Roger. Yes, indeed. We are all here. And we were just talking about Netflix losing a board member to the Biden administration and Colin Kaepernick and getting some Ben and Jerry's flavors, all kinds of good stuff on good day internet. Become a member at patreon.com slash DTNS and get it. Let's start with a few tech things you should know. Last call, everybody. Last call for Adobe Flash. Adobe released the last update to its Flash player app. The update adds notifications to encourage people to remove the app. Beginning January 12th, 2021, Adobe will block all Flash content from running in the app. We'll pause for the amount of time your browser would crash when you loaded Adobe Flash in its honor. The last Flash dance. So U.S. Department of Justice announced a guilty plea from an individual who took part in the Mariah Botnet attack back on October 21st, 2016. That was the one that was aimed at Sony's PlayStation Network, but hit domain service Dine and ended up taking down large parts of the Internet for most of the day. Remember that? The name of the individual was not made public because they were younger than 18 at the time the infraction took place. France's data protection regulator CNIL has fined both Google and Amazon for violating the country's data protection laws. Google was fined the lion's share of 100 million euros. Amazon was fined 35 million euros. CNIL says that in the past, if a user visited either company's French website, then cookies were taking data from their devices without prior user consent. Both companies have since updated their website to require a user's consent before placing cookies, but they still have a deadline of three months from now to fix outstanding banner issues that CNIL says are not clear enough. CentOS is no more. Tuesday, Red Hat announced that the Frias and Beer rebuild of Red Hat Enterprise Linux or RHEL has been replaced by CentOS Stream, which Red Hat itself says is not a replacement. It's just we got rid of CentOS and we're also doing CentOS Stream instead. CentOS Stream will be a rolling preview of what RHEL is intended to be in a year. CentOS is a widely used distro and its users are not pleased with the change. CentOS co-founder Greg Kurtzer has announced he intends to start a project called Rocky Linux to offer seamless continuity for business operations on CentOS. Samsung opened pre-orders for a 110 inch 4K micro LED TV in South Korea with plans for a global launch in Q1 of 2021. The set has virtually no bezels with a 99.99% screen to body ratio, with an included majestic sound system that Samsung claims offers 5.1 surround sound with no external speakers. The AVXL folks probably have something to say about that. The TV also offers multi-view features, letting users watch up to four sources of content from different HDMI connections all at once. No pricing details were announced, but Samsung said smaller micro LED TVs are on the company's roadmap. A 110 inches TV? How do you get that shipped? Anyway, all right, let's talk a little more about a home finally for the robot dogs. Indeed, the Korea Economic Daily reports that Hyundai bought Boston Dynamics from SoftBank in a deal worth $921 million. The maker of robots like the Quadruped Spot and the bipedal Atlas, Hyundai will likely use Boston Dynamics for designing industrial robotics specifically for use by Hyundai Wea Machine Tool Subsidy and Hyundai Glovis, which operates logistics. Yeah, so I mean, the joke, the obvious joke is like, ah, we're going to get walking cars because Hyundai, they make cars and Kia Hyundai, the parent company, makes a lot of cars. And who knows, probably if Boston Dynamics ends up in the car part of this business, it'll be in making the cars, and that's where Hyundai Wea comes in because they make the machine tools and the auto parts and all of that. So I could see that happening. But the logistics and the shipping and the cargo operations and, you know, industrial uses in general is probably what this is going to be used for. And that makes a lot of sense. Boston Dynamics for a long time made really impressive robots that nobody quite was sure how they would market. Military applications have often been floated out there, but an industrial and logistics home for Boston Dynamics seems like the right place for it. Although let's circle back to that point. You know, part of why Boston Dynamics had such a troubled path at Google, one of its former owners, was the idea that it was trending toward being a Department of Defense contractor and selling weapons. Effectively, Google didn't necessarily want to be in that business. And so they spun it out. I wonder whether or not their applications at the Pentagon, either A, were just not there. And that's why you see it being bought and sold by SoftBank and now Hyundai. But if they are still interested in that, whether or not foreign ownership possibly clouds the possibility that that would be the case. Yeah, I'm very curious about that. I have no insight in any of these stories into what happens to any side of Boston Dynamics that does that. Obviously, Korea and the United States are allies. So there certainly is an easier way forward if that is going to happen. But I don't think it has to happen. I hesitate to say that because, man, military money, whoever turns down military money if they can get it, right? But there's a legitimate business for Boston Dynamics outside of that within Hyundai. Well, I mean, but I also wonder whether or not this is... All right, let me put it this way. When we first started talking about Boston Dynamics, oh, so many years ago, if you said, yes, and this, of course, will revolutionize how to put together a car, I think we would look at that as kind of undershooting what its promise was. That there are obviously a long, rich history of automation in car building. And maybe they're a part of that, but it's certainly not revolutionizing work or war in the way that when we first started seeing these quadruped robots, I think the ideas we're dancing in our heads about. Oh, keep in mind, though, Hyundai, we does more than just build cars. Hyundai Glovis is all about logistics and shipping and all that sort of thing. So there may be some military contracts within Hyundai that so many out there is like, Hyundai makes bombs, too. And I don't realize that, right? I don't know. So this is way more than just cars. I think that's the takeaway. The European Union announced a counterterrorism agenda, among which was a passage on encryption. Here we go again. The passage reads, the Commission will work with member states to identify possible legal, operational, and technical solutions to lawful access and promote an approach with both maintains the effectiveness of encryption and protecting privacy and security of communications while providing an effective response to crime and terrorism. Now, this really seems like the same old song and dance again, which is, hey, can we have a back door without any of the bad effects? And the answer is always no. But Natasha Lomas at TechCrunch points out that EU courts have regularly defined lawful access as targeted access and a back door for everyone is a bulk intervention. So this text seems to say like, we don't mean back doors. We mean, can we help them figure out some way to get access to these phones in another way? That's a good opportunity. Take a look at how law enforcement has been affected by the ever increasing encryption on personal devices for years now. Law enforcement agencies have warned of going dark if everyone uses encryption. And encryption has been getting stronger and more pervasive. So how are they doing? Is it going dark? No. A recent article by Susan Landau on Lawfare, which covers law and national security in partnership with the Brookings Institution, looked at a report by Upturn on mobile device forensic tools or MDFTs, mobile device forensic tool. 2000 of the 18,000 law enforcement agencies in the United States have purchased or have access to MDFTs from companies like Celebrite and Grayshift. 50 of the largest police departments law enforcement agencies have them. So the bigger you are, the more likely you are to have this. MDFTs not only crack into phones, but they also offer other features. So Celebrite's MDFT can compare facial images in the photos it finds on a cracked phone to a database. Other MDFTs use machine learning to classify text conversations by topic like family, money or drugs. So it's easier to dig in and find the evidence you're looking for. MDFTs cannot unlock all phones or get all the data every time, but they are very effective. What they also are is expensive. Las Vegas spent more than $640,000 on MDFTs since 2015. Miami spent $330,000. State law enforcement agencies in Michigan, more than a million dollars. Indiana State Police, $510,000. So it seems to me that the issue here isn't, in reality, we want back doors. We don't want to have to pay for the equipment we need to get access to the phones, because it is easier than ever to crack into an encrypted phone by a law enforcement agency. You just got to pony up and write that check. Yeah. So I mean, I guess my initial question would be, okay, if an MDFT is sort of the tool that we're looking at in a sense, like, okay, we don't want to have a total back door. That's a privacy issue. But in certain situations, we want to have the tools necessary to do this. How does the price come down? Does another company just come along and say, we'll do it for less? No, because much like all those contractors that we were talking about at the Department of Defense, this is kind of that little brother industry where you are selling to law enforcement. They are contractors for a business that will never go away, at least until they're, and even when their tech changes, these companies will continue to make money like that. And just to give you a sense of our previous conversation, like these numbers, a million dollars, a half million dollars, while gigantic to us, and I'm sure for Celebrate, they're making a very tidy business, those are amounts of monies that Northrop Grumman and Lockheed Martin at the Department of Defense level like step over. Like that's the kind of cash we're talking about here. Well, let's talk about space, shall we? Everybody loves space. The SpaceX Starship is a reusable, super heavy lift launch vehicle designed for long range space travel, including to the moon and possibly Mars. On Wednesday, Starship conducted an atmospheric test, which among other things showed that the ship can return properly from orbit. It passed that test and all the others, but it also blew up on landing and that got a lot of attention. And we got a call from somebody who knows a lot about this explaining why this is not a bad thing. Anthony Colangelo here from the podcast, Main Engine Cutoff. I wanted to provide a little bit of extra context for that Starship test that we saw from SpaceX this week. Starship is a next generation vehicle that SpaceX is working on to replace its Falcon family of vehicles. It is intended to be fully reusable. That means reusing the booster portion like we see them doing with the Falcon vehicles, but also reusing the upper stage that goes to orbit, which is Starship. To do that, you need to solve three huge technical problems. You need to be able to survive the heating that you experience when you come back into Earth's atmosphere from orbit. That is something that we've seen with not only the dragon vehicles, but the space shuttle. You might remember the heat shielding that that used. You need to be able to solve that big problem. The second problem is the aerodynamic capabilities to be able to guide yourself back to your landing pad. That is what Starship uses its little fins for. It guides itself back over the landing pad and uses those aerodynamics to flip itself to orient properly for number three, which is propulsively land on your landing pad using these high performance rocket engines. SpaceX is the best in the world at number three. They do it all the time with their Falcon vehicles. But this test this past week was the first time that Starship has shown off its aerodynamic capabilities and that part was a huge success. They were able to guide itself back over that landing pad. And as Elon Musk said, put the crater in the right spot. That was a huge success. It made it way further into the test than nerds like myself and a lot of you out there ever expected them to. So I'm excited to see this. And I'll be tracking it all over at mainenginecutoff.com. Yeah. They expected it to blow up basically. That part was not a surprise. I think Elon going into it said that it was a two out of three chance that it blows up. And this certainly came a lot closer to that one out of three chance than I think a lot of people, including Anthony, was expecting. But talk about just a visual that if you were to go back, let's go back to the time we were first talking about Boston Dynamics and say like, this is where we're going to be in rocket technology. You would be blown away. It just looks like a Douglas Adams novel come to life. This gigantic whale falling out of the sky sideways and then writing itself. The fact that it even gave us the big Jerry Brackheimer explosion at the end was almost just a further delight. Yeah. As the great philosopher, Nicki Minaj once said, starships were meant to fly. Let's do this one more time. Oh. Folks, what do you want to hear us talk about on the show? One way to let us know is in our subreddit, submit stories of vote on them at dailytechnewshow.reddit.com. Not a good week for Facebook. After two antitrust lawsuits launched against Facebook in the U.S. Wednesday, Germany's federal cartel office, the FCO, announced it's investigating Facebook's requirement that users have to have a Facebook account to log in on Oculus VR devices. The office believes the practice, quote, could constitute a prohibited abuse of dominance by Facebook. So it'll investigate the effect of the requirement on competition in VR and social network markets. And that's not the first case that the German FCO has against Facebook. But of course, the biggest case is the U.S. one, which are the U.S. two, depending on how you look at it, which advocates spinning out Instagram and WhatsApp into separate companies. And now that we've had a day to look at that case, here are some further things to consider. The U.S. FTC argues that Facebook acquired WhatsApp and Instagram to eliminate competition for advertising. It also allegedly restricted access to its developer platform to harm competitors. But it's mostly about did they eliminate competitors? The FTC claims WhatsApp could have grown to be a competitor of Facebook. That's always hard to convince a court is that, hey, this could have happened. They also think that Facebook cabined WhatsApp and didn't develop it, that it could have turned into WeChat if it had been on its own. Instagram also could have been an alternative social network outside of Facebook's control. These are hard arguments to convince a court. The acquisition of WhatsApp and Instagram were approved by the federal government itself in 2014 and 2012, respectively. And Facebook is using that in their arguments to say, look, you all approved this before. Why are you changing your mind now? They argue that the two apps are dominant now because of Facebook's investment in the intervening time. And that's something they can show a court, like, look what we invested, and that's why they're big now. They wouldn't have been big without us. Casey Newton at The Verge, however, predicts there will be no breakup, but that this case will have the effect of preventing future mergers with Facebook and to limit their acquisitions. That may be true. I liked with the economist Hal Hodson was saying on the Economist Podcast today, arguing that a better antitrust case against Facebook would have focused more on the fact that Facebook has made it more expensive to market products in social media. Because you pretty much have to go through Facebook to reach certain consumers. And that seems like a better target if you wanted to try to bring an anti-competitive case than Instagram and WhatsApp. Yeah. The idea that Facebook would be the mob bell and that they would split up WhatsApp and Instagram into their own baby bells, maybe baby faces in this case, would have you asking what if? What if they indeed went for this richer target? Which I do think you can show, and again, these cases are famously hard to prove. Like, America does not like to break up companies unless you can demonstrably show that there's actual harm to the consumer. And to me, the idea that there's not a larger social media threat to Facebook's dominance is immaterial compared to the online advertising thing. Because that is something that is genuinely affecting industries far beyond social media. Online advertising became the juggernaut. And the fact that they are keeping one gigantic marketplace and not having little sub-marketplaces like a Instagram or something like that, that might offer a little bit of a cheaper way to get your message out there, it not only affects social media stuff, it affects television, newspapers, display ads. The entire world of trying to let you know about a product is affected by Google and Facebook, which right now are the unquestionable dominant players in this space. You know, the whole idea of Facebook making WhatsApp and Instagram the successes that they are, don't really buy that. They were both bought because they were on the up and up of success. And I don't know what Facebook has really done besides, well, okay, Facebook has definitely offered a lot of features, take the whole Snapchat thing and bundle it into Instagram, say that yes, has had some success. Could Instagram as an independent company or a company that was bought by a company other than Facebook been able to do the same? Yes, probably. So I think that that's sort of a silly argument on Facebook's part. But yeah, to be able to prove that the companies were bought in order to kill them and be absorbed into Facebook, I don't know. I mean, call me crazy, but they are three different companies to me. Yes, Facebook owns them. Yes, you see a little bit more Facebook marketing on Instagram and WhatsApp as well. And even the Oculus VR stuff, it never really bothered me. But that was also when I first got my Oculus headset, it was sort of like, hey, do you want to sign up new account? You can also use your Facebook account. I was like, oh, that's fine. I'll use this one rather than my two other burner accounts. It didn't really bother me. I get why people don't want to be forced into doing that, though.  Man, I think they would have had a really interesting case if they had gone after the fact that, look, if you post something on Facebook and you want it to be seen, you have to pay Facebook extra for it to be seen through advertising. That is the big complaint that every business in the world has. And I'm not saying it's an abuse of their dominant market position, but I feel like you have a chance of convincing a court that it is versus like, hey, they're a conglomerate and they bought other companies. Yeah, okay, just ignore TikTok and Signal and WeChat and Telegram. Let's redefine their competitive space as Instagram and WhatsApp. It doesn't make sense to me. To me, the actual harm is you could have a parade of people that said, I migrated my community to Facebook because they told me this was the best place where I could connect with my fans and users.  Well, on the other side of it, maybe this is going to foster a little more cooperation amongst these companies so they avoid these sorts of lawsuits. Twitter is adding Snapchat and Instagram to its share menu. So you can add a tweet as a sticker in Snapchat or even Instagram stories. Features rolling out to Snapchat right now and will be available for Instagram in the coming days. Isn't it nice to see people playing along? The U.S. National Weather Service is proposing limiting users to 60 connections per minute on sites that provide weather observations, forecasts, warnings, computer model data, air quality information, something that a lot of us have been paying a lot of attention to in California as of late, aviation weather support, and ocean conditions. The NWS says it doesn't have enough bandwidth and we all have to stop. The data is accessed by companies that provide weather forecasting to customers from the apps you might use on your phone, tailored weather forecasting for markets like energy and agriculture. There are a lot of uses for this that the National Weather Service provides. StormVistaWXModels.com is a popular site for big companies, also for weather hobbyists. It believes it might have to cut its model runs by half. So why does the NWS have a bandwidth problem, you might say? Don't they just figure it out and fix everything? Well, the Weather Service says it has to plan to move certain components of a system into the cloud. In other words, it's not using CDNs or any other kind of cloud service right now. At a public forum... Yeah, I know, it's local storage. At a public forum, weather officials estimated it would cost $1.5 million to avert these rate limits that it's proposing. The Weather Service is accepting public comments. And I bet some of our DTNS users would have some on its proposal through December 18th. $1.5 million sounds big to me as a person who doesn't have $1.5 million, but it's nothing to an agency that has $5.4 billion in its budget. Correct. Spend the money, get the bandwidth, move into 2005, for goodness sakes, National Weather Service. Of course, you're running out of bandwidth. You're running all the servers yourself locally. That's just crazy. Tom, come on. I'm not totally sure how many apps use this data, but I have a weather app that does. Works great. Would like it to continue working. Almost all weather apps use some part of the data, right? Even if they don't get the correct pipeline. I think it's fascinating that it's taken to this moment for the show to take an unabashed political position. That this public resource needs to upgrade so we can all know whether or not it's going to rain. Just call the US government to spend money on the Weather Service. You're right. Darn it. They got me, finally. It's only $1.5 million. Come on. Come on. Seriously, you're not in the cloud. As soon as I read one of the things they're planning is to move the system to the cloud. Oh, gee. Okay. All right. Yeah. Or maybe we just don't need them at all. How about that? There. I gave another side. Well, then it's going to rain. You're not going to be prepared. It's going to be a whole thing. Well, we're not talking in the millions of dollars, but we are talking about something kind of expensive in this next story. Caviar. It's not that food caviar. It's a different caviar. This caviar is known for those sort of expensive fancy replacement casings for iPhones has announced the iPhone 12 pro jobs for collection in black and titanium, white and luxury gold versions dedicated to the 10th anniversary of the iPhone four, which you might remember was the last iPhone model that Steve Jobs presented himself. The cases feature an authentic fragment of jobs. His original famous journal act embedded in the Apple logo on the back of the phone. Also jobs signature. Think different. It's a whole thing. It's very lovely, but it's not cheap caviar says that the white model is made of composite G 10 covered with jewelry enamel and it's Apple logo is made of 925 sterling silver. The gold model is made of genuine 18 karat gold and it's Apple logo is crafted from 750 gold prices start at $6,499 for a 128 gigabyte black titanium iPhone 12 model and go all the way up to $10,140 for a black and gold phone 12 pro max with 512 gigs of storage. And that is your secret Santa everybody. Oh, I'm going to go into my porch right now. Thank you, sir. I'm definitely swapping this one out for the white elephant. It's been such a tough year for us all. Here's my question. Yeah. Who got the turtleneck? How? I think it's authentic. Okay. I'm curious how they got the turtleneck. Are you willing to spend anywhere between $6 and $10,000 for an icon to an icon, right? You obviously need to have a deep admiration. If not a hero worship for Steve Jobs to do it. And yet. And yet I can't help but imagine that he would hate this. Oh, yes. Absolutely. Like, are you willing to be haunted by the ghost of Steve Jobs? Like for the fact that I only had to spend a couple bucks for my Shohei Otani card with a game worn jersey fragment in the corner. Like why do I have to spend thousands of dollars for an iPhone? Oh man, especially when you're just going to cycle this one out. If you've got 10,000 to drop on this, you're just going to cycle this one out in a year anyway, when they come out with a new phone. I still want to know where they got the turtleneck. Yeah. And this is clearly a limited run because not that many people are going to buy it. But yeah. Is there like, are there 10 turtlenecks? Was there a closet that got auctioned off? Like what house? You don't make a turtleneck. Your fragment came because I'm not paying that top dollar if it's in like the small of the back. I really make a 30 of these. They may not even own the turtleneck. They may be a company that's slicing up the turtleneck and selling it off in different ways. If there's anyone out there who's like, I'm the person that finds this worth the money, please let us know. Because first of all, I applaud your bank account. But I also, I'm just very curious. Who is the target audience here? Much cheaper to get a game used, Joe Hayo, Donnie. Yeah. Black turtlenecks, buy one at the gap. All right. Let's check out the mail bag. Let's do it. We got some feedback from folks who live in Denmark because yesterday we were talking about Google search terms over 2020 and what ended up popping up in different markets. Soren who lives in Denmark says, just a quick note on the Denmark top searches on Google. You mentioned Rob Kugler as being the top search overall. Actually, it's just the top search result when the searches start with bedsteh, which means best. What's the best blah, blah, blah? Soren says, so we do like Rob Kugler, but we're not crazy. It didn't totally top our overall list. The actual top overall term in Denmark was also coronavirus. But the sorting of the list differs depending on the country selected. Little confusing, but love the show. Thank you, Soren, for gently correcting that. I was just going through Google trends and changing the country and didn't notice that the top left, which had been the top overall search on all the countries I looked at to that point, had moved to the second row. I went back and looked at it today and I'm like, if I'd been paying attention, I don't speak Danish, but I probably could have figured that out. So thank you, Soren, for that. But we got another email that says Rob Kugler are delicious. Frank wrote in and said, I can understand that you kind of wondered about the Danish people just staying at home making rumbles. Just want to say that if you've ever tried one, you would try to make it as well, even though I always just buy them from the bakery. Imagine a ball of leftovers from other cakes and Danishes mixed with rum essence and rolled in sprinkles. I mean, what's not to like with a cup of coffee or cocoa? It's perfect for the dark Nordic weather. And in Denmark, we've only had one hour of sun in the first 10 days. Oh, Frank, I hear that.  Yeah. No kidding. Shout out to the sixth largest country in DTNS lists or in a ship. Denmark. Thank you for showing up in our emails. I appreciate that. Also, thanks to everybody who sends us feedback. Sometimes you have information we never would have had otherwise. So thank you in advance. Keep it coming. Feedback at dailytechnewshow.com is where to send those emails. We also want to shout out a few of our patrons and our master and grand master levels today. They include Ken Hayes, Tony Glass and Jeffrey Zulks. Also, big thanks to Justin Robert Young for being with us today. Santa hat looks good on you, brother. What else is going on? Oh, well, thank you so much. I want to let everybody know that especially if you've got a big holiday drive coming up, you need an audio book. Either if you listen to my history podcast, raise the dead or not. Both seasons are now available as an unbroken, fully mastered audio book. Both contain exclusive season one focusing on the 1960 election is a bonus episode, a full episode that was not heard on the podcast and season two features an hour long conversation with Tom Merritt. What? All about how we researched the both seasons and what is in store coming up next.   Don't forget folks, holiday cards are on their way. If your address is in and correct, you should definitely get them by December 25th in the U.S. Maybe even in some parts of the world, worldwide it might be a little longer. If you missed it, don't be sad. We have digital versions already messaged to your Patreon email address and we have another offer for you. We're offering Patreon loyalty rewards. You can get a unique sticker, mug, t-shirt or hoodie every three months as long as you stay a patron. Each one has unique art from Lynn Peralta featuring the DTNS anniversary logo. One with Roger, one with Sarah, one with me. Get the details at patreon.com slash DTNS. And if you can join us live, we'd love to have you Monday through Friday for 30 p.m. We'll be back tomorrow with Shannon Morse and Lynn Peralta. Talk to you then. This show is part of the Frog Pants Network. Get more at FrogPants.com. I hope you have enjoyed this program.